Heim > Backend-Entwicklung > PHP-Tutorial > PHP-Lernhandbuch – Kapitel 7

PHP-Lernhandbuch – Kapitel 7

黄舟
Freigeben: 2023-03-04 07:10:02
Original
916 Leute haben es durchsucht


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

PHP-Lernhandbuch – Kapitel 7

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







PHP-Lernhandbuch – Kapitel 7

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










Die Website nur für Frauen
“);print(““);print(“Diese Website wurde speziell erstellt“);print ("Nur für Frauen.
Männer sind hier nicht erlaubt!");}Else{Print("TITLE>Die Website nur für Männer
");print(" “);




print(“Diese Seite wurde speziell erstellt“);print(“nur für Männer. ");}?>Wir können alle diese Drucksyntaxen vermeiden und HTML-Code intern in beiden Zweigen verwenden, zum Beispiel: Die Website nur für FrauenDiese Website wurde speziell nur für Frauen erstellt.
Männer sind hier nicht erlaubt!< ;?php}Sonst{?>Die Website nur für Männer
Diese Website wurde speziell nur für Männer erstellt.
Frauen sind hier nicht erlaubt!

Diese Version ist schwieriger zu lesen, aber der einzige Unterschied zwischen ihnen besteht darin, dass jede print-Anweisung durch „Starting with the PHP right tag (?>)“ ersetzt wird. und beginnend mit dem linken PHP-Tag (
). In den Beispielen in diesem Buch versuchen wir, diese Art von Bedingung zu vermeiden, da sie für PHP-Neulinge schwer zu verstehen ist. Dies sollte jedoch kein Grund sein, Leser am Lernen zu hindern. Diese Methode hat ihre eigenen Vorteile, einschließlich einer schnellen Ausführung (im HTML-Modus muss die PHP-Engine lediglich Zeichen übergeben und auf die nächste linke PHP-Markierung warten). ist sicherlich schneller als das Parsen und anschließende Ausführen von Druckanweisungen, insbesondere wenn sie auch Zeichenfolgen in doppelte Anführungszeichen enthalten.

Schalter

Für einen bestimmten Mehrwegezweigtyp ist es sinnvoller, die Schalterstruktur zu verwenden. Switch verzweigt nicht basierend auf einer logischen Operation, sondern wählt unterschiedliche Pfade basierend auf dem Wert einer einzelnen Operation aus. Die Syntax von Switch lautet wie folgt, wobei optionale Teile in Klammern ([]) eingeschlossen sind:





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

expression kann eine Variable oder ein beliebiger anderer Typ sein. Ein Ausdruck, wie z solange es zu einem einfachen Wert (einer Ganzzahl, einer Gleitkommazahl mit doppelter Genauigkeit oder einer Zeichenfolge) ausgewertet wird. Diese Struktur wird ausgeführt, indem ein Ausdruck ausgewertet und dann getestet wird, ob das Ergebnis einem bestimmten bedingten Wert entspricht. Sobald ein passender Wert gefunden wurde, werden nachfolgende Anweisungen der Reihe nach bis zur speziellen Anweisung „break;“ oder bis zum Ende der Schalterstruktur ausgeführt (wie wir später sehen werden, kann break auch in der Schleifenstruktur enden und beenden). Das spezielle Tag „default“ kann am Ende einer Struktur verwendet werden. Dabei handelt es sich um den Abschnitt, der mit dem Ausdruck „übereinstimmt“, wenn keine andere Bedingung damit übereinstimmt.

Zum Beispiel können wir das if-else-Beispiel wie folgt umschreiben:





switch($day){case 5:print (" Fünf goldene Ringe
"); break; case4:print("Vier rufende Vögel
"); break; case 3:print("Drei französische Hühner
"); break; case 2:print (" Tow turteldoves
");break;default:print("Ein Rebhuhn in einem Birnbaum
");}


Dieses Beispiel für englische Liedtexte wird in 2-5 enthalten sein , zeigt die Ausgabe die entsprechende Zeile an, während an anderen Daten „Ein Rebhuhn in einem Birnbaum“ gedruckt wird.

Das Problem bei Switch ist, dass alle Fälle nach einem passenden Fall ausgeführt werden, bis eine Break-Anweisung zum Stoppen der Ausführung vorhanden ist. Im Beispiel von „partridge“ sorgt die break-Anweisung dafür, dass jeweils nur eine Zeile des Liedtextes sichtbar ist. Wenn Sie die break-Anweisung entfernen, werden mehrere Zeilen angezeigt.

Schleife

Glückwunsch! Sie haben gerade die Grenze von der Skripterstellung zur „echten Programmierung“ überschritten. Die Verzweigungsstrukturen, die wir bisher gesehen haben, sind nützlich, aber die Berechnungen, die damit durchgeführt werden können, sind begrenzt. Andererseits kann jede Sprache mit Bewertungstests und unbegrenzten Schleifen eine bessere Leistung erbringen als jede andere Sprache. In der Informatiktheorie ist dies sehr sicher. Möglicherweise müssen Sie keinen C-Compiler in PHP schreiben, aber bedenken Sie, dass es keine inhärenten Sprachbeschränkungen gibt, die Sie daran hindern.


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



Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage