PHPStan řekne, že preg_replace může vrátit null,
a vy to vyřešíte přetypováním (string). Gratuluju, právě
jste fatální chybu proměnili v tichý prázdný string. Ukážu, proč je
hlasitá chyba vždycky lepší než ta, o které nevíte.
Připravil jsem definitivní tabulky pravdy pro PHP 7.x i 8.x. Konec hádání,
co udělá sort() s podivnými stringy, jestli se dají
porovnávat DateTimy přímo, nebo kdy vám array_unique() potichu
sežere data. Stačí se podívat na průsečík a víte.
Práce s časem v PHP je plná pastí. Podívejte se, jak přechod na letní
čas (DST) rozbíjí objekty DateTime a DateInterval, proč modify() vrací
nesmysly a jak tyto paradoxy elegantně řeší Nette Utils.
Gettery a settery byly provizorní řešení, než PHP dospělo. Jenže nové
property hooks přinášejí záludnosti: ze signatury nepoznáte, jestli je
property čitelná nebo zapisovatelná, pole se chovají překvapivě a
reference vám podkopou validaci. Průvodce tím, co funguje a kde
číhá past.
Readonly vlastnosti slibují neměnnost dat, ale fungují spíš jako zámek na
dveřích: co se děje uvnitř místnosti, to neuhlídají. Rozebírám
záludnosti inicializace, mýty o konstruktoru, triky s referencemi a novinky
z PHP 8.4, které konečně uvolňují zbytečně utažené šrouby.
PHP 7 proměnilo fatal errory ve výjimky, ale kompilační chyby zůstaly
nezachytitelné a sestřelí vám aplikaci jako za starých časů PHP
5. Syntaktická chyba hodí ParseError, dvě metody se stejným názvem vás
položí bez šance na obranu. Řešení přes linter existuje, PHP 8.3 ho
trochu vylepší.
Operátor ?? se rodil 12 let, aby dorazil přesně ve chvíli, kdy
ho PHP přestalo potřebovat. Místo zjednodušení života dnes spolehlivě
zatajuje překlepy a chyby. Byl bych radši, kdyby se na něj čekalo
ještě déle.
Roky jsem odmítal psát otazník u nullable typů, protože redundance mě
fysicky bolí. Pak přišlo PHP 8.0 s promoted properties a konzistence mě
donutila kapitulovat. Příběh o tom, jak vás vlastní principy doženou.
Shutdown v PHP má svůj rituál a destruktory v něm hrají roli, kterou
málokdo chápe správně. Globální objekty se bourají pozpátku chytrým
algoritmem, ostatní dostanou jen zdvořilostní __destruct bez
skutečného zrušení. A to nejlepší nakonec: volání destruktoru vůbec
není garantované.
Vlastní error handler v PHP vypadá triviálně, dokud nenaboříte půlku
ekosystému. Stačí ignorovat pár pravidel o potlačených chybách a
návratových hodnotách a máte v kódu zradu, kterou nikdo nečeká. Tady je
návod, jak to udělat správně.