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

### Date

У метода DateTime::createFromImmutable() теперь предварительный возвращаемый тип static, ранее возвращаемый тип был DateTime.

У метода DateTimeImmutable::createFromMutable() теперь предварительный возвращаемый тип static, ранее возвращаемый тип был DateTimeImmutable.

Символы `number` в относительных форматах больше не принимают несколько знаков, например, `+-2`.

### ODBC

Модуль ODBC теперь экранирует имя пользователя и пароль в случае, если передаётся строка соединения вместе с именем пользователя/паролем, тогда строка соединения будет изменена. Раньше при использовании пользовательских значений, нуждающихся в экранировании, могли сгенерировать неправильную строку соединения или вставить значения из данных, полученных от пользователя. Правила экранирования должны быть идентичны поведению .NET BCL DbConnectionOptions.

### PDO_ODBC

Модуль PDO_ODBC также экранирует имя пользователя и пароль при передаче строки подключения. Дополнительные сведения смотрите в разделе изменение модуля ODBC.

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

Функция glob() теперь возвращает пустой массив (array), если все пути находятся вне пределов директории, определённой в open_basedir. Ранее функция возвращала `false`. Более того, предупреждение теперь выдаётся, даже если только некоторые пути ограничены с помощью директивы open_basedir.

Метод FilesystemIterator::__construct(): до версии PHP 8.2.0 константа `FilesystemIterator::SKIP_DOTS` была установлена всегда и не могла быть отключена. Для сохранения прежнего поведения константа должна быть явно установлена при использовании параметра `flags`. Значение по умолчанию параметра `flags` не было изменено.

Функции strtolower(), strtoupper(), stristr(), stripos(), strripos(), lcfirst(), ucfirst(), ucwords() и str_ireplace() больше не чувствительны к локализации. Теперь они выполняют преобразование регистра ASCII, как если бы локаль была "C". Локализованные версии этих функций доступны в модуле MBString. Более того, функция array_change_key_case() и сортировка с помощью `SORT_FLAG_CASE` теперь также используют преобразование регистра ASCII.

Функция str_split() теперь возвращает пустой массив (array), если была вызвана с пустой строки (string). Ранее она возвращала массив с одной пустой строкой. На функцию mb_str_split() это изменение не влияет, так как она уже работала подобным образом.

Функции ksort() и krsort() теперь выполняют сравнение числовых строк при `SORT_REGULAR`, используя стандартные правила PHP 8.

Функция var_export() больше не опускает ведущий обратный слеш для экспортируемых классов, т.е. они теперь полностью квалифицированы.

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

Следующие методы теперь усиливают свою сигнатуру:

- SplFileInfo::_bad_state_ex()
- SplFileObject::getCsvControl()
- SplFileObject::fflush()
- SplFileObject::ftell()
- SplFileObject::fgetc()
- SplFileObject::fpassthru()

У метода SplFileObject::hasChildren() теперь предварительный возвращаемый тип false, ранее он был bool.

У метода SplFileObject::getChildren() теперь предварительный возвращаемый тип null, ранее он был ?RecursiveIterator.

Класс GlobIterator теперь возвращает пустой массив (array), если все пути находятся вне пределов директории, заданной в open_basedir. Ранее он возвращал `false`. Более того, теперь выдаётся предупреждение, даже если только некоторые из путей находятся за пределами open_basedir.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open