我们如何根据一个或多个变量的存在来设置变量的值? 这有效,但我想知道PHP是否有一个“速记”版本:
if (isset($a)) { $x=$a; } elseif (isset($b)) { $x=$b; }
如果你想要更大的图片,我需要给$ x $ _REQUEST ['a']或$ _GET ['a']的值,每次都存在。
编辑:三元运算符将为2个变量提供技巧。功能是否可以扩展超过2个?实施例
if (isset($a)) { $x=$a; } elseif (isset($b)) { $x=$b; } else { $x=$c; }
答案 0 :(得分:3)
使用三元运算符:
$x = isset($a) ? $a : $b;
答案 1 :(得分:2)
我认为如果误用三元运算符很快就会变得难以理解。所以,让我建议另一种思维方式:
$x=$c; // default
if (isset($b)) $x=$b;
if (isset($a)) $x=$a;
或者:
function first_set($array,$default=null){
foreach($array as $e) if isset($e) return $e;
return $default;
}
$x=first_set(array($a,$b),$c);
答案 2 :(得分:1)
您可以尝试这样做:
$x = ($a) ?: $b; // if you are using 5.3+
$x = ($a) ? $a : $b; // if >PHP5.3
答案 3 :(得分:1)
$x=isset($a)?$a:(isset($b)?$b:'default value');
您可以根据需要嵌套任意数量的条件。\
$x=isset($a)?$a:(isset($b)?$b:(isset($c)?$c:'other ternary condition'));
答案 4 :(得分:1)
您可以堆叠ternary运营商:
<?php
$x = isset($a) ? $a : (isset($b) ? $b : null);
?>
此外,它可能会扩展到:
<?php
$x = isset($a) ? $a : (isset($b) ? $b : (isset($c) ? $c : null));
?>
注意:您需要大括号以避免非明显的执行。
建议您避免“堆叠”三元表达式。 PHP的 在单个中使用多个三元运算符时的行为 陈述不明显。
我建议,不要过多地混淆这些表达。它可能会影响代码的可读性。