如何从扩展类中使用主类的方法并避免构造函数循环

时间:2016-06-14 06:12:44

标签: php

class a
{
    function __construct()
    {
        $x = new b();
        $x->myFunction();
    }
}
class b extends a
{
    public function myFunction()
    {
        echo 'Here is myFunction';
    }
}
$a = new a();

现在我想知道如何从类a访问类b的函数myFunction并避免无限循环。

3 个答案:

答案 0 :(得分:0)

您可以使用$ this来访问子方法

   Class a{
    function call_child_method(){
        if(method_exists($this, 'myFunction')){
            $this->myFunction();
        }
    }
}
Class b extends a{
    function myFunction(){
        echo 'Here is myFunction';
    }
}
$test = new b();
$test->call_child_method();

您将获得输出“这是myFunction”。

答案 1 :(得分:0)

如评论中所述,您要做的是Abstract父类。因此,您可以从其父母那里调用子课程。

正如评论所建议的那样,this question/answer提供了一系列有关如何完成任务的示例,如下所示。

abstract class a {

    function __construct() {
        $this->myFunction();
    }
}

class b extends a {

    function myFunction() {
         echo 'im from class b, sweet.';
    }

}

Example/Demo

警告/注

  • 无法尝试实例化父(abstract)类:
  

定义为abstract的类可能无法实例化    Source

另外...

这绝不是你应该如何打电话/做你想做的事情。如果您能告诉我们您通过这样做会尝试实现的任务,我们可以为您提供进一步的帮助。否则,您将不断编写不打算工作的代码,只能这样做,因为"解决方法"

答案 2 :(得分:0)

您应该在这里使用abstract课程。

abstract class a{  // define abstract class a
    // parent class constructor
    function __construct(){        
        // some code here
    }

    function test(){      
      $this->myFunction();
    }

    // define abstract method myFunction
    abstract function myFunction();
}

class b extends a{
    // child class constructor calls parent class constructor
    function __construct(){
      parent::__construct();
    }

    // this method will be called
    function myFunction(){
        echo 'Here is myFunction';
    }
}

$b = new b; // create object of child class
$b->test();