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 相关文章推荐
我的论坛源代码(二)
Oct 09 PHP
PHP zlib扩展实现页面GZIP压缩输出
Jun 17 PHP
PHP中对用户身份认证实现两种方法
Jun 04 PHP
php中如何同时使用session和cookie来保存用户登录信息
Jul 05 PHP
使用swoole扩展php websocket示例
Feb 13 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
Apr 10 PHP
PHP中提问频率最高的11个面试题和答案
Sep 02 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
Oct 17 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Dec 14 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
PHP创建XML接口示例
Jul 04 PHP
PHP批斗大会之缺失的异常详解
Jul 09 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 mysql_query执行超时(Fatal error: Maximum execution time …)
2013/07/03 PHP
又一个PHP实现的冒泡排序算法分享
2014/08/21 PHP
php操作access数据库的方法详解
2017/02/22 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
2017/08/11 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
js判断字符是否是汉字的两种方法小结
2014/01/03 Javascript
用jquery实现的一个超级简单的下拉菜单
2014/05/18 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
2016/05/31 Javascript
JavaScript制作弹出层效果
2016/12/02 Javascript
js处理层级数据结构的方法小结
2017/01/17 Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
2019/02/02 Javascript
使用 Element UI Table 的 slot-scope方法
2019/10/10 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
Electron整合React使用搭建开发环境的步骤详解
2020/06/07 Javascript
python中的代码编码格式转换问题
2015/06/10 Python
python数组过滤实现方法
2015/07/27 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
2017/11/21 Python
python模仿网页版微信发送消息功能
2018/02/24 Python
python 用 xlwings 库 生成图表的操作方法
2019/12/22 Python
python 安装impala包步骤
2020/03/28 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
新西兰床上用品和家居用品购物网站:Adairs
2018/04/27 全球购物
客服工作职责
2013/12/11 职场文书
中国文明网签名寄语
2014/01/18 职场文书
铁路个人事迹材料
2014/01/30 职场文书
县优秀教师事迹材料
2014/01/31 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
2014年教务处工作总结
2014/12/03 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
人事部:年度述职报告范文
2019/07/12 职场文书
Redis延迟队列和分布式延迟队列的简答实现
2021/05/13 Redis
使用javascript解析二维码的三种方式
2021/11/11 Javascript