匿名函数中的PHP变量


119

我在玩PHP中的匿名函数,并意识到它们似乎没有到达它们之外的变量。有什么办法可以解决这个问题?

例:

$variable = "nothing";

functionName($someArgument, function() {
  $variable = "something";
});

echo $variable;  //output: "nothing"

这将输出“无”。匿名函数有什么方法可以访问$variable

Answers:


277

是的,使用闭包

functionName($someArgument, function() use(&$variable) {
  $variable = "something";
});

请注意,为了使您能够$variable在匿名函数范围之外修改和检索修改后的值,必须在闭包中使用对其进行引用&


这是新的!这是PHP 5.3中的新语法。
火箭Hazmat

1
@Rocket因此,公平地说,是真正的匿名函数语法(与相对create_function()),并且该use关键字在描述它们的同一文档页面上被记录(不好)。
DaveRandom

4
对于那些可能不知道的人的快速注释:您可以&在传递对象时将其删除,因为它们始终是通过引用传递的……并且不要忘记您的类型提示:)例如:function() use (PDO $pdo) {
keyboardSmasher

@Alliswell不,仅适用于对象,否则您需要通过引用来修改变量。请参阅此示例
尼克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.