【web 开发基础】PHP 中的goto语句的使用 -PHP 快速入门 (23)

简介: 在所有的开发语言中不是都能使用goto语句,因为对goto的应用一直有争议。很多编程goto也只是作为保留关键字,比如java。支持goto的人认为goto语句使用起来比较灵活,而且有些情形能提高程序的效率。如果完全删去goto语句,有些情形反而会使程序变得过于复杂,增加一些不必要的计算量。持反对意见的人认为,goto语句是程序的静态结构和动态结构不一致,从而使程序难以理解、难以查错。去掉goto语句后,可直接从从程序上反映程序运行的过程,程序结构清晰、便于理解、方便查错。其实错误是程序员自己造成的,只是从实际的理解和处理上的不便造成,不是goto的过错。PHP从5.3以后的版本增加了goto

前言

在所有的开发语言中不是都能使用goto语句,因为对goto的应用一直有争议。很多编程goto也只是作为保留关键字,比如java。支持goto的人认为goto语句使用起来比较灵活,而且有些情形能提高程序的效率。如果完全删去goto语句,有些情形反而会使程序变得过于复杂,增加一些不必要的计算量。持反对意见的人认为,goto语句是程序的静态结构和动态结构不一致,从而使程序难以理解、难以查错。去掉goto语句后,可直接从从程序上反映程序运行的过程,程序结构清晰、便于理解、方便查错。其实错误是程序员自己造成的,只是从实际的理解和处理上的不便造成,不是goto的过错。PHP从5.3以后的版本增加了goto语句,有些方面选择使用goto语句是有优势的。比如:从多重循环中直接跳出、出错时清除资源,有些情况也可以增加程序的清晰度。如下面的例子:使用goto语句编写循环的代码

<?php$i=1;
st:  //声明一个标记st.标记名称可以自定义,标记开始echo"{$i}次循环<br>";
if($i++==10){
gotoend; //跳转到结束end标记  }
gotost;//跳转到开始st标记end: //声明一个end标记,标记名称可以自定义,用于退出循环,注意:这里是个冒号echo"语句执行结束";

通过goto跳转到指定的标记

执行结果:

题外话:goto虽然有诸多好处,但是开发中还是很少会去使用它,因为我们习惯性不去使用它,还有人因为听到别人说,使用goto语句会导xxx问题,望而生畏,所以不敢尝试去使用它。其实最大的问题主要还是很多人没有理解和掌握它,无法很好的处理它。不过放弃它也并没有影响我们的开发,但是无论是否使用,学习还是学习,说不定哪天会用到。

goto语句

goto关键字后面带上目标位置的标志,在目标位置上用目标名加冒号标记。比如在第五行声明一个目标位置(自定义目标名称),在第11行使用goto语句跳转到第5行的目标位置,再执行到第11行又跳转到第5行形成循环。在循环中不能使用break退出,而是再次使用goto语句,跳到循环外的目标位置处结束循环。非goto的循环如果有多层循环,需要从多层循环中直接跳出,goto语句也是最好的选择。

<?phpfor($i=0,$j=50;$i<100; $i++){
while($j--){
if($j==17){
gotoend;
    }
else{
echo"变量i={$i}, 变量j={$j}<br>";
    }
  }
}
echo"这条语句会执行吗:i = $i";
end:

执行结果:

除了使用goto语句编写循环,比较常用的是通过goto语句实现程序跳转:

<?php$i=2;
switch($i){
case1:
gotoone;
echo"one";//已经跳转,不会执行到这里case2:
gototwo;
echo"two";//已经跳转,不会执行到这里case3:
gotothree;
echo"three";
}
//声明三个对应的goto跳转标记one:
echo"当变量为1时,将跳转到此处执行";
exit;//退出程序two:
echo"当变量为2时,将跳转到此处执行";
exit;//退出程序three:
echo"当变量为3时,将跳转到此处执行";
exit;//退出程序

执行结果:

另外PHP中的goto语句使用时也有一定限制,只能在同一个文件和作用域中跳转,也就是说无法跳出一个函数或类方法,也无法跳入另一个函数,更无法跳入任何循环或者switch结构中。goto语句常见的用法是跳出循环或者switch语句,可以代替多层的break。来个反面教材:goto语句的一种错误用法代码如下:

<?phpfor($i=0,$j=50;$i<100; $i++){
while($j--){
loop:  //把goto的跳转标记设置在循环中  }
}
目录
相关文章
|
3天前
|
设计模式 JavaScript 前端开发
PHP在现代Web开发中的角色与挑战
【8月更文挑战第16天】随着互联网技术的飞速发展,PHP作为一门历史悠久的服务器端脚本语言,其在现代Web开发中的地位和作用正经历着重要的转变。本文将探讨PHP在面对新兴技术挑战时如何保持其相关性,以及开发者社区如何通过创新来应对这些挑战,从而确保PHP继续在动态变化的Web开发领域中发挥关键作用。
|
3天前
|
前端开发 JavaScript PHP
PHP在现代Web开发中的角色与挑战
【8月更文挑战第16天】随着互联网技术的飞速发展,PHP作为一门历史悠久的服务器端脚本语言,在现代Web开发中扮演着不可或缺的角色。本文将探讨PHP在面对新兴技术挑战时的地位、优势以及面临的主要问题,同时展望未来PHP可能的发展方向。文章旨在为读者提供一个关于PHP当前状况及未来展望的全面视角。
|
2天前
|
安全 JavaScript 前端开发
PHP 在现代Web开发中的角色与挑战
【8月更文挑战第17天】本文将探讨PHP语言在当前Web开发领域的地位,分析其面临的技术挑战及发展趋势。我们将通过比较PHP与其他编程语言的优缺点来了解它的独特之处,并展望PHP在未来Web开发中的可能方向。
19 10
|
1天前
|
前端开发 JavaScript 安全
PHP在现代Web开发中的角色与挑战
【8月更文挑战第18天】随着互联网技术的飞速发展,PHP作为一门历史悠久的服务器端脚本语言,一直在Web开发领域占据着举足轻重的地位。然而,面对新兴的语言和技术,PHP也遭遇了前所未有的挑战。本文将探讨PHP在现代Web开发中的角色定位、面临的挑战以及未来发展的可能性,旨在为PHP开发者提供行业洞察,并鼓励对PHP的持续关注和创新。
|
5天前
|
存储 SQL PHP
Ctfshow web入门 PHP特性篇 web89-web151 全(三)
Ctfshow web入门 PHP特性篇 web89-web151 全(三)
10 2
|
5天前
|
JSON PHP Apache
[GFCTF 2021]Baby_Web(CVE-2021-41773) 从一道题入门PHP代码审计 (保姆级)
[GFCTF 2021]Baby_Web(CVE-2021-41773) 从一道题入门PHP代码审计 (保姆级)
7 1
|
1天前
|
编译器 PHP 开发者
PHP在现代Web开发中的角色与影响
【8月更文挑战第18天】本文深入探讨了PHP作为一门服务器端脚本语言,在现代Web开发中所扮演的角色以及它所带来的深远影响。文章首先回顾了PHP的发展历程,随后详细分析了PHP在Web开发中的应用优势和面临的挑战,并讨论了PHP与其他编程语言的关系及其在现代Web开发趋势中的位置。最后,文章展望了PHP的未来发展趋势,为读者提供了对PHP在Web开发中的全面了解。
|
3天前
|
缓存 安全 编译器
探索PHP 8的新特性:提升现代Web开发的效率与性能
PHP 8的推出标志着这个流行的服务器端脚本语言迈入了一个新的时代。本文将深入探讨PHP 8中引入的一些关键新特性,包括JIT编译器、联合类型、命名参数、弱引用等,并解释这些特性如何为开发者提供更高效的编程工具和改进的性能。我们将通过实际代码示例来展示这些新特性的应用,帮助读者理解如何利用PHP 8来构建更快、更可靠、更易于维护的Web应用。
6 0
|
4天前
|
安全 前端开发 PHP
PHP 在现代Web开发中的角色与挑战
【8月更文挑战第15天】随着Web技术的不断进步,PHP作为一门历史悠久的服务器端脚本语言,面临着新的机遇与挑战。从动态网站的快速开发到现代Web应用的性能优化,PHP一直在进化。本文将探讨PHP在现代Web开发中的角色,分析其面临的主要挑战,并展望未来的发展方向。不涉及代码示例,专注于理论分析和趋势预测,为读者提供对PHP未来可能的发展路径的深入理解。
10 0
|
JavaScript 前端开发 程序员
PHP快速入门第一讲:什么是PHP
PHP快速入门第一讲:什么是PHP
187 1