class_exists仅在调用静态类属性时才有效



我正在一个作曲家处理自动加载的项目中工作。

我有一堂课:

namespace AppFoo;
use MyCLabsEnumEnum;
/**
* @method static Bar MY_CONST()
*/
class BarFOO extends Enum
{
const MY_CONST = 'my_const';
...
}

我有一个基本的class_exists检查(实际上它是动态的,所以我不能直接调用 Bar::class(:

$strClass = 'AppFooBarFoo';
var_dump(class_exists($strClass));

当类确实存在时,这将返回 false。

但是,当我执行以下操作时:

$strClass = 'AppFooBarFoo';
var_dump(class_exists($strClass)); // false
var_dump(class_exists(AppFooBarFOO::class)); // true
var_dump(class_exists($strClass)); // true

然后最后一个var_dump返回 true,而它与第一个完全相同!

有人有线索吗?

编辑

我编辑了我的问题,因为答案是无法猜测的! 实际上我的字符串值与原始类名不匹配:

BarFoo // string value
BarFOO // Class name

因此,由于文件系统区分大小写,因此找不到我的类文件。

但是一旦我使用了我的类静态属性,该类就会在自动加载器中注册,这不区分大小写!

所以现在我必须弄清楚如何检索正确的类名,但这是另一个问题!

感谢您的帮助,很抱歉没有发布完整的问题!

对于那些曾经反驳过这个问题的人,请注意情况。

在我的例子中(huhu(,我的类名以几个大写字母(BarFOO(结尾,但我的字符串类名不是(BarFoo(

所以在第一次尝试时,文件系统没有找到我的类文件,因为它区分大小写。

但是,一旦我使用了类静态属性,不区分大小写的自动加载器就能够找到我的类,由上一次调用加载!

最新更新