Voici en synthèse les différentes PSR :
- PSR-1: Basic Coding Standard (principes syntaxiques, tels que l'utilisation du PascalCase pour le nommage des classes, l'encodage, etc.)
- PSR-12 (remplace PSR-2): Extending Coding Style Guide (principes complémentaires, comme l'identation, la longueur des lignes de code, l'ajout des commentaires et DocBlocks, etc.)
- PSR-3: Logger Interface (écriture dans les fichiers de log)
- PSR-4: Autoloader (la capacité à charger dynamiquement les librairies nécessaires)
- PSR-6: Caching Interface
- PSR-16: Common Interface for Caching Library
- PSR-7: HTTP Message Interface
- PSR-15: HTTP Server Request Handlers
- PSR-17: HTTP Factories
- PSR-18: HTTP Client
- PSR-11: Container Interface
- PSR-13: Link Definition Interface
- PSR-14: Event Dispatcher
- PSR-20: Clock Interface
Alors, oui, tout cela part d'un bon esprit, mais respecter l'ensemble de ces règles impose de les connaître par cœur, ou alors d'employer des plugins existants et respectueux desdites recommandations, sachant qu'elles évoluent et s'augmentent avec l'évolution des langages. Et, par exemple, les “contraintes” de largeur de lignes ou de documentation ne sont pas toujours respectées, exemple :
<file name="\path\to\vendor\symfony\translation-contracts\TranslatorTrait.php" errors="1" warnings="8" fixable="1">
<error line="100" column="25" source="PSR12.ControlStructures.ControlStructureSpacing.FirstExpressionLine" severity="5" fixable="1">The first expression of a multi-line control structure must be on the line after the opening parenthesis</error>
<warning line="122" column="252" source="Generic.Files.LineLength.TooLong" severity="5" fixable="0">Line exceeds 120 characters; contains 252 characters</warning>
[...]
</file>
Idem pour les sauts de ligne. Sous Microsoft Windows, par défaut nous avons un Carriage Return et un Line Feed, alors que PSR-1 réclame uniquement le Line Feed, propre à Unix. Tout le monde ne code pas sous Unix :)
Est-ce que cela nuit au bon fonctionnement de l'application ou à la lecture du code ? Non. Parfois, ces recommandations sont plus contraignantes qu'autre chose. Notamment les 80 colonnes par ligne me rappellent COBOL (COmmon Business-Oriented Language) et sa structure très architecturée.
Comment savoir si votre code est compatible PSR ? Il existe des outils d'audit, soit en ligne de commande, soit directement intégrés à votre outil de développement ; par exemple CodeSniffer ou PHP CS Fixer pour NetBeans.
Source : PHP-Fig