2012-03-02 3 views
0

メソッドのオーバーライドのベストプラクティスは? 特に別のパラメータを追加する必要がある場合は、E_STRICTでのケーキメソッドのオーバーライド

に結果の
public function delete($id, $soft = false, $cascade = true) { 
    if ($soft) { 
     return $this->_softDelete(); 
    } 
    return parent::delete($id, $cascade); 
} 

を::

Declaration of Conversation::delete() should be compatible with that of Model::delete() 

私は1つの方法をこのように(adding-parameters-to-overriden-method-e-strict-observation)をオーバーライドshoudn'tことを知っている

これは、(第2のparamのような柔らかい$を追加)E_STRICTに準拠していません。

しかし、そうする必要がある場合は、どのように進むのですか? (E_STRICTを削除する必要なし) 基本的な考え方は、このモデルメソッド呼び出しのすべての発生を書き換えることなく、通常のdelete呼び出しをインターセプトすることでした。

+0

AppModelで 'beforeDelete'メソッドを使ってみましたか?おそらく、コアの 'delete()'をオーバーライドする良い方法です。 –

+0

よく、私の質問はより一般的なものです(上記は例としての具体的な使用例です)。この問題がE_STRICTモードで発生するコードには、他にもたくさんの場所があります。だから私は何とかそれらのすべてに対処しなければならないでしょう。 – mark

答えて

1

E_STRICTと互換性があり、機能シグネチャを変更しています。両方を持つことはできません。

解決策は、継承の代わりにコンポジションを使用することです。つまり、新しいクラス内で異なるシグネチャで変更するオブジェクトをラップすることです。

関連する問題