Зміни, що ламають зворотну сумісність
Предотвращение возврата отрицательного нуля изnumber_format()
Раньше функцияnumber_format() повертала -0
. Хоча це абсолютно правильно відповідно до специфікації чисел з плаваючою точкою IEEE 754, ця дивина небажана для відображення відформатованих чисел у формі, що легко читається.
Loading...
Перетворення числових ключів при приведенні об'єктів та масивів
Тепер числові ключі краще обробляються при приведенні масивів до об'єктів та об'єктів до масивів (через явне приведення, або використовуючи settype()
Це означає, що числові (або числа у вигляді рядків) ключі з масивів, конвертовані в об'єкти, тепер будуть доступні:
Loading...
Результат виконання наведеного прикладу:
object(stdClass)#1 (1) {
["0"]=> // теперь это строковый ключ, а не числовой
int(1)
}
int(1)
int(1)
І тепер числові (або числа у вигляді рядків) ключі об'єктів доступні при конвертації в масиви:
Loading...
Результат виконання наведеного прикладу:
array(1) {
[0]=> // теперь это числовой ключ, а не строковый
int(1)
}
int(1)
int(1)
Запрещена передача**null
**вget_class()
Раньше передача**null
** у функцію get_class() повертала ім'я класу, з якого було зроблено виклик. Ця поведінка була видалена і тепер натомість буде викликана помилка рівня E_WARNING
. Для досягнення тієї самої поведінки, як і раніше, слід просто опустити аргумент.
Попередження при підрахунку нечисленних типів
Теперь при использованииcount() з параметром, який не можна вважати буде виникати помилка рівня E_WARNING
(це також стосується sizeof() як псевдоніма цієї функції).
Loading...
Результат виконання наведеного прикладу:
Loading...
Перехід від ресурсів до об'єктів у модулі Hash
В рамках довгострокової міграції відмови від ресурсів, модуль Hash було оновлено для використання об'єктів замість ресурсів. Ця зміна повинна бути плавною для PHP-розробників, за винятком випадків, коли використовуються перевірки is_resource() (які потрібно замінити на використання is_object()
Покращено значення за замовчуванням у SSL/TLS
Були зроблені такі зміни до значень за замовчуванням:
tls://
тепер за умовчанням використовується TLSv1.0 чи TLSv1.1 чи TLSv1.2ssl://
псевдонімtls://
- Константи
STREAM_CRYPTO_METHOD_TLS_*
за умовчанням рівні TLSv1.0 або TLSv1.1 + TLSv1.2 замість TLSv1.0
Возвращаемое значениеgettype() для закритих ресурсів
Раньше использованиеgettype() на закритому ресурсі повертало рядок "unknown type"
. Тепер буде повернуто рядок "resource (closed)"
is_object()и**__PHP_Incomplete_Class**
Раньше использованиеis_object()на классе**__PHP_Incomplete_Class** повертало false
. Тепер повертатиметься true
Підвищено рівні помилок невизначених констант
Не повністю визначені посилання на невизначені константи тепер генеруватимуть E_WARNING
(замість E_NOTICE
). У наступній основній версії PHP вони генеруватимуть винятки Error
Підтримка Windows
Офіційно підтримувані мінімальні версії Windows тепер є Windows 7/Server 2008 R2.
Перевірка значень властивостей за промовчанням трейту
Перевірка сумісності значень властивостей за промовчанням трейту більше не виконує приведення типу.
object
для імен класів
Имяobject
раніше було м'яко зарезервовано з PHP 7.0. Тепер воно повноцінне зарезервоване слово, що забороняє використовувати його як ім'я класу, трейту або інтерфейсу.
Підтримка NetWare
Підтримка NetWare було видалено.
array_unique()with**SORT_STRING
**
Якщо sort_flags
равен**SORT_STRING
**, ранее массивarray
копіювався, а не унікальні елементи видалялися (зберігаючи значення цифрових індексів), але тепер створюється новий масив шляхом додавання унікальних елементів. Це може призвести до різних числових індексів.
Измененияbcmod() з числами з плаваючою точкою
Функцияbcmod() більше не обрізає числа з плаваючою точкою до цілих. Таким чином, її поведінка тепер відповідає fmod(), а не оператору%
НаПриклад,bcmod('4', '3.5')
тепер повертає 0.5
замість
Функції хешування та некриптографічні хеші
Функції hash_hmac() hash_hmac_file() hash_pbkdf2() і hash_init()(с**HASH_HMAC
**) більше не приймають некриптографічні хеші.
Опції функції json_decode()
Опція функції json_decode() JSON_OBJECT_AS_ARRAY
, тепер використовується, якщо другий параметр (assoc) дорівнює null
РанееJSON_OBJECT_AS_ARRAY
завжди ігнорувався.
Висновок rand() і mt_rand()
Числа, що генеруються rand() і mt_rand() для певного параметра переініціалізації (seed) можуть відрізнятися від PHP 7.1 на 64-бітних машинах (через виправлення помилки модульного зміщення в реалізації).
Удаление ini-настройкиsql.safe_mode
Налаштування конфігурації sql.safe_mode
було видалено.
Изменения вdate_parse() і date_parse_from_format()
Елемент масиву zone
, що повертається функціями date_parse_from_format() і date_parse() тепер відображає секунди замість хвилин, а його знак інвертується. Наприклад, -120
тепер буде 7200
Вхідні Cookies
Починаючи з PHP 7.2.34 імена вхідні cookie більше не декодуються з URL-закодованого рядка з міркувань безпеки.