等待对象实例的php回调函数返回值
我有以下函数实例化对象并运行其方法。 我想返回$to_return
但问题是即使函数使用'use'关键字, $to_return
也不会改变。 这是功能:
function some_function($arg){
$to_return = false;
$object = new Object;
$to_return = $object->METHOD(function($callback) use ($to_return){
$to_return = $some_var;
});
$to_return = $object->runMETHOD("some_arg");
return $to_return;
}
所以,基本上:
$to_return
总是为false some_function
返回$ some_var 总之:如何让some_function返回对象方法内部改变的对象?
所有你想念的是表明$to_return
应该通过引用传递:
function($callback) use (& $to_return)
也是3v4l上工作示例的示例:https://3v4l.org/Vfp70
我不是内部专家,但是长篇短小的原语在您将它们传递给某个地方时会“复制”,因此您在回调中设置的内容不会转移到外部。 另一方面,对象的行为与您的预期相同,因为指向对象的指针被传递并且原始实例被修改。 使用甚至普通的stdClass
作为这样的转运器也可以工作,如本3v4l所示:https://3v4l.org/m9jJ3
@malarzm使用给定的解决方案但是,也不要将函数分配给$ to_return(反正没有结果)
所以,而不是
$to_return = $object->METHOD(function($callback) use ($to_return)
使用:
$object->METHOD(function($callback) use (&$to_return)
在这里使用它之前,你也覆盖了同一个变量:
$to_return = $object->runMETHOD("some_arg");
所以你可能想把该方法的返回值赋给一个不同的变量。
链接地址: http://www.djcxy.com/p/34249.html上一篇: Wait for php callback on object instance and return value on function
下一篇: Cross compiled C Windows libcurl doesn't get linked correctly on Ubuntu