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 魔术函数使用说明
May 14 PHP
基于PHP CURL用法的深入分析
Jun 09 PHP
php 验证码(倾斜,正弦干扰线,黏贴,旋转)
Jun 29 PHP
php生成短网址示例
May 05 PHP
php约瑟夫问题解决关于处死犯人的算法
Mar 23 PHP
php header函数的常用http头设置
Jun 25 PHP
PHP对象克隆clone用法示例
Sep 28 PHP
Yii2框架BootStrap样式的深入理解
Nov 07 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
PHP中单例模式的使用场景与使用方法讲解
Mar 18 PHP
php面向对象程序设计中self与static的区别分析
May 21 PHP
laravel 解决Validator使用中出现的问题
Oct 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
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
PHP+MySQL 制作简单的留言本
2009/11/02 PHP
利用PHP实现图片等比例放大和缩小的方法详解
2013/06/06 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
2013/06/21 PHP
php 如何获取数组第一个值
2013/08/06 PHP
Linux下安装oracle客户端并配置php5.3
2014/10/12 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
Node.js插件安装图文教程
2016/05/06 Javascript
浅析 NodeJs 的几种文件路径
2017/06/07 NodeJs
javaScript日期工具类DateUtils详解
2017/12/08 Javascript
基于Vue实现电商SKU组合算法问题
2019/05/29 Javascript
[00:32]2018DOTA2亚洲邀请赛iG出场
2018/04/03 DOTA
Python实现截屏的函数
2015/07/25 Python
浅析Git版本控制器使用
2017/12/10 Python
django 修改server端口号的方法
2018/05/14 Python
python3将视频流保存为本地视频文件
2018/06/20 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
基于python实现从尾到头打印链表
2019/11/02 Python
tensorboard显示空白的解决
2020/02/15 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
Django admin组件的使用
2020/10/24 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
遇到的Mysql的面试题
2014/06/29 面试题
日期和时间问题
2015/01/04 面试题
房地产销售大学生自我评价分享
2013/11/11 职场文书
导游个人求职信
2014/04/25 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
人身损害赔偿协议书格式
2014/11/01 职场文书
测量员岗位职责
2015/02/14 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
西游记读书笔记
2015/06/25 职场文书
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL