Maison  >  Article  >  développement back-end  >  Pourquoi PHP 5.2 a-t-il interdit les méthodes de classe statique abstraite ?

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

DDD
DDDoriginal
2024-11-11 03:44:021002parcourir

Why Did PHP 5.2 Disallow Abstract Static Class Methods?

Mode strict de PHP 5.2 : pourquoi le refus des méthodes de classe statique abstraites ?

Dans PHP 5.2, l'activation des avertissements stricts peut déclencher un avertissement familier : "La fonction statique ne doit pas être abstraite". Cet avertissement découle d'un changement introduit dans PHP 5.2, qui interdit les méthodes de classe statiques abstraites.

La raison : une surveillance historique

PHP 5.2 manquait initialement de liaisons statiques tardives, rendant les fonctions statiques abstraites inutiles. Comme le mot-clé self dans les méthodes statiques abstraites faisait référence à la classe parent, et non à la classe enfant sur laquelle la méthode était invoquée, ces méthodes n'avaient aucune signification pratique. Ainsi, l'avertissement visait à détecter et à prévenir les erreurs de codage potentielles.

Liaisons statiques tardives et justification défectueuse

Dans PHP 5.3, des liaisons statiques tardives ont été introduites, permettant méthodes statiques des classes enfants à appeler à partir des méthodes parents à l’aide du mot-clé static. Cela a supprimé la barrière technique qui rendait inutiles les méthodes statiques abstraites. Cependant, l'avertissement a persisté dans PHP 5.2 sur la base d'un argument faible : que l'exposition de méthodes statiques abstraites pourrait entraîner des méthodes publiques cassées.

Une fausse perception

La justification de l'avertissement était erroné. Des méthodes statiques abstraites pourraient coexister avec des liaisons statiques tardives, fournissant un cas d'utilisation valide pour invoquer des méthodes statiques de classes enfants à partir de méthodes parent.

Confusion et réponse inexacte

A Le rapport de bug PHP demandant la suppression de l'avertissement en raison de l'ajout de liaisons statiques tardives a reçu une réponse dédaigneuse de Rasmus Lerdorf. Il a déclaré à tort que les méthodes statiques abstraites avec des liaisons statiques tardives étaient fonctionnelles, ce qui était incorrect car elles déclenchaient quand même l'avertissement. Cette confusion et ce manque de clarté ont conduit à la persistance de l'avertissement.

La résolution en PHP 7

Heureusement, PHP 7 a finalement rectifié ce problème, en reclassant cet avertissement à un simple avis. Avec l'introduction de PHP 7, les méthodes statiques abstraites sont entièrement prises en charge et peuvent être utilisées en toute sécurité sans déclencher d'avertissement.

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