2010-10-24 64 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