只调用一次方法
Calling a method only one time
我在自定义框架中工作。
我有一个 class:
<?php
class group extends \something\some
{
public function mymethod() {
//code
return $output;
}
public static who() {
//I've a DB query here returning an array
return $query-result;
}
}
然后在前端页面中我有:
$group = new group();
foreach ($users as $user) {
//mycode
$who = $group::who();
}
但是通过这种方式我生成了 num users x 1 queries,20 个用户 20 个查询。
我只能在 foreach 内部挂钩,然后我想知道如果我在 foreach 内部调用这个数组(who() 方法)是否有办法只获取一次。
您可以将数据库的结果保存在方法内的静态变量中(或在 class 中)。尚未加载时,您只需填充一次。任何未来的调用都将使用已经获取的数据。代码看起来像这样(来自 `static` keyword inside function? 的回答):
function doStuff() {
static $cache = null;
if ($cache === null) {
$cache = '%heavy database stuff or something%';
}
// code using $cache
}
我在自定义框架中工作。
我有一个 class:
<?php
class group extends \something\some
{
public function mymethod() {
//code
return $output;
}
public static who() {
//I've a DB query here returning an array
return $query-result;
}
}
然后在前端页面中我有:
$group = new group();
foreach ($users as $user) {
//mycode
$who = $group::who();
}
但是通过这种方式我生成了 num users x 1 queries,20 个用户 20 个查询。
我只能在 foreach 内部挂钩,然后我想知道如果我在 foreach 内部调用这个数组(who() 方法)是否有办法只获取一次。
您可以将数据库的结果保存在方法内的静态变量中(或在 class 中)。尚未加载时,您只需填充一次。任何未来的调用都将使用已经获取的数据。代码看起来像这样(来自 `static` keyword inside function? 的回答):
function doStuff() { static $cache = null; if ($cache === null) { $cache = '%heavy database stuff or something%'; } // code using $cache }