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

PHP有像perl这样的默认赋值习惯用法吗?

php
  •  6
  • MJB  · 技术社区  · 14 年前

    在Perl中,如果我想默认一个可能存在的值,例如作为传入的参数,我可以这样做:

      $var = parm->('variable') || 'default';
    

    3 回复  |  直到 14 年前
        1
  •  10
  •   Peter Bailey    14 年前

    不完全是。

    PHP5.3引入了他们所称的“三元快捷方式”。

    // old way
    $foo = $foo ? $foo : 'default';
    
    // new way in 5.3
    $foo = $foo ?: 'default';
    

    0 是的有效值 $foo 此快捷方式将失败。)

    否则,您将不得不以旧的、硬的、手动的方式进行类型/存在性检查。

    function foo( $bar = 'baz' )
    {
      echo $bar;
    }
    
    foo(); // baz
    
        2
  •  4
  •   Mike B    14 年前
    $var = (!empty($foo)) ? $foo : 'default';
    
        3
  •  0
  •   Joel Mellon    12 年前

    $var = $foo ? $foo : 'default';
    echo $foo ? $foo : 'default';
    

    但在某些情况下,还有其他一些技巧可以稍微干净一点:

    //these are very close but can't be echo'd inline like a ternary
    $var = $foo OR $var = 'default';//assigning a default to $var if $foo is falsy
    ($var = $foo) || $var = 'default';//same effect as above
    
    isset($var) || $var = 'default';//making sure $var is set
    

    这里有一个可以内联回显:

    $var = ($foo) ?: 'default';//partial ternary
    echo ($foo) ?: 'default';//aka ternary shortcut (PHP 5.3+ only)
    

    echo @($foo) ?: 'default';//@ fixes it but isn't considered good practice
    

    不使用三元方法的一个值得注意的地方是当它们嵌套时:

    $user = (($user)?$user:(($user_name)?$user_name:(($user_id)?$user_id:'User')));
    echo 'Welcome '.$user;//is pretty messy
    
    ($user = $user) || ($user = $user_name) || ($user = $user_id) || ($user = 'User');
    echo 'Welcome '.$user;//is more readable
    

    总之,探索有很多乐趣。