Utiliser les espaces de noms et le chargement automatique dans WordPress Plugins, Partie 3

Dans ce didacticiel, nous allons faire une pause dans l'écriture de code et examiner ce que sont les espaces de noms PHP et les autochargeurs automatiques, leur fonctionnement et leur utilité. Ensuite, nous nous préparerons à terminer cette série en les implémentant dans le code.

Si vous n'êtes pas au courant de tout ce que nous avons couvert dans la série à ce stade, je vous recommande de revenir en arrière et de passer en revue ce que nous avons couvert jusqu'à présent. À tout le moins, relisez le précédent article car il jettera les bases de ce dont nous parlerons dans les deux prochains articles..

Maintenant que vous êtes pris au dépourvu, vous êtes au courant du plug-in sur lequel nous travaillons, de ce qu'il fait et de son fonctionnement. De plus, vous devez avoir un environnement de développement local qui vous permette de travailler avec le code source. Sinon, voici un aperçu rapide de tout ce dont vous avez besoin:

  • Un environnement de développement local incluant PHP 5.6.20, le serveur Web Apache et un serveur de base de données MySQL.
  • Un répertoire à partir duquel WordPress 4.6 est hébergé.
  • Un éditeur de texte ou un EDI de votre choix que vous maîtrisez bien pour écrire un plugin.
  • Une connaissance pratique de l'API du plugin WordPress.

En supposant que tout cela soit installé, configuré et prêt à être associé à la dernière version du plugin, nous sommes prêts à reprendre notre discussion sur les espaces de noms, le chargement automatique et les plugins WordPress..

Sur les espaces de noms et le chargement automatique

Pour ceux qui ont travaillé dans d'autres langages de programmation modernes, vous connaissez peut-être le concept des espaces de noms. Mais même si vous avez travaillé avec PHP, il est peu probable que vous les ayez beaucoup vus, du moins dans le contexte de WordPress..

Pour ceux qui n'ont pas entendu parler d'eux ou qui avoir entendu parler d'eux mais ne les ont pas utilisés, c'est ce que cet article particulier est tout au sujet. Plus précisément, nous allons parler des espaces de noms et du chargement automatique, puis, dans le prochain tutoriel, nous verrons comment tout cela s'imbrique..

Autrement dit, nous allons prendre le travail que nous avons fait avec notre plugin jusqu'à présent, puis le mettre à jour pour qu'il utilise les espaces de noms et le chargement automatique. Cela vous donnera une compréhension pratique des concepts ainsi que quelques nouveaux outils à ajouter à votre répertoire de développement pour votre prochain projet..

Que sont les espaces de noms??

Comme avec la plupart de mes tutoriels, j'aime bien donner la définition formelle, puis la décomposer en termes plus conversationnels. Le manuel PHP définit les espaces de noms comme ceci:

Dans la définition la plus large, les espaces de noms sont un moyen d'encapsuler des éléments. 

Cela ne nous aide pas nécessairement beaucoup, n'est-ce pas? On pourrait soutenir que les classes font la même chose, ce qui permet aux attributs et aux fonctions de se généraliser en tant qu'éléments. Mais le manuel continue:

Les espaces de noms PHP permettent de regrouper des classes, interfaces, fonctions et constantes associées..

C'est un peu plus clair, non? Cela signifie que lorsque nous avons un groupe de classes liées, nous pouvons les regrouper dans le même répertoire ou des répertoires similaires du système de fichiers, mais il n’ya aucun moyen de le savoir en consultant le code..

Les espaces de noms nous donnent la possibilité de le faire.

Pensez-y de cette façon: imaginez que vous disposiez d'un ensemble de fonctionnalités liées au travail avec les CSV.. 

  • Peut-être avez-vous une classe responsable de la lecture d'un fichier CSV, de l'analyse du contenu et de la lecture du contenu dans un tableau. 
  • Ensuite, vous avez une classe chargée de prendre ce tableau et d’écrire des données dans la base de données en fonction du contenu du tableau.. 
  • Ensuite, une classe est responsable de la lecture de ces options lorsqu'un objet tiers ou un autre domaine du code doit lire les données lues, analysées et enregistrées plus tôt dans l'exécution du projet..

Toutes ces fonctionnalités doivent couvrir plusieurs classes. En fonction du code orienté objet de votre solution, vous pouvez également disposer d'un ensemble d'interfaces implémentées par vos classes. En outre, les cours peuvent être organisés dans un / csv répertoire mais décomposé encore plus dans leurs propres sous-répertoires. 

  • /lis
  • /écrire

Peut-être que vous choisiriez d'organiser la structure un peu différemment, mais pour que la discussion soit aussi simple que possible, j'ai pensé que cela aurait du sens. Alors peut-être que la ou les interfaces de classe résideraient à la racine du / csv répertoire, le lecteur résiderait dans le /lis répertoire, et les classes responsables de l’écriture des données dans la base de données résideraient dans /écrire annuaire.

Rien de ce que j'ai dit jusqu'ici ne sort de l'ordinaire en ce qui concerne la manière dont nous pouvons organiser nos fichiers. Mais c’est là que les espaces de noms entrent en jeu. 

Plus précisément, si nous pouvions organiser nos classes afin qu’elles soient également mappées sur leur emplacement physique dans le système de fichiers?

Pensez-y de cette façon: supposons que votre plugin s'appelle Acme CSV et que les classes ci-dessus soient toutes organisées dans leurs répertoires et leurs sous-répertoires, etc. À quoi pourraient ressembler les espaces de noms pour ces classes et comment seraient-elles déclarées dans le projet??

Jetez un oeil à ce que nous appellerons le Analyseur classe. Cette classe est située dans / csv / read.

Et ensuite, supposons que notre classe écrit des données dans la base de données:

Enfin, voyons à quoi ressemble l'espace de noms de la classe qui lit les données de la base de données:

Rien de terriblement compliqué, non? Bien que la norme ci-dessus ne vous permette pas avoir pour organiser vos fichiers, j'aime essayer de mapper mes classes sur leur emplacement sur le disque. Il est plus facile de s'y référer dans les travaux futurs. 

À ce stade, il n'y a vraiment rien de plus à voir au-delà de la déclaration d'un type d'organisation de vos classes en haut de leurs fichiers. Mais lorsque vous commencez à intégrer le chargement automatique, cela change.

Un mot sur les paquets et les sous-paquets

Avant que nous parlions de chargement automatique, cependant, je veux avoir une courte digression sur le @paquet et @sous-paquet balises que nous sommes souvent si habitués à voir dans les commentaires de fichiers.

Par exemple, vous avez probablement déjà vu quelque chose comme ceci concernant notre code ci-dessus:

Mais lorsque vous vous référez à la documentation phpDocumentor, vous verrez ce qui suit à propos de @sous-paquet:

Cette balise est considérée comme obsolète et pourrait être supprimée dans une future version de phpDocumentor. Il est recommandé d'utiliser la capacité de la balise @package pour fournir plusieurs niveaux.

Alors @sous-paquet est obsolète, ce qui signifie que nous ne devrions probablement plus nous soucier de l’utiliser. Que dire de la @paquet étiquette?

La balise @package est utilisée pour classer les éléments structurels en sous-divisions logiques..

La prise en charge de l'imbrication à plusieurs niveaux réside désormais uniquement dans cette balise. Bon à savoir, non? Cela signifie que le code que nous voyons ci-dessus pourrait être écrit à peu près comme ceci:

Bien sûr, c’est un exemple simple, mais il fait valoir son point de vue. Je mentionne cela parce que @sous-paquet est encore une autre balise que nous voyons souvent dans PHP basé sur WordPress que nous devons éviter d’utiliser si nous voulons commencer à adopter de nouvelles normes.

Qu'est-ce que le chargement automatique??

Cela dit, revenons aux principaux sujets abordés. Puisque nous avons couvert les espaces de noms, examinons le chargement automatique. Selon le manuel PHP:

De nombreux développeurs écrivant des applications orientées objet créent un fichier source PHP par définition de classe. L’un des plus gros ennuis est de devoir écrire une longue liste d’inclusions nécessaires au début de chaque script (une pour chaque classe)..

Cela ne pourrait pas être mieux dit, n'est-ce pas? Pourtant, cela n’explique pas vraiment ce qu'est le chargement automatique. Cela explique simplement le problème que cela peut résoudre.

En PHP 5, ce n'est plus nécessaire… [il prend en charge le chargement] pour que les classes et les interfaces soient automatiquement chargées si elles ne sont pas définies.

Cela semble fantastique, non? Mais il y a une mise en garde, et nous allons l'explorer en détail dans le prochain tutoriel. Mais jusque-là, la voici: Pour obtenir cette fonctionnalité, nous devons implémenter une fonction qui sait où chercher les fichiers à charger et comment analyser la structure de répertoires de ces fichiers..

Cela semble fastidieux, et cela peut parfois être le cas, mais si vous avez une manière cohérente d’organiser votre travail, votre code de chargement automatique peut être portable. Autrement dit, vous pouvez utiliser la fonction que vous écrivez, l'insérer dans n'importe quel projet basé sur PHP et être prêt à continuer tout de même..

Mais ce tutoriel spécifique ne concerne pas l'écriture de code. Il s'agit de couvrir l'idée derrière les concepts du code que nous allons implémenter dans le prochain tutoriel..

Pourquoi est-ce pertinent??

Selon les personnes que vous demandez, vous pouvez voir les espaces de noms et le chargement automatique comme des nouveautés en PHP. Pour certains, c'est vrai. Pour d'autres, ils travaillent avec ces deux concepts depuis un moment.

L’un des aspects de WordPress qui peut l’empêcher d’adopter les nouvelles fonctionnalités de PHP est son engagement en matière de compatibilité ascendante. Ce n'est pas nécessairement une bonne ou une mauvaise chose, c'est un attribut de l'application..

Mais comme WordPress possède une version minimale de PHP sur laquelle il s'exécute, les nouvelles fonctionnalités du langage ne sont pas toujours adoptées. Et quand cette version minimale est adopté, il faut un peu de temps aux développeurs spécifiques à WordPress pour commencer à utiliser ces fonctionnalités dans leur code.

Et ce n'est pas une mauvaise chose. En bref, les développeurs suivent l'évolution de l'application au rythme auquel elle mûrit.

Toutefois, à mesure que WordPress continue d’avancer ou que vous maîtrisez l’environnement dans lequel votre projet s’exécute, vous voudrez peut-être adopter certaines fonctionnalités du langage que vous ne connaissiez pas auparavant ou que vous ne saviez pas auparavant disponible..

Les espaces de noms et le chargement automatique sont deux fonctionnalités puissantes du langage qui rendent le code plus lisible, plus organisé, et même un peu plus facile à gérer. Donc, si vous ne les avez encore utilisés dans aucun de vos travaux sur WordPress, en particulier si vous travaillez avec des plugins WordPress, je vous exhorte à envisager de le faire..

Conclusion

Les espaces de noms nous permettent d'organiser notre code de manière à simplifier considérablement le regroupement logique de classes liées. De plus, le chargement automatique donne à notre code plus de lisibilité en réduisant le nombre de comprendre, include_once, exiger, ou Demandez une fois déclarations que nous devons utiliser.

Cela rend le code source que nous écrivons plus clair dans la mesure où il se concentre uniquement sur la logique dont il est responsable, sans rien faire de la même chose que importer des fichiers, gérer différentes structures de répertoires et être conscient de plus que ce qu’il devrait (sans parler du les développeurs doivent constamment tout retaper pour pouvoir accéder à un fichier).

Et pour ceux qui veulent s’assurer que la structure de leur code suit la structure organisationnelle des fichiers et des répertoires sur le disque, cela nous donne la possibilité d’organiser nos projets exactement comme cela..

Même avec tout ce qui a été dit, ce n’est qu’une façon et quelques avantages des espaces de noms et du chargement automatique. Des sujets plus avancés sont traités dans le manuel PHP et dans d'autres projets open-source que je vous recommande d'examiner si vous avez le temps.

Dans le prochain tutoriel, nous allons terminer cette série en appliquant ce que nous avons appris dans ce tutoriel lorsque nous introduisons des espaces de noms et un chargement automatique dans notre plugin WordPress. Jusque-là, si vous êtes à la recherche d'autres documents liés à WordPress, vous pouvez trouver tous mes tutoriels précédents sur ma page de profil et vous pouvez me suivre sur mon blog ou sur Twitter..

N'hésitez pas à laisser vos questions sur les espaces de noms, le chargement automatique ou WordPress dans le formulaire ci-dessous..

Ressources

  • Espaces de noms
  • Classes à chargement automatique
  • phpDocumentor