În PHP, ar trebui folosiți operatorii de comparație triple-egali (===) în loc de dublu-egali (==), cu excepția cazului în care există un motiv special pentru a-l utiliza pe acesta din urmă?


Cel mai bun răspuns

Absolut!

În PHP, Javascript sau în orice alt limbaj care oferă verificări de echivalență atât libere, cât și stricte, este mai bine să folosiți versiunea strictă, cu excepția cazului în care aveți un motiv imperios de a face altfel. . (De fapt, unii dezvoltatori de software insistă să nu utilizați deloc verificări ale egalității!) Există mai multe motive pentru aceasta.

În primul rând, utilizarea echivalenței libere poate duce la o întreagă clasă de defecte. care poate fi evitat cu echivalență strictă. Deși PHP este deosebit de notoriu pentru că este „util”, majoritatea limbajelor cu tastare dinamică sunt îngăduitoare atunci când vine vorba de conversia între tipuri. Datele care depășesc echivalența simplă s-ar putea comporta foarte bine în multe cazuri și să intre mult mai adânc în cod înainte de a declanșa o eroare sau de a provoca un efect secundar neașteptat. Între timp, controalele stricte de echivalență sunt mai asemănătoare cu tipurile de verificări care apar în limbi tipizate static; este mult mai puțin probabil să aveți date într-un format incorect.

O problemă asociată este modul în care echivalența slabă face codul mai dificil de argumentat. Dacă utilizați o echivalență strictă, puteți face o mulțime de presupuneri cu privire la datele care trece verificarea. Același lucru nu este valabil dacă utilizați o echivalență slabă. Luați în considerare următoarele două exemple.

// Example #1: strict

if ( $i === 1 ) {

doThing( $i );

}

// Example #2: loose

if ( $i == 1 ) {

doThing( $i );

}

În primul exemplu, putem presupune că funcția „doThing” este apelată cu o valoare numerică și trebuie doar să luăm în considerare modul în care funcția ar gestiona numerele.

În al doilea exemplu, totuși, „doThing” ar putea fi apelat cu o varietate de tipuri, inclusiv șiruri sau valori booleene. În timp ce citiți funcția „doThing”, ar trebui să luați în considerare modul în care fiecare tip ar putea fi tratat, inclusiv toate regulile variate (și uneori fără sens) referitoare la conversiile de tip implicite. Este o mulțime de urmărit în cap!

De asemenea, prin utilizarea echivalenței libere, nu sunteți explicit. Acest lucru nu numai că contribuie la dificilul raționamentului prin logică, dar nu reușește să capteze cerințele reale pe care logica ar trebui să le reprezinte. Cu exemplul nr. 2 de mai sus, nu există nicio modalitate de a spune dacă programatorul original aștepta valori numerice, valori de șir, valori booleene sau o combinație a acestora. Face codul o durere de cap de întreținut.

În cele din urmă, deși distribuirea de tip implicit poate fi convenabilă, este puțin nevoie de acesta într-un cadru profesional. Puteți seta oricând valori implicite sensibile sau constrânge manual datele în tipul corespunzător. Acest lucru poate necesita mai mult cod și mai mult efort, dar crește, de asemenea, foarte mult fiabilitatea codului dvs.

Răspuns

Dacă știți că două valori ar trebui să aibă același tip, atunci da, utilizați Strict ( ===) peste liber (==). Strict are o performanță mai bună, deoarece nu trebuie să facă conversia de tip, așa cum o face vracul.

De exemplu, 1 == „1” returnează true, deoarece șirul este convertit într-un număr pentru a verifica egalitatea

În timp ce 1 === „1” returnează fals

Egalitatea strictă merge aproape „nu este de același tip? FALS „

Sper că acest lucru vă va ajuta

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *