多重条件或条件

问题描述 投票:2回答:3

isset可用于检查是否设置了多个变量[[ALL:

if (isset($var1, $var2, $var3)) {...}
但是如果我要检查是否设置了

ANY

,该怎么办?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)) {...}

php isset
3个回答
-1
投票
[isset检查变量是否为null,同时禁止通知该变量根本不存在。

无法创建类似于isset的用户定义函数。用户定义的函数只能接受

values,而不能接受“变量”。该值必须在调用方进行解析,因此不存在的变量将始终在该位置生成通知,并且您的函数无法执行任何操作来抑制它。 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 || ...没有真正的解决方法。

-1
投票
将其作为参考列表传递。但是,它仍然不是一个好的解决方案。

function orset($variables) { foreach($variables as $variable) { if (isset($variable)) return true; } return false; } if (orset([&$var1,&$var2])) { ... }


-2
投票
我不完全确定这是否是解决此问题的最佳方法……您只能将变量名传递给函数,而不能传递变量。

//$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)....时,这只是使事情复杂化。    
© www.soinside.com 2019 - 2024. All rights reserved.