include()/ require()与“副作用”是一种不好的做法吗?
正在做类似的事情
_________________________ //index.php ... require("header.php"); ... _________________________ _________________________ //header.php printHeader() function printHeader(){ echo 'something'; ... } _________________________
考虑一个不好的做法,以避免?
我个人认为执行require()
(或require_once()
或include()
,这不是重点)调用应该只添加一个“链接”到其他函数/对象,并且从不执行任何事情。 换句话说,在我看来,一个要求应该以与其他oo语言的导入/使用非常相似的方式performance。
我上面写的例子是相当平凡的,但显然我也写反对每种“副作用”。 定义函数或会话的一些技巧是我经常在一些包含文件中发现的其他滥用。
是的,恕我直言,这是(非常)不好的做法, 除非非常明确的文件 。
include
或require
(和其他语言中的等价物)通常应该只在当前范围中引入新的函数,而不会触发它们的调用。
这是一个总体devise的问题,而不是个人的偏好。 如果你可以devise个人喜好,那么这是你的个人喜好。 做任何你喜欢的事, 用语言作为工具 。
例如,如果您使用PHP作为服务器端包含的替代品,那么包含大部分包含一些PHP片段的HTML是很常见的。 伟大的网站是用这个build造的。 在现实世界中,这种devise没有任何坏处。
但是,如果你需要更多的细粒度控制,你通常是指对象而不是文件。 在这种情况下,我build议你不应该在你的代码中包含任何东西,而是一个自动加载器。
你在问题中的例子看起来像没有太多的概念背后,也许它应该允许包含内部的局部variables,但是可以更容易地通过包含一个包含帮助函数,如下所示更容易实现:
/** * 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)); }
因此在每个包含与include相同名称的内部备用定义一个函数。