# PHP 8.0 kuni 8.5: olulisimad uuendused

> PHP 8 uuendused versioonides 8.0 kuni 8.5: olulisimad funktsioonid, koodinäited, kasutuselt kõrvaldamised ja turvalisuse seisukohast oluline.

Allikas: https://phpsos.de/et/php/php-8-neuerungen/  
Seis: 25.10.2026  
Pakkuja: PHP SOS, PHP hädaabi ja serveri turvalisus. Kohene abi WhatsAppis: https://wa.me/491736494914?text=Tere%2C%20PHP%20SOS%2C%20vajame%20abi%20oma%20PHP-serveriga.%20Ettev%C3%B5te%3A%20%E2%80%A6%20Veebisait%3A%20%E2%80%A6

**Lühidalt:** PHP 8.0 (november 2020) tõi nimelised argumendid, atribuudid, ühendtüübid, `match`-i, nullsafe-operaatori ja JIT-kompilaatori. Seejärel järgnesid iga-aastased väljalasked: 8.1 enumide ja fiberitega, 8.2 readonly-klassidega, 8.3 tüpiseeritud klassikonstantidega, 8.4 Property Hooksiga ja 8.5 toruoperaatori ning URI-laiendiga. Iga versioon kuulutab ka vana kasutuselt kõrvaldatuks. Uuendamisel loevad seetõttu testid ja turvalisuse jaoks loeb eelkõige toetatud haru kasutamine ajakohase paikaseisuga.

## PHP 8 uuendused ülevaatlikult

Tabel võtab kokku php.net-i väljalaskelehtede põhipunktid. Esmase väljalaske kuupäevad php.net-i järgi.

| Versioon | Ilmus | Olulisemad uuendused | Valik kasutuselt kõrvaldamisi ja murdeid |
|---|---|---|---|
| 8.0 | 26.11.2020 | nimelised argumendid, atribuudid, Constructor Property Promotion, ühendtüübid, `match`, `?->`, JIT | `0 == 'foobar'` on nüüd `false`, tüübivead hoiatuste asemel |
| 8.1 | 25.11.2021 | enumid, readonly-omadused, First-Class-Callables `strlen(...)`, `new` initsialiseerijates, ristumistüübid, `never`, fiberid | – |
| 8.2 | 08.12.2022 | readonly-klassid, DNF-tüübid, `null`/`false`/`true` tüüpidena, Random-laiendus, konstandid traitides, `#[\SensitiveParameter]` | dünaamilised omadused kuulutati kasutuselt kõrvaldatuks |
| 8.3 | 23.11.2023 | tüpiseeritud klassikonstandid, `#[\Override]`, `json_validate()`, `mb_str_pad()`, `php -l` mitme faili jaoks | – |
| 8.4 | 21.11.2024 | Property Hooks, asümmeetriline nähtavus, `#[\Deprecated]`, uus DOM API HTML5-ga, `BcMath\Number`, `array_find()`, Lazy Objects | implitsiitselt nullable parameetrid kõrvaldati kasutuselt; IMAP, OCI8, PDO_OCI, pspell PECL-i |
| 8.5 | 20.11.2025 | toruoperaator, URI-laiendus, Clone With, `#[\NoDiscard]`, `array_first()`/`array_last()` | tagurpidi ülakoma operaator kõrvaldati kasutuselt, `disable_classes` eemaldati |

## PHP 8.0 ja 8.1: suur samm

PHP 8.0 tegi keele märgatavalt rangemaks ja väljendusrikkamaks. Väljalaskelehe järgi viskavad sisemised funktsioonid nüüd järjekindlalt `TypeError` või `ValueError`, selle asemel et ainult hoiatusi väljastada. Võrdlused arvude ja sõnede vahel järgivad puhtamaid reegleid.

```php
<?php
// PHP 8.0: match võrdleb rangelt ega vaja break'i
$status = 404;
echo match (true) {
    $status >= 500 => 'Serverfehler',
    $status >= 400 => 'Anfragefehler',
    default        => 'in Ordnung',
};

// PHP 8.0: nullsafe-operaator
$land = $bestellung?->kunde?->adresse?->land;
```

PHP 8.1 tõi enumid ehk kindlate väärtustega loendustüübid ja readonly-omadused, mida saab seada ainult üks kord:

```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()` viskab tundmatute väärtuste korral vea. See takistab, et vormidest tulevad suvalised sõned rollina läbi lipsaksid. Kes vajab vea asemel tühja väärtust, kasutab `Rolle::tryFrom()`, mis tundmatute väärtuste korral tagastab `null`.

Samuti uued PHP 8.1-s on fiberid, samaaegsete kulgude alus, millele toetuvad asünkroonse töötluse teegid. Tavalises veebisaidi käitamises sellest vähe märgata, kaasaegsetes raamistikes ja järjekordades aga küll.

## PHP 8.2 ja 8.3: korrastamine ja kaitsmine

PHP 8.2 kuulutas dünaamilised omadused kasutuselt kõrvaldatuks. Kes omistab objektile deklareerimata omaduse, saab märkuse; `#[\AllowDynamicProperties]` abil saab seda üksikute klasside jaoks lubada. Vanemad pistikprogrammid tekitavad seetõttu logisse sageli palju teateid.

Turvalisuse seisukohast huvitavad on uus Random-laiendus, mille vaikimisi randomizer kasutab väljalaskelehe järgi krüptograafiliselt turvalist juhuslikkusegeneraatorit, ja atribuut `#[\SensitiveParameter]`, mis peidab väärtused nagu paroolid stacktrace'ides. Lisateavet turvaliste juhuslike väärtuste kohta leiate lehelt [Turvalised juhuslikud arvud ja tokenid PHP-s](https://phpsos.de/et/blog/sichere-tokens-php/).

PHP 8.3 täiendas tüpiseeritud klassikonstante, atribuuti `#[\Override]` trükivigade vastu meetodite ülekirjutamisel ja funktsiooni `json_validate()`, mis kontrollib JSON-i, seda täielikult dekodeerimata.

## PHP 8.4 ja 8.5: kaasaegsed keelevahendid

PHP 8.4 tõi sisse Property Hooks'i ehk loogika otse omaduste juures ja asümmeetrilise nähtavuse nagu `public private(set)`. Lisandusid uus DOM API HTML5 toega ning funktsioonid nagu `array_find()`, `array_any()` ja `array_all()`. Väljalaskelehe järgi viidi laiendused IMAP, OCI8, PDO_OCI ja pspell tuumast PECL-i. Rakendused, mis kasutavad näiteks IMAP-i, vajavad seejärel eraldi paketti.

PHP 8.5 tõi toruoperaatori, mis aheldab väljakutsed vasakult paremale:

```php
<?php
$slug = '  Neue Produkte 2026  '
    |> trim(...)
    |> strtolower(...)
    |> (fn(string $s): string => str_replace(' ', '-', $s));
// Tulemus: "neue-produkte-2026"
```

Uus on ka URI-laiendus, mis jaotab aadresse RFC 3986 ja WHATWG-URL standardi järgi. See on turvalisuse seisukohast oluline, sest ebaühtlaselt parsitud URL-id on tuntud põhjus möödaläinud kontrollidele. Tagurpidi ülakoma operaator `shell_exec()` lühivormina on kasutuselt kõrvaldatud, säte `disable_classes` eemaldati. Kes seda kasutas, peaks oma karastamist kohandama.

## Uuendused, ülemineku ja PHP2Shell

Uued keelefunktsioonid ei sulge interpretaatoris olevaid auke. PHP2Shelli vastu aitab ainult vastava haru ajakohane paikaseis: 8.5.12, 8.4.27, 8.3.36 või 8.2.35. PHP 8.1 ja 8.0 jaoks ametlikke uuendusi enam ei ole. Kes sinna kinni jääb, peab uuendama ja selles aitavad uuendused vähe, murded aga palju.

Turvaline uuendustee viies sammus:

1. Määrake sihtversioon, sobitatuna tootja süsteeminõuete ja [väljalasketsükliga](https://phpsos.de/et/php/release-zyklus/).
2. Viige sõltuvused Composeri kaudu ja pistikprogrammid ühilduvale seisule.
3. Kontrollige koodi staatilise analüüsi ja testidega sihtversiooni vastu.
4. Proovige testkeskkonnas tootmisandmete koopiaga, hinnake logisid kasutuselt kõrvaldamiste osas.
5. Lülituge ümber, käivitage kõik PHP protsessid uuesti ja dokumenteerige seis.

Taustu tüüpide kohta annab [PHP tüübisüsteem](https://phpsos.de/et/php/typsystem/).

## Kuidas PHP SOS konkreetselt aitab?

- **Ühilduvuse kontroll:** Analüüsime teie koodi ja laiendusi murrete osas sihtversiooni suhtes.
- **Uuendamise läbiviimine:** [Migratsiooniga toetatud PHP versioonile](https://phpsos.de/et/leistungen/php-migration-legacy/) tõstame rakendused testituna.
- **Karastamise kohandamine:** Asendame eemaldatud sätted nagu `disable_classes` toimivate alternatiividega.
- **Paikaseisu hoidmine:** Pärast uuendust hoiame haru ajakohasena ja tõendame iga taaskäivituse.


## Korduma kippuvad küsimused

**Millist PHP 8 versiooni peaksin täna kasutama?**  
Uute projektide jaoks PHP 8.4 või 8.5, sest neid toetatakse kõige kauem: 8.4 kuni 2028. aasta lõpuni, 8.5 kuni 2029. aasta lõpuni. Otsustav on, mida teie rakendus tootja süsteeminõuete järgi toetab. PHP 8.2 lõpeb 31. detsembril 2026.

**Mis läheb PHP 7.4-lt PHP 8-le üleminekul kõige sagedamini katki?**  
Sageli on need rangemad tüübikontrollid: sisemised funktsioonid viskavad PHP 8-s TypeError või ValueError, selle asemel et ainult hoiatusi väljastada. Silma jäävad ka muutunud võrdlused arvude ja sõnede vahel. Staatiline analüüs ja testid paljastavad suurema osa ette ära.

**Kas JIT teeb minu veebisaidi kiiremaks?**  
Enamasti vaevu. PHP 8.0 väljalaskelehe järgi on tüüpiliste veebirakenduste jõudlus ligikaudu PHP 7.4 tasemel, samal ajal kui arvutusmahukad ülesanded võivad märgatavalt võita. Alates PHP 8.4-st on JIT vaikimisi välja lülitatud.

**Millised uuendused turvalisust aitavad?**  
Muu hulgas PHP 8.2 uus Random-laiendus krüptograafiliselt turvalise vaikeväärtusega, atribuut SensitiveParameter paroolide vastu stacktrace'ides, enumid ja readonly-omadused ühemõttelisemate andmete jaoks ning PHP 8.0-st alates järjekindlamad tüübivead.

## Allikad

- [php.net: PHP 8.0 väljalase](https://www.php.net/releases/8.0/en.php)
- [php.net: PHP 8.4 väljalase](https://www.php.net/releases/8.4/en.php)
- [php.net: PHP 8.5 väljalase](https://www.php.net/releases/8.5/en.php)
- [PHP 8 ChangeLog](https://www.php.net/ChangeLog-8.php)
- [php.net: toetatud versioonid](https://www.php.net/supported-versions.php)
