Menu
Coddy logo textTech

Замыкания и '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).

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

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

challenge icon

Задание

Легко

Создайте анонимную функцию, которая захватывает процент скидки из внешней области видимости с помощью ключевого слова 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;
?>
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком