ホームページ > バックエンド開発 > PHPチュートリアル > PHP が Strict モードでの抽象静的クラス メソッドを禁止したのはなぜですか?

PHP が Strict モードでの抽象静的クラス メソッドを禁止したのはなぜですか?

Linda Hamilton
リリース: 2024-11-19 19:30:03
オリジナル
647 人が閲覧しました

Why Did PHP Disallow Abstract Static Class Methods in Strict Mode?

PHP の厳密モードで抽象静的クラス メソッドが禁止される理由

PHP 5.2 では、厳密な警告を有効にすると、抽象静的クラス メソッドに対する警告がトリガーされます。この制限は、PHP 5.0.x および 5.1.x が、以降のバージョンでそのようなメソッドを禁止する意図で、誤ってそのようなメソッドを許可したために実装されました。

PHP 5.2 の抽象静的メソッドの問題

この問題は、PHP まで導入されなかった後期静的バインディングの動作から発生します。 5.3. PHP 5.2 では、以下の例のようなコードは意図したとおりに動作しません。

abstract class ParentClass {
    static function foo() {
        echo "I'm gonna do bar()";
        self::bar();
    }

    abstract static function bar();
}

class ChildClass extends ParentClass {
    static function bar() {
        echo "Hello, World!";
    }
}

ChildClass::foo();
ログイン後にコピー

この場合、self::bar() は、foo( の場合でも、ParentClass の bar() メソッドを明示的に参照します。 ) が ChildClass のメソッドとして呼び出されました。これにより、PHP 5.2 の抽象静的メソッドは役に立たなくなりました。抽象メソッドの本質は、子クラスでさまざまな実装を可能にすることだからです。

PHP 5.3 以降の正当性の欠如

PHP 5.3 での後期静的バインディングの導入により、抽象静的メソッドに対する主な議論は排除されました。上記の例では self::bar() の代わりに static::bar() を使用できるようになり、親クラスで定義されたメソッドが子クラスの静的メソッドを呼び出せるようになります。

の永続性警告

後期静的バインディングの導入にもかかわらず、抽象静的メソッドに対する警告は PHP に残されました。削除を求めた PHP バグレポート 53081 は、PHP の作成者である Rasmus Lerdorf の誤解により、「偽物」として誤ってクローズされました。

PHP 7 での解決策

ついに、PHP 7 では警告が削除されました。 PHP RFC: Reclassify E_STRICT 通知は通知として再分類され、strict モードでエラーが発生しなくなりました。この変更により、抽象静的メソッドの有用性と有効性が認識されます。

以上がPHP が Strict モードでの抽象静的クラス メソッドを禁止したのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート