PHP有像perl这样的默认赋值语法吗?

时间:2010-06-02 14:26:56

标签: php

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

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

在PHP中是否有类似的东西,或者我必须在分配后检查该值,如果它仍为空,则为其分配默认值?

3 个答案:

答案 0 :(得分:10)

不完全是。

PHP 5.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

答案 1 :(得分:4)

$var = (!empty($foo)) ? $foo : 'default';

答案 2 :(得分:0)

我认为标准三元在PHP中是事实:

$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

无论如何,探索很有趣。