PHP:传递带有参数的函数作为参数
我不确定这个愚蠢的问题,但我问:
因此,如果有一个匿名函数,如果它已经存储了一个变量,我可以将它作为另一个匿名函数参数。
但是,在这种情况下,如果我在变量中只存储了一个函数,然后将第二个函数直接作为参数添加到其中,会怎么样?我可以向非存储函数添加参数吗?
第一个例子(这就是我的理解:)):
$func = function($str){ return $str; };
$func2 = function($str){ return $str; };
$var = $func($func2('asd'));
var_dump($var);
// prints out string(3) "asd"
这对我来说很有意义,但是下面的例子是什么?
$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?
*/
最后,有人可以推荐我一本书或一篇文章,从中我可以学习 php 的 lambda 编码功能吗?
I'm not sure that silly question, but I ask:
So, if there is an anonymous function I can give it as another anonymous functions parameter, if it has been already stored a variable.
But, whats in that case, if I have stored only one function in a variable, and add the second directly as a parameter into it? Can I add parameters to the non-stored function?
Fist example (thats what i understand :) ):
$func = function($str){ return $str; };
$func2 = function($str){ return $str; };
$var = $func($func2('asd'));
var_dump($var);
// prints out string(3) "asd"
That makes sense for me, but what is with the following one?
$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?
*/
And at the end, can someone recommend me a book or an article, from what i can learn this lambda coding feature of php?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
$func
只是返回其参数,因此:与以下内容相同:
匿名函数是 Closure 是一个实现细节 文档警告不要依赖。 Closure 没有什么特别的。它可以在常规 PHP 中实现,这要归功于
__invoke
魔术方法。在我的 PHP 5.3.2 安装中,Closure 有不同的表示形式。该参数用
“<可选>”
字符串标记。也许这是一个格式问题。$func
simply returns its argument, so:is the same as:
The fact that anonymous functions are instances of Closure is an implementation detail the docs warn against relying on. There's nothing special about Closure. It can be implemented in regular PHP thanks to the
__invoke
magic method.On my PHP 5.3.2 installation, Closure has a different representation. The parameter is marked with an
"<optional>"
string. Perhaps this is a formatting issue.首先,定义一个函数
$func
,它只返回第一个参数。所以 $var 变成function($str = "asd"){ return $str; }
。我可以推荐有关闭包和 lambda 函数的 IBM 文章 http://www.ibm.com/developerworks/opensource/library/os-php-5.3new2/index.html。
First you define a function
$func
which simply returns the first parameter. So $var becomesfunction($str = "asd"){ return $str; }
.I can recommend the IBM article about closures and lambda functions http://www.ibm.com/developerworks/opensource/library/os-php-5.3new2/index.html.
在第二个示例中,$func 只是返回通过参数设置的函数。
最简单的展示方式就是这样。
注意 $func 中“return $str”后面的 ()
回复评论:
In second example $func just returns the function set via parameters..
Easiest way to show you is this way..
Note the () after 'return $str' in $func
Reply to Comment:
使用 对象 “nofollow noreferrer">__invoke() 函数。
在第二个示例中,该对象作为参数传递。
并且由于 anonimimus 函数返回输入,因此 var_dump() 显示函数对象而不是结果。
太糟糕了,不支持链接(就像在 JavaScript 中一样)
可能会导致“测试”,但会生成 PHP 解析错误:语法错误,意外的“(”
Generates a Closure object with a __invoke() function.
This object is passed as a parameter in the second example.
And because the anonimimus function returns the input the var_dump() display the function object instead of the result.
Too bad chaining isn't supported (like in javascript)
Could result in "test" but generates a PHP Parse error: syntax error, unexpected '('