Maison > développement back-end > tutoriel php > Pourquoi PHP a-t-il interdit les méthodes de classe statique abstraite en mode strict ?

Pourquoi PHP a-t-il interdit les méthodes de classe statique abstraite en mode strict ?

Linda Hamilton
Libérer: 2024-11-19 19:30:03
original
647 Les gens l'ont consulté

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

Pourquoi le mode strict de PHP interdit les méthodes de classe statique abstraites

Dans PHP 5.2, l'activation des avertissements stricts déclencherait des avertissements pour les méthodes de classe statique abstraite. Cette restriction a été implémentée car PHP 5.0.x et 5.1.x autorisent par erreur de telles méthodes, avec l'intention de les interdire dans les versions ultérieures.

Le problème avec les méthodes statiques abstraites dans PHP 5.2

Le problème vient du comportement des liaisons statiques tardives, qui n'ont été introduites qu'avec PHP 5.3. En PHP 5.2, un code comme l'exemple ci-dessous ne fonctionnerait pas comme prévu :

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();
Copier après la connexion

Dans ce cas, self::bar() ferait explicitement référence à la méthode bar() dans ParentClass, même si foo( ) a été appelée comme méthode de ChildClass. Cela rendait les méthodes statiques abstraites inutiles dans PHP 5.2, car le but des méthodes abstraites est de permettre différentes implémentations dans les classes enfants.

Le manque de justification après PHP 5.3

Avec l'introduction des liaisons statiques tardives dans PHP 5.3, le principal argument contre les méthodes statiques abstraites a été éliminé. Static::bar() pourrait désormais être utilisé à la place de self::bar() dans l'exemple ci-dessus, permettant aux méthodes définies dans une classe parent d'appeler des méthodes statiques dans les classes enfants.

La persistance de l'avertissement

Malgré l'introduction de liaisons statiques tardives, l'avertissement pour les méthodes statiques abstraites est resté en PHP. Le rapport de bug PHP 53081, qui appelait à sa suppression, a été fermé par erreur comme étant « faux » en raison d'un malentendu de la part de Rasmus Lerdorf, le créateur de PHP.

La résolution en PHP 7

Enfin, dans PHP 7, l'avertissement a été supprimé. PHP RFC : Reclassifier les notifications E_STRICT l'a reclassé en notification, ne générant plus d'erreur en mode strict. Ce changement reconnaît l'utilité et la validité des méthodes statiques abstraites.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal