# PHP 8.0 do 8.5: najvažnije novosti

> Novosti u PHP-u 8 od 8.0 do 8.5: najvažnije funkcije po verziji, primjeri koda, ukidanja s rizikom nadogradnje i što je važno za sigurnost.

Izvor: https://phpsos.de/hr/php/php-8-neuerungen/  
Stanje: 25.10.2026  
Pružatelj: PHP SOS, PHP hitna pomoć i sigurnost poslužitelja. Hitna pomoć putem WhatsAppa: https://wa.me/491736494914?text=Pozdrav%20PHP%20SOS%2C%20trebamo%20pomo%C4%87%20s%20na%C5%A1im%20PHP%20poslu%C5%BEiteljem.%20Tvrtka%3A%20%E2%80%A6%20Web-stranica%3A%20%E2%80%A6

**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
// 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
<?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](https://phpsos.de/hr/blog/sichere-tokens-php/).

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
<?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](https://phpsos.de/hr/php/release-zyklus/).
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](https://phpsos.de/hr/php/typsystem/).

## 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](https://phpsos.de/hr/leistungen/php-migration-legacy/) 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

- [php.net: Izdanje PHP 8.0](https://www.php.net/releases/8.0/en.php)
- [php.net: Izdanje PHP 8.4](https://www.php.net/releases/8.4/en.php)
- [php.net: Izdanje PHP 8.5](https://www.php.net/releases/8.5/en.php)
- [PHP 8 ChangeLog](https://www.php.net/ChangeLog-8.php)
- [php.net: Podržane verzije](https://www.php.net/supported-versions.php)
