Зміни, що ламають зворотну сумісність
Ядро PHP
Інтерпретація ідентифікатора, що закриває Heredoc/Nowdoc
Благодаря введениюгнучкого синтаксису heredoc/nowdoc, doc-рядки, що містять ідентифікатори, що закривають всередині свого тіла, можуть викликати синтаксичні помилки або зміни в інтерпретації. Приклад:
Loading...
З відступом FOO
раніше не мав особливого значення. Тепер він буде інтерпретуватися як кінець heredoc-рядка і наступний FOO;
призведе до синтаксичної помилки. Ця проблема завжди може бути вирішена шляхом вибору ідентифікатора, що закриває, який не використовується у вмісті рядка.
Генерування попередження в continue, що використовується в switch
Вирази continue
, що використовуються в структурах управління потоку switch
тепер видаватиме попередження. У PHP такі висловлювання continue
еквіваленти break
, в той час, як в інших мовах вони поводяться як continue 2
Loading...
Сувора інтерпретація цілих рядкових ключів на ArrayAccess
Доступ к массиву типа$obj["123"]
, где$obj
реалізує ArrayAccess, а"123"
- це цілий рядковий літерал, більше не призведе до неявного перетворення в ціле число, тобто . $obj->offsetGet("123")
замість $obj->offsetGet(123)
. Це відповідає існуючій поведінці для нелітеральних значень. Поведінка масивів не змінилося, вони продовжують неявно перетворювати цілі рядкові ключі на цілі числа.
Статичні властивості більше не поділяються присвоєнням за посиланням
У PHP статичні властивості спільно використовуються наслідуючими класами, якщо статичну властивість явно не перевизначено у дочірньому класі. Однак через помилку реалізації можна було відокремити статичні властивості, надавши їх за посиланням. Ця лазівка була виправлена.
Loading...
Посилання, що повертаються при доступі до масиву або властивості, негайно розпаковуються.
Посилання, що повертаються доступом до масиву та властивості, тепер розпаковуються як частина доступу. Це означає, що більше неможливо змінити посилання між доступом та використанням доступного значення:
Loading...
Це робить поведінку посилань і без узгоджених посилань. Зверніть увагу, що читання та запис значення всередині одного виразу залишається невизначеною поведінкою і може змінитися у майбутньому.
Розпакування аргументу зі значенням Traversable з нечисловими ключами більше не підтримується
Розпакування аргументів перестало працювати зі значенням Traversable із нечисловими ключами. Наступний код працює в PHP 5.6-7.2 помилково.
Loading...
Різне
Утиліта ext_skel була повністю перероблена із новими опціями, а деякі старі опції видалені. Тепер вона написана на PHP та не має зовнішніх залежностей.
Підтримку BeOS було припинено.
Винятки, викинуті через автоматичне перетворення попереджень у виключення у режимі EH_THROW
(наприклад, деякі винятки DateTime), більше не заповнюють стан error_get_last(). Таким чином, вони тепер працюють так само, як викинуті винятки вручну.
ИсключениеTypeError тепер вказує на правильні типи int
иbool
замість integer
иboolean
відповідно.
Про невизначені змінні, передані в compact(), тепер буде повідомлено повідомленням.
Функцияgetimagesize() і пов'язані з нею функції тепер повідомляють mime-типи зображень BMP як image/bmp
замість image/x-ms-bmp
оскільки перший зареєстрований в IANA (дивіться » RFC 7903
Функцияstream_socket_get_name() тепер повертає адреси IPv6, укладені у квадратні дужки. Наприклад, буде повернуто рядок "[::1]:1337"
замість "::1:1337"
Довільної точності математика BCMath
Усі попередження, викинуті функціями BCMathТепер використовують обробку помилок PHP. Раніше деякі попередження були надіслані безпосередньо в потік stderr.
Функції bcmul() і bcpow() тепер повертають числа із запитаним масштабом. Раніше числа, що поверталися, могли опускати завершальні десяткові нулі.
IMAP, POP3 та NNTP
Логіни rsh ssh за замовчуванням вимкнено. Використовуйте imap.enable_insecure_rshякщо ви хочете включити їх. Зверніть увагу, що бібліотека IMAP не фільтрує імена поштових скриньок перед передачею їх команді rsh ssh, таким чином, передача ненадійних даних цієї функції із включеним rsh ssh небезпечна.
Мультибайтові рядки
Через додаткову підтримку іменованих фрагментів, патерни mb_ereg_*()
з використанням іменованих фрагментів будуть поводитися по-різному. Зокрема, іменовані фрагменти будуть частиною збігів, а mb_ereg_replace() інтерпретуватиме додатковий синтаксис. Дивіться Іменовані фрагменти для отримання додаткової інформації.
Поліпшений модуль MySQL
Підготовлені запити тепер правильно вказують на дрібні секунди для стовпців DATETIME
TIME
иTIMESTAMP
із вказівником десяткових знаків (наприклад, TIMESTAMP(6)
при використанні мікросекунд). Раніше частина дробових секунд була просто опущена з значень, що повертаються.
Функції MySQL (PDO_MYSQL)
Підготовлені запити тепер правильно вказують на дрібні секунди для стовпців DATETIME
TIME
иTIMESTAMP
зі специфікатором десяткових знаків (наприклад, TIMESTAMP(6)
при використанні мікросекунд). Раніше, дробова частина секунд була просто опущена з значень, що повертаються. Зверніть увагу, що це впливає лише на використання PDO_MYSQL з відключеною емуляцією підготовлених запитів (наприклад, з використанням нативної функціональності). Запити, що використовують з'єднання, які мають опцію PDO::ATTR_EMULATE_PREPARES
=true
(значення за умовчанням), були порушені даним виправленням помилки і вже отримували коректні значення часткою секунди від движка.
Reflection
Експорт об'єктів Reflection у рядок тепер використовує int
) иbool
) замість integer
andboolean
відповідно.
Стандартна бібліотека PHP (SPL)
Если автозагрузчикSPL викидає виняток, що наступні автозавантажувачі не будуть виконуватися. Раніше всі автозавантажувачі виконувались, а винятки об'єднувалися в ланцюжок викликів.
SimpleXML
Математичні операції, що включають об'єкти SimpleXMLТепер будуть обробляти текст як ціле число (int) або число з плаваючою точкою (float), залежно від того, що є більш відповідним. Раніше значення оброблялися як цілі числа без будь-яких умов.
Вхідні Cookies
Починаючи з PHP 7.3.23 імена вхідні cookie більше не декодуються з URL-закодованого рядка з міркувань безпеки.