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

时间:2015-07-24 08:30:45

标签: php variables isset

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

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

如果isset不是我所追求的那个,我如何检查变量是否已设置

我无法使用empty,例如,

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

$b根本没有设置。

我可以在更有意义的javascript中做到这一点,

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

2 个答案:

答案 0 :(得分:5)

isset检查变量is set and not null。所以是的,如果您正在检查的变量保持值false,它将返回null。事实上,不可能将不存在的变量与保持null的变量区分开来。人们会建议各种各样的hackarounds,但它们都没有100%的时间工作。在PHP中,您无法区分这两种情况,即句号。

请注意,您可以使用更专业的方法来确定array keysobject properties的差异,这没问题。但普通变量难以区分。

话虽如此,你真的不应该进入你需要这种区别的情况。如果您正确初始化变量,则无需检查它们是否设置完全控制程序中的所有变量,可以绝对确保它们存在时应该存在,因此您无需检查。如果PHP然后抱怨不存在的变量,你知道你有一个可以修复的错误。您控制的所有输入都应以“来自外部”的数组或对象的形式出现,您可以详细检查并将null与不存在的密钥区分开来。

请参阅The Definitive Guide To PHP's isset And empty

答案 1 :(得分:0)

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

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