加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 17:04:52 所属栏目:PHP教程 来源:网络整理
导读:从视图中调用视图时,我对变量范围感到困惑. 我测试了一下,发现: ?如果变量最初是从控制器传递的,则无需执行某些操作即可将变量从视图传递到视图. ?如果变量是在视图中声明的,我必须将变量从视图显式传递给视图. (例如:$this- load- view(“hoge”,$data);)
从视图中调用视图时,我对变量范围感到困惑.
我测试了一下,发现:

?>如果变量最初是从控制器传递的,则无需执行某些操作即可将变量从视图传递到视图.
?>如果变量是在视图中声明的,我必须将变量从视图显式传递给视图. (例如:$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个子视图,传递给第一个视图的变量将被缓存并自动传递给第二个视图……这有时会导致调试问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读