2010-11-30 43 views
8

我正在编写一个脚本来制作大块文本并通过短信发送。今天早些时候,我在回顾一些代码,将字符串分成大块,并且我看到了一些我从未见过的东西。我在谈论“;”在代码片段的“}”后面。在PHP中关闭大括号后的分号

为什么冒号?我知道它的工作原理,但我不知道它是否为解释器增加了一些语义或某些指令,任何人都知道这是为了什么?

while(1) 
{ 
    $length = (strlen($output)+strlen($words[$i])); 
    if($length>$new_max) 
    { 
     if(count($words) > 0) 
     { 
      $out_array[] = $output; 
      $output = ''; 

     } 
     else 
     { 
      break;  
     } 
    } 
    else 
    { 
     $output = $output." ".$words[$i]; 
     ++$i; 
    }; 
}; 

编辑:看起来清楚,分号以及多个分号共同拥有对结果没有任何影响,但是,你知道,如果它有解释有一定的影响?它在解析它时做了些什么(内部的)任务?

+0

这就提出了一个很好的问题,没有人触及了除“最佳猜测”。当你有这样的空语句时,编译器级会发生什么? – 2015-02-11 23:01:03

回答

12

我认为那两个分号在这里什么都不做。它可能被解释为紧跟在if/while之后的空表达式。

+0

我认为这是无价值的,但我想确保:)谢谢。 – SubniC 2010-11-30 15:38:53

+0

埃文是正确的。额外的分号是毫无意义的。 – DampeS8N 2010-11-30 15:41:01

+0

正确,绝对没有发生这两个分号的地方。 – BoltClock 2010-11-30 15:41:22

4

这些都是不必要的。他们不会伤害剧本,只是不必要的。程序员可能习惯于在每个语句结尾添加分号。也许他从另一种编程语言中得到了这种习惯,也许他的IDE没有用分号表示错误,或者他只是一个初学者。无论如何,既没有伤害也没有帮助。 此外,程序员在(1)时使用的事实告诉我,他要么非常懒惰,因为通常程序员会写(while),而键入1的唯一原因是因为它的输入较少。任何类型的正式培训的程序员不会写(1)而不是while(真)。 这只是我的看法,但它基于超过10年的3种语言编程。

0

有些人使用// endwhile或// endif来表示它来自哪里。其他人在大括号之后放置了分号。这两种技术都是无害的,只是归结于开发人员。

我猜测这个程序员不信任他们自己的编码,也是以没有风格的文本书方式编码 - 支撑位置,间距不一致,while(1)就是这样。 ..建议不要那样做。

1

在某些情况下,您需要在关闭花括号之后使用分号!

实施例:

if(1==1): 
    if(true){ echo "it's true"; } //no semicolon here => syntax error! 
else: 
    echo "no never ever"; 
endif; 

当然,你我就不会使用控制结构替换语法如果只有PHP代码。

但是,如果你有一个混合的HTML和PHP代码,你可以使用控制结构的替代语法(替代语法使得代码只有更清晰并且可以读取),但问题是在某些情况下插件或例如cms的标签解析器可能会在“else:”之前产生一个带有大括号(没有“结束分号”)的if语句,这将导致产生的php文件中的语法错误。

上面的代码将工作是这样的:

if(1==1): 
    if(true){ echo "it's true"; }; 
else: 
    echo "no never ever"; 
endif;