Credit : Illustration backtotheweb.fr
PHP 8.3 : les nouveautes qui changent tout
PHP 8.3 : les nouveautes qui changent tout
PHP 8.3, sorti fin 2023, apporte des fonctionnalites qui ameliorent considerablement la qualite du code et l'experience developpeur. Voici les nouveautes les plus impactantes.
Constantes de classe typees
Avant PHP 8.3, les constantes de classe n'avaient pas de type. Desormais :
class Config
{
const string VERSION = '2.1.0';
const int MAX_RETRIES = 3;
const float TIMEOUT = 30.5;
const bool DEBUG = false;
const array ALLOWED_METHODS = ['GET', 'POST', 'PUT', 'DELETE'];
}
// En cas de type incorrect, erreur fatale
// const int MAX_RETRIES = 'trois'; // Fatal error
Cela fonctionne aussi avec les interfaces et les enums :
interface CacheInterface
{
const int DEFAULT_TTL = 3600;
}
enum Status: string
{
const string PREFIX = 'status_';
case Active = 'active';
case Inactive = 'inactive';
}
json_validate() : valider du JSON sans le decoder
Avant, pour verifier si une chaine est du JSON valide, il fallait la decoder :
// Avant PHP 8.3
$data = json_decode($json);
if (json_last_error() !== JSON_ERROR_NONE) {
// JSON invalide
}
// PHP 8.3 : plus simple et plus performant
if (json_validate($json)) {
// JSON valide, on peut le traiter
$data = json_decode($json, true);
}
json_validate() est plus rapide que json_decode() car il ne construit pas la structure de donnees en memoire. Ideal pour valider des payloads avant traitement.
// Exemples
json_validate('{"name":"Jean"}'); // true
json_validate('{name: invalid}'); // false
json_validate(''); // false
json_validate('null'); // true
// Avec profondeur maximale
json_validate($json, 64); // profondeur max de 64
Attribut #[Override]
Cet attribut documente l'intention de surcharger une methode parente :
class ParentClass
{
public function process(): void
{
// logique par defaut
}
}
class ChildClass extends ParentClass
{
#[Override]
public function process(): void
{
// logique personnalisee
}
#[Override]
public function prosess(): void // Erreur fatale ! La methode n'existe pas dans le parent
{
}
}
Si la methode parente est renommee ou supprimee, PHP leve une erreur fatale. Cela previent les bugs silencieux ou une methode cesse d'etre une surcharge sans qu'on s'en rende compte.
Ameliorations de Randomizer
La classe Random\Randomizer introduite en PHP 8.2 recoit de nouvelles methodes :
use Random\Randomizer;
$randomizer = new Randomizer();
// Obtenir un float aleatoire entre 0 et 1
$float = $randomizer->nextFloat();
// Ex: 0.3726482...
// Float dans un intervalle
$price = $randomizer->getFloat(10.0, 99.99);
// Ex: 42.57
// Recuperer N octets aleatoires
$bytes = $randomizer->getBytes(16);
// Melanger une chaine
$shuffled = $randomizer->shuffleBytes('abcdef');
// Ex: 'dcafbe'
// Selectionner des elements aleatoires d'un tableau
$randomizer->pickArrayKeys(['a', 'b', 'c', 'd', 'e'], 2);
// Ex: [1, 3]
Proprietes en lecture seule clonees avec modifications
PHP 8.3 permet de modifier les proprietes readonly lors du clonage :
class User
{
public function __construct(
public readonly string $name,
public readonly string $email,
public readonly DateTimeImmutable $createdAt,
) {}
public function withEmail(string $newEmail): static
{
return clone $this; // Erreur en PHP 8.2 si on modifie readonly dans __clone
}
}
Methode getBytesFromString sur Randomizer
$randomizer = new Randomizer();
// Generer un code aleatoire a partir d'un alphabet personnalise
$code = $randomizer->getBytesFromString('ABCDEFGHJKLMNPQRSTUVWXYZ23456789', 8);
// Ex: 'K7N3XP2M' - ideal pour des codes promo
Migration vers PHP 8.3
# Installer PHP 8.3
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.3 php8.3-fpm php8.3-mysql php8.3-curl php8.3-xml php8.3-mbstring php8.3-zip php8.3-redis
# Basculer PHP-FPM
sudo systemctl stop php8.2-fpm
sudo systemctl start php8.3-fpm
sudo systemctl enable php8.3-fpm
# Mettre a jour le socket dans Nginx
# fastcgi_pass unix:/run/php/php8.3-fpm.sock;
sudo systemctl reload nginx
Verifiez la compatibilite de votre code avec des outils comme PHPStan ou Rector avant la migration.
PHP 8.3 est une version solide qui renforce le typage et la qualite du code. Adoptez-le des que possible.
Testé sur Debian 12/13 chez IONOS. Adaptez selon votre config.