2012-10-21 44 views
1

,如果我有假後的代碼一樣,將「if」語句被編譯

if($abc==true) { 
    //code code code 
} else { 
    // other code, other code 
} 

所以,如果$abctrue代碼將「其他代碼」編譯?

所以這是不相關的,如果有很多「代碼」性能明智嗎?

+0

是的,它會被編譯(實際標記和解析); PHP無法知道'$ abc'會採用什麼值。通過在IF內部使用include(),你可以稍微減少負載(但只有它真的是很多代碼!)。 – LSerni

回答

6

PHP是在運行時分析(因此「編譯」)。所有的代碼都被處理,無論可達性如何。例如:

<?php 
echo "Hello, World!"; 
exit; 
DERP!! 
?> 

將失敗,並分析錯誤,而不是打印,即使DERP永遠不能達到「你好,世界!」。

2

是的,它會被編譯(實際上是讀取,標記和解析); PHP無法知道在運行時$abc會採用什麼值。

您可以通過使用包括()中的IF內減少有些負載​​(但只有當它是真的很多的代碼!):

if (condition) 
{ 
    include('true.php'); 
} 
else 
{ 
    include('false.php'); 
} 

但請注意,這樣你將加載文件而不是一個。通常,額外文件的開銷使得遊戲不值得付出努力。

但是,如果IF確實有很多很多的代碼,那麼將它分成幾個文件可能是維護方面的一個好主意。重構從程序流中刪除IF會更好!

1

雖然整個代碼在運行時錯誤「解析」,代碼的流程將只能走一個方向,「如果」點,所以基本上沒有速度性能問題。

這真的不值得擔心,特別是因爲'if'等流程控制語句可能是編程最重要的元素。如果沒有他們,你就無法獲得,真的。

1

您擔心哪些性能問題? PHP是一種解釋型語言,這意味着您的文件將在每個請求中被解析,標記並執行。無論如何,整個文件都需要進行語法分析和標記。執行的內容取決於您的控制流程語句,如,如果在您的示例中。

如果你擔心額外的解析,您可以重構代碼,包括基於控制流語句的結果另一個文件。

$x = 1; 
if($x === 1) { 
    include_once './myFile.php'; 
} 
else { 
    // Something Else. 
} 

雖然我無法真正想到與性能相關的巨大原因,爲什麼你會這樣做。