在PHP中的類級別允許使用多繼承嗎?在PHP的類級別允許多重繼承嗎?
回答
多繼承存在於Diamond Problem之中,尚未在PHP中得到解決(同意如何解決)。因此,在PHP中沒有多繼承。
BaseClass
/\
/\
ClassA ClassB
\/
\/
ClassC
如果同時ClassA
和ClassB
定義自己的方法foo()
,一會你在ClassC
調用哪個?
鼓勵你要麼使用object composition或interfaces(這確實允許多重繼承),或者 - 如果你是水平再利用後 - 窺視Decorator或Strategy模式,直到我們有Traits(或Grafts或不管他們會叫,然後)。
一些參考:
了不起的描述謝謝戈登! – 2010-04-22 13:04:58
wooooooo,圖形! +1。 – 2010-04-22 13:37:40
PHP不支持多繼承。
PHP不支持類的多重繼承。
它「不支持多重繼承」?所以,這意味着它的確如此,對吧? – 2015-11-30 14:41:34
現在你不應該糾正這個問題嗎? – mega6382 2017-10-26 05:05:04
沒有,PHP類只能繼承一個類,而不是多個。
可以使用方法和屬性代表團模仿它,但它不會與is_a()
或instanceof
工作:
class A extends B
{
public function __construct($otherParent)
{
$this->otherParent = $otherParent;
}
public function __call($method, $args)
{
$method = array($this->otherParent, $method);
return call_user_func_array($method, $args);
}
}
PLs精心製作我瞭解了你談論的要點... – 2010-04-22 13:07:38
哪一點? is_a點?還是代表團? – 2010-04-22 13:08:49
兩者都可以詳細說明這兩點,我是一個新的編碼人員不知道這些概念 – 2010-04-22 13:11:01
PHP不支持多重繼承因爲如此,但它確實提供了一些易於重用套方法在多個獨立的類中,使用traits
。 A trait
就像一個類一樣書寫,但它本身不能實例化。
是幾個從PHP手冊的例子:
優先順序示例:
class Base {
public function sayHello() {
echo 'Hello ';
}
}
trait SayWorld {
public function sayHello() {
parent::sayHello();
echo 'World!';
}
}
class MyHelloWorld extends Base {
use SayWorld;
}
$o = new MyHelloWorld();
$o->sayHello();
輸出:
Hello World!
這裏是與衝突解決另一個例子:
trait A {
public function smallTalk() {
echo 'a';
}
public function bigTalk() {
echo 'A';
}
}
trait B {
public function smallTalk() {
echo 'b';
}
public function bigTalk() {
echo 'B';
}
}
class Talker {
use A, B {
B::smallTalk insteadof A;
A::bigTalk insteadof B;
}
}
class Aliased_Talker {
use A, B {
B::smallTalk insteadof A;
A::bigTalk insteadof B;
B::bigTalk as talk;
}
}
欲瞭解更多信息和深入瞭解在PHP多重Inhertance。
- 1. PHP中的多級繼承
- 2. 爲什麼許多SWT控件不允許繼承子類?
- 3. PHP多類繼承
- 4. 繼承UITextView以允許多種顏色
- 5. 多級繼承:從子類
- 6. Rails數據庫級別的多繼承
- 7. 多級繼承
- 8. 更改繼承類的級別
- 9. 多重繼承的分類?
- 10. 在SqlAlchemy中映射多級別類繼承層次結構
- 11. 多重繼承中無用的超級?
- 12. Codeigniter多級繼承
- 13. php4多級繼承
- 14. Ruby中的多重繼承...繼承自多個控制器類。
- 15. 多重繼承
- 16. 多重繼承
- 17. 多重繼承()
- 18. 多重繼承
- 19. 在PHP中模仿多重繼承
- 20. 繼承類別鏈
- 21. 繼承PHP類
- 22. Perl中的多級繼承
- 23. 多類繼承?
- 24. 多類繼承
- 25. Haskell:類型類:多重繼承示例
- 26. 允許nodejs會話繼承到子域
- 27. Java不支持多重繼承,但隱含在Java中的每個類擴展了Object並允許多一個
- 28. Java 8支持多重繼承嗎?
- 29. 是否有一個允許多重繼承行爲的BDD風格的框架?
- 30. 從模板類的多重繼承
可能的重複,http:// stackoverflow。com/questions/90982/php中的多重繼承 – 2010-04-22 12:57:10
我相信接受的答案應該在這裏改變,因爲在PHP中有一個「多重繼承」的解決方法。在[本答案](https://stackoverflow.com/a/46905316/2394254)中描述了這一點,但沒有在接受的答案中描述。 – mega6382 2017-11-17 12:01:26