# PHP 8.0-tól 8.5-ig: a legfontosabb újdonságok

> A PHP 8 újdonságai a 8.0-tól a 8.5-ig: verziónként a legfontosabb funkciók, kódpéldák, elavulások frissítési kockázattal, és ami a biztonság szempontjából releváns.

Forrás: https://phpsos.de/hu/php/php-8-neuerungen/  
Állapot: 2026. 10. 25.  
Szolgáltató: PHP SOS, PHP-vészhelyzeti segítség és szerverbiztonság. Azonnali segítség WhatsAppon: https://wa.me/491736494914?text=%C3%9Cdv%C3%B6zl%C3%B6m%2C%20PHP%20SOS%21%20Seg%C3%ADts%C3%A9gre%20van%20sz%C3%BCks%C3%A9g%C3%BCnk%20a%20PHP-szerver%C3%BCnkkel.%20C%C3%A9g%3A%20%E2%80%A6%20Weboldal%3A%20%E2%80%A6

**Röviden:** A PHP 8.0 (2020. november) elnevezett argumentumokat, attribútumokat, uniótípusokat, `match`-et, a nullsafe operátort és egy JIT-fordítót hozott. Ezután évente követték: a 8.1 enumokkal és Fiberekkel, a 8.2 readonly osztályokkal, a 8.3 típusos osztálykonstansokkal, a 8.4 property hookokkal és a 8.5 pipe operátorral és URI-bővítménnyel. Minden verzió régi dolgokat is elavulttá nyilvánít. Frissítéskor ezért a tesztek számítanak, a biztonság szempontjából pedig mindenekelőtt az, hogy támogatott ágat üzemeltessen naprakész patch-állapottal.

## A PHP 8 újdonságai áttekintve

A táblázat a php.net kiadási oldalainak fő pontjait foglalja össze. Az első kiadás dátumai a php.net szerint.

| Verzió | Megjelent | Legfontosabb újdonságok | Válogatás az elavulásokból és törésekből |
|---|---|---|---|
| 8.0 | 2020. 11. 26. | elnevezett argumentumok, attribútumok, Constructor Property Promotion, uniótípusok, `match`, `?->`, JIT | a `0 == 'foobar'` most `false`, típushibák figyelmeztetések helyett |
| 8.1 | 2021. 11. 25. | enumok, readonly tulajdonságok, first-class callable-ök `strlen(...)`, `new` inicializálókban, metszettípusok, `never`, Fiberek | – |
| 8.2 | 2022. 12. 08. | readonly osztályok, DNF-típusok, `null`/`false`/`true` típusként, Random bővítmény, konstansok trait-ekben, `#[\SensitiveParameter]` | a dinamikus tulajdonságok elavultak |
| 8.3 | 2023. 11. 23. | típusos osztálykonstansok, `#[\Override]`, `json_validate()`, `mb_str_pad()`, `php -l` több fájlra | – |
| 8.4 | 2024. 11. 21. | property hookok, aszimmetrikus láthatóság, `#[\Deprecated]`, új DOM API HTML5-tel, `BcMath\Number`, `array_find()`, lazy objektumok | az implicit nullable paraméterek elavultak; IMAP, OCI8, PDO_OCI, pspell átkerült a PECL-be |
| 8.5 | 2025. 11. 20. | pipe operátor, URI-bővítmény, Clone With, `#[\NoDiscard]`, `array_first()`/`array_last()` | a backtick operátor elavult, a `disable_classes` eltávolítva |

## PHP 8.0 és 8.1: a nagy lépés

A PHP 8.0 érezhetően szigorúbbá és kifejezőbbé tette a nyelvet. A kiadási oldal szerint a belső függvények mostantól következetesen `TypeError` vagy `ValueError` kivételt dobnak, ahelyett, hogy csak figyelmeztetést adnának. A számok és karakterláncok közötti összehasonlítások tisztább szabályokat követnek.

```php
<?php
// PHP 8.0: a match szigorúan hasonlít össze, és nem kell break
$status = 404;
echo match (true) {
    $status >= 500 => 'Serverfehler',
    $status >= 400 => 'Anfragefehler',
    default        => 'in Ordnung',
};

// PHP 8.0: nullsafe operátor
$land = $bestellung?->kunde?->adresse?->land;
```

A PHP 8.1 enumokat hozott, vagyis rögzített értékű felsorolási típusokat, és readonly tulajdonságokat, amelyek csak egyszer állíthatók be:

```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'));
```

A `Rolle::from()` ismeretlen értékeknél hibát dob. Ez megakadályozza, hogy az űrlapokból tetszőleges karakterláncok szerepként átcsússzanak. Aki hiba helyett üres értéket szeretne, a `Rolle::tryFrom()` függvényt használja, amely ismeretlen értékeknél `null`-t ad vissza.

A 8.1-ben újak a Fiberek is, a párhuzamos folyamatok alapja, amelyre az aszinkron feldolgozás programkönyvtárai épülnek. A rendes weboldal-üzemben ebből kevés tűnik fel, a modern keretrendszerekben és üzenetsorokban viszont igen.

## PHP 8.2 és 8.3: takarítás és biztosítás

A PHP 8.2 elavulttá nyilvánította a dinamikus tulajdonságokat. Aki egy objektumnak nem deklarált tulajdonságot ad értékül, figyelmeztetést kap; a `#[\AllowDynamicProperties]` segítségével ez egyes osztályokra engedélyezhető. A régebbi bővítmények ezért gyakran sok üzenetet generálnak a naplóban.

A biztonság szempontjából érdekes az új Random bővítmény, amelynek alapértelmezett randomizere a kiadási oldal szerint kriptográfiailag biztonságos véletlenszám-generátort használ, és a `#[\SensitiveParameter]` attribútum, amely elrejti az olyan értékeket, mint a jelszavak, a stack trace-ekben. A biztonságos véletlen értékekről bővebben a [Biztonságos véletlenszámok és tokenek PHP-ban](https://phpsos.de/hu/blog/sichere-tokens-php/) cikkben olvashat.

A PHP 8.3 típusos osztálykonstansokkal, a metódusok felülírásakor elírások ellen védő `#[\Override]` attribútummal és a `json_validate()` függvénnyel bővült, amely a JSON-t teljes dekódolás nélkül ellenőrzi.

## PHP 8.4 és 8.5: modern nyelvi eszközök

A PHP 8.4 bevezette a property hookokat, vagyis a logikát közvetlenül a tulajdonságoknál, és az aszimmetrikus láthatóságot, például a `public private(set)` formát. Ehhez jött egy új, HTML5-támogatású DOM API és olyan függvények, mint az `array_find()`, az `array_any()` és az `array_all()`. A kiadási oldal szerint az IMAP, OCI8, PDO_OCI és pspell bővítményeket kivették a magból, és a PECL-be helyezték át. Az IMAP-ot is használó alkalmazásoknak ezután külön csomag kell.

A PHP 8.5 hozta a pipe operátort, amely balról jobbra láncolja a hívásokat:

```php
<?php
$slug = '  Neue Produkte 2026  '
    |> trim(...)
    |> strtolower(...)
    |> (fn(string $s): string => str_replace(' ', '-', $s));
// Eredmény: "neue-produkte-2026"
```

Új az URI-bővítmény is, amely a címeket az RFC 3986 és a WHATWG URL szabvány szerint bontja elemeire. Ez biztonsági szempontból releváns, mert az egyenetlenül elemzett URL-ek a megkerült ellenőrzések ismert oka. A backtick operátor, a `shell_exec()` rövid formája, elavult, a `disable_classes` beállítást eltávolították. Aki használta, igazítsa a megerősítését.

## Újdonságok, frissítések és PHP2Shell

Az új nyelvi funkciók nem zárják be az értelmezőben lévő réseket. A PHP2Shell ellen csak az adott ág aktuális patch-állapota segít: 8.5.12, 8.4.27, 8.3.36 vagy 8.2.35. A PHP 8.1-hez és a 8.0-hoz már nincs hivatalos frissítés. Aki ott ragadt, annak frissítenie kell, és ebben az újdonságok keveset segítenek, a törések viszont sokat számítanak.

Egy biztonságos frissítési út öt lépésben:

1. A célverzió kijelölése a gyártó rendszerkövetelményeinek és a [kiadási ciklusnak](https://phpsos.de/hu/php/release-zyklus/) megfelelően.
2. A függőségek Composeren keresztül és a bővítmények kompatibilis állapotra hozása.
3. A kód ellenőrzése a célverzióval szemben statikus elemzéssel és tesztekkel.
4. Kipróbálás tesztkörnyezetben az éles adatok másolatával, a naplók kiértékelése elavulások után.
5. Átállás, az összes PHP-folyamat újraindítása és az állapot dokumentálása.

A típusokról háttérinformációt nyújt [A PHP típusrendszere](https://phpsos.de/hu/php/typsystem/).

## Hogyan segít konkrétan a PHP SOS?

- **Kompatibilitás ellenőrzése:** Elemezzük a kódját és a bővítményeit a célverzióval szembeni törések szempontjából.
- **Frissítés végrehajtása:** A [támogatott PHP-verzióra való migrációval](https://phpsos.de/hu/leistungen/php-migration-legacy/) az alkalmazásokat tesztelten emeljük följebb.
- **A megerősítés igazítása:** Az eltávolított beállításokat, például a `disable_classes`-t hatásos alternatívákkal váltjuk fel.
- **A patch-állapot fenntartása:** A frissítés után naprakészen tartjuk az ágat, és igazoljuk minden újraindítást.


## Gyakori kérdések

**Melyik PHP 8-verziót használjam ma?**  
Új projektekhez a PHP 8.4-et vagy a 8.5-öt, mert ezeket támogatják a legtovább: a 8.4-et 2028 végéig, a 8.5-öt 2029 végéig. Döntő, hogy az alkalmazása a gyártó rendszerkövetelményei szerint mit támogat. A PHP 8.2 2026. december 31-én ér véget.

**Mi romlik el leggyakrabban a PHP 7.4-ről a PHP 8-ra váltáskor?**  
Gyakran a szigorúbb típusellenőrzések: a belső függvények a PHP 8-ban TypeError vagy ValueError kivételt dobnak, ahelyett, hogy csak figyelmeztetést adnának. A számok és karakterláncok közötti megváltozott összehasonlítások is feltűnnek. A statikus elemzés és a tesztek a legtöbbet előre kiderítik.

**Gyorsabbá teszi a JIT a weboldalamat?**  
Többnyire alig. A PHP 8.0 kiadási oldala szerint a tipikus webalkalmazások teljesítménye nagyjából a PHP 7.4 szintjén van, a számításigényes feladatok viszont jelentősen profitálhatnak. A PHP 8.4 óta a JIT alapértelmezetten ki van kapcsolva.

**Mely újdonságok segítik a biztonságot?**  
Többek között a PHP 8.2 új Random bővítménye kriptográfiailag biztonságos alapértelmezéssel, a SensitiveParameter attribútum a jelszavak ellen a stack trace-ekben, az enumok és a readonly tulajdonságok egyértelműbb adatokért, valamint a PHP 8.0 óta következetesebb típushibák.

## Források

- [php.net: PHP 8.0 kiadás](https://www.php.net/releases/8.0/en.php)
- [php.net: PHP 8.4 kiadás](https://www.php.net/releases/8.4/en.php)
- [php.net: PHP 8.5 kiadás](https://www.php.net/releases/8.5/en.php)
- [PHP 8 ChangeLog](https://www.php.net/ChangeLog-8.php)
- [php.net: Támogatott verziók](https://www.php.net/supported-versions.php)
