Mode strict de PHP 5.2 : pourquoi l'interdiction 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 provient d'un changement introduit dans PHP 5.2, qui interdit les méthodes de classe statique 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 persistait 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é. Les 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 parents.
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 dans 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.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3