PHP má 30 let – a PHP 8.5 ukazuje, že to není „jazyk na malé weby“, ale dospělý nástroj s plánem na další dekádu. Nepřichází revoluce, spíš chytrá evoluce:
- pipe operátor jako první krok k funkcionálnějšímu psaní,
- praktická vylepšení pro vývoj i provoz (lepší stack trace u fatálních chyb, nové CLI vychytávky, bezpečnější limity paměti)
- a pár změn, které pomůžou psát robustnější kód.
K tomu drobné výkonové posuny v engine – typicky 3–5 % navíc a méně „záhadných“ pádů.
Od spaghetti kódu k dospělému PHP
Vzpomínáte na doby, kdy se PHP považovalo za „ten jazyk na malé weby“? Doba spaghetti kódu přímo v HTML šablonách je dávno pryč. Typový systém, atributy, enumy, read-only třídy, property hooks – to vše posunulo jazyk někam, kde by ho jeho tvůrce asi nepoznal.
Pipe operátor: první krok, ne cíl
Největší novinkou PHP 8.5 je pipe operátor. Na první pohled syntaktický cukr – místo vnořených volání funkcí můžete psát transformace lineárně:
// Starý způsob - čtěte zevnitř ven
$rez = strtoupper(trim(htmlspecialchars($input)));
// Nový způsob - čtěte zleva doprava
$rez = $input |> htmlspecialchars(...) |> trim(...) |> strtoupper(...);
Ale tady se skrývá něco důležitějšího.
Pipe operátor je v současné podobě minimalistický. Nepodporuje partial application, tedy částečnou aplikaci funkcí. Neumí automaticky doplnit argument na správné místo. Je to první, opatrný krok. V dalších verzích se můžeme těšit na rozšíření:
// Partial application s operátorem ?
$result = "Hello World"
|> htmlentities(...)
|> str_split(...)
|> array_map(strtoupper(...), ?)
|> array_filter(?, fn($v) => $v != 'O');
// Kompozice funkcí pomocí +
$processor = htmlentities(...)
+ str_split(...)
+ array_map(strtoupper(...), ?);
$result = $processor("Hello World");
Je to cesta, jak změnit způsob, jakým PHP vývojáři přemýšlejí o kódu. PHP se nezbavuje objektů – spíš rozšiřuje paletu nástrojů. Vývojář si bude moci vybrat, jestli pro daný problém sáhne po třídách, nebo po funkcích a jejich kompozici. Samozřejmě když si přidáte ještě čas na to než změnu aplikují frameworky, tak vše dostat do praxe se ještě o něco déle protáhne.
Freelo - Nástroj na řízení úkolů a projektů
Přidej se, pozvi svůj tým a klienty, rozděl práci a sleduj, jak se úkoly dají do pohybu.
Praktické novinky pro každodenní práci
Kromě velkých vizí přináší PHP 8.5 řadu praktických vylepšení.
array_first() a array_last()
Konečně nativní funkce pro získání prvního a posledního prvku pole:
$first = array_first($arr);
$last = array_last($arr);
Žádné kouzlení s reset() nebo end(). Pokud je pole prázdné, vrátí se null.
VPS Centrum
Vyzkoušejte zdarma naši aplikaci pro správu serveru a domén. Budete si připadat jako zkušený administrátor.
Lepší error handling
Fatal error nyní vrací kompletní stack trace. Pro debugging zásadní změna. K tomu nové helper funkce get_error_handler() a get_exception_handler() pro frameworky.
CLI vylepšení
Nový přepínač php –ini=diff zobrazí rozdíly mezi aktuální konfigurací a defaultními hodnotami. Neocenitelné pro ladění serverů a CI/CD pipeline.
max_memory_limit
Nová INI direktiva nastavující absolutní horní limit paměti. I když si skript nastaví vyšší memory_limit, nepřekročí tento strop. Pro hostingová prostředí praktický bezpečnostní prvek.
Kvalita kódu jako priorita
Méně viditelná, ale stejně důležitá je cesta ke kvalitnějšímu kódu. PHP tu jasně reaguje na kritiku, že jazyk příliš toleruje špatné praktiky.
Rozšíření atributu #[Deprecated] na interfaces, traits a konstanty:
#[Deprecated]
interface LegacyThing {}
#[Deprecated]
trait LegacyTrait {}
#[Deprecated]
const ErrorCode = 666;
// #[NoDiscard] varuje, když ignorujete návratovou hodnotu funkce:
#[NoDiscard]
function bulkProcess(array $items): array
{
// Vrací pole výsledků včetně případných chyb
}
bulkProcess($data); // IDE vás upozorní - výsledek nevyužíváte!
// #[NoSerialize] zakazuje serializaci třídy:
#[NoSerialize]
class User implements Entity {}
Tohle nejsou sexy features pro marketingové materiály. Jsou to nástroje, které pomohou psát robustnější kód a odhalovat chyby dřív, než se dostanou do produkce.
Výkon a stabilita
PHP 8.5 přináší drobné výkonové optimalizace v engine, rychlejší práci s objekty a lepší chování JIT. Reálně můžete očekávat zrychlení běžných aplikací o 3–5 %.
Třicet let a co dál
PHP 8.5 možná nepřineslo tu jednu feature, o kterém budou všichni mluvit. Jak moc by si vývojáři přáli, generika, že? 🙂 Ale to neznamená, že je méně důležitá, ba naopak.
Ukazuje, že PHP má dlouhodobou strategii. Že pipe operátor není jen syntaktický cukr, ale první dílek skládačky. Kam tedy směřuje?
K jazyku, který umí být objektový i funkcionální. Synchronní i asynchronní. Jednoduchý pro začátečníky, ale pořád dost sofistikovaný pro experty. K jazyku, který i za dalších deset let bude dál pohánět web – jen modernějším způsobem.
P.S.: Jestli vám loni uteklo, že FrankenPHP je teď oficiálně pod záštitou PHP Foundation, beru to taky jako docela jasný signál komunitě, kam se cesty PHP stáčí.