【问题标题】:Using lambda and closure together in PHP在 PHP 中同时使用 lambda 和闭包
【发布时间】:2015-03-08 15:17:30
【问题描述】:

我试图了解这两个 lambda 和闭包函数的用法。但不能正确理解。如果我能通过插图和细节理解它会很棒。

 $array = array(12345, 'abcde');
 $lambda = function($value) { return md5($value); };
 $closure = function($value) use ($lambda) {
 return 'MD5 Hash: ' . $lambda($value);//what is $lambda($value) here?
 };
 $result = array_map($closure, $array);


var_dump($result);
//array (size=2)
//0 => string 'MD5 Hash: 827ccb0eea8a706c4c34a16891f84e7b' (length=42)
//1 => string 'MD5 Hash: ab56b4d92b40713acc5af89985d4b786' (length=42)

【问题讨论】:

  • 听起来让事情变得过于复杂...... $lambda 是一个回调,它返回一个 md5 哈希值; $closure 是一个回调,它调用指定的回调(在本例中为 $lambda),并且只添加一些文本......对于这样的事情,它只是看起来毫无意义的开销,因为你可以简单地做 @ 987654322@直接
  • @Mark Ba​​ker 谢谢。但只是为了了解 $closure 中发生了什么?特别是在 $lambda($value) 中?
  • $result = array_map($closure, $array);为数组中的每个元素调用回调$closure$closure依次调用回调$lambda$lambda为其部分返回元素值的md5哈希,$closure 在将其作为修改后的元素值返回之前添加了一些文本

标签: php lambda closures


【解决方案1】:

可读的翻译版本希望它有助于更​​好地理解 lambdas(php 匿名函数)和闭包(可以访问变量的匿名函数)。

参考:http://php.net/manual/en/class.closure.php

<?php
    $array = array(12345, 'abcde');
    // Returns a value's md5.
    function getNonLambdaMd5( $value )
    {
        return md5($value);
    }

    // Pre-pends 'MD5 Hash: ' text to md5 values.
    function getNonClosureWrapperText( $value )
    {
        return 'MD5 Hash: ' . getNonLambdaMd5( $value );
    }

    // Array_Map replacer to loop through all values within the array.
    $iCountValues = count( $array );
    for( $i = 0; $i < $iCountValues; ++$i )
    {
        // Add each to the result.
        $result[] = getNonClosureWrapperText( $array[ $i ] );
    }

var_dump($result);
//array (size=2)
//0 => string 'MD5 Hash: 827ccb0eea8a706c4c34a16891f84e7b' (length=42)
//1 => string 'MD5 Hash: ab56b4d92b40713acc5af89985d4b786' (length=42)
?>

【讨论】:

  • @马克贝克。谢谢。
  • 这是理解@Vladimir Ramik 的一个非常全面的例子。感谢您的示例
猜你喜欢
  • 2013-11-24
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 2020-05-01
  • 1970-01-01
  • 2011-12-18
  • 2017-09-27
相关资源
最近更新 更多