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();
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!