2015-04-07 56 views
0

我的應用程序中有1個函數被多次調用。每次它返回相同的結果。在單個頁面上,它會被調用5到6次。有什麼辦法可以減少這些調用,比如將數據存儲在某個變量中,如果不是空的,則返回相同的值。PHP優化sql調用

希望有任何幫助。

下面是函數:

public function getResponse($connection) 
{ 
    $query="select * from test order by date DSC"; 
    $arr = $connection ->query($query); //fetch all the data from query     
    return $arr; 
} 
+0

你不能稱它爲5-6次?緩存結果相當簡單,那麼你究竟在問什麼? –

+0

從哪裏調用這個函數?從內部的PHP或AJAX? – niyou

+0

您已經回答了您自己的問題:-) – jeroen

回答

2

這聽起來像你希望是這樣的。

然而,你不應該緩存響應,你應該從響應中捕獲數據(行)。否則,你會遇到指針問題和其他問題。相反,請在結果行上進行任何數據轉換,並以類似的方式存儲它們。

private $_response_cache = null; 
public function getResponse($connection) 
{ 
    if (is_null($this->_response_cache)) 
    { 
     $query="select * from test order by date DSC"; 
     $this->_response_cache = $connection ->query($query); //fetch all the data from query     
    } 
    return $this->_response_cache; 
} 

如果你需要靜態,這裏...但更警告。靜態代碼在構造函數之外是有問題的,應謹慎使用。它與單元測試相結合,可能會造成奇怪的副作用 - 有一所大學建議不要使用它,儘管我沒有訂閱該學校,但我確實意識到使用不當會很容易而且很危險。

private static $_response_cache = null; 
public function getResponse($connection) 
{ 
    if (is_null(self::$_response_cache)) 
    { 
     $query="select * from test order by date DSC"; 
     self::$_response_cache = $connection ->query($query); //fetch all the data from query     
    } 
    return self::$_response_cache; 
} 
+0

嗨約翰,我不想要靜態變量。在你第一次狙擊。每當我創建類對象時,if條件總是會被執行。 – KishanR

+0

好吧,如果你創建10個實例,所有10個實例都必須運行它。這就是爲什麼我們必須靜態做到這一點。 –

2

如前所述,你已經回答了這個問題,但如果你是新來的PHP,那麼你使用如下代碼:

// define variable 
$response = null; 

// then everywhere you're currently calling it, you could use: 
$response = ($response == null) ? getResponse($conn) : $response; 

基本上這將檢查變量是否已經保存了從函數返回的值(即,它已被調用),如果是,則使用該值,否則調用函數並將返回的值存儲在變量$ response中。

希望這有助於:)