我有三個類,稱爲A
, B
,C
和另一個類叫X
。php擴展三個類沒有接口
在這個X
類我想訪問從A
,B
和C
幾個功能。
我知道如果我想訪問一類的功能,我可以使用:
class X extends A { ... }
現在我可以訪問所有A
公共職能,但現在我要訪問的B
和C
類功能好。
如何從X
中訪問B
和C
中的方法?
我有三個類,稱爲A
, B
,C
和另一個類叫X
。php擴展三個類沒有接口
在這個X
類我想訪問從A
,B
和C
幾個功能。
我知道如果我想訪問一類的功能,我可以使用:
class X extends A { ... }
現在我可以訪問所有A
公共職能,但現在我要訪問的B
和C
類功能好。
如何從X
中訪問B
和C
中的方法?
的唯一途徑,而不界面
class A extends B {}
class B extends C {}
class x extends A {}
PHP中
PHP多重繼承不支持多重繼承。無論如何你都可以使用Composition。
如果您只想訪問公共職能,您可能會考慮重新考慮您的架構,以使用組合而不是繼承。您三類綁在一起成使用它們一個類:
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();
}
}
然後我怎麼打電話, – Bharanikumar 2010-10-24 17:12:49
@Bhara查看更新回答 – meagar 2010-10-24 17:38:25
也可以提供魔法'__call'方法來自動代理方法調用其他實例。那會很慢,因爲你必須檢查哪個實例是正確的。另一方面,這將允許您爲鑽石問題定義自己的規則。但是,當然,你可以在X上編寫適當的代理方法。 – Gordon 2010-10-24 18:03:46
繼承爲您提供比獲得'A'的公共方法,這些方法都可以沒有繼承的更多。您還可以訪問任何受保護的方法/ A的成員,這是繼承的真正原因。 – meagar 2010-10-24 17:05:22