php – Codeigniter:从视图中调用视图时的变量范围.奇

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – Codeigniter:从视图中调用视图时的变量范围.奇脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
从视图中调用视图时,我对变量范围感到困惑.
我测试了一下,发现:

 >如果变量最初是从控制器传递的,则无需执行某些操作即可将变量从视图传递到视图.
 >如果变量是在视图中声明的,我必须将变量从视图显式传递给视图. (例如:$this-> load-> view(“hoge”,$data);)

我发现第二种情况有点奇怪,因为我的理解是$this-> load-> view()是PHP include()的codeignITer版本,它不需要我明确地传递变量.

任何人都可以猜测/为什么他们这样做了一点点?

解决方法

如果您查看Loader库的_ci_load方法(view()调用),在最新版本的第639行附近,您将看到以下代码

/*
 * Extract and cache VARiables
 *
 * You can either set variables using the dedicated $this->load_vars()
 * function or via the second parameter of this function. We'll merge
 * the two tyPEs and cache them so that views that are embedded within
 * other views can have access to these variables.
 */ 
if (is_array($_ci_vars))
{
    $this->_ci_cached_vars = array_merge($this->_ci_cached_vars,$_ci_vars);
}
extract($this->_ci_cached_vars);

这就是传递给视图的变量在嵌套视图中自动可用的原因.

但是你的本地声明的变量不是..因为它们没有被传递给下一个view()调用.

请注意,它合并了变量,因此从技上讲,您可以将在顶视图中更改的变量传递给子视图,其余变量将自动继承.

恕我直言,我认为为了清晰和其他潜在的人阅读你的代码,最好总是明确传递你的子视图将需要的所有变量..代码变得更容易阅读/调试.

注意:缓存的副作用是,如果你有2个子视图,传递给第一个视图的变量将被缓存并自动传递给第二个视图……这有时会导致调试问题.

@H_502_39@

脚本宝典总结

以上是脚本宝典为你收集整理的php – Codeigniter:从视图中调用视图时的变量范围.奇全部内容,希望文章能够帮你解决php – Codeigniter:从视图中调用视图时的变量范围.奇所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。