Abolition par PHP des méthodes de classe statiques abstraites dans la version 5.2
Dans PHP 5.2 et au-delà, l'utilisation de méthodes statiques abstraites dans les classes est interdite. Cette décision découle d'une combinaison d'oublis, de défauts de conception et d'une incompréhension du mot-clé self.
Le contexte problématique
Au départ, PHP 5.0x et 5.1x par erreur permettait la déclaration de fonctions statiques abstraites au sein des classes. Cependant, cela a été rendu inutile en raison de l'absence de liaisons statiques tardives. Par conséquent, un code comme celui-ci échouerait :
abstract class ParentClass { static function foo() { self::bar(); } abstract static function bar(); } class ChildClass extends ParentClass { static function bar() { echo "Hello, World!"; } } ChildClass::foo();
Dans cet exemple, l'appel self::bar() dans foo() fait référence à la méthode bar() dans ParentClass, même si foo( ) est invoquée comme méthode de ChildClass. Par conséquent, le code génère une erreur fatale, indiquant que la méthode abstraite ParentClass::bar() ne peut pas être appelée.
La justification de l'avertissement
Compte tenu de cette limitation , PHP 5.2 a émis à juste titre un avertissement pour décourager l'utilisation de méthodes statiques abstraites. Puisqu'ils n'avaient aucun but pratique, toute utilisation était probablement due à un malentendu et était donc considérée comme un mauvais code.
Le malentendu résolu
PHP 5.3 a introduit des liaisons statiques tardives, permettre aux méthodes des classes parents d'accéder aux méthodes statiques des classes enfants. Avec cet ajout, la justification de l’interdiction des méthodes statiques abstraites est devenue moins convaincante. Cependant, l'avertissement a persisté en raison d'un argument ténu selon lequel l'exposition de méthodes statiques défectueuses pourrait être problématique.
L'erreur et sa résolution
Malheureusement, un malentendu de Rasmus Lerdorf, Le créateur de PHP a conduit à la fermeture par erreur d'un rapport de bug plaidant pour la suppression de l'avertissement. Par la suite, l'avertissement est resté en place malgré son absence de justification solide.
L'avenir des méthodes statiques abstraites
Heureusement, PHP 7 a finalement supprimé l'avertissement, car proposé dans RFC : Reclassifier les notifications E_STRICT. Avec sa suppression, les développeurs peuvent à nouveau utiliser des méthodes statiques abstraites sans rencontrer de faux avertissements.
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!