30

I have seen code like this:

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

but php.net doesn't seem to mention that function. I'm guessing it's related to scope, but how?

hakre
  • 193,403
  • 52
  • 435
  • 836
kristian nissen
  • 2,809
  • 5
  • 44
  • 68

2 Answers2

48

use is not a function, it's part of the Closure syntax. It simply makes the specified variables of the outer scope available inside the closure.

$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
}

For example:

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

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

// $array = array('4b3403665fea6foo', '4b3403665fea6bar', '4b3403665fea6baz');
deceze
  • 510,633
  • 85
  • 743
  • 889
6

It is telling the anonymous function to make $connections (a parent variable) available in its scope.

Without it, $connections wouldn't be defined inside the function.

Documentation.

alex
  • 479,566
  • 201
  • 878
  • 984
  • 1
    It should be noted that `$connections` would not be `null`; it would be an undefined variable if it wasn't explicitly imported into the anonymous function's scope with `use ($connections)`. – Ian Gustafson Feb 12 '16 at 00:41