Нова функціональність
Оголошення скалярних типів
Оголошення скалярних типів введена у двох варіантах: примусовий (за умовчанням) та суворий. Наступні типи можуть бути використані для оголошення параметрів (в обох варіантах): рядки (string), цілі (int
), числа з плаваючою точкою (float) та логічні значення (bool
). Вони доповнюють аргументи інших типів, введених у PHP 5: імена класів, інтерфейсів, array та callable
Loading...
Результат виконання наведеного прикладу:
int(9)
Для установки строгого режима, в самом начале файла необходимо поместить одну директивуdeclare
. Це означає, що строгість оголошення скалярних типів працює лише на рівні файла і зачіпає весь інший код. Ця директива зачіпає не тільки оголошення параметрів, але й значення функцій, що повертаються (дивіться оголошення типу, що повертається), вбудовані функції PHP та функції завантажених модулів.
Детальну документацію та приклади використання читайте у розділі декларація типів
Оголошення значень, що повертаються
В PHP 7 добавлена поддержкаоголошення типу, що повертається. Аналогічно як і оголошення типів аргументів, оголошення типу значення, що повертається вказує, значення якого типу повинна повернути функція. Для оголошення типу значення, що повертається доступні все ті ж типи, що й оголошення типів аргументів.
Loading...
Результат виконання наведеного прикладу:
Array
(
[0] => 6
[1] => 15
[2] => 24
)
Повну документацію та приклади використання читайте у розділі про оголошення типу, що повертається
Оператор об'єднання з null
Було додано оператор об'єднання з null (??
), що є синтаксичним цукром для досить поширеної дії, коли спільно використовуються тернарний оператор та функція isset(). Він повертає перший операнд, якщо він заданий і не дорівнює null
, а у протилежному випадку повертає другий операнд.
Loading...
Оператор spaceship (космічний корабель)
Цей оператор призначений для порівняння двох виразів. Він повертає -1, 0 або 1, якщо $a, відповідно, менше, дорівнює або більше ніж $b. Порівняння проводиться відповідно до правилами порівняння типівPHP.
Loading...
Определение констант массивов с помощьюdefine()
Можна визначити константу типу array за допомогою функції define(). У PHP 5.6 такі константи можна було задавати лише за допомогою const
Loading...
Анонімні класи
Додано підтримку анонімних класів за допомогою new class
. Їх можна використовувати тоді, коли потрібен одноразовий клас і створювати повноцінний клас, а потім його об'єкт не має сенсу:
Loading...
Результат виконання наведеного прикладу:
object(class@anonymous)#2 (0) {
}
Детальну документацію та приклади використання читайте у розділі про анонімні класи
Синтаксис кодування Unicode
Він приймає шістнадцятковий код Unicode і записуємо його у форматі UTF-8 у подвійних лапках або форматі heredoc. Будь-який коректний код буде прийнято. Ведучі нулі за бажанням.
Loading...
Результат виконання наведеного прикладу:
ª
ª (То же самое, что и первый вариант, но с ведущими нулями)
香
Closure::call()
Closure::call() є більш продуктивним та коротким способом тимчасового зв'язування області дії об'єкта із замиканням та його викликом.
Loading...
Результат виконання наведеного прикладу:
1
1
unserialize() з фільтрацією
Ця функціональність забезпечує більш високий рівень безпеки під час десеріалізації об'єктів з неперевіреними даними. Це дозволяє запобігти можливій ін'єкції коду, дозволяючи розробнику використовувати білий список класів для десеріалізації.
Loading...
IntlChar
Новий клас IntlChar додає нову функціональність ICU. Клас визначає кілька статичних методів та констант для маніпулювання символами Unicode.
Loading...
Результат виконання наведеного прикладу:
10ffff
COMMERCIAL AT
bool(true)
Для використання цього класу необхідно встановити модуль Intl
Очікування
Очікування є покращеною, обернено сумісною версією старої функції assert(). Вони дозволяють робити припущення з нульовою вартістю в промисловому коді і надають можливість викидати винятки в разі провалу очікування.
Разом з тим, що старе API підтримується, assert() тепер є мовною конструкцією, що приймає першим аргументом висловлювання, а не лише рядки (string) для оцінки чи логічні значення (bool) для перевірки.
Loading...
Результат виконання наведеного прикладу:
Fatal error: Uncaught CustomError: Сообщение об ошибке
Детальний опис цього функціоналу, а також інструкції для його конфігурування для тестових та промислових середовищ, можна знайти на сторінці посібника, присвяченого функції assert()
Групові оголошення use
Класи, функції та константи імпортовані з одного і того ж namespace
, тепер можна групувати в одному операторі use
Loading...
Вираз return у генераторах
Ця функціональність додана до генераторів, введених у PHP 5.5. Вона дозволяє використовувати оператор return
в генераторах як остаточне значення, що повертається (повернення за посиланням неприпустимо). Це значення можна отримати за допомогою нового методу Generator::getReturn()
, який можна використовувати тільки після того, як генератор повернув усі згенеровані значення.
Loading...
Результат виконання наведеного прикладу:
1
2
3
Можливість явно отримувати остаточне значення генератора є дуже корисною, оскільки дозволяє клієнтському коду, що використовує генератор, отримувати та обробити останнє значення генератора, після якого точно нічого більше не буде. Це дуже простіше, ніж змушувати розробника перевіряти, чи останнє значення повернулося і якось особливо його обробляти.
Делегація генератора
Тепер генератор може автоматично делегувати іншому генератору, об'єкту класу, що реалізує Traversable або масиву без необхідності писати додаткову обробку отриманих значень. Досягається це за допомогою конструкції yield from
Loading...
Результат виконання наведеного прикладу:
1
2
3
4
Функція цілісного поділу intdiv()
Нова функція intdiv() виробляє цілий поділ операндів і повертає його результат.
Loading...
Результат виконання наведеного прикладу:
int(3)
Опції сесій
Тепер session_start() приймає масив опцій, які перевизначать конфігураційні директиви сесії встановлені у php.ini.
Також опції були розширені включеною за замовчуванням опцією session.lazy_write, яка говорить PHP про те, що файл сесії треба перезаписувати тільки якщо змінилися дані сесії, і опцією read_and_close
, яку можна задати тільки через session_start() для того, щоб PHP закривав сесію відразу ж як прочитає її дані і не вносив до неї будь-яких змін.
К Прикладу, для установкиsession.cache_limiter рівним private
та негайного закриття сесії після читання її даних:
Loading...
preg_replace_callback_array()
Нова функція preg_replace_callback_array() дозволяє писати чистіший код, коли потрібно використовувати функцію preg_replace_callback(). До PHP 7 при необхідності обробити різні регулярні вирази різними функціями доводилося для кожної обробки писати окремий виклик функції.
Тепер можна використовувати одну функцію, передаючи до неї асоціативний масив, ключами якого є регулярні вирази, а значеннями – функції зворотного виклику.
Функції CSPRNG
Було додано дві нові кросплатформні функції для генерації криптографічно безпечних рядків і цілих чисел: random_bytes() і random_int()
Теперь функцияlist() завжди може розпаковувати об'єкти, що реалізують ArrayAccess
Ранее функцияlist() не гарантувала коректну обробку об'єктів, що реалізують ArrayAccess. Тепер це виправлено.
Інші зміни
- Додано можливість доступу до методів та властивостей класу при клонуванні, тобто
(clone $foo)->bar()