簡體   English   中英

從父級調用子級函數

[英]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() ,以便它知道所有派生類都將其實現。 當然,這並不意味着是機械的解決方案:只有在GenerateBase 所有后代有意義時,才應該這樣做。

問題是您的父類沒有定義子類可以覆蓋的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM