CodeIgniter中的静态变量
我需要将结果保存在模型返回的控制器中。结果应该以这样一种方式保存:当第二次调用控制器时,我可以使用这些数据,而不必调用模型。我不想将数据放在会话或memcache中。最有效的方法应该是什么?我认为您没有比使用DB或会话更好的选择,或者您应该使用url变量(但这似乎不是一个好的解决方案)。你曾经考虑过使用吗?(但这也是基于会话的)CI有一个内置的查询缓存。您的代码仍将调用该模型,但不会查询数据库-它将从缓存文件夹中的文件中提取。如果您的查询对所有用户通用,则可以使用本机PHP APC缓存。给它一个键并调用apc_add('myresult',$result)代码>。您可以稍后使用CodeIgniter中的静态变量,codeigniter,codeigniter-2,Codeigniter,Codeigniter 2,我需要将结果保存在模型返回的控制器中。结果应该以这样一种方式保存:当第二次调用控制器时,我可以使用这些数据,而不必调用模型。我不想将数据放在会话或memcache中。最有效的方法应该是什么?我认为您没有比使用DB或会话更好的选择,或者您应该使用url变量(但这似乎不是一个好的解决方案)。你曾经考虑过使用吗?(但这也是基于会话的)CI有一个内置的查询缓存。您的代码仍将调用该模型,但不会查询数据库-它将从缓存文件夹中的文件中提取。如果您的查询对所有用户通用,则可以使用本机PHP APC缓存。给它一个
apc_fetch('myresult')获取该值代码>
如果这是大量数据,您可能希望再次从数据库中查找它,或者使用会话、文件系统、apc、CI查询缓存或memcached的组合来缓存它
为什么厌恶会话或memcached?我不明白您希望如何“保存”数据,但我不想使用两种非常好的技术来做到这一点。大多数从PHP开始的人都不会将这些称为“静态变量”。您是偶然从Java迁移过来的吗?如果您切换到HTTP的无状态状态,这是一个范例的转变——memcached就是为此而设计的(尽管我不确定APC或其他操作码缓存是不是)。基于Cookie的会话就是为此而设计的
如果您试图避免对同一请求重复查询,请依赖CI的查询缓存(以及您的数据库服务器的查询缓存),或者使用PHP所称的“静态变量”:
如果查询可能返回空,您可能必须进行调整,但您得到了要点。对于模型来说,这也有点不必要,因为我认为您无论如何都不能通过CI_加载程序创建多个实例…谢谢您的回复。你认为最好的选择是把大数据存储到会话中,还是在每次调用时调用DB?
class Some_model extends CI_Model {
protected static $some_result;
public function getResult()
{
if (empty(self::$some_result))
{
self::$some_result = $this->db->get('table')->result();
}
return self::$some_result;
}
}