2011-11-14 62 views
0

我需要将结果保存在模型返回的控制器中。结果应该保存,以便我可以在不调用模型的情况下调用第二个时间控制器时使用这些数据。我不想将数据放入会话或memcache中。什么应该是最有效的方法呢?CodeIgniter中的静态变量

回答

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创建多个实例......

0

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

+0

感谢您的回复。你认为哪种选择最好是将大量数据存储到会话中,或者在每次调用时调用数据库? –

0

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

0

如果您的查询对所有用户都是通用的,那么您可以使用本机PHP APC缓存。给它一个密钥,并致电apc_add('myresult', $result);。您可以稍后使用apc_fetch('myresult');来获取该值。

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

为什么厌恶session或memcached?我很困惑你希望如何“保存”数据,但不希望使用两种非常好的技术来实现。