Анонимные функции

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

Анонимные функции (или замыкания) в PHP - это функции без имени, которые можно присваивать переменным, передавать в качестве аргументов другим функциям или возвращать из других функций. В этом тренажере вы изучите синтаксис анонимных функций, их использование с замыканиями, передачу внешних переменных и другие возможности. Задания расположены от простого к сложному, начиная с базового синтаксиса и заканчивая продвинутыми техниками использования анонимных функций.

Список тем

Создание простой анонимной функции

id: 38997_task1

Заполните пропуски в коде, чтобы создать простую анонимную функцию, которая складывает два числа и возвращает результат.

Заполните пропуски
$add = input1S($a, $b) {
    input2S $a + $b;
};

 $result = $add(5, 3);
echo $result; // Выведет: 8
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Передача анонимной функции в качестве аргумента

id: 38997_task2

Заполните пропуски в коде, чтобы передать анонимную функцию в качестве аргумента другой функции.

Заполните пропуски
function processArray($array, $callback) {
    $result = [];
    foreach ($array as $item) {
        $result[] = input1S($item);
    }
    return $result;
}

 $numbers = [1, 2, 3, 4, 5];
 $squared = processArray($numbers, input2S($n) {
    return $n * $n;
});

print_r($squared);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Использование замыкания в анонимной функции

id: 38997_task3

Заполните пропуски в коде, чтобы создать анонимную функцию с замыканием, которая запоминает значение из внешней области видимости.

Заполните пропуски
function createCounter() {
    $count = 0;
    return input1S() input2S($count) {
        $count++;
        return $count;
    };
}

 $counter1 = createCounter();
echo $counter1() . "\n"; // Выведет: 1
echo $counter1() . "\n"; // Выведет: 2

 $counter2 = createCounter();
echo $counter2() . "\n"; // Выведет: 1
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Найдите и исправьте ошибку в анонимной функции

id: 38997_task4

В коде есть синтаксическая ошибка в объявлении анонимной функции. Найдите и исправьте её.

Найдите ошибку и исправьте
<?php
 $message = "Hello";
 $greet = function($name) use ($message) {
    return $message . ", " . $name;
}
 
echo $greet("World");
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Что выведет этот код?

id: 38997_task5

Предскажите, что выведет данный код с использованием анонимной функции.

Выберите правильный вариант ответа
$multiplier = 3;
 $multiply = function($number) use ($multiplier) {
    return $number * $multiplier;
};

 $result = $multiply(5);
echo $result;
Сообщения
Проверить
Показать подсказку

Какой результат выполнения этого кода?

id: 38997_task6

Введите, что выведет данный код с использованием анонимной функции.

Что должно получиться?
$number = 10;
 $changeNumber = function() use (&$number) {
    $number = $number * 2;
};

 $changeNumber();
echo $number;
Сообщения
Проверить
Показать подсказку

Соберите код для фильтрации массива

id: 38997_task7

Соберите в правильном порядке строки кода, который использует анонимную функцию для фильтрации массива чисел, оставляя только четные.

Перетяните в правильном порядке строки из одного блока в другой
$numbers = [1, 2, 3, 4, 5, 6];
 $evenNumbers = array_filter($numbers, function($num) {
    return $num % 2 == 0;
});
print_r($evenNumbers);
function filterEven($num) {
    return $num % 2 == 0;
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Анонимные функции как значения в массиве

id: 38997_task9

Заполните пропуски в коде, чтобы создать массив операций, где каждый элемент - анонимная функция, выполняющая определенную математическую операцию.

Заполните пропуски
$operations = [
    'add' => input1S($a, $b) {
        return $a + $b;
    },
    'subtract' => function($a, $b) {
        return $a - $b;
    },
    'multiply' => input2S($a, $b) {
        return $a * $b;
    }
];

 $result1 = $operations['input3S'](10, 5); // 15
 $result2 = $operations['subtract'](10, 5); // 5
 $result3 = $operations['multiply'](10, 5); // 50

echo "Add: $result1, Subtract: $result2, Multiply: $result3";
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Найдите ошибку в использовании use в анонимной функции

id: 38997_task10

В коде есть ошибка в использовании конструкции use в анонимной функции. Найдите и исправьте её.

Найдите ошибку и исправьте
<?php
 $count = 0;
 $increment = function() use ($count) {
    $count++;
    return $count;
};
 
echo $increment() . "\n"; // Выведет: 1
echo $increment() . "\n"; // Выведет: 2
echo $count; // Выведет: 0, но должно быть 2
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Что выведет этот код с рекурсивной анонимной функцией?

id: 38997_task11

Предскажите, что выведет данный код с использованием рекурсивной анонимной функции для вычисления факториала.

Выберите правильный вариант ответа
$factorial = function($n) use (&$factorial) {
    if ($n <= 1) {
        return 1;
    } else {
        return $n * $factorial($n - 1);
    }
};

 $result = $factorial(5);
echo $result;
Сообщения
Проверить
Показать подсказку

Какой результат выполнения этого кода?

id: 38997_task12

Введите, что выведет данный код с использованием анонимной функции, которая изменяет внешние переменные.

Что должно получиться?
$x = 10;
 $y = 20;

 $change = function() use ($x, &$y) {
    $x = $x + 5;
    $y = $y + 5;
    return $x + $y;
};

 $result = $change();
echo "Result: $result, X: $x, Y: $y";
Сообщения
Проверить
Показать подсказку
🚀 Визуализатор кода
0 / 0
Скорость:
Режим:
💡 Что происходит?
Загрузите пример для начала...
🤔
Проверка знаний
История шагов
Готов
НайтиКурс.Ру