1

好的,我有 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 真的很陌生

4

1 回答 1

4

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

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() 的方法,它就会被 classA的 say 方法自动调用。

这称为模板方法模式

旧答案

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

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

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

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

于 2012-07-09T05:42:15.843 回答