PHP - 将“未定义检查”技巧包装在函数中?

问题描述 投票:0回答:1

我需要能够在 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 将抛出“未定义变量”错误。

我怎样才能将上面提到的“未定义检查”技巧变成一个有效的、可重用的函数?

php reference null undefined
1个回答
1
投票

从评论来看,您不需要任何变量的解决方案,只需会话变量即可。会话变量不是真正的变量,它们是关联数组的元素。所以你可以使用

array_key_exists()
功能。

function sessionVarDefined($varname) {
    return array_key_exists($varname, $_SESSION);
}

然后就可以写了

if (sessionVarDefined('MyVariable') {
    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.