我有一个加载类或文件的函数。它的工作原理是这样的。
function load ( $type, $path, $file ) {
...
switch($type) {
case 'file':
....
include $path . '/' . $file;
break;
}
}
它在课堂上工作得很好。它还可以很好地处理包含函数/ html的文件。然而,如果我得到一个包含变量的文件,我就会遇到作用域问题。有没有一种简单的方法将变量从load函数传递到调用它的函数中?
发布于 2010-11-02 01:44:42
有没有一种简单的方法可以把变量从load函数传递到调用它的函数中?
不是的。load()
有自己的变量作用域,包含的文件继承了该作用域。
您必须将所有相关变量作为参数传递给load()
函数,或者,如果可能,使用$GLOBALS
访问变量(yuck!)
一种解决方法是从load()
返回文件路径,而不是将其包括在内:
return $path . '/' . $file;
它是这样命名的:
$path = load(".....");
if ($path) include $path;
这将包括原始作用域中的文件。
发布于 2010-11-02 22:29:11
解决这个问题的最简单方法是确保我的配置文件包含对象而不是变量。这消除了作用域问题,因为变量可以静态调用。
$user = database::user;
这个解决方案还使得在应用程序运行时动态更改配置设置变得容易得多。
https://stackoverflow.com/questions/4071528
复制相似问题