我有这样的事情:
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
吗?
答案 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));
}