【问题标题】:Overwrite namespace usage in extended class in PHP覆盖 PHP 扩展类中的命名空间使用
【发布时间】:2017-02-16 08:57:12
【问题描述】:

覆盖扩展类中的命名空间使用

是否可以覆盖父类使用的命名空间而不重写扩展类中的函数?

为了澄清,我写了一个例子:

我有两个这样的类:

namespace one;
class hey
{
    public static function say()
    {
        echo "hey";
    }
}

namespace two;
class hey
{
    public static function say()
    {
        echo "ho";
    }
}

现在我在这个类中使用一个命名空间:

use one\hey;
class saysomething
{
    public static function main()
    {
        hey::say();
    }
}

现在我想扩展最后一个类:

class extended extends saysomething
{
}

extended::main();

在这个类中,我想使用命名空间“two\one”而不覆盖函数,这可能吗? *如果是,如何? 感谢您的宝贵时间。

【问题讨论】:

  • 不明白是什么问题,重写什么函数?
  • use one\hey as heyone;?
  • 在“saysomething”类中,我使用了命名空间“one\hey”。我不想改变它。在下一个“扩展”类中,我希望使用命名空间“two\hey”。
  • 这是必须明确使用依赖注入的情况。根据您的需要,您可以从命名空间一或二注入类..
  • 啊,我明白你现在在说什么了。您正在尝试某种条件继承?

标签: php oop inheritance namespaces


【解决方案1】:

您必须在 extended 类中定义 extended::main(),如下所示:

use two\hey;

class extended extends saysomething
{
    public static function main()
    {
        hey::say(); // will call two/hey::say method
    }
}

命名空间在这里无济于事。

【讨论】:

    猜你喜欢
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 2012-01-08
    • 2014-01-25
    • 2014-09-18
    • 1970-01-01
    相关资源
    最近更新 更多