PHP-ben hármas-egyenlő összehasonlító operátorokat (===) kell-e használni a kettős-egyenlő (==) helyett, hacsak nincs különösebb oka az utóbbi használatára?


A legjobb válasz

Abszolút!

PHP-ben, Javascriptben vagy bármely más nyelvben, amely laza és szigorú egyenértékűségi ellenőrzéseket is kínál, a legjobb a szigorú verziót használni, hacsak nincs kényszerítő oka ellenkezőjére . (Valójában egyes szoftverfejlesztők ragaszkodnak ahhoz, hogy egyáltalán ne használjon laza egyenlőség-ellenőrzést!) Ennek számos oka van.

Először is, a laza egyenértékűség használata a hibák egész osztályához vezethet. hogy szigorú egyenértékűséggel elkerülhető. Noha a PHP különösen híres arról, hogy „segítőkész”, a dinamikus gépeléssel rendelkező nyelvek többsége engedékeny a típusok közötti konvertálásra. A laza egyenértékűségen túllépő adatok sok esetben rendben lehetnek, és sokkal mélyebben belemennek a kódba, mielőtt hibát váltanának ki vagy váratlan mellékhatást okoznának. A szigorú egyenértékűségi ellenőrzések időközben jobban hasonlítanak a statikusan tipizált nyelveken előforduló ellenőrzések típusaira; sokkal kevésbé valószínű, hogy hibás formátumú adatok futnak.

Kapcsolódó probléma az, hogy a laza egyenértékűség hogyan nehezíti meg a kód indoklását. Ha szigorú egyenértékűséget alkalmaz, sok feltételezést tehet az ellenőrzésen áteső adatokról. Ugyanez nem igaz, ha laza egyenértékűséget használ. Tekintsük a következő két példát.

// Example #1: strict

if ( $i === 1 ) {

doThing( $i );

}

// Example #2: loose

if ( $i == 1 ) {

doThing( $i );

}

Az első példában feltételezhetjük, hogy a „doThing” függvényt numerikus értékkel hívják meg, és csak azt kell figyelembe vennünk, hogy ez a függvény hogyan kezeli a számokat.

A második példában azonban a „doThing” különböző típusokkal hívható meg, beleértve a karakterláncokat vagy a logikai értékeket. A „doThing” funkció átolvasása során meg kell fontolnia az egyes típusok kezelésének módját, beleértve az implicit típusú konverziókra vonatkozó összes (és néha értelmetlen) szabályt. Sokat kell nyomon követni a fejedben!

Továbbá, a laza egyenértékűség használatával nem vagy egyértelmű. Ez nemcsak a logika révén járul hozzá az okfejtés nehézségeihez, de nem képes megragadni azokat a tényleges követelményeket sem, amelyeket a logika állítólag képvisel. A fenti 2. példa alapján nem lehet megmondani, hogy az eredeti programozó számértékeket, karakterlánc-értékeket, logikai értékeket vagy ezek valamilyen kombinációját várta-e. Fejfájássá teszi a kód fenntartását.

Végül, bár az implicit típusú casting kényelmes lehet, professzionális körülmények között alig van rá szükség. Mindig beállíthat értelmes alapértelmezéseket, vagy manuálisan kényszerítheti az adatokat a megfelelő típusra. Ez több kódot és több erőfeszítést igényel, de ez nagymértékben növeli a kód megbízhatóságát is.

Válasz

Ha tudja, hogy két értéknek azonos típusúnak kell lennie, akkor az igen használja a Strict ( ===) laza (==) felett. A szigorú teljesítménye jobb, mert nem kell a konverziót végrehajtania, mint a laza.

Például az 1 == “1” értéke igaz, mert az a karakterlánc számokká konvertálódik az egyenlőség ellenőrzésére

Míg az 1 === “1” hamis értéket ad vissza

A szigorú egyenlőség nagyjából “nem ugyanaz a típus?” HAMIS “

Remélem, ez segít

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük