等待对象实例的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