filter_input() 与 filter_var() 何时使用?

When is filter_input() used versus filter_var()?

我传统上使用 filter_var() 函数来清理 $_GET$_POST 数据,例如:

 $foo =  filter_var($_GET['foo'], FILTER_SANITIZE_NUMBER_INT);

但是PHP也有一个函数filter_input(),它有不同的语法来完成同样的事情:

$foo = filter_input(INPUT_GET, 'foo', FILTER_SANITIZE_NUMBER_INT);

这些只是同义词吗?使用一个比另一个有优势吗?

我已经检查了手册页,但我没有看到很大的不同(仅 whether/how 报告了一个错误)。 Semantically/best练习,什么最有意义?

主要区别之一是它们处理未定义的方式 variables/indexes。如果 $_GET['foo'] 不存在:

$foo = filter_var($_GET['foo'], FILTER_SANITIZE_NUMBER_INT);

Returns 一个空字符串 "" 并生成:

Notice: Undefined index: foo

因此您通常需要将其包装在 if(isset($_GET['foo'])).

鉴于:

$foo = filter_input(INPUT_GET, 'foo', FILTER_SANITIZE_NUMBER_INT);

Returns NULL 并且不会产生错误。

注意filter_input 函数不对当前的 $_GET$_POST 超全局变量进行操作,而是预先填充并独立于那些数组。

如果$_GET['foo']不存在但在脚本中创建,则不会被filter_input看到:

$_GET['foo'] = 1;
$foo = filter_input(INPUT_GET, 'foo', FILTER_SANITIZE_NUMBER_INT);

会 return null.