4

可能重复:
PHP 中的类级别是否允许多重继承?

所以我知道在 PHP 中,多重继承不是“直接”支持的(我想这在许多其他语言中就是这种情况,例如 java)。所以我们做这样的事情:

class A extends B implements C, D

现在PHP version 5.4,我认为,我们有traits哪些bunches functionality together..并且可以是used多个类。

现在我的问题是,为什么这些语言不能支持多重继承?

我的意思是:

class A extends B, C

我在互联网上阅读了一些文章,人们试图解释为什么这很难用该语言实现,但它们要么技术性太强,我无法理解,要么听起来不够好。有人可以简单地描述一下为什么这些语言很难支持多重继承吗?如果您可以将 PHP 放在上下文中,那就太好了,因为这是我最了解的语言。

我一直认为这可能是因为模棱两可(钻石问题等),但这可以很容易地通过某种命名空间标记器机制来处理,同时声明函数,我想..我知道这意味着语言可能需要重新定义相同的函数两次,(例如重载在 Java 中的工作方式)

<?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 等来解决”。但实际上,语言设计者没有费心去实现人们认为的纯多重继承,肯定有一个更正当的理由。

我完全错过了这里的重点吗?有人可以对此有所了解吗?

4

1 回答 1

4

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

于 2012-10-11T21:09:39.950 回答