Sortie du langage de programmation PHP 8.2

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

Principales améliorations de PHP 8.2 :

  • Ajout de la possibilité de marquer une classe en lecture seule. Les propriétés de ces classes ne peuvent être définies qu'une seule fois, après quoi elles ne pourront plus être modifiées. Auparavant, les propriétés de classe individuelles pouvaient être marquées en lecture seule, mais vous pouvez désormais activer ce mode pour toutes les propriétés de classe à la fois. La spécification de l'indicateur "readonly" au niveau de la classe bloque également l'ajout dynamique de propriétés à la classe. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->inconnu = 'faux' ; // Erreur : impossible de créer la propriété dynamique Post :: $inconnu
  • Добавлены отдельные типы «true», «false» и «null», которые могут принимать только одно допустимое значение и использоваться, например, для возвращения функцией признака завершения с ошибкой или пустого значения. Ранее «true», «false» и «null» могли использоваться только в связке с другими типами (например, «string|false»), а теперь могут применяться отдельно: function alwaysFalse(): false { return false; }
  • Possibilité de filtrer les paramètres sensibles dans la sortie de trace de la pile au moment d'une erreur. Il peut être nécessaire de supprimer certaines informations lorsque des informations sur les erreurs qui se produisent sont automatiquement envoyées à des services tiers qui suivent les problèmes et en informent les développeurs. Par exemple, vous pouvez exclure de la trace des paramètres qui incluent des noms d'utilisateur, des mots de passe et des variables d'environnement. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } test('foo', 'password', 'baz'); Erreur fatale : Exception non interceptée : Erreur dans test.php:8 Stack trace : #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} lancé dans test.php à la ligne 8
  • Разрешено определение констант в типажах (trait, механизм для повторного использования кода). Доступ к константам, определённым в типаже, можно получить через класс, который использует типаж (но не через имя типажа). trait Foo { public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // Fatal error } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Добавлена возможность задания типов в дизъюнктивной нормальной форме (DNF, Disjunctive Normal Form), позволяющей совместить объединение типов (коллекции из двух и более типов) и пересечение типов (типы, значения которых подпадают одновременно под несколько типов). class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } return $entity; } }
  • Предложено новое расширение «Random» c функциями и классами для генерации псеводослучайных чисел и последовательностей. Модуль предоставляет объектно-ориентированный интерфейс, позволяет выбирать разные движки для генерации псеводослучайных чисел, в том числе пригодные для применения в криптографии, и предоставляет вспомогательные функции, например, для случайного перемешивания массивов и строк, выбора случайных ключей массива, одновременного использования нескольких генераторов со своим независимым состоянием. $rng = $is_production ? new Random\Engine\Secure() : new Random\Engine\Mt19937(1234); $randomizer = new Random\Randomizer($rng); $randomizer->shuffleString(‘foobar’);
  • Implémentation de la conversion de cas indépendante des paramètres régionaux. Des fonctions comme strtolower() et strtoupper() convertissent désormais toujours la casse des caractères dans la plage ASCII, comme lors de la définition des paramètres régionaux sur "C".
  • Добавлены новые функции: mysqli_execute_query, curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.
  • Добавлены новые методы: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Объявлена устаревшей возможность динамического создания свойств в классе. В PHP 9.0 обращение к свойствам, изначально не определённым в классе, будет приводить к ошибке (ErrorException). Классы, предоставляющие методы __get и __set для создания свойств, или динамические свойства в stdClass продолжат работать без изменений, прекратится поддержка только неявной работы с несуществующими свойствами для того чтобы защитить разработчика от скрытых ошибок. Для сохранения работы старого кода предложен атрибут «#[AllowDynamicProperties]», разрешающий использование динамических свойств.
  • La possibilité de substituer des valeurs de variables dans des chaînes à l'aide des expressions "${var}" et ${(var)}" est obsolète. La prise en charge des substitutions "{$var}" et "$var" couramment utilisées a été conservée. Par exemple : "Bonjour {$monde}" ; OK "Bonjour $monde" ; OK "Bonjour ${world}" ; Obsolète : l'utilisation de ${} dans les chaînes est obsolète
  • Appelables obsolètes partiellement pris en charge qui peuvent être appelés via "call_user_func($callable)" mais ne prennent pas en charge l'appel sous la forme "$callable()": "self::method" "parent::method" "static::method" ["self", "method"] ["parent", "method"] ["static", "method"] ["Foo", "Bar::method"] [new Foo, "Bar:: method"]
  • В настройки добавлена директива error_log_mode, позволяющая определить режим доступа к логу с ошибками.

Source: opennet.ru

Ajouter un commentaire