【问题标题】:Reverse assignment in PHP ( LEFT to RIGHT )PHP中的反向赋值(从左到右)
【发布时间】: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;

【问题讨论】:

    标签: php conditional-operator


    【解决方案1】:

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

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

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

    【讨论】:

    • 没关系但是如果$y_class$z_class没有硬编码那么
    • 嗯,它们不一定必须是硬编码的,你也可以以某种方式“计算”变量名,但你必须格外小心,不要让用户操纵你的变量不想。例如,如果变量的名称来自 GET 参数并且您不验证它,您实际上允许用户覆盖您的任何变量。
    • 我给了这个 +1 是因为它是你最接近你想要做的事情,但老实说,我会坚持使用你拥有的 if/else 代码,因为这种双美元语法很讨厌;在我不想在 PHP 程序中看到的东西列表中,它几乎像 eval() 一样糟糕。
    【解决方案2】:

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

    关于variable variables的php文档的强制性链接。

    【讨论】:

    • 正是我的想法.. +1 比我快
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多