PHP 中非常基本的问题 - 我已将变量设置为 null,为什么结果为 false?
$a = null;
var_dump(isset($a)); // false
如果 isset
不是我想要的变量,我该如何检查变量
是否已设置?我不能使用
empty
,例如,
var_dump(empty($b)); // false
但是
$b
根本没有设置。我可以用 javascript 做到这一点,这更有意义,
if (typeof variable !== 'undefined') ...
isset
检查变量是否已设置 而不是
null
。所以是的,如果您正在检查的变量包含值 false
,它将返回
null
。事实上,不可能区分“不存在”变量和持有“
null
”的变量。人们会为此提出各种解决办法,但没有一个能 100% 有效。在 PHP 中,你无法区分这两种情况。
请注意,您可以使用更专业的方法来找出数组键 或
对象属性 的差异,这没问题。但普通变量是无法区分的。 话虽如此,您确实不应该陷入需要这种区别的情况。如果您正确地初始化变量
,则无需检查它们是否已设置。 你完全控制程序中的所有变量,你可以绝对确保它们在应该存在的时候存在,所以你不需要检查。如果 PHP 抱怨变量不存在,那么您就知道有一个可以修复的错误。您不控制的所有输入都应以“来自外部”的数组或对象的形式出现,您可以详细检查并区分null
与不存在的键。
参见PHP isset 和empty 的权威指南。我找到了一种方法来解决它,但它看起来很难看,
$a = null;
$defined_vars = get_defined_vars();
var_dump(array_key_exists('a', $defined_vars)); // true
使用 array_key_exists()
(PHP 4 >= 4.0.7、PHP 5、PHP 7、PHP 8) array_key_exists — 检查给定的键或索引是否存在于数组中
描述¶
array_key_exists(string|int $key, array $array): bool 如果给定的键已在数组中设置,则 array_key_exists() 返回 true。键可以是数组索引可能的任何值。