Sortie de PHP 7.4.0
ven, 29/11/2019 - 15:53
Conformément à la feuille de route, l'équipe de développement de PHP vient de sortir PHP 7.4.0 en version finale stable.
Il s'agit d'une mouture majeure, donc les nouveautés sont nombreuses comme en témoigne la note de version complète. L'équipe de développement met toutefois l'accent sur une dizaine de nouveautés.
La nouveauté principale est sans doute l'arrivée des propriétés typées, dont la présence ne peut qu'améliorer la sûreté du code. Ainsi il est possible d'imposer un type aux propriété de classes, par exemple comme ceci :
class User {
public int $id;
public string $name;
}
Grâce à cette déclaration, la propriété id ne peut être assignée que par un entier, et la propriété name que par une chaîne de caractère.
Arrivent encore les fonctions Arrow, ou fonctions flèche qui sont essentiellement un sucre syntaxique. Par exemple, si l'on veut appliquer une fonction à tous les éléments d'un tableau avec la fonction array_map, cela peut désormais être écrit comme ceci.
$factor = 10;
$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);
// $nums = array(10, 20, 30, 40);
A remarquer encore la fonctionnalité 'Unpacking inside array' qui permet de déconstruire un tableau lui-même élément d'un tableau. Par exemple
$parts = ['apple', 'pear'];
$fruits = ['banana', 'orange', ...$parts, 'watermelon'];
// ['banana', 'orange', 'apple', 'pear', 'watermelon'];
Dans cet exemple le tableau parts est déconstruit et tout est mis 'à plat' dans le tableau contenant fruits.
Les programmeurs très pointus seront intéressés par l'arrivée des références faibles (Weak references). Les références faibles permettent au programmeur de conserver une référence à un objet sans que cela empêche la destruction de cet objet. Cela peut servir pour implémenter des structures particulières telles que des caches. Bien entendu les références faibles ne peuvent pas être sérialisées. La classe WeakReference ne doit pas être confondue avec la classe WeakRef de l'extension Weakref.
A remarquer encore, le support de TLS 1.3 dans l'extension OpenSSL.