Php 类_exists仅在调用静态类属性时起作用
我在一个项目中工作,composer负责自动加载 我有一门课: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 但是,当我执行
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