Actuele situatie: PHP2Shell. Twee kritieke PHP-kwetsbaarheden (CVSS 9.2) maken schadelijke code zonder inloggen mogelijk. Patches sinds 21-10-2026.Wat u nu moet doen →

PHP 8.0 tot 8.5: de belangrijkste nieuwigheden

Van match en JIT in PHP 8.0 tot pipe-operator en URI-extensie in PHP 8.5: de nieuwigheden van elke versie, de struikelblokken bij het upgraden en wat ze voor de beveiliging opleveren.

Stand 5 min. leestijdPHP-kennis

Kort gezegd: PHP 8.0 (november 2020) bracht benoemde argumenten, attributen, uniontypen, match, de nullsafe-operator en een JIT-compiler. Daarna volgden jaarlijks: 8.1 met enums en fibers, 8.2 met readonly-klassen, 8.3 met getypeerde klasseconstanten, 8.4 met property hooks en 8.5 met pipe-operator en URI-extensie. Elke versie keurt ook oude zaken af. Bij het upgraden tellen daarom tests, en voor de beveiliging telt vooral het draaien van een ondersteunde tak met actuele patchstand.

De nieuwigheden van PHP 8 in overzicht

De tabel vat de kernpunten van de releasepagina's van php.net samen. Data van de eerste publicatie volgens php.net.

Versie Verschenen Belangrijkste nieuwigheden Selectie afgekeurd en incompatibel
8.0 26-11-2020 benoemde argumenten, attributen, constructor property promotion, uniontypen, match, ?->, JIT 0 == 'foobar' is nu false, typefouten in plaats van waarschuwingen
8.1 25-11-2021 enums, readonly-eigenschappen, first-class callables strlen(...), new in initialisaties, intersectietypen, never, fibers –
8.2 08-12-2022 readonly-klassen, DNF-typen, null/false/true als typen, Random-extensie, constanten in traits, #[\SensitiveParameter] dynamische eigenschappen afgekeurd
8.3 23-11-2023 getypeerde klasseconstanten, #[\Override], json_validate(), mb_str_pad(), php -l voor meerdere bestanden –
8.4 21-11-2024 property hooks, asymmetrische zichtbaarheid, #[\Deprecated], nieuwe DOM-API met HTML5, BcMath\Number, array_find(), lazy objects impliciet nullable parameters afgekeurd; IMAP, OCI8, PDO_OCI, pspell naar PECL
8.5 20-11-2025 pipe-operator, URI-extensie, clone with, #[\NoDiscard], array_first()/array_last() backtick-operator afgekeurd, disable_classes verwijderd

PHP 8.0 en 8.1: de grote stap

PHP 8.0 heeft de taal merkbaar strenger en expressiever gemaakt. Volgens de releasepagina gooien interne functies nu consequent TypeError of ValueError in plaats van alleen waarschuwingen te geven. Vergelijkingen tussen getallen en tekenreeksen volgen zuiverder regels.

<?php
// PHP 8.0: match vergelijkt strikt en heeft geen break nodig
$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 bracht enums, dus opsommingstypen met vaste waarden, en readonly-eigenschappen die maar één keer kunnen worden ingesteld:

<?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() gooit een fout bij onbekende waarden. Dat voorkomt dat willekeurige tekenreeksen uit formulieren als rol doorglippen. Wie in plaats van een fout een lege waarde nodig heeft, gebruikt Rolle::tryFrom(), dat bij onbekende waarden null teruggeeft.

Eveneens nieuw in 8.1 zijn fibers, een basis voor gelijktijdige verwerking waarop bibliotheken voor asynchrone verwerking voortbouwen. In de normale websitepraktijk merkt men daar weinig van, in moderne frameworks en wachtrijen daarentegen wel.

PHP 8.2 en 8.3: opruimen en beveiligen

PHP 8.2 keurde dynamische eigenschappen af. Wie een object een niet-gedeclareerde eigenschap toewijst, krijgt een melding; met #[\AllowDynamicProperties] kan dat voor afzonderlijke klassen worden toegestaan. Oudere plug-ins zorgen daarom vaak voor veel meldingen in het log.

Voor de beveiliging interessant zijn de nieuwe Random-extensie, waarvan de standaardrandomizer volgens de releasepagina een cryptografisch veilige toevalsgenerator gebruikt, en het attribuut #[\SensitiveParameter], dat waarden als wachtwoorden in stacktraces verbergt. Meer over veilige toevalswaarden onder Veilige willekeurige getallen en tokens in PHP.

PHP 8.3 voegde getypeerde klasseconstanten toe, het attribuut #[\Override] tegen typefouten bij het overschrijven van methoden en json_validate(), dat JSON controleert zonder het volledig te decoderen.

PHP 8.4 en 8.5: moderne taalmiddelen

PHP 8.4 voerde property hooks in, dus logica direct aan eigenschappen, en asymmetrische zichtbaarheid zoals public private(set). Daarbij kwamen een nieuwe DOM-API met HTML5-ondersteuning en functies als array_find(), array_any() en array_all(). Volgens de releasepagina zijn de extensies IMAP, OCI8, PDO_OCI en pspell uit de kern naar PECL verplaatst. Toepassingen die bijvoorbeeld IMAP gebruiken, hebben dan een apart pakket nodig.

PHP 8.5 bracht de pipe-operator, die aanroepen van links naar rechts aaneenschakelt:

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

Nieuw is ook een URI-extensie die adressen volgens RFC 3986 en de WHATWG-URL-standaard ontleedt. Dat is voor de beveiliging relevant, omdat onderling verschillend ontlede URL's een bekende oorzaak van omzeilde controles zijn. De backtick-operator als verkorte vorm van shell_exec() is afgekeurd, de instelling disable_classes is verwijderd. Wie die gebruikte, moet zijn hardening aanpassen.

Nieuwigheden, upgrades en PHP2Shell

Nieuwe taalfuncties dichten geen lekken in de interpreter. Tegen PHP2Shell helpt alleen de actuele patchstand van de betreffende tak: 8.5.12, 8.4.27, 8.3.36 of 8.2.35. Voor PHP 8.1 en 8.0 zijn er geen officiële updates meer. Wie daar vastzit, moet upgraden, en daarbij helpen de nieuwigheden weinig, de incompatibiliteiten daarentegen veel.

Een veilige upgrade-aanpak in vijf stappen:

  1. Doelversie vastleggen, passend bij de systeemvereisten van de fabrikant en de releasecyclus.
  2. Afhankelijkheden via Composer en plug-ins naar compatibele standen brengen.
  3. Code met statische analyse en tests tegen de doelversie controleren.
  4. In een testomgeving met een kopie van de productiegegevens uitproberen en de logs op afkeuringen analyseren.
  5. Omschakelen, alle PHP-processen opnieuw starten en de stand documenteren.

Achtergronden over typen biedt Het typesysteem van PHP.

Hoe helpt PHP SOS concreet?

  • Compatibiliteit controleren: Wij analyseren uw code en uw extensies op incompatibiliteiten met de doelversie.
  • Upgrade uitvoeren: Met de migratie naar een ondersteunde PHP-versie tillen wij toepassingen getest omhoog.
  • Hardening aanpassen: Wij vervangen verwijderde instellingen als disable_classes door werkzame alternatieven.
  • Patchstand bijhouden: Na de upgrade houden wij de tak actueel en leggen elke herstart vast.

Veelgestelde vragen

Welke PHP 8-versie moet ik vandaag gebruiken?

Voor nieuwe projecten PHP 8.4 of 8.5, omdat ze het langst worden ondersteund: 8.4 tot eind 2028, 8.5 tot eind 2029. Beslissend is wat uw toepassing volgens de systeemvereisten van de fabrikant ondersteunt. PHP 8.2 eindigt op 31 december 2026.

Wat breekt het vaakst bij de overstap van PHP 7.4 naar PHP 8?

Vaak zijn het strengere typecontroles: interne functies gooien in PHP 8 TypeError of ValueError in plaats van alleen waarschuwingen te geven. Ook gewijzigde vergelijkingen tussen getallen en tekenreeksen vallen op. Statische analyse en tests brengen het meeste vooraf aan het licht.

Maakt de JIT mijn website sneller?

Meestal nauwelijks. Volgens de releasepagina van PHP 8.0 ligt de prestatie van typische webtoepassingen ongeveer op het niveau van PHP 7.4, terwijl rekenintensieve taken duidelijk kunnen profiteren. Sinds PHP 8.4 staat de JIT standaard uitgeschakeld.

Welke nieuwigheden helpen de beveiliging?

Onder meer de nieuwe Random-extensie in PHP 8.2 met cryptografisch veilige standaard, het attribuut SensitiveParameter tegen wachtwoorden in stacktraces, enums en readonly-eigenschappen voor eenduidiger gegevens en de consequentere typefouten sinds PHP 8.0.

Bronnen

Direct contact

Elk uur telt. Schrijf ons nu.

Beschrijf kort het systeem, de PHP-versie en wat u opmerkt. Wij nemen contact op, brengen de situatie in kaart en werken op afstand tot het incident is afgerond en gedocumenteerd.

Directe hulp