Рэліз мовы праграмавання PHP 7.4

Пасля года распрацоўкі прадстаўлены рэліз мовы праграмавання PHP 7.4. Новая галінка ўключае серыю новых магчымасцяў, а таксама некалькі змен, якія парушаюць сумяшчальнасць.

ключавыя паляпшэння у PHP 7.4:

  • Тыпізаваныя ўласцівасці - Уласцівасці класаў зараз могуць уключаць аб'явы тыпаў, напрыклад:

    class User {
    public int $id;
    public string $name;
    }

  • Скарочаны сінтаксіс вызначэння функцый "fn(parameter_list) => expr" з прывязкай вобласці бачнасці па значэнні. Напрыклад "fn($x) => $x + $y" з'яўляецца аналагам "$fn2 = function ($x) use ($y) {return $x + $y;}");
  • Скарочаны аператар прысваення "??=", які можа выкарыстоўвацца для вызначэння значэння па змаўчанні ("a ?? = b" аналагічна "a = a ?? b", калі "a" вызначаны яго значэнне захоўваецца, а калі не вызначаны прысвойваецца значэнне "b") );
  • Абмежаваная магчымасць захавання іерархіі атрымання ў спадчыну тыпаў у вытворных ад іх тыпах вяртаюцца значэнняў або магчымасць пераўтварэння іерархіі зыходных тыпаў на супрацьлеглую ў вытворных тыпах аргументаў (падступнасць які вяртаецца тыпу і контраварыянтнасць тыпу аргументаў). У PHP зараз можна выкарыстоўваць наступныя канструкцыі:

    class A {}
    class B extends A {}

    class Producer {
    public function method(): A {}
    }
    class ChildProducer extends Producer {
    public function method(): B {}
    }

  • Аператар распакавання ўсярэдзіне масіваў «…$var», які дазваляе выконваць падстаноўку існуючых масіваў пры вызначэнні новага масіва;

    $parts = ['apple', 'pear'];
    $fruits = ['banana', 'orange', …$parts, 'watermelon'];
    // ['banana', 'orange', 'apple', 'pear', 'watermelon'];

  • Магчымасць нагляднага афармлення вялікіх лікаў з падзельнікамі ў лікавых літаралах (1_000_000_00);
  • Падтрымка слабых спасылак, якія дазваляюць захаваць спасылку на аб'ект, але не якія блакуюць выдаленне звязанага аб'екта зборшчыкам смецця;
  • Новы механізм серыялізацыі аб'ектаў (камбінацыя Serializable і __sleep()/__wakeup()), які прыйшоў на змену інтэрфейсу Serializable, які будзе абвешчаны састарэлым;

    // Вяртае масіў, які змяшчае ўсе станы аб'екта;
    public function __serialize(): array;

    // Аднаўляе стан аб'екта з масіва
    public function __unserialize(array $data): void;

  • Дазволена генерацыя выключэнняў з метаду __toString();
  • Дададзена падтрымка папераджальнай загрузкі кэша аб'ектнага кода. Для наладкі дададзены параметр
    opcache.preload, праз які можна пазначыць PHP-скрыпт, які будзе скампіляваны і запушчаны пры запуску сервера. Дадзены скрыпт можа загрузіць опкод іншых файлаў праз іх прамое ўключэнне ці пры дапамозе функцыі opcache_compile_file();

  • У пашырэнне Hash дададзена функцыя crc32c для вылічэння кантрольных сум з выкарыстаннем палінома Кастаньолелі;
  • У функцыю password_hash() дададзена падтрымка метадаў хэшавання пароляў argon2i і argin2id, у рэалізацыі бібліятэкі Sodium, калі PHP збіраецца без libargon;
  • Дададзена функцыя mb_str_split(), аналагічная str_split(), але якая аперуе не байтамі а пазіцыямі знакаў у шматбайтавым радку;
  • У функцыі strip_tags() дададзена магчымасць перадачы масіва з імёнамі тэгаў, г.зн. замест strip_tags($str, ' ') зараз можна паказаць strip_tags($str, ['a', 'p']);
  • У proc_open() дазволена пералік аперанд у масіве, замест указанне радка для запуску, а таксама рэалізаваная магчымасць перанакіравання струменяў і падтрымка нулявога файлавага дэскрыптара;

    proc_open(['php', '-r', 'echo Hello World\n';'], $descriptors, $pipes);

    // Як 2>&1 у shell
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['redirect', 1]], $pipes);

    // як 2>/dev/null або 2>nul у shell
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['null']], $pipes);

  • З базавай пастаўкі выключаны пашырэнні Firebird/Interbase, Recode і WDDX. Дадзеныя пашырэнні зараз распаўсюджваюцца праз PECL;
  • Пераведзены ў разрад састарэлых такія магчымасці, як укладзеныя тэрнарныя аператары без дужак, зварот да элементаў масіваў і радкоў з выкарыстаннем фігурных дужак («$var{$idx}»), функцыя is_real() і прывядзенне да тыпу real, выкарыстанне ключавога слова parent без бацькоўскага класа, параметр канфігурацыі allow_url_include, ужыванне array_key_exists() над аб'ектамі.

    Абвешчаныя састарэлымі функцыі get_magic_quotes_gpc(), get_magic_quotes_runtime(),
    hebrevc(), convert_cyr_string(), money_format(), ezmlm_hash(), restore_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().

    Забяспечана выснова папярэджання аб прымяненні састарэлай магчымасці пры спробе апрацоўкі некарэктных сімвалаў у функцыях
    base_convert(), bindec(), octdec() і hexdec(), а таксама пры ўказанні нерадковага шаблону ў mb_ereg_replace().

Крыніца: opennet.ru

Дадаць каментар