Sortie du langage de programmation PHP 8.5

Après un an de développement, PHP 8.5 est disponible. Cette nouvelle version inclut de nombreuses nouvelles fonctionnalités, ainsi que plusieurs modifications incompatibles.

Principaux changements dans PHP 8.5 (1, 2, 3) :

  • L'opérateur pipe a été ajouté, permettant de passer des valeurs d'une fonction à une autre sans utiliser d'affectations ni de variables intermédiaires, en utilisant le résultat d'une fonction comme paramètre dans une autre. Si la fonction a un seul argument, le paramètre auquel passer la valeur est sélectionné à l'aide de la clause "...", et si la fonction a plusieurs arguments, la substitution est effectuée à l'aide de fermetures. Par exemple, le code suivant : `$output = $input |> trim(...) |> fn (string $string) => str_replace(' ', '-', $string) |> fn (string $string) => str_replace(['.', '/', '...'], "", $string) |> strtolower(...);` est équivalent à : `$temp = trim($input); $temp = str_replace(' ', '-', $temp); $temp = str_replace(['.', '/', '...'], "", $temp); $output = strtolower($temp);` ou $output = strtolower( str_replace(['.', '/', '…'], ", str_replace(' ', '-', trim($input) ) ) );
  • Il est possible d'attribuer de nouvelles valeurs aux objets clonés lors du clonage en passant un tableau associatif à la fonction `clone()`. `public function withTitle(string $title): self { return clone($this, [ 'title' => $title, ]); }`
  • Ajout de l'attribut « #[NoDiscard] », qui permet de marquer les fonctions dont la valeur de retour doit toujours être utilisée. Si la valeur de retour d'une telle fonction est ignorée, l'interpréteur affichera un avertissement. Pour contourner cette vérification, vous pouvez utiliser un appel avec une conversion de type vers void. #[NoDiscard("vous devez utiliser cette valeur de retour.")] function foo(): string { return 'hi'; } foo(); // affiche un avertissement (void) foo(); // Ok $string = foo(); // Ok
  • Les fermetures et les fonctions appelables de première classe peuvent désormais être utilisées dans les expressions constantes qui autorisaient auparavant les valeurs immuables, définies à la compilation. Par exemple, les fermetures peuvent maintenant être spécifiées dans les attributs, les valeurs par défaut et les constantes. Les fermetures utilisées de cette manière doivent toujours être marquées avec le mot-clé `static` et ne peuvent pas accéder aux variables externes via la clause `use`. `#[SkipDiscovery(static function (Container $container): bool { return ! $container->get(Application::class) instanceof ConsoleApplication; })]`
  • En cas d'erreur fatale, une trace d'appel est désormais jointe au texte du message.
  • Ajout des fonctions array_first() et array_last(), qui affichent respectivement le premier et le dernier élément d'un tableau. Par exemple, au lieu de $first = $array[array_key_first($array)] ?? null;, vous pouvez maintenant écrire $first = array_first($array);
  • Un module URI a été ajouté, offrant une API simplifiée pour l'analyse des liens. Cette analyse est effectuée à l'aide des bibliothèques uriparser et lexbor. Utilisez Uri\Rfc3986\Uri ; $uri = new Uri('https://opennet.me')/64290'); $uri->getHost(); // opennet.me $uri->getScheme(); // https://
  • L'attribut « #[DelayedTargetValidation] » a été implémenté, ce qui vous permet de déplacer la validation des attributs tels que « #[Override] » de la compilation à l'exécution. #[DelayedTargetValidation] #[Override] public const NAME = 'Child';
  • Ajout des fonctions get_error_handler() et get_exception_handler() pour définir des fonctions avec des gestionnaires d'erreurs et d'exceptions.
  • Le module Curl implémente la fonction curl_share_init_persistent(), qui vous permet de partager des descripteurs lors du traitement de différentes requêtes.
  • Le module Exif prend désormais en charge les images aux formats HEIF et HEIC.
  • Déprécié : syntaxe de conversion de type non standard (par exemple, « (integer) » au lieu de « (int) ») ; utilisation des guillemets inversés (`) pour appeler des commandes au lieu de shell_exec() ; déclarations de constantes répétées ; utilisation de points-virgules au lieu de deux-points pour terminer les instructions case ; spécification de null au lieu d’une chaîne vide dans les tableaux ou dans la fonction array_key_exists(). La prise en charge du paramètre « disabled_classes » a été supprimée du fichier INI.

Source: opennet.ru

Achetez un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Achetez un hébergement web fiable avec protection DDoS, serveurs VPS et VDS | ProHoster