Gepubliceerd: 11.11.2024
PHP 8.4, gepland voor release op 21 november 2024, brengt significante updates die gericht zijn op het verbeteren van zowel de prestaties als de ontwikkelaarservaring. Van nieuwe syntaxisverbeteringen tot optimalisaties in bestaande functies, PHP 8.4 zal ontwikkelaars helpen om schonere, snellere en veiligere code te schrijven. In dit blogbericht bespreken we de meest opvallende veranderingen in PHP 8.4, inclusief nieuwe functies, verbeteringen en deprecaties.
Een van de opvallende functies in PHP 8.4 is de introductie van property hooks. Deze functie stelt ontwikkelaars in staat om aangepaste logica te definiëren voor zowel het verkrijgen als het instellen van waarden voor class properties.
Vroeger moesten getters en setters vaak worden geïmplementeerd met boilerplate code. Met property hooks kun je dit proces stroomlijnen en repetitieve code verminderen, waardoor class properties flexibeler worden. Hier is een voorbeeld:
class User { private bool $isModified = false; public function __construct(private string $first, private string $last) {} public string $fullName { get => $this->first . " " . $this->last; set { [$this->first, $this->last] = explode(' ', $value, 2); $this->isModified = true; } } }
In dit voorbeeld heeft de fullName property aangepaste logica voor zowel het verkrijgen als instellen van de waarde, wat intuïtiever is en boilerplatecode vermindert.
PHP 8.4 introduceert asymmetrische zichtbaarheid voor properties, waarmee ontwikkelaars verschillende zichtbaarheidniveaus kunnen specificeren voor het verkrijgen en instellen van waarden. Dit is nuttig voor gevallen waarin je een property publiek leesbaar wilt maken, maar alleen intern of binnen de class wilt kunnen schrijven.
public private(set) string $bar = 'baz';
In dit geval kan $bar publiek worden gelezen, maar kan het alleen binnen de class worden gewijzigd, wat meer controle biedt over hoe je class omgaat met data.
PHP 8.4 maakt het gemakkelijker en natuurlijker om een class te instantieren. Voorheen moest je de class instantieren in haakjes voordat je een methode aanriep. Met PHP 8.4 is dit niet meer nodig, zodat je een class kunt instantieren en een methode in één vloeiende uitdrukking kunt aanroepen:
$request = new Request()->withMethod('GET')->withUri('/hello-world');
Deze wijziging maakt de syntaxis schoner en beknopter, wat vooral voordelig is voor fluënte interfaces.
De Just-In-Time (JIT) compiler van PHP heeft aanzienlijke verbeteringen ondergaan in PHP 8.4. Deze updates maken het beheren van JIT gemakkelijker en verbeteren de algehele prestaties. De wijzigingen zouden de uitvoeringssnelheid van PHP moeten optimaliseren, vooral in prestatiekritische toepassingen.
Bovendien is de manier waarop JIT wordt geactiveerd vereenvoudigd. In PHP 8.4 hoeven ontwikkelaars JIT niet handmatig uit te schakelen door opcache.jit_buffer_size op 0 in te stellen. In plaats daarvan is de instelling opcache.jit=disable beschikbaar, en kan JIT weer worden geactiveerd door opcache.jit=tracing op te geven.
Voor ontwikkelaars die met HTML werken, brengt PHP 8.4 robuuste ondersteuning voor HTML5 via een nieuwe class, \Dom\HTMLDocument. Deze class is speciaal ontworpen om HTML5-documenten te verwerken, met betere mogelijkheden voor parsing en documentopbouw dan de oudere \DOMDocument class, die nog steeds beschikbaar is voor achterwaartse compatibiliteit.
Dit is vooral nuttig bij het werken met complexe HTML-structuren, omdat het zorgt voor een soepelere en nauwkeurigere DOM-manipulatie.
PHP 8.4 introduceert verschillende nieuwe array-functies die het werken met arrays vereenvoudigen. Deze omvatten:
array_find
: Zoekt naar een waarde in een array en retourneert de waarde wanneer deze wordt gevonden.array_find_key
: Zoekt naar een sleutel in een array en retourneert de sleutel.array_any
: Controleert of een waarde in de array voldoet aan de opgegeven voorwaarde.array_all
: Controleert of alle waarden in de array voldoen aan de opgegeven voorwaarde.Deze functies verbeteren de flexibiliteit van array-bewerkingen en stellen ontwikkelaars in staat om meer beknopte en leesbare code te schrijven.
Zoals bij elke nieuwe PHP-versie deprecateert PHP 8.4 bepaalde functies om de taal schoner en beter onderhoudbaar te maken. Enkele van de belangrijkste deprecaties in PHP 8.4 zijn:
In eerdere versies van PHP werd een variabele met een standaardwaarde van null automatisch als nullable beschouwd. In PHP 8.4 is dit impliciete gedrag gedepréciëerd. Ontwikkelaars moeten nu expliciet nullable types definiëren met de ?
syntaxis of union types.
function foo(T1 $a, T2 $b = null, T3 $c) {}
Moet nu expliciet worden geschreven als:
function bar(T1 $a, ?T2 $b = null, T3 $c) {}
Dit zorgt voor duidelijkere type-definities en betere leesbaarheid van de code.
PHP 8.4 markeert ook de deprecatie van GET/POST sessie tracking voor webapplicaties. Voorheen konden sessie-identificatoren via URL-parameters (GET) of formulierdata (POST) worden doorgegeven. Deze praktijk is nu gedepréciëerd ten gunste van het gebruik van cookies voor sessiebeheer. PHP geeft een deprecatie-waarschuwing als deze instellingen zijn ingeschakeld.
PHP 8.4 bevat veel andere verbeteringen die het leven van ontwikkelaars gemakkelijker maken:
mb_trim()
, mb_ltrim()
en mb_rtrim()
maken het efficiënter om multibyte tekens, zoals die in UTF-8, te trimmen.PHP 8.4 belooft een krachtige release te worden die belangrijke problemen aanpakt op het gebied van ontwikkelaarsproductiviteit, prestaties en codekwaliteit. Met nieuwe functies zoals property hooks, asymmetrische zichtbaarheid en betere ondersteuning voor HTML5, evenals verbeteringen aan de JIT-compiler en array-functies, maakt PHP 8.4 het gemakkelijker dan ooit om schone, presterende en veilige PHP-code te schrijven. Ontwikkelaars moeten zich echter ook bewust zijn van belangrijke deprecaties, zoals impliciete nullable types en GET/POST sessie tracking, om een soepele overgang bij het upgraden te waarborgen.
Nu de release van PHP 8.4 nadert, is het een goed moment om je voor te bereiden op de wijzigingen en te verkennen hoe deze nieuwe functies je ontwikkelproces kunnen verbeteren.
Recente blog posts