0

我正在构建一个脚本,它有一个静态类,用于加载一些东西,包括文件和视图。

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.');
    }   
}

在控制器中我调用视图方法来获取视图:

$html = load::view('public', 'path/to/view/file.php');

显然,我无法使用这种做法从视图文件中的控制器访问变量,因此我对视图类进行了小修改以捕获变量:

public static function view($file_path, $area, $vars = array())

并添加以下代码行以将键放入 vars:

while(list($n_list_var,$v_list_var)=each($vars))
        $$n_list_var = $v_list_var;

但是我再次无法访问变量,因为我使用一种方法来加载文件。

我有一种加载文件的方法,因为我想测试并记录每个文件包含尝试,而不是每次需要包含文件时都重复代码。而且我在加载器类中有加载器视图,因此我将所有此类方法放在一起。我应该放弃使用类来加载文件吗?我应该在控制器的可扩展类上使用加载器视图方法吗?

我不想继续修改我的整个脚本,我想听听一些意见……最好的做法是什么?或者有没有办法解决我的问题?也许使用 __set 和 __get 魔术方法?

谢谢,

4

1 回答 1

0

为什么不直接将$vars参数传递给load::file()and extract( $vars )(可能将您在内部使用的变量移动file()到类变量中以防止它们被覆盖)?

我建议使用extract()而不是:

while(list($n_list_var,$v_list_var)=each($vars))
    $$n_list_var = $v_list_var;

顺便说一句,给你的班级命名是个好主意Load

于 2012-07-27T23:01:20.003 回答