PHP 7.4 программалоо тилинин чыгарылышы

Бир жылдык өнүгүүдөн кийин сунушталды программалоо тили чыгаруу PHP 7.4. Жаңы бутак бир катар жаңы функцияларды, ошондой эле шайкештикти бузган бир нече өзгөртүүлөрдү камтыйт.

Ачкыч жакшыртуулар PHP 7.4те:

  • Терилген касиеттери - класс касиеттери эми тип декларацияларын камтышы мүмкүн, мисалы:

    класс колдонуучусу {
    public int $id;
    коомдук сап $name;
    }

  • Кыскартылган "fn(parameter_list) => expr" функцияларын аныктоо үчүн синтаксис мааниси боюнча масштабды байланыштыруу менен. Мисалы, "fn($x) => $x + $y" аналогу "$fn2 = функциясы ($x) колдонуу ($y) {кайтаруу $x + $y;}");
  • Стенографиялык дайындоо оператору "??=" демейки маанини аныктоо үчүн колдонулушу мүмкүн ("a ??= b" "a = a ?? b" менен окшош, эгерде "a" аныкталса, анын мааниси сакталат, ал эми аныкталбаса, ал "b" мааниси ыйгарылат );
  • Чектелген мүмкүнчүлүк туунду кайтаруу түрлөрүндө түрлөрүнүн мурас иерархиясын сактоо же алынган аргумент түрлөрүндө баштапкы типтердин иерархиясын тескери алуу мүмкүнчүлүгү (ковариация кайтаруу түрү жана аргумент түрү контрварианс). Эми PHPде төмөнкү конструкцияларды колдонсо болот:

    класс А {}
    класс B узартат А {}

    класс продюсер {
    коомдук функция ыкмасы(): A {}
    }
    class ChildProducer Продюсерди кеңейтет {
    коомдук функция ыкмасы(): B {}
    }

  • “…$var” массивдериндеги операторду таңгактан чыгаруу, уруксат берүү жаңы массивди аныктоодо учурдагы массивдерди алмаштырууну аткаруу;

    $parts = ['алма', 'алмурут'];
    $fruits = ['банан', 'апельсин', …$бөлүктөрү, 'дарбыз'];
    // ['банан', 'апельсин', 'алма', 'алмурут', 'дарбыз'];

  • мүмкүнчүлүк чоң сандарды сандык литералдардагы бөлгүчтөр менен визуалдык көрсөтүү (1_000_000_00);
  • колдоо алсыз шилтемелер, бул объектке шилтемени сактап калууга мүмкүндүк берет, бирок таштанды жыйноочуга байланышкан объектти өчүрүүгө бөгөт койбойт;
  • жаңы механизм объектти сериялаштыруу (Serializable жана __sleep()/__wakeup() комбинациясы), ал эскирүүчү Serializable интерфейсин алмаштырды;

    // Объекттин бардык абалын камтыган массивди кайтарат;
    коомдук функция __serialize(): array;

    // Массивден объекттин абалын калыбына келтирет
    коомдук функция __unserialize($дата массиви): void;

  • Методдон бөтөнчөлөрдү чыгарууга уруксат берилет __toString();
  • Объект коду кэшин алдын ала жүктөө үчүн кошумча колдоо. Орнотуу үчүн кошумча параметр
    opcache.preload, анын жардамы менен сиз сервер башталганда түзүлө турган жана иштей турган PHP скриптин көрсөтө аласыз. Бул скрипт башка файлдардын операция кодун аларды түздөн-түз кошуу же opcache_compile_file() функциясын колдонуу аркылуу жүктөй алат;

  • Castagnoli полиномиясын колдонуу менен текшерүү суммасын эсептөө үчүн Hash кеңейтүүсүнө crc32c функциясы кошулду;
  • Натрий китепканасын ишке ашырууда argon2i жана argin2id сырсөздөрдү хэштөө ыкмалары үчүн password_hash() функциясына колдоо кошулду, эгерде PHP либаргонсуз курулса;
  • Кошулган 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 сыяктуу
    proc_open($cmd, [1 => ['түтүк', 'w'], 2 => ['багыттоо', 1]], $түтүктөр);

    // кабыктагы 2>/dev/null же 2>nul сыяктуу
    proc_open($cmd, [1 => ['түтүк', 'w'], 2 => ['null']], $pipes);

  • Firebird/Interbase, Recode жана WDDX кеңейтүүлөрү негизги бөлүштүрүүдөн чыгарылат. Бул кеңейтүүлөр азыр PECL аркылуу таратылат;
  • Категорияга которулду эскирген кашаасыз уя салынган үчтүк операторлор, тармал кашааларды ("$var{$idx}") колдонуу менен массивдин элементтерине жана саптарга кирүү, is_real() функциясы жана чыныгыга чыгаруу, ата-эне классы жок аталык ачкыч сөздү колдонуу, 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() ичинде сап эмес үлгү көрсөтүүдө.

Source: opennet.ru

Комментарий кошуу