是否有可能
扩展类的扩展,例如:
class a {
}
class b extends a {
}
class c extends b {
}
编辑:
[或 c 类可以使用仅在 b 中定义但不能在 a 中定义的函数的其他方式。]
好吧,我只是注意到我的问题有点混乱。c 应该能够使用所有功能,当然还有 a 的功能。
我会接受解决我不存在的问题的答案,以防有人搜索。
从 PHP 5.4 开始,您可以使用可能对您有帮助的特征。您可以定义两个特征,一个包含 classa
具有的函数,另一个包含 classb
具有的函数,但不包含 class a
。
所以:
trait TraitA {
function a1() { }
function a2() { }
}
trait TraitB {
function b1() { }
function b2() { }
}
然后你可以定义一个a
只使用TraitA
的类,一个b
同时使用这两个特征的类,以及一个c
只使用的类TraitB
:
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
}
更多关于特征的信息:http: //php.net/manual/en/language.oop5.traits.php 请记住,您必须注意不同特征之间的函数名称。两个特征中不能有相同的函数名,否则会发生冲突。
这是不可能的。根据定义,类 B 是类 A 的“扩展”。这意味着如果类 a 具有方法,method_in_class_a()
那么类 B 将method_in_class_a()
在您配置类之前作为 BASE 具有。
您需要做的就是反其道而行之:
class b { ... }
class a extends b { /* has methods from b and a */ }
class c extends b { /* can only use methods from b */ }
我不确定你为什么需要这样做,但是......
除非方法和属性被定义为private
方法,否则所有扩展类都可以访问它们并且可以扩展,除非父方法声明为final
.
但是,从 PHP5.4 开始,您可以使用Traits。
<?php
trait BOnly
{
function getReturnType() { /* 1 */ }
function getReturnDescription() { /* 2 */ }
}
class A
{
}
class B extends A
{
use BOnly;
}
class C extends B
{
}