php - 多重继承支持

标签 php oop inheritance

<分区>

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

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

class A extends B implements C, D

现在从 PHP 5.4 版 开始,我认为,我们有 traits 可以将功能捆绑在一起.. 并且可以使用 由多个类。

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

我的意思是:

class A extends B, C

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

我一直认为这可能是因为歧义(Diamond 问题等),但在声明函数时可以通过某种 namespace 标记生成器机制轻松处理,我认为..我知道这会意味着该语言可能需要将相同的函数重新定义两次,(就像重载在 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()
    {

    }


}
?>

我的意思是,从真实对象模仿的角度来看,有时我认为纯粹的多重继承会有很大的帮助。我知道其中一个论点是“多重继承的用例非常小,通常可以使用多个接口(interface)、mixin 等来解决”。但实际上,必须有一个更合理的理由来说明为什么语言设计者没有费心去实现人们认为的纯多重继承。

我是否完全忽略了这里的要点?有人可以对此有更多的了解吗?

最佳答案

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

关于php - 多重继承支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12842305/

相关文章:

c++ - 在派生类对象中使用派生类构造函数与基类类型兼容

php - 重定向回 l​​aravel 5.3 中请求的页面

php - 警告 : in_array() expects parameter 2 to be array - ERROR

php - 有效地分解和修剪长字符串,从而产生单个数组

javascript - 如何将类中的所有对象推送到一个数组 javascript?

java - 只加入一个实现

ruby-on-rails - Ruby on Rails - 从父类调用每个子类的方法

php - 是否有任何用于在 xml 文件上使用 sql 命令的 php 库?

PHP OOP核心框架

c++ - 意外无法访问的基础(第一个派生类)