我有三个类,称为A
, B
,C
和另一个类叫X
。php扩展三个类没有接口
在这个X
类我想访问从A
,B
和C
几个功能。
我知道如果我想访问一类的功能,我可以使用:
class X extends A { ... }
现在我可以访问所有A
公共职能,但现在我要访问的B
和C
类功能好。
如何从X
中访问B
和C
中的方法?
我有三个类,称为A
, B
,C
和另一个类叫X
。php扩展三个类没有接口
在这个X
类我想访问从A
,B
和C
几个功能。
我知道如果我想访问一类的功能,我可以使用:
class X extends A { ... }
现在我可以访问所有A
公共职能,但现在我要访问的B
和C
类功能好。
如何从X
中访问B
和C
中的方法?
的唯一途径,而不界面
class A extends B {}
class B extends C {}
class x extends A {}
PHP中
PHP多重继承不支持多重继承。无论如何你都可以使用Composition。
如果您只想访问公共职能,您可能会考虑重新考虑您的架构,以使用组合而不是继承。您三类绑在一起成使用它们一个类:
class X {
private $a, $b, $c;
public function __construct() {
$this->a = new A();
$this->b = new B();
$this->c = new C();
}
function do_stuff() {
$this->a->do_a_stuff();
$this->b->do_b_stuff();
$this->c->do_c_stuff();
}
}
然后我怎么打电话, – Bharanikumar 2010-10-24 17:12:49
@Bhara查看更新回答 – meagar 2010-10-24 17:38:25
也可以提供魔法'__call'方法来自动代理方法调用其他实例。那会很慢,因为你必须检查哪个实例是正确的。另一方面,这将允许您为钻石问题定义自己的规则。但是,当然,你可以在X上编写适当的代理方法。 – Gordon 2010-10-24 18:03:46
继承为您提供比获得'A'的公共方法,这些方法都可以没有继承的更多。您还可以访问任何受保护的方法/ A的成员,这是继承的真正原因。 – meagar 2010-10-24 17:05:22