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() メソッドをオーバーロードしましたが、ここで必要なのは、2 つのメソッドをマージし、互いに上書きしないことです。私が望む私の望ましい出力はこれです

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が、任意の名前を付けることができます。Aこのように、チームメイトは _say() というメソッドを定義するだけで、 classの say メソッドによって自動的に呼び出されます。

これはTemplate メソッド パターンと呼ばれます。

古い答え

parent::say();オーバーロード メソッドに追加するだけです。

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

これにより、オーバーロードされたメソッドを実行するよう php に指示されます。クラスを拡張してそのメソッドをオーバーロードしたくない場合は、それらをfinalと宣言できます。

クラスの拡張については、php のマニュアルも参照してください。

于 2012-07-09T05:42:15.843 に答える