PHP 8.2 programmeartaal release

Nei in jier fan ûntwikkeling waard de frijlitting fan 'e programmeartaal PHP 8.2 presintearre. De nije tûke omfettet in searje nije funksjes, lykas ferskate feroarings dy't kompatibiliteit brekke.

Wichtige ferbetterings yn PHP 8.2:

  • De mooglikheid tafoege om in klasse te markearjen as allinich-lêzen. Eigenskippen yn sokke klassen kinne mar ien kear ynsteld wurde, wêrnei't se net feroare wurde kinne. Earder koenen yndividuele klasse-eigenskippen wurde markearre allinnich-lês, mar no kinne jo ynskeakelje dizze modus foar alle klasse eigenskippen yn ien kear. It opjaan fan de "allinnich-lêzen" flagge op klassenivo blokkearret ek eigenskippen dynamysk taheakke oan de klasse. readonly class Post { publike funksje __construct (iepenbiere string $ title, iepenbiere Auteur $ auteur, ) {} } $ post = nije Post (/* … */); $post->unknown = 'ferkeard'; // Flater: Kin dynamyske eigenskip net oanmeitsje Post::$ûnbekend
  • Добавлены отдельные типы «true», «false» и «null», которые могут принимать только одно допустимое значение и использоваться, например, для возвращения функцией признака завершения с ошибкой или пустого значения. Ранее «true», «false» и «null» могли использоваться только в связке с другими типами (например, «string|false»), а теперь могут применяться отдельно: function alwaysFalse(): false { return false; }
  • Biedt de mooglikheid om gefoelige parameters te filterjen yn 'e útfier fan' e stapelspoar by in flater. It útsnijen fan bepaalde ynformaasje kin nedich wêze as ynformaasje oer flaters dy't foarkomme automatysk stjoerd wurdt nei tsjinsten fan tredden dy't problemen folgje en ûntwikkelders der oer ynformearje. Jo kinne bygelyks parameters dy't brûkersnammen, wachtwurden en omjouwingsfariabelen omfetsje útslute fan tracing. function test ($foo, #[\SensitiveParameter] $wachtwurd, $baz) { throw new Exception ('Flater'); } test('foo', 'wachtwurd', 'baz'); Fatale flater: Net fûn útsûndering: Flater yn test.php:8 Stack trace: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} smiten yn test.php op lyn 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’);
  • Ymplementearre lokaasje-ûnôfhinklike saakkonverzje. Funksjes lykas strtolower() en strtoupper() konvertearje no altyd it gefal fan karakters yn it ASCII-berik as ynsteld op de "C"-lokaal.
  • Добавлены новые функции: 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]», разрешающий использование динамических свойств.
  • De mooglikheid om fariabele wearden te ferfangen yn stringen mei de útdrukkingen "${var}" en ${(var)} is ôfret. Stipe foar de meast brûkte "{$var}" en "$var" ferfangings is behâlden. Bygelyks: "Hallo {$world}"; OK "Hallo $wrâld"; OK "Hallo ${wrâld}"; Ôfret: it brûken fan ${} yn strings wurdt ôfret
  • Ferâldere foar in part stipe callables dy't kinne wurde neamd fia "call_user_func($callable)" mar net stypje oprop yn 'e foarm fan "$callable()": "self::method" "parent::method" "static" ::metoade " ["sels", "metoade"] ["âlder", "metoade"] ["statysk", "metoade"] ["Foo", "Bar::metoade"] [nije Foo, "Bar: :metoade" ]
  • В настройки добавлена директива error_log_mode, позволяющая определить режим доступа к логу с ошибками.

Boarne: opennet.ru

Add a comment