Издание на програмски јазик PHP 8.3

По една година развој, беше претставено изданието на програмскиот јазик PHP 8.3. Новата гранка вклучува низа нови функции, како и неколку промени кои ја нарушуваат компатибилноста.

Клучни промени во PHP 8.3:

  • За време на клонирањето на класата, можно е повторно да се иницијализираат својствата со атрибутот „само за читање“. Надминувањето на својствата само за читање е дозволено само внатре во функцијата „__clone“: класа само за читање Post { public function __construct( public DateTime $createdAt, ) {} public функција __clone() { $this->createdAt = new DateTime(); // дозволено иако својството „createdAt“ е само за читање. } }
  • Обезбедена е можноста за користење константи со индикација за тип во класи, особини и набројувања: class Foo { const string BAR = 'baz'; }
  • Додадена е поддршка за атрибутот „#[Override]“, со кој развивачот може да го извести толкувачот дека означениот метод отфрла некој родителски метод. Ако нема прескокнување, толкувачот ќе прикаже грешка.
  • Променето ракување со негативните вредности како индекс на низа. На пример, кога додавате елемент со број „-5“ во празна низа и додавате друг елемент, претходно вториот елемент беше зачуван со индекс „0“, но почнувајќи од верзијата PHP 8.3 ќе се зачува со индекс „-4“ . $ низа = []; $array[-5] = 'a'; $array[] = 'b'; var_export ($ низа); // Беше низа (-5 => 'a', 0 => 'b') // Стана низа (-5 => 'a', -4 => 'b')
  • Додадена е можност за креирање анонимни класи во режим само за читање: $class = new class only read { public function __construct( public string $foo = 'bar', ) {} };
  • Додадена е функцијата json_validate() за брзо проверка дали низата е во JSON формат без да се вршат операции за декодирање. json_validate (низа $json, int $depth = 512, int $flags = 0): буол
  • Додадени се нови методи во класата Randomizer, која обезбедува API на високо ниво за генерирање на псевдо-случајни броеви и секвенци: getBytesFromString за генерирање на низа со дадена големина, користејќи ги по случаен редослед знаците присутни во друга низа; getFloat и nextFloat за генерирање на случаен број со подвижна запирка што спаѓа во наведениот опсег.
  • Додадена е можност за преземање константи со помош на динамична синтакса на класа: class Foo { const BAR = 'bar'; } $name = 'BAR'; // Претходно, за да ја вратите константата BAR, требаше да ја повикате константата(Foo::class . '::' . $name); // Сега само наведете Foo::{$name};
  • Додадено е генерирање на поединечни исклучоци (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) во случај на проблеми кои се појавуваат при операциите кои работат со датуми и време.
  • Подобрено справување со грешките што се појавуваат при парсирање на сериски податоци во функцијата unserialize(). Во случај на проблеми, unserialize() сега издава E_WARNING наместо E_NOTICE.
  • Направени се промени во функцијата range(). Исклучок се генерира кога се обидувате да поминете објекти, ресурси или низи во променливи кои ги дефинираат границите на опсегот, како и кога се одредува негативна вредност во параметарот $step или недефинирана вредност во кој било параметар. Сега може да се изнесе листа на знаци кога се одредуваат низи наместо броеви (на пример, „опсег('5', 'z')").
  • Го смени однесувањето на особините со статички својства, кои сега ги надминуваат статичките својства наследени од матичната класа.
  • Додадени се поставки за заштита од прелевање на оџакот. Директивите zend.max_allowed_stack_size и zend.reserved_stack_size се додадени во датотеката ini, дефинирајќи ја максималната дозволена и резервирана големина на стек. Програмата ќе се сруши кога се приближува до исцрпување на стекот, кога стекот е полн повеќе од разликата помеѓу zend.max_allowed_stack_size и zend.reserved_stack_size (извршувањето ќе престане пред да се појави дефект на сегментација). Стандардно, вредноста на zend.max_allowed_stack_size е поставена на 0 (0 - големината се одредува автоматски; за да го оневозможите ограничувањето, можете да го поставите на -1).
  • Додадени се нови функции на POSIX posix_sysconf(), posix_pathconf(), posix_fpathconf() и posix_eaccess().
  • Додадена е функцијата mb_str_pad, која е аналог на стринг функцијата str_pad(), дизајнирана да работи со повеќебајтни шифрирања како UTF-8.
  • Ви овозможува да креирате затворања од методи и да пренесувате именувани аргументи на тие затворања. $test = нов Тест(); $closure = $test->magic(…); $closure(a: 'здраво', b: 'свет');
  • Променето однесување при ракување со видливоста на константите во интерфејсите. интерфејс I { public const FOO = 'foo'; } класа C имплементира I { private const FOO = 'foo'; }
  • Проширени се можностите на функциите array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() и proc_get_status().
  • Способноста да се пренесе негативна вредност на $widths на mb_strimwidth() е застарена. Константата NumberFormatter::TYPE_CURRENCY е отстранета. Поддршката за повикување на функцијата ldap_connect() со два параметри $host и $port е прекината. Поставката opcache.consistency_checks е отстранета.

Извор: opennet.ru

Додадете коментар