为什么在PHP中将函数存储为变量?

18
我在php文档中看到过这种做法:
$foo = function() {
    echo 'foo';
}

$foo();

为什么不这样做呢:

而不是这样做呢:

function foo()
{
    echo 'foo';
}

foo();

9
请查看匿名函数 - Federkun
1
你可以这样做,以便你能够将该函数从一个对象传递到另一个对象... - Lix
有时候,匿名函数非常有用。例如,当您拥有一个表单并需要验证某些字段时。虽然您确定在任何其他地方都不会使用此功能,但需要传递可调用参数。在我看来,在这种情况下使用匿名函数是最好的选择。 - Eugene
除了将它们存储在变量中带来的便利之外,还有其他方便的优点。主要是用于避免在全局命名空间中混杂一次性回调函数。 - mario
3个回答

19
它们在一些方面很有用。个人使用它们是因为它们比实际函数更容易控制。
但是,匿名函数也可以做到这一点:
$someVar = "Hello, world!";
$show = function() use ($someVar) {
    echo $someVar;
}
$show();

匿名函数可以从外部作用域“导入”变量。最好的部分是,在循环中使用它是安全的(不像JavaScript),因为它会复制要与函数一起使用的变量,除非您明确告诉它通过use (&$someVar)按引用传递。

7
在循环中使用它的例子可能会有所帮助。 - Michael
如果你正在浏览以寻找最佳答案,我想说上面由@Laxus高赞的评论也非常有帮助(如果不是更有帮助)。 - cwd

4

0

在某些特定情况下,它非常有用。例如

Server::create('/')
    ->addGetRoute('test', function(){
        return 'Yay!';
})

上面的代码片段是一个基于REST的应用程序中简单路由的示例。


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