经过 10 年的 PHP 编程,直到现在我才发现 isset()
根本不好,根据 PHP isset()
manual , isset()
在变量“已设置”且具有 null
值时返回 false。
嗯,我当时正在处理一个数组,并且在阅读和测试代码大约 2 小时后,我通过 array_key_exists()
修复了这个问题。
但是变量要用什么?
isset($var) || is_null($var)
当未设置 $var 时,这会发出通知...empty() 也完全在另一个世界中。正如我所说,is_null() 对未设置的变量发出通知并返回 true!!...好吧,这个也出局了。
最佳答案
可以找到有关is_null
和empty
的快速指南here ,我过去经常引用它。
如您所述,is_null
是一个提示者。在不抛出 NOTICE 的情况下测试它的唯一方法是检查变量是否设置在全局 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
,如果过度使用,这会对挂钟时间和内存使用产生重大的性能影响,我建议它应该只用于调试。
如果您对严格的 global
变量感兴趣,您可以使用 $GLOBALS
super 变量。但是,这不会让您访问函数或方法范围内的变量: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
关于php - 检查是否在 PHP 中设置了变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34398056/