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

标签 php closures

我有一个闭包如下:

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

如何从 create 返回“调用的函数”?

最佳答案

这取决于闭包的实现,

举个简单的例子:

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

    return $returnable();
}

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

echo $value;
// Output: yello!

那么,这有什么用?

-- 有时您希望授予对象的客户端用户使用您的对象方法或属性而不对对象上下文产生任何影响的权力,您需要您的方法返回其他内容,同时您需要授予用户在您的对象/方法中执行某些操作的权限,可以说这是一种依赖注入(inject)。

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中array_map和array_walk内部函数的区别

array_walk :

Returns TRUE on success or FALSE on failure.

array_map :

Returns an array containing all the elements of array1 after applying the callback function to each one.

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

// imagined implementation of array_map
array function array_map(callable $callback, array $array)
{
    return $callback if true;
}

// imagined implementation of array_walk
array function array_walk(array $array, callable $callback)
{
    return true if true;
}

例如:

$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;

结论:-

这取决于函数/方法的实现。

关于php - 从闭包返回一个值到 main 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42764839/

相关文章:

java - 从 grails 闭包返回特定值

javascript - 需要一些帮助来理解 JS 模块模式的基础知识

使用 let/set 设置 "remember"值的方案函数

javascript - 无法在循环和 setInterval 上使用闭包

javascript - 获取不同名称的单选按钮的表单数据

javascript - 使用带有 AJAX 的 PHP 将 JS 变量插入 MySQL 表时出现问题

php - MySQL:标签功能的规范化和表连接

javascript - 这个 JavaScript 模式叫什么,为什么要使用它?

php - 使用PHP将PDF另存为blob吗?

php - Laravel Excel 验证