我的命名空间栏中有一个类Foo:
namespace Bar;
class Foo
{
public function main()
{
// This will be Bar\Biz
return new Biz();
}
}
main()方法返回类Bar \ Biz
除了返回MyBar \ Biz而不是Bar \ Biz之外,我想扩展这个类而不做任何更改。我可以这样做:
namespace MyBar;
class myFoo extends Bar\Foo
{
public function main()
{
// This will be MyBar\Biz
return new Biz();
}
}
方法main()与父方法相同。它恰好在不同的命名空间中运行。这很有效。
但是,main()是一个冗长而复杂的方法,我不想复制它的所有代码,并且必须使我的副本与我重写的源类保持同步。有没有办法在不必复制代码的情况下执行此操作?
我使用的是PHP5.4,但是如果有不能在5.4中完成的PHP的更新版本的解决方案我会感兴趣(我知道5.6中有某种“导入”可能是溶液?)
答案 0 :(得分:1)
将结果提取到自己的函数中,然后重写它。
namespace Bar;
class Foo
{
public function main()
{
// lots of logic
return create();
}
protected function create()
{
return new Biz();
}
}
namespace MyBar;
class myFoo extends Bar\Biz
{
protected function create()
{
return new Biz();
}
}