Нові можливості
Типи, що обнулюються
Типи для параметрів і значень, що повертаються можуть бути позначені як обнулювані шляхом додавання префікса у вигляді знака питання. Це означає, що зазначені параметри і значення, що повертаються, можуть бути як зазначеного типу, так і null
Loading...
Результат виконання наведеного прикладу:
string(10) "elePHPant"
NULL
string(10) "elePHPant"
NULL
Uncaught Error: Too few arguments to function test(), 0 passed in...
Функції, що нічого не повертають
Був доданий тип значення, що повертається void. Функції з таким заданим типом значення, що повертається, не повинні нічого повертати. Тобто або взагалі не містити жодного оператора return, або використовувати його без параметра . null
не є коректним значенням для повернення таких функцій.
Loading...
Результат виконання наведеного прикладу:
null
int(2)
int(1)
Спроба використовувати значення таких функцій, що повертається, призведе до того, що це значення буде вважатися за **null
**без виведення попередження. Причина цього в тому, що попередження викликатимуть спільні функції вищого порядку.
Симетрична деструктуризація масиву
Можна використовувати короткий синтаксис ([]
) для деструктуризації масивів з метою присвоєння (у тому числі в foreach
), як альтернатива функції list()яка, втім, все ще підтримується.
Loading...
Видимість констант класу
Додано підтримку визначення області видимості для констант класу.
Loading...
Псевдотипiterable
Було додано новий псевдотип (схожий на callable), названий iterable. Він може використовуватися як параметр, так і як значення, що повертається там, де використовується масив або об'єкт, що реалізує інтерфейс Traversable. Що стосується підтипів, типи параметрів із дочірніх класів можуть розширити декларацію батьків типу array або Traversableдоiterable. Для типів повернення, дочірні класи можуть звужувати тип значення, що повертається з iterable до array або об'єкта реалізуючого Traversable
Loading...
Обробка кількох винятків в одному блоці catch
У блоці catch тепер можна обробляти кілька винятків, перераховуючи їх через символ вертикальної межі ( ). Це може бути корисним, якщо різні винятки обробляються однаково.
Loading...
Підтримка ключів у list()
Тепер можна вказувати ключі в операторі list() або в його новому короткому синтаксисі []
. Це дозволяє деструктурувати масиви з нечисловими чи непослідовними ключами.
Loading...
Підтримка негативних зсувів для рядків
Підтримка негативних зсувів для рядків додана в функції для роботи з рядками, а також у індексацію рядків за допомогою []
или{}
. У цих випадках негативні усунення інтерпретуються як усунення щодо кінця рядка.
Loading...
Результат виконання наведеного прикладу:
string (1) "e"
int(3)
Тепер підтримуються негативні зміщення у простому синтаксисі вказівки індексу у рядках та масивах.
Loading...
Результат виконання наведеного прикладу:
Последний символ 'bar' - 'r'.
Підтримка AEAD в ext/openssl
Підтримка AEAD (режими GCM та CCM) була додана шляхом розширення функцій openssl_encrypt() і openssl_decrypt() додатковими параметрами.
Преобразование callable вClosure за допомогою Closure::fromCallable()
В классClosure додано новий статичний метод для можливості легко перетворити callable в об'єкти типу Closure
Loading...
Результат виконання наведеного прикладу:
string(16) "значение"
Асинхронне оброблення сигналів
Нова функція pcntl_async_signals() була додана для дозволу асинхронної обробки сигналів без використання тиків (які виробляють багато накладних витрат).
Loading...
Результат виконання наведеного прикладу:
SIGHUP
Підтримка HTTP/2 server push в ext/curl
Підтримка "server push" додана в модуль CURL (потрібна версія 7.46 та вище). Використовувати можна у функції curl_multi_setopt() з новою константою CURLMOPT_PUSHFUNCTION
. Також додані константи CURL_PUSH_OK
і CURL_PUSH_DENY
для визначення, було прийнято чи відхилено "server push".
Контекстні опції потоку
Додано опцію контексту потоку tcp_nodelay