参数,函数中的作用域


parameters & scope in functions

我有一个关于PHP函数参数及其作用域的问题。

我正在建立一个自己的小模板系统,目前我一直使用:

try {
    $ret = include("file.php");
    if(!$ret) {
        throw new Exception();
    }
    // Go on here...
}
catch(Exception $e) {
    // error handling
}

在主文件index.php中约出现3-4次。这段代码首先包含所需的文件(由URL中的GET参数设置),尝试包含它,如果失败,则处理所有错误。因为这在index.php中使用了3-4次,我想用它来做一个函数,所以我可以很容易地调用$Template->LoadFile("filename.php");,这个函数为我处理一切:包括,执行代码和错误处理。

我想没有那么难,但是当我这样做时,我得到了很多错误消息,因为所包含的文件执行所需的变量只在index.php的范围内可用(之前执行的代码),而不是在LoadFile()函数的范围内。我现在该怎么办?

    将所有内容还原并再次愚蠢地使用上述代码3-4次?
  • LoadFile()中添加所有需要的变量作为参数,以便通过使用$Template->LoadFile($file,$vars); $vars可用于LoadFile()中包含的文件?通过这样做,给定的参数在某些情况下会很大。例如,如果我添加一个自己的板,$vars将包含每个板的数据,这相当多。这不会使模板系统变得很慢吗?
  • 通过参数作为参考添加所需的变量?(与我的第二个建议相同,但减少发动机减速)。
  • 使用全局变量?不!

还有其他选择吗?非常感谢:)

您可以使用option2,但在各种其他方式,看看codeigniter和kohana如何呈现他们的视图。

你可以这样写

$Template->LoadFile($file, $vars)其中$vars为array,如array('thisIsVariableName' => 'thisIsVariableValue')

$Template->file($file)
->vars('thisIsVariableName', thisIsVariableValue)
->multi_var(array('thisIsVariableName2' => 'thisIsVariableValue2'))
->render();

在模板大小的情况下,你总是可以把一个模板分成子模板。