Kontrollstruktur
Wichtige Punkte dieses Kapitels
◆ Erstellen und Kombinieren von Logiktests
◆ Verwenden von if und switch für die Verzweigungsverarbeitung
◆ Verwenden von while und for
◆ Verwenden von „exit“ und „die“, um die Ausführung der Seite zu beenden
Wenn das Programm nicht über verschiedene fällige Ausführungen entscheiden kann Für verschiedene Situationen ist es sehr schwierig, nützliche Programme zu schreiben. Einfach ausgedrückt hängt das Verhalten des Programmcodes, der die Anzeigevariable ausgibt, vom Wert einer bestimmten Variablen ab. Als Programmierer können wir verschiedene Aktionen verwenden, um das Programm unterschiedlich auf Ereignisse reagieren zu lassen (je nach Außenwelt, Zeit, Benutzer). Eingabe- oder Datenbankinhalte usw.).
Diese Art der Programmantwort erfordert eine „Kontrollstruktur“. Diese Struktur kann Anweisungen steuern, die mit unterschiedlichen Programmcodes unter verschiedenen Umständen ausgeführt werden sollen. Im vorherigen Kapitel haben wir Kontrollstrukturen wie if verwendet, sie aber nicht wirklich ausführlich erklärt. In diesem Kapitel stellen wir jede von PHP bereitgestellte Kontrollstruktur vor und untersuchen im Detail, wie sie funktioniert.
Für erfahrene C-Sprachprogrammierer: Unter allen Funktionen von PHP ist der „Steuerungs“-Teil stilistisch der C-Sprache am ähnlichsten. Alle ursprünglich in der C-Sprache verwendeten Strukturen können hier verwendet werden , und funktioniert genauso. Wenn Sie ein erfahrener C-Programmierer sind, können Sie direkt weitermachen und die Abschnitte am Ende dieses Kapitels lesen.
Die beiden Haupttypen von Kontrollstrukturen, die wir diskutieren werden, sind Verzweigungen und Schleifen. Eine Verzweigung ist eine Verzweigung im Ausführungspfad eines Programms. Abhängig von einem bestimmten Test kann das Programm wählen, ob es nach links oder nach rechts weitergehen soll. Die nachfolgenden Pfade können unterschiedlich sein oder wieder zusammengeführt werden. Eine Schleife ist einer der Verzweigungstypen, der über einen Ausführungspfad verfügt, der zum Anfang der Verzweigung zurückkehrt und wiederholt getestet oder in einer Schleife ausgeführt werden kann.
Bevor Sie Kontrollstrukturen effektiv nutzen können, müssen Sie in der Lage sein, Testbedingungen effektiv zu konstruieren. Wir beginnen mit den einfachsten Tests, schauen uns die Konstanten TRUE und FALSE an und verwenden diese Tests dann in komplexerem Code.
Boolescher Operator
Jede in diesem Kapitel vorgestellte Kontrollstruktur enthält zwei unterschiedliche Teile: Der eine ist der Testteil (der entscheidet, in welche Richtung vorgegangen werden soll) und der andere ist der Testcode (entweder a Ein einzelner Zweig oder eine Schleife) wird durch eine boolesche Operationsauswertung getestet, und die Beurteilung „wahr“ oder „nicht wahr“ ist das Ergebnis des Operationsausdrucks.
Boolesche Konstante
Der einfachste Operationstyp ist ein einfacher Wert (einfacher Wert), und der einfachste boolesche Wert sind die Konstanten TRUE und FALSE und umgekehrt. Wir können sie beispielsweise in den Testteil einer if-else-Anweisung einbetten:
if (TRUE)print(“This will Always print”); „Das wird nie gedruckt“); das obige Beispiel ist genau das Gleiche wie das Folgende: if (FALSE) print („Das wird nie gedruckt“); elseprint („Das wird immer gedruckt“);
Logische Operatoren
Logische Operatoren können andere logische (auch boolesche) Werte kombinieren, um neue boolesche Werte zu generieren. PHP unterstützt standardmäßige logische Operationen (and, or, not und xor). Die ersten beiden haben alternative Versionen, wie in Tabelle 7-1 gezeigt.
7-1 Symbole für logische Operationen
Für C-Programmierer müssen Sie mit den Operatoren „&&“ und „||“ vertraut sein. Der „!“-Operator wird aus offensichtlichen Gründen oft „NOT“ genannt.
Die folgenden Ausdrücke sind Beispiele für logische Operatoren:
(($statement_1 && $statement_2)||
(! $statement_1 && $statement_2)|| der wahren Werte der beiden Variablen, die jeweils durch einen „&&“-Operator dargestellt werden, da einer dieser vier durch den verwendeten „||“-Operator miteinander verbunden werden muss Im folgenden Beispiel ist eine cleverere Demonstration der „Tautologie“:
($statement_1 und $statement_2 und
$statement_3) xor
((! $statement_2)) oder
(! ( $statement_1 und $statement_3)) oder
(! ( $statement_2 und $statement_3))))
Die Bedeutung davon Die Operation lautet: „Bei drei narrativen Aussagen kann nur eine der folgenden beiden Situationen auftreten. 1: Wenn alle drei nicht-ne-Aussagen wahr sind, gibt es ein Paar Aussagen, die nicht wahr sind.“
Die Priorität logischer Operatoren
ist die gleiche wie bei allen anderen Operatoren. Einige logische Operatoren haben eine höhere Priorität als andere, Sie können jedoch auch Klammern verwenden, um die Rangfolge zu ändern viel niedriger als andere, also geben Sie den Operator (=) an als „und“ ist enger gebunden, aber weniger eng als „&&“
Ein Handbuch zur Priorität und Relevanz von Operatoren gibt es unter http://. /www.php.net/. Vollständige Liste.
Kurzschluss der logischen Operatoren
Boolesche Operatoren haben eine sehr praktische Funktion, da sie von links nach rechts kombiniert werden können und so gestaltet werden können: Wenn festgestellt wird, dass das erste Argument wahr ist, besteht überhaupt keine Notwendigkeit, mit dem zweiten Argument fortzufahren, beispielsweise um ein sehr ungefähres Verhältnis zweier Zahlen zu bestimmen, aber auch um mögliche Fehler bei der Division durch 0 zu vermeiden , um sicherzugehen. Wenn der Divisor nicht 0 ist, verwenden Sie einfach den Operator „!=" (ungleich):
if ($denom != 0 && $numer/ $denome>2)
print( "Mehr als doppelt so viel!");
Wenn $denom „0“ ist, sollte der „&&“-Operator „nicht“ zurückgeben, unabhängig davon, ob der zweite Operator wahr oder falsch ist „wahrer“ Wert. Aufgrund des Kurzschlussverhaltens wird der zweite Ausdruck nicht ausgewertet, wodurch Fehler vermieden werden. Für den Fall, dass $denom nicht gleich „0“ ist, verfügt der Operator „&&“ nicht über genügend Informationen, um eine Wahrheitsschlussfolgerung zu ziehen, sodass der zweite Operator ausgewertet wird.
Bisher haben wir die TRUE- und FALSE-Konstanten offiziell besprochen und wie man sie kombinieren kann, um andere wahre und falsche Werte zu bilden. Schauen wir uns nun die Operatoren an, die tatsächliche boolesche arithmetische Tests durchführen.
Vergleichsoperatoren
Tabelle 7-2 zeigt Vergleichsoperatoren, die für Zahlen oder Zeichenfolgen verwendet werden können (bitte beachten Sie die Beschreibung „Vorsicht bei Nicht-Ganzzahlen“).
Tabelle 7-2 Vergleichsoperationssymbole
Im Folgenden finden Sie einige Beispiele für die Variablenspezifikation, gefolgt von einem zusammengesetzten Test, der immer wahr ist:
$drei = 3; $vier = 4; 3.14159;Wenn (($drei = =$drei) und ($vier ===$vier) und ($drei !=$vier) und ($drei=$there) and($drei $drei) und($mein_pi ”); elseprint („Sicher, dass Sie das richtig eingegeben haben?
“):
Bitte beachten Sie einen sehr häufigen Fehler: die Verwechslung des spezifischen Operators (=) und des Vergleichsoperators (==). „if($drei = $vier).“ Diese Anweisung kann versehentlich $drei und $vier als äquivalente Variablen (Typen) festlegen. Wenn $vier wahr ist, ist das Testergebnis wahr!
Operatorpriorität
Obwohl es die Leute, die den Code lesen, zu sehr verwirren kann, ist es gut zu beachten, dass Vergleichsoperatoren eine höhere Priorität haben als das Konzept boolescher Operatoren. Bitte schauen Sie sich das folgende Beispiel an:
If ($small_num> 2 && $small_num
Es sind keine weiteren Klammern erforderlich, außer den beiden notwendigen Klammern für if.
String-Vergleich
Vergleichsoperatoren können zum Vergleich von Strings oder Zahlen verwendet werden (bitte beachten Sie die Beschreibung „Vorsicht bei nicht konstanten Zahlen“). Wir möchten, dass die folgende Programmausgabe das entsprechende Beispiel zeigt:
if (("Marx"
Erstens ist es im Allgemeinen sicher, Vielfache (oder eine ganze Zahl und ein Vielfaches) für eine Gleitkommazahl mit größerer als kleinerer Genauigkeit zu vergleichen, aber es ist sehr schwierig, Vielfache auf Gleichheit zu vergleichen, insbesondere bei Gefahren beim Vergleich der Ergebnisse numerischer Berechnungen. Das Problem ist ein „Rundungsfehler“, der dazu führt, dass zwei theoretisch gleiche Werte leicht abweichen.
Zweitens: Obwohl Vergleichsoperatoren Vergleichsoperationen für Zeichenfolgen auf die gleiche Weise wie Zahlen durchführen können, führt PHP automatisch eine Typkonvertierung durch, sodass manchmal, wenn Zeichenfolgen als Zahlen interpretiert werden können, das Ergebnis ungültig ist, beispielsweise Folgendes Code:
$strinhg_1 = „00008“; $string_2 = „0007“; $string_3 = „00008-OK“ ;If($string_2 “); If($string_3“) ;If ($string_1 “);
Die Ausgabeschlussfolgerung lautet:
007 ist kleiner als 00008 //Zahlenvergleich
00008- OK ist kleiner als 007 //String-Vergleich
00008 ist kleiner als 00008-OK//String-Vergleich erzeugt Konflikte
Wenn möglich, parametrisiert PHP den String als Zahl, wenn beide Seiten von Der Vergleich kann auf diese Weise durchgeführt werden, es erfolgt ein Vergleich anhand von Zahlen statt von Buchstaben. PHP4-Designer betrachten dies als eine Funktion, nicht als einen Fehler. Wenn die Zeichenfolge beim Vergleich möglicherweise in eine Zahl umgewandelt wird, ist es aus unserer Sicht besser, die Funktion strcmp() zu verwenden (siehe Kapitel 10).
Ternärer Operator
Eine sehr nützliche Struktur ist der ternäre Bedingungsoperator, der eine Rolle zwischen dem Booleschen Operator und der „Wahrheit“-Zweigstruktur spielt. Seine Funktion besteht darin, drei Operationen durchzuführen, um zu bestimmen, welche der anderen beiden Operationen erforderlich ist. Nach der Auswertung wird sein Wert wie folgt zurückgegeben:
test-expression ?yes-expression:no-expression
Wenn test-expression wahr ist, ist der Wert dieses Operators das Ergebnis von „yes-expression“, andernfalls ist er das Ergebnis von „no-expression result“.
Zum Beispiel gibt die folgende Operation $max_num als $first_num oder $second_num an, je nachdem, welcher der beiden Parameter größer ist:
$max_num = $first_num > $second_num ? :$second_num;
Wie wir sehen können, entspricht die obige Beschreibung:
if ($first_num >$second_num )
$max_num = $ first_num
else
$max_num = $second_num;
Das obige Beispiel wird prägnanter, wenn der ternäre Operator verwendet wird.
Zweigstruktur
Die beiden Hauptstrukturen von branch sind if und switch.if ist die am häufigsten verwendete Hauptzweigauswahl und es ist normalerweise die bedingte Struktur, die jeder zuerst lernt. In einigen Fällen ist Switch auch eine gute Wahl, beispielsweise wenn mehrere mögliche Verzweigungen basierend auf einem einzelnen Wert erforderlich sind oder wenn eine Reihe von if-Anweisungen sehr umständlich sind. Daher ist die Verwendung von Switch sehr gut geeignet.
if – else-Anweisung
Die Syntax von if lautet:
if(test)
statement-1
Oder Sie können auch einen optionalen else-Zweig haben:
if(test)
statement-1
else
statement- 2
Nachdem die if-Anweisung verarbeitet wurde, wird der Testvorgang ausgewertet und das Ergebnis als boolescher Wert interpretiert. Wenn test nicht wahr ist und keine else-Klausel vorhanden ist, wird die nächste Anweisung nach der if-Struktur ausgeführt.
Bitte beachten Sie, dass die „Anweisung“ in der Syntax eine einzelne Anweisung sein kann, die mit einem Semikolon oder endet Dabei kann es sich um einen großen Erzählblock oder eine andere bedingte Struktur handeln (die selbst als eine einzelne Erzählung betrachtet werden kann). Bedingungen können beliebig tief ineinander verschachtelt werden. Darüber hinaus kann der Boolesche Operator ein echter Boolescher Wert (also TRUE, FALSE oder das Ergebnis eines Booleschen Operators oder einer Funktion) oder jeder andere Werttyp sein, der als Boolescher Wert interpretiert werden kann.
Ausführliche Informationen zum Bollinger-Wert finden Sie in Kapitel 6. Einfach ausgedrückt sind die Zahl „0“, die Zeichenfolge „0“ und die leere Zeichenfolge „“ falsch und alle anderen Werte sind wahr.
Das folgende Beispiel gibt die absolute Differenz zwischen zwei Zahlen aus. Es demonstriert die Verwendung der verschachtelten Verschachtelung von Bedingungen und erwähnt auch die Interpretation von Testergebnissen in boolesche Werte:
if ($first - $second)if ($first > $second){$difference = $first - $second;print(“Die Differenz ist $difference
” );}else{$difference = $second - $first;print("Der Unterschied ist $difference
");}elseprint("Es gibt keinen Unterschied
");
Dieser Absatz Der Code basiert auf der Zahl „ 0“ als nicht wahrer Wert interpretiert werden. Wenn die Differenz „0“ ist, schlägt der Test fehl und die Ausgabe zeigt die Meldung „kein Unterschied“ an. Wenn eine Differenz vorhanden ist, wird ein einstufiger Test durchgeführt (dieses Beispiel). wurde bewusst erstellt, da das direkte Schreiben wie „$first != $second“ mit dem vorherigen Beispiel identisch und einfacher zu verstehen ist.
Zusätzliches else
An diesem Punkt sind sich Programmierer, die Pascal bereits verwendet haben, möglicherweise bewusst, dass der else-Teil etwas seltsam ist. Mit anderen Worten: Woher weiß die else-Klausel, welcher Teil dazugehört? Zu? Die Regeln sind eigentlich sehr einfach und fast die gleichen wie in jeder anderen Sprache außer Pascal. Jeder andere wird mit dem nächstgelegenen abgeglichen, natürlich zuerst entsprechend dem durch die geschweiften Klammern eingeschränkten Bereich. Wenn Sie sicherstellen möchten, dass die if-Anweisung unabhängig bleibt und nicht mit der else-Anweisung übereinstimmen muss, können Sie sie wie folgt in zwei große Bögen einschließen:
if( $num % 2 = =0)//$num ist eine gerade Zahl? {if ($num > 2)print(“num ist keine Primzahl
“); elseprint(“num ist ungerade
“);
Wenn $num eine gerade Zahl größer als 2 ist , dann gibt der Code „num ist keine Primzahl“ aus, wenn $num eine ungerade Zahl ist, wird „num ist ungerade“ gedruckt, und wenn $num genau 2 ist, wird nichts gedruckt. Wenn die geschweiften Klammern weggelassen werden, wird else an das innere if angehängt. Wenn $num also gleich 2 ist, gibt der Code fälschlicherweise „num ist ungerade“ aus. Wenn $num tatsächlich ungerade ist, gibt der Code nichts aus.
In den Beispielen in diesem Kapitel verwenden wir häufig den Restoperator (%), der in Kapitel 12 erklärt wird. Für diese Beispiele muss der Leser nur wissen, dass „$x % $y“ „0“ ist, was bedeutet, dass „$x durch $y teilbar ist“.
Elseif
Es ist sehr üblich, kaskadierende Tests durchzuführen, wie in der folgenden verschachtelten if-Anweisung gezeigt:
if ($day == 5)print(“Fünf goldene Ringe
”); elseif ($day ==4)print(“Vier rufende Vögel
”); („Drei französische Hühner
“); elseif ($day ==2)print(“Zwei Turteltauben
“; elseif ($day ==1)print(“Ein Rebhuhn in einem Birnbaum
Diese Form ist sehr verbreitet und es gibt eine spezielle elseif-Struktur, um damit umzugehen. Wir können das vorherige Beispiel wie folgt umschreiben:
if ($day == 5)print(“Fünf goldene Ringe
”); elseif($day == 4)print(“Vier rufende Vögel
”); )print(„Drei französische Hühner
“); elseif($day == 2)print(“Zwei Turteltauben
“); BR>");
if, elseif...-Strukturen ermöglichen die sequentielle Durchführung von Tests nur dann, wenn eine Zweigtestoberfläche erfolgreich ist. Theoretisch ist dies dasselbe wie im vorherigen Beispiel (stattdessen eine Struktur mit fünf Zweigen). einer verschachtelten fünfköpfigen Zweigstruktur) sind syntaktisch unterschiedlich, aber das Verhalten ist das gleiche, was Sie für besser halten
Zweig- und HTML-Modus <. sie haben aus den vorherigen kapiteln gelernt dass php-tags frei verwenden k um zwischen dem html-modus und php-modus hin her zu wechseln. dies ist auf jeden fall sehr praktisch wenn bereiche in html-textblock einbinden m kein dynamischer code vorhanden variablen wechseln zur f direkt text ein was einfacher effizienter als das senden mit print oder echo>
Weniger offensichtlich ist, dass diese Strategie sogar innerhalb per se bedingter Strukturen funktioniert. Das heißt, Sie können mit PHP entscheiden, welcher HTML-Code gesendet werden soll, und diesen HTML-Code dann „senden“, indem Sie vorübergehend wieder in den HTML-Modus wechseln.
Zum Beispiel verwendet der folgende Code die print-Anweisung, um eine vollständige HTML-Webseite zu erstellen (wir gehen von einer booleschen Funktion „female()“ aus, um sie zu testen).
Das Obige ist der Inhalt des PHP-Lernhandbuchs – Kapitel 7. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.org). php.cn)!