2012-02-06 120 views
2

我現在正在瀏覽「Head First PHP & MySQL」這本書,書中的很多部分都有用於處理HTML表單的代碼片段。它們以這樣的方式開始:PHP isset()在這種情況下是多餘的?

if (isset($_POST['submit'])){ 
... 
} 

if子句用於檢測表單是否已經提交或已經提交。習慣於用C語言進行編程,我發現構造冗餘和煩人(我也不認爲它有助於有經驗的程序員進行代碼可讀性)。我寧願把它寫成:

if ($_POST['submit']){ 
    ... 
} 

問題:有一些其他原因,在這方面,我可能會丟失使用isset()函數?我的版本的代碼段是否被認爲是非慣用的PHP?在其他情況下怎麼樣,你可以給我一個isset()可能有用的例子嗎?

+1

'$ _SERVER'?你不是指'$ _POST'嗎? – Vyktor 2012-02-06 22:27:35

+0

@Vyktor,很好發現。修復。 – 2012-02-06 22:28:30

回答

9

在某些情況下,變量爲NULL0FALSE。他們會失敗if() {}比較,但他們集。

如果您的error_reporting設置包括E_NOTICE s,則使用isset()還可以避免關於未定義變量的通知。

+0

PHP手冊描述isset是這樣的:「確定變量是否被設置並且不是NULL」。所以在這種情況下,即使變量被設置,但爲NULL,0或False,你會得到0在回報權? – 2012-02-06 22:30:09

+0

是的,我會說這樣做的主要目的是避免錯誤日誌中有數百個X不存在的通知。 – 2012-02-06 22:33:15

+0

如果你可以評估它的真實性或者像'$ var = $ _POST ['var']這樣瘋狂的東西,那麼不得不在你的腳本中全部甩掉'if'來防止警告。 :錯誤'。 – mrlee 2012-02-06 22:35:29

1

好吧,如果$_SERVER沒有submit鍵,第二塊將拋出一個E_NOTICE未定義指數)因此如果您想檢查該密鑰是否存在並且不爲空(或者,可選擇僅檢查存在的array_key_exists()),則應該使用isset()

此外,如果你也想檢查變量的內容(例如,如果它被設置爲false0),我建議使用!empty()(注意與!否定)函數代替isset()

+0

Upvoted for'if(!empty($ _ POST ['submit'])' – KyleWpppd 2013-04-12 20:37:33

1

我能想到的一個最大的原因是PHP的error_reportingdisplay_errors的設置。

讓我們假設error_reporting設置爲E_ALL並且display_errors已打開。

如果您試圖執行類似於:if ($array['iDontExist'] == false)的代碼將按預期運行,因爲該變量未設置,它將評估爲boolean false。但是,副作用是PHP會發出一條通知,說變量$array['iDontExist']不存在。你擁有的越多,隨機通知就越可能在整個輸出中被垃圾郵件發送。

我發現很多生產系統都打開了錯誤報告,這會導致這種不需要的行爲。如果display_errors關閉,則消息不會顯示在瀏覽器中,但如果error_reporting設置爲跟蹤通知,error_log將包含所有關於未定義變量的通知,這也是一個煩惱。