gpt4 book ai didi

PHP动态确定完全限定的类名

转载 作者:行者123 更新时间:2023-12-04 16:50:47 24 4
gpt4 key购买 nike

我发现通过使用 ::class ,我可以获得命名空间类的完全限定类名:

namespace NameSpace {
class Foo { }
echo Foo::class;
}
// echoes 'NameSpace\Foo'

但是我想不出用变量类名来做到这一点的方法。尝试将 class 关键字视为静态属性似乎行不通:

namespace NameSpace {
class Foo { }
$className = 'Foo';
echo $className::class;
}
// Parse error: syntax error, unexpected 'class'

有谁知道是否可以像我尝试的那样动态获取完全限定的类名?


我希望能够对来自当前命名空间之外的类执行此操作:

namespace ReallyLongHardToWriteNameSpace {
class Foo { }
}
namespace NameSpace {
use ReallyLongHardToWriteNameSpace\Foo;
class Bar { }

echo Foo::class; // echoes 'ReallyLongHardToWriteNameSpace\Foo'
echo Bar::class; // echoes 'NameSpace\Bar'

foreach (['Foo', 'Bar'] as $className) {
echo $className::class; // Parse error: syntax error, unexpected 'class'
}
}

最佳答案

您可以使用 get_class使用该类的实例:

<?php
namespace NS {
class Foo { }
$className = "\\NS\\Foo";
echo get_class(new $className);
}
// prints NS\Foo

请注意,要创建类的实例,我必须在字符串中使用 FQN,因此它可能根本没有用。

关于PHP动态确定完全限定的类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40409412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com