参数&功能范围

时间:2013-03-18 13:00:35

标签: php scope

我在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参数设置),trys包含它,如果失败则处理所有错误。因为这在index.php中使用了3-4次,所以我想用它来创建一个函数,所以我可以很容易地调用$Template->LoadFile("filename.php");,这个函数为我处理一切:包括,执行代码和错误处理。

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

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

还有什么选择?非常感谢:)

1 个答案:

答案 0 :(得分:0)

你可以使用option2,但是以其他各种方式,看看codeigniter和kohana如何呈现他们的观点。

你可以做点什么

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

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

如果是模板大小,则可以随时将模板拆分为子模板。