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中计算程序运行时间的类代码
Nov 03 PHP
php 伪静态之IIS篇
Jun 02 PHP
php实现的RSS生成类实例
Apr 23 PHP
php实现爬取和分析知乎用户数据
Jan 26 PHP
Joomla开启SEF的方法
May 04 PHP
PHP搭建大文件切割分块上传功能示例
Jan 04 PHP
yii2项目实战之restful api授权验证详解
May 20 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
Oct 17 PHP
PHP实现PDO操作mysql存储过程示例
Feb 13 PHP
Laravel框架实现调用百度翻译API功能示例
May 30 PHP
PHP创建XML接口示例
Jul 04 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 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中遇到的时区问题解决方法
2015/07/23 PHP
TP5.0框架实现无限极回复功能的方法分析
2019/05/04 PHP
js下弹出窗口的变通
2007/04/18 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
14个有用的Jquery技巧分享
2015/01/08 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
2016/01/12 Javascript
基于JS实现无缝滚动思路及代码分享
2016/06/07 Javascript
JS中with的替代方法与String中的正则方法详解
2016/12/23 Javascript
jquery做个日期选择适用于手机端示例
2017/01/10 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
2017/02/14 Javascript
从零学习node.js之利用express搭建简易论坛(七)
2017/02/25 Javascript
vue绑定事件后获取绑定事件中的this方法
2018/09/15 Javascript
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
[03:19]2016国际邀请赛中国区预选赛第四日TOP10镜头集锦
2016/07/01 DOTA
[53:23]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
详解Python中heapq模块的用法
2016/06/28 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
2018/10/11 Python
Scrapy使用的基本流程与实例讲解
2018/10/21 Python
python模块导入的细节详解
2018/12/10 Python
python列表每个元素同增同减和列表元素去空格的实例
2019/07/20 Python
python装饰器相当于函数的调用方式
2019/12/27 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
2020/05/19 Python
python3+openCV 获取图片中文本区域的最小外接矩形实例
2020/06/02 Python
浅析python中的del用法
2020/09/02 Python
巴西网上药房:onofre
2016/11/21 全球购物
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
追悼会上的答谢词
2014/01/10 职场文书
预备党员表决心书
2014/03/11 职场文书
入股协议书范本
2014/04/14 职场文书
2015年入党积极分子评语
2015/03/26 职场文书
python如何读取.mtx文件
2021/04/22 Python
Java9新特性对HTTP2协议支持与非阻塞HTTP API
2022/03/16 Java/Android