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
.
我传统上使用 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
.