Hi walkor,? 請問為什么靜態(tài)變量$seconds 放到定時器中聲明時,進(jìn)程中$seconds的值是不共享的? 我每次發(fā)一個請求時,$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);
? ? ? ? ? ? ? ? }
});
你這個代碼每次創(chuàng)建定時器都創(chuàng)建了一個匿名函數(shù),每個匿名函數(shù)是獨立的,所以不會共享。
?
把函數(shù)獨立出來共用就好了。
$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);
? ? ? ?}
}