phpメソッドの書き換えが発生した場合、パラメーターが異なり、エラーが報告されます: の宣言はそれと互換性があるはずです この種の問題が発生しても回避できない場合問題が発生しないようにするには、解決策を参照してください。
インターネットで検索したところ、多くの投稿が基本的に同じものをコピーしていることがわかりました。これは、PHP 5.3 バージョン以降、親クラスを最初に定義する場合は、継承クラスを定義する必要があるためです。継承されたクラスが最後である場合は、このエラーが発生します。特に、 http://bugs.php.net/bug.php?id=46851 では、肯定的な例と否定的な例も真剣に提供しています。
コードは次のとおりです | |
// このコードは厳密なメッセージをトリガーします class cc extends c { function test() { return null; } $cc = 新しい cc(); クラス c {関数 test( $a ) { return 1 } } $cc = 新しい cc(); |
そして、ほとんどのエラーは、_autoload() を使用してクラスを自動的にインクルードすることによって引き起こされ、その結果、後ろに基本クラスの定義があり、前にサブクラスの定義が生じることについて説明しました。
私のコードを見てみると、確かに自動ロードが使用されていますが、最初にいくつかの基本クラスが明示的にインポートされています。上記の肯定的な例と否定的な例も試してみましたが、すべて E_STRICT 警告が表示されました。
もう一度例を見てください
コードは次のとおりです | |
抽象クラス A { // メソッドにはパラメータがありません パブリック静的関数 foo(){ エコー 'バー' } ; } 抽象クラス B は A を拡張します { // メソッドにはパラメータがあります パブリック静的関数 foo($str){ echo $str } } ?> |
稲妻のように
例えば、上記のコードでは、クラス A の foo メソッドにはパラメータがなく、クラス B が A を継承した後に foo メソッドをオーバーライドするときにパラメータを追加するため、次の E_STRICT レベルのような警告が生成されます。
厳格な基準: ... の宣言はの宣言と互換性がある必要があります
本当の理由:
実際、サブクラスのオーバーライドされたメソッドのパラメーターが基本クラスのパラメーターと異なる場合は、パラメーターにデフォルト値を与えるだけで、コンパイラーはパラメーターが空であってもよいと認識し、オーバーライドされたメソッドと基本クラスのメソッドは同じです。
JAVA をよく使用する学生は、JAVA または C++ では、オーバーライドされたメソッドの関数シグネチャが基本クラスの関数と一致している必要があることを知っているはずです。これは、オーバーライドが本来は上書きを意味するためです。それはカバーされています、それは元の関数と一貫性があるはずです、そうでなければどうやって「カバー」することができますか? そして、メソッドの書き換えは主に仮想関数を書き換えるために、またはより明確にはインターフェース関数を書き換えるために使用されます。では、なぜインターフェイスが必要なのでしょうか? 。 。
そこで、新しいバージョンのPHPでは、プログラマに書き換え方法が正しいかどうかを思い出させるために、このE_STRICT警告エラーを定義するのは非常に有用だと思います。
最後に、私は依然として上記のコピーされた投稿を軽蔑します。言語が基本クラスとサブクラスの定義の順序を乱すことさえできない場合、それはコンパイラーに何か重大な問題があることを意味します。