Замыкания и 'use'
Часть раздела Логика и управление потоком путешествия по PHP на Coddy — урок 2 из 68.
По умолчанию анонимные функции могут обращаться только к переменным, которые передаются им в качестве параметров. Но что, если вам нужно, чтобы ваше замыкание имело доступ к переменной из внешней области видимости? Здесь на помощь приходит ключевое слово use.
Ключевое слово use позволяет замыканию «захватывать» переменные из родительской области видимости и использовать их внутри функции:
<?php
$message = "Welcome";
$greeting = function($name) use ($message) {
echo $message . ", " . $name . "!";
};
$greeting("Bob"); // Выводит: Welcome, Bob!
?>Обратите внимание, как $message определена вне функции, но благодаря включению use ($message) после списка параметров, замыкание может получать доступ к этой переменной и использовать её. Вы можете захватывать несколько переменных, разделяя их запятыми: use ($var1, $var2).
Эта возможность делает замыкания гораздо более мощными, позволяя им работать с данными из окружающего контекста, сохраняя при этом гибкость анонимных функций.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Задание
ЛегкоСоздайте анонимную функцию, которая захватывает процент скидки из внешней области видимости с помощью ключевого слова use. Функция должна принимать цену в качестве параметра и возвращать итоговую цену после применения скидки.
Вы получите два входных значения: процент скидки и исходную цену. Прочитайте оба значения, создайте замыкание (closure), которое захватывает процент скидки, вызовите замыкание с параметром цены и выведите итоговую цену после скидки.
Формат входных данных: Две строки — первая строка содержит процент скидки (число), вторая строка содержит исходную цену (число, которое может содержать десятичные знаки).
Ожидаемый результат: Итоговая цена после применения скидки.
Шпаргалка
Ключевое слово use позволяет замыканиям захватывать переменные из их родительской области видимости:
<?php
$message = "Welcome";
$greeting = function($name) use ($message) {
echo $message . ", " . $name . "!";
};
$greeting("Bob"); // Выводит: Welcome, Bob!
?>Вы можете захватывать несколько переменных, разделяя их запятыми: use ($var1, $var2).
Попробуйте сами
<?php
// Чтение входных данных
$discount = floatval(fgets(STDIN));
$price = floatval(fgets(STDIN));
// TODO: Создайте анонимную функцию, которая захватывает процент скидки с помощью 'use'
// Функция должна принимать параметр цены и возвращать итоговую цену после скидки
// TODO: Вызовите замыкание с ценой и сохраните результат
// Вывод итоговой цены
echo $finalPrice;
?>В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутые функции
Анонимные функцииЗамыкания и 'use'Стрелочные функцииCallback-функцииИспользование 'call_user_func'Функции переменныхПередача по ссылкеРекурсивные функцииИтоги: ассорти из функций4Многомерные массивы
Создание 2D-массиваДоступ к элементам 2D-массиваИзменение элементов 2D-массиваИтерация с вложенными цикламиДвумерные ассоциативные массивыИтоги: Упражнение «Простая сетка»2Продвинутая работа с массивами
Добавление с помощью 'array_push'Удаление с помощью 'array_pop'Добавление с помощью 'array_unshift'Удаление с помощью 'array_shift'Слияние индексных массивовСлияние ассоциативных массивовИзвлечение с помощью 'array_slice'Поиск значений с 'in_array'Поиск ключей с 'array_search'Итоги: Упражнение «Плейлист»3Сортировка массивов
Сортировка индексных массивов по возрастаниюСортировка индексных массивов по убываниюСортировка ассоциативных массивов по значениюСортировка ассоциативных массивов по ключуСортировка в естественном порядкеПользовательская сортировка с помощью 'usort'Итоги: Сортировка таблицы лидеров