PHP 8.2 est une mise à jour majeure du langage PHP.
Elle contient beaucoup de nouvelles fonctionnalités et d'optimisations, incluant les classes en lecture seule, les types "stand-alone" null, false, et true, les propriétés dynamiques désormais obsolètes, et plus encore.
class BlogData
{
public readonly string $title;
public readonly Status $status;
public function __construct(string $title, Status $status)
{
$this->title = $title;
$this->status = $status;
}
}Les types FDN permettent de combiner des types union et intersection, en suivant une règle stricte: lorsque des types union et intersection sont combinés, les types intersection doivent être groupés entre parenthèses.
null, false, et true comme types stand-aloneclass Falsy
{
public function almostFalse(): bool { /* ... */ *}
public function almostTrue(): bool { /* ... */ *}
public function almostNull(): string|null { /* ... */ *}
}L'extension "random" fournit une nouvelle API orientée objet de génération de nombres aléatoires. Plutôt que de reposer sur un générateur de nombres aléatoires (utilisant l'algorithme Mersenne Twister) globalement initialisé, l'API orientée objet offre plusieurs classes permettant d'accéder à des algorithmes modernes stockant leur état au sein des objets, afin de fournir des séquences d'initialisations bien distinctes.
La classe \Random\Randomizer fournit une interface de haut niveau permettant, par exemple, de générer un entier aléatoire, mélanger un tableau ou une chaine de caractère, et plus encore.
use Random\Engine\Xoshiro256StarStar;
use Random\Randomizer;
$blueprintRng = new Xoshiro256StarStar(
hash('sha256', "Example seed that is converted to a 256 Bit string via SHA-256", true)
);
$fibers = [];
for ($i = 0; $i < 8; $i++) {
$fiberRng = clone $blueprintRng;
// Xoshiro256**'s 'jump()' method moves the blueprint ahead 2**128 steps, as if calling
// 'generate()' 2**128 times, giving the Fiber 2**128 unique values without needing to reseed.
$blueprintRng->jump();
$fibers[] = new Fiber(function () use ($fiberRng, $i): void {
$randomizer = new Randomizer($fiberRng);
echo "{$i}: " . $randomizer->getInt(0, 100), PHP_EOL;
});
}
// The randomizer will use a CSPRNG by default.
$randomizer = new Randomizer();
// Even though the fibers execute in a random order, they will print the same value
// each time, because each has its own unique instance of the RNG.
$fibers = $randomizer->shuffleArray($fibers);
foreach ($fibers as $fiber) {
$fiber->start();
}Il n'est pas possible d'accéder à une constante par le nom du trait, mais il est cependant possible d'y accéder par la classe utilisant ce trait.
Afin d'éviter des erreurs, la création des propriétés dynamiques est obsolète, sauf si la classe contient l'attribut #[\AllowDynamicProperties]. stdClass autorise les propriétés dynamiques.
L'utilisation des méthodes magiques __get/__set n'est pas affectée par ce changement..
class User
{
public $name;
}
$user = new User();
$user->last_name = 'Doe';
$user = new stdClass();
$user->last_name = 'Doe';mysqli_execute_query et méthode mysqli::execute_query.#[\AllowDynamicProperties] et #[\SensitiveParameter].ZipArchive::getStreamIndex, ZipArchive::getStreamName, et ZipArchive::clearError.ReflectionFunction::isAnonymous et ReflectionMethod::hasPrototype.curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.${} est désormais obsolète.utf8_encode et utf8_decode sont désormais obsolètes.DateTime::createFromImmutable et DateTimeImmutable::createFromMutable ont comme type de retour provisoire static.ODBC et PDO_ODBC échappent les noms d'utilisateurs et mots de passe.strtolower et strtoupper ne sont plus sensibles à la locale.SplFileObject::getCsvControl, SplFileObject::fflush, SplFileObject::ftell, SplFileObject::fgetc, et SplFileObject::fpassthru renforcent leur signature.SplFileObject::hasChildren a un type de retour provisoire false.SplFileObject::getChildren a un type de retour provisoire null.SplFileInfo::_bad_state_ex est désormais obsolète.