如何在php的回调函数中传递参数?

马尔科

我有一个Repository类,其方法如下:

public function GetOne($id){
    $method = __METHOD__;
    $post = null;


    $post = $this->CacheManager($method, function($id) {
        return DB::select("select * from posts where id = ?", [$id]);
    });

    return $post;
}

我想缓存结果,但是在闭包/回调函数中,$ id参数不起作用。CacheManager是我在存储库中使用它的一个特征。

public function CacheManager($method, $fn) {
  $obj = null;

  if(!$this->HasCache($method)){
    $obj = $fn();
  }else {
    $obj = $this->GetCache($method);
  }

  return $obj;
}

我还有其他一些没有参数的方法,它们正在按预期方式工作。

GolezTrol

使用use:D

使用该use子句,您可以将变量从父作用域导入到函数的作用域中。

public function GetOne($id){
    $method = __METHOD__;
    $post = null;


    $post = $this->CacheManager($method, function() use ($id) {
        return DB::select("select * from posts where id = ?", [$id]);
    });

    return $post;
}

只是一个旁注。由于看起来您正在构建缓存机制,因此您还需要在缓存中包括ID。当前,您仅按进行检查$method,但是对于每个ID,您可能会有一个不同的缓存条目,该缓存条目可能存在或可能不存在。因此,我认为在您的函数中,您需要执行以下操作,以使缓存键更加唯一。我还可以将参数称为$method类似参数$cacheKey,因为不应将其本身链接到方法名称上。

$method = __METHOD__ . ";$id";

PHP 7.4更新:箭头函数

箭头功能RFC(又称“短闭包”)已通过投票。

使用这些参数时,您无需指定要关闭的参数,因为它们始终只能有一个表达式,因此,它们使用的任何表达式/值都可以(并将)取自父函数范围。

由于在这种情况下,匿名函数只有一个语句,因此可以将其重写为箭头函数。然后,对缓存管理器的调用将如下所示:

public function GetOne($id){
    $method = __METHOD__;
    $post = null;

    $post = $this->CacheManager($method, fn() => DB::select("select * from posts where id = ?", [$id]));

    return $post;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在PHP中传递带有ob_start参数的回调函数?

来自分类Dev

猫鼬如何在exec回调函数中传递额外的参数

来自分类Dev

如何在casperjs waitForSelector函数中将参数传递给成功回调?

来自分类Dev

如何在不访问Java母函数的情况下将参数传递给回调

来自分类Dev

Javascript:如何将参数传递给回调函数

来自分类Dev

jQuery回调函数-如何传递此参数

来自分类Dev

如何将参数传递给匿名回调函数?

来自分类Dev

如何将参数传递给回调函数内部

来自分类Dev

如何在JS中回调函数

来自分类Dev

将参数传递给JavaScript中的url回调函数

来自分类Dev

Firebreath-回调函数中的传递参数

来自分类Dev

如何在php中将正则表达式参数传递给preg replace回调?

来自分类Dev

如何在php中将正则表达式参数传递给preg replace回调?

来自分类Dev

如何将其他参数传递给node.js中的封装回调函数

来自分类Dev

如何将参数传递给Jquery中的回调函数?

来自分类Dev

如何将参数传递给 scipy.optimize.differential_evolution 中的回调函数

来自分类Dev

如何将任意参数传递给 RabbitMQ 中的回调函数?

来自分类Dev

在Python中,如何在线程回调中传递参数?

来自分类Dev

如何在array_map()中为回调函数使用参数/参数?

来自分类Dev

如何在flutter中将参数传递给回调?

来自分类Dev

React_Redux:在连续回调函数期间在回调中传递参数

来自分类Dev

如何在JavaScript中将变量传递给回调函数

来自分类Dev

如何在tkinter中传递来自回调函数的调用值

来自分类Dev

如何在 wordpress/woocommerce $tabs 回调函数中传递变量?

来自分类Dev

传递参数和回调函数

来自分类Dev

Node + 回调函数传递参数

来自分类Dev

将参数传递给回调函数

来自分类Dev

将参数传递给回调函数

来自分类Dev

将参数传递给回调函数

Related 相关文章

  1. 1

    如何在PHP中传递带有ob_start参数的回调函数?

  2. 2

    猫鼬如何在exec回调函数中传递额外的参数

  3. 3

    如何在casperjs waitForSelector函数中将参数传递给成功回调?

  4. 4

    如何在不访问Java母函数的情况下将参数传递给回调

  5. 5

    Javascript:如何将参数传递给回调函数

  6. 6

    jQuery回调函数-如何传递此参数

  7. 7

    如何将参数传递给匿名回调函数?

  8. 8

    如何将参数传递给回调函数内部

  9. 9

    如何在JS中回调函数

  10. 10

    将参数传递给JavaScript中的url回调函数

  11. 11

    Firebreath-回调函数中的传递参数

  12. 12

    如何在php中将正则表达式参数传递给preg replace回调?

  13. 13

    如何在php中将正则表达式参数传递给preg replace回调?

  14. 14

    如何将其他参数传递给node.js中的封装回调函数

  15. 15

    如何将参数传递给Jquery中的回调函数?

  16. 16

    如何将参数传递给 scipy.optimize.differential_evolution 中的回调函数

  17. 17

    如何将任意参数传递给 RabbitMQ 中的回调函数?

  18. 18

    在Python中,如何在线程回调中传递参数?

  19. 19

    如何在array_map()中为回调函数使用参数/参数?

  20. 20

    如何在flutter中将参数传递给回调?

  21. 21

    React_Redux:在连续回调函数期间在回调中传递参数

  22. 22

    如何在JavaScript中将变量传递给回调函数

  23. 23

    如何在tkinter中传递来自回调函数的调用值

  24. 24

    如何在 wordpress/woocommerce $tabs 回调函数中传递变量?

  25. 25

    传递参数和回调函数

  26. 26

    Node + 回调函数传递参数

  27. 27

    将参数传递给回调函数

  28. 28

    将参数传递给回调函数

  29. 29

    将参数传递给回调函数

热门标签

归档