繁体   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