在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. 什么类型的继承允许这
- 3. 为什么许多SWT控件不允许继承子类?
- 4. PHP多类继承
- 5. 继承UITextView以允许多种颜色
- 6. 多级继承:从子类
- 7. Rails:允许子类继承关系
- 8. C++ 11只允许继承某些类
- 9. 不同的父母允许类,而多重继承来扩展类
- 10. 继承在几个级别
- 11. 多级继承
- 12. Rails数据库级别的多继承
- 13. 更改继承类的级别
- 14. 多重继承的分类?
- 15. 从类的多重继承
- 16. 在SqlAlchemy中映射多级别类继承层次结构
- 17. 多重继承中无用的超级?
- 18. 不同类型的继承的多级别
- 19. 只允许在同一包中继承
- 20. Codeigniter多级继承
- 21. OOJS多级继承
- 22. php4多级继承
- 23. Ruby中的多重继承...继承自多个控制器类。
- 24. 允许/类别但不允许/类别/子类别
- 25. 多重判别者的继承?
- 26. 具有不一致构造函数的多级别类继承
- 27. JavaScript游戏级别继承
- 28. 多重继承
- 29. 多重继承
- 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