# 02 - Nepoužívať implicitné typové konverzie
Implicitné typové konverzie sú niekedy zvláštne. A aj keď sa objektívne dajú vysvetliť, málokto v nich má prehľad a nikto si na všetky prípady nedáva pozor.
Jeden príklad za všetky:
var_dump("1" == "01"); // 1 == 1 -> true
Síce (subjektívne) zriedkavo, ale niekedy vyústia v zbytočné chyby, ktoré by sme nemuseli mať. Preto si používanie implicitných konverzii typov zakazujeme.
Pod implicitnými typovými konverziami myslíme:
- PHP operátory sa môžu používať len s takými hodnotami/premennými, aby nedošlo k implicitnej typovej konverzii, napr.:
- logické operátory
!,&&alebo||sa môžu použiť iba s typom boolean, - aritmetické operátory
+,-,*alebo/sa môžu použiť iba s typmi int alebo float,
- logické operátory
- porovnávacie operátory
==,!=a<>sú zakázané, treba namiesto nich použiť===a!==, - zakázané sú aj verzie funkcií, ktoré robia implicitné typové konverzie,
- napr.
in_array($a, $b)aleboin_array($a, $b, false), povolené je iba volaniein_array($a, $b, true),
- napr.
- zakázané
empty()- premenná by mala mať hodnoty iba v 1 type - tým pádom sa pre každý typ dá napísať “empty()” podmienka ručne/explicitne; a na overenie, či existuje kľúč v poli treba použiťisset(), isset()sa môže použiť len na overenie, či v poli existuje kľúč (alebo field v objekte, alebo lokálna premenná, …), ak kľúč/field/premenná existuje, na overenie jej hodnoty treba použiť=== null,!== null, alebois_null().
Zákon umožňuje 1 výnimku - a to ak implicitné typové konverzie zjednodušujú navrhnuté API knižnice/modulu/triedy alebo implementáciu. A to iba za podmienky, že autor preukázateľne dokáže, že funkcia bude fungovať správne pre všetky možné typy/konverzie. Správne fungovanie môže byť aj exception pre nepodporované typy/konverzie. Najlepší spôsob, ako autor preukázateľne dokáže, že funkcia bude fungovať správne, sú unit testy.
Referencie: