CodeIgniter中的静态变量

CodeIgniter中的静态变量,codeigniter,codeigniter-2,Codeigniter,Codeigniter 2,我需要将结果保存在模型返回的控制器中。结果应该以这样一种方式保存:当第二次调用控制器时,我可以使用这些数据,而不必调用模型。我不想将数据放在会话或memcache中。最有效的方法应该是什么?我认为您没有比使用DB或会话更好的选择,或者您应该使用url变量(但这似乎不是一个好的解决方案)。你曾经考虑过使用吗?(但这也是基于会话的)CI有一个内置的查询缓存。您的代码仍将调用该模型,但不会查询数据库-它将从缓存文件夹中的文件中提取。如果您的查询对所有用户通用,则可以使用本机PHP APC缓存。给它一个

我需要将结果保存在模型返回的控制器中。结果应该以这样一种方式保存:当第二次调用控制器时,我可以使用这些数据,而不必调用模型。我不想将数据放在会话或memcache中。最有效的方法应该是什么?

我认为您没有比使用DB或会话更好的选择,或者您应该使用url变量(但这似乎不是一个好的解决方案)。你曾经考虑过使用吗?(但这也是基于会话的)

CI有一个内置的查询缓存。您的代码仍将调用该模型,但不会查询数据库-它将从缓存文件夹中的文件中提取。

如果您的查询对所有用户通用,则可以使用本机PHP APC缓存。给它一个键并调用apc_add('myresult',$result)。您可以稍后使用
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;
    }
}