如何编写PHP三元运算符

dyn*_*tem 59 php ternary-operator

如何使用elseif部分编写PHP三元运算符?

我看到的基本实施例ifelse类似这样的PHP三元运算符的部分:

echo (true)  ? "yes" : "no";    //prints yes
echo (false) ? "yes" : "no";    //prints no
Run Code Online (Sandbox Code Playgroud)

如何将这样的"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';
  }
?>
Run Code Online (Sandbox Code Playgroud)

ran*_*ame 109

三元不是你想要的好解决方案.它在您的代码中是不可读的,并且有更好的解决方案可用.

为什么不使用数组查找"map"或"dictionary",如下所示:

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

echo $vocations[$result->vocation];
Run Code Online (Sandbox Code Playgroud)

这个应用程序的三元组最终看起来像这样:

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

为什么这么糟糕?因为 - 作为单个长行,如果出现问题,你将得不到有效的调试信息,长度使得难以阅读,加上多个三元组的嵌套只是感觉很奇怪.

标准三元版本简单易读,看起来像这样:

$value = ($condition) ? 'Truthy Value' : 'Falsey Value';
Run Code Online (Sandbox Code Playgroud)

要么

echo ($some_condition) ? 'The condition is true!' : 'The condition is false.';
Run Code Online (Sandbox Code Playgroud)

三元组实际上只是编写简单if else语句的一种方便/简短的方法.以上样本三元与以下相同:

if ($some_condition) {
    echo 'The condition is true!';
} else {
    echo 'The condition is false!';
}
Run Code Online (Sandbox Code Playgroud)

然而,复杂逻辑的三元组很快变得难以理解,不再值得简洁.

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

即使有一些细心的格式将其分散到多行,也不是很清楚:

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


Ora*_*ill 11

由于这是一项常见任务,我建议在函数调用中包装一个开关/案例.

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);
Run Code Online (Sandbox Code Playgroud)

  • 当你使用`return`时,`break`是多余的. (24认同)

the*_*cat 7

echo ($result ->vocation == 1) ? 'Sorcerer'
        : ($result->vocation == 2) ? 'Druid'
           :  ($result->vocation == 3) ? 'Paladin'
                    ....

;
Run Code Online (Sandbox Code Playgroud)

这有点难看.你应该坚持正常的if陈述.

  • 你可以在第一个箭头之前删除那个空格吗?无法编辑少于6个字符. (2认同)

mad*_*ero 5

我宁愿三元 if 语句与 switch-case 一起使用。例如:

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;
}
Run Code Online (Sandbox Code Playgroud)


Eri*_*ski 5

如何编写基本的PHP三元运算符:

($your_boolean) ? 'This is returned if true' : 'This is returned if false';
Run Code Online (Sandbox Code Playgroud)

例:

$myboolean = true;
echo ($myboolean) ? 'foobar' : "penguin";
foobar

echo (!$myboolean) ? 'foobar' : "penguin";
penguin
Run Code Online (Sandbox Code Playgroud)

一个PHP三元运算符,其中包含'elseif':

$chow = 3;
echo ($chow == 1) ? "one" : ($chow == 2) ? "two" : "three";
three
Run Code Online (Sandbox Code Playgroud)

但是除了客厅技巧之外,请不要嵌套三元运算符.这是一个糟糕的代码味道.