Php 从闭包返回一个值到main方法

Php 从闭包返回一个值到main方法,php,closures,Php,Closures,我的结论如下: public function create(){ DB::transaction(function(){ return 'function called' }); 如何从create返回“function called”?您可以将此值分配给主方法的变量: public function create(){ $var = null; DB::transaction(function() use (& $var){ $var=

我的结论如下:

public function create(){
   DB::transaction(function(){
       return 'function called'
   });

如何从
create
返回“function called”?

您可以将此值分配给主方法的变量:

public function create(){
  $var = null;
  DB::transaction(function() use (& $var){
     $var= 'function called';
     return $var;
  });
  return $var;
}

这取决于关闭的实施情况

举个简单的例子:

function transaction($inReturnable, $returnable)
{
    $inReturnable();

    return $returnable();
}

$value = transaction(function() {
    return 'hello!';
}, function() {
    return 'yello!';
});

echo $value;
// Output: yello!

那么,这有什么用处呢

--当您希望在不影响对象上下文的情况下,为对象的客户端用户提供使用某些对象方法或属性的权限时,您需要方法返回其他内容,同时您需要为用户提供在对象/方法内执行操作的访问权,可以说,这是一种依赖注入

function transaction($inReturnable, $returnable)
{
    $privateVariable = 'Hello';
    $inReturnable($privateVariable);

    return $returnable();
}

$value = transaction(function($privateVariable) {
    echo $privateVariable . "\n";
}, function() {
    echo $privateVariable; // Notice: Undefined variable: privateVariable
    return 'yello!';
});

echo $value;
// Output: Hello 
Notice: Undefined variable: privateVariable
yello!

这类实现的实例是
php

:

成功时返回TRUE,失败时返回FALSE

:

在应用后返回包含array1的所有元素的数组 将回调函数分配给每个函数

这有点像:下面只是一个伪代码

例如:

$array = [1,2,3];

$map = array_map(function($value) {return $value * 3;}, $array);

print_r($map);

$walk = array_walk($array, function($value, $key) {return $value * 3;});

// will return true
print_r($walk);

array_walk($array, function($value, $key) use (&$array) {return $array[$key] = $value * 3;});

print_r($array);
这将输出:

Array ( [0] => 3 [1] => 6 [2] => 9 )
1
Array ( [0] => 3 [1] => 6 [2] => 9 )

例如:要从回调内部获取值,可以通过引用将变量传递给回调,然后从闭包内部编辑其值,然后在闭包外部使用此变量,如下所示:

DB::transaction(function() use (&$return) {
    $return = 'some value!';
});
echo $return;

结论:-
这取决于函数/方法的实现。

是否可以执行类似于
return DB::transaction()
的操作?@Mehrdad是的,只需在代码中的
DB
之前添加
return
。这个答案也适用。罗马的两种方法。这取决于方法
DB::transaction()
是如何实现的。如果它返回闭包的返回值,那么它将工作。这不会工作,除非您通过引用传递
$var
变量。@OscarPérez我认为您的函数实现可能不会工作,
use
关键字将通过值传递
$var
,因此,在闭包上下文之外,这是不可编辑的。
DB::transaction(function() use (&$return) {
    $return = 'some value!';
});
echo $return;