以下代码是我试图理解的简化示例。
我正在使用一个使用回调来处理多个请求的外部库。最终,我一直试图弄清楚如何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)
}
此代码也可在键盘上获得