Sortie de PHP 8.3
Vendredi 24 Novembre 2023 08:30

Sortie de PHP 8.3

PHP 8.3 est sorti hier et il apporte quelques nouveautés sympas.

Depuis l’arrivée de la version 8, PHP devient de plus en plus stricte et c’est pour moi une bonne chose. Cette nouvelle version ajoute encore une couche de de typage et d’autre nouveauté que je vous présente ci-dessous.

Readonly Classes

Il est désormais possible de déclarer une classe en “readonly” ce qui permet, comme vous en douter, d’avoir une classe dont vous ne pourrez pas modifier les propriétés.

readonly class MyClass {
    public function __construct(public string $hello) {}
}

Typed Class Constants

Comme je vous le disais, on continue dans la strictitude avec cette fois les constantes qui peuvent (doivent?) être typée.

class MyClass {
    public const int myValue = 42;
}

json_validate()

Nouvelle fonction que j’aime déjà avant même de l’avoir utilisée, cette dernière permet de vérifier si une chaîne est un JSON valide et ce sans la décoder. On apprécie l’économie de ressource.

#[\Override]

Lorsqu’une classe en étend une autre, elle hérite des mêmes fonctions. Fonction que vous pouvez surcharger simplement en en créant une du même nom.

Ce nouvel attribut permet deux choses:

  • Vérifier que votre fonction dans la nouvelle classe est correctement définie.
    Si, par exemple, vous avez mal orthographié la fonction vous aurez une erreur.
  • Prévenir que la fonction est héritée car bon si c’est le code de votre collègue vous risquez de passer à côté de l’info.
class Parent {
    protected function overrideFunction(): void {}
}

class Child extends Parent {
    #[\Override]
    public function overrideFunction(): void {}
}

Ça ne va pas changer le monde mais ce nouvel attribut nous évitera certainement des erreurs à l’avenir.

getFloat() et nextFloat()

Petite nouveauté au niveau random, vous pouvez générer facilement une valeur décimale aléatoire.

$rando = new Random\Randomizer();

//  Entre 0 et 10
$rando->getFloat(0,10); // 4.5193748255948

// Entre 0 et 1
$rando->nextFloat(); // 0.61837492511861

Et le reste…

Bien évidemment il y a d’autre chose tel que des optimisations de performances mais si vous souhaitez la liste complète, je vous invite à consulter le patch note: https://www.php.net/releases/8.3/en.php