Eldono de PHP 8.2 programlingvo

Post jaro da evoluo, la eldono de la programlingvo PHP 8.2 estis prezentita. La nova branĉo inkluzivas serion de novaj funkcioj, same kiel plurajn ŝanĝojn, kiuj rompas kongruon.

Ŝlosilaj plibonigoj en PHP 8.2:

  • Aldonita la kapablo marki klason kiel nurlegebla. Propraĵoj en tiaj klasoj povas esti agordita nur unufoje, post kio ili ne estos disponeblaj por ŝanĝo. Antaŭe, individuaj klasaj propraĵoj povus esti markitaj nurlegeblaj, sed nun vi povas ŝalti ĉi tiun reĝimon por ĉiuj klasaj propraĵoj samtempe. Specifante la "nurlegeblan" flagon ĉe la klasnivelo ankaŭ blokas la dinamikan aldonon de propraĵoj al la klaso. nurlegebla klaso Afiŝu { publika funkcio __konstrui( publika ĉeno $titolo, publika Aŭtoro $aŭtoro, ) {} } $afiŝo = nova Afiŝo (/* … */); $post->nekonata = 'malĝusta'; // Eraro: Ne povas krei dinamikan posedaĵon Post::$nekonata
  • Добавлены отдельные типы «true», «false» и «null», которые могут принимать только одно допустимое значение и использоваться, например, для возвращения функцией признака завершения с ошибкой или пустого значения. Ранее «true», «false» и «null» могли использоваться только в связке с другими типами (например, «string|false»), а теперь могут применяться отдельно: function alwaysFalse(): false { return false; }
  • Provizis la kapablon filtri sentemajn agordojn en la stakspura eligo en la momento de eraro. Eltranĉi certajn informojn povas esti postulata kiam informoj pri eraroj kiuj okazas estas aŭtomate senditaj al triaj servoj, kiuj spuras problemojn kaj informas programistojn pri ili. Ekzemple, vi povas ekskludi parametrojn de la spuro, kiuj inkluzivas uzantnomojn, pasvortojn kaj mediajn variablojn. funkciotesto( $foo, #[\SensitiveParameter] $pasvorto, $baz ) { throw new Exception('Eraro'); } test('foo', 'pasvorto', 'baz'); Fatala eraro: Nekaptita Escepto: Eraro en test.php:8 Stack-spuro: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {ĉefa} ĵetita en test.php sur linio 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’);
  • Efektivigita lok-sendependa kazo konvertiĝo. Funkcioj kiel strtolower() kaj strtoupper() nun ĉiam konvertas la majusklecon de signoj en la ASCII-gamo, kiel kiam oni agordas la lokadon al "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 kapablo anstataŭigi variajn valorojn en ĉenojn uzante la esprimojn "${var}" kaj ${(var)}" estas malrekomendita. Subteno por ofte uzataj "{$var}" kaj "$var" anstataŭaĵoj estis konservita. Ekzemple: "Saluton {$mondo}"; OK "Saluton $mondo"; Bone "Saluton ${mondo}"; Malrekomendita: Uzado de ${} en ĉenoj estas malrekomendita
  • Malrekomenditaj parte subtenataj vokabloj kiuj povas esti nomitaj per "call_user_func($callable)" sed ne subtenas vokadon en la formo "$callable()": "self::method" "parent::method" "static::method" ["self", "method"] ["gepatro", "method"] ["static]", "["Fomethod", "Barreto:::metodo" :: metodo"]
  • В настройки добавлена директива error_log_mode, позволяющая определить режим доступа к логу с ошибками.

fonto: opennet.ru

Aldoni komenton