从子类PHP

时间:2017-07-23 12:13:21

标签: php

我是一个新的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类的函数。

4 个答案:

答案 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