如何在不创建类实例的情况下获取类的完整命名空间?

时间:2014-07-17 08:35:01

标签: php class namespaces

我有这样的事情:

use Just\Some\Namespace\ClassName;

class A
{
    public static function doStuff()
    {
        echo function_name(ClassName);
    }
}

A::doStuff();

我想看到的是:Just\Some\Namespace\ClassName

整个想法是我希望获得一个类的完整命名空间,而不需要创建该类的对象。

我在线搜索,最接近解决方案的是this question中的答案。但是,这些都不是我需要的。

我可以使用这样的反射:

$reflectionClass = new ReflectionClass('Just\\Some\\Namespace\\ClassName');
echo $reflectionClass->getNamespaceName();

但是我必须指定命名空间才能创建ReflectionClass。如果我已经知道了,我就不再需要它了。


我可以在代码中替换function_name以获取Just\Some\Namespace\ClassName吗?

4 个答案:

答案 0 :(得分:2)

从PHP5.5开始,您可以使用class关键字进行名称空间解析

  

自PHP 5.5起,class关键字也用于类名   解析度。您可以获取包含完全限定名称的字符串   使用ClassName :: class的ClassName类。这是特别的   对命名空间类有用

答案 1 :(得分:1)

使用Magic constants __CLASS__

  

班级名称。 (在PHP 4.3.0中添加)从PHP 5开始,此常量返回   声明的类名(区分大小写)。在PHP 4中它的价值   总是小写的。类名包括它的名称空间   声明(例如Foo \ Bar)。请注意,从PHP 5.4开始 CLASS 有效   也有特点。在特征方法中使用时, CLASS 是其名称   

中使用的特质类

喜欢

echo __CLASS__; //   The class name. 

答案 2 :(得分:0)

试试这个

use Just\Some\Namespace\ClassName;

class A
{
    public static function doStuff()
    {
        echo function_name(ClassName::class);
    }
}

A::doStuff();

答案 3 :(得分:0)

获取给定对象/类的类“ basename”(没有名称空间)的最佳方法。

function class_basename($class)
{
    $class = is_object($class) ? get_class($class) : $class;

    return basename(str_replace('\\', '/', $class));
}