Si vous avez dépassé l'étape débutante de votre formation PHP, vous avez entendu parler de PSR-0 - une norme de mise en œuvre de mise en scène qui définit les moyens d'inclure automatiquement les classes PHP dans votre code sans avoir à utiliser des instructions comme l'exigence et l'inclure.
PSR-0 examine l'espace de noms d'une classe et discerne son emplacement sur le disque dur à partir de ce peu d'informations. Par exemple, la classe ZendmailMessage conduirait à /path/to/project/lib/vendor/zend/mail/mesage.php.
PSR-0 prend également en charge les soulignements dans les noms de classe comme une alternative, pour faciliter la transition de 5.2 et plus tôt. Zend_mail_message conduirait également à /path/to/project/lib/vendor/zend/mail/mesage.php.
Lorsque le compositeur s'est présenté et a pris d'assaut le monde de la gestion des paquets PHP, les choses ont changé. En raison de certaines de ses règles, les dossiers ont souvent dupliqués et sont devenus trop profonds lorsque l'on considère les installations de classe PSR-0 via le compositeur. Par exemple, certaines structures de dossiers se sont retrouvées comme ceci:
vendor/ vendor_name/ package_name/ src/ Vendor_Name/ Package_Name/ ClassName.php # Vendor_Name\Package_Name\ClassName tests/ Vendor_Name/ Package_Name/ ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest
C'est au mieux chaotique, car:
Les répertoires «SRC» et «Tests» doivent inclure des noms de répertoire des fournisseurs et des packages. Ceci est un artefact de la conformité PSR-0.
Par conséquent, certains développeurs PHP hautement qualifiés se sont réunis et ont mis en place une suggestion pour une nouvelle norme: PSR-4.
PSR-4 vise à compléter et à travailler avec PSR-0 si nécessaire, pas complètement le remplacer. Cela peut, mais il n'est pas nécessaire. L'objectif principal du PSR-4 est d'éliminer les restes de PSR-0 et de pré-5,3 jours et de permettre une structure de dossiers plus concise. Avec PSR-4, l'arbre de dossier ci-dessus ressemblerait à ceci:
vendor/ vendor_name/ package_name/ src/ ClassName.php # Vendor_Name\Package_Name\ClassName tests/ ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest
La mise à niveau du PSR-0 n'était pas une option
parce que PSR-0 ne permet pas de chemin d'intercession entre les parties du nom de classe
Ceci est très important - cela signifie que la mise en œuvre du PSR-4, tout en permettant des packages beaucoup plus propres, serait beaucoup plus compliqué à mettre en œuvre. Nous appelons la mise en œuvre de package PSR-4, car elle favorise la propreté des emballages avant la simplicité.
Les objectifs suggérés sont les suivants: Gardez la règle PSR-0 selon laquelle tous les packages doivent contenir au moins deux niveaux d'espace de noms (fournisseur et pack des dossiers entre le combo du fournisseur-package et le reste du nom de classe entièrement qualifié.
Cela signifie que nous serions en mesure de mettre nos cours n'importe où dans le code du package où cela a du sens pour nous en tant qu'êtres humains, et de les utiliser en douceur en PHP sans écrire des techniques de chargement alternatives ou recourir à un chargement manuel.
En outre, le projet indique explicitement qu'un autoloader PSR-4 ne devrait jamais lancer des exceptions ni augmenter les erreurs simplement parce que plusieurs autoloaders peuvent être enregistrés, et si l'on ne charge pas de classe, d'autres devraient avoir la possibilité de le faire - lancer Une erreur et l'arrêt du flux brise cette compatibilité. Si des informations supplémentaires sur l'échec sont requises, il faut utiliser un enregistreur compatible PSR-3 ou d'autres moyens arbitraires.
Comme illustré dans l'exemple de fichier, en utilisant l'autoloader PSR-4 pour charger les classes de la structure suivante:
vendor/ vendor_name/ package_name/ src/ Vendor_Name/ Package_Name/ ClassName.php # Vendor_Name\Package_Name\ClassName tests/ Vendor_Name/ Package_Name/ ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest
ressemblerait à ceci:
vendor/ vendor_name/ package_name/ src/ ClassName.php # Vendor_Name\Package_Name\ClassName tests/ ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest
où l'appel de nouveau foobarquxquux; tenterait de charger à partir du premier répertoire enregistré, tandis que le nouveau FOOBARQUXQUXTEST; tenterait de se charger de la seconde.
Cet exemple illustre également l'utilisation de plusieurs dossiers par espace de noms unique.
Il n'y a pas de solution miracle en automatique. Chaque approche apporte avec elle-même quelques avantages et inconvénients - PSR-4 permettrait des structures de dossiers plus simples, mais nous empêcherait de connaître le chemin exact d'une classe simplement en regardant le nom entièrement qualifié. Le PSR-0, d'autre part, est chaotique sur le disque dur, mais soutient les développeurs qui sont coincés dans le passé (les utilisateurs de nom de nom de classe) et nous aide à discerner l'emplacement d'une classe simplement en regardant son nom.
Que pensez-vous du PSR-4? Faites-nous savoir dans les commentaires ci-dessous, ou exprimez votre opinion dans l'un des nombreux débats.
Quoi qu'il en soit - il ne fait aucun doute que la mise à jour axée sur le package est là pour rester. S'il n'est pas officiellement accepté comme standard, alors mis en œuvre sur mesure par les personnes qui en ont besoin. C'est à nous de rejoindre la discussion et d'améliorer suffisamment la notion pour atteindre cet état formel.
La principale différence entre PSR-0 et PSR-4 réside dans la façon dont ils gèrent les espaces de noms et la structure du répertoire. Le PSR-0 nécessite une corrélation directe entre les espaces de noms et la structure du répertoire, ce qui signifie que chaque soulignement dans l'espace de noms correspond à un séparateur de répertoire. D'un autre côté, le PSR-4 permet une approche plus flexible, où une partie de l'espace de noms peut être mappée à n'importe quel répertoire, et le reste de l'espace de nom Le PSR-4 introduit lorsque le PSR-0 était déjà en place?
Puis-je utiliser PSR-0 et PSR-4 dans le même projet?
Comment le PSR-4 améliore-t-il PSR-0?
Le PSR-0 est-il obsolète?
Comment fonctionne la mise à jour dans PSR-4?
quels sont les avantages de l'utilisation du PSR-4?
Comment puis-je migrer du PSR-0 vers PSR-4?
PSR-4 nécessite PHP 5.3 ou ultérieure. Si vous utilisez une ancienne version de PHP, vous devrez mettre à niveau afin d'utiliser PSR-4.
L'avenir de la mise en œuvre de la mise en scène dans PHP devrait continuer à évoluer, les nouvelles normes et pratiques étant introduites à mesure que la langue et son écosystème évoluent. Cependant, dans un avenir prévisible, le PSR-4 est la norme recommandée pour la mise en scène en php.
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!