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

标签 php variables isset

经过 10 年的 PHP 编程,直到现在我才发现 isset() 根本不好,根据 PHP isset() manual , isset() 在变量“已设置”且具有 null 值时返回 false。

嗯,我当时正在处理一个数组,并且在阅读和测试代码大约 2 小时后,我通过 array_key_exists() 修复了这个问题。

但是变量要用什么?

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

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

最佳答案

可以找到有关is_nullempty 的快速指南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 方式工作,那么您应该能够相当清楚地分辨出是否在方法范围内设置了变量。否则,最好不要以 undefinedNULL 行为不同的方式进行编码。如果这不可能,请考虑使用其他标志来帮助您避免使用 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/

相关文章:

php - appcfg.py : error: Error parsing app\app. yaml:无法将值 'php55' 分配给属性 'runtime'

php - 如何测试 Doctrine Migrations?

variables - 包含另一个变量值的变量名

php - 在 php mysql 查询中添加更多搜索变量时遇到问题

php - 哪种方法会更快?错误抑制@ $ _ REQUEST ['x']或通过isset($ _ REQUEST ['x'])

php - 像 PHP 中的数组一样初始化对象?

php - 将 Mongo 游标正确解析为 PHP

linux - 根据用户输入将文本插入文件最后一行的 Shell 脚本

PHP-全局变量和常量有什么区别

php - 在 php 中替代 isset(user_input)