PHP:有人可以为我简化这个IF语句吗?

时间:2017-10-05 01:31:24

标签: php

if($object_type == 'regular') {
    if($u_login == $object_user || $u_access >= 3 || $object_access >= 4) {
        echo '<p>&nbsp;</p>';
        echo '<p><span class="r_button"><a href="/delete_link/'.$object_key.'?link_id=2">'.ex_lang('str_btn_delete').'</a></span></p>';
    }
} else
if($object_type == 'comment') {
    if($u_login == $object_user || $u_access >= 2 || $object_access >= 4) {
        echo '<p>&nbsp;</p>';
        echo '<p><span class="r_button"><a href="/delete_link/'.$object_key.'?link_id=2">'.ex_lang('str_btn_delete').'</a></span></p>';
    }
}

因此,如果对象是不同类型的用户需要具有差异访问级别。如何简化此声明,不要有重复内容?

我一般都忘记了if中的群组,谢谢你提醒我!

if($u_login == $object_user || $object_access >= 4 || ($object_type == 'regular' && $u_access >= 3) || ($object_type == 'comment' && $u_access >= 2)) {
    echo '<p>&nbsp;</p>';
    echo '<p><span class="r_button"><a href="/delete_link/'.$object_key.'?link_id=2">'.ex_lang('str_btn_delete').'</a></span></p>';
}

2 个答案:

答案 0 :(得分:2)

这两个条件都会检查$u_login == $object_user$object_access >= 4,只有$object_type$u_access不同。因此,您可以将这两项检查提升到一个级别,并在外部条件下检查$object_type$u_access >= 3

因此,语句可以像这样重写,缩小了一行代码:

if($u_login == $object_user || $object_access >= 4) {
    if($object_type == 'regular' && $u_access >= 3) {
        echo '<p>&nbsp;</p>';
        echo '<p><span class="r_button"><a href="/delete_link/'.$object_key.'?link_id=2">'.ex_lang('str_btn_delete').'</a></span></p>';
    }
    else if($object_type == 'comment' && $u_access >= 2) {
        echo '<p>&nbsp;</p>';
        echo '<p><span class="r_button"><a href="/delete_link/'.$object_key.'?link_id=2">'.ex_lang('str_btn_delete').'</a></span></p>';
    }
}

虽然根据您对“简化”的定义,您也可以通过使用一些括号来完全删除外部条件:

if(($u_login == $object_user || $object_access >= 4) && ($object_type == 'regular' && $u_access >= 3)) {
    echo '<p>&nbsp;</p>';
    echo '<p><span class="r_button"><a href="/delete_link/'.$object_key.'?link_id=2">'.ex_lang('str_btn_delete').'</a></span></p>';
}
else if(($u_login == $object_user || $object_access >= 4) && ($object_type == 'comment' && $u_access >= 2)) {
    echo '<p>&nbsp;</p>';
    echo '<p><span class="r_button"><a href="/delete_link/'.$object_key.'?link_id=2">'.ex_lang('str_btn_delete').'</a></span></p>';
}

然而,你的条件目前做同样的事情并不值得,所以代码甚至可以简化为:

echo '<p>&nbsp;</p>';
echo '<p><span class="r_button"><a href="/delete_link/'.$object_key.'?link_id=2">'.ex_lang('str_btn_delete').'</a></span></p>';

希望这有帮助! :)

答案 1 :(得分:1)

这可能不是请求帮助重构代码的最佳位置,但是到底是什么。请注意,您有两个完全相同的条件,并且如果条件都在两个条件下进行检查。为什么不把它们拉到根级呢?

if($u_login == $object_user || $object_access >= 4) {
    if($object_type == 'regular' && $u_access >= 3) {
        echo '<p>&nbsp;</p>';
        echo '<p><span class="r_button"><a href="/delete_link/'.$object_key.'?link_id=2">'.ex_lang('str_btn_delete').'</a></span></p>';
    }

    if($object_type == 'comment' && $u_access >= 2) {
        echo '<p>&nbsp;</p>';
        echo '<p><span class="r_button"><a href="/delete_link/'.$object_key.'?link_id=2">'.ex_lang('str_btn_delete').'</a></span></p>';
    }
}

请注意,我们在这里任何地方都不需要else,因为所提供的条件本质上是相互排斥的。这可以使可读性更简单。