0

親クラスに機能がある基本的なクラスライブラリを使用しています...

function functionName($param) {

}

次に、このクラスを拡張する子クラスで...

function functionName($param, $param2, $param3) {

}

この子クラスを使用して呼び出しを行うと、次のような PHP 通知が表示されます...

child_class::functionName() の宣言は、parent_class::functionName() の宣言と互換性がある必要があります

コードは正常に完了しますが、通知が気になり、削除したいと思います。親クラスのバージョンの関数に追加のパラメーターを追加すると、問題が解決することがわかりました。これらのパラメータは、拡張クラスの 以外では必要ないのですが、それを追加するのはおかしいと思いませんか?

このような問題を修正するためのより良い方法はありますか、または特定のクラスが実際に必要とするかどうかに関係なく、この関数のすべてのインスタンスに同じパラメーターを追加するようにする必要がありますか?

これに関する情報は大歓迎です。ありがとう!

4

2 に答える 2

1

クラスを継承する場合は、まったく同じ署名が必要です。

func_get_argsを使用すると、簡単な回避策を実行できます。

function functionName ($param1) { // This is in the derived clas
    $params = func_get_args();
    $param2 = $params[1];
    $param3 = $params[2];
}
于 2012-12-11T07:59:08.623 に答える
1

OOPメソッドオーバーライドで次のことを行うため、追加のパラメーターを追加すると機能すると言います

「サブクラスの実装は、親クラスのメソッドと同じ名前、同じパラメーターまたはシグネチャ、および同じ戻り値の型を持つメソッドを提供することにより、スーパークラスの実装をオーバーライド (置換) します」

以下のリンクはあなたを助けるかもしれません

メソッドの宣言は、PHP の親メソッドと互換性がある必要があります

于 2012-12-11T07:46:08.547 に答える