2011-11-14 48 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?我很困惑你希望如何「保存」數據,但不希望使用兩種非常好的技術來實現。