Մեկ տարի զարգացումից հետո ներկայացված ծրագրավորման լեզվի թողարկում 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» զանգվածների ներսում օպերատորի ապափաթեթավորում թույլ տալով կատարել առկա զանգվածների փոխարինում նոր զանգված սահմանելիս.
Հնարավորություն մեծ թվերի վիզուալ ներկայացում՝ սահմանազատիչներով թվային տառերով (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()-ը թույլ է տալիս օպերանդները ցուցակագրել զանգվածում, այլ ոչ թե տողի գործարկելու համար, ինչպես նաև ապահովում է շղթայի վերահղում և աջակցություն զրոյական ֆայլի նկարագրության համար;
// ինչպես 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() օբյեկտների վրա:
Նախազգուշացում է տրվել հնացած հատկանիշի օգտագործման մասին, երբ փորձում եք գործառույթներում սխալ նշաններ մշակել
base_convert(), bindec(), octdec() և hexdec(), իսկ mb_ereg_replace(-ում ոչ տողային օրինաչափություն նշելիս):