Rilaxx tal-lingwa ta' programmar PHP 8.2

Wara sena ta 'żvilupp, ġie ppreżentat ir-rilaxx tal-lingwa ta' programmar PHP 8.2. Il-fergħa l-ġdida tinkludi serje ta 'karatteristiċi ġodda, kif ukoll diversi bidliet li jiksru l-kompatibilità.

Titjib ewlieni fil-PHP 8.2:

  • Żid il-ħila li timmarka klassi bħala li tinqara biss. Proprjetajiet fi klassijiet bħal dawn jistgħu jiġu stabbiliti darba biss, u wara ma jistgħux jinbidlu. Preċedentement, il-proprjetajiet tal-klassi individwali setgħu jiġu mmarkati bħala read-only, iżda issa tista 'tippermetti dan il-mod għall-proprjetajiet tal-klassi kollha f'daqqa. L-ispeċifikazzjoni tal-bandiera "readonly" fil-livell tal-klassi timblokka wkoll il-proprjetajiet milli jiżdiedu b'mod dinamiku mal-klassi. klassi readonly Post { public function __construct ( sekwenza pubblika $ titolu, Awtur pubbliku $ awtur, ) {} } $ post = Post ġdid (/* … */); $post->unknown = 'ħażin'; // Żball: Ma tistax toħloq proprjetà dinamika Post::$mhux magħruf
  • Добавлены отдельные типы «true», «false» и «null», которые могут принимать только одно допустимое значение и использоваться, например, для возвращения функцией признака завершения с ошибкой или пустого значения. Ранее «true», «false» и «null» могли использоваться только в связке с другими типами (например, «string|false»), а теперь могут применяться отдельно: function alwaysFalse(): false { return false; }
  • Jipprovdi l-abbiltà li jiġu ffiltrati parametri sensittivi fl-output tat-traċċa tal-munzell waqt żball. It-tqattigħ ta' ċerta informazzjoni jista' jkun meħtieġ meta informazzjoni dwar żbalji li jseħħu tintbagħat awtomatikament lil servizzi ta' partijiet terzi li jsegwu l-problemi u jinfurmaw lill-iżviluppaturi dwarhom. Pereżempju, tista' teskludi parametri li jinkludu usernames, passwords, u varjabbli ambjentali mit-traċċar. test tal-funzjoni( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Eċċezzjoni('Żball'); } test('foo', 'password', 'baz'); Żball fatali: Eċċezzjoni mhux maqbuda: Żball fit-test.php:8 Stack trace: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} thrown in test.php fuq il-linja 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’);
  • Implimentat konverżjoni tal-każ indipendenti mil-lokal. Funzjonijiet bħal strtolower() u strtoupper() issa dejjem jikkonvertu l-każ tal-karattri fil-firxa ASCII bħallikieku ssettjat għall-lokal "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]», разрешающий использование динамических свойств.
  • Il-ħila li tissostitwixxi valuri varjabbli fi strings bl-użu tal-espressjonijiet "${var}" u ${(var)} ġiet deprecata. Inżamm l-appoġġ għas-sostituzzjonijiet "{$var}" u "$var" użati b'mod komuni. Per eżempju: "Hello {$world}"; OK "Hello $world"; OK "Hello ${world}"; Deprecated: L-użu ta' ${} fi strings huwa deprecated
  • Callables parzjalment appoġġjati deprecati li jistgħu jissejħu permezz ta' "call_user_func($callable)" iżda ma jappoġġawx is-sejħa fil-forma ta' "$callable()": "self::method" "parent::method" "static" ::method " ["self", "metodu"] ["ġenitur", "metodu"] ["statiku", "metodu"] ["Foo", "Bar::metodu"] [Foo ġdid, "Bar::metodu" ]
  • В настройки добавлена директива error_log_mode, позволяющая определить режим доступа к логу с ошибками.

Sors: opennet.ru

Żid kumment