是否可以
扩展类的扩展名,例如:
class a {
}
class b extends a {
}
class c extends b {
}
编辑:
[或者c类可以使用仅在b中定义但不在a。中定义的函数的其他方式。]
嗯,我只是注意到我的问题有点搞砸了。 c应该能够使用所有功能,当然还有那些功能。
我会接受解决我不存在问题的答案,以防有人搜索。
答案 0 :(得分:4)
从PHP 5.4开始,您可以使用可能对您有所帮助的特征。您可以定义两个特征,一个具有类a
具有的函数,另一个包含类b
具有的函数,但不包含类a
。
所以:
trait TraitA {
function a1() { }
function a2() { }
}
trait TraitB {
function b1() { }
function b2() { }
}
然后,您可以定义仅使用a
的班级TraitA
,使用这两个特征的班级b
以及仅使用{{1}的班级c
}:
TraitB
有关特征的更多信息:http://php.net/manual/en/language.oop5.traits.php 请记住,您必须注意不同特征之间的函数名称。您不能在两个特征中使用相同的功能名称,否则会发生冲突。
答案 1 :(得分:3)
这是不可能的。根据定义,类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 */ }
答案 2 :(得分:1)
我不确定你为什么要这样做但是......
除非将方法和属性定义为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
{
}