WP Core Handbook> PHP Coding Standards> Naming Conventions suggère ce qui suit pour nommer des fichiers avec des classes:
Les noms de fichiers de classe doivent être basés sur le nom de classe avec
class-
préfixé et les traits de soulignement dans le nom de classe remplacés par des tirets, par exempleWP_Error
devient:class-wp-error.php
Bien que le libellé de la section soit principalement destiné à une utilisation de base , le style de codage dans son ensemble s'applique généralement (et devrait à mon avis) au code WP tiers.
Cependant, comme le noyau ne prend pas en charge les espaces de noms (PHP 5.2, ugh), cela ne tient pas compte de ce cas.
Quelle est la façon pratique de procéder du point de vue de la commodité du développeur? Prise en charge des chargeurs automatiques?
Je pouvais voir plusieurs façons alternatives:
- ignorer complètement l'espace de noms
- y compris l'espace de noms dans le nom de fichier
- utiliser des espaces de noms comme niveaux de dossier
- utilisant un schéma de nommage alternatif, tel que PSR
la source
Réponses:
Tout d'abord, ignorez le
class-
préfixe. Cela vient de l'approche de code procédural pur de WordPress, les classes sont utilisées comme conteneurs pour le code procédural, pas pour des objets réels, et la plupart des fichiers ne contiennent pas du tout de classes ou des classes et d'autres codes ensemble. Cela n'a aucun sens lorsque tous vos fichiers contiennent une seule classe et rien d'autre.Si vous suivez ce modèle, vous devrez utiliser
interface-foo.php
ettrait-bar.php
. Cela n'a pas seulement l'air ridicule, cela rend le chargement automatique plus difficile que nécessaire.La meilleure façon de séparer les espaces de noms et les noms de classe / interface / trait est (d'après mon expérience) d'attribuer des espaces de noms aux noms de répertoire et des noms de classe aux noms de fichiers. Cela rend très facile à cartographier la classe demandée à une structure de fichier donné dans le chargeur automatique: Il suffit de convertir
\
à/
, append.php
et charger le fichier.Cela facilite également la mise en cache des recherches: pour chaque répertoire / espace de noms, vous pouvez récupérer tous les fichiers existants la première fois que ce répertoire est demandé, et pour les appels ultérieurs, vous pouvez réutiliser cette liste de noms de fichiers sans demander à
file_exists()
chaque fois .la source
J'ai créé une classe pour cette exigence, compatible avec PSR-4 et suivant les normes de codage Wordpress.
Vous pouvez y accéder ici: https://github.com/pablo-pacheco/wp-namespace-autoloader
L'explication est là mais en gros c'est une dépendance du compositeur. Il vous suffit de l'exiger dans votre projet:
Et puis appelez la classe
la source
Je vais généralement avec la deuxième moitié de vos options:
Si vous utilisez Composer pour enregistrer un chargeur automatique PSR-4, vous pouvez rester proche des conventions de dénomination WP. Des espaces de noms mappés sur des dossiers pouvant contenir des traits de soulignement avec des fichiers nommés comme la classe qui peut également contenir des traits de soulignement. Comme:
Lorsque WP passe à php 5.3+ (cela doit arriver finalement, non?!), Les directives doivent être mises à jour. Étant donné que PSR-0 est déjà obsolète, PSR-4 devrait au moins être recommandé s'il n'est pas requis.
la source
La solution de pablo-sg-pacheco a fonctionné pour moi, le chargement automatique reposant sur un compositeur pourtant compatible avec les normes de codage WordPress, cependant l'URL pour le dépôt Github est:
https://github.com/pablo-sg-pacheco/wp-namespace-autoloader
et le nom du package est:
Enfin, vous devrez également ajouter ce qui suit à votre composer.json car le package n'est pas disponible sur packagist:
la source