PHP 8.4.0 RC4 available for testing

Nouvelles fonctionnalités

PHP Core

Propriété avec hooks

TODO

<?php
/*
examples
*/

Visibilité asymétrique des propriétés

Les propriétés d'objet peuvent désormais avoir leur visibilité set contrôlée séparément de la visibilité get.

<?php
class Example
{
// Le premier modificateur de visibilité contrôle la visibilité de lecture,
// et le second modificateur contrôle la visibilité d’écriture.
// La visibilité de lecture ne doit pas être plus restreinte que la visibilité d’écriture.
public protected(set) string $name;

public function
__construct(string $name)
{
$this->name = $name;
}
}

Objets paresseux

Il est désormais possible de créer des objets dont l'initialisation est différée jusqu'à leur accès. Les bibliothèques et frameworks peuvent tirer parti de ces objets paresseux pour différer la récupération de données ou de dépendances nécessaires à l'initialisation.

<?php
class Example
{
public function
__construct(private int $data)
{
}

// ...
}

$initializer = static function (Example $fantôme): void {
// Récupérer les données ou dépendances
$data = ...;
// Initialiser
$fantôme->__construct($data);
};

$reflector = new ReflectionClass(Example::class);
$object = $reflector->newLazyGhost($initializer);

L'attribut #[\Deprecated]

Le nouvel attribut Deprecated peut être utilisé pour marquer des fonctions, méthodes, et constantes de classe comme obsolètes. Le comportement de cette fonctionnalité obsolète utilisant cet attribut correspond à celui du mécanisme de dépréciation déjà existant pour les fonctionnalités fournies par PHP lui-même. La seule exception est que le code d'erreur émis est E_USER_DEPRECATED au lieu de E_DEPRECATED.

Les dépréciations existantes dans les fonctionnalités fournies par PHP lui-même ont été mises à jour pour utiliser cet attribut, améliorant les messages d'erreur émis en incluant une brève explication.

Interprétation des requêtes RFC1867 (multipart) dans les requêtes HTTP non-POST

Ajout de la fonction request_parse_body() qui permet d'interpréter les requêtes RFC1867 (multipart) dans les requêtes HTTP non-POST.

Enchaînement d'expressions new sans parenthèses

Nouvelles expressions avec des arguments de constructeur sont maintenant déréférençables, ce qui signifie qu'elles permettent de chaîner les appels de méthode, les accès aux propriétés, etc. sans encadrer l'expression entre parenthèses.

Informations de débogage améliorées pour WeakReference

Avoir les informations de débogage pour WeakReference affichera maintenant également l'objet qu'il référence, ou null si la référence n'est plus valide.

Informations de débogage améliorées pour Closure

La sortie de Closure::__debugInfo() inclut maintenant le nom, le fichier et la ligne de la Closure.

Définition de symboles identiques dans différents blocs d'espace de noms

Quitter un espace de noms efface désormais les symboles vus. Cela permet d'utiliser un symbole dans un bloc d'espace de noms, même si un bloc d'espace de noms précédent a déclaré un symbole avec le même nom.

cURL

curl_version() renvoie une valeur feature_list supplémentaire, qui est un tableau associatif de toutes les fonctionnalités cURL connues, et si elles sont supportées (true) ou pas (false).

Ajout des constantes CURL_HTTP_VERSION_3 et CURL_HTTP_VERSION_3ONLY (disponibles depuis libcurl 7.66 et 7.88) comme options disponibles pour CURLOPT_HTTP_VERSION.

Ajout de CURLOPT_PREREQFUNCTION comme option cURL qui accepte un callable à appeler après la connexion, mais avant l'envoi de la requête. Ce callable doit retourner CURL_PREREQFUNC_OK ou CURL_PREREQFUNC_ABORT pour autoriser ou annuler la requête.

Ajout de CURLOPT_SERVER_RESPONSE_TIMEOUT, qui était précédemment connu sous le nom de CURLOPT_FTP_RESPONSE_TIMEOUT. Les deux constantes ont la même valeur.

Ajout de CURLOPT_DEBUGFUNCTION comme option cURL qui accepte un callable qui est appelé pendant le cycle de vie de la requête avec l'objet CurlHandle, un entier contenant le type de message de débogage, et une chaîne contenant le message de débogage. Le type de message de débogage est l'un des constantes suivantes:

  • CURLINFO_TEXT
  • CURLINFO_HEADER_IN
  • CURLINFO_HEADER_OUT
  • CURLINFO_DATA_IN
  • CURLINFO_DATA_OUT
  • CURLINFO_SSL_DATA_IN
  • CURLINFO_SSL_DATA_OUT
Une fois que cette option est définie, CURLINFO_HEADER_OUT ne doit pas être défini car elle utilise la même fonctionnalité de libcurl.

curl_getinfo() renvoie maintenant une clé posttransfer_time_us, contenant le nombre de microsecondes depuis le début jusqu'à ce que le dernier octet soit envoyé. Lorsqu'une redirection est suivie, le temps de chaque requête est ajouté ensemble. Cette valeur peut également être récupérée en passant CURLINFO_POSTTRANSFER_TIME_T au paramètre option de curl_getinfo(). Cela requiert libcurl 8.10.0 ou ultérieur.

DOM

Ajout de l'espace de noms Dom avec de nouvelles classes en contrepartie des classes DOM existantes (par exemple, Dom\Node est le nouveau DOMNode). Ces classes sont compatibles avec HTML 5 et respectent les spécifications WHATWG, résolvant ainsi des bugs de longue date dans l'extension DOM. Les anciennes classes DOM restent disponibles pour assurer la compatibilité ascendante.

Ajout de DOMNode::compareDocumentPosition() avec ses constantes associées:

  • DOMNode::DOCUMENT_POSITION_DISCONNECTED
  • DOMNode::DOCUMENT_POSITION_PRECEDING
  • DOMNode::DOCUMENT_POSITION_FOLLOWING
  • DOMNode::DOCUMENT_POSITION_CONTAINS
  • DOMNode::DOCUMENT_POSITION_CONTAINED_BY
  • DOMNode::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC

Il est maintenant possible de passer n'importe quel callable à DOMXPath::registerPhpFunctions(). De plus, avec DOMXPath::registerPhpFunctionNs(), des callbacks peuvent désormais être enregistrés pour utiliser la syntaxe d'appel de fonction native au lieu d'utiliser php:function('nom').

Intl

Ajout de NumberFormatter::ROUND_HALFODD pour compléter la fonctionnalité existante de NumberFormatter::ROUND_HALFEVEN.

OpenSSL

Ajout du support des clés basées sur Curve25519 + Curve448. Spécifiquement, les champs x25519, ed25519, x448 et ed448 sont supportés dans openssl_pkey_new(), openssl_pkey_get_details(), openssl_sign(), et openssl_verify() ont été étendus pour supporter ces clés.

Implementation de PASSWORD_ARGON2 hashage de mot de passe. Requiert OpenSSL 3.2 et une construction NTS.

PCRE

La version de pcre2lib incluse a été mise à jour en version 10.44. Par conséquent, le support JIT LoongArch a été ajouté, les espaces sont maintenant autorisés entre les accolades dans les éléments compatibles avec Perl, et les assertions de lookbehind de longueur variable sont maintenant supportées.

Avec pcre2lib version 10.44, la longueur maximale des groupes de capture nommés a changé de 32 à 128.

Ajout du support pour le modificateur r (PCRE2_EXTRA_CASELESS_RESTRICT), ainsi que du modificateur de mode (?r). Lorsqu'il est activé avec le modificateur insensible à la casse (i), l'expression verrouille le mélange de caractères ASCII et non-ASCII.

PDO

Ajout du support pour les sous-classes spécifiques aux pilotes. Cette RFC ajoute des sous-classes pour PDO afin de mieux supporter les fonctionnalités spécifiques à la base de données. Ces nouvelles classes peuvent être instanciées soit en appelant la méthode PDO::connect() ou en instanciant directement une instance de la sous-classe spécifique au pilote.

Ajout du support pour les analyseurs SQL spécifiques aux pilotes. L'analyseur par défaut supporte:

  • les littéraux simples et doubles, avec le doublement comme mécanisme d'échappement
  • les commentaires dans le style C non imbriqués et à deux tirets

PDO_MYSQL

Ajout d'un analyseur personnalisé prenant en charge :

  • les littéraux simples et doubles, avec le doublement comme mécanisme d'échappement
  • les identifiants littéraux avec un accent grave et le doublement comme mécanisme d'échappement
  • deux tirets suivis d'au moins 1 espace, les commentaires C-style non imbriqués, et les commentaires de type hash

PDO_PGSQL

Ajout d'un analyseur personnalisé prenant en charge :

  • les littéraux simples et doubles, avec le doublement comme mécanisme d'échappement
  • l'"échappement" des littéraux de chaîne de style C (E'string')
  • les littéraux de chaîne de style cité en dollars
  • deux tirets et les commentaires de style C (non imbriqués)
  • le support de ?? comme séquence d'échappement pour l'opérateur ?

PDO_SQLITE

Ajout d'un analyseur personnalisé prenant en charge :

  • les littéraux simples, doubles et accent grave, avec le doublement comme mécanisme d'échappement
  • les crochets citant les identifiants
  • deux tirets et le C-style commentaires (non imbriqués)

Phar

Ajout du support de l'extension de timestamp Unix pour les archives Zip.

Readline

Ajout de la possibilité de changer le chemin de .php_history via la variable d'environnement PHP_HISTFILE.

SOAP

Ajout du support pour la notation clark pour les espaces de noms dans la carte de classes. Il est désormais possible de spécifier des entrées dans une carte de classes avec la notation clark pour résoudre un type avec un espace de noms spécifique à une classe spécifique. Par exemple : '{http://example.com}foo' => 'FooClass'.

Les intances de DateTimeInterface qui sont passées à xsd:datetime ou des éléments similaires sont maintenant sérialisées en tant que telles au lieu d'être sérialisées en tant que chaîne vide.

La persistence de sessions marche maintenant avec un module de session partagé.

Standard

Ajout d'une nouvelle énumération RoundingMode avec un nom plus clair et une meilleure découvrabilité par rapport aux constantes PHP_ROUND_*. De plus, quatre nouveaux modes d'arrondi ont été ajoutés qui ne sont disponibles que via la nouvelle énumération RoundingMode.

XSL

Il est désormais possible d'utiliser des paramètres qui contiennent à la fois des guillemets simples et doubles.

Il est maintenant possible de passer n'importe quel callable à XSLTProcessor::registerPhpFunctions().

Ajout de XSLTProcessor::$maxTemplateDepth et XSLTProcessor::$maxTemplateVars pour contrôler la profondeur de récursion de l'évaluation du modèle XSL.

Zip

Ajout de la constante ZipArchive::ER_TRUNCATED_ZIP, qui a été ajoutée dans libzip 1.11.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top