Может кто-нибудь объяснить, почему я получаю очень странное предупреждение:
filter_input() expects parameter 1 to be long, string given
при выполнении кода, который является частью моего класса и который кажется совершенно прекрасным:
public static function Input($type, $data, $filter = 'FILTER_SANITIZE_SPECIAL_CHARS') { $type = 'INPUT_' . $type; return filter_input($type, $data, $filter); }
В случае, если я изменю его, например:
return filter_input(INPUT_POST, $data, $filter);
Затем предупреждение:
filter_input() expects parameter 3 to be long
.
Все работает отлично, если я использую:
return filter_input(INPUT_POST, $data, FILTER_SANITIZE_SPECIAL_CHARS);
Я понимаю, что на PHP: filter_input – Manual в описании сказано:
Описание
mixed filter_input ( int $type , string $variable_name [, int $filter = FILTER_DEFAULT [, mixed $options ]] )
параметры
type One of INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, or INPUT_ENV.
filter_input ( int $type ,
– когда ни INPUT_GET, ни INPUT_POST и т. Д. Не являются INTEGERS . filter_input
с помощью переменной? То, что вы должны использовать, есть константы . Эти константы имеют целочисленные значения . Таким образом, документация полностью правильная, INPUT_GET
– целое число. Попробуйте var_dump(INPUT_GET)
.
Если вам нужно получить постоянное значение из строки, используйте constant()
:
echo constant('INPUT_' . $type);
Вот проблема. Когда вы объединяете 'INPUT_' с переменной, он bacame строку, см. Пример:
echo $type = 'INPUT_' . 'POST'; // give you a string INPUT_POST echo INPUT_POST; //give you 0
Вот почему :
filter_input() expects parameter 1 to be long, string given
INPUT_POST
и INPUT_GET
определяются следующим образом:
/** * POST variables. * @link http://www.php.net/manual/en/filter.constants.php */ define ('INPUT_POST', 0); /** * GET variables. * @link http://www.php.net/manual/en/filter.constants.php */ define ('INPUT_GET', 1);