Answers:
$id = constant("ThingIDs::$thing");
defined("ThingIDs::$thing");
$id = constant(sprintf('%s::%s', ThingIDs::class, $thing));
use
在文件顶部使用,然后使用该::class
方法神奇地获取FQDN,可以提高可读性。
使用反射
$r = new ReflectionClass('ThingIDs');
$id = $r->getConstant($thing);
您可以使用如下功能:
function class_constant($class, $constant)
{
if ( ! is_string($class)) {
$class = get_class($class);
}
return constant($class . '::' . $constant);
}
它有两个参数:
如果传递了对象实例,则推断其类名。如果使用PHP 7,则可以使用::class
传递适当的类名,而不必考虑名称空间。
class MyClass
{
const MY_CONSTANT = 'value';
}
class_constant('MyClass', 'MY_CONSTANT'); # 'value'
class_constant(MyClass::class, 'MY_CONSTANT'); # 'value' (PHP 7 only)
$myInstance = new MyClass;
class_constant($myInstance, 'MY_CONSTANT'); # 'value'
ThingIDs::{$thing}
吗?