Передайте значение в filter_input (), используя переменную

Может кто-нибудь объяснить, почему я получаю очень странное предупреждение:

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. 

Вопросов:

  1. Почему это сказано в manual filter_input ( int $type , – когда ни INPUT_GET, ни INPUT_POST и т. Д. Не являются INTEGERS .
  2. Есть ли способ передать значение в 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);