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

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

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

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

    դասի օգտվող {
    public int $id;
    հանրային տող $name;
    }

  • Կրճատ շարահյուսություն «fn(parameter_list) => expr» ֆունկցիաները սահմանելու համար՝ ըստ արժեքի կապող շրջանակի: Օրինակ, “fn($x) => $x + $y”-ը նման է “$fn2 = ֆունկցիան ($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() ֆունկցիային աջակցություն է ավելացվել 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);

    // Like 2>&1 shell-ում
    proc_open ($cmd, [1 => ['pipe', 'w'], 2 => ['վերահղում', 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() ֆունկցիան և փոխանցումը իրականին, առանց մայր դասի մայր հիմնաբառի օգտագործումը, պարամետր 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

Добавить комментарий