Situația actuală: PHP2Shell. Două vulnerabilități critice PHP (CVSS 9.2) permit cod malițios fără autentificare. Patchuri din 21.10.2026.Ce este de făcut acum →

PHP 8.0 până la 8.5: cele mai importante noutăți

De la match și JIT în PHP 8.0 până la operatorul pipe și extensia URI în PHP 8.5: noutățile fiecărei versiuni, capcanele la upgrade și ce aduc pentru securitate.

Stadiu 5 min de cititCunoștințe PHP

Pe scurt: PHP 8.0 (noiembrie 2020) a adus argumente denumite, atribute, tipuri union, match, operatorul nullsafe și un compilator JIT. Apoi au urmat anual: 8.1 cu enum-uri și Fibers, 8.2 cu clase readonly, 8.3 cu constante de clasă tipizate, 8.4 cu Property Hooks și 8.5 cu operatorul pipe și extensia URI. Fiecare versiune depreciază și lucruri vechi. La upgrade contează de aceea testele, iar pentru securitate contează mai ales să operați o ramură suportată, cu o stare de patch actuală.

Noutățile PHP 8 pe scurt

Tabelul rezumă punctele principale din paginile de lansare de pe php.net. Datele primei lansări conform php.net.

Versiune Apărută Cele mai importante noutăți Selecție de depreciări și incompatibilități
8.0 26.11.2020 argumente denumite, atribute, Constructor Property Promotion, tipuri union, match, ?->, JIT 0 == 'foobar' este acum false, erori de tip în loc de avertismente
8.1 25.11.2021 enum-uri, proprietăți readonly, First-Class Callables strlen(...), new în inițializatori, tipuri intersection, never, Fibers –
8.2 08.12.2022 clase readonly, tipuri DNF, null/false/true ca tipuri, extensia Random, constante în trait-uri, #[\SensitiveParameter] proprietăți dinamice depreciate
8.3 23.11.2023 constante de clasă tipizate, #[\Override], json_validate(), mb_str_pad(), php -l pentru mai multe fișiere –
8.4 21.11.2024 Property Hooks, vizibilitate asimetrică, #[\Deprecated], API DOM nou cu HTML5, BcMath\Number, array_find(), Lazy Objects parametri nullable implicit depreciați; IMAP, OCI8, PDO_OCI, pspell mutate în PECL
8.5 20.11.2025 operatorul pipe, extensia URI, Clone With, #[\NoDiscard], array_first()/array_last() operatorul backtick depreciat, disable_classes eliminat

PHP 8.0 și 8.1: pasul cel mare

PHP 8.0 a făcut limbajul vizibil mai strict și mai expresiv. Potrivit paginii de lansare, funcțiile interne aruncă acum consecvent TypeError sau ValueError, în loc să afișeze doar avertismente. Comparațiile între numere și șiruri de caractere urmează reguli mai curate.

<?php
// PHP 8.0: match compară strict și nu are nevoie de break
$status = 404;
echo match (true) {
    $status >= 500 => 'Serverfehler',
    $status >= 400 => 'Anfragefehler',
    default        => 'in Ordnung',
};

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

PHP 8.1 a adus enum-urile, adică tipuri de enumerare cu valori fixe, și proprietățile readonly, care pot fi setate o singură dată:

<?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() aruncă o eroare la valori necunoscute. Asta împiedică strecurarea unor șiruri arbitrare din formulare drept rol. Cine are nevoie de o valoare goală în loc de o eroare folosește Rolle::tryFrom(), care returnează null la valori necunoscute.

Tot nou în 8.1 sunt Fibers, o bază pentru fluxuri concurente, pe care se construiesc bibliotecile de procesare asincronă. În funcționarea obișnuită a unui site se observă puțin din asta, în schimb se observă în framework-urile moderne și în cozile de așteptare.

PHP 8.2 și 8.3: curățenie și securizare

PHP 8.2 a depreciat proprietățile dinamice. Cine atribuie unui obiect o proprietate nedeclarată primește o notificare; cu #[\AllowDynamicProperties] se poate permite aceasta pentru clase individuale. Pluginurile mai vechi generează de aceea adesea multe mesaje în log.

Interesante pentru securitate sunt noua extensie Random, al cărei randomizer implicit folosește, potrivit paginii de lansare, un generator de numere aleatoare sigur criptografic, și atributul #[\SensitiveParameter], care ascunde în stacktrace-uri valori precum parolele. Mai multe despre valori aleatoare sigure la Numere aleatoare și tokeni sigure în PHP.

PHP 8.3 a adăugat constante de clasă tipizate, atributul #[\Override] împotriva greșelilor de scriere la suprascrierea metodelor și json_validate(), care verifică JSON fără a-l decoda complet.

PHP 8.4 și 8.5: mijloace moderne de limbaj

PHP 8.4 a introdus Property Hooks, adică logică direct la proprietăți, și vizibilitate asimetrică precum public private(set). La acestea s-au adăugat un API DOM nou cu suport HTML5 și funcții precum array_find(), array_any() și array_all(). Potrivit paginii de lansare, extensiile IMAP, OCI8, PDO_OCI și pspell au fost mutate din nucleu în PECL. Aplicațiile care folosesc, de exemplu, IMAP au nevoie atunci de un pachet separat.

PHP 8.5 a adus operatorul pipe, care înlănțuie apelurile de la stânga la dreapta:

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

Nouă este și o extensie URI, care descompune adresele conform RFC 3986 și standardului WHATWG URL. Este relevant pentru securitate, deoarece URL-urile interpretate neuniform sunt o cauză cunoscută a verificărilor ocolite. Operatorul backtick, ca formă scurtă pentru shell_exec(), este depreciat, iar setarea disable_classes a fost eliminată. Cine a folosit-o ar trebui să-și adapteze întărirea.

Noutăți, upgrade-uri și PHP2Shell

Funcțiile noi de limbaj nu închid vulnerabilități din interpretor. Împotriva PHP2Shell ajută doar starea de patch actuală a ramurii respective: 8.5.12, 8.4.27, 8.3.36 sau 8.2.35. Pentru PHP 8.1 și 8.0 nu mai există actualizări oficiale. Cine rămâne acolo trebuie să facă upgrade, iar la asta noutățile ajută puțin, incompatibilitățile în schimb mult.

O cale sigură de upgrade în cinci pași:

  1. Stabiliți versiunea țintă, potrivit cerințelor de sistem ale producătorului și ciclului de lansare.
  2. Aduceți dependențele prin Composer și pluginurile la versiuni compatibile.
  3. Verificați codul cu analiză statică și teste față de versiunea țintă.
  4. Încercați într-un mediu de test cu o copie a datelor de producție, evaluați log-urile pentru depreciări.
  5. Treceți, reporniți toate procesele PHP și documentați starea.

Contextul despre tipuri îl oferă Sistemul de tipuri al PHP.

Cum ajută PHP SOS concret?

  • Verificarea compatibilității: Analizăm codul și extensiile dumneavoastră în căutarea incompatibilităților față de versiunea țintă.
  • Efectuarea upgrade-ului: Prin migrarea la o versiune PHP suportată ridicăm aplicațiile, cu testare.
  • Adaptarea întăririi: Înlocuim setările eliminate, precum disable_classes, cu alternative eficiente.
  • Menținerea stării de patch: După upgrade menținem ramura actualizată și dovedim fiecare repornire.

Întrebări frecvente

Ce versiune PHP 8 ar trebui să folosesc astăzi?

Pentru proiecte noi, PHP 8.4 sau 8.5, deoarece sunt suportate cel mai mult timp: 8.4 până la sfârșitul lui 2028, 8.5 până la sfârșitul lui 2029. Decisiv este ce suportă aplicația dumneavoastră, conform cerințelor de sistem ale producătorului. PHP 8.2 se încheie la 31 decembrie 2026.

Ce se strică cel mai des la trecerea de la PHP 7.4 la PHP 8?

Adesea sunt verificările de tip mai stricte: funcțiile interne aruncă în PHP 8 TypeError sau ValueError în loc să afișeze doar avertismente. Atrag atenția și comparațiile modificate între numere și șiruri de caractere. Analiza statică și testele descoperă cea mai mare parte în prealabil.

Îmi face JIT site-ul mai rapid?

De obicei abia. Potrivit paginii de lansare PHP 8.0, performanța aplicațiilor web tipice este aproximativ la nivelul PHP 7.4, în timp ce sarcinile care cer mult calcul pot beneficia clar. Din PHP 8.4, JIT este dezactivat implicit.

Ce noutăți ajută securitatea?

Printre altele noua extensie Random din PHP 8.2, cu o valoare implicită sigură criptografic, atributul SensitiveParameter împotriva parolelor din stacktrace-uri, enum-urile și proprietățile readonly pentru date mai clare, precum și erorile de tip mai consecvente din PHP 8.0.

Surse

Contact imediat

Fiecare oră contează. Scrieți-ne acum.

Descrieți pe scurt sistemul, versiunea PHP și ce ați observat. Ne vom face auziți, clarificăm situația și lucrăm la distanță până când incidentul este încheiat și documentat.

Ajutor imediat