关于php:多重继承支持

Multiple Inheritance Support

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Is Multiple Inheritance allowed at class level in PHP?

所以我知道在PHP中,多重继承不是"直接"支持的(例如,在很多其他语言中,比如Java)。所以我们做了如下的事情:

1
class A extends B implements C, D

现在从PHP version 5.4开始,我认为我们有traitsbunches functionality together..可以通过多个类成为used

现在我的问题是,为什么在这种语言中不能有多个继承支持?

我的意思是:

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等来解决"。但事实上,语言设计者没有费心实现人们所认为的纯多重继承,这必须有一个更为合理的理由。

我是不是完全不明白这一点?有人能更清楚地说明这一点吗?


多重继承并不难添加,很多语言之所以不包含它,是因为它有点深奥和混乱。多重继承通常会混淆代码,导致封装不良,并使代码行为不可预测。通常,在代码中允许多个继承只会导致大量糟糕的编程来自该语言,通常会导致该语言名声不佳。如果由于某种原因需要在该语言中使用多个继承,那么一个足够聪明地正确使用它的编码人员很可能足够聪明,能够编写自己的方法来实现它。