如何在PHP中使用匿名函数

4
阅读 PHP 中匿名函数文档后,我发现语法中有一些特别之处。
以下语句可以在一行中执行匿名函数,但我不明白为什么:
```php (function() { echo "Hello World!"; })(); ```
echo (function () {
     return 'hi';
})();

我理解这个函数返回一个字符串数据类型并echo它,但是我不确定匿名函数周围的()分隔符在做什么。有人能解释一下吗?


匿名函数可以跨越多行吗? - Phoenix
@Phoenix 这是什么意思?我不明白你的意思。 - MaximPro
匿名函数就像是一个函数的字面量。就像 int 字面量创建一个整数值一样,匿名函数创建一个函数对象,而不给它命名。 - Phoenix
2个回答

2
这是立即定义和调用函数的方法。虽然这只在PHP7+中支持。
对于PHP5.3+,另一种选择是:
call_user_func(function() {
    echo "Hi";
});

所以,如果你想即时定义一个函数并立即使用它 - 这就是正确的方式。

我可能没有表达清楚:我是在谈论这种类似于JavaScript的语法。请随意编辑我的回答,我的英语水平不太好。 - Georgy Ivanov

1
与其直接将值传递给一个方法,你可以创建匿名函数。
$example = array(1,2,3);
(function () use ($example) { return $example[0] -1; })();

"

()定界符在编程中类似于数学中的BODMAS,其中(4 * 2)+2将是10。您告诉编译器您想在执行之前设置闭包。

长版本如下:

"
$closure = function () { ....
$closure();

这适用于类实例和其他变化,例如:
(new Object)->method();

(首先执行此操作)在获得首先完成的结果后执行此操作。


不要添加新答案,根据http://php.net/manual/en/class.closure.php的说明,匿名函数会产生一个闭包对象,使其类似于`(new Object)()`。 - Jonnix
有趣的回答!!! 对于这段代码,你还能说些什么呢: echo "start".true ? "if" : "else"."end"; ///output "if" 当我写下这段代码时,下面这段代码是等价的:echo "start".(true ? "if" : "else")."end"; /// output "startifend" 需要解释说明。 - MaximPro
你正在将“start”输出为字符串,然后在true布尔值周围运行三元表达式,该表达式始终返回问号后面的内容,最后将一个结束字符串连接到它上面。第一行代码在一半处失败,因为你忘记在true表达式周围添加()分隔符 @MaximPro - Jaquarh
@KyleThomas那为什么我没有收到任何通知、警告或严重错误? - MaximPro
@KyleThomas 喜欢这样写 echo "start".((1 == 1) ? "if" : "else")."end" 吗? - MaximPro
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接