php - 去掉`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:
}
}
解决方案
你基本上只是重现解释器会做什么:
从上到下,查看每个
goto
语句。goto A25dm; …
将相应的跳转标记和代码部分直接放在其后面。
A25dm: # ← MARKER: starts section global $_GPC, $_W; goto z_M2Z; # ← next goto ends it
所以你最终得到:
//goto A25dm; # → no longer needed A25dm: global $_GPC, $_W; goto z_M2Z; # → proceed with step 1
将 后面的每个marker:
权利关联后goto
,只需将其删除或注释掉即可。
推荐阅读
- aws-kms - 如何从数据块中的 AWS Key Management Service 访问键值
- mysql - mysql返回最大n个具有相同值的行
- javascript - 获取具有特定类的所有元素,除了特定的父母
- java - 如何在命令提示符下运行spring boot jar时解决异常“java.lang.IllegalArgumentException:name”但在eclipse中运行时很好
- windows - ID3D11DeviceChild::SetPrivateDataInterface 的用法是什么?
- wso2 - WSO2 API Manager 中的 JSON 和 XML 威胁防护不起作用
- php - 返回 PHP 多维数组值
- oracle - 得到错误 ORA-01722: 测试功能时数字无效
- sql - 在 Wordpress 中提供来自子域的图像
- vba - 在表的列中查找更多值