Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取不带命名空间的已执行静态函数的类名_Php - Fatal编程技术网

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

Php 获取不带命名空间的已执行静态函数的类名,php,Php,在PHP中,从静态函数调用get\u called\u class(),可以得到函数的类名,如果从该名称空间之外调用,似乎还包括名称空间 有没有一种方法可以在不使用名称空间的情况下获取类名 (显然,我知道可以检查get_called_class()返回的字符串,并做一些黑客行为,但我希望有一种不那么黑客的方式来做)在没有命名空间的情况下获取类名 是的,您可以使用ReflectionClass来完成。由于您的问题与从静态方法中执行此操作有关,因此可以按如下方式获得类名: $reflect = ne

在PHP中,从静态函数调用
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规则的建议的恰当回应。我知道你正试图为此提供帮助并向你致敬,但想象一下,如果每个人都在评论部分发布了一半答案,却没有解释其背后的原因,并期望其他人迅速介入并将其转化为真正的答案,会发生什么事。谢谢。我接受你的回答,理由是这是我所知道的最好的解决方案,而且它不够安全,不能被认为是黑客(以我的拙见)。如果被调用的类变大,一定要测试这个解决方案的性能。