2010-03-17 54 views
10

我想了解這之間的區別:爲什麼我需要php中的isset()函數?

if (isset($_POST['Submit'])) { 
    //do something 
} 

if ($_POST['Submit']) { 
    //do something 
} 

在我看來,如果$ _POST [「提交」]變量是真的,那麼它被設置。爲什麼在這種情況下需要使用isset()函數?

回答

15

因爲

$a = array("x" => "0"); 

if ($a["x"]) 
    echo "This branch is not executed"; 

if (isset($a["x"])) 
    echo "But this will"; 

(也http://hk.php.net/manual/en/function.isset.phphttp://hk.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting見),如果它存在,並且不爲空,否則爲假

+0

所以我應該總是在像這些情況下使用isset函數? – zeckdude 2010-03-17 07:59:35

+2

嘗試訪問'$ a [「x」]''也會在'$ a'內沒有定義關鍵字'x'的情況下產生'E_Notice'。使用'isset'或'array_key_exists'檢查可以避免這種情況。 – Gordon 2010-03-17 08:38:12

+0

@Chris:總是使用'isset'來檢查某個變量的*存在*。 – kennytm 2010-03-17 09:07:33

4

isset將返回TRUE。

3

你基本上想檢查$ _POST []變量是否已經被提交,不管值是什麼。如果您不使用isset(),某些提交如submit=0將會失敗。

1

在第二個示例中,如果該密鑰未設置爲$_POST,PHP將發出通知(在E_NOTICE或更嚴格)。

另請參閱this question on Stack Overflow

+0

不是'E_STRICT'; 'E_NOTICE'。 – janmoesen 2010-03-17 07:39:04

+0

啊歡呼聲,謝謝。 – alex 2010-03-17 14:02:16

0

代碼

 

if($_POST['Submit']) 
{ 
//some code 
} 
 

不會WAMP工作(工作在XAMPP)
上WAMP,你將不得不使用

 

if (isset($_POST['Submit'])) { 
    //do something 
} 
 

嘗試。 :)

+1

這聽起來更像是默認錯誤處理設置,然後是操作系統。 – alex 2010-03-17 14:03:17

0

如果用戶不輸入值,$ _ POST []返回NULL,我們在isset的描述說:」如果它存在,並且不爲空,否則爲假

isset將返回TRUE。 ,但在這裏isset返回真正的 「

相關問題