2011-08-16 12 views
4

次の例では、匿名関数内から 'str'値にアクセスできますか?PHP:連想配列内の匿名関数は、配列の他のメンバーにアクセスできますか?

$foo = array(
    'str' => 'THIS IS A STRING', 
    'fn' => function() { 
    // is it possible from within here to access 'str'? 
    } 
); 
+0

'$ foo ['str']'に直接アクセスできませんか? (私は現在、クローズ可能なバージョンのPHPをテストしていません) – zneak

+0

いいえ、 '$ foo'は未定義です。 – nicknisi

+0

... '$ foo ['str']'に直接アクセスすることは可能です*下記の私の解決策を見てください: –

答えて

2

$fooは、グローバル名前空間で定義されている場合は、$GLOBALS['foo']['str']経由でアクセスすることができる(またはglobal $foo;構造を経由して、それを利用できるようにする)必要があります。それは(地元のVAR、パラメータ、メンバ変数、...)でない場合は、(参照として!)それを渡す必要が無名関数へ:

$foo = array(
    'str' => 'THIS IS A STRING', 
    'fn' => function() use(&$foo) { 
    echo $foo['str']; 
    } 
); 
+0

ありがとう! '$ GLOBALS ['foo'] ['str']' – nicknisi

+0

ローカル変数やメンバ変数の場合、 '$ GLOBAL'配列を使ってアクセスすることはできません。 – knittl

0

私は使用せずにこれを行うための別の方法を発見しましたグローバル変数:メソッドを持つ配列インデックスの通話を終了する奇妙な構文は括弧

<?php 

    $arr = array("a" => 12, 
       "b" => function($num) 
         { 
          $c = $num * 2; 
          return $c; 
         }); 

    echo $arr["b"]($arr["a"]); 
?> 

注意。 $arr["a"]をパラメータとして渡すことで、その値にアクセスすることができます(私も参照渡しできると思います)。あなたはこの方法は、それが動作しません括弧含まれていない場合は

$arr["b"](); 

:匿名関数に何を渡すためになかった場合

することは、あなたがこのようにそれを呼び出します。