【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的跳转标记设置在循环中  }
}
目录
相关文章
|
1月前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
46 3
|
1月前
|
SQL 安全 前端开发
PHP与现代Web开发:构建高效的网络应用
【10月更文挑战第37天】在数字化时代,PHP作为一门强大的服务器端脚本语言,持续影响着Web开发的面貌。本文将深入探讨PHP在现代Web开发中的角色,包括其核心优势、面临的挑战以及如何利用PHP构建高效、安全的网络应用。通过具体代码示例和最佳实践的分享,旨在为开发者提供实用指南,帮助他们在不断变化的技术环境中保持竞争力。
|
1月前
|
PHP 开发者
深入浅出PHP:构建你的第一个Web应用
【10月更文挑战第35天】在数字时代的浪潮中,掌握编程技能已成为通往未来的钥匙。本文将带你从零开始,一步步走进PHP的世界,解锁创建动态网页的魔法。通过浅显易懂的语言和实际代码示例,我们将共同打造一个简单但功能强大的Web应用。无论你是编程新手还是希望扩展技能的老手,这篇文章都将是你的理想选择。让我们一起探索PHP的魅力,开启你的编程之旅!
|
1月前
|
SQL 安全 PHP
探索PHP的现代演进:从Web开发到框架创新
PHP是一种流行的服务器端脚本语言,自诞生以来在Web开发领域占据重要地位。从简单的网页脚本到支持面向对象编程的现代语言,PHP经历了多次重大更新。本文探讨PHP的现代演进历程,重点介绍其在Web开发中的应用及框架创新,如Laravel、Symfony等。这些框架不仅简化了开发流程,还提高了开发效率和安全性。
31 3
|
1月前
|
前端开发 PHP 云计算
PHP在Web开发中的不可替代性###
——守护Web开发基石,PHP的独特魅力与广泛应用解析
|
1月前
|
SQL 安全 PHP
探索PHP的现代演进:从Web开发到框架创新
PHP 自发布以来一直在 Web 开发领域占据重要地位,历经多次重大更新,从简单的脚本语言进化为支持面向对象编程的现代语言。本文探讨 PHP 的演进历程,重点介绍其在 Web 开发中的应用及框架创新。自 PHP 5.3 引入命名空间后,PHP 迈向了面向对象编程时代;PHP 7 通过优化内核大幅提升性能;PHP 8 更是带来了属性、刚性类型等新特性。
30 3
|
1月前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。
|
1月前
|
弹性计算 算法 PHP
PHP在现代Web开发中的不可替代性###
【10月更文挑战第27天】 如今互联网技术日新月异,前后端开发逐渐融合,但PHP凭借其灵活性、广泛应用和深厚社区基础,依然在Web开发领域占据重要地位。本文将深入探讨PHP为何能在现代Web开发中保持其不可替代的地位,并分析其未来的发展趋势。 ###
48 1
|
1月前
|
Unix Linux PHP
PHP在Web开发中的平台独立性优势###
本文探讨了PHP的跨平台特性,阐述其作为服务器端脚本语言如何在不同操作系统上无缝运行,以及这一特性为开发者和组织带来的便利性和成本效益。 ###
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
159 3
下一篇
DataWorks