2

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

4

2 回答 2

1

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

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

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

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

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

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

于 2012-04-20T10:40:00.883 回答
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

包含在方法中不会与全局范围发生冲突: 如何在函数中使用包含?

于 2014-06-20T13:40:00.877 回答