Skal der bruges PHP-sammenligningsoperatorer (===) i stedet for dobbelt-lig (==) i PHP, medmindre der er en særlig grund til at bruge sidstnævnte?


Bedste svar

Absolut!

I PHP, Javascript eller ethvert andet sprog, der tilbyder både løse og strenge ækvivalenskontrol, er det bedst at bruge den strenge version, medmindre du har en tvingende grund til at gøre andet . (Faktisk insisterer nogle softwareudviklere på, at du slet ikke bruger løse ligestillingskontrol!) Der er en række grunde til dette.

Først og fremmest kan brug af løs ækvivalens føre til en hel klasse af mangler. der kan undgås med streng ækvivalens. Selvom PHP er særligt berygtet for at være “hjælpsom”, er de fleste sprog med dynamisk skrivning lette, når det kommer til konvertering mellem typer. Data, der passerer den løse ækvivalens, kan i mange tilfælde fungere fint og gå meget dybere ind i koden, før de udløser en fejl eller forårsager en uventet bivirkning. Streng ækvivalenskontrol er i mellemtiden mere beslægtet med de typer kontrol, der forekommer på statisk typede sprog; du har langt mindre sandsynlighed for, at data i et forkert format køres amok.

Et relateret problem er, hvordan løs ækvivalens gør koden vanskeligere at begrunde. Hvis du bruger streng ækvivalens, kan du antage mange antagelser om de data, der passerer kontrollen. Det samme gælder ikke, hvis du bruger løs ækvivalens. Overvej følgende to eksempler.

// Example #1: strict

if ( $i === 1 ) {

doThing( $i );

}

// Example #2: loose

if ( $i == 1 ) {

doThing( $i );

}

I det første eksempel kan vi antage, at “doThing” -funktionen kaldes med en numerisk værdi og kun behøver at overveje, hvordan denne funktion ville håndtere tal.

I det andet eksempel kan “doThing” dog kaldes med en række forskellige typer, herunder strenge eller boolske værdier. Mens du læser gennem “doThing” -funktionen, skal du overveje, hvordan hver type kan håndteres, inklusive alle de forskellige (og undertiden meningsløse) regler vedrørende implicitte typekonverteringer. Det er meget at holde styr på i dit hoved!

Også ved at bruge løs ækvivalens er du ikke eksplicit. Dette bidrager ikke kun til det vanskelige at ræsonnere gennem logikken, men undgår også at opfange de faktiske krav, som logikken skal repræsentere. Med eksempel nr. 2 ovenfra er der ingen måde at fortælle, om den oprindelige programmør forventede numeriske værdier, strengværdier, boolske værdier eller en kombination deraf. Det gør koden til en hovedpine at opretholde.

Endelig, mens implicit type casting kan være praktisk, er der ikke meget behov for det i professionelle omgivelser. Du kan altid indstille fornuftige standardindstillinger eller manuelt tvinge data til den relevante type. Dette kan kræve mere kode og mere indsats, men det øger også din kodes pålidelighed meget.

Svar

Hvis du ved, at to værdier skal have samme type, så brug strengt ( ===) over løs (==). Strenge har bedre ydeevne, fordi det ikke behøver at udføre typekonvertering som løs gør.

For eksempel 1 == “1” returnerer sandt, fordi den streng bliver konverteret til et tal for at kontrollere lighed

Mens 1 === “1” returnerer falsk

Streng lighed går stort set “ikke den samme type? FALSE “

Håber dette hjælper

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *