Fab*_*ien 4 php scope callback
class myClass {$ myVariable ='myCallback';
function myFunction() {
$body = false;
$callback = $this->myVariable;
function test($handle, $line) {
global $body, $callback;
if ($body) {
call_user_func($callback, $line);
}
if ($line === "\r\n") {
$body = true;
}
return strlen($line);
}
...
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'test');
...
}
}
function myCallback($data) {
print $data;
}
$myCls = new myClass();
$myCls->myFunction();
Run Code Online (Sandbox Code Playgroud)
警告:call_user_func()[function.call-user-func]:第一个参数应该是一个有效的回调!
我的$回调值为空,如何解决此问题?限制:myCallback功能无法更改!
Fel*_*ing 10
重要提示:这仅适用于PHP> = 5.3.OP不使用PHP 5.3,但我会在这里留下答案,以防有人遇到类似问题并使用PHP 5.3.
$callback不是全局变量,它在方法范围内是本地的.从文档:
闭包还可以从父作用域继承变量.必须在函数头中声明任何此类变量.从父作用域继承变量与使用全局变量不同.全局变量存在于全局范围内,无论执行什么功能,它都是相同的.闭包的父作用域是声明闭包的函数(不一定是从中调用它的函数).
利用use(并将函数赋值给变量):
$test = function($handle, $line) use ($callback, $body){
if ($body) {
call_user_func($callback, $line);
}
if ($line === "\r\n") {
$body = true;
}
return strlen($line);
};
Run Code Online (Sandbox Code Playgroud)
然后:
curl_setopt($ch, CURLOPT_WRITEFUNCTION, $test);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1106 次 |
| 最近记录: |