PHP中的反向赋值(从左到右)

PHP中的反向赋值(从左到右),php,conditional-operator,Php,Conditional Operator,我有以下情况: if (isset($x)){ $y_class = 'new value'; }else { $z_class = 'new value'; } 我是否可以将上述if条件更改为三元?我的意思是,有没有办法将左分配给右 假想代码: 'new value' = (isset($x)) ? $y_class : $z_class; 如果$y_class和$z_class是硬编码的,您可以这样做,但这只会降低代码的可读性: $var = isset($x) ? "y_

我有以下情况:

if (isset($x)){
   $y_class = 'new value';
}else { 
   $z_class = 'new value';
}
我是否可以将上述
if
条件更改为三元?我的意思是,有没有办法将分配给

假想代码:

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

如果
$y_class
$z_class
是硬编码的,您可以这样做,但这只会降低代码的可读性:

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

当然,这仍然是一个从右到左的任务;据我所知,该语言中没有允许从左到右赋值的语法。

您可以这样做:
${(isset($x)$y_class:$z_class)}='newvalue'


指向php文档的强制性链接。

这是我能创建的最干净的实现。(基本上是前两个答案的组合)

我最初想使用语言结构,它没有那么小,但我还是实现了它

list($y_class, $z_class) = isset($x) ? ['new value', $z_class] : [ $y_class, 'new value'];
如果可能未设置$y_类或$z_类,则必须执行以下操作

list($y_class, $z_class) = isset($x) ? ['new value', isset($z_class) ? $z_class : null] : [ isset($y_class) ? $y_class : null, 'new value'];

两个列表示例都会导致两个变量都被赋值

这很好,但是如果
$y_class
$z_class
不是硬编码的,那么它们不一定必须是硬编码的,您也可以以某种方式“计算”变量名,但是您必须格外小心,不要让用户操纵您不想要的变量。例如,如果变量的名称来自GET参数,而您没有验证它,那么实际上您允许用户覆盖您的任何变量。我将此值设为+1,因为它是最接近您尝试执行的操作,但老实说,我只会使用您拥有的
if/else
代码,因为双美元的语法很糟糕;在我不想在PHP程序中看到的东西列表中,
eval()+谢谢你比我快
list($y_class, $z_class) = isset($x) ? ['new value', isset($z_class) ? $z_class : null] : [ isset($y_class) ? $y_class : null, 'new value'];