闭包在PHP中是如何工作的(如果有的话)?

闭包在PHP中是如何工作的(如果有的话)?,php,Php,我试图使用在外部函数中定义的变量筛选此数组,但未定义该变量。这将在JS中工作。我做错了什么?我如何在PHP中实现这一点?您可以(正确地)将其写成: 不能只传递包含函数名的字符串。你也可以写 function outer_function() { $nid = 3 $a_filtered_array = array_filter($an_array, function ($var) use ($nid) { print $nid; return $va

我试图使用在外部函数中定义的变量筛选此数组,但未定义该变量。这将在JS中工作。我做错了什么?我如何在PHP中实现这一点?

您可以(正确地)将其写成:

不能只传递包含函数名的字符串。你也可以写

function outer_function() {
  $nid = 3

    $a_filtered_array = array_filter($an_array, function ($var) use ($nid) {
        print $nid;
        return $var->nid == $nid;
    });
}

有关语法和语义的详细信息,请参阅。

它们被称为匿名函数,请查看文档

这就是它们的工作原理:

function outer_function() {
  $nid = 3
  $exists =  function ($var) use ($nid) {
        print $nid;
        return $var->nid == $nid;
    }
    $a_filtered_array = array_filter($an_array, $exists);
}
这种方法在JS中也会起作用
(实际上更明确地说明了引擎盖下到底发生了什么)


这是什么版本的PHP?至少5.3?稍微修正一下。。。你不是忘了“使用”吗$存在=函数($var)使用($nid){…啊,太酷了。我试着使用匿名函数,但错过了使用部分。谢谢。废话。我刚刚发现我正在使用的服务器使用5.2。有些东西,不支持匿名函数。有什么建议吗?@Joren不要使用匿名函数:)没有匿名函数,使用PHP很容易,你只需要避免使用任何高阶函数例如
array\u map()
array\u filter()
。如果您真的想使用它们,您可能可以安装更新版本的PHP。
function outer_function() {
  $nid = 3
  $exists =  function ($var) use ($nid) {
        print $nid;
        return $var->nid == $nid;
    }
    $a_filtered_array = array_filter($an_array, $exists);
}
function outer_function()
{
   $nid = 3;

   $x=function ($var) {
     print $nid;
     return $var->nid == $nid;
   }; 

   $a_filtered_array = array_filter($an_array, $x);

}
function x() {
  var w=function() {alert("foo")}
  w()
}