Kutolewa kwa lugha ya programu ya PHP 7.4

Baada ya mwaka wa maendeleo imewasilishwa kutolewa kwa lugha ya programu PHP 7.4. Tawi jipya linajumuisha mfululizo wa vipengele vipya, pamoja na mabadiliko kadhaa ambayo yanavunja utangamano.

Ufunguo maboresho katika PHP 7.4:

  • Sifa Zilizoandikwa - mali ya darasa sasa inaweza kujumuisha matamko ya aina, kwa mfano:

    Mtumiaji wa darasa {
    umma int $id;
    kamba ya umma $name;
    }

  • Kifupi syntax ya kufafanua chaguo za kukokotoa "fn(parameter_list) => expr" yenye wigo unaofunga thamani. Kwa mfano, β€œfn($x) => $x + $y” ni sawa na β€œ$fn2 = kazi ($x) matumizi ($y) {return $x + $y;}”);
  • Mwendeshaji wa kazi ya mkato "??=" ambayo inaweza kutumika kufafanua thamani chaguo-msingi ("a ??= b" inafanana na "a = a ?? b", ikiwa "a" imefafanuliwa thamani yake inahifadhiwa, na ikiwa haijafafanuliwa. imepewa thamani "b");
  • Kikomo nafasi kuhifadhi safu ya urithi wa aina katika aina za urejeshaji zinazotokana, au uwezo wa kubadilisha safu ya aina asili katika aina za hoja zinazotokana (ushirikiano aina ya kurudi na ukiukaji wa aina ya hoja). Miundo ifuatayo sasa inaweza kutumika katika PHP:

    darasa A {}
    daraja B huongeza A {}

    Mtayarishaji wa darasa {
    njia ya utendaji wa umma(): A {}
    }
    class ChildProducer huongeza Producer {
    njia ya utendaji wa umma(): B {}
    }

  • Kufungua opereta ndani ya safu "…$var", kuruhusu fanya uingizwaji wa safu zilizopo wakati wa kufafanua safu mpya;

    $parts = ['apple', 'pear'];
    $fruits = ['ndizi', 'chungwa', …$parts, 'watermelon'];
    // ['ndizi', 'chungwa', 'apple', 'peari', 'tikiti maji'];

  • Fursa uwakilishi wa kuona wa idadi kubwa na vikomo katika maandishi halisi ya nambari (1_000_000_00);
  • Support viungo dhaifu, ambayo inakuwezesha kuhifadhi kumbukumbu kwa kitu, lakini usizuie mtozaji wa takataka kufuta kitu kinachohusika;
  • Mpya utaratibu usanifu wa kitu (mchanganyiko wa Serializable na __sleep()/__wakeup()), ambao ulibadilisha kiolesura cha Serializable, ambacho kitaacha kutumika;

    // Hurejesha safu iliyo na hali zote za kitu;
    kazi ya umma __serialize(): safu;

    // Hurejesha hali ya kitu kutoka kwa safu
    kazi ya umma __unserialize(safu $data): batili;

  • Inaruhusiwa kutupa tofauti kutoka kwa mbinu __toString();
  • Usaidizi ulioongezwa wa kupakia mapema akiba ya msimbo wa kitu. Imeongeza parameta ya kuweka
    opcache.pakia mapema, kupitia ambayo unaweza kutaja hati ya PHP ambayo itakusanywa na kuendeshwa wakati seva inapoanza. Hati hii inaweza kupakia opcode ya faili zingine kupitia kujumuishwa kwao moja kwa moja au kutumia opcache_compile_file() chaguo la kukokotoa;

  • Imeongeza chaguo za kukokotoa za crc32c kwenye kiendelezi cha Hash ili kukokotoa hesabu za hundi kwa kutumia Castagnoli polynomial;
  • Usaidizi ulioongezwa kwa nenosiri_hash () kazi ya njia za hashing ya nenosiri argon2i na argin2id, katika utekelezaji wa maktaba ya Sodiamu, ikiwa PHP imejengwa bila libargon;
  • Kazi iliyoongezwa mb_str_split(), sawa na str_split(), lakini haifanyi kazi kwa baiti bali na nafasi za herufi katika mfuatano wa baiti nyingi;
  • Kazi ya strip_tags() sasa ina uwezo wa kupitisha safu iliyo na majina ya lebo, i.e. badala ya strip_tags($str, ' ') sasa unaweza kubainisha strip_tags($str, ['a', 'p']);
  • proc_open() inaruhusu uendeshaji kuorodheshwa katika safu badala ya kamba kuendesha, na pia hutoa uelekezaji upya wa nyuzi na usaidizi kwa maelezo ya faili tupu;

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

    // Kama 2>&1 kwenye ganda
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['redirect', 1]], $pipes);

    // kama 2>/dev/null au 2>nul kwenye ganda
    proc_open($cmd, [1 => ['bomba', 'w'], 2 => ['null']], $pipes);

  • Viendelezi vya Firebird/Interbase, Recode na WDDX havijajumuishwa kwenye usambazaji wa kimsingi. Viendelezi hivi sasa vinasambazwa kupitia PECL;
  • Imehamishwa hadi kategoria imepitwa na wakati vipengele kama vile waendeshaji wa ternary zilizowekwa bila mabano, kufikia vipengele vya safu na nyuzi kwa kutumia brashi zilizopinda (β€œ$var{$idx}”), kitendakazi cha is_real() na kutuma hadi halisi, kwa kutumia neno kuu la mzazi bila darasa la mzazi, kigezo allow_url_pamoja na usanidi. , kwa kutumia array_key_exists() kwenye vitu.

    Kazi get_magic_quotes_gpc(), get_magic_quotes_runtime(), na
    hebrevc(), convert_cyr_string(), money_format(), ezmlm_hash(), restore_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().

    Onyo kuhusu matumizi ya kipengele cha kizamani limetolewa wakati wa kujaribu kuchakata alama zisizo sahihi katika utendakazi
    base_convert(), bindec(), octdec() na hexdec(), na wakati wa kubainisha mchoro usio na kamba katika mb_ereg_replace().

Chanzo: opennet.ru

Kuongeza maoni