PHP不超载类方法的传承,只是把它合并(PHP Inheritance between class

2019-10-16 23:32发布

好吧,我有2个班

class A{  
     public function say(){
        echo "hello<br>";
     }  
  }

 class B extends A{
    public function say(){
        echo "hi<br>";
    }
 }

 $haha = new B();
 $haha->say();

还有你看我重载类B中的方法,说()...但我想在这里什么是两种方法合并,而不是相互覆盖。 我期望的输出我想是这样的

hello<br>
hi<br>

这可能吗?

注:如果我的条件是错误的,请教我正确的条款。 我真的很新的PHP OOP

Answer 1:

编辑:根据您的意见,你想是这样的:

class A{
    final public function say(){
        echo "hello<br>";
        $this->_say();
    }

    public function _say(){
        //By default, do nothing
    }
}

class B extends A{
    public function _say(){
        echo "Hi<br>";
    }
}

我已要求新功能_say ,但你可以给它任何你想要的名称。 这样一来,你的队友只是定义一个方法叫做_say(),它会自动通过类调用A我们说的方法。

这就是所谓的模板方法模式

老答案

只需添加parent::say(); 到过载方法:

class B extends A{
    public function say(){
        parent::say();
        echo "hi<br>";
    }
 }

这将告诉PHP执行重载方法。 如果你不希望扩展类重载它的方法,你可以声明他们最后 。

参阅关于PHP手册扩展类。



文章来源: PHP Inheritance between class methods without overloading it, just merge it