2

我们如何根据一个或多个变量的存在来设置变量的值?这可行,但我想知道 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; }
4

5 回答 5

3

使用三元运算符:

$x = isset($a) ? $a : $b;
于 2013-05-24T10:38:48.023 回答
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);
于 2013-05-24T10:59:07.803 回答
1

您可以尝试这样做:

$x = ($a) ?: $b; // if you are using 5.3+

$x = ($a) ? $a : $b; // if >PHP5.3
于 2013-05-24T10:37:40.590 回答
1
$x=isset($a)?$a:(isset($b)?$b:'default value');

您可以嵌套任意数量的条件。\

$x=isset($a)?$a:(isset($b)?$b:(isset($c)?$c:'other ternary condition'));
于 2013-05-24T10:45:36.083 回答
1

您可以堆叠三元运算符:

<?php
$x = isset($a) ? $a : (isset($b) ? $b : null);
?>

此外,它可能会扩展到:

<?php
$x = isset($a) ? $a : (isset($b) ? $b : (isset($c) ? $c : null));
?>

注意:您需要大括号以避免不明显的执行。

建议您避免“堆叠”三元表达式。在单个语句中使用多个三元运算符时 PHP 的行为并不明显。

我建议不要使此类表达过于复杂。它可能会影响代码的可读性。

于 2013-05-24T10:45:42.713 回答