Sortie de PHP 8.4 : découverte des fonctionnalités

10 février 2025 - Modifié le 20 février 2025

PHP 8.4 introduit des fonctionnalités majeures comme les hooks de propriétés, une visibilité asymétrique pour les propriétés, une nouvelle API DOM conforme aux standards HTML5, et des optimisations de performances. Plongez dans cette version pour explorer ses avancées techniques et ...

PHP 8.4 est une mise à jour majeure du langage PHP. Elle introduit de nombreuses nouvelles fonctionnalités, telles que les hooks de propriétés, la visibilité asymétrique, une API DOM mise à jour, des améliorations de performances, des corrections de bugs et un nettoyage général.

logo php 8.4

Hooks de propriété

Les hooks de propriété offrent un support pour les propriétés calculées, compréhensibles nativement par les IDE et les outils d’analyse statique, sans avoir besoin d’écrire des commentaires docblock susceptibles de devenir obsolètes. De plus, ils permettent un pré- ou post-traitement fiable des valeurs, sans nécessiter de vérifier l’existence de getters ou setters correspondants dans la classe.

Exemple avant PHP 8.4 :

class Locale
{
    private string $languageCode;
    private string $countryCode;

    public function __construct(string $languageCode, string $countryCode)
    {
        $this->setLanguageCode($languageCode);
        $this->setCountryCode($countryCode);
    }

    public function getLanguageCode(): string
    {
        return $this->languageCode;
    }

    public function setLanguageCode(string $languageCode): void
    {
        $this->languageCode = $languageCode;
    }

    public function getCountryCode(): string
    {
        return $this->countryCode;
    }

    public function setCountryCode(string $countryCode): void
    {
        $this->countryCode = strtoupper($countryCode);
    }

    public function setCombinedCode(string $combinedCode): void
    {
        [$languageCode, $countryCode] = explode('_', $combinedCode, 2);
        $this->setLanguageCode($languageCode);
        $this->setCountryCode($countryCode);
    }

    public function getCombinedCode(): string
    {
        return sprintf("%s_%s", $this->languageCode, $this->countryCode);
    }
}

$brazilianPortuguese = new Locale('pt', 'br');
var_dump($brazilianPortuguese->getCountryCode()); // BR
var_dump($brazilianPortuguese->getCombinedCode()); // pt_BR

Exemple avec PHP 8.4 :


class Locale
{
    public string $languageCode;

    public string $countryCode {
        set (string $countryCode) {
            $this->countryCode = strtoupper($countryCode);
        }
    }

    public string $combinedCode {
        get => \\sprintf("%s_%s", $this->languageCode, $this->countryCode);
        set (string $value) {
            [$this->languageCode, $this->countryCode] = explode('_', $value, 2);
        }
    }

    public function __construct(string $languageCode, string $countryCode)
    {
        $this->languageCode = $languageCode;
        $this->countryCode = $countryCode;
    }
}

$brazilianPortuguese = new Locale('pt', 'br');
var_dump($brazilianPortuguese->countryCode); // BR
var_dump($brazilianPortuguese->combinedCode); // pt_BR

Visibilité asymétrique

La portée d’écriture d’une propriété peut désormais être contrôlée indépendamment de sa portée de lecture, réduisant ainsi le besoin de méthodes getter redondantes pour exposer la valeur d’une propriété sans permettre sa modification depuis l’extérieur d’une classe.

Exemple avant PHP 8.4 :

class PhpVersion
{
    private string $version = '8.3';

    public function getVersion(): string
    {
        return $this->version;
    }

    public function increment(): void
    {
        [$major, $minor] = explode('.', $this->version);
        $minor++;
        $this->version = "{$major}.{$minor}";
    }
}

Exemple avec PHP 8.4 :


class PhpVersion
{
    public private(set) string $version = '8.4';

    public function increment(): void
    {
        [$major, $minor] = explode('.', $this->version);
        $minor++;
        $this->version = "{$major}.{$minor}";
    }
}

Nouvelle API DOM et prise en charge de HTML5

PHP 8.4 introduit une nouvelle API DOM offrant une prise en charge conforme aux standards pour l’analyse des documents HTML5, corrigeant plusieurs bogues de conformité de longue date dans le comportement des fonctionnalités DOM et ajoutant plusieurs fonctions pour faciliter la manipulation des documents. La nouvelle API DOM est disponible dans l’espace de noms Dom. Les documents utilisant cette API peuvent être créés en utilisant les classes Dom\\HTMLDocument et Dom\\XMLDocument.

Exemple avant PHP 8.4 :

$dom = new DOMDocument();
$dom->loadHTML(<<<'HTML'
<main>
    <article>PHP 8.4 is a feature-rich release!</article>
    <article class="featured">PHP 8.4 adds new DOM classes that are spec-compliant, keeping the old ones for compatibility.</article>
</main>
HTML, LIBXML_NOERROR);

$xpath = new DOMXPath($dom);
$node = $xpath->query(".//main/article[not(following-sibling::*)]")[0];
$classes = explode(" ", $node->className); // Simplified
var_dump(in_array("featured", $classes)); // bool(true)

Exemple avec PHP 8.4 :

$dom = Dom\\HTMLDocument::createFromString(<<<'HTML'
<main>
    <article>PHP 8.4 is a feature-rich release!</article>
    <article class="featured">PHP 8.4 adds new DOM classes that are spec-compliant, keeping the old ones for compatibility.</article>
</main>
HTML, LIBXML_NOERROR);

$node = $dom->querySelector('main > article:last-child');
var_dump($node->classList->contains("featured")); // bool(true)

PHP 8.4 introduit des fonctionnalités majeures comme les hooks de propriétés, une visibilité asymétrique pour les propriétés, une nouvelle API DOM conforme aux standards HTML5, et des optimisations de performances. Plongez dans cette version pour explorer ses avancées techniques et simplifier vos projets de développement.

Merci de votre lecture 😎

Ecrit par
Alyson Paya

Recevez par mail toute l’actualité de Mink

En cliquant sur "Ok", vous acceptez les CGU ainsi que notre politique de confidentialité décrivant la finalité des traitements de vos données personnelles.

Découvrez d'autres articles