繁体   English   中英

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

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

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

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

它似乎可以在Python中使用。

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

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

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

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

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

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

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

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

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

abstract class  AbstractOne extends  AbstractTwo {

}

然后像这样添加到主类:

class MyMainClass extends  AbstractOne {

}

这样,它继承了AbstractOne和AbstractTwo。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM