Bør trippel-lik sammenligningsoperatorer (===) brukes i PHP i stedet for dobbel-lik (==) med mindre det er en spesiell grunn til å bruke sistnevnte?


Beste svaret

Absolutt!

I PHP, Javascript eller andre språk som tilbyr både løse og strenge ekvivalenssjekker, er det best å bruke den strenge versjonen med mindre du har en overbevisende grunn til å gjøre noe annet . (Faktisk insisterer noen programvareutviklere på at du ikke bruker løse likhetskontroller i det hele tatt!) Det er en rekke årsaker til dette.

Først og fremst kan bruk av løs ekvivalens føre til en hel klasse feil som kan unngås med streng likeverdighet. Selv om PHP er spesielt beryktet for å være «nyttig», er de fleste språk med dynamisk skriving lette når det gjelder konvertering mellom typer. Data som passerer den løse ekvivalensen, kan i mange tilfeller fungere fint og gå mye dypere inn i koden før de utløser en feil eller forårsaker en uventet bivirkning. Strenge ekvivalenssjekker er i mellomtiden mer beslektet med hvilke typer sjekker som forekommer på statisk typede språk; du har langt mindre sannsynlighet for at data i feil format kjøres amok.

Et relatert problem er hvor løs ekvivalens som gjør koden vanskeligere å resonnere om. Hvis du bruker streng likeverdighet, kan du gjøre mange forutsetninger om dataene som passerer sjekken. Det samme gjelder ikke hvis du bruker løs ekvivalens. Tenk på følgende to eksempler.

// Example #1: strict

if ( $i === 1 ) {

doThing( $i );

}

// Example #2: loose

if ( $i == 1 ) {

doThing( $i );

}

I det første eksemplet kan vi anta at «doThing» -funksjonen kalles med en numerisk verdi og bare trenger å vurdere hvordan den funksjonen vil håndtere tall. p I det andre eksemplet kan imidlertid «doThing» kalles med en rekke typer, inkludert strenger eller boolske verdier. Mens du leser gjennom “doThing” -funksjonen, må du vurdere hvordan hver type kan håndteres, inkludert alle de forskjellige (og noen ganger meningsløse) reglene angående implisitte konverteringer. Det er mye å holde styr på i hodet!

Ved å bruke løs ekvivalens er du ikke eksplisitt. Dette bidrar ikke bare til det vanskelige å resonnere gjennom logikken, men klarer ikke å fange opp de faktiske kravene som logikken skal representere. Med eksempel nr. 2 ovenfra er det ingen måte å fortelle om den opprinnelige programmereren forventet numeriske verdier, strengverdier, boolske verdier eller en kombinasjon av disse. Det gjør koden til hodepine å opprettholde.

Til slutt, mens implisitt casting kan være praktisk, er det lite behov for det i profesjonelle omgivelser. Du kan alltid angi fornuftige standardinnstillinger eller manuelt tvinge dataene til riktig type. Dette kan kreve mer kode og mer innsats, men det øker også påliteligheten til koden din.

Svar

Hvis du vet at to verdier skal ha samme type, så bruk strengt ( ===) over løs (==). Strikt har bedre ytelse fordi det ikke trenger å gjøre typekonvertering som løs gjør.

For eksempel 1 == «1» returnerer sant fordi den strengen blir konvertert til et tall for å sjekke likhet

Mens 1 === «1» returnerer falsk

Streng likhet går ganske mye «ikke den samme typen? FALSE «

Håper dette hjelper

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *