在PHP中通过回调更改数组
我有一个类WorkerPool,它的数组声明为在PHP中通过回调更改数组,php,callback,Php,Callback,我有一个类WorkerPool,它的数组声明为 private $live_resources = array(); 在类中有一个循环,在特定条件下,它向数组中添加一个项,如下所示 $this->live_resources[$id] = 0; $this->live_resources[$id] = 1; 在此之后,将有一个工作进程作为新进程启动。工人完成任务后,通过回调调用WorkerPool上名为live_fixture_的方法。回调被定义为 $callback = ar
private $live_resources = array();
在类中有一个循环,在特定条件下,它向数组中添加一个项,如下所示
$this->live_resources[$id] = 0;
$this->live_resources[$id] = 1;
在此之后,将有一个工作进程作为新进程启动。工人完成任务后,通过回调调用WorkerPool上名为live_fixture_的方法。回调被定义为
$callback = array($this, 'live_fixture_processed');
然后,调用worker中的回调
call_user_func($callback, $id);
此方法更改数组中的值,如下所示
$this->live_resources[$id] = 0;
$this->live_resources[$id] = 1;
然后它调用使用该数组的另一个方法,对该数组的更改看起来已经成功
与此同时,该类继续循环,过了一段时间,它开始使用$this->liveresources数组,但该值已恢复为0
我还添加了一个字符串变量
private $called = ''
这也在回调中设置,但在随后的循环中也没有更改。回调中使用的私有变量的范围有问题吗?简短回答:我不能这样做 详细回答:我忘记了worker实际上是workerpool运行进程的一个单独的物理进程。我所做的可能看起来是可行的,但这是因为当子进程从池进程派生出来时,它包含了原始父进程的所有代码,但它现在只运行自己的事件循环。如果我需要子进程向父workerpool进程传递的不仅仅是一个简单的退出信号,那么我必须使用某种形式的IPC进程间通信