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 constants | 8.3 |
| Readonly classes | 8.2 |
| Enums | 8.1 |
| Named arguments | 8.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 via Giscus — à activer dans
post.php.