簡體   English   中英

閉包如何在PHP中工作(如果有的話)?

[英]How do closures work in PHP (If at all)?

function outer_function() {
  $nid = 3;

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

    $a_filtered_array = array_filter($an_array, "exists");
}

我正在嘗試使用在外部函數中定義的變量來過濾此數組,但未定義該變量。 這將在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);
}

有關語法和語義的詳細信息 ,請參見http://www.php.net/manual/zh/functions.anonymous.php

它們稱為匿名函數 ,請檢查文檔

他們就是這樣工作的:

function outer_function()
{
   $nid = 3;

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

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

}

而且這種方法也可以在JS中工作
(並且實際上更清楚地說明了實際情況

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM