我需要能够在PHP中区分纯粹未定义的变量和空变量。PHP 使得这很难做到这一点。下面的链接解释了困境:
https://stackoverflow.com/a/14309841/3163495
在该链接中,有一个技巧可以查看变量是否真正未定义,或者只是设置为 NULL:
。有一个技巧可以与"紧凑"一起使用,允许您 确定是否已定义变量,即使其值为 null:
var_dump(!!compact('noSuchVariable')); // false var_dump(!!compact('nullVariable')); // true
这个技巧本身效果很好,但是当你尝试将其包装在这样的函数中时,它会中断:
function IsDefined(& $variable){
return (!!compact('variable'));
}
上面的函数 IsDefined 总是返回 true,无论我传递什么形式的未定义变量。请注意$variable参数旁边的"&"符号 - 我是通过引用传递的,否则 PHP 将抛出"未定义的变量"错误。
如何将上面提到的"未定义检查"技巧放入可重用的函数中?
从注释中,您不需要任何变量的解决方案,只需要会话变量的解决方案。会话变量不是真正的变量,它们是关联数组的元素。因此,您可以使用array_key_exists()
功能。
function sessionVarDefined($varname) {
return array_key_exists($varname, $_SESSION);
}
然后你可以写
if (sessionVarDefined('MyVariable') {
...
}