0

静的関数を定義する子クラスがあります。

class functionover
{
    function override($num1, $num2)
    {
        $total = $num1+$num2;
    }


}
class childfunctionover extends functionover
{
    static function override($num1, $num2)
    {
        $sum = $num1+$num2;
    }
}



functionover :: override(10, 20);

プログラムを実行すると、次のエラーが表示されます。

Cannot make non static method functionover::override() static in class childfunctionover

どうして?

4

1 に答える 1

2

問題

メソッドの継承、拡張、オーバーライドについて話すとき、PHP はちょっと厳密です (これらは関数ではありません!functionキーワードに惑わされないでください)。

親にstaticメソッドがある場合、オーバーライドはのみですstaticstaticに変身することはできませんnon-static

これは両方の方法で機能します。non-staticメソッドをオーバーライドして 1 つにすることはできませんstatic。これは、多くの継承規則に違反します。

メソッドをオーバーライドする場合のルールは次のとおりです。

  1. 子のメソッド名は、親のメソッド名と正確に同じでなければなりません
  2. 子のメソッドは、同じ数の引数を受け入れる必要があります。いくつかのデフォルト値が定義されている場合、それらは同じでなければなりません
  3. メソッドの呼び出しのタイプ (staticまたはそうでない) を保持する必要があります。

これらは、適用されるすべてのルールであるとは限りません。詳細については、マニュアルを参照してください

解決

親のメソッドを変更するか、子のメソッドからキーワードをstatic削除してください。static

于 2015-03-25T08:56:32.830 に答える