我正在一个作曲家处理自动加载的项目中工作。
我有一个班级:
namespace App\Foo;
use MyCLabs\Enum\Enum;
/**
* @method static Bar MY_CONST()
*/
class BarFOO extends Enum
{
const MY_CONST = 'my_const';
...
}
我有一个基本的class_exists检查(实际上它是动态的,所以我不能直接调用Bar :: class):
$strClass = '\App\Foo\BarFoo';
var_dump(class_exists($strClass));
当类确实存在时返回false。
但是,当我执行以下操作时:
$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
因为文件系统区分大小写,所以找不到我的类文件。
但是一旦我使用了我的类静态属性,该类就在自动加载器中注册,这是不区分大小写的!
所以现在我要弄清楚如何检索正确的类名,但这是另一个问题!
感谢您的帮助,抱歉不要发布完整的问题!
答案 0 :(得分:1)
对于那些遇到问题的人,请注意案件情况。
在我的情况下(huhu)我的班级名字以几个大写字母(BarFOO)结束但我的字符串类名不是(BarFoo)
因此,在第一次尝试时,文件系统找不到我的类文件,因为它区分大小写。
然而,一旦我使用了类静态属性,不区分大小写的自动加载器能够找到我的类,由前一个调用加载!