PHP 8.4: Een Uitgebreid Overzicht van Nieuwe Functies, Verbeteringen en Deprecaties

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.

1. Property Hooks: Versterking van Getters en Setters

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.

2. Asymmetrische Zichtbaarheid: Gedetailleerde Controle over Property Toegang

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.

3. Vereenvoudigde Class Instantiatie: Geen Haakjes Meer Nodig

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.

4. JIT Compiler Verbeteringen: Betere Prestaties en Stabiliteit

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.

5. HTML5 Ondersteuning met \Dom\HTMLDocument

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.

6. Nieuwe Array Functies: Vereenvoudiging van Array 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.

7. Deprecaties en Verwijderingen

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:

Impliciete Nullable Types

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.

Deprecatie van GET/POST Sessie Tracking

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.

8. Aanvullende Opmerkelijke Functies

PHP 8.4 bevat veel andere verbeteringen die het leven van ontwikkelaars gemakkelijker maken:

  • Multibyte String Functies: Nieuwe functies zoals mb_trim(), mb_ltrim() en mb_rtrim() maken het efficiënter om multibyte tekens, zoals die in UTF-8, te trimmen.
  • PDO Subklassen: PHP 8.4 introduceert driver-specifieke PDO-subklassen die toegang geven tot functies die uniek zijn voor individuele database-drivers.
  • Lazy Object Support: Deze functie biedt ondersteuning voor het genereren van ghost-objecten, proxies en andere geavanceerde functies, vooral nuttig voor frameworks en object-relational mappers (ORM's).

Conclusie

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.