0
我正在編寫器處理自動加載的項目中工作。class_exists僅在調用靜態類屬性時才起作用
我有一個類:
namespace App\Foo;
use MyCLabs\Enum\Enum;
/**
* @method static Bar MY_CONST()
*/
class BarFOO extends Enum
{
const MY_CONST = 'my_const';
...
}
我有一個基本的class_exists檢查(在現實中,它是動態的,所以我cant't直接調用酒吧::類):
$strClass = '\App\Foo\BarFoo';
var_dump(class_exists($strClass));
返回假如班級確實存在
然而,當我做到以下幾點:
$strClass = '\App\Foo\BarFoo';
var_dump(class_exists($strClass)); // false
var_dump(class_exists(\App\Foo\BarFOO::class)); // true
var_dump(class_exists($strClass)); // true
然後同時它是完全一樣的第一個最後的var_dump返回true!
有沒有人有線索?
編輯
我編輯我的問題的答案不是猜測的! 其實我的字符串值不匹配原始的類名:
BarFoo // string value
BarFOO // Class name
因此,作爲文件系統是大小寫敏感的,我的類文件沒有被發現。
但是,只要我使用我的類的靜態屬性,類是註冊在不區分大小寫的自動加載器!
所以,現在我要弄清楚如何檢索正確的類名,但這是另一個問題!
感謝您的幫助和抱歉,不要發佈完整的問題!
不知道它會有所作爲(可能不是),但字符串類名始終是絕對的,所以引用該類的正確方法是「App \ Foo \ Bar'',沒有引導反斜槓。 – deceze
謝謝你們的幫助,我想通了,不幸的是,我錯過了我的班名以許多大寫字母結尾,字符串變量沒有結束的事實! – jiboulex
@deceze它在兩種情況下都有效,但我更喜歡你的方式 – jiboulex