假设我在不同的文件中有以下类:
<?php
namespace MyNS;
class superclass {
public function getNamespace(){
return __NAMESPACE__;
}
}
?>
<?php
namespace MyNS\SubNS;
class childclass extends superclass { }
?>
如果我实例化“childclass”并调用 getNamespace(),它会返回“MyNS”。
有什么方法可以在不重新声明方法的情况下从子类中获取当前命名空间?
我已经在每个类中创建了一个静态 $namespace 变量并使用 super::$namespace
引用它,但这感觉不是很优雅。
最佳答案
__NAMESPACE__
是一个编译时常量,意味着它只在编译时有用。您可以将其视为一个宏,插入的位置将用当前命名空间替换自身。因此,没有办法让父类(super class)中的 __NAMESPACE__
来引用子类的命名空间。您将不得不求助于在每个子类中分配的某种变量,就像您已经在做的那样。
作为替代方案,您可以使用反射来获取类的命名空间名称:
$reflector = new ReflectionClass('A\\Foo'); // class Foo of namespace A
var_dump($reflector->getNamespaceName());
见 the PHP manual更多(未完成)文档。请注意,您需要使用 PHP 5.3.0 或更高版本才能使用反射。
关于php - 在 PHP 中从父类(super class)获取子类命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2317343/