PHP:为什么不是';难道不能扩展多个类吗?

PHP:为什么不是';难道不能扩展多个类吗?,php,oop,class,Php,Oop,Class,当我想扩展两个父类时,我遇到了一种情况,但php不允许这样做。 为什么我不能扩展多个类,但可以实现多个接口。扩展许多类有什么问题? 在我看来,这是一件非常明显的事情,直到我发现了解析错误。 这是个坏习惯吗?如果是,有哪些备选方案? 在其他语言中可能吗?您可能正在寻找: 这在Python中似乎是可能的。看看 这是个坏习惯吗?如果是,有哪些替代方案 除非语言是专门为它设计的,否则是的。考虑一下,你有两个类, a > b>代码>。这两个类都提供了一个公共方法foo(),该方法具有相同的签名(在PH

当我想扩展两个父类时,我遇到了一种情况,但php不允许这样做。
为什么我不能
扩展
多个类,但可以
实现
多个
接口
。扩展许多类有什么问题?
在我看来,这是一件非常明显的事情,直到我发现了解析错误。
这是个坏习惯吗?如果是,有哪些备选方案?

在其他语言中可能吗?

您可能正在寻找:

这在Python中似乎是可能的。

看看

这是个坏习惯吗?如果是,有哪些替代方案

除非语言是专门为它设计的,否则是的。考虑一下,你有两个类,<代码> a <代码> > <代码> b>代码>。这两个类都提供了一个公共方法
foo()
,该方法具有相同的签名(在PHP中并不难)。现在,您创建了一个类
C
,它扩展了
a
B


现在,调用
C.foo()
。如果没有明确的说明,解释器如何知道调用哪个版本的
foo()

为什么在某些/大多数编程语言中禁止多重继承是有争议的菱形问题

简单地说,若你们有一辆可以游泳和驾驶的汽车,因为它继承了汽车和船,在执行移动功能时会发生什么


尝试使用接口并遵循策略模式或状态模式。

PHP不支持它。但是,可以使用runkit、APD或通过重写_调用和_get来模拟来自多个类的继承来模拟它。Symfony(我很少建议这样做)也为多重继承提供“sfMixin”或“”。

实现同一方法的单独类不是反对多重继承的好论据,因为目前可以实现多个接口。不能用同一方法实现两个接口。引用自:“一个类不能实现两个共享函数名的接口,因为这会导致歧义。”

我知道这个问题已经存在了2年,但我只是遇到了同样的问题。我的工作是这样的:如果您有一个常规类和两个摘要,并且希望同时扩展这两个类,例如
抽象类AbstractOne
抽象类AbstractTwo
,您可以说:

abstract class  AbstractOne extends  AbstractTwo {

}
然后添加到主类,如下所示:

class MyMainClass extends  AbstractOne {

}

这种方式继承了AbstractOne和Actudio../P>它应该引发一个编译错误,比如在类B中已经定义的方法FoeWORE()。我认为程序员可以监视父类冲突的方法,而不需要为“智能”解释器。@ SaltLeC: C++就是这样做的。PHP选择了与Java更相似的组织方式,这是一个有效的设计决策。双方都有各自的优点,但不幸的是,我们不能兼得,这不仅仅是方法,还有数据。考虑Max的速度,从“汽车”和“船”衍生出来的混合动力车:是汽车还是船的最大速度?这些字段应该合并还是单独存在?如果有2个副本,如何访问该字段?