По една година развој презентирани издавање на програмски јазик 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:
класа А {}
класа Б се протега A {}
класа продуцент {
метод на јавна функција(): A {}
}
класа ChildProducer го проширува продуцентот {
метод на јавна функција(): B {}
}
Отпакување на операторот во низите „…$var“, дозволувајќи врши замена на постојните низи при дефинирање на нова низа;
Можност визуелно претставување на големи броеви со разграничувачи во нумерички литерали (1_000_000_00);
Поддршка слаби врски, кои ви дозволуваат да задржите референца за некој објект, но не го блокирате собирачот на ѓубре да го избрише поврзаниот објект;
Нови машини серијализација на објектот (комбинација од Serializable и __sleep()/__wakeup()), што го замени интерфејсот Serializable, кој ќе биде застарен;
// Враќа низа што ги содржи сите состојби на објектот;
јавна функција __serialize(): низа;
// Ја враќа состојбата на објект од низа
јавна функција __unserialize (низа $податоци): void;
Дозволено е фрлање исклучоци од метод __toString();
Додадена е поддршка за претходно вчитување на кешот на објектниот код. Додаден параметар за поставување opcache.превчитај, преку кој можете да наведете PHP скрипта што ќе се компајлира и ќе работи кога ќе се стартува серверот. Оваа скрипта може да го вчита оптичкиот код на други датотеки преку нивно директно вклучување или со користење на функцијата 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>&1 во школка
proc_open($cmd, [1 => ['цевка', 'w'], 2 => ['пренасочување', 1]], $pipes);
// како 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() на објекти.
Обезбедено е предупредување за употреба на застарена карактеристика кога се обидувате да обработите неточни симболи во функциите
base_convert(), bindec(), octdec() и hexdec(), и кога се одредува шаблон што не е низа во mb_ereg_replace().