PHP 8.4 est tout beau, tout chaud: la nouvelle version est sortie le 21 novembre, comme prévue. Pas mal de nouveautés ont été intégrées. Si vous lisez ces lignes, sachez que le site tourne déjà dessus.
Faisons un petit tour d’horizon de PHP 8.4 avec ses changements, améliorations et nouveautés, avant de l’installer sur notre serveur Ubuntu.
Les nouveautés de PHP 8.4
PHP 8.4 ravira les utilisateurs avec de nombreuses fonctionnalités et améliorations impactantes. Par exemple, ils peuvent utiliser intelligemment de nouvelles fonctions de tableau, telles que :
array_find()
array_find_key()
array_any()
array_all()
De plus, il y a d’autres fonctionnalités incroyables de PHP 8.4 qui attireront l’attention des utilisateurs dès le départ, notamment :
Hooks de propriétés
Visibilité asymétrique
MyClass()->method() sans parenthèses
Changements JIT
Support HTML5
Autres fonctionnalités de PHP 8.4 à surveiller
Hooks de propriétés
Les propriétés dans les objets PHP ont offert divers avantages comme l’implémentation des validations de valeurs. Pour cette raison, les types de propriétés à partir de PHP 7 ont grandement aidé à cela.
Néanmoins, le fait que la validation doive, par nécessité, se faire via une méthode a conduit à beaucoup de code répétitif sous forme de getters et setters ou à l’abus des méthodes magiques __get et __set.
En réalité, les propriétés en lecture seule dans PHP 8 résolvent de nombreux problèmes pour les développeurs. Ils peuvent protéger les valeurs via le constructeur et offrir toujours des propriétés entièrement typées pour un accès direct.
Les Hooks de propriétés offrent également une fonctionnalité robuste pour travailler avec les propriétés de classe PHP. Les propriétés peuvent optionnellement expliquer un ou plusieurs hooks, actuellement limités à “get” et “set”, vous permettant d’intervenir dans le cycle de vie de la propriété. Voici un exemple tiré du RFC :
class User implements Named
{
private bool $isModified = false;
public function __construct(private string $first, private string $last) {}
public string $fullName {
// Override the "read" action with arbitrary logic.
get => $this->first . " " . $this->last;
// Override the "write" action with arbitrary logic.
set {
[$this->first, $this->last] = explode(' ', $value, 2);
$this->isModified = true;
}
}
}
Code language: PHP (php)
Visibilité asymétrique
La visibilité asymétrique est une fonctionnalité innovante qui aide les développeurs à expliquer une visibilité différente pour diverses opérations sur une propriété. Cela leur permet de contrôler intelligemment la visibilité des membres de classe, tels que les propriétés et les méthodes.
Par exemple, vous pouvez indiquer que vous souhaitez autoriser un accès public en lecture à une propriété, mais ne permettre les modifications qu’en interne :
public private(set) string $bar = 'baz';
Code language: PHP (php)
La visibilité asymétrique fonctionne en parallèle avec les changements présentés avec les hooks de propriétés, y compris la possibilité de décrire la visibilité dans les interfaces.
MyClass()->method() sans parenthèses
Une pratique courante en PHP est d’instancier une classe et d’accéder immédiatement à une méthode ou une propriété. Voici un exemple ci-dessous :
$request = (new Request())->withMethod('GET')->withUri('/hello-world');
Code language: PHP (php)
Nous devions entourer la classe de parenthèses lors de son instanciation, ce qui était une exigence du moteur PHP. Avec PHP 8.4, les utilisateurs peuvent omettre ces parenthèses, offrant une utilisation plus conviviale :
$request = new Request()->withMethod('GET')->withUri('/hello-world');
Code language: PHP (php)
Changements JIT
PHP 8.4 a modifié la façon dont le JIT est activé. Auparavant, les utilisateurs devaient définir opcache.jit_buffer_size à 0 pour désactiver le JIT. Cependant, vous pouvez maintenant le désactiver comme décrit ci-dessous :
opcache.jit=disable
opcache.jit_buffer_size=64m
Ce changement affectera les utilisateurs s’ils avaient spécifié un opcache.jit_buffer_size mais n’avaient pas spécifié opcache.jit. Dans cette situation, les utilisateurs devront incorporer opcache.jit=tracing pour activer à nouveau le JIT. De plus, les utilisateurs constateront des améliorations du JIT, le rendant plus fluide et rapide.
Support HTML5
PHP 8.4 inclut une classe \Dom\HTMLDocument qui peut analyser efficacement le code HTML. L’ancienne classe \DOMDocument est toujours accessible pour la rétrocompatibilité.
$doc = \Dom\HTMLDocument::createFromString($contents);
Code language: PHP (php)
Pour les développeurs qui analysent ou construisent du HTML en utilisant l’extension DOM, cette version fournira diverses fonctionnalités innovantes et orientées résultats, ainsi qu’un support robuste pour HTML5.