有没有办法强制php在当前命名空间中使用类?

时间:2017-03-03 17:48:51

标签: php namespaces

我有一些使用彼此功能的类。以下面的例子为例:

namespace app/myclass;

class FirstClass
{
    public function getSecondClass()
    {
        return SecondClass::instance();
    }
}

namespace app/myclass;

class SecondClass
{
    public function getFirstClass()
    {
        return FirstClass::instance();
    }
}

现在我在另一个名称空间中有子类,如下所示:

namespace front\myclass;

class FirstClass extends \app\myclass
{
    public function someMethod()
    {}
}

namespace front\myclass;

class SecondClass extends \app\myclass
{
    public function someMethod()
    {}
}

当我使用子类中的instance()方法时,它将从父类返回实例。是否可以从相同的当前命名空间返回它?

示例:

$myclass = new \front\myclass\FirstClass;
$instance = $myclass->getSecondClass(); \\ will return \app\myclass\SecondClass

我希望它返回front\myclass\SecondClass而不必覆盖该方法,因为我有许多应该使用相同规则的文件。

1 个答案:

答案 0 :(得分:0)

你必须覆盖FirstClass中的方法,因为父方法正在调用一个明确指定SecondClass的静态方法,另一个解决方案可能是使用特征,但我不推荐它们,恕我直言,他们使工作人员复杂化

修改

实际上,经过另一次考虑之后,我觉得你的代码可能需要重构,我闻到了一些不好的东西,我没有真正看到它(因为我缺乏相关信息,我看不太多它可以闻到高度耦合的代码和/或OOP滥用,可能是一个令人羡慕的功能。