Как правильно работать с мультибайтовыми строками в php7 и чем плох func_overload?
Всё очень просто.
Использование func_overload меняет работу стандартных функций. Например, strlen после этого начинает возвращать длину строки не в байтах, а в символах. Соответственно, библиотеки, полагающиеся на стандартное поведение функций, будут работать некорректно. Поэтому func_overload запретили и, если вам нужны мультибайтовые строки, то надо напрямую использовать библиотеку mbstring.
Для внутреннего понимания: strpos в РНР - это тупая обертка над С-функцией, принимающей в качестве аргументов два char* и выдающая в ответе количество байт, через которое второй массив байт совпал с первым.
Она знать ничего не знает ни о каких кодировках, и это хорошо, но не то, что вам нужно.func_overload - это костыль для легаси-кода, в котором люди, не думающие о будущем, обрабатывают строки так, как будто они всегда будут однобайтными. Воцарение UTF-8 нарушило эту идиллию, а переписывать тонны кода зачастую просто некому - вот и подперли проблему настройкой, которая подсовывает mb_-функции вместо архаичных.
Если вы пишете новый код и он работает со строками, а не с потоками байт - вам следует забыть об этих функциях и никогда не использовать ничего, кроме mb_*, в коде.