Maison > développement back-end > tutoriel php > Guide d'apprentissage PHP-Chapitre 7

Guide d'apprentissage PHP-Chapitre 7

黄舟
Libérer: 2023-03-04 07:10:02
original
912 Les gens l'ont consulté


Structure de contrôle

Points clés de ce chapitre

◆ Construire et combiner des tests logiques

◆ Utiliser if et switch pour le traitement des branches

◆ Utiliser while et for

◆ Utiliser exit et die pour quitter l'exécution de la page

Si le programme ne peut pas décider des différentes exécutions dues Dans différentes situations, il est très difficile d'écrire des programmes utiles. En termes simples, le comportement du code du programme qui génère la variable d'affichage dépend de la valeur d'une certaine variable. En tant que programmeur, nous pouvons utiliser différentes actions pour que le programme réponde différemment aux événements (en fonction du monde extérieur, de l'heure et de l'utilisateur). contenu d’entrée ou de base de données, etc.).

Ce type de réponse de programme nécessite une "structure de contrôle". Cette structure peut contrôler les instructions qui doivent être exécutées avec différents codes de programme dans différentes circonstances. Dans le chapitre précédent, nous avons utilisé des structures de contrôle comme if, mais nous ne l'avons pas vraiment expliqué en profondeur. Dans ce chapitre, nous présenterons chaque structure de contrôle fournie par PHP et étudierons en détail leur fonctionnement.

Pour les programmeurs expérimentés en langage C : Parmi toutes les fonctions de PHP, la partie "contrôle" est la plus similaire en termes de style au langage C. Toutes les structures utilisées à l'origine dans le langage C peuvent être utilisées ici. , et fonctionne de la même manière. Si vous êtes un programmeur expérimenté en langage C, vous pouvez avancer directement et lire directement les sections à la fin de ce chapitre.

Les deux principaux types de structures de contrôle dont nous discuterons sont les branches et les boucles. Une branche est une bifurcation dans le chemin d'exécution d'un programme. En fonction d'un certain test, le programme peut choisir de procéder vers la gauche ou vers la droite. Les chemins dans le futur peuvent être différents, ou ils peuvent à nouveau fusionner. Une boucle est l'un des types de branche qui possède un chemin d'exécution qui revient au début de la branche et peut être testé à plusieurs reprises ou exécuté en boucle.

Avant de pouvoir utiliser efficacement les structures de contrôle, vous devez être capable de construire efficacement des conditions de test. Nous commencerons par les tests les plus simples, en découvrant les constantes TRUE et FALSE, puis utiliserons ces tests dans un code plus complexe.

Opérateur booléen

Chaque structure de contrôle présentée dans ce chapitre contient deux parties distinctes : l'une est la partie test (décidant dans quelle direction procéder), et l'autre est le code de test (soit un une seule branche ou une boucle) est testée via une évaluation d'opération booléenne, et le jugement « vrai » ou « pas vrai » est le résultat de l'expression de l'opération.

Constante booléenne

Le type d'opération le plus simple est une valeur simple (valeur simple), et la valeur booléenne la plus simple est les constantes VRAI et FAUX, et vice versa. Par exemple, nous pouvons les intégrer dans la section test d'une instruction if-else :




if (TRUE)print("This will toujours imprimer elseprint("); Ceci ne s'imprimera jamais"); l'exemple ci-dessus est exactement le même que le suivant : if (FALSE) print ("Ceci ne s'imprimera jamais"); elseprint ("Ceci s'imprimera toujours");

Opérateurs logiques

Les opérateurs logiques peuvent combiner d'autres valeurs logiques (également appelées booléennes) pour générer de nouvelles valeurs booléennes. PHP prend en charge les opérations logiques standard (et, ou, non et xor). Les deux premiers ont des versions alternatives, comme indiqué dans le tableau 7-1.

7-1 Symboles d'opération logique

Guide dapprentissage PHP-Chapitre 7

Pour les programmeurs en langage C, vous devez être familier avec les opérateurs "&&" et "||". L'opérateur "!" est souvent appelé "NON", pour des raisons évidentes.

Les expressions suivantes sont des exemples d'opérateurs logiques :

(($statement_1 && $statement_2)||

($statement_1 && $statement_2)||
(! $statement_1 && $statement_2)||

(! $statement_1 && $statement_2)|| Le résultat est vrai quelles que soient les valeurs des variables indiquées. des vraies valeurs des deux variables, dont chacune est représentée par un opérateur "&&", car l'un de ces quatre doit être vrai. Elles sont reliées entre elles à l'aide de l'opérateur "||"
Le xor utilisé. dans l'exemple suivant, il y a une démonstration plus intelligente de la « tautologie » :

($ Statement_1 et $statement_2 et

$statement_3) xor

(( ( $statement_1 et $statement_2)) ou

(! ( $statement_1 et $statement_3)) ou

(! ( $statement_2 et $statement_3))))

La signification de ceci L'opération est la suivante : "Étant donné trois énoncés narratifs, une seule des deux situations suivantes peut se produire. 1 : Si les trois énoncés non-ne sont vrais, il y aura une paire d'énoncés qui ne sont pas vrais. "

La priorité des opérateurs logiques

est la même que celle de tout autre opérateur. Certains opérateurs logiques ont une priorité plus élevée que d'autres, mais vous pouvez également utiliser des parenthèses pour modifier l'ordre de priorité. beaucoup plus bas que les autres, donc spécifiez l'opérateur (=) que "et" est plus étroitement lié, mais moins étroitement que "&&"

Il existe un manuel sur la préséance et la pertinence des opérateurs sur http:/ /www.php.net/. Liste complète.

Court-circuit des opérateurs logiques

Les opérateurs booléens ont une fonctionnalité très pratique : ils sont combinés de gauche à droite et peuvent être conçus pour " court-circuit", si le premier argument est déterminé vrai, il n'est pas du tout nécessaire de procéder avec le deuxième argument, par exemple pour déterminer un rapport très approximatif de deux nombres, mais aussi pour éviter d'éventuelles erreurs de division par 0, pour être sûr. Si le diviseur n'est pas 0, utilisez simplement l'opérateur "!=" (différent de) :

if ($denom != 0 && $numer/ $denome>2)

print( "Plus de deux fois plus !");

Lorsque $denom est "0", que la deuxième opération soit vraie ou fausse, l'opérateur "&&" doit renvoyer "pas vrai " valeur. En raison du comportement en court-circuit, la deuxième expression n'est pas évaluée, évitant ainsi les erreurs. Dans le cas où $denom n'est pas égal à "0", l'opérateur "&&" n'a pas suffisamment d'informations pour parvenir à une conclusion de vérité, donc le deuxième opérateur est évalué.

Jusqu'à présent, nous avons formellement discuté des constantes VRAI et FAUX, et de la manière de les combiner pour former d'autres valeurs vraies et fausses. Jetons maintenant un coup d'œil aux opérateurs qui effectuent de véritables tests arithmétiques booléens.

Opérateurs de comparaison

Le tableau 7-2 montre les opérateurs de comparaison, qui peuvent être utilisés pour les nombres ou les chaînes (veuillez faire attention à la description de « Soyez prudent avec les nombres non entiers »).

Tableau 7-2 Symboles d'opération de comparaison


Guide dapprentissage PHP-Chapitre 7


Voici quelques exemples de spécification de variable, suivis d'un test composé qui est toujours vrai :




$trois = 3 $quatre = 4 ; 3.14159;Si (($trois = =$trois) et($quatre ===$quatre)et($trois !=$quatre)et($trois=$là) et($trois $trois) et($my_pi ”); elseprint (« Bien sûr, vous avez bien tapé ?
») :

Veuillez noter une erreur très courante : confondre l'opérateur spécifique (=) et l'opérateur de comparaison (==) ensemble. "if($trois = $quatre).." Cette instruction peut accidentellement définir $trois et $quatre comme variables équivalentes (types). Si $quatre est vrai, le résultat de son test sera vrai !

Priorité des opérateurs

Bien que trop s'appuyer sur la priorité puisse dérouter les personnes qui lisent le code, il est bon de noter que les opérateurs de comparaison ont une priorité plus élevée que le concept des opérateurs booléens. Veuillez regarder l'exemple suivant :

If ($small_num> 2 && $small_num
Il ne nécessite plus de parenthèses à l'exception des deux parenthèses nécessaires pour if.

Comparaison de chaînes
Les opérateurs de comparaison peuvent être utilisés pour comparer des chaînes ou des nombres (veuillez faire attention à la description de « Soyez prudent avec les nombres non constants »). Nous voulons que la sortie du programme suivante montre l'exemple correspondant :




if (("Marx"”);}
Attention aux nombres non entiers

Bien que les opérateurs de comparaison puissent Lorsque vous travaillez sur des nombres ou des chaînes, vous devez faire attention aux deux problèmes suivants.

Tout d'abord, il est généralement sûr de comparer des multiples (ou un entier et un multiple) pour une valeur supérieure à inférieure à un flottant double précision, mais il est très difficile de comparer des multiples pour l'égalité, en particulier le danger. en comparant les résultats de calculs numériques. Le problème est une "erreur d'arrondi" qui fait que deux valeurs théoriquement égales sont légèrement différentes.

Deuxièmement, bien que les opérateurs de comparaison puissent effectuer des opérations de comparaison sur des chaînes de la même manière que des nombres, PHP effectue automatiquement une conversion de type, donc parfois lorsque les chaînes peuvent être interprétées comme des nombres, le résultat Résultats illégaux, par exemple, ce qui suit code :




$strinhg_1 = "00008" ; $string _2 = "007" $string_3 = "00008-OK" ;If($string_2 "); If($string_3") ;If ($string_1 ");

La conclusion de sortie est :

007 est inférieur à 00008 //Comparaison de nombres

00008- OK est inférieur à 007 //La comparaison de chaînes

00008 est inférieure à 00008-OK//La comparaison de chaînes produit des conflits

Si possible, PHP paramétrera la chaîne sous forme de nombre lorsque les deux côtés de. la comparaison peut être traitée de cette manière, elle comparera par chiffres au lieu de lettres. Les concepteurs PHP4 traitent cela comme une fonctionnalité et non comme un bug. De notre point de vue, si la chaîne peut être convertie en nombre lors de la comparaison, il est préférable d'utiliser la fonction strcmp() (veuillez vous référer au chapitre 10).

Opérateur ternaire

Une structure très utile est l'opérateur conditionnel ternaire, qui joue un rôle entre l'opérateur booléen et la structure de branche "vérité". Sa fonction est d'avoir trois opérations.La valeur de la première opération est utilisée pour déterminer laquelle des deux autres opérations est requise.Après évaluation, sa valeur est renvoyéeLa syntaxe de l'opérateur est la suivante:

test-expression ?yes-expression:no-expression

Si test-expression est vrai, la valeur de cet opérateur est le résultat de oui-expression, sinon, c'est le résultat de non-expression.

Par exemple, l'opération suivante spécifie $max_num comme $first_num ou $second_num, selon lequel des deux paramètres est le plus grand :

$max_num = $first_num > $second_num ? :$second_num;

Comme nous pouvons le voir, la description ci-dessus est égale à :

if ($first_num >$second_num )

$max_num = $ first_num

else

$max_num = $second_num;

L'exemple ci-dessus sera plus concis si l'opérateur ternaire est utilisé.

Structure de branche

Les deux structures principales de branche sont if et switch.if est le choix de branche principale le plus couramment utilisé, et c'est généralement la structure conditionnelle que tout le monde apprend en premier. Switch est également un bon choix dans certains cas, par exemple lorsque plusieurs branches possibles sont requises sur la base d'une seule valeur, ou lorsqu'une série d'instructions if est très lourde, il est très approprié d'utiliser switch.

instruction if – else

La syntaxe de if est :

if(test)

instruction-1

Alternativement, vous pouvez également avoir une branche else facultative :

if(test)

statement-1

else

statement- 2

Une fois l'instruction if traitée, l'opération de test sera évaluée et le résultat sera interprété comme une valeur booléenne. Si le test n'est pas vrai et qu'il n'y a pas de clause else, alors l'instruction suivante après la structure if est exécutée

Veuillez noter que "l'instruction" dans la syntaxe peut être une instruction unique se terminant par un point-virgule, ou. il peut s'agir d'une grande déclaration. Un bloc de récit entre crochets, ou une autre structure conditionnelle (qui elle-même peut être considérée comme un récit unique). Les conditions peuvent être imbriquées les unes dans les autres à n’importe quelle profondeur. De plus, l'opérateur booléen peut être une valeur booléenne réelle (c'est-à-dire VRAI, FAUX ou le résultat d'un opérateur ou d'une fonction booléenne) ou tout autre type de valeur pouvant être interprété comme une valeur booléenne.

Pour des informations complètes sur la valeur Bollinger, veuillez vous référer au chapitre 6. En termes simples, le nombre "0", la chaîne ""0"" et la chaîne vide """ ne sont pas vrais (faux), et toutes les autres valeurs sont vraies (vrai).

L'exemple suivant affiche la différence absolue entre deux nombres. Il démontre l'utilisation de l'imbrication de conditions et mentionne également l'interprétation des résultats des tests en valeurs booléennes :




if ($first - $second)if ($first > $second){$difference = $first - $second;print("La différence est $difference
" );}else{$difference = $second - $first;print("La différence est $difference
");}elseprint("Il n'y a pas de différence
");

Ce paragraphe Le code repose sur le nombre " 0" à interpréter comme une valeur non vraie. Si la différence est "0", le test échoue et la sortie affiche le message "aucune différence". S'il y a une différence, un test en une étape est effectué (cet exemple est délibérément fait car écrire directement comme "$first != $second" est le même que l'exemple précédent et plus facile à comprendre).

Else supplémentaire

À ce stade, les programmeurs qui ont déjà utilisé Pascal peuvent être conscients que la partie else est un peu étrange. En d'autres termes, comment la clause else sait-elle à laquelle elle appartient. à? Les règles sont en fait très simples et presque les mêmes que dans tous les autres langages sauf Pascal. Chacun des autres est associé au plus proche, bien sûr en suivant d'abord la plage limitée par les accolades. Si vous voulez vous assurer que l'instruction if reste indépendante et n'a pas besoin de correspondre à l'autre, vous pouvez l'entourer d'une paire de grands arcs, comme suit :





if( $num % 2 = =0)//$num est un nombre pair ? {if ($num > 2)print("num n'est pas premier
"); elseprint("num est impair
");

Si $num est un nombre pair supérieur à 2 , alors le code affichera "num n'est pas premier", si $num est un nombre impair, il affichera "num est impair", et si $num est exactement 2, il n'imprimera rien. Si les accolades sont omises, else sera ajouté au if interne, donc si $num est égal à 2, le code affichera incorrectement "num est impair". Si $num est effectivement impair, le code ne fera rien.

Dans les exemples de ce chapitre, nous utilisons souvent l'opérateur reste (%), qui est expliqué au chapitre 12. Pour ces exemples, le lecteur a seulement besoin de savoir que "$x % $y" est "0", ce qui signifie "$x est divisible par $y".

Elseif

Il est très courant d'effectuer des tests de type en cascade, comme le montre l'instruction if imbriquée suivante :





if ($jour == 5)print("Cinq anneaux d'or
"); elseif ($jour ==4)print("Quatre oiseaux appelants
"); ("Trois poules françaises
"); elseif ($jour ==2)print("Tow tourterelles
"; elseif ($jour ==1)print("Une perdrix dans un poirier


Ce formulaire est très courant et il existe une structure elseif spéciale pour le gérer. Nous pouvons réécrire l'exemple précédent comme suit :




.
if ($jour == 5)print("Cinq anneaux d'or
"); elseif($jour == 4)print("Quatre oiseaux appelants
"); )print("Trois poules françaises
"); elseif($day == 2)print("Deux tourterelles
"); elseif($day ==1)print("Une perdrix dans un poirier");

if, elseif... les structures permettent d'effectuer des tests de manière séquentielle uniquement lorsqu'une surface de test de branche réussit. Théoriquement, c'est la même chose que l'exemple précédent (une structure avec cinq branches, à la place d'une structure de branches imbriquées à cinq têtes) sont syntaxiquement différents, mais le comportement est le même. Utilisez celui que vous jugez préférable

Mode branche et HTML 🎜>
Vous avez appris des chapitres précédents. que vous pouvez utiliser librement les balises PHP pour basculer entre le mode HTML et le mode PHP. Dans tous les cas, c'est très pratique si vous devez inclure des régions dans un bloc de texte HTML et qu'il n'y a pas de code dynamique ou inséré. variables, repassez en mode HTML et incluez-le directement avec le texte, ce qui est plus simple et plus efficace que de l'envoyer avec print ou echo

Ce qui est moins évident, c’est que cette stratégie fonctionne même au sein de structures conditionnelles per se. Autrement dit, vous pouvez utiliser PHP pour décider quel HTML envoyer, puis « envoyer » ce HTML en revenant temporairement en mode HTML.

Par exemple, le code suivant utilise l'instruction print pour construire une page Web HTML complète (nous supposons une fonction booléenne male() pour la tester).










Le site réservé aux femmes
");print("");print("Ce site a été spécialement conçu");print ("pour les femmes uniquement.
Les hommes sont interdits ici !");}Else{Print("TITLE>Le site réservé aux hommes
");print(" »);




print(« Ce site a été spécialement construit»);print(« pour les hommes uniquement. ");}?>Nous pouvons éviter toutes ces syntaxes d'impression et utiliser du code HTML en interne dans les deux branches, par exemple : Le site réservé aux femmesCe site a été spécialement conçu pour les femmes uniquement.
Aucun homme n'est autorisé ici !< ;?php}Autre{?>Le site réservé aux hommes
Ce site a été spécialement conçu pour les hommes uniquement.
Aucune femme n'est autorisée ici ! ;

Cette version est plus difficile à lire, mais la seule différence entre elles est que chaque instruction print est remplacée par Starting with the PHP right tag (?>), et en commençant par la balise PHP gauche (
) Dans les exemples de ce livre, nous essayons d'éviter d'inclure ce type de conditionnel, car il est difficile à comprendre pour les novices PHP. Mais cela ne devrait pas être une raison pour empêcher les lecteurs d’apprendre. Cette méthode a ses propres avantages, notamment une exécution rapide (en mode HTML, tout ce que le moteur PHP a à faire est de passer des caractères et d’attendre la prochaine marque gauche PHP, ce qui est certainement plus rapide que l'analyse puis l'exécution d'instructions print, surtout si elles contiennent également des chaînes entre guillemets).

Switch

Pour un type de branche multidirectionnel spécifique, il est plus utile d'utiliser la structure switch. Switch ne effectue pas de branchement en fonction d'une opération logique, mais sélectionne différents chemins en fonction de la valeur d'une seule opération. La syntaxe de Switch est la suivante, avec les parties facultatives entre crochets ([]) :





switch(expression){case value -1:statement -2statement -2…[break;]case value-2:statement-3statement-4…[break;]…[default:default-statement]}

l'expression peut être une variable ou tout autre type Une expression, comme à condition qu'il soit évalué à une valeur simple (un entier, un nombre à virgule flottante double précision ou une chaîne). Cette structure est exécutée en évaluant une expression puis en testant si le résultat est égal à une certaine valeur conditionnelle. Une fois qu'une valeur correspondante est trouvée, les instructions suivantes sont exécutées dans l'ordre jusqu'à l'instruction spéciale "break;", ou jusqu'à la fin de la structure switch (comme nous le verrons plus tard, break peut également se terminer et sortir dans la structure en boucle). La balise spéciale "default" peut être utilisée à la fin d'une structure, qui est la section qui "correspond" à l'expression si aucune autre condition ne lui correspond.

Par exemple, nous pouvons réécrire l'exemple if-else comme suit :





switch($day){case 5:print (" Cinq anneaux d'or
"); break; case4:print("Quatre oiseaux qui appellent
"); break; case 3:print("Trois poules françaises
"); break; case 2:print (" Remorquer des tourterelles
");break;default:print("Une perdrix dans un poirier
");}


Cet exemple de paroles en anglais sera dans 2-5 Parmi eux , la sortie affiche la ligne correspondante, tandis qu'à d'autres dates, "Une perdrix dans un poirier" est imprimé.

Le problème avec Switch est que tous les cas après un cas correspondant seront exécutés jusqu'à ce qu'il y ait une instruction break pour arrêter l'exécution. Dans l'exemple de "partridge", l'instruction break garantit qu'une seule ligne des paroles est visible à la fois. Si vous supprimez l'instruction break, vous verrez plusieurs lignes affichées.

Boucle

Félicitations! Vous venez de franchir la frontière entre le script et la « vraie programmation ». Les structures de branchement que nous avons vues jusqu'à présent sont utiles, mais les calculs qui peuvent être effectués avec elles sont limités. D’un autre côté, n’importe quel langage doté de tests d’évaluation et de boucles illimitées peut être plus performant que n’importe quel autre langage, en théorie informatique, c’est très certain. Vous n’aurez peut-être pas besoin d’écrire un compilateur C en PHP, mais gardez à l’esprit qu’aucune limitation inhérente au langage ne vous empêche de le faire.


Ce qui précède est le contenu du Guide d'apprentissage PHP - Chapitre 7. Pour plus de contenu connexe, veuillez prêter attention au site Web PHP chinois (www. php.cn) !



Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal