【web 开发基础】PHP 中的 goto 语句的使用 -PHP 快速入门 (23)
前言
在所有的开发语言中不是都能使用 goto 语句,因为对 goto 的应用一直有争议。很多编程 goto 也只是作为保留关键字,比如 java。支持 goto 的人认为 goto 语句使用起来比较灵活,而且有些情形能提高程序的效率。如果完全删去 goto 语句,有些情形反而会使程序变得过于复杂,增加一些不必要的计算量。持反对意见的人认为,goto 语句是程序的静态结构和动态结构不一致,从而使程序难以理解、难以查错。去掉 goto 语句后,可直接从从程序上反映程序运行的过程,程序结构清晰、便于理解、方便查错。其实错误是程序员自己造成的,只是从实际的理解和处理上的不便造成,不是 goto 的过错。PHP 从 5.3 以后的版本增加了 goto 语句,有些方面选择使用 goto 语句是有优势的。比如:从多重循环中直接跳出、出错时清除资源,有些情况也可以增加程序的清晰度。如下面的例子:使用 goto 语句编写循环的代码
通过 goto 跳转到指定的标记
执行结果:
题外话:goto 虽然有诸多好处,但是开发中还是很少会去使用它,因为我们习惯性不去使用它,还有人因为听到别人说,使用 goto 语句会导 xxx 问题,望而生畏,所以不敢尝试去使用它。其实最大的问题主要还是很多人没有理解和掌握它,无法很好的处理它。不过放弃它也并没有影响我们的开发,但是无论是否使用,学习还是学习,说不定哪天会用到。
goto 语句
goto 关键字后面带上目标位置的标志,在目标位置上用目标名加冒号标记。比如在第五行声明一个目标位置(自定义目标名称),在第 11 行使用 goto 语句跳转到第 5 行的目标位置,再执行到第 11 行又跳转到第 5 行形成循环。在循环中不能使用 break 退出,而是再次使用 goto 语句,跳到循环外的目标位置处结束循环。非 goto 的循环如果有多层循环,需要从多层循环中直接跳出,goto 语句也是最好的选择。
执行结果:
除了使用 goto 语句编写循环,比较常用的是通过 goto 语句实现程序跳转:
执行结果:
另外 PHP 中的 goto 语句使用时也有一定限制,只能在同一个文件和作用域中跳转,也就是说无法跳出一个函数或类方法,也无法跳入另一个函数,更无法跳入任何循环或者 switch 结构中。goto 语句常见的用法是跳出循环或者 switch 语句,可以代替多层的 break。来个反面教材:goto 语句的一种错误用法代码如下:
版权声明: 本文为 InfoQ 作者【迷彩】的原创文章。
原文链接:【http://xie.infoq.cn/article/d99ff73934625e84f6593203e】。文章转载请联系作者。
评论