任何人都可以告诉我是否可以重写使用语句吗?PHP命名空间覆盖使用语句
我的例子是有一个MVC设置,其中有核心代码,可以用扩展核心版本的自定义版本覆盖每个控制器/模型。
我面对的问题是,我的核心控制器有一个使用声明,告诉它使用核心模型,所以如果我扩展模型,我不知道如何告诉它使用自定义模型而不是核心一个
我能明显更新核心控制器使用语句来指向自定义的,但核心代码共享,所以自定义版本可能无法使用这个核心的核心
使用语句显然是其他网站存在文件级别,所以我猜这是不可能的,但我希望有一些我不知道或者可能的解决方法
实施例
核心控制器
namespace Core;
use Core\Model\Example as ExampleModel;
class ExampleController {
public function output() {
$model = new ExampleModel;
$model->test();
}
}
核心模型
namespace Core;
class ExampleModel() {
public function test() {
echo 'This is the core test';
}
}
自定义控制器
namespace Custom;
use Custom\Controller\Example as Base,
Custom\Model\Example as ExampleModel;
class ExampleController extends Base {
//Inherits the output() method
}
定制型号
namespace Custom;
use Core\Model\Example as Base;
class ExampleModel extends Base {
public function test() {
echo 'This is the custom test';
}
}
所以给出这个例子中,有可能是我创造它使用自定义的模型输出的定制控制器的实例,“这是自定义测试”,而无需修改核心代码在所有?
希望就是我要问有道理
感谢
'use'只是在这里一个微不足道的细节。你的控制器扩展了某个阶段,阶段。如果不更改控制器的源代码,则无法更改。 – deceze
另外你的命名空间有**与文件系统**无关。这是一件需要记住的事情。你的方法是重写'output()'方法并在那里实例化对象(如果你绝对需要的话)。 – thpl