PHPの三項演算子の書き方 [重複] 質問する

PHPの三項演算子の書き方 [重複] 質問する

elseif 部分を含む PHP 三項演算子はどのように記述すればよいですか?

ifPHP 三項演算子のandelse部分を使用した基本的な例を次に示します。

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';
  }
?>

ベストアンサー1

Ternary は、あなたが望むものに対しては良い解決策ではありません。コード内では読みにくく、もっと良い解決策が存在します。

次のように、配列検索の「マップ」または「辞書」を使用しないのはなぜでしょうか。

$vocations = array(
    1 => "Sorcerer",
    2 => "Druid",
    3 => "Paladin",
    ...
);

echo $vocations[$result->vocation];

このアプリケーションの三項演算子は次のようになります。

echo($result->group_id == 1 ? "Player" : ($result->group_id == 2 ? "Gamemaster" : ($result->group_id == 3 ? "God" : "unknown")));

なぜこれが悪いのでしょうか? なぜなら、1 行が長いため、ここで何か問題が発生した場合に有効なデバッグ情報が得られず、長さが読みにくく、さらに複数の 3 項演算子のネストが奇妙に感じられるからです。

標準的な三元法シンプルで読みやすく、次のようになります。

$value = ($condition) ? 'Truthy Value' : 'Falsey Value';

または

echo ($some_condition) ? 'The condition is true!' : 'The condition is false.';

三項演算子は、単純な文を書くための便利で短い方法ですif else。上記の三項演算子のサンプルは、次のものと同じです。

if ($some_condition) {
    echo 'The condition is true!';
} else {
    echo 'The condition is false!';
}

ただし、複雑なロジックの三項演算子はすぐに読みにくくなり、簡潔さの価値がなくなります。

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")));

おすすめ記事