如何编写一个PHP三元运算符
如何用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'; } ?>
三元对于你想要的不是很好的解决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; }