经过10年的PHP编程,刚才我发现isset()
并不好,根据PHP isset()
manual,isset()
在设置变量'时返回false并且一个null
值。
好吧,我正在使用一个数组,我在array_key_exists()
之后修复了这个问题,在阅读和测试代码大约2个小时之后。
但是对变量使用什么?
isset($var) || is_null($var)
当$ var未设置时,这会发出通知... empty()完全在另一个世界中。正如我所说的,is_null()在没有设置变量时发出NOTICE并返回true !! ......好吧,这个也出来了。
答案 0 :(得分:0)
可以找到关于is_null
和empty
的快速指南here,我过去常常参考它。
正如您所说,is_null
是抱怨者。在不抛出NOTICE的情况下测试此方法的唯一方法是检查变量是否在global vars数组中设置。你可以通过测试这样做:
// 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
,这对于壁挂时间和内存使用都有显着的性能影响,如果过度使用,我建议它应该只用于调试。< / p>
如果您对严格global
变量感兴趣,可以使用$GLOBALS
supervar。但是,这不允许您访问函数或方法范围内的变量:https://stackoverflow.com/a/418162/1301994
如果您试图避免NOTICES提高性能,那么这是不值得的,因为检查的开销大于轻微的性能提升。
我想你的目标真的很重要。如果您正在以OOP方式工作,那么您应该能够非常清楚地告诉在方法范围内是否设置了变量。否则,最好不要以undefined
和NULL
的行为方式进行编码。如果无法做到这一点,请考虑使用其他标志来帮助您绕过get_undefined_vars
。
请查看以下主题:
Is var set to null same as undefined and how to check differences