在C++、Java等很多语言中,都有一种神奇的语法,它就是goto。顾名思义,它的用途就是直接去某个地方。从代码来看,就是直接跳转到指定的地方。我们的PHP也有这个功能,来看看怎么用吧:gotoa;echo"1";//不会输出a:echo'2';//2当代码运行到goto位置时,会跳转到a:所在的代码行继续执行。感觉很好玩。这个函数对于复杂的嵌套if或跳出某些循环非常有用,特别是处理某些异常或错误情况,例如:for($i=0,$j=50;$i<100;$i++){while($j--){if($j==17){//假设$j==17是异常情况gotoend;//直接跳走,循环结束结果不输出}}}echo"i=$i";end:echo'jhit17';//这里直接输出或者处理异常感觉还不错,但是goto语法也有一些限制:目标位置只能位于同一个文件和作用域内,也就是说不能跳出一个函数或者类方法,也不能跳转到另一个函数。它不能跳入任何循环或开关结构。跳出一个循环或switch是一个常见的用法使用goto代替多层break。例如,以下代码是无效的:$a=1;gotoswitchgo;switch($a){case1:echo'bb';休息;案例2:echo'cc';切换:回声“bb”;break;}gotowhilego;while($a<10){$a++;whilego:echo$a;}//Fatalerror:'goto'toundefinedlabel'ifgo'他们都报同样的错误,定义的goto标签因为作用域无法找到。另外需要注意的是,使用goto可能会导致死循环,如下图:b:echo'b';gotob;当代码执行到goto的时候,又跳回了之前的b标签行,然后继续往下执行,然后gotogoto就变成了死循环。有点像while(true)。但是这个goto循环是没有break的,只能在goto中出去到其他地方。所以goto这个语法是很少用到的,因为它会打乱你代码的逻辑流程,但是喜欢它的人会觉得它可以让代码非常灵活多变。这就需要仁者以仁智取舍。目前大多数语言的文档中都不太提倡使用这种语法,包括PHP。我的建议是,如果不是很特殊的情况或者为了炫技,尽量不要使用goto语法。当项目代码变得复杂时,很容易让别人或自己感到困惑。测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/201911/goto%E8%AF%AD%E6%B3%95%E5%9C%A8PHP%E4%B8%AD%E7%9A%84%E4%BD%BF%E7%94%A8.md参考文档:https://www.php.net/manual/zh/control-structures.goto.php所有媒体平台均可搜索【硬核项目经理】
