我需要能够在 PHP 中区分纯粹未定义的变量和空变量。 PHP 使得做到这一点变得很困难。下面的链接解释了这个困境:
https://stackoverflow.com/a/14309841/3163495
在该链接中,有一个技巧可以查看变量是否确实未定义,或者只是设置为 NULL:
...有一个技巧可以与“compact”一起使用,让您可以 确定变量是否已定义,即使其值为 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') {
...
}