在Perl中,如果我想默认一个可能存在的值,例如作为传入的参数,我可以这样做:
$var = parm->('variable') || 'default';
在PHP中是否有类似的东西,或者我必须在分配后检查该值,如果它仍为空,则为其分配默认值?
答案 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
无论如何,探索很有趣。