仅一次调用一个方法

时间:2019-05-06 14:00:15

标签: php php-7

我正在使用自定义框架。

我正在上课:

<?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个用户x 1个查询,其中有20个用户20个查询。

我只能在foreach内进行钩子,然后我想知道是否有一种方法只能将这个数组(方法who())抓取一次,如果我在foreach内调用它也可以。

2 个答案:

答案 0 :(得分:1)

您可以将数据库中的结果保存在方法(或类)中的静态变量中。尚未加载时,只需填充一次。以后的任何调用都将使用已经获取的数据。代码看起来像这样(来自`static` keyword inside function?的答案):

function doStuff() {
    static $cache = null;

    if ($cache === null) {
        $cache = '%heavy database stuff or something%';
    }

    // code using $cache
}

答案 1 :(得分:-1)

我不确定这是最好的方法,但是对于从前端静态调用框架控制器函数如此坚持,您最好的方法是在foreach循环上方(在前端)添加变量或添加数组,然后将其设置为静态函数调用。再说一次,不是我的方式,但是可以解决您的问题。

$group = new group();
$someVariable = '';
foreach ($users as $user) {
      $someVariable = $group::who();
}