PHP - 变量已设置但使用 isset 返回 false?

问题描述 投票:0回答:3

PHP 中非常基本的问题 - 我已将变量设置为 null,为什么结果为 false?

$a = null;
var_dump(isset($a)); // false

如果 isset 不是我想要的变量,我该如何检查变量

 是否已设置?

我不能使用

empty

,例如,

var_dump(empty($b)); // false

但是

$b

根本没有设置。

我可以用 javascript 做到这一点,这更有意义,

if (typeof variable !== 'undefined') ...
    
php variables isset
3个回答
5
投票

isset

 检查变量 
是否已设置 而不是 null
。所以是的,如果您正在检查的变量包含值
false
,它将返回 
null
。事实上,不可能区分“不存在”变量和持有“
null”的变量。人们会为此提出各种解决办法,但没有一个能 100% 有效。在 PHP 中,你无法区分这两种情况。
请注意,您可以使用更专业的方法来找出 
数组键

对象属性 的差异,这没问题。但普通变量是无法区分的。 话虽如此,您确实不应该陷入需要这种区别的情况。如果您正确地初始化变量

,则无需检查它们是否已

设置完全控制程序中的所有变量,你可以绝对确保它们在应该存在的时候存在,所以你不需要检查。如果 PHP 抱怨变量不存在,那么您就知道有一个可以修复的错误。您控制的所有输入都应以“来自外部”的数组或对象的形式出现,您可以详细检查并区分null与不存在的键。

参见 
PHP isset 和empty 的权威指南

我找到了一种方法来解决它,但它看起来很难看,

0
投票
$a = null; $defined_vars = get_defined_vars(); var_dump(array_key_exists('a', $defined_vars)); // true

使用 array_key_exists()

0
投票
数组键_存在

(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。键可以是数组索引可能的任何值。

© www.soinside.com 2019 - 2024. All rights reserved.