关于static的变量内存常驻

xiewen_kevin

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);
                }
});
3637 1 0
1个回答

walkor

你这个代码每次创建定时器都创建了一个匿名函数,每个匿名函数是独立的,所以不会共享。
 
把函数独立出来共用就好了。

$timer_id = Timer::add(1, 'my_func', );
function  my_func($timer_id) 
  {
        static $seconds = 0;
         $seconds ++;
    
        if ($seconds == 10) {
     
              var_dump('static:'.$seconds.PHP_EOL);
               
               Timer::del($timer_id);
       }
}
年代过于久远,无法发表回答
🔝