PHP中关闭花括号后的分号

PHP中关闭花括号后的分号,php,Php,我写了一个脚本,使文本块,并通过短信发送它。今天早些时候,我回顾了一些将字符串分割成块的代码,我看到了一些以前从未见过的东西。我说的是在代码片段的en处“}”之后的“;” 为什么是这个冒号?我知道它可以工作,但我不知道它是否为解释器添加了一些语义或指令,有人知道这是为了什么吗 while(1) { $length = (strlen($output)+strlen($words[$i])); if($length>$new_max) { if(cou

我写了一个脚本,使文本块,并通过短信发送它。今天早些时候,我回顾了一些将字符串分割成块的代码,我看到了一些以前从未见过的东西。我说的是在代码片段的en处“}”之后的“;”

为什么是这个冒号?我知道它可以工作,但我不知道它是否为解释器添加了一些语义或指令,有人知道这是为了什么吗

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;
    };
};

编辑:看起来分号和多个分号一起对结果没有影响,但是,您知道它对解释器是否有影响吗?当它解析它时,它是否在(内部)执行一些任务?

我认为这两个分号在这里没有任何作用。如果/
,则它可能被解释为紧跟在
后面的空表达式,而这些都是不必要的。它们不会影响脚本,只是没有必要。程序员可能有在每条语句末尾加分号的习惯。也许他是从另一种编程语言中养成这个习惯的,也许他的IDE显示错误时没有分号,也许他只是个初学者。无论如何,既没有伤害也没有帮助。
程序员使用while(1)这一事实告诉我,他要么非常懒惰,因为程序员通常会编写while(true),输入while 1的唯一原因是因为这样做的输入更少。受过任何正式培训的程序员都不会编写while(1)而不是while(true)。

这只是我的观点,但它是基于使用3种语言编程超过10年的经验。

有些人使用//endwhile或//endif来表示它的来源。其他人在支架后面加上分号。这两种技术都是无害的,只能由开发人员决定


我猜这个程序员不相信他们自己的编码,也在以一种没有风格的教科书方式编码——大括号的位置,不一致的间距,而while(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的标记解析器可能会生成带有花括号(没有“结束分号”)的if语句就在“else:”之前,这将导致生成的php文件中出现语法错误

上述代码的工作原理如下:

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

正确,在两个分号所在的位置绝对没有发生任何事情。我的经验较少,但我认为这是正常的。然而,理解它并不比理解while更困难。我要指出的是“++$i;”为什么不“$output=$output.”“$words[++$i];”并且你可以少用一行。当(1)
时,有人会编写
的一个常见原因是如果他们最初是一名c开发人员:-P。另外,不编写
$words[++$i]
的一个原因是因为这样更容易出错。例如,您编写的内容不正确,应该是:
$words[$i++]
。不同之处在于后者使用原始的
$i
作为索引,而您的版本使用新的
$i
。有人建议PHP开发人员中存在任何与严格性相去甚远的东西,例如选择
while(1)
而不是
while(true)
,我对此感到很好笑,特别是在代码中,它看起来是从C直接翻译过来的,可能被可靠地用来表示懒惰——我的意思是,你会怎么说呢?嗨@Mark Mayo,我理解//endwhile或//endif的用法,因为它告诉你句子的结尾,但是;就像什么都不放,我的意思是没有语义在上面。在这种情况下,可能只是他们有一种必须以分号结束编程语句的想法,所以他们用分号完成所有事情。它没有任何作用——事实上,你本可以做到的;;;;;;;在你的一个陈述的结尾,没有任何效果。分号只是分隔语句(就像花括号对一样),所以你只需要一组空语句,然后编译器在编译时对它们进行优化?他们声明了作用域。这提出了一个很好的问题,除了“最佳猜测”之外,没有人涉及过这个问题。当您有这样一个空语句时,在编译器级别会发生什么?