【问题标题】:php: echoing isset on an undefined variable return nothing instead of zero [duplicate]php:在未定义的变量上回显isset不返回任何内容而不是零[重复]
【发布时间】:2020-08-20 15:30:34
【问题描述】:

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

布尔(真)

布尔(假)

foo array_key_exists: 1

foo array_key_exists:

【问题讨论】:

    标签: php isset php-5.6


    【解决方案1】:

    答案是使用 empty() 函数来检查错误。所以不要使用echo "foo isset: ".isset($bar)."\n";,而是使用echo "foo isset: ".empty(isset($bar))."\n";,因为它是空的,所以会返回true。

    我在这里找到了解决方案: PHP - check if variable is undefined

    【讨论】:

    • 我仍然对为什么 false 不显示任何内容有疑问。如果我在定义 $bar 时运行 empty(isset($bar)),则 php 再次返回空白而不是零。为什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 2016-10-18
    • 1970-01-01
    • 2016-07-25
    • 2014-06-14
    相关资源
    最近更新 更多