2012-01-12 64 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