Elseif部分でPHP三項演算子を書くにはどうすればよいですか?
次のようなPHP三項演算子のif
およびelse
部分の基本的な例を参照してください。
echo (true) ? "yes" : "no"; //prints yes
echo (false) ? "yes" : "no"; //prints no
このような「elseif」部分を三項演算子に取得するにはどうすればよいですか?
<?php
if($result->vocation == 1){
echo "Sorcerer";
}else if($result->vocation == 2){
echo 'Druid';
}else if($result->vocation == 3){
echo 'Paladin';
}else if($result->vocation == 4){
echo 'Knight';
}else if($result->vocation == 5){
echo 'Master Sorcerer';
}else if($result->vocation == 6){
echo 'Elder Druid';
}else if($result->vocation == 7){
echo 'Royal Paladin';
}else{
echo 'Elite Knight';
}
?>
Ternaryは、あなたが望むものに対する良い解決策ではありません。コードで読むことはできず、はるかに優れたソリューションが利用可能です。
次のように、配列ルックアップの「マップ」または「辞書」を使用しないのはなぜですか。
$vocations = array(
1 => "Sorcerer",
2 => "Druid",
3 => "Paladin",
...
);
echo $vocations[$result->vocation];
このアプリケーションの3要素は次のようになります。
echo($result->group_id == 1 ? "Player" : ($result->group_id == 2 ? "Gamemaster" : ($result->group_id == 3 ? "God" : "unknown")));
なぜこれが悪いのですか?なぜなら、1つの長い行として、ここで何かがうまくいかないと有効なデバッグ情報が得られないため、長さが読みにくくなり、さらに複数の3項の入れ子が奇妙に感じられるからです。
A Standard Ternaryはシンプルで読みやすく、次のようになります。
$value = ($condition) ? 'Truthy Value' : 'Falsey Value';
または
echo ($some_condition) ? 'The condition is true!' : 'The condition is false.';
3項は、実際には単純なif else
ステートメントを書くための便利で短い方法です。上記のサンプルの3項は次と同じです。
if ($some_condition) {
echo 'The condition is true!';
} else {
echo 'The condition is false!';
}
ただし、複雑なロジックの3項はすぐに判読できなくなり、簡潔にする価値はなくなります。
echo($result->group_id == 1 ? "Player" : ($result->group_id == 2 ? "Gamemaster" : ($result->group_id == 3 ? "God" : "unknown")));
それを複数の行に広げるための注意深いフォーマットを使用しても、あまり明確ではありません:
echo($result->group_id == 1
? "Player"
: ($result->group_id == 2
? "Gamemaster"
: ($result->group_id == 3
? "God"
: "unknown")));
これは一般的なタスクであるため、関数呼び出し内でスイッチ/ケースをラップすることをお勧めします。
function getVocationName($vocation){
switch($vocation){
case 1: return "Sorcerer"; break;
case 2: return 'Druid'; break;
case 3: return 'Paladin'; break;
case 4: return 'Knight'; break;
case 5: return 'Master Sorcerer'; break;
case 6: return 'Elder Druid'; break;
case 7: return 'Royal Paladin'; break;
default: return 'Elite Knight'; break;
}
}
echo getVocationName($result->vocation);
echo ($result ->vocation == 1) ? 'Sorcerer'
: ($result->vocation == 2) ? 'Druid'
: ($result->vocation == 3) ? 'Paladin'
....
;
ちょっといです。通常のif
ステートメントに固執する必要があります。
基本的なPHP三項演算子の書き方:
($your_boolean) ? 'This is returned if true' : 'This is returned if false';
例:
$myboolean = true;
echo ($myboolean) ? 'foobar' : "penguin";
foobar
echo (!$myboolean) ? 'foobar' : "penguin";
penguin
A PHP _elseif 'が詰め込まれた三項演算子:
$chow = 3;
echo ($chow == 1) ? "one" : ($chow == 2) ? "two" : "three";
three
しかし、パーラーのトリックを除いて、三項演算子を入れ子にしないでください。それは悪いコード臭です。
面倒くさくて読みにくいです。
最初のケースでswitch
ステートメントを探しています。 2つ目はそのままでも問題ありませんが、一貫性を保つために変換できます
三項ステートメントは、ブール値と代替ロジックにより適しています。
正直に言うと、三項演算子はこれをさらに悪化させるだけであり、それをより単純にすることがあなたが目指しているものであるなら、私は提案するでしょう:
$groups = array(1=>"Player", 2=>"Gamemaster", 3=>"God");
echo($groups[$result->group_id]);
そして、あなたの職業のための同様のもの
$vocations = array(
1=>"Sorcerer",
2=>"Druid",
3=>"Paladin",
4=>"Knight",
....
);
echo($vocations[$result->vocation]);
三項演算子を使用すると、次のようになります
echo($result->group_id == 1 ? "Player" : ($result->group_id == 2 ? "Gamemaster" : ($result->group_id == 3 ? "God" : "unknown")));
あなたが言うことができるように、それはあなたがそれに追加するほどより複雑になります
私は三項のif文ではなくスイッチケースを使いたいです。例えば:
switch($result->vocation){
case 1:
echo "Sorcerer";
break;
case 2:
echo "Druid";
break;
case 3:
echo "Paladin";
break;
case 4:
echo "Knight";
break;
case 5:
echo "Master Sorcerer";
break;
case 6:
echo "Elder Druid";
break;
case 7:
echo "Royal Paladin";
break;
default:
echo "Elite Knight";
break;
}
他のすべての回答に加えて、switch
を使用できます。しかし、それは少し長いように見えます。
switch ($result->vocation) {
case 1:
echo 'Sorcerer';
break;
case 2:
echo 'Druid';
break;
case 3:
echo 'Paladin';
break;
case 4:
echo 'Knight';
break;
case 5:
echo 'Master Sorcerer';
break;
case 6:
echo 'Elder Druid';
break;
case 7:
echo 'Royal Paladin';
break;
default:
echo 'Elite Knight';
break;
}
次のこともできます。
echo "yes" ?: "no" // Assuming that yes is a variable that can be false.
の代わりに:
echo (true) ? "yes" : "no";