Php 获取不带命名空间的已执行静态函数的类名
在PHP中,从静态函数调用Php 获取不带命名空间的已执行静态函数的类名,php,Php,在PHP中,从静态函数调用get\u called\u class(),可以得到函数的类名,如果从该名称空间之外调用,似乎还包括名称空间 有没有一种方法可以在不使用名称空间的情况下获取类名 (显然,我知道可以检查get_called_class()返回的字符串,并做一些黑客行为,但我希望有一种不那么黑客的方式来做)在没有命名空间的情况下获取类名 是的,您可以使用ReflectionClass来完成。由于您的问题与从静态方法中执行此操作有关,因此可以按如下方式获得类名: $reflect = ne
get\u called\u class()
,可以得到函数的类名,如果从该名称空间之外调用,似乎还包括名称空间
有没有一种方法可以在不使用名称空间的情况下获取类名
(显然,我知道可以检查
get_called_class()
返回的字符串,并做一些黑客行为,但我希望有一种不那么黑客的方式来做)在没有命名空间的情况下获取类名
是的,您可以使用ReflectionClass来完成。由于您的问题与从静态方法中执行此操作有关,因此可以按如下方式获得类名:
$reflect = new \ReflectionClass(get_called_class());
$reflect->getShortName();
这使用ReflectionClass构造函数,方法是传递一个字符串,该字符串包含要检查的类的完全命名空间名称
还有一个类似的问题,但它并不是指在静态方法中执行此操作,因此示例将实例化对象传递给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));
}
是的,你必须这样想:
array\u pop(explode('\\',\App\Vendor\Foo::Foo())
@felipsmartins谢谢你对我的问题感兴趣,但如果你想回答这个问题,我想规则规定应该以答案的形式来回答,没有评论。也有人会复制此建议作为尽快回答…:)@felipsmartins我无意冒犯,但老实说,我不明白你为什么认为,你相信其他人会将你的评论复制到答案中,这是对这种用法可能不符合SO规则的建议的恰当回应。我知道你正试图为此提供帮助并向你致敬,但想象一下,如果每个人都在评论部分发布了一半答案,却没有解释其背后的原因,并期望其他人迅速介入并将其转化为真正的答案,会发生什么事。谢谢。我接受你的回答,理由是这是我所知道的最好的解决方案,而且它不够安全,不能被认为是黑客(以我的拙见)。如果被调用的类变大,一定要测试这个解决方案的性能。