如何编写一个PHP三元运算符

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

我看到了像这样的PHP三元运算符的ifelse部分的基本示例:

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

三元对于你想要的不是很好的解决scheme。 它不会在你的代码中可读,还有更好的解决scheme。

为什么不使用数组查找“地图”或“字典”,如下所示:

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

为什么这不好? 因为 – 作为一个单一的长线,如果在这里出了问题,你将得不到有效的debugging信息,长度使得难以阅读,再加上多个三元组的嵌套感觉很奇怪。

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

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

由于这将是一个常见的任务,我会build议包装一个开关/情况下的函数调用。

 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语句。

说实话,一个三元运算符只会使这个更糟糕,如果简单一些,我会build议你的目标是:

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

正如你所知道的那样,只要你添加的越多,就越复杂

我宁愿不用三元论,如果 – 陈述去与开关案件。 例如:

 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语句。 第二个是好的,但仍然可以转换为一致性

三元语句更适合布尔值和交替逻辑。

如何编写一个基本的PHP Ternary操作符:

 ($your_boolean) ? 'This is returned if true' : 'This is returned if false'; 

例:

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

一个带有“elseif”的PHP三元运算符,

 $chow = 3; echo ($chow == 1) ? "one" : ($chow == 2) ? "two" : "three"; three 

但请不要嵌套三元经营者,除了客厅的招数。 这是一个不好的代码味道。

除了所有其他的答案,你可以使用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; }