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)) {...}
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 || ...
没有真正的解决方法。 function orset($variables)
{
foreach($variables as $variable) {
if (isset($variable)) return true;
}
return false;
}
if (orset([&$var1,&$var2])) { ... }
//$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)....时,这只是使事情复杂化。