关于oop:PHP:为什么不能扩展多个类?

PHP: Why isn't it possible to extend more than one class?

当我想扩展两个父类时,我遇到了一种情况,但是PHP不允许这样做。为什么我不能多出一个类,但多出一个类。扩展许多类有什么问题?在我看来这是一件很明显的事情,直到我得到了解析错误。这是个坏习惯吗?如果是这样,还有什么选择呢?用其他语言可以吗?


为什么在某些/大多数编程语言中禁止多重继承与菱形问题http://en.wikipedia.org/wiki/diamond_problem争论不休。

简单点说,如果你有一辆可以游泳和驾驶的车,因为它继承了车辆和船只,那么在执行移动功能时会发生什么!?

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


您可能在寻找:PHP中的多重继承。

这在Python中似乎是可能的。


看一下,我可以在PHP中使用一个以上的类来扩展一个类吗?


实现同一方法的单独类对于多继承来说不是一个好的参数,因为当前可以实现多个接口。你不能用同样的方法实现两个接口。引用自http://www.php.net/manual/en/language.oop5.interfaces.php:"一个类不能实现两个共享函数名的接口,因为它会导致歧义。"


PHP不支持它。但是,可以使用runkit、apd或者仅仅通过覆盖uuu调用和uuu get来模拟多个类的继承来模拟它。symfony(我自己也建议)还为多重继承提供了"sfmixin"或"sfmixer"。


Is it a bad practice? If so, what are alternatives?

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

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


我知道这个问题已经2岁了,但我只是遇到了同样的问题。我的工作是这样的:如果你有一个常规类和两个摘要,并且想要扩展它们,例如abstract class AbstractOneabstract class AbstractTwo,你可以说:

1
2
3
abstract class  AbstractOne extends  AbstractTwo {

}

然后像这样添加到主类:

1
2
3
class MyMainClass extends  AbstractOne {

}

这样,它继承了AbstractOne和AbstractTwo。