PHP -变量已经设置,但返回false与isset?

n9vozmp4  于 12个月前  发布在  PHP
关注(0)|答案(3)|浏览(126)

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

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

如果isset不是我要找的变量,我如何检查变量是否被设置
例如,我不能使用empty

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

但是$b根本没有设置。
我可以用JavaScript来做,这更有意义,

if (typeof variable !== 'undefined') ...
yws3nbqq

yws3nbqq1#

isset检查变量is set and not null是否。所以是的,如果你检查的变量的值是null,它将返回false。事实上,不可能区分一个 * 不存在 * 的变量和一个包含null的变量。人们会为此提出各种各样的解决方案,但没有一个是100%有效的。在PHP中,你不能区分这两种情况,句号。
请注意,您可以使用更专门的方法来找出array keysobject properties的差异,这没有问题。但普通变量是无法区分的。
话虽如此,你真的不应该进入一个情况下,你需要这种区别无论如何。如果你正确地初始化你的变量,你就不需要检查它们是否被 * 设置 *。你完全控制程序中的所有变量,你可以绝对确保它们在应该存在的时候存在,所以你不需要检查。如果PHP然后抱怨不存在的变量,你知道你有一个错误,你可以修复。所有你不能控制的输入都应该以数组或对象的形式出现,你可以详细检查并区分null和不存在的键。
请参见The Definitive Guide To PHP's isset And empty

6yt4nkrj

6yt4nkrj2#

我找到了一种方法来解决它,但它似乎丑陋,

$a = null;
$defined_vars = get_defined_vars();
var_dump(array_key_exists('a', $defined_vars)); // true
3hvapo4f

3hvapo4f3#

使用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如果给定的键在数组中设置。key可以是数组索引的任何可能值。

相关问题