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