文字很长,问题实际上很简单,用粗体写。另一个文本仅用于解释问题。
我最近开始使用CodeIgniter来开发我的网站。目前,我正在编写一个侧边菜单,您可以在其中过滤视图中显示的项目(基本电子商务功能)。
我的想法是在我的Shop-controller中有一个数组,我存储我的过滤值,这些过滤值传递给我的过滤器视图,因此过滤器菜单可以处理几种类型的过滤器。
问题是,每次调用控制器时,似乎都会运行控制器的构造函数。我认为控制器只在用户进入网站时构建一次。我是网站开发的新手,主要是一个C ++的家伙,所以这对我来说似乎有点奇怪。
我的问题实际上很简单:每次调用控制器函数时都会创建控制器实例吗?否则,我在做什么错误导致在每次控制器调用时重新实例化控制器实例...
我希望我的问题不会太模糊。对我来说,了解CodeIgniter的生命周期行为对于找到一个简单的解决方案非常重要。我想避免使用$ _SESSION,因为我想使用类似OOP的解决方案。
答案 0 :(得分:3)
控制器是真的吗? 每次调用a时都会创建一个实例 控制器功能?不然,什么 我做错了导致 控制器实例 在每个控制器上重新实例化 调用..
是的,每次调用该控制器时都会重新实例化控制器实例。在CodeIgniter中,对于与您的应用程序交互的每个用户而言,没有控制器的持久实例(与C ++中构建的单用户应用程序不同)。您所拥有的是会话管理,您可以使用会话变量将持久数据存储在用户浏览器和Web服务器(more)之间的特定会话中。另一种方法是使用cookie。我个人更喜欢会话而不是cookie。
对于过滤器使用$ _SESSION没有任何害处,并且它不符合OOP原则。重要的是在控制器实例加载后如何使用存储在Session变量中的数据(这就是OOP概念发挥作用的地方)。
答案 1 :(得分:0)
private $instance;
function init_model() {
if ($this->instance === NULL) {
$this->instance = array();
}
return $this->instance;
}
一旦init_model退出,类实例就会被销毁,所以$ instance将始终初始化为一个新数组()?