2010-11-30 68 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;