Анонимные функции (или замыкания) в PHP - это функции без имени, которые можно присваивать переменным, передавать в качестве аргументов другим функциям или возвращать из других функций. В этом тренажере вы изучите синтаксис анонимных функций, их использование с замыканиями, передачу внешних переменных и другие возможности. Задания расположены от простого к сложному, начиная с базового синтаксиса и заканчивая продвинутыми техниками использования анонимных функций.
- Модуль 1: Основы синтаксиса PHP
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Модуль 4: Условные конструкции
- Модуль 5: Циклы
- Модуль 6: Массивы
- Индексированные массивы.
- Ассоциативные массивы.
- Многомерные массивы.
- Добавление элементов в массив.
- Удаление элементов из массива.
- Функция count().
- Функция array_push() и array_pop().
- Функция array_shift() и array_unshift().
- Функция array_merge().
- Функция array_slice().
- Функция array_splice().
- Функция in_array().
- Функция array_search().
- Функция array_keys() и array_values().
- Функция array_unique().
- Функция array_reverse().
- Сортировка: sort(), rsort().
- Сортировка: asort(), arsort().
- Сортировка: ksort(), krsort().
- Функция array_map().
- Функция array_filter().
- Функция array_reduce().
- Функция array_walk().
- Функция array_column().
- Деструктуризация массивов.
- Модуль 7: Функции
- Объявление функций.
- Вызов функций.
- Параметры функций.
- Возврат значений return.
- Значения параметров по умолчанию.
- Передача по значению.
- Передача по ссылке.
- Переменное количество аргументов.
- Оператор распаковки ....
- Типизация параметров.
- Типизация возвращаемых значений.
- Nullable типы.
- Union типы (PHP 8).
- Именованные аргументы (PHP 8).
- Анонимные функции.
- Стрелочные функции.
- Замыкания и use.
- Рекурсивные функции.
- Глобальные переменные в функциях.
- Статические переменные в функциях.
- Модуль 8: Работа со строками
- Одинарные и двойные кавычки.
- Экранирование символов.
- Heredoc и Nowdoc синтаксис.
- Функция strlen().
- Функция substr().
- Функция str_replace().
- Функция strpos() и strrpos().
- Функция explode() и implode().
- Функция trim(), ltrim(), rtrim().
- Функция strtolower() и strtoupper().
- Функция ucfirst() и ucwords().
- Функция str_repeat().
- Модуль 9: Суперглобальные переменные
- Модуль 10: Работа с формами
- Модуль 11: Работа с файлами
- Модуль 12: Дата и время
- Модуль 13: Регулярные выражения
- Модуль 14: Сессии и Cookie
- Модуль 15: Include и Require
- Модуль 16: Объектно-ориентированное программирование
- Модуль 17: Пространства имен
- Модуль 18: Обработка ошибок и исключений
- Модуль 19: Работа с JSON и XML
- Модуль 20: Работа с базами данных MySQLi
- Модуль 21: PDO - PHP Data Objects
- Модуль 22: Composer и зависимости
- Модуль 23: cURL и HTTP запросы
- Модуль 24: REST API
- Модуль 25: Безопасность
- Модуль 26: Генераторы и итераторы
- Модуль 27: Reflection API
- Модуль 28: Работа с изображениями
- Модуль 29: Отправка email
- Модуль 30: Паттерны проектирования
- Модуль 31: Тестирование
- Модуль 32: Продвинутые возможности PHP 8+
Создание простой анонимной функции
Заполните пропуски в коде, чтобы создать простую анонимную функцию, которая складывает два числа и возвращает результат.
$add = input1S($a, $b) {
input2S $a + $b;
};
$result = $add(5, 3);
echo $result; // Выведет: 8Передача анонимной функции в качестве аргумента
Заполните пропуски в коде, чтобы передать анонимную функцию в качестве аргумента другой функции.
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);Использование замыкания в анонимной функции
Заполните пропуски в коде, чтобы создать анонимную функцию с замыканием, которая запоминает значение из внешней области видимости.
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Найдите и исправьте ошибку в анонимной функции
В коде есть синтаксическая ошибка в объявлении анонимной функции. Найдите и исправьте её.
<?php $message = "Hello"; $greet = function($name) use ($message) { return $message . ", " . $name;} echo $greet("World");?>Что выведет этот код?
Предскажите, что выведет данный код с использованием анонимной функции.
$multiplier = 3;
$multiply = function($number) use ($multiplier) {
return $number * $multiplier;
};
$result = $multiply(5);
echo $result;Какой результат выполнения этого кода?
Введите, что выведет данный код с использованием анонимной функции.
$number = 10;
$changeNumber = function() use (&$number) {
$number = $number * 2;
};
$changeNumber();
echo $number;Соберите код для фильтрации массива
Соберите в правильном порядке строки кода, который использует анонимную функцию для фильтрации массива чисел, оставляя только четные.
$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;}Анонимные функции как значения в массиве
Заполните пропуски в коде, чтобы создать массив операций, где каждый элемент - анонимная функция, выполняющая определенную математическую операцию.
$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";Найдите ошибку в использовании use в анонимной функции
В коде есть ошибка в использовании конструкции use в анонимной функции. Найдите и исправьте её.
<?php $count = 0; $increment = function() use ($count) { $count++; return $count;}; echo $increment() . "\n"; // Выведет: 1echo $increment() . "\n"; // Выведет: 2echo $count; // Выведет: 0, но должно быть 2?>Что выведет этот код с рекурсивной анонимной функцией?
Предскажите, что выведет данный код с использованием рекурсивной анонимной функции для вычисления факториала.
$factorial = function($n) use (&$factorial) {
if ($n <= 1) {
return 1;
} else {
return $n * $factorial($n - 1);
}
};
$result = $factorial(5);
echo $result;Какой результат выполнения этого кода?
Введите, что выведет данный код с использованием анонимной функции, которая изменяет внешние переменные.
$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";