Pitäisikö PHP: ssä käyttää kolmois-yhtäsuuruusvertailuoperaattoreita (===) kaksoissuuren (==) sijaan, ellei ole erityistä syytä käyttää jälkimmäistä?


Paras vastaus

Ehdottomasti!

PHP: ssä, Javascriptissa tai muulla kielellä, joka tarjoaa sekä löyhiä että tiukkoja vastaavuustarkistuksia, on parasta käyttää tiukkaa versiota, ellei sinulla ole pakottavaa syytä toisin . (Itse asiassa jotkut ohjelmistokehittäjät vaativat, ettet käytä lainkaan löysää tasa-arvotarkistusta!) Tähän on useita syitä.

Ensinnäkin löyhän vastaavuuden käyttäminen voi johtaa kokonaisiin luokkiin vikoja. joka voidaan välttää tiukalla vastaavuudella. Vaikka PHP on erityisen tunnettu siitä, että se on ”hyödyllinen”, useimmat kielet, joilla on dynaaminen kirjoitus, ovat lempeitä, kun on kyse muuntamisesta tyyppien välillä. Löydetyn vastaavuuden läpäisevät tiedot saattavat käyttäytyä hienosti monissa tapauksissa ja mennä paljon syvemmälle koodiin ennen virheen laukeamista tai odottamattoman sivuvaikutuksen aiheuttamista. Tiukat vastaavuustarkastukset ovat samalla tavoin samankaltaisia ​​tyyppeihin, jotka tehdään staattisesti kirjoitetuilla kielillä; sinulla on paljon vähemmän todennäköistä, että virheellisessä muodossa olevat tiedot suoritetaan epäkunnossa.

Tähän liittyvä ongelma on, kuinka löysä vastaavuus vaikeuttaa koodin perustelua. Jos käytät tiukkaa vastaavuutta, voit tehdä paljon oletuksia tarkastuksen läpäisevistä tiedoista. Sama ei ole totta, jos käytät löysää vastaavuutta. Harkitse seuraavia kahta esimerkkiä.

// Example #1: strict

if ( $i === 1 ) {

doThing( $i );

}

// Example #2: loose

if ( $i == 1 ) {

doThing( $i );

}

Ensimmäisessä esimerkissä voidaan olettaa, että ”doThing” -funktiota kutsutaan numeerisella arvolla, ja meidän on vain tarkasteltava, kuinka funktio käsittelisi numeroita. >

Toisessa esimerkissä ”doThing” voidaan kuitenkin kutsua useilla eri tyypeillä, mukaan lukien merkkijonot tai loogiset arvot. Kun luet ”doThing” -toimintoa, sinun on harkittava, miten kutakin tyyppiä voidaan käsitellä, mukaan lukien kaikki implisiittisten tyyppien muunnoksia koskevat säännöt (ja joskus järjettömät). Se on paljon seurattavaa päähäsi!

Käyttämällä löyhää vastaavuutta et myöskään ole eksplisiittinen. Tämä ei pelkästään vaikuta perustelun vaikeuteen logiikan avulla, mutta ei myöskään ota huomioon todellisia vaatimuksia, joita logiikan on tarkoitus edustaa. Yllä olevan esimerkin # 2 avulla ei voida mitenkään kertoa, odottivatko alkuperäiset ohjelmoijat numeerisia arvoja, merkkijonoja, loogisia arvoja vai jotain näiden yhdistelmää. Se tekee koodista ylläpidettävän päänsäryn.

Lopuksi, vaikka implisiittisten tyyppien suoratoisto voi olla kätevää, sitä ei tarvita vain ammattimaisessa ympäristössä. Voit aina asettaa järkeviä oletuksia tai pakottaa tiedot manuaalisesti sopivaan tyyppiin. Tämä voi vaatia enemmän koodia ja enemmän vaivaa, mutta se lisää myös huomattavasti koodisi luotettavuutta.

Vastaus

Jos tiedät, että kahdella arvolla on oltava sama tyyppi, niin kyllä ​​käytä Strict ( ===) löysällä (==). Tiukalla on parempi suorituskyky, koska sen ei tarvitse tehdä tyypin muunnosta kuten löysä.

Esimerkiksi 1 == ”1” palauttaa arvon tosi, koska merkkijono muunnetaan luvuksi tasa-arvon tarkistamiseksi

Vaikka 1 === ”1” palauttaa epätosi

Tiukka tasa-arvo menee melkein ”ei samantyyppiseen? EPÄTOSI ”

Toivottavasti tämä auttaa

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *