<分区>
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 等来解决”。但实际上,必须有一个更合理的理由来说明为什么语言设计者没有费心去实现人们认为的纯多重继承。
我是否完全忽略了这里的要点?有人可以对此有更多的了解吗?