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 の導入により、抽象静的メソッドが完全にサポートされ、警告が表示されることなく安全に使用できるようになりました。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3