Механизм перегрузки функций

Внимание

Начиная с PHP 7.2.0 функциональность УСТАРЕЛА, а в PHP 8.0.0 функциональность УДАЛИЛИ. Полагаться на функциональность настоятельно не рекомендуют.

Зачастую заставить работать существующее PHP-приложение в многобайтовом окружении становится трудоёмкой задачей. Причина состоит в том, что большую часть PHP-приложений написали со стандартными функциями обработки строк наподобие substr(), которые не умеют работать со строками в многобайтовых кодировках.

Модуль mbstring поддерживает механизм «перегрузки функций», который сообщает приложению о работе с многобайтовой кодировкой, без модификации кода, который отвечает за работу со строками. Например, при включении перегрузки функций вместо функции substr() вызывается функция mb_substr(). Этот механизм часто помогает переносить в многобайтовое окружение приложения, которые поддерживают только однобайтовые кодировки.

Для активации механизма перегрузки функций потребуется задать настройке mbstring.func_overload в php.ini положительное значение, которое представляет собой комбинацию битовых масок для определения категорий функций, которые требуется перегружать. Число 1 перегружает функции mail(), 2 — строковые функции, 4 — функций регулярных выражений. Например, если значение настройки равно 7, то почтовые, строковые и функции регулярных выражений станут перегружаться. Список перегружаемых функций приведён ниже.

Функции, которые перегрузятся
значение настройки mbstring.func_overload исходная функция перегруженная функция
1 mail() mb_send_mail()
2 strlen() mb_strlen()
2 strpos() mb_strpos()
2 strrpos() mb_strrpos()
2 substr() mb_substr()
2 strtolower() mb_strtolower()
2 strtoupper() mb_strtoupper()
2 stripos() mb_stripos()
2 strripos() mb_strripos()
2 strstr() mb_strstr()
2 stristr() mb_stristr()
2 strrchr() mb_strrchr()
2 substr_count() mb_substr_count()

Замечание:

Не рекомендуется включать перегрузку функций в контексте каждой директории, так как добиться стабильной работы в такой конфигурации пока не получилось, а поведение приложения становится неожиданным.