2010-10-24 65 views
0

我有三个类,称为A, B,C和另一个类叫Xphp扩展三个类没有接口

在这个X类我想访问从ABC几个功能。

我知道如果我想访问一类的功能,我可以使用:

class X extends A { ... } 

现在我可以访问所有A公共职能,但现在我要访问的BC类功能好。

如何从X中访问BC中的方法?

+0

继承为您提供比获得'A'的公共方法,这些方法都可以没有继承的更多。您还可以访问任何受保护的方法/ A的成员,这是继承的真正原因。 – meagar 2010-10-24 17:05:22

回答

4

的唯一途径,而不界面

class A extends B {} 
class B extends C {} 
class x extends A {} 

PHP中

0

PHP多重继承不支持多重继承。无论如何你都可以使用Composition。

2

如果您只想访问公共职能,您可能会考虑重新考虑您的架构,以使用组合而不是继承。您三类绑在一起成使用它们一个类:

class X { 
    private $a, $b, $c; 

    public function __construct() { 
    $this->a = new A(); 
    $this->b = new B(); 
    $this->c = new C(); 
    } 

    function do_stuff() { 
    $this->a->do_a_stuff(); 
    $this->b->do_b_stuff(); 
    $this->c->do_c_stuff(); 
    } 

} 
+0

然后我怎么打电话, – Bharanikumar 2010-10-24 17:12:49

+0

@Bhara查看更新回答 – meagar 2010-10-24 17:38:25

+0

也可以提供魔法'__call'方法来自动代理方法调用其他实例。那会很慢,因为你必须检查哪个实例是正确的。另一方面,这将允许您为钻石问题定义自己的规则。但是,当然,你可以在X上编写适当的代理方法。 – Gordon 2010-10-24 18:03:46