PHP メソッドの書き換え: の宣言は that_PHP チュートリアルと互換性がある必要があります

WBOY
リリース: 2016-07-13 10:13:00
オリジナル
1320 人が閲覧しました

phpメソッドの書き換え: の宣言はそれと互換性があるはずです

phpメソッドの書き換えが発生した場合、パラメーターが異なり、エラーが報告されます: の宣言はそれと互換性があるはずです この種の問題が発生しても回避できない場合問題が発生しないようにするには、解決策を参照してください。

インターネットで検索したところ、多くの投稿が基本的に同じものをコピーしていることがわかりました。これは、PHP 5.3 バージョン以降、親クラスを最初に定義する場合は、継承クラスを定義する必要があるためです。継承されたクラスが最後である場合は、このエラーが発生します。特に、 http://bugs.php.net/bug.php?id=46851 では、肯定的な例と否定的な例も真剣に提供しています。

コードは次のとおりです

// このコードは厳密なメッセージをトリガーします
error_reporting( E_ALL | E_STRICT );

class cc extends c { function test() { return null; }
クラス c { 関数 test( $a ) { 戻り値 1 } }

$cc = 新しい cc();
?>
< ?php
// このコードは厳密なメッセージをトリガーしません
error_reporting( E_ALL | E_STRICT );

クラス c {関数 test( $a ) { return 1 } }
class cc extends c { function test() { return null; }

$cc = 新しい cc();
?>

そして、ほとんどのエラーは、_autoload() を使用してクラスを自動的にインクルードすることによって引き起こされ、その結果、後ろに基本クラスの定義があり、前にサブクラスの定義が生じることについて説明しました。

私のコードを見てみると、確かに自動ロードが使用されていますが、最初にいくつかの基本クラスが明示的にインポートされています。上記の肯定的な例と否定的な例も試してみましたが、すべて E_STRICT 警告が表示されました。

もう一度例を見てください

コードは次のとおりです
抽象クラス A {
// メソッドにはパラメータがありません
パブリック静的関数 foo(){ エコー 'バー' }
; }

抽象クラス B は A を拡張します {
// メソッドにはパラメータがあります
パブリック静的関数 foo($str){ echo $str }
}
?>

稲妻のように

例えば、上記のコードでは、クラス A の foo メソッドにはパラメータがなく、クラス B が A を継承した後に foo メソッドをオーバーライドするときにパラメータを追加するため、次の E_STRICT レベルのような警告が生成されます。

厳格な基準: ... の宣言は

の宣言と互換性がある必要があります

コードは次のとおりです 抽象クラス A {
// メソッドにはパラメータがありません
パブリック静的関数 foo(){ エコー 'バー' }
; }

抽象クラス B は A を拡張します {
// メソッドにはパラメータがあります
パブリック静的関数 foo($str = NULL){ echo $str }
}
?>
クラスBは、fooメソッドをオーバーライドするときに、新しく追加されたパラメータのデフォルト値を指定できます

本当の理由:

実際、サブクラスのオーバーライドされたメソッドのパラメーターが基本クラスのパラメーターと異なる場合は、パラメーターにデフォルト値を与えるだけで、コンパイラーはパラメーターが空であってもよいと認識し、オーバーライドされたメソッドと基本クラスのメソッドは同じです。

JAVA をよく使用する学生は、JAVA または C++ では、オーバーライドされたメソッドの関数シグネチャが基本クラスの関数と一致している必要があることを知っているはずです。これは、オーバーライドが本来は上書きを意味するためです。それはカバーされています、それは元の関数と一貫性があるはずです、そうでなければどうやって「カバー」することができますか? そして、メソッドの書き換えは主に仮想関数を書き換えるために、またはより明確にはインターフェース関数を書き換えるために使用されます。では、なぜインターフェイスが必要なのでしょうか? 。 。

そこで、新しいバージョンのPHPでは、プログラマに書き換え方法が正しいかどうかを思い出させるために、このE_STRICT警告エラーを定義するのは非常に有用だと思います。

最後に、私は依然として上記のコピーされた投稿を軽蔑します。言語が基本クラスとサブクラスの定義の順序を乱すことさえできない場合、それはコンパイラーに何か重大な問題があることを意味します。

http://www.bkjia.com/PHPjc/917545.htmlwww.bkjia.com本当http://www.bkjia.com/PHPjc/917545.html技術記事 PHP メソッドの書き換え: の宣言は、それと互換性がある必要があります。 PHP メソッドの書き換えが発生し、パラメーターが異なる場合、エラー メッセージが報告されます: の宣言は、それと互換性がある必要があります。この種の問題はありません...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート