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
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
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).
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) !