2012-03-01 64 views
3

让我来解释这个进一步,所以我倾向于做这样的事情:是否有从另一个语句中选择真实变量的语法?

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

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

magic($str) 

我认为这是解决这个得了很严重的方式,有必须是一些简单的语法来实现这一点,我只是愚蠢。

所以我尝试:

magic($foo OR $bar) 

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

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

回答

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));

+0

感谢您的快速回答! – Ryan 2012-03-01 07:46:29

+1

请注意,'$ foo?:$ bar'从PHP 5.3开始工作。在此之前,你坚持使用长格式(在'?'和':'之间使用另一个'$ foo')。 – cHao 2012-03-01 07:47:49

+0

@cHao先于你的方式(好吧,至少在分钟前);)) – 2012-03-01 07:51:50

3

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

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

这是你的代码的缩写:

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

更短:

$str = $foo ?: $bar; 

$str将等于$foo$bar,取其真值。

1

,你可以这样做:

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

我喜欢用三元运营商如此:

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

如果它不是空的,那么将设​​置$str$foo,如果它是$bar。它可能不是你想要的那么简单,但它对我来说看起来更清洁。

相关问题