关于static的变量内存常驻

Hi walkor,  请问为什么静态变量$seconds 放到定时器中声明时,进程中$seconds的值是不共享的? 我每次发一个请求时,$seconds的初始值都是0。 如果我直接在onMessage里面声明$seconds = 0时,$seconds是共享的。如下:
 
$timer_id = Timer::add(1,
            function  () use( &$timer_id)
            {
                static $seconds = 0;
                $seconds ++;
    
                if ($seconds == 10) {
     
                    var_dump('static:'.$seconds.PHP_EOL);
               
                    Timer::del($timer_id);
                }
    });
已邀请:

walkor

赞同来自: xiewen_kevin

你这个代码每次创建定时器都创建了一个匿名函数,每个匿名函数是独立的,所以不会共享。
 
把函数独立出来共用就好了。
 
$timer_id = Timer::add(1, 'my_func', [&$timer_id ]);
function  my_func($timer_id) 
  {
        static $seconds = 0;
         $seconds ++;
    
        if ($seconds == 10) {
     
              var_dump('static:'.$seconds.PHP_EOL);
               
               Timer::del($timer_id);
       }
}

要回复问题请先登录注册