[英]Call child function from parent
最好在子類中調用方法。 如果我嘗試直接調用該方法,則我的IDE始終顯示錯誤。
class Base
{
public function DoIt()
{
$this->Generate(); //How to check if child implements Generate?
}
}
class Child extends Base
{
protected function Generate()
{
echo "Hi";
}
}
簡而言之,您無需執行此操作。 這是一個非常糟糕的設計:基類除了實現基本定義的協定之外,不應該假設任何有關其后代的東西。
最接近的可接受替代方法是在父級上聲明abstract protected function Generate()
,以便它知道所有派生類都將其實現。 當然,這並不意味着是機械的解決方案:只有在Generate
對Base
所有后代有意義時,才應該這樣做。
問題是您的父類沒有定義子類可以覆蓋的Generate()
方法; 您必須通過創建抽象方法來明確定義此方法:
// class with at least one abstract method is
abstract class Base
{
public function DoIt()
{
$this->Generate();
}
// child classes MUST implement this method
abstract protected function Generate();
}
您可以通過在父類中創建一個空實現來放寬要求:
class Base
{
public function DoIt()
{
$this->Generate();
}
// child classes MAY implement this method
protected function Generate() {}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.