Apprendre PHP pour le développement WordPress: boucles while () • WPShout

By | avril 30, 2019

Formation WordPress

Bienvenue à cette discussion sur les boucles PHP: qu'est-ce qu'une boucle, quel est son importance et comment utiliser PHP tandis que() boucles. Cet article continue notre série en expliquant les bases de PHP pour le développement WordPress.

Notre analyse en profondeur s’inspire de sujets déjà abordés dans des articles précédents, notamment le concept de flux de contrôle: la logique de «ce qui se passe quand», à la fois en PHP et dans tous les autres langages de programmation impératifs. Les boucles sont un sujet secondaire du flux de contrôle: elles traitent toutes de «que se passe-t-il quand» et plus précisément de combien de fois ça arrive.

Pourquoi les boucles sont importantes en PHP

Un besoin commun en programmation est de répéter une action similaire plusieurs fois.

En programmation, comme dans la vie, un besoin extrêmement courant est de faire la même chose encore et encore.

Dans la vie, cela pourrait être «pour chaque plat dans l'évier: savon, frottez et rincez le plat, puis placez-le dans le séchoir, jusqu'à ce que l'évier soit vide». Ou littéralement, d'autres exemples.

En programmation, cela peut être «pour chaque utilisateur de la base de données WordPress: récupérez le nom d’utilisateur de cet utilisateur et continue jusqu’à ce que tous les noms d’utilisateurs aient été récupérés» ou littéralement des millions d’autres exemples.

Pour coder ces sortes de tâches répétées en PHP, boucles sont quasiment le seul jeu en ville. Donnons un exemple rapide.

Pourquoi avons-nous besoin de boucles? Un exemple simple

Considérez le besoin suivant: «Je veux écrire une fonction qui affiche des nombres entiers dans l’ordre, commençant par 0 et allant jusqu’à n’importe quel nombre.»

Comment pourrions-nous coder cela? Essayons d’abord sans boucle:

<? php

// Ok, essayons ceci sans boucles ...
fonction count_up_from_zero ($ top_number) 
// Si le chiffre du haut est 0, c'est facile
if ($ top_number === 0):
echo '0'; // va imprimer "0"
// Ou c'est peut-être 1
elseif ($ top_number === 1):
echo '0 1'; // Imprimera "0 1"
// Ou le premier chiffre pourrait être 2
elseif ($ top_number === 2):
echo '0 1 2'; // Imprimera "0 1 2"
// Bien sûr, le premier chiffre pourrait aussi être 3 ...
elseif ($ top_number === 2):
echo '0 1 2 3'; // Imprimera "0 1 2 3"
// ... ou ... 4 ...
elseif ($ top_number === 4):
echo '0 1 2 3 4'; // Imprimera "0 1 2 3 4"
// ... attendez, cette fonction doit-elle durer éternellement? ...
fin si;

Bon, il est temps d'utiliser des boucles:

<? php

// Salut les gars, je viens d'apprendre sur les boucles
fonction count_up_from_zero ($ top_number) 
$ i = 0;

// L'opérateur <= signifie "est inférieur ou égal à"
while ($ i <= $ top_number):
echo $ i. ''; // Imprimera tout ce que $ i est plus ""
$ i ++; // Cela signifie "augmenter $ i de 1"
en attendant;


count_up_from_zero (6); // Imprimera "0 1 2 3 4 5 6"

Comme le montre cet exemple, si vous voulez pouvoir écrire du code PHP qui répète quelque chose un nombre de fois inconnu, vous aurez besoin de boucles.

Plus généralement, une fois que vous avez vraiment commencé à coder, dans WordPress ou dans tout autre logiciel PHP, les boucles sont absolument partout. Examinons de plus près le fonctionnement des boucles en PHP. Voyons d’abord, dans cet article, tandis que() boucles, et couvrant pour chaque() boucles dans un article séparé.

Qu'en est-il de pour() et faire pendant Boucles?

Comme je l'ai mentionné dans l'article sur le contrôle des flux, je n'ai jamais trouvé le besoin d'un pour() boucle – du moins dans WordPress – que je ne pouvais pas refactoriser plus simplement dans un tandis que() boucle. Alors je t'encourage à apprendre pour() la syntaxe de la boucle, mais je ne la couvrirai pas ici. De même, je viens d’apprendre aujourd’hui que PHP a même faire pendant syntaxe, donc probablement sûr de sauter celui-là.

PHP tandis que() Boucles: comment et pourquoi les utiliser

Comment un tandis que() Boucle pense

La partie cruciale d'un tandis que() la boucle est le bit à l'intérieur tandis que() lui-même. Qu'est-ce que ce code fait, et comment tandis que() boucle de travail plus largement?

tandis que() répétera aussi longtemps que la condition à l'intérieur reste vraie.

UNE tandis que() La boucle fonctionnera encore et encore (elle boucle) aussi longtemps que (tandis que) la condition qui est à l'intérieur reste vraie.

Voyons quelques exemples pour voir comment cela fonctionne dans la pratique:

<? php

// false n'est pas égal à true, cette boucle ne s'exécutera pas une seule fois
while (false === true):
echo 'Bonjour'; // Ce code ne fonctionnera jamais
en attendant;

// false n'est pas toujours vrai, donc cette boucle ne fonctionnera jamais
// Ce code est équivalent à l'exemple ci-dessus
tandis que (faux):
echo 'Bonjour'; // Ce code ne fonctionnera jamais
en attendant;

// true est toujours vrai: cette boucle fonctionnera indéfiniment jusqu'à ce que PHP se bloque
tandis que (vrai):
echo 'lo'; // Imprimera "lolololololol" jusqu'à ce que PHP tombe en panne
en attendant;

// Maintenant, nous allons quelque part: cette boucle sera exécutée 10 fois
// et imprimera "0123456789"
$ i = 0;
tandis que ($ i <10):
echo $ i; // Imprimera tout ce que $ i est égal à
$ i ++; // Cela signifie "faire croître $ i par 1"
en attendant;

Les quatre exemples ci-dessus sont valables tandis que() boucles en ce qui concerne PHP. Cependant, le seul qui soit réellement utile est le quatrième, qui fonctionne à la fois (contrairement aux deux premiers) et à l’arrêt (contrairement au troisième).

Voyons maintenant comment ce quatrième exemple fonctionne, en termes de séquence de flux de contrôle:

  1. Premier, $ i est mis à 0.
  2. le tandis que() La boucle demande: $ i moins de 10? ”Oui, c’est (c’est 0), donc le code à l’intérieur de la boucle est exécuté.
  3. Dans la boucle, le echo $ i; La commande affiche "0" dans le document HTML.
  4. Dans la boucle, le $ i ++; commande ajoute 1 à $ i. $ i est maintenant égal à 1.
  5. La boucle est terminée, alors il tourne en boucle vers le hautet demande à nouveau: $ i moins de 10? ”Oui, c’est (c’est 1), donc le code à l’intérieur de la boucle est exécuté.
  6. Ceci affiche “1” sur la page et augmente $ i par 1, de sorte que $ i est maintenant égal à 2.
  7. Ce processus se poursuit jusqu'à 2, 3, 4, 5, 6, 7 et 8, jusqu'à ce que $ i est égal à 9 et nous avons imprimé «9» sur la page. Il est maintenant temps d’ajouter 1 à $ i. Qui fait $ i égal à 10.
  8. Maintenant, nous retournons au sommet et demandons: «Est-ce que $ i moins de 10? ”Non, ce n’est pas (c’est 10), donc la boucle cesse de s’exécuter. PHP passerait ensuite au code suivant sur la page.

C’est ainsi que la quatrième boucle, ci-dessus, amène PHP à imprimer «0123456789», puis à passer à autre chose: une méthode simple et efficace. tandis que() boucle.

Itérateurs et $ i

Comme vous l'avez vu dans le code ci-dessus, une variable $ i est très important pour le fonctionnement de certains tandis que() boucles. Qu'est-ce qui se passe avec ça?

UNE tandis que() La boucle utilisera souvent un itérateur: une variable qui compte «combien de fois» vous avez fait quelque chose.

La variable $ i était un itérateur: une variable qui existe pour compter «combien de fois» vous avez fait quelque chose. C’est comme compter les tours et cliquer sur un chronomètre à chaque tour: chaque clic sur le chronomètre équivaut à augmenter $ i par un avec $ i ++;.

Est-ce que nos itérateurs doivent être nommés $ i? Pas pour une raison technique, non: ce n'est que convention. Vous pouvez nommer votre itérateur $ metallicasearlyworkwassuperior si vous avez la vitesse du doigt pour écrire $ metallicasearlyworkwassuperior ++; sous vos boucles.

Mais si vous suivez les conventions en nommant vos itérateurs $ i (ou $ j ou k $ Si vous avez besoin de plusieurs itérateurs à la fois, ce qui est assez rare, du moins dans WordPress, les autres programmeurs comprendront ce que vous essayez de faire. Donc, nous recommandons cela.

<? php

$ fruits = [ 'apple', 'banana', 'mango' ];
echo $ fruits[0]; // imprimera "pomme"
echo $ fruits[1] // Imprimera "banane"
echo $ fruits[2] // imprimera "mangue"
echo $ fruits[3] // Nan!

Donc, nous voulons généralement o

Apprendre à compter à partir de 0

Pour des raisons très belles et également assez techniques, la plupart des langages de programmation – PHP inclus – ne comptent pas à partir de 1 mais à partir de 0. Par exemple, les tableaux PHP commencent à partir de l'index 0:

<? php

$ fruits = [ 'apple', 'banana', 'mango' ];
echo $ fruits[0]; // imprimera "pomme"
echo $ fruits[1] // Imprimera "banane"
echo $ fruits[2] // imprimera "mangue"
echo $ fruits[3] // Nan!

Nous voulons donc généralement que nos itérateurs commencent à 0:

<? php

// Cette boucle sera exécutée 100 fois
$ i = 0;
tandis que ($ i <100):
$ i ++;
en attendant;

// Cette boucle sera exécutée 100 fois aussi, mais ne le faites pas de cette façon:
// Ce n'est pas la pensée des langages de programmation
$ i = 1;
tandis que ($ i <= 100):
$ i ++;
en attendant;
}

// Voici un autre exemple pour montrer pourquoi commencer à compter à partir de 0
$ fruits = [ 'apple', 'banana', 'mango' ];

// Cette boucle affichera "mangue pomme-banane"
$ i = 0;
// count () vous donne le nombre d'éléments du tableau $ fruits, soit 3
while ($ i <nombre ($ fruits)):
echo $ fruits[$i] . '';
en attendant;

// Cette boucle affichera "mangue banane"
// Vous avez ignoré le premier élément du tableau,
// probablement pas ce que tu voulais
$ i = 1;
while ($ i <nombre ($ fruits)):
echo $ fruits[$i] . '';
en attendant;

}

count_up_from_zero (6); // Imprimera "0 1 2 3 4 5 6"

Vous devriez trouver des moyens de commencer votre $ i itérateur à 0, à quelques exceptions près.

En résumé: vous devriez trouver des moyens de commencer votre $ i itérateur à 0, à quelques exceptions près.

En utilisant le Pause Déclaration en tandis que() Boucles

Jusqu'à présent, nous avons vu tandis que() boucles qui durent jusqu’à leur conclusion naturelle, c’est-à-dire jusqu’à ce que la condition indiquée à tandis que() la déclaration elle-même n'est plus vraie.

Il existe un autre moyen de mettre fin à une tandis que() boucle ou toute autre boucle que vous exécutez en PHP. C'est le Pause déclaration.

Voici un exemple. C’est en fait un jeu de hasard pleinement fonctionnel, utilisant PHP rand() fonction, qui génère des nombres aléatoires:

<? php

$ target_number = rand (1, 6); // $ target_number est maintenant un entier aléatoire de 1 à 6
$ my_roll = rand (1, 6); // $ my_roll est maintenant un entier aléatoire de 1 à 6

echo 'Le roulement cible est'. $ target_number. '. ';

$ rolls_needed_to_win = 0; // Comptons le nombre de rouleaux nécessaires pour atteindre notre objectif.

// while (true) continuera jusqu'à ce que nous atteignions notre déclaration de rupture
tandis que (vrai):
echo 'Roulé a'. $ my_roll. '. ';
$ rolls_needed_to_win ++; // Nous venons de rouler, ajoutez 1 à notre nombre de rouleaux

// Rupture de la boucle si notre résultat est égal au résultat visé
if ($ my_roll === $ target_number):
echo 'Gagnant !!! ';
Pause; // C'est notre façon de sortir de la boucle
fin si;

// Notre jet n'égale pas le jet ciblé, alors lancez-vous encore et bouclez-vous
$ my_roll = rand (1, 6); // $ my_roll est à nouveau défini pour être un entier aléatoire de 1 à 6
en attendant;

// Après avoir gagné, imprimez les informations
echo 'Tu avais besoin'. $ rolls_needed_to_win. 'essaie de rouler votre cible de'. $ target_number. '.'

Comme vous pouvez le voir, Pause quittera une boucle «tôt», une fois que la condition pour laquelle la boucle est conçue (ici, faire un lancer correspondant) est remplie. Après Pause provoque la sortie de la boucle, PHP continuera à s'exécuter, donc la ligne après le en attendant sera la prochaine en ligne pour l'exécution.

Notez que notre utilisation de tandis que (vrai) avec une pause est, sans aucun doute, un code légèrement laid. C’est pourquoi certains programmeurs recommandent faire pendant, mais encore une fois, n'entrons pas dans cela.

tandis que() Boucles sans itérateurs

Comme nous l’avons vu, pour un tandis que() Cette boucle est utile et ne casse pas votre site. Elle a besoin de deux propriétés:

  1. Il doit pouvoir fonctionner dans certaines circonstances. Faire une boucle «while», ce qui est toujours faux est du code gaspillé.
  2. Une fois lancé, il ne devrait jamais être mis en boucle à l'infini.

Dans de nombreux exemples, nous avons utilisé $ i itérateurs pour cela, mais notre exemple précédent avec rand() montre qu'il est tout à fait possible d'écrire tandis que() boucles qui n’utilisent pas d’itérateurs, à condition qu’elles remplissent les deux conditions ci-dessus.

Dans notre rand() par exemple, nous avons eu un compteur, $ rolls_needed_to_win, mais ce compteur n’a joué aucun rôle dans la détermination du nombre de fois que la boucle serait exécutée. Au lieu de cela, nous avons utilisé un si()-tatement, avec un Pause à l'intérieur, pour contrôler l'exécution.

Connexion WordPress: La boucle

Notre discussion de tandis que() Les boucles, en particulier celles sans itérateurs, ne pourraient pas être plus pertinentes pour le code de WordPress. Tous les thèmes WordPress sont construits autour d’un thème spécifique. tandis que() boucle, qui est si centrale au fonctionnement de WordPress qu’elle s’appelle simplement «The Loop».

Armé de votre compréhension de tandis que() En général, nous vous recommandons vivement d’apprendre le fonctionnement de The Loop. Cela devrait vous donner beaucoup de sens et devrait vous éclairer sur la manière dont WordPress affiche réellement vos messages.

Comprendre la boucle: la manière dont WordPress affiche les messages

Te voir dans un tandis que()

Vous devez maintenant comprendre la nature des boucles «faire quelque chose plusieurs fois», l’un des concepts les plus courants dans toute la programmation. Vous devriez également avoir une bonne idée de la façon dont PHP fonctionne. tandis que() les boucles fonctionnent, comment les utiliser avec et sans itérateurs, et comment WordPress utilise tandis que() boucles, et en particulier The Loop, pour son fonctionnement fondamental.

Merci d'avoir lu! Nous aimerions entendre vos questions ou vos commentaires, que ce soit dans les commentaires ci-dessous ou dans notre groupe Facebook.