PHP:有人可以简化此语句

  • 本文关键字:语句 PHP 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>';
    }
}

因此,如果对象是不同的类型,则用户需要具有DIFF访问级别。如何简化此语句,因为不用重复项?


我通常忘记了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>';
}

两种条件检查$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>';

希望这会有所帮助!:)

这可能不是寻求帮助重构代码的最佳场所,而是什么。请注意,您有两个完全相同的条件并在两种情况下都在检查。为什么不将其拉到根级呢?

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,因为所提供的条件本质上是相互排斥的。这可以使可读性变得更简单。

最新更新