获取未带命名空间的已执行静态函数的类名


Get class name of executed static function without namespace

在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));
}