Comprendre les globes PHP et la portée variable dans WordPress • WPShout

By | avril 17, 2019

tuto wordpress

L’une des fonctionnalités les plus décriées de WordPress est l’utilisation de «variables globales PHP». Que vous les aimiez ou que vous les détestiez, les variables globales ne quittent probablement pas WordPress prochainement. Donc, aujourd’hui, nous couvrirons tout ce qu’il ya à savoir à leur sujet. Comment penser à eux. En PHP, comment rendre les variables globales, comment accéder aux variables globales de WordPress et en apprendre un peu sur la théorie et le débat relatifs à l’état global dans les applications logicielles.

Devez-vous utiliser des variables globales en PHP?

Les cercles du développement de logiciels discutent d'énormes discussions qui durent depuis plusieurs décennies sur les raisons pour lesquelles le recours massif à des variables de portée globale est une mauvaise décision de conception. Ce débat dépasse le cadre de ce que je veux couvrir ici. (Si ce sujet vous intéresse, l'article de C2 Wiki sur ce sujet est un bon point de départ pour comprendre les arguments.) Il suffit de dire qu'ils sont mauvais, car ils peuvent provoquer «une action fantasmagorique à distance». En d'autres termes, comme les variables globales sont «globales», le changement d'une autre variable en variable globale peut altérer votre code. Et ils n’ont pu le faire que parce que c’est un «global».

Le principal point en faveur des variables globales? C’est un moyen relativement simple et robuste de partager des informations dans toutes les parties d’une application Web. Comme nous le verrons, il suffit de laisser tomber le global mot-clé dans votre PHP et vous êtes aux courses. Plus important que cette discussion est une simple compréhension du sens et des implications des variables globales PHP pour le développement WordPress, commençons donc.

Brief Interlude sur notre façon de comprendre les variables globales PHP…

Avant de commencer, expliquez comment vous allez utiliser les variables globales en PHP. Si vous souhaitez apprendre le développement WordPress, nous avons écrit le meilleur guide pour le faire:

La meilleure façon d'apprendre le développement WordPress

Opérationnel est notre cours complet «apprendre le développement WordPress». Maintenant dans sa troisième édition mise à jour et étendue, il a aidé des centaines d’acheteurs satisfaits à apprendre le développement WordPress de manière rapide, intelligente et complète.

Voici ce qu’ils ont à dire:

«Les autres cours que j’ai essayés manquent toujours d’explications claires sur la raison pour laquelle WordPress fait les choses d’une certaine manière ou sur la manière dont les choses fonctionnent ensemble. Up and Running fait tout cela, et tout est expliqué clairement et dans un langage facile à comprendre. »-Caroline, pigiste WordPress

«Je pense que toute personne intéressée par l’apprentissage du développement WordPress a besoin de ce cours. Regarder les vidéos était comme un groupe de lumières allumées. »-Jason, développeur WordPress

Vous continuez à utiliser ce mot… Qu'est-ce que «portée variable» en PHP?

Cela signifie qu'une unité donnée de PHP aura accès aux variables de la portée globale ou uniquement aux variables déclarées dans la fonction en cours d'exécution.

Scope est une marque de rince-bouche populaire aux États-Unis. Mais c’est aussi et surtout ce qui est pertinent et visible pour qui et où. Les gens utilisent l’expression «hors du champ d’application» pour parler d’activités ou d’idées qui ne sont pas actuellement pertinentes par rapport à ce sur quoi elles travaillent, et cela a beaucoup à voir avec une étendue variable.

Les langages de programmation tels que PHP sont écrits de manière à ce que les variables ne soient accessibles que dans un contexte ou une portée donnés. Cela se fait de différentes manières, et repose sur diverses règles dans différentes langues. Mais le but des portées variables est d’éviter le problème qu’une partie d’un programme peut poser $ i 5, et en attendant d’utiliser cette valeur, et une autre partie la définit sur 981235792 ou «concombre». Si les deux utilisent le même $ i, une de ces parties du programme risque fortement de mal fonctionner.

Des variables sont données pour empêcher les programmes (et les têtes de programmeurs) d’exploser. Les règles spécifiques qui contrôlent les variables accessibles en quels endroits varient d'un langage de programmation à l'autre. Ce qui est pertinent pour quelqu'un qui s'intéresse à WordPress et à PHP, c'est la façon dont cela fonctionne dans ce contexte.

PHP en tant que langage utilise l'étendue des fonctions. Cela signifie qu'une unité donnée de PHP aura accès aux variables de la portée globale ou uniquement aux variables déclarées dans la fonction en cours d'exécution. Et les variables déclarées dans une fonction ne seront pas disponibles globalement sauf si elles le déclarent explicitement. Je pourrais continuer à parler de façon abstraite, mais je pense que le mieux est de concrétiser PHP: nous déclarerons une variable globale à l’intérieur des fonctions et accéderons également à la portée globale.

Exemple de variable globale PHP: Jouer avec Scope en PHP

Dans cette section, je souhaite simplement vous expliquer à quoi ressemblent tous ces éléments de portée de variable globale dans certains PHP de base. Déclarer une variable globale, accéder à une variable globale et plus encore peut être expliqué avec cet exemple de code PHP autre que WordPress:

$ global = "Je suis une variable globale parce que je n’étais pas défini dans une fonction.";

ma_fonction_global ();
my_nonglobal_function ($ global);
function my_global_function () 
     global $ global;
     echo $ global;


function my_nonglobal_function ($ global) 
     echo $ global;


fonction make_something_else_global () 
    global $ second_global;
    $ second_global = "Je suis global parce que le mot global a été utilisé dans une fonction.";

make_something_else_global ();
echo $ second_global;

Comme nous l'avons dit dans la dernière section, il n'y a en réalité que deux portées pertinentes en PHP pour les variables que vous créez: globale et fonction. (Il existe un troisième type d’étendue, mais si vous voulez en savoir plus sur les superglobales comme $ _GET, $ _POST, et $ _REQUEST, mais leur sujet est trop vaste pour être abordé ici.)

Déclarer: en PHP, créer une variable globale

Si vous désirez en PHP déclarer une variable globale, vous pouvez simplement le faire en dehors d'une fonction. C’est parce que toute variable PHP qui n’est pas à l’intérieur d’une fonction (et donc n’a pas de portée fonctionnelle) est globale. La valeur de la variable $ global fonctionnera simplement de toute façon après la ligne de code qui le déclare. Et parce que nous déclarons $ global en dehors d'une fonction, il aura automatiquement un état global.

Mais dans beaucoup de PHP pour WordPress, vous serez à l’intérieur d’une fonction. C’est souvent parce que vous travaillez avec un hook WordPress. Pour rendre une variable disponible partout (globalement) de l'intérieur d'une fonction, vous devez d'abord déclarer cette variable en tant que global. Ensuite, vous pouvez affecter cette variable à tout ce que vous voulez. C’est ce que nous faisons à l’intérieur du make_something_else_global fonction dans la section de code ci-dessus.

C’est ainsi que vous définissez une variable globale en PHP: d’abord, assurez-vous que votre variable sera globale, soit par sa position (en dehors de toute fonction), soit en utilisant la commande global mot-clé. Ensuite, il vous suffit de définir ou de définir à nouveau. Même 100 fois. PHP ne s'en soucie pas.

Variable globale d’accès PHP, «import» avec global mot-clé

À l'intérieur d'une fonction PHP, une variable globale (déclarée ailleurs) est accessible de deux manières. Le premier (et le plus commun), y accéder en utilisant le global mot-clé. C'est ce que notre première fonction appelée, ma_fonction_global, Est-ce que. En affirmant qu'il veut la variable globale $ global, echo – qui est juste le vocabulaire PHP pour "jeter à l'écran" – peut générer la chaîne que nous avons déclarée à la première ligne de l'exemple. Si nous avions sauté le global Selon les paramètres, nous verrons une erreur PHP ou rien du tout à l’écran. Ce n'est pas ce que nous voulions.

Ce code montre une autre manière d'utiliser la variable prédéclarée $ global dans le ma_nonglobal_function. Pour ce faire, nous pouvons passer $ global dans la fonction en tant que paramètre. Cela nous permet d’être un peu plus certains de la variable que nous obtenons vraiment dans la fonction, car c’est un transfert. et cela nous permet de passer directement à la echo $ global sans s'arrêter pour "importer" la variable. C'est un moyen d'éviter d'utiliser de nombreux globaux PHP.

Comme vous pouvez le constater, ces deux fonctions accomplissent la même chose. Vous verrez les deux méthodes se produire à divers endroits dans divers projets PHP. Utilisation de global est tombé en disgrâce dans la communauté PHP en raison du risque qu’avant que notre fonction ne puisse accéder à $ global cela aurait facilement pu être changé et il ne nous resterait plus que de faire une fausse hypothèse et de provoquer des erreurs. La méthode de transmission des variables pertinentes à la fonction lorsqu’elle est appelée est recommandée dans les projets qui ne s’inquiètent pas autant de la compatibilité en amont que WordPress.

Un tableau PHP global: comme une variable

Une dernière remarque: vous pouvez presque tout assigner à une variable (globale) en PHP. Qu'il s'agisse d'une chaîne, d'un objet ou d'un tableau, tout ce que vous avez à faire pour créer un tableau global en PHP consiste à suivre les étapes décrites ci-dessus. Principalement: déclarer tableau $ global c’est vraiment tout ce qu’il faut pour créer un tableau global PHP.

Et pendant que vous pourriez penser, "je fais global mieux »parce que vous n’avez« qu’un »tableau global, je vous préviens que du point de vue du principe de précaution, tout ce qui varie indépendamment doit être considéré comme une variable globale libre. Chaque élément de ce tableau est une variable globale. Même si vous les avez tous placés dans un tableau intitulé, $ global_array_of_variables.

WordPress Global Post ($ post): Portée variable dans WordPress

Comme je l'ai dit plus haut, WordPress s'appuie fortement sur les variables globales PHP. (Voici la liste de tous ses globaux.) En tant que tel, il est donc courant qu'une fonction commence par une ligne telle que:

global $ post;

J'espère que vous avez maintenant une assez bonne idée de ce que cela fait: importer dans le monde entier $ post variable – quelle balise template fonctionne comme le titre() (ou ceux que vous faites vous-même) comptez sur – au niveau local pour qu’il puisse agir en conséquence. C’est si courant que vous verrez que les gens ont oublié la nécessité de déclarer le global ou ajoutez la ligne au sommet de leur fonction quand ce n’est pas vraiment forcément. (C’est généralement inutile car le programmeur n’accède jamais à rien $ post directement après l’avoir «importée» de la portée globale.)

Un autre excellent exemple, autre qu’à l’intérieur de la boucle avec des balises de gabarit comme l identité() et le contenu() La portée mythique de WordPress est la boucle mythique elle-même. Si vous avez écrit une coutume WP_Query vous l'avez peut-être soupçonné, mais la façon dont vous pouvez utiliser des méthodes sans objet comme have_posts () et le la poste() Dans vos fichiers de hiérarchie de modèles, vous appelez ces mêmes méthodes sur une instance globale de WP_Query que WordPress a mis en place pour vous. (J'aime dire aux débutants de ne penser qu’à «un sac magique de messages», mais les experts comprennent qu’il ne s’agit que de WP_Query objet.)

Ce que nous avons appris sur les variables globales PHP

Là où vous pouvez l'éviter, il est généralement considéré comme une meilleure idée de ne pas ajouter d'éléments au périmètre global de PHP. Si vous avez le choix entre transmettre une variable à la nouvelle fonction en l’utilisant comme paramètre ou ajouter votre variable à l’étendue globale, il est recommandé de faire la première. Mais parce que WordPress est si conservateur, les variables globales ne risquent pas de nous quitter de si tôt. C’est pourquoi vous avez acquis un pouvoir précieux en les comprenant. Bonne piratage!