检查是否在PHP中设置了变量

时间:2015-12-21 14:32:07

标签: php variables isset

经过10年的PHP编程,刚才我发现isset()并不好,根据PHP isset() manualisset()在设置变量'时返回false并且一个null值。

好吧,我正在使用一个数组,我在array_key_exists()之后修复了这个问题,在阅读和测试代码大约2个小时之后。

但是对变量使用什么?

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

当$ var未设置时,这会发出通知... empty()完全在另一个世界中。正如我所说的,is_null()在没有设置变量时发出NOTICE并返回true !! ......好吧,这个也出来了。

1 个答案:

答案 0 :(得分:0)

可以找到关于is_nullempty的快速指南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方式工作,那么您应该能够非常清楚地告诉在方法范围内是否设置了变量。否则,最好不要以undefinedNULL的行为方式进行编码。如果无法做到这一点,请考虑使用其他标志来帮助您绕过get_undefined_vars

的使用

请查看以下主题:

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

相关问题