2011-10-08 73 views
4

是做這樣的事情是否包含()/ require()與「副作用」是一種不好的做法?

_________________________ 
//index.php 
... 
require("header.php"); 
... 
_________________________ 

_________________________ 
//header.php 
printHeader() 

function printHeader(){ 
    echo 'something'; 
    ... 
} 
_________________________ 

認爲是不好的做法,以避免?我個人認爲執行require()(或require_once()或,這不重要)調用應該只添加到其他函數/對象的「鏈接」,並且從不自行執行任何操作。換句話說,在我看來,一個需求應該以與其他oo語言的導入/使用非常相似的方式表現。

我上面寫的例子非常簡單,但顯然我也寫作反對任何一種「副作用」。定義函數或會話中的一些技巧是我經常在一些包含文件中發現的其他濫用。

+0

可能屬於程序員.SER –

+0

這是一般性設計問題,而不是個人偏好。如果您可以設計個人喜好,那麼它是*您的*個人喜好。做任何你喜歡的事,用語言作爲工具。 – hakre

+0

許多模板引擎都依賴於這種副作用。這並不意味着這是不好的做法。如果你不喜歡它 - 不要使用它。如果你發現它對你的情況有用,那就使用它。 –

回答

5

是的,恕我直言,這是(非常)不好的做法除非非常明確記錄

includerequire(和他們的其他語言當量)通常應僅引進新功能到當前範圍,從不觸發它們的調用。

2

這是一般設計問題,而不是個人偏好。如果你可以設計個人喜好,那麼它的你的個人喜好。做任何你喜歡的,使用該語言作爲工具

例如,如果您使用PHP作爲服務器端包含的替代品,那麼包含大部分包含一些PHP片段的HTML是很常見的。偉大的網站與此建成。在現實世界中,這種設計沒有什麼不好。

但是,如果您需要更細粒度的控制,則大多是指對象而不是文件。在這種情況下,我建議你不要在你的代碼中包含任何內容,而是一個自動加載器,它可以根據你的應用程序中的類名請求提供需要。

然而,你在你的問題中的例子看起來像它背後沒有太多的概念,也許它應該允許在一個包含內部有局部變量,但是通過動態地包含一個包含幫助函數像:

/** 
* include a file with it's own local scope. 
* 
* @param string path to include file 
* @param array (optional) variables, keyed with variable name. 
* @return mixed return value of include 
*/ 
function include_helper() 
{ 
    if (!func_num_args()) 
    { 
     return NULL; 
    } 
    elseif (2 === func_num_args() && is_array(func_get_arg(1))) 
    { 
     extract(func_get_arg(1)); 
    } 
    return include(func_get_arg(0)); 
} 

並因此備用定義一個函數內的每個包括具有相同的名稱作爲包括。

相關問題