PHP中的反向分配(LEFT到RIGHT)

时间:2011-04-15 12:34:10

标签: php conditional-operator

我有以下条件:

if (isset($x)){
   $y_class = 'new value';
}else { 
   $z_class = 'new value';
}

我可以将上述if条件更改为三元组吗?我的意思是,有没有办法将 LEFT 分配给 RIGHT

虚构代码:

'new value' = (isset($x)) ? $y_class : $z_class;

3 个答案:

答案 0 :(得分:7)

好吧,如果$y_class$z_class是硬编码的,您可以执行类似的操作,但这只会降低您的代码的可读性:

$var = isset($x) ? "y_class" : "z_class";
$$var = 'new value';

当然,这仍然是从右到左的任务;据我所知,语言中没有这样的语法允许从左到右分配。

答案 1 :(得分:5)

你可以这样做:${(isset($x)?$y_class:$z_class)} = 'new value';

关于variable variables

的php文档的强制链接

答案 2 :(得分:0)

这是我可以创建的最干净的实现。 (基本上是前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'];

两个列表示例都将导致两个变量都被分配一个值。