是否在做类似
_________________________
//index.php
...
require("header.php");
...
_________________________
_________________________
//header.php
printHeader()
function printHeader(){
echo 'something';
...
}
_________________________
被认为是要避免的坏做法?
我个人认为,require()
(或require_once()
或include()
,这不是重点)调用的执行应该只添加到其他函数/对象的"链接",而不要单独执行任何东西。换句话说,在我看来,require的行为应该与其他oo语言的导入/使用非常相似。
我上面写的例子是相当微不足道的,但显然我也写了各种各样的"副作用"。define函数或一些会话技巧是我在一些包含的文件中经常发现的其他滥用
是的,在我看来这是(非常)糟糕的做法,除非非常明确地记录。
include
或require
(以及它们在其他语言中的等价)通常应该只将新函数引入当前作用域,而不触发它们的调用。
这是一个总体设计问题,与个人偏好无关。如果你可以用个人偏好来设计,那么它就是你的个人偏好。把语言当作工具使用。
例如,如果您使用PHP作为服务器端include的替代品,那么include通常包含大部分HTML和一些PHP片段。伟大的网站就是用这个建造的。在现实世界中,这样的设计并没有什么不好的。
然而,如果你需要更细粒度的控制,你主要是引用对象而不是文件。在这种情况下,我建议你不应该在你的代码中包含任何东西,而是在你的应用程序中根据类名的请求需要一个自动加载器。
的例子,你在你的问题,但看起来没有太多的概念背后,无论如何,也许它应该允许有局部变量在一个包含,但这可以更容易地实现通过动态包含在一个包含的辅助函数,如:
/**
* include a file with its 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), EXTR_OVERWRITE);
}
return include(func_get_arg(0));
}
因此不必在每个include中定义一个与include同名的函数