定时器内的定义的变量在定时器外如何访问

18829520602
Timer::add(1, function (){

    $res = Db::table("smart_timeTask")->select();

});

怎么访问$res

843 2 0
2个回答

2548a

建议保存到类属性上去.
也可以这样:

$res = [];
Timer::add(1, function ()use(&$res){

    $res = Db::table("smart_timeTask")->select();

});
  • 18829520602 2022-10-13

    你说的这个方法我之前就试了不行的,获取到的值是空对象

taozywu

你说的这个方法我之前就试了不行的,获取到的值是空对象

首先你的问题描述不够清楚

我们应该知道定时器一般放在onWorkerStart或在构造方法中,当你实例化的时候不会立即获取$res的值。怎么来获取呢

方法一

  1. 按照 2548a 说的增加一个类的属性,前提该类是全局能访问。
// $class 是全局类
$class->data = Db::table("smart_timeTask")->select();

// 使用方法
// 获取的时候可以先做下判断
if (isset($class->data)) {
    //获取值
}

方法二

  1. 借助redis,这个就不多说了。

方法三

  1. 按照 2548a 代码设定一个全局$res数组 + 引用方式
  • 暂无评论
年代过于久远,无法发表回答
×
🔝