php - 在 PHP 中从父类(super class)获取子类命名空间

标签 php inheritance namespaces

假设我在不同的文件中有以下类:

<?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/

相关文章:

php - 创建盲SQL注入(inject)漏洞

php - 如何在php中引用mysql配置文件

php - 逗号在for循环的第一个参数中起什么作用?

java - 如何处理WebDriver的PageObjects模式中的继承?

php 连接并显示 mysql 表 - LAMP 服务器

C++ 继承模板依赖类型

c++ - 为什么在多重继承期间我不能 dynamic_cast "sideways"?

c# - 找不到类型或命名空间 nvarchar - C#

php - 命名空间 - 移动到 src 目录时,composer 无法加载类

c++ - 在命名空间内声明和定义 - 不确定它是否有效,因为它是正确的还是偶然的