Sommaire
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.

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.