如果我有几个具有所需函数的类,但又想单独存储以便于组织,我是否可以扩展一个类以同时拥有这两个类?
即class a extends b extends c
编辑:我知道如何一次扩展一个类,但我正在寻找一种方法,可以使用多个基类立即扩展一个类--你不能在PHP中做到这一点,但如果不求助于class c extends b
,class b extends a
,应该有办法绕过它。
发布于 2008-12-10 15:18:14
如果你真的想在PHP5.3中伪造多重继承,你可以使用神奇的函数__call()。
这是丑陋的,尽管它从A级用户的角度来看是有效的:
class B {
public function method_from_b($s) {
echo $s;
}
}
class C {
public function method_from_c($s) {
echo $s;
}
}
class A extends B
{
private $c;
public function __construct()
{
$this->c = new C;
}
// fake "extends C" using magic function
public function __call($method, $args)
{
$this->c->$method($args[0]);
}
}
$a = new A;
$a->method_from_b("abc");
$a->method_from_c("def");
打印"abcdef“
发布于 2008-12-10 14:12:38
您不能拥有扩展两个基类的类。您不能拥有以下内容:
// this is NOT allowed (for all you google speeders)
Matron extends Nurse, HumanEntity
然而,你可以有一个层次结构,如下所示。
Matron extends Nurse
Consultant extends Doctor
Nurse extends HumanEntity
Doctor extends HumanEntity
HumanEntity extends DatabaseTable
DatabaseTable extends AbstractTable
诸若此类。
发布于 2011-06-24 18:50:44
您可以使用特征,希望在PHP5.4中可以使用。
特征是PHP等单继承语言中代码重用的一种机制。特征旨在通过使开发人员能够在位于不同类层次结构中的几个独立类中自由重用方法集来减少单一继承的某些限制。特征和类组合的语义以一种方式定义,它降低了复杂性,并避免了与多重继承和混合相关的典型问题。
它们在支持更好的组合和重用方面的潜力得到了认可,因此它们集成在较新版本的语言中,如Perl6、Squeak、Scala、Slate和要塞。特征也被移植到Java和C#。
https://stackoverflow.com/questions/356128
复制相似问题