2011-10-08 78 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)); 
} 

并因此备用定义一个函数内的每个包括具有相同的名称作为包括。

相关问题