php对象子对象使用其他子对象';s函数
有可能吗 扩展类的扩展,例如:php对象子对象使用其他子对象';s函数,php,oop,class,Php,Oop,Class,有可能吗 扩展类的扩展,例如: class a { } class b extends a { } class c extends b { } 编辑: [或者c类可以使用仅在b中定义但不在a中定义的函数的其他方式。] 我只是注意到我的问题有点混乱。c应该能够使用所有函数,当然a的函数也是如此 我只接受解决我不存在的问题的答案,以防有人搜索。这是不可能的。根据定义,类B是类A的“扩展”。这意味着,如果类A具有类A中的方法method\u() 你所需要做的就是用另一种方式: class b { .
class a {
}
class b extends a {
}
class c extends b {
}
编辑:
[或者c类可以使用仅在b中定义但不在a中定义的函数的其他方式。]
我只是注意到我的问题有点混乱。c应该能够使用所有函数,当然a的函数也是如此
我只接受解决我不存在的问题的答案,以防有人搜索。这是不可能的。根据定义,类B是类A的“扩展”。这意味着,如果类A具有类A中的方法
method\u()
你所需要做的就是用另一种方式:
class b { ... }
class a extends b { /* has methods from b and a */ }
class c extends b { /* can only use methods from b */ }
由于PHP5.4,您可以使用可能对您有帮助的特性。您可以定义两个特征,一个具有classa
所具有的函数,另一个包含classb
所具有但不具有classa
的函数
因此:
然后,您可以定义一个只使用TraitA的类a
,一个同时使用两个特征的类b
,以及一个只使用TraitB的类c
:
class a {
use TraitA
// contains a1 and a2
}
class b {
use TraitA, TraitB
// contains a1, a2, b1 and b2
}
class a {
use TraitB
// contains b1 and b2
}
更多关于特质的信息:
请记住,您必须注意不同特征之间的函数名。两个traits中不能有相同的函数名,否则会发生冲突 我不知道你为什么要这么做,但是
除非将方法和属性定义为private
方法,否则所有扩展类都将访问它们并可以进行扩展,除非父方法声明为final
但是,由于PHP5.4,您可以使用
该死,你比我先到了!遗憾的是,我的主机没有PHP5.4Traits,看起来很糟糕。正确组织班级没有错。看起来像是糟糕的多重继承。我自己也不确定我是否会使用它。我已经习惯了他们的样子,但是我也花了很长时间。。。到目前为止,我还没有遇到它们有用的情况。那么你的实际问题是什么?是否有可能扩展“扩展”啊,好的。是的,它是:)你这样做,C班仍然保留着A班的东西。是的,我只是很快地把一个例子放在一起。我自己从来没有用过,也可能不会,至少有一段时间不会用。
class a {
use TraitA
// contains a1 and a2
}
class b {
use TraitA, TraitB
// contains a1, a2, b1 and b2
}
class a {
use TraitB
// contains b1 and b2
}
<?php
trait BOnly
{
function getReturnType() { /* 1 */ }
function getReturnDescription() { /* 2 */ }
}
class A
{
}
class B extends A
{
use BOnly;
}
class C extends B
{
}