【发布时间】:2011-04-15 12:34:09
【问题描述】:
我有以下情况:
if (isset($x)){
$y_class = 'new value';
}else {
$z_class = 'new value';
}
我可以将上述if 条件更改为三元吗?我的意思是,有没有办法将 LEFT 分配给 RIGHT?
虚构代码:
'new value' = (isset($x)) ? $y_class : $z_class;
【问题讨论】:
我有以下情况:
if (isset($x)){
$y_class = 'new value';
}else {
$z_class = 'new value';
}
我可以将上述if 条件更改为三元吗?我的意思是,有没有办法将 LEFT 分配给 RIGHT?
虚构代码:
'new value' = (isset($x)) ? $y_class : $z_class;
【问题讨论】:
好吧,如果 $y_class 和 $z_class 是硬编码的,你可以这样做,但这只会降低你的代码的可读性:
$var = isset($x) ? "y_class" : "z_class";
$$var = 'new value';
当然这仍然是一个从右到左的赋值;据我所知,语言中没有这样的语法允许从左到右赋值。
【讨论】:
$y_class和$z_class没有硬编码那么
if/else 代码,因为这种双美元语法很讨厌;在我不想在 PHP 程序中看到的东西列表中,它几乎像 eval() 一样糟糕。
你可以这样做:${(isset($x)?$y_class:$z_class)} = 'new value';
关于variable variables的php文档的强制性链接。
【讨论】:
这是我可以创建的最简洁的实现。 (基本上是前 2 个答案的组合)。
${(isset($x) ? 'y':'z'). '_class'} = 'new value';
我最初想使用list() 语言结构,它没有那么小,但我还是实现了它。
list($y_class, $z_class) = isset($x) ? ['new value', $z_class] : [ $y_class, 'new value'];
如果 $y_class 或 $z_class 可能未设置,那么您将不得不这样做
list($y_class, $z_class) = isset($x) ? ['new value', isset($z_class) ? $z_class : null] : [ isset($y_class) ? $y_class : null, 'new value'];
两个列表示例都会导致两个变量都被赋值。
【讨论】: