Aktuálna situácia: PHP2Shell. Dve kritické zraniteľnosti PHP (CVSS 9.2) umožňujú spustenie škodlivého kódu bez prihlásenia. Záplaty od 21. 10. 2026.Čo treba urobiť teraz →

PHP 8.0 až 8.5: najdôležitejšie novinky

Od match a JIT v PHP 8.0 po operátor pipe a rozšírenie URI v PHP 8.5: novinky každej verzie, kamene úrazu pri upgrade a čo prinášajú pre bezpečnosť.

Stav 4 min čítaniaZnalosti o PHP

Stručne: PHP 8.0 (november 2020) priniesla pomenované argumenty, atribúty, union typy, match, operátor nullsafe a kompilátor JIT. Potom nasledovali každoročne: 8.1 s enumami a fibermi, 8.2 s triedami readonly, 8.3 s typovanými konštantami tried, 8.4 s property hooks a 8.5 s operátorom pipe a rozšírením URI. Každá verzia aj niečo staré vyraďuje. Pri upgrade preto záleží na testoch a pre bezpečnosť predovšetkým na tom, aby sa prevádzkovala podporovaná vetva s aktuálnym stavom záplat.

Novinky PHP 8 v prehľade

Tabuľka zhŕňa hlavné body stránok vydaní na php.net. Dátumy prvého vydania podľa php.net.

Verzia Vydaná Najdôležitejšie novinky Výber vyradených funkcií a zmien porušujúcich kompatibilitu
8.0 26. 11. 2020 pomenované argumenty, atribúty, Constructor Property Promotion, union typy, match, ?->, JIT 0 == 'foobar' je teraz false, chyby typov namiesto varovaní
8.1 25. 11. 2021 enumy, vlastnosti readonly, First-Class-Callables strlen(...), new v inicializátoroch, intersection typy, never, fibery –
8.2 8. 12. 2022 triedy readonly, typy DNF, null/false/true ako typy, rozšírenie Random, konštanty v traitoch, #[\SensitiveParameter] dynamické vlastnosti vyradené
8.3 23. 11. 2023 typované konštanty tried, #[\Override], json_validate(), mb_str_pad(), php -l pre viac súborov –
8.4 21. 11. 2024 property hooks, asymetrická viditeľnosť, #[\Deprecated], nové API DOM s HTML5, BcMath\Number, array_find(), lazy objekty implicitne nullable parametre vyradené; IMAP, OCI8, PDO_OCI, pspell do PECL
8.5 20. 11. 2025 operátor pipe, rozšírenie URI, Clone With, #[\NoDiscard], array_first()/array_last() operátor spätného apostrofu vyradený, disable_classes odstránené

PHP 8.0 a 8.1: veľký krok

PHP 8.0 urobilo jazyk citeľne prísnejším a výraznejším. Podľa stránky vydania vyhadzujú interné funkcie teraz dôsledne TypeError alebo ValueError, namiesto pouhých varovaní. Porovnávania medzi číslami a reťazcami sa riadia čistejšími pravidlami.

<?php
// PHP 8.0: match porovnáva striktne a nepotrebuje break
$status = 404;
echo match (true) {
    $status >= 500 => 'Serverfehler',
    $status >= 400 => 'Anfragefehler',
    default        => 'in Ordnung',
};

// PHP 8.0: operátor nullsafe
$land = $bestellung?->kunde?->adresse?->land;

PHP 8.1 prinieslo enumy, teda výčtové typy s pevnými hodnotami, a vlastnosti readonly, ktoré sa dajú nastaviť len raz:

<?php
enum Rolle: string {
    case Leser = 'leser';
    case Redakteur = 'redakteur';
    case Admin = 'admin';
}

final class Benutzer {
    public function __construct(
        public readonly string $name,
        public readonly Rolle $rolle,
    ) {}
}

$b = new Benutzer('Erika', Rolle::from('redakteur'));

Rolle::from() pri neznámych hodnotách vyhodí chybu. To bráni tomu, aby cez formuláre prešli ako rola ľubovoľné reťazce. Kto namiesto chyby potrebuje prázdnu hodnotu, použije Rolle::tryFrom(), ktoré pri neznámych hodnotách vráti null.

Novinkou v 8.1 sú aj fibery, základ pre súbežné priebehy, na ktorom stavajú knižnice pre asynchrónne spracovanie. V bežnej prevádzke webu si ich takmer nevšimnete, v moderných frameworkoch a frontoch však áno.

PHP 8.2 a 8.3: upratovanie a zabezpečenie

PHP 8.2 vyradilo dynamické vlastnosti. Kto priradí objektu nedeklarovanú vlastnosť, dostane upozornenie; pomocou #[\AllowDynamicProperties] sa to dá pre jednotlivé triedy povoliť. Staršie zásuvné moduly preto často vytvárajú v logu veľa hlásení.

Pre bezpečnosť sú zaujímavé nové rozšírenie Random, ktorého štandardný randomizer podľa stránky vydania používa kryptograficky bezpečný generátor náhody, a atribút #[\SensitiveParameter], ktorý skrýva hodnoty ako heslá v stacktrace. Viac o bezpečných náhodných hodnotách v časti Bezpečné náhodné čísla a tokeny v PHP.

PHP 8.3 doplnilo typované konštanty tried, atribút #[\Override] proti preklepom pri prepisovaní metód a json_validate(), ktoré kontroluje JSON bez jeho úplného dekódovania.

PHP 8.4 a 8.5: moderné jazykové prostriedky

PHP 8.4 zaviedlo property hooks, teda logiku priamo pri vlastnostiach, a asymetrickú viditeľnosť ako public private(set). K tomu pribudlo nové API DOM s podporou HTML5 a funkcie ako array_find(), array_any() a array_all(). Podľa stránky vydania sa rozšírenia IMAP, OCI8, PDO_OCI a pspell presunuli z jadra do PECL. Aplikácie, ktoré napríklad používajú IMAP, potrebujú potom samostatný balík.

PHP 8.5 prinieslo operátor pipe, ktorý reťazí volania zľava doprava:

<?php
$slug = '  Neue Produkte 2026  '
    |> trim(...)
    |> strtolower(...)
    |> (fn(string $s): string => str_replace(' ', '-', $s));
// Výsledok: "neue-produkte-2026"

Novinkou je aj rozšírenie URI, ktoré rozkladá adresy podľa RFC 3986 a štandardu WHATWG URL. Z hľadiska bezpečnosti je to relevantné, pretože nejednotne spracúvané adresy URL sú známou príčinou obídených kontrol. Operátor spätného apostrofu ako skrátená forma shell_exec() je vyradený, nastavenie disable_classes bolo odstránené. Kto ho používal, mal by upraviť svoje zabezpečenie.

Novinky, upgrady a PHP2Shell

Nové jazykové funkcie nezatvárajú zraniteľnosti v interpretere. Proti PHP2Shell pomáha iba aktuálny stav záplat príslušnej vetvy: 8.5.12, 8.4.27, 8.3.36 alebo 8.2.35. Pre PHP 8.1 a 8.0 už oficiálne aktualizácie neexistujú. Kto tam uviazol, musí upgradovať, a pritom pomáhajú novinky málo, lomy kompatibility však veľa.

Bezpečná cesta k upgradu v piatich krokoch:

  1. Určiť cieľovú verziu zodpovedajúcu systémovým požiadavkám výrobcu a cyklu vydávania.
  2. Závislosti cez Composer a zásuvné moduly priviesť na kompatibilné verzie.
  3. Kód skontrolovať statickou analýzou a testmi voči cieľovej verzii.
  4. Vyskúšať v testovacom prostredí s kópiou produkčných dát, logy vyhodnotiť na vyradené funkcie.
  5. Prepnúť, reštartovať všetky procesy PHP a zdokumentovať stav.

Súvislosti k typom prináša Typový systém PHP.

Ako konkrétne pomáha PHP SOS?

  • Skontrolovať kompatibilitu: Analyzujeme váš kód a rozšírenia na lomy voči cieľovej verzii.
  • Vykonať upgrade: Pri migrácii na podporovanú verziu PHP otestovane povyšujeme aplikácie.
  • Prispôsobiť zabezpečenie: Odstránené nastavenia ako disable_classes nahrádzame účinnými alternatívami.
  • Udržať stav záplat: Po upgrade držíme vetvu aktuálnu a dokladáme každý reštart.

Časté otázky

Ktorú verziu PHP 8 by som mal dnes nasadiť?

Pre nové projekty PHP 8.4 alebo 8.5, pretože sa podporujú najdlhšie: 8.4 do konca roka 2028, 8.5 do konca roka 2029. Rozhodujúce je, čo vaša aplikácia podľa systémových požiadaviek výrobcu podporuje. PHP 8.2 sa končí 31. decembra 2026.

Čo sa pri prechode z PHP 7.4 na PHP 8 láme najčastejšie?

Často sú to prísnejšie kontroly typov: interné funkcie v PHP 8 vyhadzujú TypeError alebo ValueError namiesto pouhých varovaní. Do očí bijú aj zmenené porovnávania medzi číslami a reťazcami. Statická analýza a testy odhalia väčšinu vopred.

Zrýchli JIT môj web?

Väčšinou sotva. Podľa stránky vydania PHP 8.0 je výkon typických webových aplikácií približne na úrovni PHP 7.4, kým výpočtovo náročné úlohy môžu výrazne profitovať. Od PHP 8.4 je JIT štandardne vypnutý.

Ktoré novinky pomáhajú bezpečnosti?

Okrem iného nové rozšírenie Random v PHP 8.2 s kryptograficky bezpečným štandardom, atribút SensitiveParameter proti heslám v stacktrace, enumy a vlastnosti readonly pre jednoznačnejšie dáta, ako aj dôslednejšie chyby typov od PHP 8.0.

Zdroje

Okamžitý kontakt

Každá hodina sa počíta. Napíšte nám hneď.

Stručne opíšte systém, verziu PHP a svoje pozorovanie. Ozveme sa, vyjasníme situáciu a budeme pracovať na diaľku, kým nebude incident uzavretý a zdokumentovaný.

Okamžitá pomoc