次のコードは、私が理解しようとしていることの簡単な例です。
コールバックを使用して複数のリクエストを処理する外部ライブラリを使用しています。最終的には、各配列要素をTest->inc()
呼び出す方法を理解しExternalLib
、すべてのコールバックが実行されるのを待ってから続行する方法を模索してきました。
ご覧のとおり、18行目の致命的なエラーは、を介して呼び出されたメソッドが原因call_user_func
です。どうすればこれを行うことができますか、またはおそらくより良い方法がありますか?
class Test {
public $a = array();
public function inc(array $ints){
$request = new ExternalLib();
foreach ($ints as $int) {
$request->increment($int);
}
while( count($this->a) < count($ints) ) {
usleep(500000);
}
$test->dump();
}
public function incCallback($in, $out) {
/* append data to Test class array */
$this->a[] = array($in => out); /* Fatal error: Using $this when not in object context */
}
public function dump() {
/* Print to screen */
var_dump($this->a);
}
}
class ExternalLib {
/* This library's code should not be altered */
public function increment($num) {
call_user_func(array('Test','incCallback'), $num, $num++);
}
}
$test = new Test();
$test->inc(array(5,6,9));
必要な出力:
array(3) {
[5]=>
int(6)
[6]=>
int(7)
[9]=>
int(10)
}
このコードはコードパッドでも入手できます