在加载器视图方法中获取控制器变量?

时间:2012-07-27 22:40:49

标签: php class object object-oriented-analysis

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

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魔术方法?

谢谢,

1 个答案:

答案 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命名是个好主意。