将变量使用限制为一个文件

时间:2012-10-21 14:18:09

标签: php model-view-controller variables views

有点奇怪的问题,但请耐心等待。我正在编写一个小型MVC框架,主要用于学习目的。当我加载视图时,我只包含视图文件,然后使用extract($data);,这样我就可以在视图中使用变量。这就像在我的控制器中一样:

// Assign view variables and load the views
$data = array('title' => 'testing the framework',
              'users' => $this->models['Users']->getAllUsers());
$this->loadViews(array('header', 'home', 'footer'), $data);

它完美无缺,但我刚刚发现如果我的项目中有其他变量被称为$title$users,它们将与我{{1}冲突}“ING。这还没有成为一个问题,但我有一种感觉,我需要在它之前处理它。

我发现的唯一解决方案是使用extract()变量的前缀。我可以在我的模板中使用它们,例如extract()而不是<?php echo $tpl_whatever; ?>

有人可以提供一些建议吗?也许我可以限制变量范围?

谢谢!

2 个答案:

答案 0 :(得分:3)

只有您方法中的变量可能会发生冲突See Variable Scope,但如果发生这种情况,您可以使用EXTR_PREFIX_ALL之类的额外标记轻松解决extract中的冲突。

您还可以查看EXTR_PREFIX_SAMEEXTR_SKIPEXTR_OVERWRITE以解决提取过程中可能出现的串通行为

你的变量

$name = "Baba";
$array = array("title" => "Restricting variable use to one file",
               "name"  => "James Dawson");

示例EXTR_PREFIX_ALL

extract($array,EXTR_PREFIX_ALL,"new");
var_dump($new_title,$new_name,$name);
           ^------------------------------ it now has prifix

输出

string 'Restricting variable use to one file' (length=36)
string 'James Dawson' (length=12)
string 'Baba' (length=4)


示例EXTR_PREFIX_SAME

extract($array, EXTR_PREFIX_SAME, "prifix");
var_dump($name,$title,$prifix_name);
                           ^------------------ Only Conflict has prifix

输出

string 'Baba' (length=4)
string 'Restricting variable use to one file' (length=36)
string 'James Dawson' (length=12)

答案 1 :(得分:0)

与其他控制器不会冲突,因为您提取的$ data变量是私有的。此外,如果您的变量在您的控制器函数内部有重复,则最后一个声明将是要使用的声明。