PHP 7.4 ծրագրավորման լեզվի թողարկում

Մեկ տարի զարգացումից հետո ներկայացված ծրագրավորման լեզվի թողարկում PHP 7.4. Նոր մասնաճյուղը ներառում է մի շարք նոր հնարավորություններ, ինչպես նաև մի քանի բեկումնային փոփոխություններ:

Բանալի բարելավումներ PHP 7.4-ում.

  • Մուտքագրված հատկություններ - դասի հատկությունները այժմ կարող են ներառել տիպի հայտարարություններ, օրինակ.

    դասի օգտվող {
    public int $id;
    հանրային տող $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-ում.

    դաս A {}
    B դասը ընդլայնվում է A {}

    դասի պրոդյուսեր {
    հանրային ֆունկցիայի մեթոդ(): A {}
    }
    class ChildProducer extends Producer {
    հանրային ֆունկցիայի մեթոդ(): B {}
    }

  • «...$var» զանգվածների ներսում օպերատորի ապափաթեթավորում թույլ տալով կատարել առկա զանգվածների փոխարինում նոր զանգված սահմանելիս.

    $parts = ['խնձոր', 'տանձ'];
    $fruits = ['բանան', 'նարնջագույն', …$parts, 'ձմերուկ'];
    // ['բանան', 'նարնջագույն', 'խնձոր', 'տանձ', 'ձմերուկ'];

  • Հնարավորություն մեծ թվերի տեսողական ներկայացում տարանջատիչներով թվային տառերով (1_000_000_00);
  • Աջակցություն թույլ օղակներ, որոնք թույլ են տալիս պահպանել օբյեկտի հղումը, բայց չեն արգելափակում աղբահանի կողմից հարակից օբյեկտի հեռացումը.
  • Նոր մեխանիզմ օբյեկտների սերիականացում (Serializable-ի և __sleep()/__wakeup()-ի համադրություն), որը փոխարինում է Serializable ինտերֆեյսին, որը հնացած կլինի;

    // Վերադարձնում է օբյեկտի բոլոր վիճակները պարունակող զանգված։
    հանրային ֆունկցիա __serialize(): զանգված;

    // Վերականգնում է առարկայի վիճակը զանգվածից
    հանրային ֆունկցիա __unserialize (զանգված $data): void;

  • Թույլատրվում է մեթոդից բացառություններ գցել __toString ();
  • Ավելացվեց աջակցություն օբյեկտի կոդերի քեշը նախապես բեռնելու համար: Կազմաձևման համար ավելացվել է պարամետր:
    opcache.load, որի միջոցով կարող եք նշել PHP սկրիպտ, որը կկոմպիլացվի և կգործարկվի սերվերի մեկնարկի ժամանակ։ Այս սկրիպտը կարող է բեռնել այլ ֆայլերի opcode-ը՝ դրանք ուղղակիորեն ներառելով կամ օգտագործելով opcache_compile_file() ֆունկցիան։
  • crc32c ֆունկցիան ավելացվել է Hash ընդլայնմանը՝ Castagnoli բազմանդամի օգտագործմամբ չեկային գումարները հաշվարկելու համար;
  • password_hash() ֆունկցիան թարմացվել է՝ Sodium գրադարանի իրականացման մեջ argon2i և argin2id գաղտնաբառերի հեշավորման մեթոդները աջակցելու համար, եթե 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);

    // Like 2>&1 shell-ում
    proc_open($cmd, [1 => ['խողովակ', 'w'], 2 => ['վերահղում', 1]], $խողովակներ);

    // ինչպես 2>/dev/null կամ 2>nul shell-ում
    proc_open ($cmd, [1 => ['pipe', '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

Գնեք հուսալի հոստինգ DDoS պաշտպանությամբ կայքերի, VPS VDS սերվերների համար 🔥 Գնեք հուսալի կայքերի հոսթինգ՝ DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster