对于给定的这样的库:
class boss {
private $sub;
public function __construct() {
$this->sub = new subclass();
}
}
class subclass {
public function dofoo() {
echo 'subclass';
}
}
由于我无法修改库内的任何内容。
class newboss extends boss {
public function __construct() {
// do stuff
parent::__construct();
}
// extend some other boss methods
function dofoo() {
echo 'newboss - ';
parent::dofoo();
}
}
$x = new newboss;
$x->dofoo();
newboss
中的扩展功能可以按预期直接进行。我需要扩展subclass
,尤其是subclass->dofoo()
,以便输出为newboss - subclass
而不是newboss
。
当然,致电parent::dofoo()
永远不会有效,因为我没有延长subclass
,但我希望有任何好的建议/想法来解决问题。
非常感谢。
为了稍微清楚一点,班上老板拨打subclass()
并将其存储在private $sub
中以供使用。在boss中有多个叫$this->sub->dofoo()
的调用,它们也需要能够使用我的扩展版本。
答案 0 :(得分:-1)
您可以使用Facade模式并根据需要添加方法:
class Facade
{
$a = new newboss;
$b = new subclass;
function dofoo() {
echo 'newboss - ';
$b->dofoo();
}
}
客户代码:
$x = new Facade;
$x->dofoo();
答案 1 :(得分:-1)
由于你需要扩展子类,所以只能在boss中使用子类实例(public或private)。
班主任使用委托并且是继承的替代方法:
class newboss extends boss {
public $sub;
public function __construct() {
// do stuff
parent::__construct();
$this->sub = new subclass();
}
// extend some other boss methods
function dofoo() {
echo 'newboss - ';
$this->sub->dofoo();
}
}