Sortie du langage de programmation PHP 8.3

Après un an de développement, la sortie du langage de programmation PHP 8.3 a été présentée. La nouvelle branche comprend une série de nouvelles fonctionnalités, ainsi que plusieurs modifications qui rompent la compatibilité.

Changements clés dans PHP 8.3 :

  • Lors du clonage de classe, il est possible de réinitialiser les propriétés avec l'attribut « readonly ». Le remplacement des propriétés en lecture seule n'est autorisé qu'à l'intérieur de la fonction « __clone » : readonly class Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // autorisé même si la propriété "createdAt" est en lecture seule. } }
  • La possibilité d'utiliser des constantes avec indication de type dans les classes, les traits et les énumérations a été fournie : class Foo { const string BAR = 'baz'; }
  • Ajout de la prise en charge de l'attribut « #[Override] », avec lequel le développeur peut informer l'interpréteur que la méthode marquée remplace une méthode parent. S'il n'y a pas de remplacement, l'interpréteur affichera une erreur.
  • Modification de la gestion des valeurs négatives en tant qu'index de tableau. Par exemple, lors de l'ajout d'un élément portant le numéro « -5 » à un tableau vide et de l'ajout d'un autre élément, auparavant le deuxième élément était enregistré avec l'index « 0 », mais à partir de la version PHP 8.3, il sera enregistré avec l'index « -4 ». . $tableau = []; $tableau[-5] = 'un'; $tableau[] = 'b'; var_export($tableau); // Était un tableau (-5 => 'a', 0 => 'b') // Devenu un tableau (-5 => 'a', -4 => 'b')
  • Ajout de la possibilité de créer des classes anonymes en mode lecture seule : $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • Ajout de la fonction json_validate() pour vérifier rapidement si une chaîne est au format JSON sans effectuer d'opérations de décodage. json_validate(string $json, int $profondeur = 512, int $flags = 0) : bool
  • De nouvelles méthodes ont été ajoutées à la classe Randomizer, qui fournit une API de haut niveau pour générer des nombres et des séquences pseudo-aléatoires : getBytesFromString pour générer une chaîne d'une taille donnée, en utilisant dans un ordre aléatoire les caractères présents dans une autre chaîne ; getFloat et nextFloat pour générer un nombre à virgule flottante aléatoire qui se situe dans la plage spécifiée.
  • Ajout de la possibilité de récupérer des constantes en utilisant la syntaxe de classe dynamique : class Foo { const BAR = 'bar'; } $nom = 'BAR'; // Auparavant, pour récupérer la constante BAR, il fallait appeler constant(Foo::class . '::' . $name); // Maintenant, spécifiez simplement Foo::{$name};
  • Ajout de la génération d'exceptions individuelles (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) en cas de problèmes survenant dans les opérations travaillant avec les dates et l'heure.
  • Gestion améliorée des erreurs qui se produisent lors de l'analyse des données sérialisées dans la fonction unserialize(). En cas de problème, unserialize() émet désormais E_WARNING au lieu de E_NOTICE.
  • Des modifications ont été apportées à la fonction range(). Une exception est générée lors de la tentative de transmission d'objets, de ressources ou de tableaux dans des variables définissant des limites de plage, ainsi que lors de la spécification d'une valeur négative dans le paramètre $step ou d'une valeur non définie dans un paramètre. Une liste de caractères peut désormais être affichée lors de la spécification de chaînes au lieu de nombres (par exemple, « range('5', 'z')").
  • Modification du comportement des traits avec des propriétés statiques, qui remplacent désormais les propriétés statiques héritées de la classe parent.
  • Ajout de paramètres pour la protection contre le débordement de pile. Les directives zend.max_allowed_stack_size et zend.reserved_stack_size ont été ajoutées au fichier ini, définissant la taille maximale autorisée et réservée de la pile. Le programme plantera à l'approche de l'épuisement de la pile, lorsque la pile est pleine plus que la différence entre zend.max_allowed_stack_size et zend.reserved_stack_size (l'exécution s'arrêtera avant qu'une erreur de segmentation ne se produise). Par défaut, la valeur de zend.max_allowed_stack_size est définie sur 0 (0—la taille est déterminée automatiquement ; pour désactiver la limitation, vous pouvez la définir sur -1).
  • Ajout de nouvelles fonctions POSIX posix_sysconf(), posix_pathconf(), posix_fpathconf() et posix_eaccess().
  • La fonction mb_str_pad a été ajoutée, qui est un analogue de la fonction de chaîne str_pad(), conçue pour fonctionner avec des encodages multi-octets tels que UTF-8.
  • Vous permet de créer des fermetures à partir de méthodes et de transmettre des arguments nommés à ces fermetures. $test = nouveau Test(); $closure = $test->magie(…); $closure(a : 'bonjour', b : 'monde');
  • Changement de comportement lors de la gestion de la visibilité des constantes dans les interfaces. interface I { public const FOO = 'foo'; } la classe C implémente I { private const FOO = 'foo'; }
  • Les capacités des fonctions array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() et proc_get_status() ont été étendues.
  • La possibilité de transmettre une valeur $widths négative à mb_strimwidth() est obsolète. La constante NumberFormatter::TYPE_CURRENCY a été supprimée. La prise en charge de l'appel de la fonction ldap_connect() avec deux paramètres $host et $port a été interrompue. Le paramètre opcache.consistency_checks a été supprimé.

Source: opennet.ru

Ajouter un commentaire