Мой ответ: определенно нет !
Проблема в том, что нет простого способа "сбросить" функции str * после их перегрузки.
В течение некоторого времени это может хорошо работать с вашим проектом, но почти наверняка вы столкнетесь с внешней библиотекой, которая использует строковые функции, например, для реализации бинарного протокола, и они потерпят неудачу. Они потерпят неудачу, и вы потратите часы, пытаясь выяснить, почему они терпят неудачу.
После того, как вы обнаружили, что это mbstring.func_overload
, у вас не так уж много вариантов. Вы можете ini_set mbstring.internal_encoding
использовать некоторую кодировку в один байт на символ каждый раз, когда вы вызываете внешнюю библиотеку и сразу же устанавливаете ее обратно, но если ваша библиотека выполняет обратные вызовы для вашего приложения, она просто испортит вещи.
Другой вариант - настроить библиотеку вручную, заменив все функции str * на их аналог mb_string и передав один байт на символ в качестве параметра кодирования. Это, однако, тоже не очень хорошая идея, потому что вы теряете возможность легко обновлять внешнее, и вы можете также вызвать некоторые проблемы с производительностью.
Итак, опять же, не используйте func_overload
. Если вы работаете с многобайтовыми строками, используйте соответствующие функции mb_.