我正在构建一个脚本,它有一个静态类,用于加载一些东西,包括文件和视图。
class load
{
public static function view($file_path, $area)
{
debug::log('getting view <b>' . $area . $file_path . '</b>.');
ob_start();
self::file($file_path, 'areas/' . $area . '/views');
debug::log('flushing view <b>' . $area . $file_path . '</b>.');
eturn ob_get_clean();
}
public static function file($file, $folder)
{
if(is_file($file_path = ROOT . '/' . $folder . '/' . $file))
{
if(require_once $file_path)
{
debug::log('file <b>' . $file_path . '</b> included.');
return true;
}
}
else
debug::kill('requested file <b>' . $file_path . '</b> does not exist.');
}
}
在控制器中调用view方法获取视图:
$html = load::view('public', 'path/to/view/file.php');
显然,我无法使用这种做法从视图文件中的控制器访问变量,因此我对视图类进行了一些小修改以捕获变量:
public static function view($file_path, $area, $vars = array())
并添加以下代码行以将密钥输入变量:
while(list($n_list_var,$v_list_var)=each($vars))
$$n_list_var = $v_list_var;
但是我再次无法访问变量,因为我使用一种方法来加载文件。
我有一个加载文件的方法,因为我想测试并记录每个文件包含尝试,而不是每次我需要包含文件时重复代码。我在loader类中有加载器视图,所以我将所有这些方法放在一起。我应该放弃使用类来加载文件吗?我应该在我的控制器的可扩展类上使用加载器视图方法吗?
我希望听到一些意见,而不是继续修改我的整个脚本......最好的做法是什么?或者有办法解决我的问题吗?也许使用__set和__get魔术方法?
谢谢,
答案 0 :(得分:0)
为什么不将$vars
参数传递给load::file()
和extract( $vars )
(可能会将您在file()
内使用的变量移动到类变量中以防止它们被覆盖)?
我建议使用extract()
代替:
while(list($n_list_var,$v_list_var)=each($vars))
$$n_list_var = $v_list_var;
顺便说一下,为您的班级Load
命名是个好主意。