问题描述
在调试一些代码时,我注意到对echo isset($bar)
的调用没有返回任何内容。没事根据文档,当未声明变量时,它应该返回false,因为在我看来,它不是。我在沙盒中玩耍以检查自己的理智。果然,什么也不返回。请参阅下面的链接。
http://sandbox.onlinephpfunctions.com/code/8c6e97b4eca5177480ec069d866c0ed38c2ae47f
仅当我使用var_dump(isset($bar));
时我才能得到错误的结果,但这会产生bool(false)而不是零。我可以与此同时工作的人可以解释发生了什么吗?
<?PHP
$foo = 1;
$defined_vars = get_defined_vars();
echo "foo isset: ".isset($foo)."\n"; //Should print 1
echo "foo isset: ".isset($bar)."\n"; //Should print 0
echo "\nvar_dump of foo and bar:\n";
var_dump(isset($foo)); //Should print bool(true)
var_dump(isset($bar)); //Should print bool(false)
echo "\n";
echo "foo array_key_exists: ".array_key_exists('foo',$defined_vars)."\n"; //Should print 1
echo "foo array_key_exists: ".array_key_exists('bar',$defined_vars); //Should print 0
输出:
foo isset:1
Foo isset:
foo和bar的var_dump:
bool(true)
bool(false)
foo array_key_exists:1
foo array_key_exists:
解决方法
答案是使用empty()函数检查虚假性。因此,请使用echo "foo isset: ".isset($bar)."\n";
而不是echo "foo isset: ".empty(isset($bar))."\n";
,因为它为空将返回true。
我在这里找到了解决方案: PHP - check if variable is undefined