Měly by se v PHP namísto dvojitých rovných (==) používat porovnávací operátory triple-equals (===), pokud není konkrétní důvod používat druhé?


Nejlepší odpověď

Absolutně!

V PHP, Javascript nebo jakémkoli jiném jazyce, který nabízí volné i přísné kontroly rovnocennosti, je nejlepší používat přísnou verzi, pokud nemáte pádný důvod udělat něco jiného . (Ve skutečnosti někteří vývojáři softwaru trvají na tom, že vůbec nepoužíváte volné kontroly rovnosti!) Existuje pro to řada důvodů.

Za prvé, použití volné ekvivalence může vést k celé třídě defektů. tomu se lze vyhnout za přísné rovnocennosti. Ačkoli je PHP obzvláště známé tím, že je „užitečné“, většina jazyků s dynamickým zadáváním je shovívavá, pokud jde o převod mezi typy. Data, která předávají volnou ekvivalenci, se v mnoha případech mohou chovat v pohodě a před spuštěním chyby nebo způsobením neočekávaného vedlejšího efektu jít mnohem hlouběji do kódu. Přísné kontroly rovnocennosti se zatím více podobají typům kontrol, ke kterým dochází ve staticky zadaných jazycích; je mnohem méně pravděpodobné, že budou data v nesprávném formátu spuštěna amok.

Souvisejícím problémem je, jak volná ekvivalence znesnadňuje uvažování kódu. Používáte-li přísnou ekvivalenci, můžete vytvořit mnoho předpokladů o datech, která projdou kontrolou. Totéž není pravda, pokud použijete volnou ekvivalenci. Zvažte následující dva příklady.

// Example #1: strict

if ( $i === 1 ) {

doThing( $i );

}

// Example #2: loose

if ( $i == 1 ) {

doThing( $i );

}

V prvním příkladu můžeme předpokládat, že funkce „doThing“ je volána s číselnou hodnotou, a je třeba uvažovat pouze o tom, jak by tato funkce zpracovávala čísla.

V druhém příkladu by však „doThing“ mohl být volán s různými typy, včetně řetězců nebo booleovských hodnot. Při čtení prostřednictvím funkce „doThing“ musíte zvážit, jak lze jednotlivé typy zpracovat, včetně všech různých (a někdy nesmyslných) pravidel týkajících se převodu implicitního typu. To je ve vaší hlavě spousta informací!

Také pomocí volné ekvivalence nejste výslovní. To nejen přispívá k obtížnosti uvažování prostřednictvím logiky, ale také nedokáže zachytit skutečné požadavky, které má logika představovat. U příkladu č. 2 shora neexistuje způsob, jak zjistit, zda původní programátor očekával číselné hodnoty, řetězcové hodnoty, logické hodnoty nebo nějakou jejich kombinaci. Dělá to z kódu bolest hlavy, kterou je třeba udržovat.

A konečně, zatímco implicitní přetypování typu může být pohodlné, v profesionálním prostředí ho není potřeba. Vždy můžete nastavit rozumná výchozí nastavení nebo ručně vynutit data do příslušného typu. To může vyžadovat více kódu a větší úsilí, ale také to značně zvyšuje spolehlivost vašeho kódu.

Odpovědět

Pokud víte, že dvě hodnoty by měly mít stejný typ, pak použijte Strict ( ===) přes volné (==). Přísný má lepší výkon, protože nemusí provádět převody typu jako volné.

Například 1 == „1“ vrací true, protože řetězec se převede na číslo, aby se zkontrolovala rovnost

Zatímco 1 === „1“ vrací false

Přísná rovnost do značné míry funguje „není stejný typ? FALSE „

Doufám, že to pomůže

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *