【问题标题】:Calling a method only one time只调用一次方法
【发布时间】:2019-09-24 04:20:48
【问题描述】:

我正在使用自定义框架。

我有一堂课:

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

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

【问题讨论】:

  • 除了语法错误,我不明白为什么你不能在foreach上面调用who()
  • 有一个挂钩系统,我可以使用它来扩展框架功能,并且在 foreach 之外没有挂钩。
  • 对我来说没什么意义,你不能在循环之外调用它。当你这样做时会发生什么?你甚至没有给who方法提供任何东西。
  • 我正在开发插件,但无法编辑框架文件。出于这个原因,我只能在有 HOOK 的循环内部进行挂钩。显然,如果我编辑框架文件并在 foreach 之外调用 who() 它可以工作,但我不能以这种方式编辑代码。
  • 我仍然没有看到钩子在显示的代码中以任何方式发挥作用。除非您使用//mycode 注释跳过的位与$group 一起做任何事情,否则根本没有理由不能将$who 行移到foreach 之外。除非foreach 循环本身在您无法编辑的框架文件中?似乎并非如此,因为那是您表明您拥有“我的代码”的地方。也许显示更多代码会有所帮助?这当然不是 MCVE。

标签: php php-7


【解决方案1】:

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

function doStuff() {
    static $cache = null;

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

    // code using $cache
}

【讨论】:

    猜你喜欢
    • 2014-06-07
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多