猿问

多资产或条件

isset可用于检查多个变量是否全部设置:


if (isset($var1, $var2, $var3)) {...}

但是如果我想检查是否设置了任何变量怎么办?


if (isset($var1) || isset($var2) || isset($var3)) {...}

鉴于使用@错误抑制被认为是不好的做法,有没有比这更好的方法?


function orset()

{

    foreach (func_get_args() as $arg) {

        if (isset($arg)) return true;

    }

    return false;

}


if (orset(@$var1, @$var2, @$var3)) {...}


饮歌长啸
浏览 120回答 3
3回答

函数式编程

我想出了检查是否设置了任何变量的新想法。然而,正如 deceze 提到的那样,这是不可能的,但这种方式更容易列出您要检查的所有变量。但这仍然不是实现它的非常优雅的方法,因为没有很好的方法来做到这一点。null在链的末尾返回很重要,因为它会以其他方式显示不存在的数组元素的通知。$var3 = 'test';$var4['4'] = false;$var4['3'] = null;var_dump(!is_null($var1 ?? $var2 ?? $var3 ?? $var4['4'] ?? null)); //truevar_dump(!is_null($var1 ?? $var2 ?? $var3 ?? null)); //truevar_dump(!is_null($var1 ?? $var2 ?? null)); //falsevar_dump(!is_null($var1 ?? $var2 ?? $var4['3'] ?? null)); //falsevar_dump(!is_null($var1 ?? $var2 ?? $var4['5'] ?? null)); //false

潇湘沐

isset如果变量null根本不存在,则在抑制通知时检查变量是否存在。无法创建像isset. 用户定义的函数只能接受值,不能接受“变量”。该值必须在调用方解析,因此一个不存在的变量将始终在那里生成一个通知,并且您的函数无法执行任何操作来抑制它。isset是一种“语言构造”,它更像是一个运算符而不是一个函数,并且没有办法模仿它在用户态代码中的作用。在某些特殊情况下,您可以实施一些解决方法,例如使用全局变量,但在其他情况下这些方法将失败,例如当您不使用全局变量时。从根本上说,您一开始就不必过多地处理不存在的变量。您的代码完全控制它创建的变量,因此如果您定义变量,则无需检查它们是否存在。任何动态的东西都应该作为数组或对象传递,例如用户输入通过$_GET或$_POST或其他可以作为对象传递的数据结构。然后你不再谈论isset,而是关于测试数组中键的存在,例如,这可以简化,例如:if (array_intersect_key($array, array_flip(['foo', 'bar', 'baz']))) {    echo 'At least one of those keys was in $array';}因此,避免陷入需要首先检查是否设置了某些变量的情况。如果您不可避免地处于这种情况,那么isset || isset || ....

温温酱

我不完全确定这是否是解决此问题的最佳方法......您可以只将变量名传递给函数而不是变量。//$var1 = 1;//$var2 = 2;//$var3 = 3;function orset(){    foreach (func_get_args() as $arg) {               global ${$arg};                if (isset(${$arg})) {            return true;        }    }    return false;}if (orset('var1', 'var2', 'var3')) {    echo "ok"; }为什么要抑制错误?将未定义的变量传递给函数应该产生一个通知。如果您忘记了抑制错误(您应该这样做),您可以使用:function orset(){    foreach (func_get_args() as $arg) {               global $arg;                if (isset($arg)) {            return true;        }    }    return false;}if (orset($var1, $var2, $var3)) {    echo "ok"; }当您可以简单地使用 if (isset($var1) || isset($var) ....
随时随地看视频慕课网APP
我要回答