Trenutno stanje: PHP2Shell. Dvije kritične PHP ranjivosti (CVSS 9.2) omogućuju zlonamjerni kod bez prijave. Zakrpe od 21. 10. 2026.Što sada učiniti →

PHP 8.0 do 8.5: najvažnije novosti

Od match i JIT-a u PHP-u 8.0 do pipe operatora i URI ekstenzije u PHP-u 8.5: novosti svake verzije, zamke pri nadogradnji i što donose za sigurnost.

Stanje 4 min čitanjaPHP znanje

Ukratko: PHP 8.0 (studeni 2020.) donio je imenovane argumente, atribute, union tipove, match, nullsafe operator i JIT kompilator. Potom su godišnje slijedili: 8.1 s enumima i fiberima, 8.2 s readonly klasama, 8.3 s tipiziranim konstantama klasa, 8.4 s property hooksima i 8.5 s pipe operatorom i URI ekstenzijom. Svaka verzija ukida i nešto staro. Pri nadogradnji stoga važe testovi, a za sigurnost je ponajprije važno koristiti podržanu granu s aktualnom razinom zakrpa.

Novosti PHP-a 8 ukratko

Tablica sažima ključne točke stranica izdanja na php.net-u. Datumi prvog izdanja prema php.net-u.

Verzija Izišla Najvažnije novosti Izbor ukidanja i prekida kompatibilnosti
8.0 26. 11. 2020. imenovani argumenti, atributi, Constructor Property Promotion, union tipovi, match, ?->, JIT 0 == 'foobar' sada je false, tipske pogreške umjesto upozorenja
8.1 25. 11. 2021. enumi, readonly svojstva, First-Class-Callables strlen(...), new u inicijalizatorima, intersection tipovi, never, fiberi –
8.2 8. 12. 2022. readonly klase, DNF tipovi, null/false/true kao tipovi, Random ekstenzija, konstante u traitovima, #[\SensitiveParameter] dinamička svojstva ukinuta
8.3 23. 11. 2023. tipizirane konstante klasa, #[\Override], json_validate(), mb_str_pad(), php -l za više datoteka –
8.4 21. 11. 2024. property hooks, asimetrična vidljivost, #[\Deprecated], novi DOM API s HTML5, BcMath\Number, array_find(), lazy objekti implicitno nullable parametri ukinuti; IMAP, OCI8, PDO_OCI, pspell u PECL
8.5 20. 11. 2025. pipe operator, URI ekstenzija, Clone With, #[\NoDiscard], array_first()/array_last() backtick operator ukinut, disable_classes uklonjen

PHP 8.0 i 8.1: veliki korak

PHP 8.0 učinio je jezik osjetno strožim i izražajnijim. Prema stranici izdanja interne funkcije sada dosljedno bacaju TypeError ili ValueError umjesto da samo ispisuju upozorenja. Usporedbe brojeva i nizova znakova slijede čišća pravila.

<?php
// PHP 8.0: match uspoređuje strogo i ne treba break
$status = 404;
echo match (true) {
    $status >= 500 => 'Serverfehler',
    $status >= 400 => 'Anfragefehler',
    default        => 'in Ordnung',
};

// PHP 8.0: nullsafe operator
$land = $bestellung?->kunde?->adresse?->land;

PHP 8.1 donio je enume, dakle tipove nabrajanja s čvrstim vrijednostima, i readonly svojstva koja se mogu postaviti samo jednom:

<?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() baca pogrešku kod nepoznatih vrijednosti. To sprječava da proizvoljni nizovi znakova iz obrazaca prođu kao uloga. Tko umjesto pogreške treba praznu vrijednost, koristi Rolle::tryFrom(), koji kod nepoznatih vrijednosti vraća null.

Novost u 8.1 su i fiberi, temelj za istodobne tokove na kojem se grade biblioteke za asinkronu obradu. U uobičajenom radu web-stranice toga se malo primjećuje, u modernim frameworcima i redovima čekanja pak da.

PHP 8.2 i 8.3: pospremanje i osiguravanje

PHP 8.2 ukinuo je dinamička svojstva. Tko objektu dodijeli nedeklarirano svojstvo, dobiva napomenu; pomoću #[\AllowDynamicProperties] to se može dopustiti za pojedine klase. Stariji dodaci zato često stvaraju mnogo poruka u logu.

Za sigurnost su zanimljivi nova Random ekstenzija, čiji zadani randomizer prema stranici izdanja koristi kriptografski siguran generator slučajnih brojeva, i atribut #[\SensitiveParameter], koji skriva vrijednosti poput lozinki u stack traceovima. Više o sigurnim slučajnim vrijednostima u članku Sigurni slučajni brojevi i tokeni u PHP-u.

PHP 8.3 dodao je tipizirane konstante klasa, atribut #[\Override] protiv tipfelera pri nadjačavanju metoda i json_validate(), koji provjerava JSON bez potpunog dekodiranja.

PHP 8.4 i 8.5: moderna jezična sredstva

PHP 8.4 uveo je property hooks, dakle logiku izravno na svojstvima, i asimetričnu vidljivost poput public private(set). Uz to su stigli novi DOM API s podrškom za HTML5 i funkcije poput array_find(), array_any() i array_all(). Prema stranici izdanja ekstenzije IMAP, OCI8, PDO_OCI i pspell premještene su iz jezgre u PECL. Aplikacije koje koriste, na primjer, IMAP tada trebaju zaseban paket.

PHP 8.5 donio je pipe operator koji pozive povezuje slijeva nadesno:

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

Novost je i URI ekstenzija koja adrese rastavlja prema RFC-u 3986 i standardu WHATWG URL. To je sigurnosno važno jer nejednako parsirani URL-ovi poznat su uzrok zaobiđenih provjera. Backtick operator kao skraćeni oblik shell_exec() je ukinut, a postavka disable_classes uklonjena. Tko ju je koristio, trebao bi prilagoditi svoje ojačavanje.

Novosti, nadogradnje i PHP2Shell

Nove jezične funkcije ne zatvaraju ranjivosti u interpreteru. Protiv PHP2Shella pomaže samo aktualna razina zakrpa dotične grane: 8.5.12, 8.4.27, 8.3.36 ili 8.2.35. Za PHP 8.1 i 8.0 više nema službenih ažuriranja. Tko je tamo zapeo, mora nadograditi, a pritom novosti malo pomažu, a prekidi kompatibilnosti puno.

Siguran put nadogradnje u pet koraka:

  1. Odrediti ciljnu verziju, u skladu sa sistemskim zahtjevima proizvođača i ciklusom izdanja.
  2. Ovisnosti putem Composera i dodatke dovesti na kompatibilna stanja.
  3. Kod provjeriti statičkom analizom i testovima prema ciljnoj verziji.
  4. Isprobati u testnom okruženju s kopijom produkcijskih podataka, logove analizirati zbog ukidanja.
  5. Prebaciti, ponovno pokrenuti sve PHP procese i dokumentirati stanje.

Pozadinu o tipovima donosi članak Sustav tipova u PHP-u.

Kako PHP SOS konkretno pomaže?

  • Provjeriti kompatibilnost: Analiziramo Vaš kod i ekstenzije zbog prekida prema ciljnoj verziji.
  • Provesti nadogradnju: Migracijom na podržanu PHP verziju aplikacije testirano podižemo.
  • Prilagoditi ojačavanje: Uklonjene postavke poput disable_classes zamjenjujemo djelotvornim alternativama.
  • Održavati razinu zakrpa: Nakon nadogradnje granu držimo ažurnom i dokazujemo svako ponovno pokretanje.

Česta pitanja

Koju verziju PHP-a 8 danas trebam koristiti?

Za nove projekte PHP 8.4 ili 8.5, jer se najdulje podržavaju: 8.4 do kraja 2028., 8.5 do kraja 2029. Odlučujuće je što Vaša aplikacija podržava prema sistemskim zahtjevima proizvođača. PHP 8.2 završava 31. prosinca 2026.

Što se najčešće lomi pri prelasku s PHP-a 7.4 na PHP 8?

Često su to strože provjere tipova: interne funkcije u PHP-u 8 bacaju TypeError ili ValueError umjesto da samo ispisuju upozorenja. Primjećuju se i promijenjene usporedbe brojeva i nizova znakova. Statička analiza i testovi unaprijed otkrivaju većinu toga.

Ubrzava li JIT moju web-stranicu?

Uglavnom jedva. Prema stranici izdanja za PHP 8.0 učinkovitost tipičnih web-aplikacija otprilike je na razini PHP-a 7.4, dok računski zahtjevni zadaci mogu znatno profitirati. Od PHP-a 8.4 JIT je prema zadanim postavkama isključen.

Koje novosti pomažu sigurnosti?

Među ostalim nova Random ekstenzija u PHP-u 8.2 s kriptografski sigurnom zadanom vrijednošću, atribut SensitiveParameter protiv lozinki u stack traceovima, enumi i readonly svojstva za nedvosmislenije podatke te dosljedniji tipski error od PHP-a 8.0.

Izvori

Hitni kontakt

Svaki sat se računa. Pišite nam odmah.

Ukratko opišite sustav, verziju PHP-a i opažanje. Javit ćemo Vam se, razjasniti situaciju i raditi na daljinu dok incident nije zaključen i dokumentiran.

Hitna pomoć