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

Typed class constants

Enfin. On peut typer les constantes de classe :

php copier

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 copier

// 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 copier

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

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

#[\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 copier

$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 copier

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 copier

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".