Moeten in PHP triple-equals-vergelijkingsoperatoren (===) worden gebruikt in plaats van double-equals (==), tenzij er een specifieke reden is om de laatste te gebruiken?


Beste antwoord

Absoluut!

In PHP, Javascript of elke andere taal die zowel losse als strikte equivalentiecontroles biedt, is het het beste om de strikte versie te gebruiken, tenzij je een dwingende reden hebt om anders te doen . (Sommige softwareontwikkelaars staan ​​er zelfs op dat u helemaal geen losse gelijkheidscontroles gebruikt!) Daar zijn een aantal redenen voor.

Allereerst kan het gebruik van losse gelijkwaardigheid leiden tot een hele reeks defecten dat kan met strikte gelijkwaardigheid worden vermeden. Hoewel PHP vooral berucht is omdat het ‘behulpzaam’ is, zijn de meeste talen met dynamisch typen mild als het gaat om het converteren tussen typen. Gegevens die de losse equivalentie doorstaan, werken in veel gevallen prima en gaan veel dieper in de code voordat ze een fout veroorzaken of een onverwacht neveneffect veroorzaken. Strikte gelijkwaardigheidscontroles lijken ondertussen meer op de soorten controles die plaatsvinden in statisch getypeerde talen; het is veel minder waarschijnlijk dat gegevens in een onjuist formaat worden uitgevoerd.

Een gerelateerd probleem is hoe losse equivalentie het moeilijker maakt om over code te redeneren. Als u strikte gelijkwaardigheid gebruikt, kunt u veel aannames doen over de gegevens die de controle doorstaan. Hetzelfde geldt niet als je losse equivalentie gebruikt. Beschouw de volgende twee voorbeelden.

// Example #1: strict

if ( $i === 1 ) {

doThing( $i );

}

// Example #2: loose

if ( $i == 1 ) {

doThing( $i );

}

In het eerste voorbeeld kunnen we aannemen dat de functie “doThing” wordt aangeroepen met een numerieke waarde en hoeven we alleen maar te overwegen hoe die functie omgaat met getallen.

In het tweede voorbeeld kan “doThing” worden aangeroepen met een verscheidenheid aan typen, waaronder strings of booleaanse waarden. Tijdens het lezen van de “doThing” -functie, zou u moeten overwegen hoe elk type kan worden behandeld, inclusief alle verschillende (en soms onzinnige) regels met betrekking tot impliciete typeconversies. Dat is veel om in je hoofd bij te houden!

Door losse equivalentie te gebruiken, ben je ook niet expliciet. Dit draagt ​​niet alleen bij aan het moeilijker redeneren door de logica, maar slaagt er ook niet in de feitelijke vereisten vast te leggen die de logica zou moeten vertegenwoordigen. Met voorbeeld 2 van hierboven is er geen manier om te zeggen of de oorspronkelijke programmeur numerieke waarden, tekenreekswaarden, booleaanse waarden of een combinatie daarvan verwachtte. Het maakt de code lastig om te onderhouden.

Ten slotte, hoewel impliciet typen casten handig kan zijn, is er in een professionele omgeving weinig behoefte aan. U kunt altijd verstandige standaardwaarden instellen of de gegevens handmatig in het juiste type dwingen. Dit vereist misschien meer code en meer moeite, maar het verhoogt ook aanzienlijk de betrouwbaarheid van uw code.

Antwoord

Als u weet dat twee waarden hetzelfde type moeten hebben, gebruik dan Strict (ja). ===) over losse (==). Strict heeft betere prestaties omdat het geen typeconversie hoeft uit te voeren zoals loose doet.

Bijvoorbeeld 1 == “1” retourneert true omdat die string wordt geconverteerd naar een getal om gelijkheid te controleren.

Terwijl 1 === “1” false retourneert

Strikte gelijkheid gaat eigenlijk “niet hetzelfde type? FALSE “

Ik hoop dat dit helpt

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *