Instrucțiuni condiționale PHP if, switch și operator ternar. Compararea unei variabile sau expresii cu diferite valori în PHP Operații logice într-o condiție

Declarația switch este similară cu constructul IF ELSEIF ELSE și vă permite să efectuați diferite acțiuni în funcție de valoare.

În următorul cod puteți vedea cum poate fi rezolvată aceeași problemă folosind if și switch:

Construcția comutatoare folosește o comparație slabă == .

In paranteze punem valoarea care va fi comparata cu celelalte. Apoi vine cazul, valoarea fiind comparată și două puncte. Apoi sunt comenzile care trebuie executate. Blocul implicit va fi executat dacă nu este executat niciun bloc de caz.

Comanda break întrerupe execuția curentă a comutatorului. Ideea este că comutatorul execută toate comenzile la rând, chiar dacă sunt în blocuri de cazuri diferite:

"; cazul 2: ecou "Stare: Transferat pentru livrare
"; pauză; cazul 3: ecou "Stare: finalizat
"; pauză; ) ?>

Rezultat în browser:

Stare: Starea procesării: Transferat pentru livrare

După cum puteți vedea, au fost executate 2 case blocks. Primul - pentru că se potrivește condiției, al doilea - pentru că nu există pauză în blocul 1.

Valori multiple în CASE

De asemenea, puteți utiliza un bloc de cod pentru mai multe valori în comutator:

De obicei, alegerea între if și switch se face doar pe baza preferințelor dezvoltatorului. Personal, nu folosesc niciodată swtich pur și simplu pentru că îmi plac mai mult constructele if-elseif-else.

Operator intrerupator este ca o serie de instrucțiuni IF cu aceeași condiție. În multe cazuri, poate fi necesar să comparați aceeași variabilă (sau expresie) cu mai multe valori diferite și să executați diferite secțiuni de cod, în funcție de valoarea pe care o ia acea variabilă (sau expresie). Acesta este exact cazul pentru care operatorul este convenabil intrerupator.

cometariu: Rețineți că, spre deosebire de alte limbi, instrucțiunea continue este utilizată în instrucțiunile switch și acționează similar cu instrucțiunea pauză. Dacă aveți o instrucțiune switch în interiorul unei bucle și trebuie să treceți la următoarea iterație a buclei, utilizați continua 2.

cometariu:

Rețineți că constructul swich/case folosește comparații imprecise (==) .

Următoarele două exemple ilustrează două moduri diferite de a scrie același lucru. Se folosește o serie de operatori dacăȘi elseif, iar celălalt este operatorul intrerupator:

Exemplul #1 Operator intrerupator
if ($i == 0) ( echo "i este 0"; ) elseif ($i == 1) ( echo "i este 1"; ) elseif ($i == 2) ( echo "i este 2"; ) comutator ($i) (cazul 0: ecou „i este 0”; pauză; cazul 1: ecou „i este 1”; pauză; cazul 2: ecou „i este 2”; pauză; )
Exemplul #2 Operator intrerupator permite compararea cu șiruri
comutator ($i) ( caz „măr”: ecou „i este un măr”; pauză; caz „ciocolată”: ecou „i este o ciocolată”; pauză; caz „plăcintă”: ecou „i este o plăcintă”; pauză )

Este important să înțelegeți cum operatorul intrerupator se face pentru a evita erorile. Operator intrerupator execută linie cu linie (de fapt expresie după expresie). La început, nu se execută niciun cod. Doar dacă se găsește un operator caz, a cărui valoare coincide cu valoarea expresiei din operator intrerupator, PHP începe să execute instrucțiuni. PHP continuă să execute instrucțiuni până la sfârșitul blocului intrerupator sau până întâlnește operatorul pauză. Dacă nu scrieți declarația pauză la sfârșitul unei secțiuni de caz, PHP va continua să execute comenzile din următoarea secțiune de caz. De exemplu:

Comutator ($i) ( cazul 0: ecou „i este 0”; cazul 1: ecou „i este 1”; cazul 2: ecou „i este 2”; )

În acest exemplu, dacă $i este 0, atunci PHP va executa toate ecourile! Dacă $i este 1, PHP va executa ultimele două instrucțiuni echo. Veți obține comportamentul așteptat al operatorului (va fi afișat „i egal cu 2”) dacă $i este egal cu 2. Deci, este important să nu uitați de operatori pauză(deși poate doriți să evitați utilizarea prevăzută în anumite circumstanțe).

În operator intrerupator expresia este evaluată o dată și acest rezultat este comparat cu fiecare enunț caz. În exprimare elseif, expresia este evaluată din nou. Dacă starea dvs. este mai complexă decât o simplă comparație și/sau este într-o buclă, constructul intrerupator poate lucra mai repede.

Lista de instrucțiuni de executat într-o secțiune de caz poate fi, de asemenea, goală, ceea ce pur și simplu transferă controlul listei de instrucțiuni din secțiunea de caz următoare.

Comutator ($i) ( cazul 0: cazul 1: cazul 2: ecou „i este mai mic de 3, dar nu negativ”; pauză; cazul 3: ecou „i este 3”; )

Un tip special de construcție a carcasei -- Mod implicit. Controlul vine aici când niciuna dintre celelalte declarații de caz nu a funcționat. De exemplu:

Comutator ($i) ( cazul 0: ecou „i este 0”; pauză; caz 1: ecou „i este 1”; pauză; caz 2: ecou „i este 2”; pauză; implicit: ecou „i nu este 0” , 1 sau 2"; )

Exprimarea în operator caz poate fi orice expresie care este turnată într-un tip simplu, adică într-un tip întreg, sau într-un tip în virgulă mobilă (float) sau într-un șir. Matricele sau obiectele nu pot fi folosite aici până când nu sunt dereferențiate la un tip simplu.

Este posibilă o sintaxă alternativă pentru structura de control al comutatorului. Pentru mai multe detalii, consultați Sintaxa alternativă pentru structurile de control.

Comutator ($i): cazul 0: echo „i este 0”; pauză;

cazul 1: ecou „i este egal cu 1”; pauză;

cazul 2: ecou „i este egal cu 2”; pauză;

implicit: echo „i nu este egal cu 0, 1 sau 2”; întrerupător de capăt;

Este posibil să folosiți un punct și virgulă în loc de două puncte după o declarație case. De exemplu:

Comutare($bere) (caz „tuborg”; caz „carlsberg”; caz „heineken”; ecou „Alegere bună”; pauză; implicit; ecou „Vă rugăm să faceți o nouă alegere...”; pauză; )

Condiția și alegerea sunt constructe cheie ale limbajului. Luarea corectă a deciziilor este baza unui algoritm de înaltă calitate și a unui cod clar și ușor de înțeles. Proiectarea corectă a algoritmului și utilizarea corectă a comentariilor sunt factori de stabilitate și fiabilitate.

Programarea modernă nu este încă lipsită de rigiditate. Codul, odată scris, se poate adapta la condițiile de sarcină în schimbare numai cu ajutorul unui specialist competent. Dar totuși, nivelul de mobilitate a codului este determinat de nivelul de calificare al autorului său.

Selectați sintaxa de construcție

Construcția de selecție a cazurilor de comutare PHP este foarte simplu de scris, executată corect și convenabilă în practică. Exemplul propune o funcție care formatează text cu etichete HTML. Dacă primul parametru conține „bold” sau „italic”, atunci rezultatul funcției înglobează al doilea parametru cu etichete „puternic” sau „i”.

Rezultatul din browser afișează conținutul celui de-al doilea parametru în stil aldine sau italic. Orice altă valoare pentru primul parametru este interpretată ca o culoare și înglobează al doilea parametru cu o etichetă „font”.

Condiția testată este scrisă între paranteze după cuvântul cheie „comutați”. Corpul structurii este format din secțiuni „case” și un bloc de instrucțiuni „default”, care este executat numai dacă niciunul dintre blocurile „case” nu este declanșat.

Există o nuanță foarte semnificativă. Un bloc de instrucțiuni „case” începe după caracterul „:” și se termină cu instrucțiunea „break”. Prezența operatorului „break” nu este necesară. Dacă nu este prezent, atunci următoarea condiție „caz” va fi verificată. Condițiile sunt întotdeauna verificate până când apare primul meci. Desigur, condițiile de aici sunt doar „==".

Fiecare secțiune „case” este executată numai dacă condiția este adevărată, dar blocul „implicit” de instrucțiuni va fi întotdeauna executat dacă lipsește o instrucțiune „break” în secțiunea „case” care a fost declanșată sau dacă niciuna dintre instrucțiunile condiţiile potrivite.

De fapt, în PHP: switch case pentru mai multe valori are mai multe blocuri de instrucțiuni. Pentru a urma în mod formal sintaxa, fiecare bloc de instrucțiuni trebuie să se încheie cu o „pauză”.

De îndată ce o condiție este potrivită, secțiunea corespunzătoare și, dacă nu există „break” în ea, tot ce urmează este executat. În exemplu, valoarea variabilei „$x” este 1 și nu există „breaks”, deci rezultatul = „-one--two--default-”.

Imbricarea condiționalelor

Limbajul nu limitează dezvoltatorul la nivelul de imbricare. Este permisă cuibărirea caselor de comutatoare. De asemenea, PHP nu limitează programatorul în alegerea operatorilor care pot fi utilizați în interiorul majusculei.

Acest lucru vă permite să creați algoritmi frumoși și ușor de citit. De exemplu, trebuie să recunoașteți tabelul de reguli CSS. Puteți seta imediat comutatorul casei PHP pentru a recunoaște clasele și identificatorii, apoi să recunoască regulile în sine. Aceasta este o soluție evidentă, dar greoaie. Atât clasele, cât și identificatorii folosesc reguli similare.

Este mai convenabil să recunoașteți regulile folosind un caz de comutator. Puteți activa o funcție în PHP care va aborda recunoașterea regulilor. Putem merge mai departe. Multe reguli permit semnificații similare. Raționând în acest fel, încercați să construiți procesul invers: switch case în PHP va fi executat sub formă de funcții, primul funcționează la nivel de valoare, al doilea la nivel de regulă, iar al treilea este apelat din nivelul unei anumite clase sau identificator.

O instrucțiune switch este ca o serie de instrucțiuni IF cu aceeași condiție. În multe cazuri, poate fi necesar să comparați aceeași variabilă (sau expresie) cu mai multe valori diferite și să executați diferite secțiuni de cod, în funcție de valoarea pe care o ia acea variabilă (sau expresie). Acesta este exact cazul pentru care declarația switch este convenabilă.

Cometariu:

Rețineți că, spre deosebire de alte limbi, instrucțiunea continue este utilizată în instrucțiunile switch și acționează ca o instrucțiune break. Dacă construcția comutatorului se află în interiorul unei bucle și trebuie să treceți la următoarea iterație a buclei, utilizați Continu 2.

Cometariu:

Rețineți că construcția switch/case folosește comparație inexactă (==).

Următoarele două exemple ilustrează două moduri diferite de a scrie același lucru. Unul folosește o serie de instrucțiuni if ​​și elseif, iar celălalt folosește o instrucțiune switch:

Exemplul #1 Operator intrerupator

If ($i == 0) ( echo "i este 0"; ) elseif ($i == 1) ( echo "i este 1"; ) elseif ($i == 2) ( echo "i este 2"; ) comutator ($i) (cazul 0: ecou „i este 0”; pauză; cazul 1: ecou „i este 1”; pauză; cazul 2: ecou „i este 2”; pauză; )

Exemplul #2 Operator intrerupator permite compararea cu tipul şir

Comutator ($i) ( caz „măr”: ecou „i este un măr”; pauză; caz „ciocolată”: ecou „i este o ciocolată”; pauză; caz „plăcintă”: ecou „i este o plăcintă”; pauză )

Este important să înțelegeți cum este executată o instrucțiune switch pentru a evita erorile. Instrucțiunea switch execută linie cu linie (de fapt expresie după expresie). La început, nu se execută niciun cod. Numai dacă este găsită o instrucțiune case a cărei valoare se potrivește cu valoarea expresiei din instrucțiunea switch, PHP începe să execute instrucțiunile. PHP continuă să execute instrucțiuni până la sfârșitul blocului switch sau până când întâlnește o instrucțiune break. Dacă nu scrieți o instrucțiune break la sfârșitul unei secțiuni case, PHP va continua să execute comenzile din următoarea secțiune case.

De exemplu:

Comutator ($i) ( cazul 0: ecou „i este 0”; cazul 1: ecou „i este 1”; cazul 2: ecou „i este 2”; )

În acest exemplu, dacă $i este 0, atunci PHP va executa toate ecourile! Dacă $i este 1, PHP va executa ultimele două instrucțiuni echo. Veți obține comportamentul așteptat al instrucțiunii (va fi afișat „i este egal cu 2”) numai dacă $i este egal cu 2. Așadar, este important să fiți atenți la instrucțiunile break (chiar dacă este posibil să doriți să evitați să-l utilizați așa cum este prevăzut în anumite circumstanțe).

Într-o instrucțiune switch, expresia este evaluată o dată și acest rezultat este comparat cu fiecare instrucțiune case. Într-o instrucțiune elseif, expresia este evaluată din nou. Dacă starea dvs. este mai complexă decât o simplă comparație și/sau este într-o buclă, construcția comutatorului poate fi mai rapidă.

Lista de instrucțiuni de executat într-o secțiune de caz poate fi, de asemenea, goală, ceea ce pur și simplu transferă controlul listei de instrucțiuni din secțiunea de caz următoare.

Comutator ($i) ( cazul 0: cazul 1: cazul 2: ecou „i este mai mic de 3, dar nu negativ”; pauză; cazul 3: ecou „i este 3”; )

Un tip special de construcție a carcasei este implicit. Controlul vine aici când niciuna dintre celelalte declarații de caz nu a funcționat.

De exemplu:

Comutator ($i) ( cazul 0: ecou „i este 0”; pauză; caz 1: ecou „i este 1”; pauză; caz 2: ecou „i este 2”; pauză; implicit: ecou „i nu este 0” , 1 sau 2"; )

Este posibilă o sintaxă alternativă pentru structura de control al comutatorului.

Comutator ($i): cazul 0: echo „i este 0”; pauză;

Este posibil să folosiți un punct și virgulă în loc de două puncte după o declarație case.

De exemplu:

cazul 2: ecou „i este egal cu 2”; pauză;

(PHP 4, PHP 5, PHP 7)

Operator intrerupator este ca o serie de instrucțiuni IF cu aceeași condiție. În multe cazuri, poate fi necesar să comparați aceeași variabilă (sau expresie) cu mai multe valori diferite și să executați diferite secțiuni de cod, în funcție de valoarea pe care o ia acea variabilă (sau expresie). Acesta este exact cazul pentru care operatorul este convenabil intrerupator.

cometariu: Vă rugăm să rețineți că, spre deosebire de alte limbaje, operatorul continue este folosit în constructe intrerupatorși acționează ca un operator pauză. Dacă aveți un design intrerupator este în interiorul unei bucle și trebuie să treceți la următoarea iterație a buclei, utilizați continua 2.

cometariu:

Rețineți că constructul switch/case folosește o comparație imprecisă (==).

Următoarele două exemple ilustrează două moduri diferite de a scrie același lucru. Se folosește o serie de operatori dacăȘi elseif, iar celălalt este operatorul intrerupator:

Exemplul #1 Operator intrerupator

Exemplul #2 Operator intrerupator permite compararea cu tipul șirului

Este important să înțelegeți cum operatorul intrerupator se face pentru a evita erorile. Operator intrerupator execută linie cu linie (de fapt expresie după expresie). La început, nu se execută niciun cod. Doar dacă se găsește un operator caz, a cărui valoare coincide cu valoarea expresiei din operator intrerupator, PHP începe să execute instrucțiuni. PHP continuă să execute instrucțiuni până la sfârșitul blocului intrerupator sau până întâlnește operatorul pauză. Dacă nu scrieți declarația pauză la sfârșitul unei secțiuni de caz, PHP va continua să execute comenzile din următoarea secțiune de caz. De exemplu:

În acest exemplu, dacă $i este 0, atunci PHP va executa toate ecourile! Dacă $i este 1, PHP va executa ultimele două instrucțiuni echo. Veți obține comportamentul așteptat al operatorului (va fi afișat „i egal cu 2”) dacă $i este egal cu 2. Deci, este important să nu uitați de operatori pauză(deși poate doriți să evitați utilizarea prevăzută în anumite circumstanțe).

În operator intrerupator expresia este evaluată o dată și acest rezultat este comparat cu fiecare enunț caz. În exprimare elseif, expresia este evaluată din nou. Dacă starea dvs. este mai complexă decât o simplă comparație și/sau este într-o buclă, constructul intrerupator poate lucra mai repede.

Lista de instrucțiuni de executat într-o secțiune de caz poate fi, de asemenea, goală, ceea ce pur și simplu transferă controlul listei de instrucțiuni din secțiunea de caz următoare.

Un tip special de construcție a carcasei este Mod implicit. Controlul vine aici când niciuna dintre celelalte declarații de caz nu a funcționat. De exemplu.