为了账号安全,请及时绑定邮箱和手机立即绑定

如何编写PHP三元运算符

如何编写PHP三元运算符

PHP
富国沪深 2019-08-08 17:02:51
如何编写PHP三元运算符如何使用elseif部分编写PHP三元运算符?我看到的基本实施例if和else类似这样的PHP三元运算符的部分:echo (true)  ? "yes" : "no";    //prints yesecho (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';  }?>
查看完整描述

3 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

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

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

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

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

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

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


查看完整回答
反对 回复 2019-08-08
?
达令说

TA贡献1821条经验 获得超6个赞

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

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


查看完整回答
反对 回复 2019-08-08
?
弑天下

TA贡献1818条经验 获得超8个赞

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


查看完整回答
反对 回复 2019-08-08
  • 3 回答
  • 0 关注
  • 333 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信