PHP: Замыкание в PHP

Замыкание (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'

PHP просмотров: 91

Комментарии

Ваш комментарий будет первым.
Войдите, чтобы оставить комментарий.