【发布时间】:2017-05-08 20:07:41
【问题描述】:
我需要能够在 PHP 中区分纯粹未定义的变量和空变量。 PHP 很难做到这一点。下面的链接解释了这个困境:
https://stackoverflow.com/a/14309841/3163495
在该链接中,有一个技巧可以查看变量是否真正未定义,或者只是设置为 NULL:
...有一个技巧可以用于“紧凑”,它可以让你 判断一个变量是否已经定义,即使它的值为空:
var_dump(!!compact('noSuchVariable')); // false var_dump(!!compact('nullVariable')); // true
这个技巧本身很有效,但是当你尝试将它包装在这样的函数中时它会中断:
function IsDefined(& $variable){
return (!!compact('variable'));
}
上面的函数IsDefined总是返回true,不管我传递的是什么形式的未定义变量。 注意 $variable 参数的“&”符号——我通过引用传递,否则 PHP 将抛出“未定义变量”错误。
我怎样才能将上面提到的“未定义检查”技巧转化为一个工作的、可重用的函数?
【问题讨论】:
-
为什么需要这样做?如果您必须经常这样做以至于需要一个函数,那么您的编码似乎有问题。
-
它们总是需要检查的全局变量吗?你可以测试一下
isset($GLOBALS[$varname]) -
@Barmar 不,它们不会是全局变量,它们将是我将尝试通过引用传递给函数 IsDefined 的变量
-
如果它们是函数的本地变量,为什么不使用另一个变量来跟踪您是否已分配变量。
$foo_assigned = false; ... $foo = something; $foo_assigned = true;。然后只需测试$foo_assigned。 -
@Barmar 我需要这样做的原因是我可以检查是否设置了 $_SESSION 变量,其中 NULL 是可接受的值。目前,如果我检查它是否使用 isset($_SESSION["MyVariable"]) 设置,如果变量为 NULL,它将返回 FALSE,当我需要返回 TRUE 时,因为 NULL 是它设置的值。
标签: php reference null undefined