一看就知道是goto和call分不清的孩子
然后在群里敲代码的时候,小猫用了Do...Loop循环,结果群里有个小朋友问Do...Loop循环是什么?-_-|||结果一群人都说很少用Do...Loop循环,大部分都喜欢用Goto,我才发现这个问题,并不是说不能用Goto,而是少用Goto!!!
废话讲完了,开始正题
先为新手解释下Goto和Call的区别
Goto是用来跳转代码的,即当代码执行到Goto时,跳转到Rem指定的位置向下执行,它不会在执行完时,返回到Goto语句的下一条。
Call也是用来跳转代码的,但是更准确的说,Call是用来调用子程序的!何为调用?即执行到Call时,将指定的子程序(Sub)放到代码中,当子程序执行结束后,它会回到Call语句的下一条,继续向下执行。
如果很难理解,那就用刚开始提到的那位同学的代码来解释吧:
这是Goto语句 |
这是Call语句 |
1. a=15 2. b=10 3. if a-b < 15 4. goto sub1//跳转至Rem sub1处,且不会再跳回来了!!! 5. if a-b > -15 6. goto sub2 7. end if 8. end if 9. 10. Rem sub2 11. MsgBox "a-b大于-15" 12. 13. Rem sub1 14. MsgBox "a-b小于15"//脚本到底部了,执行结束!!! |
1. a=15 2. b=10 3. if a-b < 15 4. call sub1//调用sub1子程序,当子程序执行结束后,返回到此处,继续向下执行 5. if a-b > -15 6. call sub2 7. end if 8. end if 9. 10. Sub sub2() 11. MsgBox "a-b大于-15" 12. End Sub 13. 14. Sub sub1() 15. MsgBox "a-b小于15" 16. End Sub |
OK,两种区别讲清楚了,现在来讲讲这次的主题,关于Goto语句的利与弊!!!
我上面说过,我提倡Goto要少用,绝对不能滥用,其中,最主要的一个原因是,Goto语句破坏了程序结构,使程序可读性变差,你用一个,两个或许影响不大,但是你如果用了十几个Goto呢?
下面这段话摘自百度百科(如果大家觉得太多了,那么你只需看“goto语句的结果”那一段)
问题起源:
60年代中期以后,计算机硬件技术日益进步,计算的存贮容量、运算速度和可靠性明显提高,生产硬件的成本不断降低。计算机价格的下跌为它的广泛应用创造了极好的条件。在这种形势下,迫切要求计算机软件也能与之相适应。因而,一些开发大型软件系统的要求提了出来。然而软件技术的进步一直未能满足形势发展的需要,在大型软件的开发过程中出现了复杂程度高、研制周期长、正确性难以保证的三大难题。遇到的问题找不到解决办法,致使问题堆积起来,形成了人们难以控制的局面,出现了所谓的“软件危机”。为了克服这一危机,一方面需要对程序设计方法、程序的正确性和软件的可靠性等问题进行系列的研究;另一方面,也需要对软件的编制、测试、维护和管理的方法进行研究,从而产生了程序设计方法学。
goto语句是有害的观点:
1968年,E·W·代克斯特拉首先提出“GOTO语句是有害的”论点,向传统程序设计方法提出了挑战,从而引起了人们对程序设计方法讨论的普遍重视。
goto语句的争论:
在60年代末和70年代初,关于GOTO语句的用法的争论比较激烈。主张从高级程序语言中去掉GOTO语句的人认为,GOTO语句是对程序结构影响最大的一种有害的语句,他们的主要理由是:GOTO语句使程序的静态结构和动态结构不一致,从而使程序难以理解,难以查错。去掉GOTO语句后,可直接从程序结构上反映程序运行的过程。这样,不仅使程序结构清晰,便于理解,便于查错,而且也有利于程序的正确性证明。
持反对意见的人认为,GOTO语句使用起来比较灵活,而且有些情形能提高程序的效率。若完全删去GOTO语句,有些情形反而会使程序过于复杂,增加一些不必要的计算量。
关于goto语句的解决方法:
1974年,D·E·克努斯对于GOTO语句争论作了全面公正的评述,其基本观点是:不加限制地使用GOTO语句,特别是使用往回跳的GOTO语句,会使程序结构难于理解,在这种情形,应尽量避免使用GOTO语句。但在另外一些情况下,为了提高程序的效率,同时又不至于破坏程序的良好结构,有控制地使用一些GOTO语句也是必要的。用他的话来说就是:“在有些情形,我主张删掉GOTO语句;在另外一些情形,则主张引进GOTO语句。”从此,使这场长达10年之久的争论得以平息。
后来,G·加科皮尼和C·波姆从理论上证明了:任何程序都可以用顺序、分支和重复结构表示出来。这个结论表明,从高级程序语言中去掉GOTO语句并不影响高级程序语言的编程能力,而且编写的程序的结构更加清晰。[/hide]
goto语句的结果:
在C/C++等高级编程语言中保留了goto语句,但被建议不用或少用。在一些更新的高级编程语言,如Java不提供goto语句,它虽然指定goto作为关键字,但不支持它的使用,使程序简洁易读;尽管如此后来的c#还是支持goto语句的,goto语句一个好处就是可以保证程序存在唯一的出口,避免了过于庞大的if嵌套。
如果有仔细看上面这段话的同学,相信能明白goto语句的利与弊了吧?
好吧,还是用代码来解释:
滥用goto语句的例子 |
合理利用goto语句 |
1. Rem A 2. If false 3. goto B 4. End If 5. 6. Rem C 7. if true 8. goto A 9. ElseIf false 10. goto B 11. else 12. goto C 13. End If 14. 15. Rem B 16. //这样的代码可读吗,你可以划出流程图吗。而且goto完全是可以用其他语句代替的。 |
1. Do 2. Do 3. Do 4. If true 5. Goto 停止//利用goto跳出深层嵌套 6. End If 7. Loop 8. Loop 9. Loop 10. 11. Rem 停止 |
讲解就到这里了,小猫的想法就是建议大家如果能不用goto就不用goto,尽量多使用Call,如果想跳出循环,每种循环都有对应的跳出语句,如exit do,exit for,exit sub,Exit Function
另外当大家需要用到循环时,建议使用Do...Loop和For...Next两者,而while循环比较绕口,完全可以用do和for代替他
以上是php goto语句的利弊详解 的详细内容。更多信息请关注PHP中文网其他相关文章!

使用数据库存储会话的主要优势包括持久性、可扩展性和安全性。1.持久性:即使服务器重启,会话数据也能保持不变。2.可扩展性:适用于分布式系统,确保会话数据在多服务器间同步。3.安全性:数据库提供加密存储,保护敏感信息。

在PHP中实现自定义会话处理可以通过实现SessionHandlerInterface接口来完成。具体步骤包括:1)创建实现SessionHandlerInterface的类,如CustomSessionHandler;2)重写接口中的方法(如open,close,read,write,destroy,gc)来定义会话数据的生命周期和存储方式;3)在PHP脚本中注册自定义会话处理器并启动会话。这样可以将数据存储在MySQL、Redis等介质中,提升性能、安全性和可扩展性。

SessionID是网络应用程序中用来跟踪用户会话状态的机制。1.它是一个随机生成的字符串,用于在用户与服务器之间的多次交互中保持用户的身份信息。2.服务器生成并通过cookie或URL参数发送给客户端,帮助在用户的多次请求中识别和关联这些请求。3.生成通常使用随机算法保证唯一性和不可预测性。4.在实际开发中,可以使用内存数据库如Redis来存储session数据,提升性能和安全性。

在无状态环境如API中管理会话可以通过使用JWT或cookies来实现。1.JWT适合无状态和可扩展性,但大数据时体积大。2.Cookies更传统且易实现,但需谨慎配置以确保安全性。

要保护应用免受与会话相关的XSS攻击,需采取以下措施:1.设置HttpOnly和Secure标志保护会话cookie。2.对所有用户输入进行输出编码。3.实施内容安全策略(CSP)限制脚本来源。通过这些策略,可以有效防护会话相关的XSS攻击,确保用户数据安全。

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显着提升应用在高并发环境下的效率。

thesession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceIsiseededeedeedeedeedeedeedto to to avoidperformance andununununununexpectedLogOgouts.3)

在PHP中,可以使用session_name()函数配置会话名称。具体步骤如下:1.使用session_name()函数设置会话名称,例如session_name("my_session")。2.在设置会话名称后,调用session_start()启动会话。配置会话名称可以避免多应用间的会话数据冲突,并增强安全性,但需注意会话名称的唯一性、安全性、长度和设置时机。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

Atom编辑器mac版下载
最流行的的开源编辑器

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

禅工作室 13.0.1
功能强大的PHP集成开发环境

WebStorm Mac版
好用的JavaScript开发工具