Maison >développement back-end >tutoriel php >Pourquoi les méthodes abstraites statiques ont-elles été interdites dans PHP 5.2 et qu'est-ce qui a changé dans les versions ultérieures ?

Pourquoi les méthodes abstraites statiques ont-elles été interdites dans PHP 5.2 et qu'est-ce qui a changé dans les versions ultérieures ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-14 12:57:021024parcourir

Why Were Static Abstract Methods Disallowed in PHP 5.2 and What Changed in Later Versions?

Pourquoi les méthodes abstraites statiques ont été interdites dans PHP 5.2

Dans PHP 5.2, l'introduction d'avertissements stricts a conduit à une vague d'avertissements de normes liés pour abstraire les méthodes de classe statique. Ce changement a soulevé la question : pourquoi PHP ne devrait-il pas autoriser les fonctions statiques abstraites ?

Le raisonnement derrière l'interdiction

Initialement, l'interdiction des méthodes statiques abstraites dans PHP 5.2 était dû à l’absence de liaisons statiques tardives. À l'époque, un code comme celui-ci ne se comportait 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();

Même lorsqu'il est appelé en tant que méthode de la classe enfant, l'appel self::bar() ferait référence à la méthode bar() de ParentClass. Sans liaisons statiques tardives, cette limitation rendait les méthodes statiques abstraites essentiellement inutiles.

L'ajout de liaisons statiques tardives

Avec l'introduction de PHP 5.3, le mot clé static autorisait les méthodes dans les classes parents pour appeler des méthodes statiques dans les classes enfants. Cela a ouvert la porte à une utilisation raisonnable des méthodes statiques abstraites. Les liaisons statiques tardives ont résolu la limitation précédente et rendu les méthodes abstraites statiques réalisables.

La justification erronée

Malgré l'introduction de liaisons statiques tardives, l'avertissement contre les fonctions statiques abstraites a persisté . L'argument avancé était que l'appel de ParentClass::foo() pourrait exposer une méthode ParentClass::bar() cassée. Cependant, ce problème pourrait être résolu en garantissant que les classes abstraites ne sont pas instanciées.

La décision erronée

Malgré la justification erronée, l'avertissement est resté en PHP. Un rapport de bug PHP appelant à sa suppression a été fermé à tort comme étant « faux ». Cette décision erronée a maintenu l'avertissement en place, à la grande frustration des développeurs.

L'avenir des méthodes abstraites statiques

Heureusement, l'avertissement est sur le point d'être supprimé. dans PHP 7. Ce changement alignera PHP sur les pratiques modernes de programmation orientée objet et permettra aux développeurs d'utiliser des méthodes statiques abstraites sans avertissements inutiles. Les développeurs n'auront plus besoin de naviguer dans la confusion causée par la décision erronée de PHP 5.2.

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