PHP中关闭花括号后的分号
我写了一个脚本,使文本块,并通过短信发送它。今天早些时候,我回顾了一些将字符串分割成块的代码,我看到了一些以前从未见过的东西。我说的是在代码片段的en处“}”之后的“;” 为什么是这个冒号?我知道它可以工作,但我不知道它是否为解释器添加了一些语义或指令,有人知道这是为了什么吗PHP中关闭花括号后的分号,php,Php,我写了一个脚本,使文本块,并通过短信发送它。今天早些时候,我回顾了一些将字符串分割成块的代码,我看到了一些以前从未见过的东西。我说的是在代码片段的en处“}”之后的“;” 为什么是这个冒号?我知道它可以工作,但我不知道它是否为解释器添加了一些语义或指令,有人知道这是为了什么吗 while(1) { $length = (strlen($output)+strlen($words[$i])); if($length>$new_max) { if(cou
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的用法,因为它告诉你句子的结尾,但是;就像什么都不放,我的意思是没有语义在上面。在这种情况下,可能只是他们有一种必须以分号结束编程语句的想法,所以他们用分号完成所有事情。它没有任何作用——事实上,你本可以做到的;;;;;;;在你的一个陈述的结尾,没有任何效果。分号只是分隔语句(就像花括号对一样),所以你只需要一组空语句,然后编译器在编译时对它们进行优化?他们声明了作用域。这提出了一个很好的问题,除了“最佳猜测”之外,没有人涉及过这个问题。当您有这样一个空语句时,在编译器级别会发生什么?