PHP:传递一个带参数的函数作为参数

Max*_*Ruf 2 php lambda

我不确定这个愚蠢的问题,但我问:
所以,如果有一个匿名函数我可以将它作为另一个匿名函数参数,如果它已经存储了一个变量.
但是,在这种情况下,如果我只在变量中存储了一个函数,并将第二个函数直接作为参数添加到其中?我可以在非存储函数中添加参数吗?

拳头的例子(这就是我的理解:)):

$func = function($str){ return $str; };
$func2 = function($str){ return $str; };
$var = $func($func2('asd'));

var_dump($var);
// prints out string(3) "asd"
Run Code Online (Sandbox Code Playgroud)

这对我来说很有意义,但是下面的是什么呢?

$func = function($str){ return $str; };
$var = $func(function($str = "asd"){ return $str; });

var_dump($var);

/** This prints out:
object(Closure)#1 (1) {
  ["parameter"]=>
  array(1) {
    ["$str"]=>
    string(10) ""
  }
}
But why?
*/
Run Code Online (Sandbox Code Playgroud)

最后,有人可以推荐我一本书或一篇文章,从我可以学习php的这个lambda编码功能?

Mat*_*hen 6

$func 只需返回其参数,所以:

$var = $func(function($str = "asd"){ return $str; });
Run Code Online (Sandbox Code Playgroud)

是相同的:

$var = function($str = "asd"){ return $str; };
Run Code Online (Sandbox Code Playgroud)

匿名函数是Closure实例的事实是文档警告不依赖的实现细节.Closure没什么特别之处.由于__invoke魔术方法,它可以在常规PHP中实现.

在我的PHP 5.3.2安装中,Closure具有不同的表示形式.参数标有"<optional>"字符串.也许这是格式化问题.

php > $func = function($str){ return $str; };
php > $var = function($str = "asd"){ return $str; };
php > var_dump($var);
object(Closure)#2 (1) {
  ["parameter"]=>
  array(1) {
    ["$str"]=>
    string(10) "<optional>"
  }
}
Run Code Online (Sandbox Code Playgroud)