Сначала всего, страница PHP Manual по фильтрации: https://php.net/manual/en/book.filter.php
Второй , контекст является ключевым. Вообще говоря, функции фильтра предназначены для использования внешнего входа (скаляры или массивы) или внутреннего входа . Внешний ввод поступает из таких источников, как HTTP-запрос / механизм PHP или отправка формы.
Функции фильтра с префиксом filter_input
позволяют полностью исключить обход $ _SERVER, $ _COOKIE, $ _POST и $ _GET. Хотя вы обычно указываете «откуда» вы хотите получить данные, функции фильтрации явно не используют $ _POST, $ _GET, $ _COOKIE и $ _SERVER. Изменения, которые вы вносите в переменные / элементы массива , не будут отображаться в $ _GET, $ _POST или $ _SERVER, поэтому использование фильтра таким образом является изменением парадигмы и может существенно изменить поток вашего приложения. Другими словами, вы должны отслеживать внешний вход самостоятельно. Я делаю это для начальной очистки (удаления, замены, изменения и т. Д.) Внешнего ввода. Я больше не использую $ _POST, $ _GET или $ _SERVER вообще. Хотя я все еще использую $ _FILES.
Функции с префиксом filter_var
предназначены для фильтрации любого общего массива, который уже существует в вашей программе. Я использую это после того, как использовал filter_input
. Есть много фильтров, которые вы можете использовать в обоих случаях, но ваш вопрос о производительности .
Если вы решили использовать фильтр FILTER_VALIDATE_REGEXP
с любой из функций фильтрации, я не могу представить, чтобы этот косвенный подход был более эффективным, чем прямое использование preg_match()
. Что касается других фильтров, то если они просто 'n' число методов / функций, удаленных из вызова регулярного выражения, Я также не вижу улучшения эффективности там .
Я рассматриваю функции фильтра как нечто, предназначенное для улучшения согласованности при фильтрации задач, которые выполняются во многих приложениях. Они, вероятно, не предназначены для того, чтобы быть более эффективными , но они определенно предназначены для того, чтобы быть более доступными , чем регулярные выражения (хотя я очень хорош с регулярными выражениями). Я предпочитаю иметь прямое знание о том, что происходит, но некоторые люди не заботятся или могут не беспокоиться. Однако функции фильтрации открывают дверь для фильтрации строк тем, кто не понимает регулярные выражения и другие базовые процессы безопасности веб-приложений.
Конечно, можно жить без использования функций фильтра.
Более того, я использую функции фильтра в сочетании со своими собственными классами дезинфицирующего средства и средства проверки. Итак, я не прошу PHP думать за меня, я просто использую его для расширения того, что я уже знаю, как делать (на случай, если их функции получат что-то, что я пропустил). Глубокая защита.
В целом, вам лучше всего использовать preg_match()
, если только вы не намереваетесь изменить поток (filter_input
функций) ввода в ваше приложение. Даже в этом случае повышение производительности не будет, но вы можете обойти $ _SERVER, $ _POST и $ _GET. Кроме того, вы можете воспользоваться более простыми, структурированными, согласованными, фильтрующими функциями с возможностью использовать функцию обратного вызова (FILTER_CALLBACK
) для вызова собственных методов / функций (что я также делаю). Кроме того, вы все еще можете использовать свои собственные регулярные выражения с функциями фильтра, используя фильтр FILTER_VALIDATE_REGEXP
, но опять же, я не вижу причин полагать, что производительность вашего приложения улучшится, если вы это сделаете. Ремонтопригодность? Может быть. Это зависит от человека, пишущего код.