2015-12-21 60 views
1

設置經過10年的PHP編程的,剛纔我發現isset()是一點都不好,根據PHP isset() manualisset()返回變量時「設置」,具有null值爲false。檢查,如果一個變量在PHP

那麼,我正在處理一個數組,我在大約2小時的閱讀和測試代碼之後,通過array_key_exists()修復了這個問題。

但變量使用什麼?

isset($var) || is_null($var) 

這使得通知時沒有設置$ VAR ...空()完全是在另一個世界了。正如我所說的,is_null()通知沒有設置變量,並返回true !! ......這個也沒有了。

+4

'isset($ VAR)&& is_null($ VAR)'!在你的例子中,如果'$ var'沒有設置,'isset'將返回'false',導致執行'is_null'(拋出通知)。通過使用'&&',如果'isset'返回'false',表達式將立即返回false。 –

+0

你是對的,看起來像我需要睡覺:)...嗯,我正在尋找更好的解決方案......在大型應用程序中,我們檢查變量是否存在數百或數千次,是否有更好的解決方案isset($ var)&&!is_null($ var)'...此外,爲此目的不可能定義一個函數。因爲如果變量沒有設置,PHP會顯示錯誤,如果我們通過引用傳遞,則會將null設置爲變量。 – user5483434

+0

@FirstOne empty()對null,false,「」(空字符串),0(整數零),0.0(浮點零),array()或[](空數組)返回true,$ var沒有價值),和「0」! (包含零字符的字符串)。實際上,它不應該用於檢查變量存在。 – user5483434

回答

0

有關is_nullempty的快速指南可以找到here,我曾經參考過它。

如您所述,is_null是一位投訴人。測試這個而不拋出NOTICE的唯一方法是檢查變量是否設置在全局變量數組中。您可以通過測試這樣做:

// Is Set (to anything) 
if(!(isset($var) || array_key_exists('var',get_defined_vars()))){ /* ... */ } 
// Set and Null 
if(!(is_null($var) || array_key_exists('var',get_defined_vars())))) { /* ... */ } 

// Etc 

這裏的問題是,你正在使用get_defined_vars和這有顯著的性能影響,無論是在牆上,時間和內存使用,如果使用過度,我會建議它應該只用於調試。

如果您對嚴格的global變量感興趣,可以使用$GLOBALS supervar。但是,這不會讓您訪問函數或方法範圍內的變量:https://stackoverflow.com/a/418162/1301994

如果您嘗試避免NOTICES提高性能,這不值得,因爲檢查的開銷大於性能略有提升。

我想這真的很重要你的目標是什麼。如果你使用面向對象的方式工作,那麼你應該能夠清楚地分辨出變量是否被設置或者不在方法的範圍內。否則,最好不要以undefinedNULL行爲不同的方式進行編碼。如果這不可行,請考慮使用其他標誌來幫助您避開使用get_undefined_vars。下面

檢查多一點的題目

Is var set to null same as undefined and how to check differences