首页 > 解决方案 > 去掉`goto`语句后如何排序,让大家更容易理解?

问题描述

公司之前项目的维护,写项目的人员已经离开,现在需要维护,但是现在项目使用了很多'goto',想知道怎么读。去掉'goto'语句后如何排序,让人更容易理解。简而言之,我想把左边乱七八糟的代码格式化成图片右边的样子 如何将左侧凌乱的代码格式化为图片中的右侧

//**this code
defined('IN_IA') or exit('Access Denied');
class Md_daojiaModuleSite extends WeModuleSite
{
    public function doPageUploadmap3()
    {
        goto A25dm;
        ADcuT:
        ZLMND:
        goto wJ44l;
        z_M2Z:
        if (empty($_FILES["file"]["tmp_name"])) {
            goto ZLMND;
        }
        goto RnW8Z;
        M61ng:
        $tempfile = ATTACHMENT_ROOT . "/audios/" . $name;
        goto ReGaV;
        A25dm:
        global $_GPC, $_W;
        goto z_M2Z;
        RnW8Z:
        $exname = strtolower(substr($_FILES["file"]["name"], strrpos($_FILES["file"]["name"], ".") + 1));
        goto BO3TT;
        wJ44l:
        return $this->result(0, '', "attachment/audios/" . $name);
        goto Qx8PP;
        BO3TT:
        $name = md5(time()) . "." . $exname;
        goto M61ng;
        ReGaV:
        move_uploaded_file($_FILES["file"]["tmp_name"], $tempfile);
        goto ADcuT;
        Qx8PP:
    }
}

标签: phpgoto

解决方案


你基本上只是重现解释器会做什么:

  1. 从上到下,查看每个goto语句。

    goto A25dm;
    …
    
  2. 将相应的跳转标记和代码部分直接放在其后面。

    A25dm:                       # ← MARKER: starts section
    global $_GPC, $_W;
    goto z_M2Z;                  # ← next goto ends it
    
  3. 所以你最终得到:

    //goto A25dm;                # → no longer needed
    A25dm:                       
    global $_GPC, $_W;
    goto z_M2Z;                  # → proceed with step 1
    

将 后面的每个marker:权利关联后goto,只需将其删除或注释掉即可。


推荐阅读