Mar*_*elo 36 php variables if-statement isset
我有(或没有)$_GET['myvar']
来自我的查询字符串的变量,我想检查这个变量是否存在,以及该值是否与if语句中的内容相对应:
我正在做和想的不是最好的方法:
if(isset($_GET['myvar']) && $_GET['myvar'] == 'something')
: 做一点事
我的问题是,在没有声明变量两次的情况下,有没有办法做到这一点?
这是一个简单的案例,但想象一下,必须比较许多$myvar
变量.
mel*_*oon 18
可悲的是,这是唯一的方法.但是有一些方法可以处理更大的数组.例如这样的事情:
$required = array('myvar', 'foo', 'bar', 'baz');
$missing = array_diff($required, array_keys($_GET));
Run Code Online (Sandbox Code Playgroud)
变量$ missing现在包含一个必需值的列表,但$ _GET数组中缺少这些值.您可以使用$ missing数组向访问者显示消息.
或者您可以使用类似的东西:
$required = array('myvar', 'foo', 'bar', 'baz');
$missing = array_diff($required, array_keys($_GET));
foreach($missing as $m ) {
$_GET[$m] = null;
}
Run Code Online (Sandbox Code Playgroud)
现在每个必需元素至少有一个默认值.您现在可以使用if($ _ GET ['myvar'] =='something')而不必担心密钥未设置.
更新
另一种清理代码的方法是使用一个检查值是否已设置的函数.
function getValue($key) {
if (!isset($_GET[$key])) {
return false;
}
return $_GET[$key];
}
if (getValue('myvar') == 'something') {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
Nic*_*ick 15
从 PHP7 开始,您可以使用空合并运算符 ??
来避免双重引用:
$_GET['myvar'] = 'hello';
if (($_GET['myvar'] ?? '') == 'hello') {
echo "hello!";
}
Run Code Online (Sandbox Code Playgroud)
输出:
hello!
Run Code Online (Sandbox Code Playgroud)
一般来说,表达式
$a ?? $b
Run Code Online (Sandbox Code Playgroud)
相当于
isset($a) ? $a : $b
Run Code Online (Sandbox Code Playgroud)
小智 14
如果您正在寻找一个单行检查变量的值,您还不确定是否已设置,这可行:
if ((isset($variable) ? $variable : null) == $value) { }
Run Code Online (Sandbox Code Playgroud)
唯一可能的缺点是,如果您正在测试true
/ false
- null
将被解释为等于false
.
归档时间: |
|
查看次数: |
53668 次 |
最近记录: |