PHP: Operatori logici - Manual. Operatori condiționali PHP if, switch și operator ternar Operatorii logici PHP includ

PHP acceptă operatorii logici standard AND și &&, SAU și || , ! (nu) și XOR . Operatorii logici vă permit să comparați rezultatele a doi operanzi (o valoare sau o expresie) pentru a determina dacă unul sau ambii returnează adevărat sau fals și să alegeți dacă doriți să continuați executarea scriptului în funcție de valoarea returnată. La fel ca operatorii de comparație, operatorii logici returnează o singură valoare booleană - adevărată sau falsă, în funcție de valorile de ambele părți ale operatorului.

SAU logic (SAU și ||)

Operatorul logic SAU este notat ca SAU sau || . Efectuează o operație OR logică pe doi operanzi. Dacă unul sau ambii operanzi sunt adevărati, returnează adevărat. Dacă ambii operanzi sunt false, returnează false. Probabil ai o întrebare: de ce au făcut două versiuni ale unui operator? Ideea celor două variante diferite ale operatorului SAU logic este că acestea operează cu priorități diferite.

Mai întâi, să vedem cum funcționează operatorul ||. . Și astfel, dacă unul sau ambii operanzi ai săi sunt adevărati, returnează true . Dacă ambii operanzi returnează valori false, va returna false .

Operatorul SAU funcționează la fel ca operatorul ||. cu o singură excepție, dacă operatorul OR este folosit cu o atribuire, va evalua mai întâi și va returna valoarea operandului din stânga, altfel funcționează exact la fel ca operatorul ||. , adică dacă unul sau ambii operanzi ai săi sunt adevărati, returnează true . Dacă ambii operanzi returnează false, va returna false .

Pentru a clarifica modul în care funcționează, să dăm următorul exemplu:

1 // Mai întâi variabilei i se atribuie valoarea false, iar apoi se evaluează al doilea operand // Acțiune prioritară: ($var2 = false) sau adevărat $var2 = fals sau adevărat; echo $var2; // false nu este tipărit // ($var3 = 0) sau 3 $var3 = 0 sau 3; ecou"
$var3"; // => 0 ?>

Orice comparație și operatori logici pot fi combinați în structuri mai complexe:

Mai există un punct important care merită menționat atât în ​​ceea ce privește operatorii OR, cât și ||. . Operatorul logic OR își începe evaluarea cu operandul său din stânga; dacă returnează adevărat, atunci operandul din dreapta nu va fi evaluat. Acest lucru economisește timp de execuție, dar trebuie avut grijă să se asigure că codul de care poate depinde funcționarea corectă a programului nu este plasat în operandul din dreapta.

ȘI logic (ȘI și &&)

Operatorul logic AND este notat cu AND sau && . Efectuează o operație AND logică pe doi operanzi. Returnează adevărat dacă și numai dacă ambii operanzi se evaluează la adevărat. Dacă unul sau ambii operanzi returnează false , operatorul returnează false . Semnificația celor două versiuni diferite ale operatorului „ȘI logic” este aceeași cu a celor doi operatori anteriori, și anume că aceștia lucrează cu priorități diferite.

Mai întâi, să vedem cum funcționează operatorul &&. Și astfel, dacă ambii operanzi ai săi sunt adevărati, returnează true . Dacă cel puțin unul sau ambii operanzi ai săi returnează false , va returna și false .

Operatorul AND funcționează la fel ca și operatorul && cu o excepție, dacă operatorul AND este utilizat cu o atribuire, va evalua mai întâi și va returna valoarea operandului din stânga, altfel funcționează exact la fel ca și operatorul &&. Dacă cel puțin unul dintre operanzii săi returnează false, va returna și false, iar dacă ambii operanzi returnează false, va returna false.

Pentru a înțelege, să ne uităm acum la cum funcționează acest lucru în practică:

$bar3"; // => 9 ?>

SAU exclusiv (XOR)

Operatorul SAU exclusiv este notat XOR. Returnează adevărat dacă unul și numai unul dintre operanzii săi este adevărat. Dacă ambii operanzi sunt adevărati, operatorul va returna false.

Deoarece operatorul XOR are aceeași prioritate ca și operatorii AND și SAU (mai mic decât operatorul de atribuire) și este utilizat într-o expresie de atribuire, mai întâi evaluează și returnează valoarea operandului din stânga.

6 $a1 = 19 xor 5 > 6; var_dump($a1); // => 19 var_dump(true xor true); // false var_dump((2< 3) xor (5 != 5)); // true ?>

NU logic (!)

Operatorul logic NOT, numit și negație, este indicat prin semn! . Este un operator unar plasat înaintea unui singur operand. Operatorul logic NOT este folosit pentru a inversa valoarea logică a operandului său și returnează întotdeauna adevărat sau fals.

Dacă trebuie să inversați valoarea unei expresii, cum ar fi a && b , va trebui să utilizați paranteze: !(a && b) . Tot cu ajutorul unui operator! Puteți converti orice valoare x în echivalentul său boolean folosind operatorul: !!x de două ori.


Principalul lucru în acțiunea acestui operator este condiția. dacă este tradus din engleză înseamnă Dacă. Condiția este acceptată ca argument (ce este în paranteze). Condiția poate fi o expresie logică sau o variabilă logică. Pentru a spune simplu, sensul expresiei va fi următorul:

Dacă (condiție)(
condiția este îndeplinită, faceți asta
}
altfel
{
condiția nu este îndeplinită, fă-o altfel
}
Sper că logica operațiunii condiționate este clară. Acum să ne uităm la un exemplu.

$a = 5;
$b = 25;

// Acum atenție! Condiție: Dacă $b este mai mare decât $a
// Semne > și< , как и в математике, обозначают больше и меньше
dacă($b > $a)
{
// dacă condiția este îndeplinită, atunci efectuați această acțiune
echo „$b este mai mare decât $a”;
}
altfel
{
// dacă nu este executat, atunci acesta
echo "$a este mai mare sau egal cu $b";
}
?>
Demonstrație Descărcați surse
Ca rezultat, scriptul va ieși 25 mai mult de 5. Exemplul este destul de simplu. Sper că totul este clar. Acum îmi propun să luăm în considerare o situație mai complicată, în care trebuie îndeplinite mai multe condiții. Fiecare condiție nouă va conține după condiția principală dacă()- auxiliar, care se scrie ca altfel daca(). Până la urmă va fi ca de obicei altfel.

Sarcină: Testarea se face la școală. Scenariul trebuie să calculeze punctajul, cunoscând condițiile pentru obținerea fiecărei note și punctajul elevului în sine. Să vedem cum să scriem asta și nu uitați să citiți comentariul.

$test = 82; // să presupunem că un elev a scris un test cu 82 de puncte

// scrie prima condiție pentru cinci
if($test > 90)
{
// dacă condiția este îndeplinită, atunci efectuați această acțiune.
ecou „Evaluare 5”;
}
// Semnul && înseamnă „și, unire”, că condiția este îndeplinită dacă ambele sunt adevărate
// adică scorul este mai mic de 91 și mai mare de 80, apoi 4. În caz contrar, condițiile se citesc mai departe
else if ($test< 91 && $test > 80)
{
ecou „Evaluare 4”;
}
else if ($test< 81 && $test > 70)
{
ecou „Evaluare 3”;
}
altfel
{
echo „Ar trebui să scriem din nou testul...”;
}
?>
Demonstrație Descărcați surse
Elevul nostru care are timp atât să se odihnească, cât și să scrie un test normal primește nota 4! Sper că principiul de funcționare este clar.

De asemenea, este posibil să înregistrați pe scurt funcționarea unei operații condiționate, atunci când aveți nevoie de o acțiune numai dacă condiția este îndeplinită.

$varsta = 19; // variabil cu vârsta

Dacă ($ vârstă > 17)(
echo "Asta este! Pot face ce vreau! Am deja $age!";
}
Un exemplu destul de frumos de notare scurtă a unei operații condiționate. altfel nu este necesar sa scrii.

Operatori de comparație în PHP

Principiul de funcționare a unei operațiuni condiționate este clar. Dar, după cum înțelegeți, există multe alte moduri de a compara. Să ne uităm la tabelul de mai jos cu operatori de comparație.

Exemplu Nume Rezultat
$a == $b Este adevărat dacă $a este egal cu $b
$a === $b Identic cu adevărat dacă $a este egal cu $b și ambele variabile sunt de același tip
$a != $b Nu este egal cu Adevărat dacă $a nu este egal cu $b
$a === $b Nu este identic cu Adevărat dacă $a nu este egal cu $b și ambele tipuri nu sunt aceleași
$a > $b Mai mare decât Adevărat dacă $a este mai mare decât $b
$a< $b Меньше чем True, если $a меньше, чем $b
$a >= $b Mai mare sau egal cu Adevărat dacă $a este mai mare sau egal cu $b
$a<= $b Меньше или равно True, если $a меньше или равно $b
Acum să ne uităm la operatori cu exemple:

// contrar obiceiului = înseamnă atribuirea unei valori unei variabile, iar == este egal
dacă ($a == 5)(
echo „$a este 5”; // va imprima "5 este egal cu 5"
) altfel (
echo "$a nu este egal cu 5";
}

Dacă ($a != 6)(
echo "$a nu este egal cu 6"; // va tipări „5 nu este egal cu 6”. Necesar în caz de negare
) altfel (
echo "$a cumva este egal cu 6";
}

// cu mai mult și mai puțin cred că totul este clar. Prin urmare, exemplul este mai complicat
dacă ($a<= 6){
echo "$a este mai mic sau egal cu 6"; // va imprima "5 este mai mic sau egal cu 6"
) altfel (
echo „$a este mai mare decât 6”;
}

Operatori logici PHP

Există momente când trebuie să comparați nu o variabilă, ci două sau mai multe deodată într-o singură condiție. Pentru asta există operatori logici.

Exemplu Nume Rezultat
$a și $b logic „și” ADEVĂRAT dacă ambele $a și $b sunt ADEVĂRAT.
$a sau $b logic „sau” TRUE dacă $a sau $b este ADEVĂRAT.
$a xor $b Exclusiv „sau” TRUE dacă $a sau $b este ADEVĂRAT, dar nu ambele.
! $a Negația lui TRUE dacă $a nu este TRUE.
$a && $b logic „și” ADEVĂRAT dacă atât $a, cât și $b sunt ADEVĂRAT.
$a || $b Boolean „sau” TRUE dacă $a sau $b este TRUE.
Am observat deja că pentru operațiuni ȘiȘi sau exista operatori suplimentari? Acest lucru se face pentru a prioritiza operațiunile complexe de comparație. În tabel, operatorii logici sunt listați în ordinea priorității: de la cel mai mic la cel mai mare, adică, de exemplu, || are prioritate mai mare decât sau.

Sa trecem peste la exemple

$a = 5;
$b = 6;
$c = 7;

// condiție: dacă 5 nu este egal cu 6 (ADEVĂRAT) ȘI 6 nu este egal cu 7 (adevărat)
dacă ($a< 6 && $b != $c){
ecou „Într-adevăr așa!”; // va imprima „Într-adevăr așa!” deoarece AMBELE condiții sunt ADEVĂRATĂ
) altfel (
echo „Una dintre condiții nu este adevărată”;
}

// condiție: dacă 6 nu este egal cu 6 (FALSE) SAU 6 nu este egal cu 7 (adevărat)
dacă ($b != 6 || $b != $c)(
echo "Asta este!"; // va afișa „Asta e!”, deoarece cel puțin UNA dintre condiții este ADEVĂRATĂ
) altfel (
echo „Ambele condiții sunt false”;
}

Operator ternar

Vă sugerez să reveniți la problema codului ternar mai târziu. Nu m-am putut abține să nu menționez asta, deoarece este un design important care reduce semnificativ dimensiunea codului. Vă sugerez să vă uitați imediat la cod.

Esenta codului:(condiție) ? valoarea lui a if true: valoarea a if false

Astfel, scurtăm declarația if. Cu toate acestea, această operație este valabilă numai atunci când se atribuie valori unei variabile. Acum să ne uităm la un exemplu terminat.

// Exemplu de utilizare a operatorului ternar
$settings = (gol ($_POST["settings"])) ? „Implicit” : $_POST[„setări”];

// Codul de mai sus este similar cu următorul bloc folosind if/else
dacă (gol ($_POST[„setări”])) (
$settings = „Implicit”; // Dacă nu se transferă nimic, lăsați-l ca „Implicit”
) altfel (
$settings = $_POST["setari"]; // Dacă este trecut, atunci $settings i se atribuie valoarea transmisă.
}
?>
Citiți comentariile la cod și totul ar trebui să fie clar.

Vă mulțumim pentru atenție!


Cele două declarații principale care oferă structuri de ramificare condiționată sunt if și switch. Cea mai utilizată declarație if este folosită în structurile de salt condiționat. Pe de altă parte, în anumite situații, mai ales dacă trebuie să navigați printr-una dintre numeroasele ramuri în funcție de valoarea unei singure expresii, iar utilizarea unui număr de instrucțiuni if ​​duce la un cod mai complex, instrucțiunea switch devine mai convenabilă. .

Înainte de a studia acești operatori, trebuie să înțelegeți expresiile și operațiile logice.

Operații logice

Operațiile logice vă permit să combinați valori logice (numite și valori de adevăr) pentru a produce noi valori logice. După cum se arată în tabelul de mai jos, PHP acceptă operatori logici standard (și, sau, nu și xor), primii doi având versiuni alternative.

Operații logice PHP
Operațiune Descriere
și O operație al cărei rezultat este adevărat dacă și numai dacă ambii operanzi ai săi sunt adevărati
sau O operație al cărei rezultat este adevărat dacă unul dintre operanzii săi (sau ambii operanzi) este adevărat
! O operație al cărei rezultat este adevărat dacă singurul său operand (dat în dreapta semnului operației) este fals și fals dacă operandul său este adevărat
xor O operație al cărei rezultat este adevărat dacă oricare dintre operanzii săi (dar nu ambii) este adevărat
&& La fel ca și operatorul și, dar își leagă operanzii mai strâns decât acest operator
|| La fel ca și operatorul sau, dar își leagă operanzii mai strâns decât acest operator

Operațiuni && și || ar trebui să fie familiar programatorilor C. Operație! este de obicei numit nu pentru că devine negația operandului căruia i se aplică.

Pentru a testa dacă ambii operanzi sunt adevărați, utilizați operatorul AND, care poate fi scris și sub formă de ampersand dublu (&&). Atât operatorii AND, cât și && sunt operatori logici; singura diferență este că operatorul && are o prioritate mai mare decât operatorul AND. Același lucru este valabil și pentru operatorii OR și ||. Operatorul AND returnează TRUE numai dacă ambii operanzi sunt TRUE; în caz contrar, este returnat FALSE.

Pentru a verifica dacă cel puțin un operand este TRUE, utilizați operatorul OR, care poate fi scris și ca o linie verticală dublă (||). Acest operator returnează TRUE dacă cel puțin unul dintre operanzii săi este TRUE.

Când utilizați operatorul SAU într-un program, pot apărea erori logice subtile. Dacă PHP detectează că primul operand este TRUE, nu va evalua valoarea celui de-al doilea operand. Acest lucru economisește timp de execuție, dar trebuie să aveți grijă să vă asigurați că codul de care programul depinde pentru a rula corect nu este plasat în al doilea operand.

Operatorul XOR vă permite să verificați dacă doar unul dintre operanzi (dar nu ambii) este ADEVĂRAT. Acest operator returnează TRUE dacă unul și numai unul dintre operanzii săi este TRUE. Dacă ambii operanzi sunt TRUE, operatorul va returna FALSE.

Puteți inversa o valoare logică folosind operatorul NOT, care este adesea scris ca semn de exclamare (!). Returnează TRUE dacă operandul este FALSE și FALSE dacă operandul este TRUE.

Tabelul de mai jos prezintă câteva expresii logice si rezultatele lor:

Operații de comparație

Tabelul de mai jos prezintă operațiuni de comparare care pot fi utilizate fie cu numere, fie cu șiruri de caractere:

Operații de comparație
Operațiune Nume Descriere
== Egal O operație al cărei rezultat este adevărat dacă operanzii săi sunt egali și falși în caz contrar
!= Nu este egal O operație al cărei rezultat este fals dacă operanzii săi sunt egali și adevărati în caz contrar
< Mai puțin O operație al cărei rezultat este adevărat dacă operandul din stânga este mai mic decât operandul din dreapta și fals în caz contrar
> Mai mult O operație al cărei rezultat este adevărat dacă operandul din stânga este mai mare decât operandul din dreapta și fals în caz contrar
<= Mai puțin sau egal O operație al cărei rezultat este adevărat dacă operandul din stânga este mai mic sau egal cu operandul din dreapta și fals în caz contrar
>= Mai mult sau egal O operație al cărei rezultat este adevărat dacă operandul din stânga este mai mare sau egal cu operandul din dreapta și fals în caz contrar
=== Identic O operație al cărei rezultat este adevărat dacă ambii operanzi sunt egali și de același tip și fals în caz contrar

O greșeală foarte frecventă pe care trebuie să o faceți este să nu confundați operatorul de atribuire (=) cu operatorul de comparație (==).

Prioritate de operare

Desigur, nu ar trebui să folosim în exces un stil de programare în care succesiunea operațiilor este determinată în principal de utilizarea regulilor de precedență, deoarece codul scris în acest stil este greu de înțeles pentru cei care îl studiază ulterior, dar trebuie remarcat că comparația operațiunile au prioritate mai mare decât operațiunile logice. Aceasta înseamnă că o declarație cu o expresie de verificare ca cea de mai jos

Cod PHP $var1 = 14; $var2 = 15; dacă (($var1< $var2) && ($var2 < 20)) echo "$var2 больше $var1 но меньше 20";

poate fi rescris ca

Cod PHP ...dacă ($var1< $var2 && $var2 < 20) ...

declarație dacă-altfel

Instrucțiuni dacă permite executarea unui bloc de cod dacă expresia condiționată din această instrucțiune evaluează la TRUE; altfel blocul de cod nu este executat. Orice expresie poate fi folosită ca condiție, inclusiv teste pentru valoare diferită de zero, egalitate, NULL care implică variabile și valori returnate de funcții.

Nu contează ce condiționale individuale alcătuiesc propoziția condiționată. Dacă condiția este adevărată, se execută codul programului cuprins între acolade (()). În caz contrar, PHP îl ignoră și trece la verificarea a doua condiție, verificând toate condiționalele pe care le-ai notat până când atinge instrucțiunea altfel, după care va executa automat acest bloc. Declarația else este opțională.

Sintaxa instrucțiunii if este:

If (expresie condiționată) (bloc de cod de program;)

Dacă rezultatul evaluării unei expresii condiționate este TRUE, atunci blocul de cod de program situat după acesta va fi executat. În exemplul următor, dacă $username este setat la „Admin”, va fi afișat un mesaj de bun venit. Altfel nu se va întâmpla nimic:

Cod PHP $username = "Administrator"; if ($nume utilizator == „Admin”) ( echo „Bine ați venit pe pagina de administrator.”; )

Dacă un bloc de cod de program conține o singură instrucțiune, atunci acoladele sunt opționale, totuși, este un obicei bun să le folosiți întotdeauna, deoarece fac codul mai ușor de citit și editat.

Instrucțiunea opțională else este un bloc de cod care este executat implicit atunci când expresia condiționată este evaluată la FALSE. Declarația else nu poate fi folosită separat de instrucțiunea if deoarece else nu are propria sa expresie condiționată. Adică, altfel și dacă ar trebui să fie întotdeauna împreună în codul tău:

declarații if și else $nume utilizator = „fără administrator”; if ($username == „Admin”) ( echo „Bine ați venit la pagina de administrator.”; ) else ( echo „Bine ați venit pe pagina de utilizator.”; )

Nu uitați să închideți un bloc de cod într-o instrucțiune if cu o acoladă dacă puneți o acoladă la începutul blocului. Blocul else trebuie să aibă și bretele de deschidere și de închidere, la fel ca și blocul if.

Toate acestea sunt bune, cu excepția cazului în care trebuie să verificați mai multe condiții la rând. Instrucțiunile sunt potrivite pentru aceasta elseif. Permite testarea unor condiții suplimentare până când este găsit adevărat sau până când se ajunge la blocul else. Fiecare instrucțiune elseif are propriul bloc de cod plasat imediat după expresia condiționată a instrucțiunii elseif. Declarația elseif vine după instrucțiunea if și înaintea instrucțiunii else, dacă există.

Sintaxa instrucțiunii elseif este puțin mai complicată, dar următorul exemplu vă va ajuta să o înțelegeți:

Verificarea mai multor condiții $username = "Invitat"; if ($username == „Admin”) ( echo „Bine ați venit pe pagina de administrator.”; ) elseif ($username == „Invitat”) ( echo „Vizualizarea nu este disponibilă.”; ) else ( echo „Bine ați venit pe pagină utilizator."; )

Aici sunt verificate două condiții și, în funcție de valoarea variabilei $username, sunt efectuate diferite acțiuni. Și mai există o oportunitate de a face ceva dacă valoarea variabilei diferă de primele două.

Operator ternar?:

Operatorul ?: este un operator ternar (ternar) care ia trei operanzi. Funcționează similar cu o instrucțiune if, dar returnează valoarea uneia dintre cele două expresii. Expresia care va fi evaluată este determinată de expresia condiționată. Colonul (:) servește ca separator de expresii:

(condiție) ? evaluate_if_condition_true: evaluate_if_condition_false;

Exemplul de mai jos verifică o valoare și returnează șiruri de caractere diferite, în funcție de faptul că este TRUE sau FALSE:

Crearea unui mesaj folosind operatorul ?: $logged_in = ADEVĂRAT; $user = "Igor"; $banner = (!$logged_in) ? "Inregistreaza-te!" : "Bine ai revenit, $user!"; echo $banner;

Este destul de evident că afirmația de mai sus este echivalentă cu următoarea afirmație:

Cod PHP $logged_in = ADEVĂRAT; $user = "Igor"; if (!$logged_in) ( $banner = "Înregistrați-vă!"; ) else ( $banner = "Bine ați revenit, $utilizator!"; ) echo $banner;

declarație switch

Instrucțiuni intrerupator compară o expresie cu mai multe valori. De regulă, o variabilă este folosită ca expresie, în funcție de valoarea căreia trebuie executat un anumit bloc de cod. De exemplu, imaginați-vă o variabilă $acțiune care poate avea valorile „ADD”, „MODIFY” (modificare) și „DELETE” (ștergere). Declarația switch facilitează definirea blocului de cod care ar trebui să fie executat pentru fiecare dintre aceste valori.

Pentru a arăta diferența dintre instrucțiunile if și switch, să testăm o variabilă cu mai multe valori. Exemplul de mai jos arată codul programului care implementează o astfel de verificare pe baza instrucțiunii if, iar în exemplul următor, pe baza instrucțiunii switch:

Testarea împotriva uneia dintre mai multe valori (instrucțiunea dacă) if ($action == „ADD”) ( echo „Efectuați o adăugare.”; echo „Numărul de instrucțiuni din fiecare bloc este nelimitat.”; ) elseif ($action == „MODIFY”) ( echo „Efectuați o modificare ."; ) elseif ($action == "DELETE") ( echo "Efectuați ștergerea."; ) Testarea împotriva uneia dintre mai multe valori (instrucțiunea de comutare) comutator ($acțiune) (case „ADD”: echo „Efectuați o adăugare.”; echo „Numărul de instrucțiuni din fiecare bloc este nelimitat.”; break; case „MODIFY”: echo „Efectuați o modificare.”; break; case "DELETE": ecou "Efectuați ștergerea."; pauză; )

Declarația switch ia valoarea de lângă cuvântul cheie switch și începe să o compare cu toate valorile de lângă cuvintele cheie caz, în ordinea locației lor în program. Dacă nu se găsește o potrivire, niciunul dintre blocuri nu este executat. Odată ce este găsită o potrivire, blocul de cod corespunzător este executat. Blocurile de cod de mai jos sunt de asemenea executate - până la sfârșitul instrucțiunii switch sau până la cuvânt cheie pauză. Acest lucru este convenabil pentru organizarea unui proces constând din mai multe etape succesive. Dacă utilizatorul a parcurs deja unii pași, va putea continua procesul de unde a plecat.

Expresia de lângă instrucțiunea switch trebuie să returneze o valoare de tip primitiv, cum ar fi un număr sau șir. O matrice poate fi folosită doar ca element separat care are o valoare de tip elementar.

Selecția implicită

Dacă valoarea expresiei condiționale nu se potrivește cu niciuna dintre opțiunile propuse în instrucțiunile case, instrucțiunea switch în acest caz vă permite să faceți ceva, la fel ca instrucțiunea else a construcției if, elseif, else. Pentru a face acest lucru, trebuie să faceți o instrucțiune ca ultima opțiune din lista de selecție Mod implicit:

Crearea unui mesaj de eroare utilizând instrucțiunea implicită $action = "ELIMINARE"; comutator ($acțiune) (case „ADD”: echo „Efectuați o adăugare.”; echo „Numărul de instrucțiuni din fiecare bloc este nelimitat.”; break; case „MODIFY”: echo „Efectuați o modificare.”; break; case „DELETE”: echo „Efectuați ștergerea.”; break; default: echo „Eroare: comanda $action nu este permisă, „. „se pot folosi doar comenzile ADD, MODIFY și DELETE.”; )

În plus față de cea obișnuită, instrucțiunea switch acceptă o sintaxă alternativă - o construcție de cuvinte cheie întrerupător/întrerupător de capăt, definind începutul și sfârșitul declarației în loc de acolade:

Declarația switch se termină cu cuvântul cheie endswitch comutator ($acțiune): case "ADD": echo "Efectuați adăugarea."; echo „Numărul de instrucțiuni din fiecare bloc este nelimitat.”; pauză; case „MODIFY”: echo „Efectuați modificarea.”; pauză; case „DELETE”: echo „Efectuați ștergerea.”; pauză; implicit: echo „Eroare: comanda $action nu este validă,”. „Pot fi folosite doar comenzile ADD, MODIFY și DELETE.”; întrerupător de capăt;

Întrerupeți execuția

Dacă urmează să fie executat doar un bloc de cod corespunzător unei anumite valori, atunci cuvântul cheie break ar trebui să fie inserat la sfârșitul acelui bloc. Când interpretul PHP întâlnește cuvântul cheie break, va continua să execute linia după acolada de închidere a instrucțiunii switch (sau cuvântul cheie endswitch). Dar dacă nu utilizați instrucțiunea break, atunci verificarea continuă în ramurile de caz ulterioare ale constructului switch. Mai jos este un exemplu:

Ce se întâmplă când nu există declarații de pauză $action="COMANDA DE ASSEMBLARE"; comutator ($acțiune) ( caz „Asamblare ORDINE”: echo „Asamblare ordine.
"; case "PACHET": echo "Pachet.
"; case "SHIP": echo "Livrare clientului.
"; }

Dacă variabila $action este setată la „ASSEMBLE ORDER”, rezultatul acestui fragment va fi următorul:

Colectați comanda. Pentru a încheia. Livrați clientului.

Presupunând că etapa de construire a fost deja finalizată și variabila $action este setată la „PACCHET”, se va obține următorul rezultat:

Pentru a încheia. Livrați clientului.

Uneori, a nu avea o instrucțiune break este utilă, ca în exemplul de mai sus în care se formează etapele de ordine, dar în majoritatea cazurilor ar trebui folosită această instrucțiune.

Tipuri de date Cicluri 1 2 3 4 5 6 7 8 9 10

>> Am citit câteva dintre aceste răspunsuri și, sincer, nu am găsit unul care să explice diferențele dintre operatorii „||” și „SAU”.

Diferența este explicată în linkul către prioritatea operatorului.

„ ||” operatorii sunt evaluați înainte de atribuire ("="), în timp ce operatorii "sau" sunt evaluați după atribuire. În cel de-al doilea exemplu, îi spuneți PHP să atribuie mai întâi rezultatul „(choice1 != false ? „hah” : „boo”)” lui $val, apoi „sau” împotriva restului declarației. Încercați exemplul de mai jos și veți vedea ce vreau să spun (rețineți parantezele suplimentare pentru a impune prioritate):

define („alegerea1” , fals );
definesc („alegerea2”, „câine”);
define („implicit1”, „altul”);
$val = matrice();

$val [ "Test 1" ] = (alegere1 != fals ? "hah" : "boo" ) || (choice2 != false ? "hah2" : "boo2" ) || (implicit1 != false ? "hah3" : "boo3" );
$val [ "Testul 1b" ] = ((alegerea1 != fals ? "hah" : "boo" ) || (alegerea2 != fals ? "hah2" : "boo2" ) || (implicit1 != fals ? "hah3" " : "boo3" ));
$val [ "Testul 2" ] = (alegere1 != fals ? "hah" : "boo" ) sau (alegere2 != fals ? "hah2" : "boo2" ) sau (implicit1 != fals ? "hah3" : " boo3");
$val [ "Test 2b" ] = ((alegerea1 != fals ? "hah" : "boo" ) sau (alegere2 != fals ? "hah2" : "boo2" ) sau (implicit1 != fals ? "hah3" : "boo3" ));

Foreach ($val ca $test => $rezultat) (
print("$test: "); var_dump ($rezultat); imprimare "
\n
\n" ;
}
?>

test la hto dot com

Deoarece prescurtarea OR pentru un bloc if poate produce mai mult
cod citibil cu mai puțină tastare, este tentant să se producă funcții care vor returna FALSE la eșec sau un alt tip de date la succes. La fel ca mysql_connect, care „returnează un identificator de legătură MySQL la succes sau FALSE la eșec”.

Dezvoltatorul php php începător ar trebui să evite crearea de funcții care ar putea produce un FALSE la eșec și un întreg la succes, dacă există vreo șansă ca întregul să fie zero.

bla bla bla;
$i = da-mi_libertate () sau die("EROARE FATAL DB!" );
bla bla bla;
?>

ironmo67 la yahoo dot com

Am descoperit o diferență oarecum enervantă între PHP și Perl:


if (! some_function ()) returnează false ;
?>

nu poate fi rescris ca fiind cel mai frumos:

function some_function ()( returneaza fals ; )
some_function () sau returnează false ;
?>

Următoarele vor funcționa însă:

function some_function ()( returneaza fals ; )
some_function() sau die();
?>

Poți ghici de ce? Pur și simplu, die() este o funcție, iar „return” este o declarație (cum ar fi diferența dintre print() și echo). Acest lucru este foarte rău pentru că mi se pare că versiunea if(!)() este obosită și imposibil de citit, dar hei, este mai bună decât if (some_c_function == 0) (fă ceva).

O mare parte din discuția de mai jos ar fi putut fi evitată pur și simplu clarând că &, | și ^ sunt *nu* operatori logici. De aceea nu sunt enumerate pe această pagină. Sunt operatori care acționează asupra reprezentărilor binare ale numerelor. Ei nu iau valori logice (adică „adevărat” sau „fals”) ca argumente fără a le converti mai întâi în numerele 1 și respectiv 0. Nici nu returnează. valori logice, dar numere. Sigur, puteți trata ulterior acele numere ca și cum ar fi valori logice (caz în care 0 este transformat în „fals” și orice altceva este transformat în „adevărat”), dar aceasta este o consecință a Regulile de turnare de tip PHP și nimic de-a face cu comportamentul operatorilor.

Dacă doriți operații logice, utilizați operatori logici; dacă doriți operații pe biți, utilizați operatori pe biți... folosirea unuia pentru celălalt pare o modalitate bună de a îngreuna lucrurile.

kws_ la hotpop dot com

„Doar pentru că poți, nu înseamnă că ar trebui.”

De asemenea, simt că eludarea evaluării scurt-circuitului și bazarea pe efectele secundare în expresiile condiționate înseamnă un stil prost. Scrierea unui cod care se documentează folosind constructe clare și directe mi se pare o practică mult mai bună decât folosirea unei expresii complicate și greu de citit și explicarea cu comentarii (sau, mai rău încă, fără documentarea deloc!). Într-adevăr, codul sursă ar trebui să fie scris pentru ochii programatorului mai mult decât pentru ochii computerului.

Utilizarea operatorilor pe biți într-un context logic ar putea încălca așteptările cititorului și poate crea confuzie deoarece operatorii pe biți implică operanzi pe câmp de biți.

De asemenea, simt că asumarea că evaluarea scurtcircuitului este cea mai bună pentru constructele logice ESTE în „drepturile” compilatorului, deoarece atunci când operatorii logici sunt utilizați în scopul lor, ipotezele că scurtcircuitarea face ca *SUNT* logice și nu (din nou, atunci când este folosit corect) optimizați evaluarea expresiilor logice.

Nu intenția mea este să aprind sau să insult în mod direct pe orice individ, ci doar să descurajez folosirea unui stil slab și să încurajez programatorii noi (și chiar unii cu experiență) să scrie cod clar și pronunțat și să se gândească la programatori, mai degrabă decât la computere care ar putea ajunge să încerce să-ți descifreze creațiile.

Ca răspuns la braintreno:

Al doilea exemplu pe care l-ai adus este modul corect de a face asta! Nu este deloc o logică încurcată, este ceea ce face codul tău ușor de citit, prin faptul că nu te bazezi pe efecte secundare obscure!! Este mult mai ușor de citit decât primul și este mult mai ușor de întreținut.

Pentru ideea de a lăsa o funcție CheckThisOrOther() să ecou informații la utilizatorul singur, ar trebui să fii deposedat de licența de codare. Dacă ar trebui vreodată să păstrez unul dintre scenariile tale, ar trebui să te urăsc.

Acest lucru nu este atât de aprins pe cât ar putea suna! Codul sursă nu este scris pentru ca computere să-l execute, ci pentru ca codori să-l citească! Păstrează asta la inimă și colegii tăi îți vor mulțumi pentru asta!

braintrino

Postarea lui Shadedecho de a forța evaluarea ambelor expresii SAU este de fapt exact ceea ce ar trebui făcut pentru a suprima optimizarea scurtcircuitului.

Sunt multe ocazii în care nu doriți ca compilatorul să scurtcircuiteze orice evaluare, mai ales când doriți să faceți o situație și/sau. Evaluarea scurtcircuitului face o operație SAU, dar nu o operație SI/SAU!!!

De exemplu, dacă vreau să verific formularul de interogare al utilizatorului pentru a vedea dacă utilizatorul a ratat răspunsul la vreo intrare ȘI/SAU dacă utilizatorul a duplicat același răspuns pentru mai multe intrări, atunci trebuie să trimit formularul înapoi clientului informând ceea ce vreau să fie corectat.

Funcția SomeAnswersAreMissing()
{
...
echo „Hopa! Ai ratat să răspunzi la câteva întrebări.”;
returnează TRUE;
}

Funcția SomeAnswersAreDuplicated()
{
...
echo „Hopa! Puteți răspunde la ambele în același mod.”;
returnează TRUE;
}

Dacă (Lipsesc unele răspunsuri() || SomeAnswersAreDuplicated())
SendFormAgain();

Dacă fac asta, utilizatorul va vedea doar avertismentul de răspuns lipsă, dar nu și avertismentul de răspuns duplicat, chiar dacă ambele sunt adevărate. Acest lucru nu este informativ pentru utilizator, deoarece el/ea va trebui să trimită din nou formularul de două ori înainte să-și dea seama de tot ce a făcut greșit și să frustreze hack-ul din ei. Nu este ușor de utilizat.

Dacă (Lipsesc unele răspunsuri() | SomeAnswersAreDuplicated())
SendFormAgain();

Apoi ambele mesaje de avertizare sunt trimise în același timp, iar utilizatorul le poate corecta într-o singură retrimitere.

Mulțumesc lui shadedecho, am căutat o modalitate de a anula optimizarea stupidă de scurtcircuit a compilatorului. Computerul nu poate să presupună că scurtcircuitarea este cea mai bună:(

BTW, desigur că poți face:

$tu_ai facut_o_greala = false;

Dacă(Lipsesc unele răspunsuri())

dacă (SomeAnswersAreDuplicated())
$tu_ai facut_o_greala = adevarat;

Dacă ($ai făcut_o_greșeală)
SendFormAgain();

Dar asta e o logica complicata!!!

hop

Dragă începător,

(deoarece nu văd astfel de idei care apar în mintea programatorilor cu experiență...)

Vă rugăm să nu acordați atenție postării lui shadedecho din 14-mar-2003 04:02! El se bazează foarte mult pe efecte secundare obscure, ceea ce nu este doar o practică de programare foarte proastă, dar nici nu realizează optimizarea pe care crede că este.

Modul corect de a face acest lucru


eco $a;
}

Lucrul așa cum dorește shadedecho este (deși exemplul în ansamblu este destul de inadecvat):

$a .= bla();
$a .= blah2();

Dacă ($a) ( ecou $a; )

Dacă citiți discuția către care vă trimite, veți descoperi că își dorea cu adevărat să obțină toate intrările distincte din două tabele db diferite. Chiar și acolo se înșală. Modul corect de a face acest lucru este să procesați primul tabel și apoi să procesați al doilea tabel.
Aceasta nu numai că este mult mai lizibilă decât soluția cu „|”, dar nu este deloc mai lent.

shadedecho

Se pare (după multe căutări și discuții frustrante, dar în cele din urmă utile pe forumuri precum tek-tips) că
|| iar && sunt „scurtcircuitate” după cum sa observat anterior, DAR | și operatorii & (documentați de PHP ca operatori pe biți) se comportă ca contrapartidele lor nescurtcircuitate, respectiv.

Funcția bla () (
ecou „bună ziua< br>";
intoarce "de la bla ()< br>";
}

Funcția blah2() (
ecou "lume\< br>";
întoarcere "de la blah2()< br>";
}

Dacă (($a .= blah()) || ($a .= blah2())) (
eco $a;
}

Acest lucru ar avea ca rezultat următorul rezultat:

Buna ziua
din bla ()

Observați că „lumea” „nu a primit ecou”d și „de la blah2()” nu „a primit concat”d în$a variabilă, deoarece prima atribuire către $a a avut succes, astfel încât „scurtcircutarea” începe și testul boolean se termină fără a evalua restul.

CU toate acestea, dacă înlocuiți || cu doar | în acea instrucțiune „dacă”, obțineți rezultatul:

Buna ziua
lume
din bla ()
din blah2()

Eureka! toate părțile testului boolean sunt evaluate, în modul așteptat de la stânga la dreapta și în continuare toate regulile de prioritate normale, din câte văd.

Acest lucru are sens total... Folosind operatorii pe biți, ceea ce are loc este operația la nivel pe biți pe rezultatul a două operații non-biți (atribuțiile). Dacă o operație non-bit returnează null (cu alte cuvinte, valoarea atribuită se dovedește a fi nulă sau 0), operatorul pe biți s-ar lega de aceasta (sau mai potrivit, l-ar „vedea”) ca un „0”, altfel ar vedea un non-zero (șir de biți cu cel puțin un „1” în el).

Apoi pe bit | se face pe cele două valori, iar dacă oricare dintre ele este diferită de zero (are „1” biți în ea), atunci rezultatul va avea acei „1” biți în el (non-zero), iar instrucțiunea if va interpreta orice non- valoarea zero ca adevărată într-un test boolean. La fel, dacă ambii operanzi la | au fost nule sau 0, atunci rezultatul ar fi o valoare zero, pe care „dacă” ar interpreta ca falsă.

Declarația if de mai sus face un | pe (în acest caz) două valori diferite de zero (cu „1” în el la nivel de bit), deci | operația returnează o valoare diferită de zero, care este apoi reinterpretată de instrucțiunea if ca TRUE!

Deci, în acest caz special în care încercați să înșirați teste booleene nescurtcircuitate, acești operatori lucrează la operanzii lor la nivel de biți și, deoarece nu sunt operatori de comparație, ci operatori matematici, ei nu pot fi scurti. circuitat, iar comportamentul rezultat este un „test boolean” non-scurtcircuitat.

Știu, trebuie să crezi că sunt nebun pentru că am încercat să ocolesc o optimizare încorporată ca aceasta, dar te asigur că există un motiv foarte bun pentru asta și, dacă ești interesat, poți consulta acest thread așa cum am făcut-o eu. o postare foarte lungă acolo care explică ceea ce încercam să fac:

Este a 9-a postare în jos, unde veți găsi descrierea mea a interogării bazei de date pe care doream să o optimizez.

Ceea ce probabil nu este ceea ce îți dorești.

Acest lucru poate fi de ajutor celor cărora le place codul să citească ca în engleză și ar putea crede că diferențele de precedență ale acestor operatori sunt relativ exotice: nu sunt.

În ceea ce mă privește, m-am confruntat cu această problemă pentru că nu există XOR logic simbolic (de exemplu, nu ^^), așa că a trebuit să folosesc XOR și apoi m-am gândit că în locuri similare ar trebui să folosesc AND și SAU și apoi codul s-a spart :)

Deci acum trebuie
$a = ($b xor $c);

Jesse Thompson
bend.com

yohgaki la hotmail dot com

În PHP4, „și”, „sau”, „&&”, „||” -- toate sunt „scurtcircuit” ca în C/C++. În PHP3, cred că nu a fost.

„Scurtcircuit” înseamnă că limbajul oprește evaluarea expresiei atunci când sunt determinate condiții. (Majoritatea limbajului utilizează evaluarea scurtcircuitelor pentru condiția logică)

$a = adevărat;
$b = fals;
dacă ($a || $b) (
}

Această declarație „dacă” evaluează doar $a, deoarece $a este adevărat și întreaga condiție trebuie să fie adevărată. (adică dacă $b este o funcție în loc de valoare, funcția nu va fi apelată)

muerte la web-ster dot com

Speram să găsesc un operator similar cu funcțiile ||= în perl. Primul meu gând ar fi:

$i = $i sau „implicit”

Dar sau nu funcționează așa. Dacă doriți să atribuiți o valoare implicită variabilelor dvs. numai dacă acestea nu sunt deja atribuite, puteți totuși să faceți:

$i sau $i = „implicit”

Primul exemplu NU funcționează deoarece operatorul or nu este supraîncărcat așa cum este în Perl.

dante at heartme punct com


Am vrut sa fac asa ceva:

$alegere1 = "";
$choice2 = „câine”;
$implicit = "altul";
$val = $alegere1 || $alegere2 || $implicit;

Dar atunci $val1 va conține doar 1 sau 0. În schimb, am făcut asta:

$alegere1 = "";
$choice2 = „câine”;
$implicit = "altul";
$val = $alegere1 sau $alegere2 sau $implicit;

Acum $val conținea șirul „câine”. Asta e
ciudat că „sau” este diferit de „||”... și aș face-o
cred că „||” ar trebui să fie suficient de inteligent pentru a se descurca
șiruri... așa cum face PERL. Nu cred. Poate este
o alegere de design.

Ultima actualizare: 1/11/2015

În PHP putem folosi diverși operatori: aritmetici, logici etc. Să ne uităm la fiecare tip de operație.

Operatii aritmetice

    + (operație de adăugare)

    De exemplu, $a + 5

    - (operație de scădere)

    De exemplu, $a - 5

    * (înmulțire)

    De exemplu, $a * 5

    / (Divizia)

    De exemplu, $a / 5

    % (obținerea restului de diviziune)

    De exemplu: $a=12; echo $a % 5; // este egal cu 2

    ++ (creștere/creștere valoarea cu unu)

    De exemplu, ++$a

    Este important să înțelegeți diferența dintre expresiile ++$a și $a++ . De exemplu:

    $a=12; $b=++$a; // $b este egal cu 13 echo $b;

    Aici, mai întâi, se adaugă unul la valoarea variabilei $a, iar apoi valoarea acesteia este echivalată cu variabila $b. Ar fi diferit dacă expresia ar arăta astfel: $b=$a++; . Aici, mai întâi valoarea variabilei $a a fost egală cu variabila $b, iar apoi valoarea variabilei $a a fost mărită.

    -- (scăderea/scăderea valorii cu unu)

    De exemplu, --$a . Și, de asemenea, ca și în cazul incrementului, există două tipuri de înregistrare: --$a și $a--

Operatori de atribuire

    Echivalează o variabilă cu o anumită valoare: $a = 5

    Adăugarea urmată de atribuirea rezultatului. De exemplu: $a=12; $a += 5; eco $a; // egal cu 17

    Scăderea urmată de atribuirea rezultatului. De exemplu: $a=12; $a -= 5; eco $a; // este egal cu 7

    Înmulțirea urmată de atribuirea rezultatului: $a=12; $a *= 5; eco $a; // este egal cu 60

    Împărțirea urmată de atribuirea rezultatului: $a=12; $a /= 5; eco $a; // egal cu 2,4

    Concatenați rândurile și atribuiți rezultatul. Se aplică la două linii. Dacă variabilele nu stochează șiruri, ci, de exemplu, numere, atunci valorile lor sunt convertite în șiruri și apoi se efectuează operația: $a=12; $a .= 5; eco $a; // egal cu 125 // identic cu $b="12"; $b .="5"; // egal cu 125

    Obținerea restului de împărțire și apoi atribuirea rezultatului: $a=12; $a %= 5; eco $a; // este egal cu 2

Operații de comparație

Operațiile de comparare sunt de obicei utilizate în construcțiile condiționate atunci când este necesar să se compare două valori și, în funcție de rezultatul comparației, să se efectueze anumite acțiuni. Următoarele operațiuni de comparare sunt disponibile.

    Operatorul de egalitate compară două valori și, dacă sunt egale, returnează adevărat, în caz contrar returnează false: $a == 5

    Operatorul de identitate compară, de asemenea, două valori și, dacă sunt egale, returnează true, în caz contrar returnează false: $a === 5

    Compară două valori și, dacă nu sunt egale, returnează adevărat, în caz contrar returnează false: $a != 5

    Compară două valori și, dacă nu sunt egale, returnează adevărat, în caz contrar returnează false: $a !== 5

    Compară două valori, iar dacă prima este mai mare decât a doua, returnează adevărat, în caz contrar returnează false: $a > 5

    Compară două valori, iar dacă prima este mai mică decât a doua, returnează adevărat, în caz contrar returnează false: $a< 5

    Compară două valori, iar dacă prima este mai mare sau egală cu a doua, returnează adevărat, în caz contrar returnează false: $a >= 5

    Compară două valori, iar dacă prima este mai mică sau egală cu a doua, returnează adevărat, în caz contrar returnează false: $a<= 5

Operator de egalitate și identitate

Ambii operatori compară două expresii și returnează adevărat dacă expresiile sunt egale. Dar există diferențe între ele. Dacă operația de egalitate ia două valori de tipuri diferite, atunci acestea sunt reduse la una - cea pe care interpretul o consideră optimă. De exemplu:

Evident, variabilele stochează valori diferite de diferite tipuri. Dar când sunt comparate, acestea vor fi reduse la același tip - numeric. Iar variabila $a va fi redusă la numărul 22. Și în final, ambele variabile vor fi egale.

Sau, de exemplu, următoarele variabile vor fi, de asemenea, egale:

$a = fals; $b = 0;

Pentru a evita astfel de situații, se utilizează operația de echivalență, care ia în considerare nu numai valoarea, ci și tipul variabilei:

$a = "22a"; $b = 22; if($a===$b) echo "egal"; else ecou "nu este egal";

Acum variabilele nu vor fi egale.

Operatorii de inegalitate != și !== funcționează în mod similar.

Operații logice

Operațiile logice sunt de obicei folosite pentru a combina rezultatele a două operații de comparare. De exemplu, trebuie să efectuăm o anumită acțiune dacă mai multe condiții sunt adevărate. Sunt disponibile următoarele operații logice:

    Returnează adevărat dacă ambele comparații returnează adevărat, în caz contrar returnează false: $a == 5 && $b = 6

    Similar cu operația &&: $a == 5 și $b > 6

    Returnează adevărat dacă cel puțin o operație de comparare returnează adevărat, în caz contrar returnează false: $a == 5 || $b = 6

    Similar cu operațiunea || : $a< 5 or $b > 6

    Returnează adevărat dacă operația de comparare returnează false: !($a >= 5)

    Returnează adevărat dacă doar una dintre valori este adevărată. Dacă ambele sunt adevărate sau niciunul nu este adevărat, returnează false. De exemplu: $a=12; $b=6; if($a xor $b) echo "true"; else ecou "fals";

    Aici rezultatul operației logice va fi fals deoarece ambele variabile au o anumită valoare. Hai sa schimbam codul:

    $a=12; $b=NULL; if($a xor $b) echo "true"; else ecou "fals";

    Aici rezultatul va fi deja adevărat, deoarece valoarea unei variabile nu este setată. Dacă o variabilă are valoarea NULL, atunci în operațiile logice valoarea acesteia va fi tratată ca falsă

Operații cu biți

Operațiile cu biți sunt efectuate pe biți individuali ai unui număr. Numerele sunt considerate în reprezentare binară, de exemplu, 2 în reprezentare binară este 010, numărul 7 este 111.

    & (înmulțire logică)

    Înmulțirea se face pe biți, iar dacă ambii operanzi au valori de biți egale cu 1, atunci operația returnează 1, în caz contrar se returnează numărul 0. De exemplu: $a1 = 4; //100 $b1 = 5; //101 echo $a1 & $b1; // este egal cu 4

    Aici numărul 4 în sistemul binar este 100, iar numărul 5 este 101. Înmulțiți numerele bit cu bit și obțineți (1*1, 0*0, 0 *1) = 100, adică numărul 4 în zecimală format.

    | (adăugare logică)

    Similar înmulțirii logice, operația se efectuează și pe cifre binare, dar acum se returnează una dacă cel puțin un număr dintr-o cifră dată are unul. De exemplu: $a1 = 4; //100 $b1 = 5; //101 echo $a1 | $b1; // este egal cu 5

    ~ (negație logică)

    inversează toți biții: dacă valoarea biților este 1, atunci devine zero și invers. $b = 5; ecou ~$b;

    X<

    x>>y - mută numărul x la dreapta cu y cifre. De exemplu, 16>>1 mută 16 (care este 10000 în binar) cu un loc la dreapta, rezultând 1000 sau 8 în zecimală

Concatenarea șirurilor

Operatorul punct este folosit pentru a concatena șiruri. De exemplu, să conectăm mai multe linii:

$a="Bună ziua,"; $b=" lume"; eco $a . $b . „!”;

Dacă variabilele reprezintă alte tipuri decât șiruri, cum ar fi numere, atunci valorile lor sunt convertite în șiruri și apoi are loc și operația de concatenare a șirurilor.