Php 类_exists仅在调用静态类属性时起作用

Php 类_exists仅在调用静态类属性时起作用,php,composer-php,Php,Composer Php,我在一个项目中工作,composer负责自动加载 我有一门课: namespace App\Foo; use MyCLabs\Enum\Enum; /** * @method static Bar MY_CONST() */ class BarFOO extends Enum { const MY_CONST = 'my_const'; ... } 我有一个基本类(实际上它是动态的,所以我不能直接调用Bar::class): 当类确实存在时返回false 但是,当我执行

我在一个项目中工作,composer负责自动加载

我有一门课:

namespace App\Foo;

use MyCLabs\Enum\Enum;

/**
 * @method static Bar MY_CONST()
 */
class BarFOO extends Enum
{
    const MY_CONST = 'my_const';
    ...
}
我有一个基本类(实际上它是动态的,所以我不能直接调用Bar::class):

当类确实存在时返回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_转储返回true,而它与第一个完全相同

有人有线索吗

编辑

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

BarFoo // string value
BarFOO // Class name
因此,由于文件系统区分大小写,因此找不到我的类文件

但是,当我使用我的类静态属性时,该类就在自动加载器中注册了,它不区分大小写

因此,现在我必须找出如何检索正确的类名,但这是另一个问题


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

对于那些曾经遇到问题的人,请注意案例情况

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

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


然而,一旦我使用了class static属性,不区分大小写的autoloader就能够找到我的类,它是由上一个调用加载的

不确定这会有什么不同(可能不会),但字符串类名称始终是绝对的,因此引用该类的正确方法是
'App\Foo\Bar'
,不带前导反斜杠。谢谢你们的帮助,伙计们,不幸的是,我找到了答案,我忽略了这样一个事实,我的类名以许多大写字母结尾,而字符串变量却没有@deceze这两种情况下都有效,但我更喜欢你的方式
BarFoo // string value
BarFOO // Class name