class BlogData
{
public readonly string $title;
public readonly Status $status;
public function __construct(string $title, Status $status)
{
$this->title = $title;
$this->status = $status;
}
}readonly class BlogData
{
public string $title;
public Status $status;
public function __construct(string $title, Status $status)
{
$this->title = $title;
$this->status = $status;
}
}class Foo {
public function bar(mixed $entity) {
if ((($entity instanceof A) && ($entity instanceof B)) || ($entity === null)) {
return $entity;
}
throw new Exception('Invalid entity');
}
}class Foo {
public function bar((A&B)|null $entity) {
return $entity;
}
}null, false, et true comme types stand-alone RFC
RFC
class Falsy
{
public function almostFalse(): bool { /* ... */ *}
public function almostTrue(): bool { /* ... */ *}
public function almostNull(): string|null { /* ... */ *}
}class Falsy
{
public function alwaysFalse(): false { /* ... */ *}
public function alwaysTrue(): true { /* ... */ *}
public function alwaysNull(): null { /* ... */ *}
}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();
}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.
trait Foo
{
public const CONSTANT = 1;
}
class Bar
{
use Foo;
}
var_dump(Bar::CONSTANT); // 1
var_dump(Foo::CONSTANT); // Errorclass User
{
public $name;
}
$user = new User();
$user->last_name = 'Doe';
$user = new stdClass();
$user->last_name = 'Doe';class User
{
public $name;
}
$user = new User();
$user->last_name = 'Doe'; // Deprecated notice
$user = new stdClass();
$user->last_name = 'Doe'; // Still allowedAfin 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..
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.