Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php对象子对象使用其他子对象';s函数_Php_Oop_Class - Fatal编程技术网

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,您可以使用可能对您有帮助的特性。您可以定义两个特征,一个具有class
a
所具有的函数,另一个包含class
b
所具有但不具有class
a
的函数

因此:

然后,您可以定义一个只使用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
{

}