PHP 5.2 での抽象静的クラス メソッドの廃止
PHP 5.2 以降では、クラス内での抽象静的メソッドの使用が禁止されています。この決定は、見落とし、設計上の欠陥、および self キーワードの誤解の組み合わせから生じています。
問題のあるコンテキスト
当初、PHP 5.0x と 5.1x は間違っていました。クラス内で抽象静的関数の宣言を許可しました。ただし、遅延静的バインディングがないため、これは役に立たなくなりました。その結果、次のようなコードは失敗します。
abstract class ParentClass { static function foo() { self::bar(); } abstract static function bar(); } class ChildClass extends ParentClass { static function bar() { echo "Hello, World!"; } } ChildClass::foo();
この例では、foo() の場合でも、foo() 内の self::bar() 呼び出しは ParentClass の bar() メソッドを参照します。 ) は ChildClass のメソッドとして呼び出されます。その結果、コードは致命的なエラーを生成し、抽象メソッド ParentClass::bar() を呼び出すことができないことを示します。
警告の根拠
この制限を考慮すると, PHP 5.2 は、抽象静的メソッドの使用を避けるための警告を正当に発行しました。これらは実用的な目的を果たさなかったため、どのような使用も誤解によるものである可能性が高く、したがって悪いコードとみなされます。
誤解は解決されました
PHP 5.3 では後期静的バインディングが導入されました。親クラスのメソッドが子クラスの静的メソッドにアクセスできるようにします。この追加により、抽象静的メソッドを禁止する理論的根拠が説得力を失いました。しかし、壊れた静的メソッドを公開することには問題がある可能性があるという議論が希薄なため、警告は残りました。
エラーとその解決策
残念ながら、Rasmus Lerdorf 氏による誤解でした。 PHP の作成者は、警告の削除を主張するバグ レポートを誤って閉鎖する原因となりました。その後、明確な根拠がないにもかかわらず、この警告はそのまま残りました。
抽象静的メソッドの将来
幸いなことに、PHP 7 では最終的に警告が削除されました。 RFC で提案: E_STRICT 通知を再分類します。この廃止により、開発者は、偽の警告に遭遇することなく、抽象静的メソッドを再び利用できるようになります。
以上がPHP 5.2 で抽象静的クラス メソッドが廃止されたのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。