我是codeigniter的新手。我有一点问题。比如,一个多次调用并具有复杂查询的函数。此函数将首次生成结果并将结果存储在变量中。当我调用此函数时,它将返回其存储的结果。 假设我有一个类似
public function add_sum(){
$a=2;
$b=3;
return c=$a+$b;
}
这个函数第一次会生成结果,第一次后我会调用这个函数。
$a=2;
$b=3;
return c=$a+$b;
此代码将不会执行。如果没有此块,它将返回 5。希望你们明白我的意思。调用函数是..
public function test(){
$this->add_sum();
}
谢谢。。。
会话不用于存储大量数据。实际上,根据您的系统,它可能会导致问题。饼干是类似的。
如果您的查询很大,但返回了一些小的东西,例如您建议的数字,那么将其存储在会话变量中是完全可以的。如果它返回像大数组这样的大东西,那么你可以考虑使用某种缓存机制。Codeigniter有一个内置的数据库缓存,我不一定相信它的方法。但是,如果您只想缓存一些查询,则通常是使用它的方式:https://www.codeigniter.com/user_guide/database/caching.html#function-reference 否则您可以在database.php
中打开数据库缓存(除非您完全了解后果,否则不要这样做(。
您可以考虑从文件中写入/读取结果,但您必须对其进行基准测试,以查看它是否比仅执行SQL操作更快。
现在回答您的具体问题:
public function test(){
if ($this->session->has_userdata('test_response')) {
return $this->session->test_response;
}
$sum = $this->add_sum();
$this->session->set_userdata('test_response', $sum);
return $sum;
}
如您所见,在第一次运行时,条件语句将评估为 false,add_sum
将运行,其内容将分配给会话变量。 在后续运行中,将立即从会话中检索此变量。