Multiple Inheritance Support
Possible Duplicate:
Is Multiple Inheritance allowed at class level in PHP?
号
所以我知道在PHP中,多重继承不是"直接"支持的(例如,在很多其他语言中,比如Java)。所以我们做了如下的事情:
1 | class A extends B implements C, D |
现在从
现在我的问题是,为什么在这种语言中不能有多个继承支持?
我的意思是:
1 | class A extends B, C |
号
我在网上读过一些文章,人们试图解释为什么用这种语言很难实现这一点,但他们要么太专业了,我无法理解,要么听起来不像是一个足够好的论点。有人能用简单的术语描述为什么在这些语言中很难支持多重继承吗?如果你能把它放到PHP的上下文中,那就太好了,因为这是我最了解的语言。
我一直认为这可能是因为模糊性(Diamond Problem等人),但我认为,在声明函数时,可以很容易地通过某种名称空间标记器机制来处理。我知道,这意味着语言可能需要两次重新定义相同的函数(比如Java中重载的工作方式)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | <?php class A{ function __construct() { } function ambiguous_fn() { echo"This function is ambiguous"; } function fnA() { echo"This is function A"; } } class B{ function __construct() { } function ambiguous_fn() { echo"This function is ambiguous"; } function fnB() { echo"This is function B"; } } class C extends A,B{ function __construct() { } //This function will obviously confuse the PHP engine, because it does not know //if it should override from A or B. But cant we have a namespace/tokenizer kind of solution //to resolve the ambiguity? Or is that not possible? function ambiguous_fn() { } } ?> |
我的意思是,从一个真实的模仿对象的角度来看,有时我认为纯多重继承会有很大的帮助。我知道其中一个论点是,"多重继承的用例非常小,通常可以通过多个接口、mixin等来解决"。但事实上,语言设计者没有费心实现人们所认为的纯多重继承,这必须有一个更为合理的理由。
我是不是完全不明白这一点?有人能更清楚地说明这一点吗?
多重继承并不难添加,很多语言之所以不包含它,是因为它有点深奥和混乱。多重继承通常会混淆代码,导致封装不良,并使代码行为不可预测。通常,在代码中允许多个继承只会导致大量糟糕的编程来自该语言,通常会导致该语言名声不佳。如果由于某种原因需要在该语言中使用多个继承,那么一个足够聪明地正确使用它的编码人员很可能足够聪明,能够编写自己的方法来实现它。