2012-03-01 5 views
3

は、私はさらにこれを説明しましょう、だから私のような何かをする傾向がある:真の変数を他の変数から選択する構文はありますか?

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

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

magic($str) 

私は、これがこのアプローチする、本当に厄介な方法であると思ったし、これを達成するためにいくつかの簡単な構文があるようになったと私はちょうどよ愚かである。

は、だから私は試してみました:

magic($foo OR $bar) 

は、残念ながらそれは実際に2つの変数を比較し、代わりに実際の真の変数自体の1を返します。

基本的には、最初の変数が空であるかどうかを確認する構文が必要ですが、代わりに2番目の変数が返されます。

答えて

5

はい、PHP 5.3以降では、三項演算子の新しいバージョンを使用:あなたはPHP 5.2またはそれ以前のバージョンをサポートする必要がある場合は、

少しより冗長を使用する必要があります

$str = $foo ?: $bar; 

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

これらまたはあなたのif($foo){ $str = $foo; } else{ $str = $bar; }$barの値をチェックし、あなたの質問のタイトルは非常ないでもないhttp://php.net/manual/en/language.operators.comparison.php

ノートを参照してください。体にマッチする。

あなたが複数のアイテムを持っていて、例えば、あなたがarray_filterを使用することができます空のものを削除する場合:

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

+0

ありがとうございました! – Ryan

+1

'$ foo?:$ bar'はPHP 5.3以降で動作します。その前に、あなたは長い形式( '?'と ':'の間に別の '$ foo'をつけています)に悩まされています。 – cHao

+0

@cあなたに先んじて(ちょっと前に分;)) –

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と設定します。あなたが探しているほどシンプルではないかもしれませんが、それは私にとってはよりきれいに見えます。

関連する問題