goto语法在PHP中的使用教程


Posted in PHP onSeptember 17, 2020

前言

在C++、Java及很多语言中,都存在着一个神奇的语法,就是goto。顾名思义,它的使用是直接去到某个地方。从代码的角度来说,也就是直接跳转到指定的地方。PHP中也有这个功能,我们先来看看它是如何使用的:

代码运行到 goto 位置时,就跳转到了 a: 所在的代码行并继续执行下去。这个功能对于复杂的嵌套 if 或者在一些循环中进行跳出很有用,特别是针对某些异常或者错误情况的处理,比如:

for ($i = 0, $j = 50; $i < 100; $i++) {
 while ($j--) {
  if ($j == 17) { // 假设$j==17是一种异常情况
   goto end; // 直接跳走了,循环结束的结果也不输出了
  }

 }
}
echo "i = $i";
end:
echo 'j hit 17'; // 直接到这里输出或者处理异常情况了

不过 goto 语法也有一些限制情况:

  • 目标位置只能位于同一个文件和作用域,也就是说无法跳出一个函数或类方法,也无法跳入到另一个函数
  • 无法跳入到任何循环或者 switch 结构中
  • 跳出循环或者 switch,通常的用法是用 goto 代替多层的 break

比如以下的代码都是无效的:

$a = 1;
goto switchgo;
switch ($a){
 case 1:
  echo 'bb';
 break;
 case 2:
  echo 'cc';
  switchgo:
   echo "bb";
 break;
}

goto whilego;
while($a < 10){
 $a++;
 whilego:
  echo $a;
}

它们都会报同样的错误,因为作用域的关系无法找到定义的 goto 标签。另外还需要注意的,使用goto可能什么引起死循环,如下所示:

b:
 echo 'b';

goto b;

代码执行到 goto 时,跳回了之前的b标签行,然后继续向下执行,又到 goto 了,成为了一个死循环。有点像 while(true) 的感觉了。但是,在这个 goto 循环里是没有 break 的,只能在 goto 出去到别的地方。

注意:goto 操作符仅在 PHP 5.3及以上版本有效。

参考:https://www.php.net/manual/zh/control-structures.goto.php

总结

到此这篇关于goto语法在PHP中使用教程的文章就介绍到这了,更多相关goto语法在PHP的使用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
Optimizer与Debugger兼容性问题的解决方法
Dec 01 PHP
php设计模式 Observer(观察者模式)
Jun 26 PHP
使用session判断用户登录用户权限(超简单)
Jun 08 PHP
IIS6.0中配置php服务全过程解析
Aug 07 PHP
php实现事件监听与触发的方法
Nov 21 PHP
使用php实现网站验证码功能【推荐】
Feb 09 PHP
详谈php ip2long 出现负数的原因及解决方法
Apr 05 PHP
PHP基于SimpleXML生成和解析xml的方法示例
Jul 17 PHP
PHP接口继承及接口多继承原理与实现方法详解
Oct 18 PHP
Laravel 加载第三方类库的方法
Apr 20 PHP
PHP+redis实现的购物车单例类示例
Feb 02 PHP
PHP中Static(静态)关键字功能与用法实例分析
Apr 05 PHP
详解使用php-cs-fixer格式化代码
Sep 16 #PHP
PHP 图片处理
Sep 16 #PHP
laravel入门知识点整理
Sep 15 #PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
Sep 15 #PHP
PhpStorm+xdebug+postman调试技巧分享
Sep 15 #PHP
laravel中Redis队列监听中断的分析
Sep 14 #PHP
PHP实现限制域名访问的实现代码(本地验证)
Sep 13 #PHP
You might like
php+Memcached实现简单留言板功能示例
2017/02/15 PHP
php输出控制函数和输出函数生成静态页面
2019/06/27 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
用JQuery 实现AJAX加载XML并解析的脚本
2009/07/25 Javascript
dojo学习第一天 Tab选项卡 实现
2011/08/28 Javascript
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
详解vue-cli@2.x项目迁移日志
2019/06/06 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
python去掉字符串中重复字符的方法
2014/02/27 Python
Python中的作用域规则详解
2015/01/30 Python
Python线程的两种编程方式
2015/04/14 Python
在Python中处理字符串之isdecimal()方法的使用
2015/05/20 Python
OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
2018/01/05 Python
Python浅复制中对象生存周期实例分析
2018/04/02 Python
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
如何在Cloud Studio上执行Python代码?
2019/08/09 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
python解析命令行参数的三种方法详解
2019/11/29 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
Django微信小程序后台开发教程的实现
2020/06/03 Python
django rest framework 过滤时间操作
2020/07/12 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
美国购买汽车零件网站:Buy Auto Parts
2018/04/02 全球购物
商务日语毕业生自荐信
2013/11/23 职场文书
毕业生大学生活自我总结
2014/01/31 职场文书
参赛口号
2014/06/16 职场文书
应届毕业生求职信范文
2015/03/19 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python
Docker与K8s关系介绍不会Docker也可以使用K8s
2022/06/25 Servers