Замыкание (Closure) — это функция, которая запоминает значения из окружающей среды, даже когда она вызывается вне этой среды. То есть, замыкание запоминает значения переменных, функций и других объектов из того контекста, в котором оно было создано.
Замыкания в PHP являются мощным и универсальным инструментом, который позволяет создавать более гибкие и эффективные функции и объекты. Они также могут быть использованы для решения различных задач, таких как сохранение состояния объектов, обработка событий и реализация механизма отложенного выполнения кода.
Примеры использования замыканий в PHP
1. Замыкание, возвращающее функцию, которая умножает числа на заданное значение:
function multiplyBy( $number )
{
return function( $value ) use ( $number )
{
return $number * $value;
};
}
$double = multiplyBy(2);
$triple = multiplyBy(3);
echo $double(5);
// > 10
echo $triple(5);
// > 15
2. Замыкание, сохраняющее значение переменной и увеличивающее ее при каждом вызове:
function increment()
{
$count = 0;
return function() use ( &$count )
{
$count++;
echo "Текущее значение: $count\n";
};
}
$counter = increment();
$counter();
// > Текущее значение: 1
$counter();
// > Текущее значение: 2
$counter();
// > Текущее значение: 3
3. Замыкание, используемое для сортировки массива по определенному критерию:
$numbers = [ 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5 ];
usort( $numbers, function( $a, $b )
{
if( $a == $b )
{
return 0;
}
return ( $a < $b ) ? -1 : 1;
});
print_r( $numbers );
// > [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
4. Замыкание, используемое для реализации счетчика:
function getCounter()
{
$count = 0;
return function() use ( &$count )
{
$count++;
return $count;
};
}
$counter1 = getCounter();
$counter2 = getCounter();
echo $counter1();
// > 1
echo $counter1();
// > 2
echo $counter2();
// > 1
echo $counter2();
// > 2
5. Замыкание, используемое для создания кэша:
function createCache()
{
$cache = [];
return function( $key, $value = null ) use ( &$cache )
{
if( !isset( $cache[$key] ) )
{
$cache[$key] = $value;
}
return $cache[$key];
};
}
$cache = createCache();
echo $cache('foo', 42);
// > 42
echo $cache('foo');
// > 42
echo $cache('bar', 'hello');
// > 'hello'
echo $cache('bar');
// > 'hello'
Комментарии
0Нашли ошибку или хотите дополнить материал?