Tech Blog_

PHP 8.3 : les nouveautés qui changent vraiment quelque chose

Typed class constants

Enfin. On peut typer les constantes de classe :

php
class Config {
    const string  VERSION    = '1.0.0';
    const int     MAX_ITEMS  = 100;
    const bool    DEBUG      = false;
}

Les constantes typées sont héritables mais le type doit être compatible dans les classes filles.

json_validate()

Plus besoin de json_decode() juste pour vérifier qu'un JSON est valide :

php
// Avant
$valid = json_decode($input) !== null && json_last_error() === JSON_ERROR_NONE;

// PHP 8.3
$valid = json_validate($input);

Beaucoup plus rapide en mémoire car aucune structure n'est construite.

#[\Override] attribute

Signale explicitement qu'une méthode override une méthode parente. PHP lève une erreur si ce n'est pas le cas :

php
class Base {
    public function render(): string { return ''; }
}

class Child extends Base {
    #[\Override]
    public function render(): string { return '<p>Hello</p>'; }

    #[\Override]
    public function unknown(): void {}  // Erreur : n'existe pas dans Base
}

Excellent pour détecter les breaking changes lors de mises à jour de dépendances.

array_find() et array_find_key()

php
$users = [
    ['name' => 'Alice', 'admin' => true],
    ['name' => 'Bob',   'admin' => false],
];

// Trouver le premier admin
$admin = array_find($users, fn($u) => $u['admin']);
// ['name' => 'Alice', 'admin' => true]

// Trouver son index
$idx = array_find_key($users, fn($u) => $u['admin']);
// 0

Remplace élégamment les boucles foreach avec break.

Readonly properties — amendements

PHP 8.3 autorise la réinitialisation des propriétés readonly dans clone :

php
class User {
    public function __construct(
        public readonly int $id,
        public readonly string $name,
    ) {}

    public function withName(string $name): static {
        return new static($this->id, $name);  // avant : seule solution
        // Ou avec clone en 8.3 :
        // $clone = clone $this;
        // $clone->name = $name;  // maintenant autorisé dans __clone
        // return $clone;
    }
}

Compatibilité et migration

FonctionnalitéVersion
json_validate()8.3
#[\Override]8.3
array_find()8.4
Typed constants8.3
Readonly classes8.2
Enums8.1
Named arguments8.0

Vérifier sa version

bash
php -v
php -r "echo PHP_VERSION;"

Infomaniak supporte PHP 8.3 sur l'hébergement mutualisé. Configure la version dans le panneau de contrôle sous "Hébergement web → PHP".

Commentaires

Commentaires via Giscus — à activer dans post.php.

← Retour aux articles