Bör trippel-lika jämförelsesoperatorer (===) användas i PHP istället för dubbla-lika (==) om det inte finns någon särskild anledning att använda det senare?


Bästa svaret

Absolut!

I PHP, Javascript eller något annat språk som erbjuder både lösa och strikta likvärdighetskontroller är det bäst att använda den strikta versionen om du inte har en tvingande anledning att göra något annat . (Faktum är att vissa programutvecklare insisterar på att du inte använder lösa jämställdhetskontroller alls!) Det finns ett antal anledningar till detta.

Först och främst kan användning av lös likvärdighet leda till en hel klass av brister. som kan undvikas med strikt likvärdighet. Även om PHP är särskilt ökänt för att vara ”hjälpsamt” är de flesta språk med dynamisk typning mjuka när det gäller att konvertera mellan olika typer. Data som passerar den lösa likvärdigheten kan i många fall fungera bra och gå mycket djupare in i koden innan det utlöser ett fel eller orsakar en oväntad bieffekt. Stränga likvärdighetskontroller är emellertid mer besläktade med de typer av kontroller som förekommer på statiskt skrivna språk; det är mycket mindre sannolikt att du får data i ett felaktigt format amok.

Ett relaterat problem är hur lös ekvivalens gör koden svårare att resonera om. Om du använder strikt likvärdighet kan du göra många antaganden om de uppgifter som passerar kontrollen. Detsamma gäller inte om du använder lös likvärdighet. Tänk på följande två exempel.

// Example #1: strict

if ( $i === 1 ) {

doThing( $i );

}

// Example #2: loose

if ( $i == 1 ) {

doThing( $i );

}

I det första exemplet kan vi anta att ”doThing” -funktionen anropas med ett numeriskt värde och bara behöver överväga hur den funktionen skulle hantera siffror.

I det andra exemplet kan dock ”doThing” kallas med en mängd olika typer inklusive strängar eller booleska värden. När du läser igenom ”doThing” -funktionen måste du överväga hur varje typ kan hanteras, inklusive alla de olika (och ibland meningslösa) reglerna för implicit typkonvertering. Det är mycket att hålla reda på i ditt huvud!

Genom att använda lös likvärdighet är du inte uttrycklig. Detta bidrar inte bara till det svåra att resonera genom logiken, utan misslyckas också med att fånga de faktiska kraven som logiken ska representera. Med exempel 2 ovanifrån finns det inget sätt att berätta om den ursprungliga programmeraren förväntade sig numeriska värden, strängvärden, booleska värden eller någon kombination av dessa. Det gör koden till en huvudvärk att upprätthålla.

Slutligen, medan implicit typgjutning kan vara bekvämt, finns det inget behov av det i en professionell miljö. Du kan alltid ställa in förnuftiga standardvärden eller manuellt tvinga data till rätt typ. Detta kan kräva mer kod och mer ansträngning, men det ökar också din kods tillförlitlighet avsevärt.

Svar

Om du vet att två värden borde ha samma typ, använd ja Strikt ( ===) över löst (==). Strikt har bättre prestanda eftersom det inte behöver göra typkonvertering som löst gör.

Till exempel 1 == ”1” returnerar sant eftersom den strängen omvandlas till ett tal för att kontrollera jämställdhet

Medan 1 === ”1” returnerar falskt

Strikt jämlikhet går ganska mycket ”inte samma typ? FALSE ”

Hoppas det hjälper

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *