codeigniter模板系统中的范围管理

时间:2012-04-20 10:15:22

标签: php codeigniter include scope

在codeigniter模板中基本上包含文件,模板输入由关联数组提供。我猜codeigniter使用extract()作为魔法的那一部分,但它如何防止这些变量搞乱全局范围?或者我在包含文件中遗漏了具有可变范围的内容?

2 个答案:

答案 0 :(得分:1)

确实使用了extract()。虽然提取函数有一个不覆盖现有变量的选项,但默认情况下它会覆盖,而CodeIgniter使用此默认值。

由于视图表面上是应用程序的最终端点,并且不应使用之外的任何变量通过视图,因此不应出现任何问题。但是,如果您希望捕获范围冲突,可以执行以下操作:

$foo = 'bar';
$data = array('foo' => 'baz');

foreach($data as $key => $val)
    if(isset($$key)) { /* throw fatal error */ }

$this->load->view($data);

要以更加技术性和不太实际的方式回答您的问题,上述评论者是正确的:变量在 _ci_load 函数的方法范围内,在 CI_loader 内解析类。

答案 1 :(得分:0)

与全局范围没有冲突,因为视图是在方法中加载的。

CodeIgniter正在使用extract()https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/Loader.php#L886

CodeIgniter包含视图的代码: https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/Loader.php#L910

在方法中包含不会导致与全局范围冲突: How to use include within a function?

相关问题