Introduction
Closures let you create small functions inside other functions. Using 'use' helps these small functions remember variables from outside.
<?php $var = 'value'; $func = function() use ($var) { // code using $var }; ?>
<?php $message = 'Hello'; $sayHello = function() use ($message) { echo $message; }; $sayHello(); ?>
<?php $count = 0; $increment = function() use (&$count) { $count++; echo $count; }; $increment(); $increment(); ?>
<?php $greeting = 'Hi'; $greeter = function() use ($greeting) { echo "$greeting, friend!\n"; }; $greeter(); $number = 5; $addNumber = function($x) use ($number) { return $x + $number; }; $result = $addNumber(10); echo "10 + $number = $result\n"; ?>
use keyword do in a PHP closure?useuse keyword brings variables from the parent scope into the closure's scope so the closure can use them.$x by reference into a closure using use?&.use (&$x) where & is before the variable name with the dollar sign.$count = 0;
$func = function() use (&$count) { $count++; echo $count; };
$func();
$func();
echo $count;
&$count by reference, so changes inside affect the outside variable.$x = 5;
$func = function() use ($x) { $x++; echo $x; };
$func();
echo $x;
use ($x) passes $x by value, so closure gets a copy.$values = [1, 2, 3];
$sum = 0;
$funcs = [];
foreach ($values as $v) {
$funcs[] = function() use (&$sum, $v) { $sum += $v; };
}
foreach ($funcs as $f) { $f(); }
echo $sum;
Pass the test and this pattern moves unknown