PHP 8.2 Programméiersprooch Verëffentlechung

No engem Joer vun der Entwécklung gouf d'Verëffentlechung vun der PHP 8.2 Programméiersprooch presentéiert. Déi nei Branche enthält eng Serie vun neie Fonctiounen, souwéi e puer Ännerungen déi d'Kompatibilitéit briechen.

Schlësselverbesserungen am PHP 8.2:

  • D'Fäegkeet bäigefüügt fir eng Klass als nëmmen liesen ze markéieren. Eegeschaften an esou Klassen kënnen nëmmen eemol gesat ginn, duerno sinn se net fir Ännerung verfügbar. Virdrun konnten eenzel Klasseneigenschaften als Lieszeechen markéiert ginn, awer elo kënnt Dir dëse Modus fir all Klasseigenschaften gläichzäiteg ausschalten. D'Spezifikatioun vun der "readonly" Fändel um Klass Niveau blockéiert och déi dynamesch Zousatz vun Eegeschafte fir d'Klass. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'falsch'; // Feeler: Kann net dynamesch Propriétéit schafen Post:: $ onbekannt
  • Добавлены отдельные типы «true», «false» и «null», которые могут принимать только одно допустимое значение и использоваться, например, для возвращения функцией признака завершения с ошибкой или пустого значения. Ранее «true», «false» и «null» могли использоваться только в связке с другими типами (например, «string|false»), а теперь могут применяться отдельно: function alwaysFalse(): false { return false; }
  • Gitt d'Fäegkeet fir sensibel Astellungen am Stack Trace Output zu der Zäit vun engem Feeler ze filteren. D'Ausschneiden vun verschidden Informatioune kann erfuerderlech sinn wann Informatioun iwwer Feeler, déi optrieden, automatesch un Drëtt-Partei-Servicer geschéckt gëtt, déi Problemer verfollegen an d'Entwéckler doriwwer informéieren. Zum Beispill kënnt Dir Parameteren aus der Spuer ausschléissen, déi Benotzernimm, Passwierder an Ëmfeldvariablen enthalen. Funktiounstest ($foo, #[\SensitiveParameter] $Passwuert, $baz) {werfen nei Ausnam ('Feeler'); } test('foo', 'Passwuert', 'baz'); Fatal Feeler: Uncaught Ausnam: Feeler am test.php:8 Stack Trace: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} an test.php op Linn 8 geworf
  • Разрешено определение констант в типажах (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’);
  • Ëmgesat locale-onofhängeg Fall Konversioun. Funktiounen wéi strtolower () a strtoupper () konvertéieren elo ëmmer de Fall vun Zeechen am ASCII-Beräich, wéi wann Dir d'Lokale op "C" setzt.
  • Добавлены новые функции: 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]», разрешающий использование динамических свойств.
  • D'Kapazitéit fir variabel Wäerter a Strings ze ersetzen mat "${var}" an ${(var)}" Ausdréck gouf ofgeschaaft. Ënnerstëtzung fir allgemeng benotzt "{$var}" an "$var" Ersatzstécker gouf behalen. Zum Beispill: "Hallo {$world}"; OK "Hallo $world"; OK "Moien ${Welt}"; Deprecéiert: ${} a Strings ze benotzen ass ofgeschaaft
  • Deprecéiert deelweis ënnerstëtzt Callables déi iwwer "call_user_func($callable)" opgeruff kënne ginn, awer ënnerstëtzen net Uruff an der Form "$callable()": "self::method" "parent::method" "static::method" ["selwer", "Methode"] ["parent", "Methode"] [""]", "Fomethod"] ["]", [:B] :: Method"]
  • В настройки добавлена директива error_log_mode, позволяющая определить режим доступа к логу с ошибками.

Source: opennet.ru

Setzt e Commentaire