Использование переменных функций для многобайтовых строк - PullRequest
0 голосов
/ 14 января 2020

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

$mb = true; // use mb functions or not

$len = $mb? mb_strlen($s) : strlen($s);

Я подумываю сделать это, только один раз:

$_strpos = $mb? 'mb_strpos' : 'strpos';
$_substr = $mb? 'mb_substr' : 'substr';
$_strlen = $mb? 'mb_strlen' : 'strlen';

Тогда я могу использовать код, подобный этому:

$len = $_strlen($s);

Работает. Код намного короче и понятнее, и я думаю, что он должен быть быстрее. Есть ли причина не делать этого?

1 Ответ

3 голосов
/ 14 января 2020

Я мог бы подумать об одной основной причине: прозрачность. Ни вы, ни будущий разработчик, ни даже ваша IDE не можете быть на 100% уверены, какая функция будет вызвана в конце. Это шаг к созданию не поддерживаемого кода спагетти. Мой совет: не делайте этого!

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

Если вас беспокоит, что расширение mbstring может не загружаться, вы можете добавить проверку для этого в своем коде.

if (!extension_loaded('mbstring')) {
    throw new \Exception('MBString is not loaded as an extension!');
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...