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

时间:2010-10-22 14:37:10

标签: php oop class

当我想扩展两个父类时,我遇到了一种情况,但php不允许这样做 为什么我不能extend多个班级,但可以implement多个interface。扩展许多课程有什么问题?
在我得到解析错误之前,在我看来这是一件非常明显的事情 这是一种不好的做法吗?如果是这样,有哪些替代方案?
有可能用其他语言吗?

7 个答案:

答案 0 :(得分:6)

您可能正在寻找:Multiple Inheritance in PHP

似乎可以在Python中使用。

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:3)

答案 3 :(得分:1)

  

这是一种不好的做法吗?如果是这样,有什么替代方案?

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

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

答案 4 :(得分:1)

PHP不支持它。但是,它可以使用runkit,APD或仅重写__call和__get来模拟来模拟多个类的继承。 Symfony(我很少推荐)也为多重继承提供了“sfMixin”或“sfMixer”。

答案 5 :(得分:1)

实现相同方法的单独类不是反对多重继承的好参数,因为当前可以实现多个接口。您无法使用相同的方法实现两个接口。引自http://www.php.net/manual/en/language.oop5.interfaces.php:“一个类不能实现两个共享函数名的接口,因为它会引起歧义。”

答案 6 :(得分:0)

我知道这个问题是2岁,但我只是遇到了同样的问题。我的解决方法就是这样:如果你有一个常规课程和两个摘要,并希望扩展它们,例如abstract class AbstractOneabstract class AbstractTwo,你可以说:

abstract class  AbstractOne extends  AbstractTwo {

}

然后像这样添加到主类:

class MyMainClass extends  AbstractOne {

}

这样,它继承了AbstractOne和AbstractTwo。