Get child class namespace from superclass in PHP(从 PHP 中的超类获取子类命名空间)
问题描述
假设我在不同的文件中有以下类:
Assuming I have the following classes in different files:
<?php
namespace MyNS;
class superclass {
public function getNamespace(){
return __NAMESPACE__;
}
}
?>
<?php
namespace MyNSSubNS;
class childclass extends superclass { }
?>
如果我实例化childclass"并调用 getNamespace(),它会返回MyNS".
If I instantiate "childclass" and call getNamespace() it returns "MyNS".
有什么方法可以在不重新声明方法的情况下从子类中获取当前命名空间?
Is there any way to get the current namespace from the child class without redeclaring the method?
我已经在每个类中创建了一个静态 $namespace 变量并使用 super::$namespace
引用它,但这感觉不是很优雅.
I've resorted to creating a static $namespace variable in each class and referencing it using super::$namespace
but that just doesn't feel very elegant.
推荐答案
__NAMESPACE__
是编译时常量,意味着它只在编译时有用.您可以将其视为一个宏,插入的位置将用当前命名空间替换自身.因此,没有办法让超类中的 __NAMESPACE__
来引用子类的命名空间.您将不得不求助于在每个子类中分配的某种变量,就像您已经在做的那样.
__NAMESPACE__
is a compile time constant, meaning that it is only useful at compile time. You can think of it as a macro which where inserted will replace itself with the current namespace. Hence, there is no way to get __NAMESPACE__
in a super class to refer to the namespace of a child class. You will have to resort to some kind of variable which is assigned in every child class, like you are already doing.
作为替代方案,您可以使用反射来获取类的命名空间名称:
As an alternative, you can use reflection to get the namespace name of a class:
$reflector = new ReflectionClass('A\Foo'); // class Foo of namespace A
var_dump($reflector->getNamespaceName());
有关更多(未完成)文档,请参阅 PHP 手册.请注意,您需要使用 PHP 5.3.0 或更高版本才能使用反射.
See the PHP manual for more (unfinished) documentation. Note that you'll need to be on PHP 5.3.0 or later to use reflection.
这篇关于从 PHP 中的超类获取子类命名空间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:从 PHP 中的超类获取子类命名空间
基础教程推荐
- 在多维数组中查找最大值 2021-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01
- 超薄框架REST服务两次获得输出 2022-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01
- XAMPP 服务器不加载 CSS 文件 2022-01-01