Не рекомендуется, если вы используете библиотеки, созданные другими людьми. Вот три причины.
- Перегрузка может нарушить поведение библиотек, которые не ожидают перегрузки.
- Ваша среда может быть повреждена в среде без перегрузки.
- В зависимости от перегрузки уменьшается количество потенциальных пользователей вашей платформы из-за 2
Хорошим примером 1. является неправильный расчет размера байта в поле HTTP Content-Length с использованием strlen . Причина в том, что перегруженная функция strlen не возвращает число байтов , а количество символов . Вы можете увидеть проблемы реального мира в CakePHP и Zend_Http_Client .
Edit:
устаревший mbstring.func_overload рассматривается в PHP 5.5 или 5.6 (из почты сопровождающего mbstring в апреле 2012 г.). Так что теперь вы должны избегать mbstring.func_overload.
Рекомендуемая политика обработки многобайтовых символов для различных платформ заключается в прямом использовании mbstring, intl или iconv. Если вам действительно нужны резервные функции для обработки многобайтовых символов, используйте function_exists () .
Вы можете увидеть случаи в Wordpress и MediaWiki .
- WordPress: wp-includes / compact.php
- MediaWiki: Резервный класс
Некоторые из CMS, такие как Drupal ( unicocde.inc ), вводят слой абстракции мутибайта.
Я думаю, что уровень абстракции не очень хорошая идея.
Причина в том, что количество обрабатываемых многобайтовых функций, необходимых во многих случаях, меньше 10, а многобайтовые функции просты в использовании и снижают производительность при переключении обработки на mbstring или intl или iconv, если эти модули установлены.
Минимальное требование для обработки многобайтовых символов: mb_substr () и обработка недопустимой последовательности байтов.
Вы можете увидеть случаи резервной функции для mb_substr () в вышеупомянутых CMS.
Я ответил об обработке недопустимой последовательности байтов в следующем месте: Замена недопустимых символов UTF-8 на вопросительные знаки, mbstring.substitute_character кажется