多重继承支持

时间:2012-10-11 14:46:41

标签: php oop inheritance

  

可能重复:
  Is Multiple Inheritance allowed at class level in 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

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()
    {

    }


}
?>

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

我一直认为这可能是因为含糊不清(Diamond问题等),但是在声明函数时可以通过某种命名空间标记器机制轻松处理,我想......我知道这会意味着语言可能需要重新定义两次相同的函数(如Java中的重载方式)

{{1}}

我的意思是从一个模仿视角的现实生活中的对象,有时我认为纯粹的多重继承将是如此巨大的帮助。我知道其中一个论点是“多重继承的用例非常小,通常可以使用多个接口,mixins等来解决”。但实际上,必须有一个更为有效的理由,为什么语言设计者不会打算实现人们会想到的纯多重继承。

我完全忽略了这一点吗?有人可以对此有所了解吗?

1 个答案:

答案 0 :(得分:4)

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