PSR-Duh!

Dans une leçon précédente ici sur Nettuts +, vous en apprendrez davantage sur le PSR; Cependant, cet article ne détaillait pas le processus d'intégration de ce style de codage dans vos projets. Corrigeons ça!

Remarque: Cet article suppose que vous avez lu PSR-Huh? et que vous comprenez à quoi PSR fait référence. Commençons par le premier standard: PSR-0.


PSR-0 - La norme de chargement automatique

Le plugin PHPCS est l'outil le plus utile que j'ai utilisé.

Dans le passé, nous avons inclus les fichiers PHP de deux manières:

  • Utilisation d'un bloc géant d'instructions include en haut de chaque fichier.
  • Lister tous les inclus dans un seul fichier et inclure ce fichier unique dans votre projet.

Il y a des avantages et des inconvénients à ces deux approches, mais je pense que nous pouvons tous convenir que ni l'une ni l'autre ne sont des solutions optimales ou modernes. PHP5 a introduit le concept de chargement automatique des fichiers en fonction de leurs noms de classe; Le PSR-0 vise donc à garder les noms de fichiers cohérents..

Les espaces de noms n'ont rien à voir avec les noms de fichiers ou le chargement automatique; vous pouvez techniquement déclarer différents espaces de noms dans le même fichier. Par exemple, le code suivant est parfaitement valide.

  

Il y en a deux Bonjour classes de ce fichier unique, mais elles résident dans des espaces de noms différents. Les deux dernières lignes de ce code instancient le Bonjour() classes sur leurs espaces de noms respectifs. La première sortie "Nettuts +", tandis que la seconde renvoie "Gabriel". Les espaces de noms vous permettent de différencier deux classes portant le même nom, comme si vous étiez habitué à utiliser des dossiers sur votre bureau. La norme PSR-0 exploite simplement les avantages des espaces de noms, facilitant ainsi le chargement automatique de vos classes. En nommant systématiquement vos fichiers, vous pouvez créer une fonction qui localise automatiquement les fichiers nécessaires..

Pour être conforme au PSR-1, vous devez également suivre PSR-0..

Assurez-vous de lire la norme complète, mais pour résumer:

  • Chaque classe doit être nommée avec le nom du projet (ou du créateur).
  • Les traits de soulignement dans le nom de la classe doivent être convertis en séparateurs de répertoires..
  • Les fichiers doivent avoir le .php extension.

Par exemple, une référence de classe de:

 \ Nettuts \ Database \ SQL_Postgres

si vous suivez PSR-0, cela devrait se traduire par:

 ./Nettuts/Database/SQL/Postgres.php

Comment pourrions-nous implémenter cette fonctionnalité? La solution la plus évidente consiste à utiliser Composer, qui est livré avec un autochargeur compatible PSR-0. Si vous utilisez Composer dans vos projets (et vous devriez le faire), optez pour son autochargeur, plutôt que d'écrire votre propre.

Un chargeur compatible PSR-0 vous permet de spécifier un chemin de base, en indiquant au chargeur quel répertoire rechercher en premier. Pour commencer, créez un simple composer.json fichier contenant le JSON suivant:

 "autoload": "psr-0": "Nettuts": "./", "Gmanricks": "vendor /"

Ce fichier JSON indique à Composer que nous souhaitons utiliser la norme PSR-0 pour charger automatiquement tous les fichiers. Nettuts-namespaced fichiers avec le répertoire en cours (le dossier racine) comme chemin de base. Nous voulons aussi charger automatiquement toutes les classes avec Gmanricks espace de noms, par rapport au vendeur dossier (par exemple. ./ vendor / Gmanricks / ClassName).

Maintenant, tapez "compositeur installer"générer les classes à chargement automatique, ou"composer dump-autoload"lors des éditions ultérieures pour régénérer les classes d'autoload. N'oubliez pas non plus d'exiger l'autoloader à un stade précoce de votre projet.

  

Composer est votre meilleure option, mais il peut y avoir des scénarios dans lesquels vous voulez un petit autochargeur simple. PHP-FIG fournit un exemple d'autoloader que vous pouvez utiliser:

 function __autoload ($ className) $ className = ltrim ($ className, '\\'); $ fileName = "; $ namespace ="; if ($ lastNsPos = strrpos ($ className, '\\')) $ espace de noms = substr ($ className, 0, $ lastNsPos); $ className = substr ($ className, $ lastNsPos + 1); $ fileName = str_replace ('\\', DIRECTORY_SEPARATOR, $ namespace). DIRECTORY_SEPARATOR;  $ fileName. = str_replace ('_', DIRECTORY_SEPARATOR, $ className). '.php'; require $ nomfichier; 

Il est important de noter que ce chargeur tente de charger toutes les classes en utilisant le standard PSR dans le répertoire actuel..

Maintenant que le chargement automatique des classes est réussi, passons à la norme suivante: la norme de codage de base.


PSR-1 - La norme de base pour le codage

Le PSR-1 définit les directives générales de codage, qui peuvent être divisées en deux parties.

Conventions de nommage

Les espaces de noms vous permettent de différencier deux classes du même nom..

Comme pour tout langage de programmation, le respect des conventions de dénomination rend votre code plus facile à lire et à gérer. Voici quelques règles à suivre:

  • Les noms de classe utilisent PascalCase.
  • Les noms de méthodes doivent être dans affaire de chameau.
  • Les constantes nécessitent toutes les lettres majuscules, en séparant chaque mot par un trait de soulignement (par exemple,. CONSTANT_VARIABLE).

Conventions de code:

Il y a plus que des conventions de nommage; suivez également ces directives:

  • Seule utilisation ou dans votre code. Ne fermez pas PHP dans une classe.
  • Les fichiers doivent soit déclarer des symboles, soit les utiliser.
  • Les fichiers doivent être au format UTF-8 sans nomenclature pour code PHP

La plupart d’entre elles s’expliquent d’elles-mêmes, mais la convention du milieu est légèrement déroutante. Cela dicte essentiellement que toute déclaration, qu’il s’agisse de fonctions, de classes, etc., doit être séparée dans ses propres fichiers. Cela favorise non seulement les meilleures pratiques telles que la réutilisation et la séparation de code, mais maintient également votre code propre et net..

Il est à noter que chaque norme PSR est basée sur la norme PSR précédente. En tant que tel, pour être compatible PSR-1, vous devez également suivre PSR-0. En suivant ces deux normes, votre code sera proprement nommé et auto-chargé. Il n'y a vraiment aucune raison de ne pas les suivre.

Oui, certains développeurs se plaignent de PSR et préfèrent suivre d'autres conventions, mais en respectant cette norme, vous pouvez partager du code avec tout le monde sans vous soucier de sa cohérence. Cela dit, personne ne vous force la main. C'est simplement une recommandation recommandée.

La prochaine norme, PSR-2, s'intéresse à la structure de votre code..


PSR-2 - La norme de codage avancé

Le PSR-2 décrit en détail comment structurer votre code..

Ensuite, nous arrivons au standard auquel les développeurs PHP ont le plus à faire; en fait, c'est la raison pour laquelle j'ai choisi d'écrire cet article.

Le PSR-2 définit de nombreuses règles, dont beaucoup sont énumérées ci-dessous:

  • Quatre espaces doivent être utilisés à la place des tabulations.
  • La longueur de ligne idéale devrait être inférieure à 80 caractères, mais une limite souple de 120 caractères devrait être imposée à toutes les lignes..
  • Il devrait y avoir une ligne blanche sous le espace de noms et utilisation déclarations.
  • L'attelle d'ouverture d'une méthode ou d'une classe doit être sur sa propre ligne.
  • L'attelle de fermeture d'une méthode ou d'une classe doit aller sur la ligne immédiatement après le corps.
  • Toutes les propriétés et méthodes nécessitent un niveau de visibilité.
  • Le 'abstrait'/'final"les mots clés doivent apparaître avant la visibilité de"statique'va après.
  • Les mots clés de la structure de contrôle doivent être suivis d'un espace.
  • L'accolade ouvrante d'une instruction de contrôle doit apparaître sur la même ligne que l'instruction.

Assurez-vous de voir la spécification complète pour un aperçu complet.

Le PSR-2 est tout aussi important que le PSR-1 (et le PSR-0). Il vise à rendre le code facile à lire et à maintenir. Mais, comme on dit, "Le diable est dans les détails."Il y a beaucoup de détails à garder en mémoire, ce qui peut être difficile si vos habitudes de programmation diffèrent de ce que la norme définit. PSR-2 Le meilleur outil est peut-être le plugin Sublime Text, PHPCS.


PHPCS - Renifleur de code PHP

Le plugin PHPCS est l’outil le plus utile que j’ai utilisé pour mettre le code en forme. Cela vous permet non seulement de vous assurer que votre code respecte les normes PSR, mais il utilise également le linter de PHP pour vérifier les erreurs de syntaxe. C'est un excellent gain de temps; vous n'avez plus à vous soucier des erreurs de syntaxe lorsque vous testez votre code dans le navigateur.

Installez le paquet via Sublime Package Control (appelé Phpcs), ou alternativement avec Git, en utilisant les commandes suivantes:

 cd ~ / Bibliothèque / Application \ Support / Sublime \ Text \ 2 / Packages / git clone git: //github.com/benmatselby/sublime-phpcs.git Phpcs

Cela installe le plugin, mais vous avez besoin de quelques dépendances avant de pouvoir configurer PHPCS. Encore une fois, le moyen le plus simple de les installer est avec Composer. Accédez au répertoire de votre choix et créez un composer.json fichier avec le JSON suivant:

 "name": "Nettuts PHPCS Demo", "require": "squizlabs / php_codesniffer": "*", "fabpot / php-cs-fixer": "*", "phpmd / phpmd": "*" 

Cela installe les trois dépendances dans le dossier actuel. Ouvrez une fenêtre de terminal à votre emplacement d'installation et tapez compositeur installer, et il téléchargera les paquets nécessaires.

Maintenant, vous pouvez configurer le plugin dans Sublime Text. Naviguez jusqu'à 'Préférences'> 'Paramètres du paquet'> 'Renifleur de code PHP'> 'Paramètres - Utilisateur'.

Le plugin doit savoir où résident les trois dépendances, ainsi que la norme à laquelle notre code doit adhérer:

 "phpcs_additional_args": "--standard": "PSR2", "-n": "", "phpcs_executable_path": "DEPENDENCY_PATH / vendor / bin / phpcs", "phpmd_executable_path": "DEPENDENCY_PATH / vendor / bin / phpcs", "phpmc_executable_path": "DEPENDENCY_PATH / bin / phpcs" phpmd "," php_cs_fixer_executable_path ":" DEPENDENCY_PATH / vendor / bin / php-cs-fixer "

Ces paramètres indiquent à PHPCS que nous souhaitons respecter la norme PSR2 et indiquer le chemin de chaque dépendance. N'oubliez pas de remplacer DEPENDENCY_PATH avec votre chemin actuel.

Redémarrez Sublime et le code renifleur analysera votre code lorsque vous enregistrez vos fichiers PHP..

En cliquant avec le bouton droit de la souris dans l'éditeur, plusieurs nouvelles options seront également répertoriées, telles que la suppression des marques d'erreur et la tentative de résolution des problèmes non standard. Cependant, étant donné que le but de cet article est de vous habituer à la norme, je suggère de corriger manuellement votre code et d'éviter l'utilisation automatique fixateur fonctionnalité.


Conclusion

Les normes PSR ont été créées pour que le code puisse être facilement réutilisé d'un projet à l'autre, sans sacrifier la cohérence du style de code. Même s’ils peuvent se sentir découragés au début, vous pouvez utiliser les idées et les outils de cet article pour vous aider à faire la transition..

Pour répéter une dernière fois: personne ne vous oblige à changer la façon dont vous codez en PHP. C'est simplement un guide, conçu à l'origine pour l'interopérabilité du cadre. Cela dit, chez Nettuts +, nous considérons que c'est une pratique exemplaire à suivre. Maintenant, décidez-vous! Si vous avez des questions, écoutons-les ci-dessous!