if($object_type == 'regular') {
if($u_login == $object_user || $u_access >= 3 || $object_access >= 4) {
echo '<p> </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> </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> </p>';
echo '<p><span class="r_button"><a href="/delete_link/'.$object_key.'?link_id=2">'.ex_lang('str_btn_delete').'</a></span></p>';
}
答案 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> </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> </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> </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> </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> </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> </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> </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
,因为所提供的条件本质上是相互排斥的。这可以使可读性更简单。