Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中通过回调更改数组_Php_Callback - Fatal编程技术网

在PHP中通过回调更改数组

在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

我有一个类WorkerPool,它的数组声明为

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进程间通信