2011-08-05 12 views
1
function outer_function() { 
    $nid = 3; 

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

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

外部関数で定義された変数を使用してこの配列をフィルタリングしようとしていますが、変数は定義されていません。これはJSで動作します。私はここで間違って何をしていますか? PHPでこれをどのように達成するのですか?PHPでクロージャはどのように機能するのですか?

+0

http://www.php.net/manual/en/functions.anonymous.php –

+0

これはどのバージョンのPHPですか?少なくとも5.3? –

答えて

2

としてあなたは(正確に)これを記述することができます。あなただけの関数の名前を含む文字列を渡すことはできません

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/en/functions.anonymous.phpを参照してくださいを書くことができます。

+1

ちょっとした訂正...「使用」を忘れていませんか? $ exist = function($ var)use($ nid){... – laurac

+0

@lauracええ、あなたは正しいです、ありがとう –

+0

ああクールです。私は無名関数を使用しようとしましたが、使用部分を見逃しました。ありがとう。 – Joren

1

彼らは、彼らがどのように動作するかだドキュメント

をチェックし、無名関数と呼ばれています。

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() 
} 
関連する問題