为什么扩展方法不会覆盖父方法

时间:2017-06-04 09:52:39

标签: php class

我需要能够从父类运行子方法。 我正在调用子函数$ this-> getPlan,但它不调用子计划,而只调用父计划。我以为扩展课程超越了这个功能。 这是我的代码

class logon{
    public function getPlan(){}
    public function __construct(){
    }
    public function checkWorks(){
        $this->getPlan();       
    }
}

class plan extends logon{       
    function __construct(){
        parent::__construct();
    }
    public function getPlan(){
        echo "test";    
    }
}
$logon = new logon();
$plan = new plan();

$logon->checkWorks();

但是,如果我像这样调用父构造函数中的代码,它会调用我的子方法。

public function __construct(){
      $this->getPlan();
    }

我不想使用抽象类来执行此操作,因为这是有充分理由的。 谁能告诉我为什么我的父方法没有被子类覆盖?

2 个答案:

答案 0 :(得分:0)

您正在调用登录方法:

$logon->checkWorks();

getPlan类中的logon为空。你需要打电话给儿童班(计划):

$plan->checkWorks();

答案 1 :(得分:0)

我以不同的方式解决了这个问题。 最初的问题是这个。我需要在计划中包含登录类,以便我可以访问数据库。问题是登录需要在计划中运行方法,并且我不能包含计划类,因为这会产生循环问题。

我的解决方案已经到了一半,但我有一个合适的解决方案。通过制定计划类,孩子解决了不包括登录访问数据库的问题,但我仍然可以在计划中调用方法。现在我不包括登录计划我可以在已解决问题的登录中包含计划,并且它可以工作。这是我的解决方案。现在我可以从两个类中访问我的方法。我知道如果我努力的话,我会找到一种方法。

class logon{
    public function __construct(){
    }
    public function checkWorks(){
        $p= new plan();
        $p->getPlan();
    }
}

class plan extends logon{

    public function __construct(){
        parent::__construct();
    }
    public function getPlan(){
        echo "test";    
    }
}

$logon = new logon();
$logon->checkWorks();