Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Codeigniter控制器中重用类_Php_Oop_Codeigniter - Fatal编程技术网

Php 在Codeigniter控制器中重用类

Php 在Codeigniter控制器中重用类,php,oop,codeigniter,Php,Oop,Codeigniter,我正在编写我的第一个CodeIgniter应用程序(非常熟悉PHP,但不熟悉CI),并具有以下设置: 我有一个控制器,注册,控制注册过程。控制器的每个功能都是该过程的下一步。我有一个对象,Did,当前正在作为库加载。此对象的属性/变量会随着注册过程的进行而更新 我遇到的问题是,注册控制器的一个函数的属性不会传递到下一个函数。这就好像类是用每个函数重新构造的 有没有一种方法可以在整个控制器中重用类而不必重新实例化它?我也不希望序列化并存储在会话中 提前感谢。您遇到的问题是,您依赖于应用程序的内存状

我正在编写我的第一个CodeIgniter应用程序(非常熟悉PHP,但不熟悉CI),并具有以下设置:

我有一个控制器,注册,控制注册过程。控制器的每个功能都是该过程的下一步。我有一个对象,
Did
,当前正在作为库加载。此对象的属性/变量会随着注册过程的进行而更新

我遇到的问题是,注册控制器的一个函数的属性不会传递到下一个函数。这就好像类是用每个函数重新构造的

有没有一种方法可以在整个控制器中重用类而不必重新实例化它?我也不希望序列化并存储在会话中


提前感谢。

您遇到的问题是,您依赖于应用程序的内存状态,以便在不同的请求之间保持不变

您希望类在请求之间使用与
Did
对象相同的实例化

这不是PHP/HTTP的工作方式。每个请求都是单独处理的,并且是应用程序自己的实例。因此,每个请求都会创建一个新的
Did
对象

要持久化状态,您需要使用会话在请求之间传输信息,使用数据库处理持久化状态,或者两者的组合


一如既往,同一个问题有很多解决方案。如果它不适合您的实现,请忽略它

在对象中保留注册步骤是一个好主意-但是,每次加载新页面时,CI都会重建所有对象。为了使数据持久化,应该将其存储在会话中,但这并不意味着您必须在控制器中使用会话变量

如何将数据传输到应用程序?是通过表单还是ajax

一种方法是从会话中取消序列化对象,并将其作为对象存储在控制器的构造函数中。这样,您仍然可以对它运行$myObj->function(),并使用$myObj->save()函数重新序列化和存储它


希望有帮助

寻找会话和序列化。我不想使用会话变量,但看起来我可能不得不这样做。我正在通过表单将数据传输到应用程序,并提交到流程的下一步。没有想到在对象中有一个“save”函数。这可能行得通。谢谢。我在我的
Did
类中使用了工厂模式,并使用了一个使用Codeigniter会话类的保存函数。它成功了。谢谢你的引导。正确。我想我的问题是CodeIgniter是否创建了一个新对象,或者它是否允许实例持久化。这不是CodeIgniter的问题,PHP的核心和HTTP请求模型是每个请求都是独立的,没有任何东西将它们在会话外联系在一起,所以答案是没有PHP对象(成员)不要在请求之间自动保持。