Подано реліз мови програмування PHP 7.4
Представлено реліз мови програмування PHP 7.4
Представлено реліз мови програмування PHP 7.4. Нова гілка включає серію нових можливостей, а також кілька змін, що порушують сумісність.
Ключові покращення в PHP 7.4:
- Типізовані властивості - властивості класів тепер можуть включати оголошення типів, наприклад:
class User { public int $id; public string $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 тепер можна використовувати такі конструкції:
class A {} class B extends A {} class Producer { public function method(): A {} } class ChildProducer extends Producer { public function method(): B {} }
- Оператор розпакування всередині масивів "...$var", дозволяє виконувати підстановку існуючих масивів при визначенні нового масиву; $parts = ['apple', 'pear']; $fruits = ['banana', 'orange', ...$parts, 'watermelon']; // ['banana', 'orange', 'apple', 'pear', 'watermelon'];
- Можливість наглядного оформлення великих чисел з роздільниками в числових літералах (1_000_000_00);
- Підтримка слабких посилань, що дозволяють зберегти посилання на об'єкт, але не блокують видалення пов'язаного об'єкта збирачем сміття;
- Новий механізм серіалізації об'єктів (комбінація Serializable і __sleep()/__wakeup()), що прийшов на зміну інтерфейсу Serializable, який буде оголошений застарілим; // Повертає масив, що містить усі стани об'єкта; public function __serialize(): array; // Відновлює стан об'єкта з масиву public function __unserialize(array $data): void;
- Дозволено генерацію винятків із методу __toString();
- Додано підтримку запобіжного завантаження кешу об'єктного коду. Для налаштування додано параметр opcache.preload, через який можна вказати PHP-скрипт, який буде скомпілюваний і запущений при запуску сервера. Цей скрипт може завантажити опкод інших файлів через їхнє пряме включення або за допомогою функції opcache_compile_file();
- У розширення Hash додано функцію crc32c для обчислення контрольних сум з використанням полінома Кастаньолі;
- У функцію 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); // Як 2>&1 в shell proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['redirect', 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() та приведення до типу real, використання ключового слова parent без батьківського класу, параметр конфігурації 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_page_ /p>
Забезпечено виведення попередження про застосування застарілої можливості при спробі обробки некоректних символів у функціях base_convert(), bindec(), octdec() та hexdec(), а також при вказівці нерядкового шаблону в mb_ereg_replace().