在PHP中从静态函数调用get_called_class()
会给您函数的类名,包括从该名称空间外部调用的名称空间,似乎。
有没有一种方法可以在没有名称空间的情况下获得类名?
(显然我明白可以检查get_called_class()
返回的字符串并做一些hack的事情,但我希望有一种不那么hack的方法来做到这一点)
获取没有命名空间的类名
是的,你可以使用ReflectionClass来做。由于您的问题涉及到从静态方法中执行此操作,因此您可以像这样获取类名:
$reflect = new 'ReflectionClass(get_called_class());
$reflect->getShortName();
通过传递一个包含要检查的类的完整命名空间的字符串来使用ReflectionClass构造函数。
有一个类似的问题,我如何得到一个对象's未限定的(短)类名?然而,它并不是指在静态方法中执行此操作,因此示例将实例化的对象传递给ReflectionClass构造函数。
您可以使用:
/**
* Get the class "basename" of the given object / class.
*
* @param string|object $class
* @return string
*/
function class_basename($class)
{
$class = is_object($class) ? get_class($class) : $class;
return basename(str_replace('''', '/', $class));
}