2012-01-12 66 views
2

我知道空是快一点,然后isset,但filter_has_var是快了一点,然后isset(在php.net它写的)究竟什么是快空或filter_has_var?如果PHP filter_has_var vs empty?

+1

你为什么不以他们为基准,让我们知道结果。 – 2012-01-12 22:21:06

+0

我做到了,它看起来是过滤效果较好,但并不总是正确的作品 – user1112984 2012-01-12 22:28:50

+0

后的结果通过缓存粘贴请 – 2012-01-12 22:29:19

回答

5

filter_has_var()可能是有用的,如果superglobals已被清除出于某种原因,因为它检查原始输入数据,而不是$ _GET,$ _POST,$ _ETC。

例如:

$_GET["injected"] = 123; 

var_dump(filter_has_var(INPUT_GET, "injected")); // false 

// or the other way round 

虽然可以覆盖可变,所述filter分机接入的单独副本。 INPUT_GET不会别名到$_GET超全球。

除此之外,另一个原因是使用它的统一。如果广泛使用filter_var,比规则集更喜欢在isset()上使用filter_has_var()。

但不要用,因为任何愚蠢的表现的原因之一或其他。

2

isset检查一个变量存在

空检查是否变量具有值

filter_has_var检查的可变

数据类型每一个都有自己的特定用途,应该相应地使用。

+0

对不起,但空可以像isset一样使用,检查是否存在var – user1112984 2012-01-12 22:26:46

+2

'$ var = NULL;的var_dump(isset($ VAR));'会输出'布尔(假)',所以* “isset检查是否存在变量” *可有些误导......要小心NULL值和'isset' – rdlowrey 2012-01-12 22:44:09

1

filter_has_varempty是两个完全不同的功能是完全做不同的事情。你不想交换使用这两个函数。

empty实际上是一个语言结构,如果一个变量被认为是空到PHP,检查:例如nullarray()''被认为是空的。

filter_has_var只检查PHP超全局之一:$_GET$_POST$_SERVER$_ENV$_COOKIE,以确保可变用的请求通过。如果var为空,该函数仍然会返回true。

+1

PHP函数'filter_has_var()'不检查其中一个PHP superglobals。它检查超级全局数据从中获取数据的原始输入源。 – 2016-05-01 14:52:25