我是一个新的PHP,我有一些像这样的文件:
在root.php中我有
<?php
class Root
{
// Some functions here
}
在child_1.php中我有:
class Child_1 extends Root
{
function abc()
{
//Some code here
}
}
在child_2.php中我有:
class Child_2 extends Root
{
function cde()
{
// How can i call function abc() from class Child_1 here
}
}
是的,如何从Child_2类的函数中调用Child_1类的函数。
答案 0 :(得分:1)
由于扩展一个父级(Root
)的类知道没有彼此(并且您无法更改),您可以这样做:
class Chirld_2 extends Root
{
function cde()
{
$obj = new Chirld_1();
$obj->abc();
}
}
但显然缺乏良好的设计。我想,您必须在abc()
课程中定义Root
,以使其在两个孩子中都可用:
class Root
{
function abc()
{
//Some code here
}
}
class Chirld_1 extends Root
{
}
class Chirld_2 extends Root
{
}
$c1 = new Chirld_1();
$c1->abc();
$c2 = new Chirld_2();
$c2->abc();
答案 1 :(得分:1)
您可以调用class_1的class_1或Class_2中的任何函数 但是在任何一个孩子班级中你都不能从另一个孩子那里打电话。因为他们没有相关性 解决方案是在class_1的构造函数中调用class_2
答案 2 :(得分:1)
如果要在不创建子类对象的情况下使用Chirld_2中的Chirld_1函数(反之亦然),则可以选择将Chirld_1和Chirld_2声明为父类Root的特征。这将允许您使用$ this关键字从Chirld_2调用Chirld_1的函数,反之亦然。这些类应声明如下:
<?php
trait Chirld_1
{
public function test1()
{
$this->test2();
}
}
trait Chirld_2
{
public function test2()
{
$this->test1();
}
}
class Root
{
use Chirld_1;
use Chirld_2;
// Some functions here
}
有关特征的更多信息,请参阅此链接:http://php.net/manual/en/language.oop5.traits.php
答案 3 :(得分:0)
尝试使用parent ::或static ::或self :: notation来指定要使用的类。 http://php.net/manual/pl/keyword.parent.php