我不确定这个愚蠢的问题,但我问:
所以,如果有一个匿名函数我可以将它作为另一个匿名函数参数,如果它已经存储了一个变量.
但是,在这种情况下,如果我只在变量中存储了一个函数,并将第二个函数直接作为参数添加到其中?我可以在非存储函数中添加参数吗?
拳头的例子(这就是我的理解:)):
$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编码功能?
$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)