php:在未定义的变量上回显isset不会返回任何结果,而不会返回零

问题描述

在调试一些代码时,我注意到对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