有關is_null
和empty
的快速指南可以找到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提高性能,這不值得,因爲檢查的開銷大於性能略有提升。
我想這真的很重要你的目標是什麼。如果你使用面向對象的方式工作,那麼你應該能夠清楚地分辨出變量是否被設置或者不在方法的範圍內。否則,最好不要以undefined
和NULL
行爲不同的方式進行編碼。如果這不可行,請考慮使用其他標誌來幫助您避開使用get_undefined_vars
。下面
檢查多一點的題目
Is var set to null same as undefined and how to check differences
'isset($ VAR)&& is_null($ VAR)'!在你的例子中,如果'$ var'沒有設置,'isset'將返回'false',導致執行'is_null'(拋出通知)。通過使用'&&',如果'isset'返回'false',表達式將立即返回false。 –
你是對的,看起來像我需要睡覺:)...嗯,我正在尋找更好的解決方案......在大型應用程序中,我們檢查變量是否存在數百或數千次,是否有更好的解決方案isset($ var)&&!is_null($ var)'...此外,爲此目的不可能定義一個函數。因爲如果變量沒有設置,PHP會顯示錯誤,如果我們通過引用傳遞,則會將null設置爲變量。 – user5483434
@FirstOne empty()對null,false,「」(空字符串),0(整數零),0.0(浮點零),array()或[](空數組)返回true,$ var沒有價值),和「0」! (包含零字符的字符串)。實際上,它不應該用於檢查變量存在。 – user5483434