2011-10-25 17 views
6

私はこのようなコードを見てきました:スコープのPHP use()関数?

function($cfg) use ($connections) {} 

をしかしphp.netは、その機能に言及していないようです。私はそれがスコープに関連していると思いますが、どうですか?

答えて

8

useは機能ではなく、Closure syntaxの一部です。これは単に、外側のスコープの指定された変数をクロージャ内で使用できるようにします。例えば

$foo = 42; 

$bar = function() { 
    // can't access $foo in here 
    echo $foo; // undefined variable 
}; 

$baz = function() use ($foo) { 
    // $foo is made available in here by use() 
    echo $foo; // 42 
} 

:$ connections`は `null`なのでではないでしょう`ことに留意すべきである

$array = array('foo', 'bar', 'baz'); 
$prefix = uniqid(); 

$array = array_map(function ($elem) use ($prefix) { 
    return $prefix . $elem; 
}, $array); 

// $array = array('4b3403665fea6foo', '4b3403665fea6bar', '4b3403665fea6baz'); 
3

$connections親変数変数)をそのスコープ内で使用できるように匿名機能に指示しています。

なしでは、$connectionsは関数内では定義されません。

Documentation

+0

。無名関数のスコープに 'use($ connections)'で明示的にインポートされていなければ、未定義の変数になります。 –

+0

@IanGustafsonありがとう、私は答えを更新します。 – alex