PHP 8.1.0 RC 4 available for testing

Изменения, ломающие обратную совместимость

Ядро PHP

Ограничения доступа к $GLOBALS

Доступ к массиву $GLOBALS теперь подвергается ряду ограничений. Доступ для чтения и записи к отдельным элементам массива, таким как $GLOBALS['var'], продолжает работать как и раньше. Доступ только для чтения ко всему массиву $GLOBALS также продолжает поддерживаться. Однако доступ на запись ко всему массиву $GLOBALS больше не поддерживается. Например, array_pop($GLOBALS) приведёт к ошибке.

Использование static переменных в унаследованных методах

Когда метод, использующий статические переменные, наследуется (но не переопределяется), унаследованный метод теперь будет использовать статические переменные совместно с родительским методом.

<?php
class {
    public static function 
counter() {
        static 
$counter 0;
        
$counter++;
        return 
$counter;
    }
}
class 
extends {}
var_dump(A::counter()); // int(1)
var_dump(A::counter()); // int(2)
var_dump(B::counter()); // int(3), ранее было int(1)
var_dump(B::counter()); // int(4), ранее было int(2)
?>
Это означает, что статические переменные в методах теперь ведут себя так же, как статические свойства.

Совместимость типа возвращаемого значения с внутренними классами

Большинство неокончательных внутренних методов теперь требуют переопределяющих методов для объявления совместимого возвращаемого типа, в противном случае во время проверки наследования выдаётся уведомление об устаревании функционала. В случае, если тип возвращаемого значения не может быть объявлен для метода переопределения из-за проблем совместимости версий PHP, можно добавить атрибут #[ReturnTypeWillChange], чтобы заглушить уведомление об устаревании.

Миграция ресурса в объект

Несколько ресурсов (resource) были перенесены в объекты (object). Проверки возвращаемого значения с использованием функции is_resource() следует заменить проверками на false.

  • Функции FileInfo теперь принимают и возвращают, соответственно, объекты finfo вместо ресурсов (resource) fileinfo.

  • Функции FTP теперь принимают и возвращают, соответственно, объекты FTP\Connection вместо ресурсов (resource) ftp.

  • Функции IMAP теперь принимают и возвращают, соответственно, объекты IMAP\Connection вместо ресурсов (resource) imap.

  • The LDAP теперь принимают и возвращают, соответственно, объекты LDAP\Connection вместо ресурсов (resource) ldap link.

  • Функции LDAP теперь принимают и возвращают, соответственно, объекты LDAP\Result вместо ресурсов (resource) ldap result.

  • Функции LDAP теперь принимают и возвращают, соответственно, объекты LDAP\ResultEntry вместо ресурсов (resource) ldap result entry.

  • Функции PgSQL теперь принимают и возвращают, соответственно, объекты PgSql\Connection вместо ресурсов (resource) pgsql link.

  • Функции PgSQL теперь принимают и возвращают, соответственно, объекты PgSql\Result вместо ресурсов (resource) pgsql result.

  • Функции PgSQL теперь принимают и возвращают, соответственно, объекты PgSql\Lob вместо ресурсов (resource) pgsql large object.

  • Функции PSpell теперь принимают и возвращают, соответственно, объекты PSpell\Dictionary вместо ресурсов (resource) pspell.

  • Функции PSpell теперь принимают и возвращают, соответственно, объекты PSpell\Config вместо ресурсов (resource) pspell config.

MySQLi

mysqli_fetch_fields() и mysqli_fetch_field_direct() теперь всегда возвращают 0 для max_length. Эту информацию можно вычислить, перебирая набор результатов и выбирая максимальную длину. Это то, чем раньше занимался PHP во внутренних методах.

Опция MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH больше не имеет смысла.

Опция MYSQLI_STORE_RESULT_COPY_DATA больше не имеет смысла. Передача какого-либо значения в параметр mode метода mysqli::store_result() больше не имеет смысла.

mysqli::connect() теперь возвращает true вместо null в случае успешного выполнения.

Режим обработки ошибок по умолчанию был изменён с "silent" на "exceptions". Смотрите страницу Режимы обработки ошибок MySQLi для получения дополнительных сведений о том, что это влечёт за собой и о том, как явно установить этот атрибут. Чтобы восстановить предыдущее поведение, используйте: mysqli_report(MYSQLI_REPORT_OFF);

Классы, расширяющие mysqli_stmt::execute(), теперь должны указывать дополнительный обязательный параметр.

MySQLnd

INI-директива mysqlnd.fetch_data_copy была удалена. Это не должно приводить к видимым для пользователя изменениям в поведении.

OpenSSL

Секретные ключи EC теперь будут экспортироваться в формате PKCS#8, а не в традиционном формате, как и все другие ключи.

openssl_pkcs7_encrypt() и openssl_cms_encrypt() теперь по умолчанию используют шифр AES-128-CBC, а не RC2-40. Шифр RC2-40 считается небезопасным и не включён по умолчанию в OpenSSL 3.

Объекты данных PHP

PDO::ATTR_STRINGIFY_FETCHES теперь преобразует логические значения (bool) в "0" или "1". Ранее логические значения (bool) не были строковыми.

Вызов PDOStatement::bindColumn() с PDO::PARAM_LOB теперь будет постоянно связывать результат потока, если PDO::ATTR_STRINGIFY_FETCHES не включён. Раньше результатом был либо поток, либо строка в зависимости от используемого драйвера базы данных и времени выполнения привязки.

Драйвер MySQL

Целые числа и числа с плавающей запятой в наборах результатов теперь будут возвращаться с использованием собственных типов PHP вместо строк (string) при использовании эмулированных подготовленных операторов. Это соответствует поведению собственных подготовленных операторов. Предыдущее поведение можно восстановить, включив опцию PDO::ATTR_STRINGIFY_FETCHES.

Драйвер SQLite

Целые числа и числа с плавающей запятой в наборах результатов теперь будут возвращаться с использованием собственных типов PHP. Предыдущее поведение можно восстановить, включив опцию PDO::ATTR_STRINGIFY_FETCHES.

Phar

Чтобы соответствовать интерфейсу ArrayAccess, Phar::offsetUnset() и PharData::offsetUnset() больше не возвращают логическое значение (bool).

Стандартные функции

version_compare() больше не принимает недокументированные сокращения операторов.

htmlspecialchars(), htmlentities(), htmlspecialchars_decode(), html_entity_decode(), м get_html_translation_table() теперь используют по умолчанию ENT_QUOTES | ENT_SUBSTITUTE вместо ENT_COMPAT. Это означает, что теперь ' экранируется в &#039;. Кроме того, искажённый UTF-8 будет заменён символом подстановки Unicode, вместо того, чтобы выдавать пустую строку.

debug_zval_dump() теперь выводит refcount ссылочных оболочек с их refcount, вместо того, чтобы просто добавлять & к значению. Это более точно моделирует эталонное представление, начиная с PHP 7.0.

debug_zval_dump() теперь выводит interned вместо фиктивного refcount для интернированных строк и неизменяемых массивов.

Стандартная библиотека PHP (SPL)

SplFixedArray, теперь будет закодирован в JSON как массив (array).

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top