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 相关文章推荐
在WAMP环境下搭建ZendDebugger php调试工具的方法
Jul 18 PHP
解析Linux下Varnish缓存的配置优化
Jun 20 PHP
解析php中获取url与物理路径的总结
Jun 21 PHP
php实现httpclient类示例
Apr 08 PHP
PHP实现的多彩标签效果代码分享
Aug 21 PHP
支付宝接口开发集成支付环境小结
Mar 17 PHP
php将12小时制转换成24小时制的方法
Mar 31 PHP
PHP版本如何选择?应该使用哪个版本?
May 13 PHP
php实现只保留mysql中最新1000条记录
Jun 18 PHP
php 生成签名及验证签名详解
Oct 26 PHP
PHP将整数数字转换为罗马数字实例分享
Mar 17 PHP
Laravel框架模型的创建及模型对数据操作示例
May 07 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判断正常访问和外部访问的示例
2014/02/10 PHP
如何让CI框架支持service层
2014/10/29 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
Mootools 1.2教程(3) 数组使用简介
2009/09/14 Javascript
zShowBox 图片放大展示jquery版 兼容性
2011/09/24 Javascript
一个简单的js树形菜单
2011/12/09 Javascript
JS上传图片前的限制包括(jpg jpg gif及大小高宽)等
2012/12/19 Javascript
js加强的经典分页实例
2013/03/15 Javascript
jQuery之选择组件的深入解析
2013/06/19 Javascript
js导航栏单击事件背景变换示例代码
2014/01/13 Javascript
详解vue组件化开发-vuex状态管理库
2017/04/10 Javascript
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
JavaScript定义函数的三种实现方法
2017/09/23 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
2017/09/28 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
vue.js中实现登录控制的方法示例
2018/04/23 Javascript
uni-app 组件里面获取元素宽高的实现
2019/12/27 Javascript
vue中的过滤器及其时间格式化问题
2020/04/09 Javascript
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
Python字符串的全排列算法实例详解
2019/01/07 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
2020/06/15 Python
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
德国最大的拼图在线商店:Puzzle.de
2016/12/17 全球购物
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
巴基斯坦购物网站:Goto
2019/03/11 全球购物
在阿尔卑斯山或希腊度过快乐假期:Alpine Elements
2019/12/28 全球购物
介绍一下linux的文件系统
2012/03/20 面试题
企业文化宣传标语
2014/06/09 职场文书
幼儿园母亲节活动总结
2015/02/10 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
2015年教学副校长工作总结
2015/07/22 职场文书
公司食堂管理制度
2015/08/05 职场文书
文明礼仪主题班会
2015/08/13 职场文书
JavaScript 与 TypeScript之间的联系
2021/11/27 Javascript