← Zpět na všechny články blogu

PHP 8.5: Třicet let a cesta k novému paradigmatu

Honza Černý
Honza Černý Aktualizováno 18. 2. 2026 – 6 min. čtení

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.

PHP 8.5 není revoluční verze to je třeba si nalít čistého vína hned na začátku. Místo toho vidíme něco zajímavějšího: strategii, jak jazyk připravit na další dekádu.

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(...);

Je to praktické, čitelnější? No těžko říct. Sami nevíme. Najdete i články, které to rozebírají více do detailu: https://phpfashion.com/cs/pipe-operator-je-bida.

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 %.

Interně se zlepšila ochrana proti nekonečné rekurzi a stabilnější práce se zásobníkem. Méně záhadných segfault chyb, jednodušší diagnostika problémů.

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áčí.

PSS: Pokud vás téma PHP 8.5 zajímá ještě více, krásně o tom mluvil Jirka Pudil na PHP meetupu v Ostravě.

Zůstaňte s námi v kontaktu

Jednou za měsíc posíláme souhrn novinek. Nemusíte se bát, spamovat vás nebudeme a odhlásit se můžete kdykoliv...

Karel Dytrych
Tým Váš Hosting
Vyzkoušejte náš trial na týden zdarma

Garance 14denní záruky vrácení peněz

Vyzkoušejte server na týden zdarma

Vyzkoušet server