2015-04-07 31 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中。

希望这有助于:)