类方法之间的PHP继承而不重载它,只需合并它


PHP Inheritance between class methods without overloading it, just merge it

>好的,我有 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 类中重载了方法 say() ...... 但我在这里想要的是合并这两个方法而不是相互覆盖。 我想要的输出是这个

hello<br>
hi<br>

这可能吗?

注意:如果我的条款有误,请教我正确的术语。我真的很陌生 PHP OOP

编辑:根据您的评论,您需要这样的东西:

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的 say 方法自动调用。

这称为模板方法模式

旧答案

只需将parent::say();添加到重载方法中:

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

这告诉 php 执行重载方法。如果你不希望扩展类来重载它的方法,你可以将它们声明为 final。

另请参阅有关扩展类的 php 手册。