利用 goto 来防止 if 嵌套

流程控制中的 if 是比较简单的逻辑判断,但是在多条逻辑判断中很容易造成 if 嵌套,逻辑复杂度较高,让人感到十分混乱。

万恶的 if 嵌套

<?php
$a = array(
    'state' => '1',
    'notice' => '注册成功!',
);

if ($_GET['username'] != '') {
    if (strlen($_GET['username']) > 4 or !strlen($_GET['username']) < 11) {
        $name = array('root','admin','GETmaster','master','webmaster','mixcm','administrator','sb','shabi');
        if (!in_array($_GET['username'], $name)) {
            if (preg_match("/^[a-zA-Z\s]+$/", $_GET['username'])) {
                $a['state'] = '0';
                $a['notice'] = '用户名必须为英文!';
            }
        } else {
            $a['state'] = '0';
            $a['notice'] = '非法用户名!';
        }
    } else {
        $a['state'] = '0';
        $a['notice'] = '请输入大于4字符,且小于11个字符的用户名!';
    }

} else {
    $a['state'] = '0';
    $a['notice'] = '用户名不能为空!';
}

echo json_encode($a,JSON_UNESCAPED_UNICODE);

于是在实际操作中就会想方设法避免以上格式。便有了 goto 和 表数据。

  • 逻辑清晰
  • 后期修改容易
  • 但需要防止 goto 滥用,建议只定义一个,列如本例就只定义了 end

利用 goto 解决(以下代码中有使用到表数据)

<?php
$a = array(
    'state' => '1',
    'notice' => '注册成功!',
);

if ($_GET['username'] == '') {
    $a['state'] = '0';
    $a['notice'] = '用户名不能为空!';
    goto end;
}

if (strlen($_GET['username']) < 4 or strlen($_GET['username']) > 11) {
    $a['state'] = '0';
    $a['notice'] = '请输入大于4字符,且小于11个字符的用户名!';
    goto end;
}

$name = array('root','admin','GETmaster','master','webmaster','mixcm','administrator','sb','shabi');
if (in_array($_GET['username'], $name)) {
    $a['state'] = '0';
    $a['notice'] = '非法用户名!';
    goto end;
}

if (!preg_match("/^[a-zA-Z\s]+$/", $_GET['username'])) {
    $a['state'] = '0';
    $a['notice'] = '用户名必须为英文!';
    goto end;
}

end:
echo json_encode($a,JSON_UNESCAPED_UNICODE);

1 评论

  1. ohmyga

    12月

    2日

    Windows 10 Chrome 回复
    学习了
近期评论
折影轻梦: 以下这段话是给无名氏朋友。 我用老头子的想法反复思索了你特地寄来一张白纸的理由。因为我觉得这一定是件很重要的事,不能随随便便地答复。我开动快要糊涂的脑筋想了又想,最后理解为,这代表没有地图。 如果把来找我咨询的人比喻成迷途的羔羊,通常他们手上都有地图,却没有去看,或是不知道自己目前的位置。 但我相信你不属于这两种情况。你的地图是一张白纸,所以即使想决定目的地,也不知道路在哪里。 地图是一张白纸,这当然很伤脑筋。任何人都会不知所措。 可是换个角度来看,正因为是一张白纸,才可以随心所欲地描绘地图。一切全在你自己。对你来说,一切都是自由的,在你面前是无限的可能。这可是很棒的事啊。我衷心祈祷你可以相信自己,无悔地燃烧自己的人生。 我以后应该不会再回答烦恼咨询了。感谢你在最后问了一个很有价值的难题。 浪矢杂货店 折影轻梦: 时间不多了 楠猫: 2.0不能显示。。。1.4有垃圾评论。。。 qwqaq: dalao~ 名称:QWQAQ 简介:生命不止,折腾不息 ( ゜- ゜) 地址:https://qwqaq.com/ 头像:https://qwqaq.com/images/avatar.png quq 折影轻梦: 世界如此不真实,我也如此。 折影轻梦: 只好自救。 折影轻梦: 想要海贼王里那样的伙伴。 折影轻梦: 正常 折影轻梦: git push -u origin master -u 可以更换 branch 对应的 origin 折影轻梦: json_decode(trim($param, chr(239) . chr(187) . chr(191)), true); 去除 BOM 头
文章归档
标签云
赞助二维码

支付宝

微信支付

评论表情