2016-04-06 20 views
12

まず、この式の名前はありますか?javascriptの最も速いPHPに相当する `var a = var1 || var2 || var3;`式

Javascriptを

var value = false || 0 || '' || !1 || 'string' || 'wont get this far'; 

valuestring(文字列)に等しい5番目のオプション別名

PHP

$value = false || 0 || '' || !1 || 'string' || 'wont get this far'; 

$valuetrue(ブール値)

は、私は右の思考にアム等しいですJavaScriptと同じ結果を得る正しい方法は、三項演算子を入れ子にすることです。最高の解決策は何ですか?

+1

それは '真のエコーonly..Test' true'にある; ' – Rayon

+0

あなたがチェックし、[この](http://stackoverflow.com/questions/5694733/does-php-have-short-circuitをしたいかもしれません評価)アウト。 –

+3

JSで短絡評価と呼ばれています – Xufox

答えて

15

PHPの等価演算子は、中央部分無しternary operatorである、?:である:

$value = false ?: 0 ?: '' ?: !1 ?: 'string' ?: 'wont get this far'; 

$a ?: $b$a ? $a : $bの省略形です。

+0

私は三項演算子に関する問題ではないと思います。しかし、OPは、短絡評価ではなく、三項演算子と混乱していました。 –

+1

Javascriptで '||'はブール値ではなく、そのオペランド*の1つを返します。 PHPでそれと同等の方法は '?:'です。質問に答えました。 – deceze

+0

ありがとうございます。私は他の何かを推測していた。 –

1

このテストfalse || 0 || '' || !1 || true || 'wont get this far'はブール値を返します。値がtrueの場合、trueが返されます。これがORの仕組みです。それは受信変数に最初の有効な値を適用する三項式ではありません。

ブール値として式をキャストしなかったため、1をPHPに返します。あなたが表現をするためにこれを行うことができます

は、PHPの変数に整数の代わりにブール値を返します。

$value = (bool)(false || 0 || '' || !1 || true || 'wont get this far');` 

リターンがtrueになります。

+0

* "' .. || ..'はブール値を返します... "*、*"式をブール値に戻すにはこれを行うことができます... "* - どちらですか? '||'はブール値を返しますか?そうではありませんか? – deceze

+0

これはブール値を返しますが、PHPでは変数には直接入力しません。私は2つのdownvotesを得ることはありませんが、大丈夫 – Phiter

+0

ウット?ブール値を返すか、ブール値を返しません。戻り値を変数に代入するかどうかには違いはありません。値は値です。 '||'のブーリアン戻り値はそれをキャストすることでそれ以上ブール値を取得しません。 – deceze

1

PHP 5.3以上を使用している場合は、deceze's answerを参照してください。

他の点では、ネストされた正規の三項演算子を使用できます。

$value = (false ? false : (0 ? 0 : ('' ? '' : (!1 ? !1 : ('string' ? 'string' : ('wont get this far' ? 'wont get this far' : null)))))); 

うわー。

代わりに値の配列を使用できます。

ここで、配列を反復処理して最初の真の値を返す関数を作成します。

function array_short_circuit_eval($vars = array()){ 
    foreach ($vars as $var)if($var)return $var;return null; 
} 

$value = array_short_circuit_eval($array); 

echo $value; // string 
+0

'$ value = current(array_filter(array(false、0、...)))' - 誰もこれを使う必要はないと思いますが、ここには... – deceze

関連する問題