任何人都可以解释一下,为什么我会收到非常奇怪的警告:
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
?答案 0 :(得分:7)
你应该使用constants。这些常量具有整数值。所以文档完全正确,INPUT_GET
是一个整数。试试var_dump(INPUT_GET)
。
如果您需要从字符串中获取常量值,请使用constant()
:
echo constant('INPUT_' . $type);
答案 1 :(得分:1)
这里的问题。当你将'INPUT'连接到变量时,它变成了一个字符串,参见example:
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
答案 2 :(得分:0)
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);