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 相关文章推荐
如何在PHP中使用Oracle数据库(1)
Oct 09 PHP
PHP VS ASP
Oct 09 PHP
php 面试碰到过的问题 在此做下记录
Jun 09 PHP
对象失去焦点时自己动提交数据的实现代码
Nov 06 PHP
PHP重定向的3种方式
Mar 07 PHP
解析PHP生成静态html文件的三种方法
Jun 18 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
Jun 18 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
Aug 31 PHP
Zend Framework教程之Zend_Layout布局助手详解
Mar 04 PHP
PHP入门教程之数学运算技巧总结
Sep 11 PHP
PHP 信号管理知识整理汇总
Feb 19 PHP
PHP异常处理定义与使用方法分析
Jul 25 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 fckeditor 调用的函数
2009/06/21 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
php中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
jquery中获得$.ajax()事件返回的值并添加事件的方法
2010/04/15 Javascript
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
浏览器兼容性问题大汇总
2015/12/17 Javascript
javascript DIV实现跟随鼠标移动
2020/03/19 Javascript
Bootstrap栅格系统学习笔记
2016/11/25 Javascript
js 判断数据类型的几种方法
2017/01/13 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
vue v-on监听事件详解
2017/05/17 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
JavaScript基础教程之如何实现一个简单的promise
2018/09/11 Javascript
vue项目刷新当前页面的三种方法
2018/12/04 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
Vue过滤器,生命周期函数和vue-resource简单介绍
2021/01/12 Vue.js
[58:09]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第三场 6.2
2018/06/03 DOTA
python实现简易通讯录修改版
2018/03/13 Python
Anaconda入门使用总结
2018/04/05 Python
python接口自动化(十六)--参数关联接口后传(详解)
2019/04/16 Python
pyQt5实时刷新界面的示例
2019/06/25 Python
Python Django简单实现session登录注销过程详解
2019/08/06 Python
如何定义TensorFlow输入节点
2020/01/23 Python
Python pysnmp使用方法及代码实例
2020/08/24 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
2021/02/19 Python
Nike俄罗斯官方网站:Nike RU
2021/03/05 全球购物
Python中pass语句的作用是什么
2016/06/01 面试题
学生实习推荐信范文
2013/11/26 职场文书
反四风个人对照检查材料思想汇报
2014/09/25 职场文书
搞笑的爱情检讨书
2014/10/01 职场文书
群众路线自查报告及整改措施
2014/11/04 职场文书
财产分割协议书
2016/03/22 职场文书
Python中常见的导入方式总结
2021/05/06 Python
为什么MySQL不建议使用SELECT *
2022/04/03 MySQL