私はこのような3つの変数を持っています
$posted_on = '0';
$shared_on = '34';
$by_id = '12';
$owner
上記の値がで始まらない3つの変数に値0
を割り当てたいと思い$posted_on
ます。現在私はこれを行っていますが、これは正しい結果を出力しません
$owner = $posted_on;
$owner = '0' ? $shared_on : $owner;
$owner = '0' ? $by_id : $owner;
あなたはあなたのオペレーターを混同しました。比較するには、==
またはを使用する必要があります===
。
$owner = $posted_on;
$owner == 0 ? $shared_on : $owner;
$owner == '0' ? $by_id : $owner;
=
(代入)演算子を使用すると、各ステートメントに効果的に代入0
し、結果(代入の定義で$owner
は常に)が真であるかどうかを確認できます。0
2つの違いは、2つのオペランドの値が等しいかどうかを確認するために「==」を使用する必要があることです。一方、'==='は、オペランドのタイプだけでなく値もチェックします。
演算子を使用することもできます。この?:
演算子は、左側で真の値(数値の場合はゼロ以外)をチェックし、左側がfalseの場合にのみ右側を使用します。
$owner = $posted_on ?: ($shared_on ?: $by_id);
ただし、この場合、よりクリーンなコードを作成するには、ifステートメントを使用します。$owner
これは、例のように誤った条件で自分自身に再割り当てする必要がないためです。
シングル=
は値を割り当て、ダブル==
またはトリプル===
は2つの変数を評価します。
これを試して:
$owner = $posted_on;
$owner = $owner === 0 ? $shared_on : $owner;
$owner = $owner === '0' ? $by_id : $owner;
or
暗黙の型変換の動作を使用できます。
$a = 1; $b = 0; $c = 5;
$x = $a or $x = $b or $x = $c;
echo $x;
最短の方法は次のとおりです。
$owner = $posted_on ?: ($shared_on ?: $by_id);
短い三項演算子 は、 -ish(ゼロ以外の数値)の場合は左の引数に評価され、そうでない場合は右の引数に評価?:
されます。true
PHPでは三項演算子が結合性のままであるため、括弧が必要であることに注意してください。
ワンライナーを使用できます:
$owner = $posted_on == '0' ? ($shared_on == '0' ? $shared_on : $by_id) : $posted_on;
または、数値を扱う場合は、
$owner = $posted_on ?: ($shared_on ?: $by_id);