代码之家  ›  专栏  ›  技术社区  ›  berkes

php相当于ruby或等于(foo=bar)?

  •  19
  • berkes  · 技术社区  · 14 年前

    在PHP中,我经常写类似

    isset($foo)? NULL : $foo = 'bar'
    

    在Ruby中有一个很好的捷径,叫做 or equals

    foo ||= 'bar'
    

    PHP是否有这样的运算符、快捷方式或方法调用?我找不到,但我可能错过了。

    8 回复  |  直到 9 年前
        1
  •  20
  •   Gordon Haim Evgi    9 年前

    从PHP7开始,您可以使用 Null Coalesce Operator :

    合并,或 ?? ,则添加运算符,该运算符返回其第一个操作数的结果(如果该操作数存在且不为空),或者返回其第二个操作数的结果。

    所以你可以写:

    $foo = $foo ?? 'bar';
    

    它将使用 $foo 如果设置为不为空或将“bar”分配给 $FO .

    在旁注中,使用三元运算符给出的示例应该是:

    $foo = isset($foo) ? $foo : 'bar';
    

    三元操作不是简单的if/else控制结构,而是 应根据第三个表达式在两个表达式之间进行选择,而不是选择两个句子或执行路径。

        2
  •  8
  •   Ethan Kent    13 年前

    我真的喜欢?接线员。不幸的是,它还没有在我的生产环境中实现。所以,如果我让这个看起来像红宝石一样,我会选择:

    isset($foo) || $foo = 'bar';
    

    或者,如果你想要更短(更慢,可能会产生意想不到的结果):

    @$foo || $foo = 'bar';
    
        3
  •  5
  •   Felix Kling    14 年前

    您可以创建自己的函数:

    function setIfNotSet(&$var, $value) {
        if(!isset($var)) {
            $var = $value;
        }
    }
    
        4
  •  5
  •   raveren    12 年前

    我发现只要做到以下几点,它就可读、简洁、高效:

    isset($foo) or $foo = 'bar';
    
        5
  •  3
  •   Mchl    14 年前

    从php 5.3开始,可以使用 $foo ?: 'bar' 除非你认为$foo是假的

    [编辑]

    算了吧。如果没有设置$foo,它仍然会引起e_注意。

        6
  •  2
  •   kschaper    14 年前

    从手册中:

    由于php 5.3,可以省略三元运算符的中间部分。表达式expr1?:expr3如果expr1的计算结果为true,则返回expr1,否则返回expr3。

    不过,情况并不完全相同。希望它能有所帮助。

        7
  •  1
  •   Scott M.    14 年前

    不。 According to w3schools ,该运算符不存在。

    另外,您发布的PHP代码相当神秘。我喜欢这样的:

    if (!isset($foo)) $foo = 'bar';
    
        8
  •  1
  •   user3788358    10 年前

    与Ruby最相似的是:

    $foo or $foo = 'bar';
    

    $foo是假的,如果

    $foo = 0;
    $foo = '0';
    $foo = NULL;
    $foo = '';
    $foo = array();
    $foo = FALSE;