PHP 8.3 – велике оновлення PHP.
Воно містить безліч нових можливостей, таких як явна типізація констант класів, глибоке клонування readonly-властивостей, а також покращення класу Randomizer. Як завжди, в ньому також покращена продуктивність, виправлені помилки та багато іншого.
Типізовані константи класів RFC
PHP < 8.3
Loading...
PHP 8.3
Loading...
Динамічне отримання констант класу RFC
PHP < 8.3
Loading...
PHP 8.3
Loading...
Новий атрибут #[\Override]
RFC
PHP < 8.3
Loading...
PHP 8.3
Loading...
Якщо додати метод атрибут #[\Override]
, то PHP переконається, що метод із таким самим ім'ям існує в батьківському класі або в реалізованому інтерфейсі. Додавання атрибуту дає зрозуміти, що перевизначення батьківського методу є навмисним, а також спрощує рефакторинг, оскільки видалення перевизначеного батьківського методу буде виявлено.
Глибоке клонування readonly-властивостей RFC
PHP < 8.3
Loading...
PHP 8.3
Loading...
Властивості, доступні лише для читання (readonly
) тепер можуть бути змінені один раз за допомогою магічного методу __clone
для забезпечення можливості глибокого клонування readonly-властивостей.
Нова функція json_validate()
RFC Документація
PHP < 8.3
Loading...
PHP 8.3
Loading...
Функція json_validate()
дозволяє перевірити, чи є рядок синтаксично коректним JSON, при цьому він більш ефективний, ніж функція json_decode()
.
Новий метод Randomizer::getBytesFromString()
RFC Документація
PHP < 8.3
Loading...
PHP 8.3
Loading...
Модуль Random, Доданий в PHP 8.2, був доповнений новим методом генерації випадкових рядків, що складаються тільки з певних байтів. Цей метод дозволяє легко генерувати випадкові ідентифікатори, наприклад, домени імена і числові рядки довільної довжини.
Нові методи Randomizer::getFloat()
і Randomizer::nextFloat()
RFC Документація
PHP < 8.3
Loading...
PHP 8.3
Loading...
Через обмежену точність і неявне округлення чисел з плаваючою точкою генерація незміщеного числа, що лежить у певному інтервалі, є нетривіальним завданням, а рішення користувача можуть давати зміщені результати або числа, що виходять за межі необхідного діапазону.
Клас Randomizer був розширений двома методами, що дозволяють генерувати випадкові числа з плаваючою точкою незміщеним чином. Метод Randomizer::getFloat()
використовує алгоритм γ-секції, який був опублікований в Drawing Random Floating-Point Numbers from an Interval. Frédéric Goualard, ACM Trans. Model. Comput. Simul., 32:3, 2022.
Лінтер командного рядка підтримує декілька файлів PR Документація
PHP < 8.3
php -l foo.php bar.php
No syntax errors detected in foo.php
PHP 8.3
php -l foo.php bar.php
No syntax errors detected in foo.php
No syntax errors detected in bar.php
Лінтер командного рядка тепер приймає кілька імен для перевірки файлів.
Нові класи, інтерфейси та функції
- Нові методи
DOMElement::getAttributeNames()
,DOMElement::insertAdjacentElement()
,DOMElement::insertAdjacentText()
,DOMElement::toggleAttribute()
,DOMNode::contains()
,DOMNode::getRootNode()
,DOMNode::isEqualNode()
,DOMNameSpaceNode::contains()
іDOMParentNode::replaceChildren()
. - Нові методи
IntlCalendar::setDate()
,IntlCalendar::setDateTime()
,IntlGregorianCalendar::createFromDate()
іIntlGregorianCalendar::createFromDateTime()
. - Нові функції
ldap_connect_wallet()
іldap_exop_sync()
. - Нова функція
mb_str_pad()
. - Нові функції
posix_sysconf()
,posix_pathconf()
,posix_fpathconf()
іposix_eaccess()
. - Новий метод
ReflectionMethod::createFromMethodName()
. - Нова функція
socket_atmark()
. - Нові функції
str_increment()
,str_decrement()
іstream_context_set_options()
. - Новий метод
ZipArchive::getArchiveFlag()
. - Підтримка генерації EC-ключів з EC-параметрами в модулі OpenSSL.
- Новий параметр INI
zend.max_allowed_stack_size
для встановлення максимально допустимого розміру стека. - php.ini тепер підтримує синтаксис резервних значень/значень за промовчанням.
- Анонімні класи тепер доступні лише читання.
Застаріла функціональність та зміни у зворотній сумісності
- Більше відповідні винятки в модулі Date/Time.
- Присвоєння негативного індексу
n
порожньому масиву тепер гарантує, що наступним індексом будеn + 1
, а не0
. - Зміни до функцій
range()
. - Зміни у повторному оголошенні статичних властивостей у трейтах.
- Константа
U_MULTIPLE_DECIMAL_SEPERATORS
оголошено застарілою, замість неї рекомендується використовувати константуU_MULTIPLE_DECIMAL_SEPARATORS
. - Варіант Mt19937
MT_RAND_PHP
оголошено застарілим. ReflectionClass::getStaticProperties()
тепер не повертає значенняnull
.- Параметри INI
assert.active
,assert.bail
,assert.callback
,assert.exception
іassert.warning
оголошено застарілими. - Виклик функції
get_class()
іget_parent_class()
без аргументів оголошено застарілим. - SQLite3: режим помилок за замовчуванням встановлено на винятки.
Вище продуктивність, краще синтаксис, надійніша система типів.
Щоб завантажити вихідний код PHP 8.3, відвідайте сторінку Downloads. Бінарні файли Windows знаходяться на сайті PHP for Windows. Список змін перераховано на сторінці ChangeLog.
Посібник з міграції у розділі документації. Ознайомтеся з ним, щоб дізнатися про всі нові можливості та зміни, що стосуються зворотної сумісності.