PHP 5.2 厳密モード: 抽象静的クラス メソッドが禁止されている理由?
PHP 5.2 では、厳密な警告を有効にすると、おなじみの警告がトリガーされる場合があります: 「静的関数は抽象関数であってはなりません」。この警告は、抽象静的クラス メソッドを禁止する PHP 5.2 で導入された変更に由来しています。
理由: 歴史的見落とし
PHP 5.2 には当初、後期静的バインディングがありませんでした。抽象的な静的関数を役に立たないようレンダリングします。抽象静的メソッドの self キーワードは、メソッドが呼び出された子クラスではなく親クラスを参照するため、そのようなメソッドには実際的な意味はありません。したがって、この警告は、潜在的なコーディング エラーを検出して防止することを目的としていました。
遅延静的バインディングと欠陥のある正当化
PHP 5.3 では、遅延静的バインディングが導入され、 static キーワードを使用して親メソッドから呼び出される子クラスの静的メソッド。これにより、抽象静的メソッドを役に立たなくしていた技術的な障壁が取り除かれました。ただし、この警告は、抽象静的メソッドを公開するとパブリック メソッドが壊れる可能性があるという弱い引数に基づいて、PHP 5.2 でも存続しました。
誤った認識
警告には欠陥がありました。抽象静的メソッドは遅延静的バインディングと共存でき、親メソッドから子クラスの静的メソッドを呼び出す有効なユースケースを提供します。
混乱と不正確な応答
A遅延静的バインディングの追加による警告の削除を要求する PHP バグ レポートは、Rasmus Lerdorf から否定的な応答を受け取りました。彼は、遅延静的バインディングを持つ抽象静的メソッドは機能すると誤って述べましたが、それでも警告がトリガーされるため、これは正しくありませんでした。この混乱と明確さの欠如が警告の持続につながりました。
PHP 7 での解決策
幸いなことに、PHP 7 では最終的にこの問題が修正され、この警告が再分類されました。単なる気づきに。 PHP 7 の導入により、抽象静的メソッドが完全にサポートされ、警告が表示されることなく安全に使用できるようになりました。
以上がPHP 5.2 で抽象静的クラス メソッドが禁止されたのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。