PHP中的GOTO是否有害?[关闭]

2020/10/19 09:21 · php ·  · 0评论

我最近发现PHP 5.3支持名为的新语言构造GOTO每个人都知道它在做什么。但是,这不完全是传统的GOTO,只是一个跳转标签。我很高兴知道这GOTO是否有害并暗示错误的代码?

除非您使用汇编程序进行编程,否则应始终将GOTO与飞机的救生背心以相同的方式对待:可以使用它们是一件好事,但如果需要使用它们,则意味着您会遇到很大麻烦。

我不敢相信没有人张贴这个:)


xkcd-转到

当然,PHP尚未编译...也许猛禽会在每次访问您的网站时追逐您?

无论使用哪种控制结构,不良的代码结构都是有害的。

我个人更喜欢goto,它使程序的流程更清楚地显示为“控制变量”,并嵌套了“ if”,这将间接导致代码中的同一分支。

因此,只需编写两个版本(带有和不带有GOTO),然后看看哪个版本更容易理解。那么选择就很容易。

我认为这是PHP手册页中最重要的部分,在这里缺少:

不是完全不受限制的goto目标标签必须在同一文件和上下文中,这意味着您不能跳出一个函数或方法,也不能跳入一个您也不能跳入任何形式的循环或开关结构。您可能会跳过这些,通常的用法是使用goto代替多级中断。

恕我直言,这使其与以往的BASIC风格完全不同

我目前只是少数派,但我相信对PHP的goto构造施加的限制使其成为一个非常有益的工具:

http://adamjonrichardson.com/2012/02/06/long-live-the-goto-statement/

我实际上浏览了一个箭头代码示例(深层嵌套的条件),并在一个版本中使用标准实践(保护子句,分组条件,拉出函数)对其进行了重构,而在另一版本中使用了基于goto的版本对其进行了重构,我实际上更喜欢使用基于goto的重构。

枪是邪恶的吗?两者都可以用于善或恶。我想说,没有goto编写好的代码要比使用goto编写容易。

在给定情况下可以使代码更具可读性的任何语言功能都是一件好事。即使这些情况很少且相差甚远,GOTO也是其中一种语言功能。如果我们禁止任何使不良程序员能够编写糟糕的,无法维护的代码的语法,那么我们的工作将更加困难。

作为一名软件工程师,我主要从事“大型机”和“大型公司服务器”的工作……而我们的日常语言(我的意思是我们基本代码的95%)是Cobol,它广泛使用GOTO。

这种用法并不意味着代码是错误的。这只是意味着在编写程序时,此工具(GOTO)是正确的工具。

为了回答Kaitsuli的问题,我认为它在编写PHP脚本时可能是有用的工具。另一方面,到现在为止,已经有近十年的时间,很多脚本没有使用它。此外,它具有更多面向对象的功能,与PHP的发展背道而驰。

恕我直言,代码的生产既不是好事也不是坏事:好的程序仍然会是好的,而“恐怖程序”会变得更糟……唯一的问题是:“为什么在证明没有必要10年后添加GOTO呢? ”。

GOTO通常是邪恶的,因为它允许您构建非结构化代码。通过通常的循环,您可以构建易于遵循的良好结构化代码,因为它是结构化的。

当您有非结构化代码从此处跳到那里时,您刚刚发现邪恶来自GOTO语句。几乎总是最好避免这种情况。也许每100.000行中有一个GOTO语句可以简化很多代码的地方,因此代码并不邪恶,但是如果您不确定,则应避免使用GOTO。

希望这可以帮助。

编辑:好吧,只是在这里添加我自己的意见,还有其他一些指令可以让您创建非结构化代码,并且在我认为应该使用时不认为是有害的。

例如,函数中间的返回是转到该函数结尾的位置,因此我避免使用它们,并且在每个函数的末尾仅使用一个返回。

像Vb.Net这样的其他语言(也许也有其他语言)允许执行Exit For,Exit While,breaks和类似的事情,这些事情也会使代码的结构混乱,我认为应该避免。

有时(在0.01%的情况下,我的意思是)它很有用,例如当您的脚本很长并且想要测试某些块时。但切勿将其保留在最终脚本中

编写用于在cli模式下工作的脚本时,我使用了GOTO。它救了我的命。

本文地址:http://php.askforanswer.com/phpzhongdegotoshifouyouhaiguanbi.html
文章标签: ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!