Maison  >  Article  >  développement back-end  >  Pourquoi les méthodes de classes statiques abstraites ont-elles été abolies dans PHP 5.2 ?

Pourquoi les méthodes de classes statiques abstraites ont-elles été abolies dans PHP 5.2 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-12 04:26:01305parcourir

Why Were Abstract Static Class Methods Abolished in PHP 5.2 ?

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!

Déclaration:
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