0

PHPには次の略記がありますか:

function a() {...}
function b() {...}

$c = a();
$c = ($c) ? $c : b();

JavaScript では、次のように簡単に実行できます。

$c = a() || b();

しかし、PHPでは、これを$c行うとaになりますboolean(これは正常ですが、私が望むことを行う別の省略形が存在するかどうか知りたいです).

更新
すべての回答に感謝します。

それを行う最短の方法は次のようです。

$c = a() ?: b();

私は個人的にも好きです:

$c = a() or $c = b();

読みやすさのために。

4

7 に答える 7

3

これはうまくいくかもしれません:

$c = ($c) ? : b();
于 2013-05-09T14:17:16.377 に答える
2

Javascript のように行うことはできませんが、短いバージョンの三項構造を使用できます。

$c = a() ?: b();

もう 1 つの方法は、orの低い優先順位を使用することです。それほどきれいではありませんが、実際には Javascript でできる方法に近づいています。

$c = a() or $c = b();

上記を理解しやすくする別の方法は、括弧で囲むことです。

($c = a()) or ($c = b());

代入演算子 = は、"or" 演算子よりも優先されます (||ただし、演​​算子と混同しないでください)。つまりor、最初の部分が と評価された場合、後の部分は実行されませんtrue。それは本質的にこれと同じです:

if ($c = a()) {
    // Do nothing
} elseif ($c = b()) {
    // Do nothing
}

どちらの式も、trueまたはに評価される代入ですfalse。最初の式が の場合はtrue$cなりますa()。それ以外の場合、2 番目の式が試行されます。これは最後の式であり、その後何も行われないため、$c単に と等しくなりb()ます。

いずれにせよ、これは実際には重要な問題ではありません。変数の割り当ての美学について心配することに時間を費やしている場合は、正しいことについて心配していません。

于 2013-05-09T14:27:08.100 に答える
1

私はこれが好きですが、好みの問題です

if( !$c=a() ){
    $c=b();
}

のように

if(!$User=$db->getUserFromID($user_id)){
    $User=$db->getUserFromUsername($username);
}
于 2013-05-09T14:20:34.217 に答える
1

このように黒魔術を使う可能性もある。もっと長い形で書いた方がいいと思います。

function a() {
    return false;
}
function b() {
    return true;
}

($c = a()) || ($c = b());

echo $c;
于 2013-05-09T14:23:17.723 に答える
1

あなたはこれを行うことができます:

$c = a() OR $c = b();
于 2013-05-09T14:23:18.303 に答える
1

代入演算子を使用して利益を得ることができます。

($c = a()) || ($c = b());
echo $c;

ここにデモがあります: http://codepad.org/kqnKv2y4

于 2013-05-09T14:26:09.417 に答える
-1

私はあなたがこれを探していると仮定しています。

http://www.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary

$c = a() ? $c : b();

私はあなたが何をしようとしているのか分かりません。

于 2013-05-09T14:21:42.407 に答える