Les propriétés en lecture seule peuvent désormais déclarer des valeurs par défaut.
<?php
class Config
{
public readonly int $timeout = 30;
}
$config = new Config();
var_dump($config->timeout); // int(30)Il est dĂ©sormais possible d'utiliser l'assignation par rĂ©fĂ©rence sur une WeakMap sans que la clĂ© n'ait besoin d'ĂȘtre prĂ©sente au prĂ©alable.
<?php
$obj = new stdClass();
$map = new WeakMap();
$count = 0;
// Auparavant : Error: "Object stdClass#1 not contained in WeakMap"
$map[$obj] = &$count;
$count++;
var_dump($map[$obj]); // int(1)Il est désormais possible de définir la méthode magique __debugInfo() sur les énumérations. Auparavant, cela provoquait une erreur fatale.
<?php
enum Suit: string
{
case Hearts = 'H';
case Spades = 'S';
public function __debugInfo(): array
{
return ['suit' => $this->name, 'symbol' => $this->value];
}
}
var_dump(Suit::Hearts);L'exemple ci-dessus va afficher :
enum(Suit::Hearts) (2) {
["suit"]=>
string(6) "Hearts"
["symbol"]=>
string(1) "H"
}
#[\Override] pour les constantes de classeL'attribut Override peut dĂ©sormais ĂȘtre appliquĂ© aux constantes de classe, y compris aux cas d'Ă©numĂ©ration. Comme pour les mĂ©thodes et les propriĂ©tĂ©s, une erreur de compilation est levĂ©e si aucune constante correspondante n'existe dans une classe parente ou une interface implĂ©mentĂ©e.
<?php
interface HasVersion
{
const VERSION = '1.0';
}
class Package implements HasVersion
{
#[\Override]
const VERSION = '2.0';
// Fatal error: Package::NAME has #[\Override] attribute,
// but no matching parent constant exists
// #[\Override]
// const NAME = 'package';
}
Ajout du support de l'application partielle de fonction. Un appel dans
lequel un ou plusieurs arguments sont remplacés par le marqueur
?, ou les arguments restants par le marqueur
..., crée une Closure qui
accepte les arguments manquants.
<?php
function add(int $a, int $b, int $c = 0): int
{
return $a + $b + $c;
}
// "?" remplace exactement un argument
$addOne = add(1, ?);
var_dump($addOne(5)); // int(6)
// "..." remplace tous les arguments restants
$addToOne = add(1, ...);
var_dump($addToOne(2, 3)); // int(6)
// Fonctionne avec n'importe quel callable, y compris les fonctions internes
$stripSpaces = str_replace(' ', '', ?);
var_dump($stripSpaces('a b c')); // string(3) "abc"
Les objets stockés dans des constantes ou des constantes de classe peuvent
dĂ©sormais ĂȘtre modifiĂ©s directement via OBJ->prop = $val.
<?php
const CONFIG = new stdClass();
// Auparavant : "Fatal error: Cannot use temporary expression in write context"
CONFIG->debug = true;
var_dump(CONFIG->debug); // bool(true)
pack() et unpack() acceptent
désormais les modificateurs < (little-endian) et
> (big-endian) aprĂšs les codes de format d'entiers
s, S, l,
L, q et Q, ainsi
qu'aprĂšs les codes de format de nombres Ă virgule flottante
f et d.
<?php
echo bin2hex(pack('l>', 1)), PHP_EOL; // Affiche "00000001"
echo bin2hex(pack('l<', 1)), PHP_EOL; // Affiche "01000000"
echo bin2hex(pack('f>', 1.5)), PHP_EOL; // Affiche "3fc00000"
var_dump(unpack('s>value', "\xff\xfe")); // ["value" => int(-2)]
Le tableau retourné par curl_getinfo() inclut désormais
une nouvelle clé "size_delivered", qui indique le nombre
total d'octets transmis à la fonction de rappel d'écriture du
téléchargement.
Cette valeur peut Ă©galement ĂȘtre obtenue en passant
CURLINFO_SIZE_DELIVERED comme paramĂštre
option.
Nécessite libcurl 8.20.0 ou ultérieur.
Ajout de CURLOPT_SEEKFUNCTION pour enregistrer une
fonction de rappel qui repositionne le corps d'une requĂȘte transmis en flux,
afin que libcurl puisse le rembobiner et le renvoyer lors d'une
redirection, d'une authentification en plusieurs passes ou d'une nouvelle
tentative sur une connexion réutilisée, au lieu d'échouer avec
CURLE_SEND_FAIL_REWIND.
La fonction de rappel reçoit le CurlHandle, le
décalage et l'origine, et doit retourner l'une des valeurs
CURL_SEEKFUNC_OK,
CURL_SEEKFUNC_FAIL ou
CURL_SEEKFUNC_CANTSEEK.
Ajout de la classe Time\Duration.
finfo_file() fonctionne désormais avec les flux distants.
Ajout de gmp_powm_sec() pour l'exponentiation modulaire résistante aux attaques par canaux auxiliaires. Nécessite GNU MP 5.0.0 ou ultérieur ; indisponible sur les compilations officielles pour Windows utilisant MPIR.
Ajout de gmp_prevprime() pour obtenir le plus grand
nombre premier inférieur au nombre donné.
Le paramĂštre de sortie optionnel definitely_prime
indique si le nombre retournĂ© est certainement premier, par opposition Ă
probablement premier.
Une ValueError est levée si un tel nombre
premier n'existe pas.
Cette fonction n'est disponible que lorsque PHP est compilé avec GNU MP
6.3.0 ou ultérieur ; elle n'est pas disponible sur les compilations
officielles pour Windows utilisant MPIR.
Ajout des méthodes statiques IntlDatePatternGenerator::getSkeleton() et IntlDatePatternGenerator::getBaseSkeleton() pour générer le squelette unique et le squelette de base d'un motif de date/heure.
Ajout de Locale::getDisplayKeyword() et Locale::getDisplayKeywordValue(), avec les alias locale_get_display_keyword() et locale_get_display_keyword_value(), respectivement.
Ajout de la classe IntlNumberRangeFormatter pour formater un intervalle de deux nombres avec un squelette et une locale donnés. Elle est prise en charge à partir de ICU 63. Le comportement de regroupement est l'un des suivants :
IntlNumberRangeFormatter::COLLAPSE_AUTOIntlNumberRangeFormatter::COLLAPSE_NONEIntlNumberRangeFormatter::COLLAPSE_UNITIntlNumberRangeFormatter::COLLAPSE_ALLIntlNumberRangeFormatter::IDENTITY_FALLBACK_SINGLE_VALUEIntlNumberRangeFormatter::IDENTITY_FALLBACK_APPROXIMATELY_OR_SINGLE_VALUEIntlNumberRangeFormatter::IDENTITY_FALLBACK_APPROXIMATELYIntlNumberRangeFormatter::IDENTITY_FALLBACK_RANGE
Ajout de SpoofChecker::areBidiConfusable() pour
vérifier si deux chaßnes sont confondables pour une direction de texte
donnée, ainsi que des constantes de direction
SpoofChecker::LTR et
SpoofChecker::RTL.
Elle est prise en charge Ă partir de ICU 74.
Ajout de SpoofChecker::getBidiSkeleton() pour générer un squelette de confusion pour une direction de texte donnée. Elle est prise en charge à partir de ICU 74.
Ajout de SpoofChecker::getSkeleton() pour générer un squelette de confusion pour une chaßne donnée.
Ajout d'une nouvelle API de scrutation (polling), composée de :
Ajout d'informations supplémentaires sur l'emplacement de l'erreur dans les messages d'erreur retournés par json_last_error_msg() et dans le message de JsonException.
Ajout du support de la reprise de session TLS pour les flux. Cela permet de sauvegarder et de restaurer des sessions client entre les requĂȘtes, d'implĂ©menter un stockage de session personnalisĂ© cĂŽtĂ© serveur et de contrĂŽler le comportement du cache de sessions, Ă l'aide des nouvelles options de contexte SSL suivantes :
session_datasession_new_cbsession_cachesession_cache_sizesession_timeoutsession_id_contextsession_get_cbsession_remove_cbnum_tickets
Ajout du support des clés pré-partagées (PSK) externes
TLS pour les flux, avec les nouvelles options de
contexte SSL
psk_client_cb et psk_server_cb.
Cela permet de définir et de recevoir des clés pré-partagées.
Ajout du support des données anticipées (0-RTT) de TLS
1.3 pour les flux.
Les clients envoient des données anticipées avec l'option de
contexte SSL
early_data ; les serveurs les acceptent avec
max_early_data et les reçoivent via la fonction de rappel
early_data_cb.
Le résultat est indiqué par "accepted",
"rejected" ou "not_sent" dans la clé
"early_data" de l'entrée "crypto" du
tableau retourné par stream_get_meta_data().
Ajout de Pdo\Pgsql::ATTR_CHUNK_SIZE, le nombre de
lignes qu'une requĂȘte rĂ©cupĂšre par bloc.
Une valeur de 1 ou plus active le mode de récupération paresseuse de
PDO::ATTR_PREFETCH => 0.
Définir PDO::ATTR_PREFETCH remplace la taille de bloc.
Les requĂȘtes prĂ©parĂ©es sans cette option ni
PDO::ATTR_PREFETCH reprennent la valeur définie sur la
connexion.
Nécessite libpq 17 ou ultérieur.
La surcharge des méthodes SplFileInfo::getMTime() et SplFileInfo::getPathname() influence désormais le résultat des familles de méthodes Phar::buildFromDirectory() et Phar::buildFromIterator(). Cela permet de redéfinir l'horodatage et les noms des fichiers.
Il est désormais possible d'utiliser AES192,
AES192C, AES256 et
AES256C comme protocoles de sécurité SNMPv3 si la
bibliothĂšque sous-jacente les prend en charge.
Il est désormais possible de réinitialiser l'arbre MIB avec la nouvelle fonction snmp_init_mib().
Des fonctionnalités supplémentaires de contrÎle de l'analyse des MIB et de la sortie sont exposées via :
Ajout d'une nouvelle API d'erreurs de flux, composée de :
error_mode, error_store et
error_handler.
Ajout de l'option de contexte de flux filter.max_filter_count
pour les URL php://filter.
Lorsqu'elle est définie, l'ouverture du flux échoue avec un avertissement si
l'URL ajoutait plus de filtres que la valeur configurée.
Les valeurs négatives désactivent la vérification.
Ajout de l'option de contexte de socket
so_reuseaddr qui permet de désactiver la réutilisation
d'adresse (SO_REUSEADDR) et utilise explicitement
SO_EXCLUSIVEADDRUSE sous Windows.
Ajout des options de contexte de socket
so_keepalive, tcp_keepidle,
tcp_keepintvl et tcp_keepcnt qui
permettent de définir les options de keepalive des sockets.
Ajout de l'option de contexte de socket
so_linger qui définit SO_LINGER sur
les sockets TCP.
Une valeur positive active l'attente de fermeture pendant ce nombre de
secondes, zéro ou une valeur négative la désactive.
Les valeurs supérieures à 65535 sont plafonnées, car sur certaines
plateformes la durée de linger est limitée à un entier court non signé.
Ajout des options de contexte de socket
so_rcvbuf et so_sndbuf qui définissent
les tailles des tampons de réception et d'envoi du socket, en octets
(SO_RCVBUF et SO_SNDBUF), sur les
sockets TCP et UDP.
La valeur doit ĂȘtre un entier compris entre 1 et 2147483647 ; toute autre
valeur fait échouer la création du flux.
Le systĂšme d'exploitation peut arrondir, plafonner ou ajuster autrement la
taille demandée, et peut cesser de dimensionner ce tampon automatiquement ;
la taille relue peut donc différer de celle demandée.
Les flux filtrĂ©s peuvent dĂ©sormais ĂȘtre convertis en descripteurs de fichier, pour une utilisation avec stream_select().
Ajout du paramĂštre de filtre "write_seek_mode" pour les
filtres de flux bz2, iconv, zlib et
convert.
Ce paramĂštre doit ĂȘtre dĂ©fini via un tableau associatif dont la clĂ© est
"write_seek_mode" et dont la valeur est l'une des
chaĂźnes suivantes :
"preserve""reset""strict"Ajout de Uri\Rfc3986\Uri::getUriType() et Uri\WhatWg\Url::isSpecialScheme().
Ajout de Uri\Rfc3986\Uri::getHostType() et Uri\WhatWg\Url::getHostType().
Ajout des classes Uri\Rfc3986\UriBuilder et Uri\WhatWg\UrlBuilder.
Ajout de Uri\WhatWg\url_percent_encode().