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'
Комментарии