在另一个类调用的类中覆盖一个Function

时间:2017-08-06 16:09:05

标签: php class oop

对于给定的这样的库:

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()的调用,它们也需要能够使用我的扩展版本。

2 个答案:

答案 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();
    }
}