php – Codeigniter:从视图中调用视图时的变量范围.奇
发布时间:2020-12-13 17:04:52 所属栏目:PHP教程 来源:网络整理
导读:从视图中调用视图时,我对变量范围感到困惑. 我测试了一下,发现: ?如果变量最初是从控制器传递的,则无需执行某些操作即可将变量从视图传递到视图. ?如果变量是在视图中声明的,我必须将变量从视图显式传递给视图. (例如:$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个子视图,传递给第一个视图的变量将被缓存并自动传递给第二个视图……这有时会导致调试问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |