Pull to refresh

PHP, Closures, use & references

Reading time1 min
Views730
Хочу рассказать об одной особенности использования замыканий в PHP-5.3. Думаю, для многих она покажется очевидной, но тем не менее. Оказывается, используя use ($var1,..) — мы можем передавать переменные по ссылке: use (& $var1,..).

Пример, иллюстрирующий возможные варианты использования (и просьба не тыкать носом в array_sum() ;) ):
$rows = array(1, 2, 3);
$total =  0 ;
// Случай раз - use ($total) без ссылки
array_walk($rows, function($row) use ($total) {
        $total += $row;
});
echo "Total is $total\n";
// Случай два - use (& $total) по ссылке
array_walk($rows, function($row) use (& $total) {
        $total += $row;
});
echo "Total is $total\n";

На выходе получим:
Total is 0
Total is 6

Enjoy!
Tags:
Hubs:
Total votes 20: ↑18 and ↓2+16
Comments26

Articles