次のように宣言された配列を持つクラス WorkerPool があります。
private $live_resources = array();
クラスには、特定の条件下で、このように配列にアイテムを追加するループがあります
$this->live_resources[$id] = 0;
この後、新しいプロセスとして開始されたワーカーがあります。ワーカーがタスクを完了すると、コールバック経由で live_fixture_processed() という WorkerPool のメソッドを呼び出します。コールバックは次のように定義されます。
$callback = array($this, 'live_fixture_processed');
次に、ワーカーでコールバックが呼び出されます
call_user_func($callback, $id);
このメソッドは、配列内の値を次のように変更します
$this->live_resources[$id] = 1;
次に、その配列を使用する別のメソッドを呼び出し、配列への変更が成功したように見えます。
その間、クラスはループを続け、しばらくすると $this->live リソース配列を使用するようになりますが、値は 0 に戻りました!
文字列変数も追加しました
private $called = ''
これはコールバックでも設定されますが、後続のループでも変更されていません。コールバックで使用されるプライベート変数のスコープに問題はありますか?