PHP 8.4.1 Released!

Nouvelles fonctionnalités

PHP Core

Les arguments nommés

Le support des arguments nommés a été ajouté.

Attributs

Le support des Attributs a été ajouté.

Promotion du Constructeur

Le support pour la promotion de propriété de constructeur (déclarer les propriété dans la signature du constructeur) a été ajouté.

Type d'unions

Le support pour les types d'unions a été ajouté.

L'expression match

Le support pour l'expression match a été ajouté.

L'opérateur nullsafe

Le support pour l'opérateur nullsafe (?->) a été ajouté.

Autre nouvelles fonctionnalités

  • La classe WeakMap a été ajoutée.

  • La classe ValueError a été ajoutée.

  • N'importe quel nombre de paramètres de fonction peut maintenant être remplacé par un argument variadique, tant que les types sont compatibles. Par exemple, le code suivant est maintenant autorisé :

    <?php
    class A {
    public function
    method(int $many, string $parameters, $here) {}
    }
    class
    B extends A {
    public function
    method(...$everything) {}
    }
    ?>

  • static (comme dans la "résolution statique à la volée") peut maintenant être utilisé comme type de retour :

    <?php
    class Test {
    public function
    create(): static {
    return new static();
    }
    }
    ?>

  • Il est maintenant possible de récupérer le nom de la classe d'un objet en utilisant $object::class. Le résultat est le même que get_class($object).

  • new et instanceof peuvent maintenant être utilisés avec des expressions arbitraires, par exemple new (expression)(...$args) et $obj instanceof (expression).

  • Quelques corrections de syntaxe de variables ont été appliquées, par exemple écrire Foo::BAR::$baz est maintenant autorisé.

  • Ajout de l'interface Stringable, qui est automatiquement implémentée si une classe définie une méthode __toString().

  • Les traits peuvent maintenant définir des méthodes privées abstraites. Ces méthodes doivent être implémentées par la classe utilisant le trait.

  • throw peut maintenant être utilisé comme expression. Cela permet des usages comme :

    <?php
    $fn
    = fn() => throw new Exception('Exception dans une fonction fléchée');
    $user = $session->user ?? throw new Exception('Un utilisateur est requis');

  • Une virguile finale optionnelle est maintenant autorisée dans les listes de paramètres.

    <?php
    function functionWithLongSignature(
    Type1 $parameter1,
    Type2 $parameter2, // <-- This comma is now allowed.
    ) {
    }

  • Il est maintenant possible d'écrire catch (Exception) pour attraper une exception sans la stocker dans une variable.

  • Le support pour le type mixed a été ajouté.

  • Les méthodes privées déclarées dans une classe parente n'imposent plus de règles d'héritage sur les méthodes de la classe enfante (à l'exception des constructeurs privés finaux). L'exemple suivant illustre les restrictions qui ont été supprimées :

    <?php
    class ParentClass {
    private function
    method1() {}
    private function
    method2() {}
    private static function
    method3() {}
    // Lance un avertissement, car "final" n'a plus d'effet :
    private final function method4() {}
    }
    class
    ChildClass extends ParentClass {
    // Tous les exemples suivants sont maintenant autorisés, même si les modificateurs ne sont pas
    // les même que pour les méthods privés dans la classe parente.
    public abstract function method1() {}
    public static function
    method2() {}
    public function
    method3() {}
    public function
    method4() {}
    }
    ?>

  • get_resource_id() a été ajouté, qui retourne la même valeur que (int) $resource. Il fournit la même fonctionnalité sous une API plus claire.

  • InternalIterator a été ajouté.

Date et heure

DOM

DOMParentNode et DOMChildNode avec de nouvelles API de traversée et de manipulation ont été ajoutées.

Filtre

FILTER_VALIDATE_BOOL a été ajouté en tant qu'alias de FILTER_VALIDATE_BOOLEAN. Le nouveau nom est préféré, car il se base sur le nom du type.

FPM

Ajout d'une nouvelle option pm.status_listen qui permet d'obtenir le statut depuis un point final différent (par exemple, un port ou un fichier UDS) ce qui est utile pour obtenir le statut lorsque tous les enfants sont occupés à servir des requêtes longues.

Hachage

Les objets HashContext peuvent maintenant être sérialisés.

LDAP

ldap_count_references() a été ajouté, qui retourne le nombre de messages de référence dans un résultat de recherche.

OPcache

Si le paramètre de configuration opcache.record_warnings est activé, OPcache enregistrera les avertissements de compilation et les rejouera lors de la prochaine inclusion, même si elle est servie depuis le cache.

OpenSSL

Ajout du support de la Syntaxe de Message Cryptographique (Cryptographic Message Syntax ou CMS) (» RFC 5652) composé de fonctions pour le chiffrement, le déchiffrement, la signature, la vérification et la lecture. L'API est similaire à l'API des fonctions PKCS #7 avec l'ajout de nouvelles constantes d'encodage : OPENSSL_ENCODING_DER, OPENSSL_ENCODING_SMIME et OPENSSL_ENCODING_PEM:

  • openssl_cms_encrypt() chiffre le message dans le fichier avec les certificats et écrit le résultat dans le fichier fourni.
  • openssl_cms_decrypt() qui déchiffre les messages S/MIME dans le fichier et écrit les résultats dans le fichier fourni.
  • openssl_cms_read() qui exporte le fichier CMS dans un tableau de certificats PEM.
  • openssl_cms_sign() qui signe le message MIME dans le fichier avec un certificat et une clé et écrit le résultat dans le fichier fourni.
  • openssl_cms_verify() qui vérifie que le bloc de données est intact, que le signataire est bien celui qu'il prétend être, et retourne les certificats des signataires.

Expressions Régulières (Perl-Compatible)

preg_last_error_msg() a été ajouté, qui retourne un message lisible par l'homme pour la dernière erreur PCRE. Il complète preg_last_error(), qui retourne une valeur d'énumération entière à la place.

Réflection

SQLite3

SQLite3::setAuthorizer() et les constantes de classe respectives ont été ajoutées pour définir un rappel utilisateur qui sera utilisé pour autoriser ou non une action sur la base de données.

Standard Library

  • str_contains(), str_starts_with() et str_ends_with() ont été ajoutés, elles vérifient si haystack contient, commence par ou fini par needle, respectivement.

  • fdiv() a été ajouté, qui éffectue une division en virgule flottante sous les sémantiques IEEE 754. La division par zéro est considérée comme bien définie et retournera l'une des valeurs Inf, -Inf ou NaN.

  • get_debug_type() a été ajouté, qui retourne un type utile pour les messages d'erreur. Contrairement à gettype(), il utilise des noms de type canoniques, retourne les noms de classe pour les objets, et indique le type de ressource pour les ressources.

  • printf() et ses amis supportent maintenant les spécificateurs de format %h et %H. Ils sont les mêmes que %g et %G, mais utilisent toujours "." comme séparateur décimal, plutôt que de le déterminer via la locale LC_NUMERIC.

  • printf() et ses amis supportent maintenant l'utilisation de "*" comme largeur ou précision, auquel cas la largeur/précision est passée comme argument à printf. Cela permet également d'utiliser une précision -1 avec %g, %G, %h et %H. Par exemple, le code suivant peut être utilisé pour reproduire le formatage par défaut des nombres à virgule flottante de PHP :

    <?php
    printf
    ("%.*H", (int) ini_get("precision"), $float);
    printf("%.*H", (int) ini_get("serialize_precision"), $float);
    ?>

  • proc_open() support maintent les descripteurs de pseudo-terminal (PTY). Le code suivant attache stdin, stdout et stderr au même PTY:

    <?php
    $proc
    = proc_open($command, [['pty'], ['pty'], ['pty']], $pipes);
    ?>

  • proc_open() supportent maintenant les descripteurs de paire de socket. Le code suivant attache distinct socket paire to stdin, stdout and stderr :

    <?php
    $proc
    = proc_open($command, [['socket'], ['socket'], ['socket']], $pipes);
    ?>

    Contrairement aux pipes, les sockets ne souffrent pas de problèmes de blocage d'E/S sur Windows. Cependant, tous les programmes peuvent ne pas fonctionner correctement avec les sockets stdio.

  • Les fonctions de tri sont maintenant stables, ce qui signifie que les éléments comparés égaux conserveront leur ordre d'origine.

  • array_diff(), array_intersect() et leurs variations peuvent maintenant être utilisées avec un seul tableau comme argument. Cela signifie que des utilisations comme les suivantes sont maintenant possibles :

    <?php
    // OK même si $excludes est vide:
    array_diff($array, ...$excludes);
    // OK même si $arrays contient un seul tableau:
    array_intersect(...$arrays);
    ?>

  • Le paramètre drapeau de ob_implicit_flush() a été modifié pour accepter un bool plutôt qu'un int.

Tokenizer

PhpToken ajoute une interface basée sur les objets au tokenizer. Il fournit une repésentation plus uniforme et ergonomique, tout en étant plus efficace en mémoire et plus rapide.

Zip

add a note

User Contributed Notes

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