Php 为什么扩展方法没有凌驾于父方法之上
我需要能够从父类运行子方法。 我正在调用子函数$this->getPlan,但它并没有调用子计划,而是只调用父计划。我认为一个扩展类超越了函数。 这是我的密码Php 为什么扩展方法没有凌驾于父方法之上,php,class,Php,Class,我需要能够从父类运行子方法。 我正在调用子函数$this->getPlan,但它并没有调用子计划,而是只调用父计划。我认为一个扩展类超越了函数。 这是我的密码 class logon{ public function getPlan(){} public function __construct(){ } public function checkWorks(){ $this->getPlan(); } } class
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();
}
我不想使用抽象类来实现这一点,因为这样做有很好的理由。
有人能告诉我为什么我的父方法没有被子类覆盖吗?您正在调用logon方法:
$logon->checkWorks();
但是logon
类中的getPlan
为空。您需要调用子类(计划):
我用不同的方法解决了这个问题。 最初的问题是这个。我需要在计划中包括logon类,以便访问数据库。问题是登录需要在plan中运行一个方法,我不能包含plan类,因为那样会产生循环问题 我的解决方案已经走了一半,但我有一个合适的解决方案。通过使plan类成为子类,解决了不包括登录以访问数据库的问题,但我仍然可以在plan中调用方法。现在我没有在计划中包括登录,我可以在登录中包括解决了问题的计划,并且它可以工作。这是我的解决办法。现在我可以从这两个类访问我的方法。我知道只要我足够努力,我会找到办法的
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();
我知道我可以这样做,但我需要从我的登录类调用该方法。基本上,我需要的方法,以工作在两个类。您可以看到,当我登录时,我的登录类正在运行。我需要从主类调用子类中的一个方法,因为它执行某些检查。@ThomasWilliams-所以在登录类中定义getPlan。上面的代码不起作用,这种方式是不可能的。我意识到我可以做到这一点,但plan类拥有计划所需的所有方法。而logon拥有登录的所有方法。所以我不想在两个类中都放重复的方法。我的计划类使用登录类中的某些方法。“我的登录类只需要从plan类调用一个方法。@ThomasWilliams-您不需要在两个类中都添加冗余代码。仅在登录类中定义getPlan。或者更好,重构代码。您的应用程序逻辑可能不是很好。@ThomasWilliams-您应该添加真实代码或删除您的问题(或者批准我的答案)。因为你得到了答案,没有理由不能使用
$plan->checkWorks()代码>。也许如果你加上你的真实代码,我们可以回答你的问题。
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();