Menu
Coddy logo textTech

Closures e 'use'

Parte da seção Lógica & Fluxo do Journey de PHP da Coddy — lição 2 de 68.

Por padrão, funções anônimas só podem acessar variáveis que são passadas a elas como parâmetros. Mas e se você precisar que sua closure acesse uma variável do escopo circundante? É aqui que a palavra-chave use entra em cena.

A palavra-chave use permite que uma closure "capture" variáveis de seu escopo pai e as utilize dentro da função:

<?php
$message = "Welcome";

$greeting = function($name) use ($message) {
    echo $message . ", " . $name . "!";
};

$greeting("Bob");  // Saída: Welcome, Bob!
?>

Observe como $message é definida fora da função, mas ao incluir use ($message) após a lista de parâmetros, a closure pode acessar e usar essa variável. Você pode capturar múltiplas variáveis separando-as com vírgulas: use ($var1, $var2).

Este recurso torna as closures muito mais poderosas, permitindo que elas trabalhem com dados de seu contexto circundante enquanto ainda mantêm a flexibilidade das funções anônimas.

challenge icon

Desafio

Fácil

Crie uma função anônima que capture uma porcentagem de desconto do escopo circundante usando a palavra-chave use. A função deve receber um preço como parâmetro e retornar o preço final após a aplicação do desconto.

Você receberá duas entradas: a porcentagem de desconto e o preço original. Leia ambas as entradas, crie um closure que capture a porcentagem de desconto, chame o closure com o preço e imprima o preço final após o desconto.

Formato de entrada: Duas linhas - a primeira linha contém a porcentagem de desconto (um número), a segunda linha contém o preço original (um número que pode conter decimais)

Saída esperada: O preço final após a aplicação do desconto

Experimente você mesmo

<?php
// Lê as entradas
$discount = floatval(fgets(STDIN));
$price = floatval(fgets(STDIN));

// TODO: Crie uma função anônima que capture a porcentagem de desconto usando 'use'
// A função deve receber um parâmetro price e retornar o preço final após o desconto


// TODO: Chame a closure com o price e armazene o resultado


// Exibe o preço final
echo $finalPrice;
?>
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo