是否有语法从另一个中选择真正的变量?

时间:2012-03-01 07:38:48

标签: php syntax

让我进一步解释一下,所以我倾向于做类似的事情:

$foo = "";
$bar = "This is not empty"

if($foo){
  $str = $foo;
}else{
  $str = $bar;
}

magic($str)

我认为这是一个非常讨厌的方法来解决这个问题,并且必须有一些简单的语法来实现这一点而且我只是愚蠢。

所以我试过了:

magic($foo OR $bar)

不幸的是,它实际上比较了两个变量并返回1而不是实际的真实变量本身。

基本上我想要一种语法来检查第一个变量是否为空,然后它将返回第二个变量。

4 个答案:

答案 0 :(得分:5)

是的,在PHP 5.3或更高版本中,使用新版本的三元运算符:

$str = $foo ?: $bar;

如果您需要支持PHP 5.2或更早版本,则必须使用稍微冗长的

$str = $foo ? $foo : $bar;

请参阅http://php.net/manual/en/language.operators.comparison.php

请注意这些或if($foo){ $str = $foo; } else{ $str = $bar; }检查$bar的值,您的问题标题与正文完全不符。

如果您有多个项目并且想删除空白项目,可以使用array_filter,例如:

array_filter(array($foo, $bar, $baz));

答案 1 :(得分:3)

一种方法是使用这样的三元运算符:

$str = $foo ? $foo : $bar;

它是您的代码的简写:

if($foo){
  $str = $foo;
}else{
  $str = $bar;
}

更短:

$str = $foo ?: $bar;

$str将等于$foo$bar,无论哪个都是真实的。

答案 2 :(得分:1)

你能做到这一点:

magic($foo ?  $foo : $bar);

答案 3 :(得分:0)

我喜欢使用这样的三元运算符:

$str = ( $foo ) ? $foo : $bar;

如果$str不为空,则会将$foo设置为$bar,如果是{{1}}则为{{1}}。它可能不像你想要的那么简单,但它对我来说看起来更干净。