CodeIgniter中的静态变量

时间:2011-11-14 11:16:19

标签: codeigniter codeigniter-2

我需要将结果保存在Model返回的控制器中。结果应保存在我可以在调用第二个时间控制器而不调用模型时使用此数据的方式。我不想把数据放在session或memcache中。应该最有效的方法是什么?

4 个答案:

答案 0 :(得分:1)

大多数以PHP开头的人都不会称之为“静态变量”。您是偶然从Java迁移的吗?如果你转向HTTP的无状态,这是一种范式转换 - memcached就是为此设计的(虽然我不确定APC或其他操作码缓存是什么)。基于Cookie的会话是为此设计的

如果您试图避免对同一请求重复查询,请依赖CI的查询缓存(以及您的数据库服务器的查询缓存),或使用PHP调用的“静态变量”:

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;
    }
}

如果查询可能返回空,您可能需要调整,但是您得到了重点。模型也有点不必要,因为我认为你不能通过CI_Loader创建多个实例...

答案 1 :(得分:0)

我认为你没有比使用数据库或会话更好的选择,或者你应该使用url-variables(这似乎不是一个好的解决方案)。你有没有考虑过使用Code igniter flash data? (但这也是基于会议)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果您的查询对所有用户都是通用的,则可以使用本机PHP APC缓存。给它一把钥匙并拨打apc_add('myresult', $result);。您可以稍后使用apc_fetch('myresult');来获取值。

如果这是大量数据,您可能希望再次从数据库中查找数据,或者使用会话,文件系统,apc,CI查询缓存或memcached的某种组合来缓存它。

为什么厌恶会话或memcached?我很困惑你期望“保存”数据,但不想使用两种非常好的技术来实现这一目标。