Menu
Coddy logo textTech

Closures y 'use'

Parte de la sección Lógica y Flujo del Journey de PHP de Coddy — lección 2 de 68.

Por defecto, las funciones anónimas solo pueden acceder a las variables que se les pasan como parámetros. ¿Pero qué pasa si necesitas que tu closure acceda a una variable del ámbito circundante? Aquí es donde entra en juego la palabra clave use.

La palabra clave use permite que un closure "capture" variables de su ámbito padre y las use dentro de la función:

<?php
$message = "Welcome";

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

$greeting("Bob");  // Salida: Welcome, Bob!
?>

Observa cómo $message está definida fuera de la función, pero al incluir use ($message) después de la lista de parámetros, el closure puede acceder y usar esa variable. Puedes capturar múltiples variables separándolas con comas: use ($var1, $var2).

Esta característica hace que los closures sean mucho más potentes, permitiéndoles trabajar con datos de su contexto circundante mientras mantienen la flexibilidad de las funciones anónimas.

challenge icon

Desafío

Fácil

Crea una función anónima que capture un porcentaje de descuento del ámbito circundante utilizando la palabra clave use. La función debe tomar un precio como parámetro y devolver el precio final después de aplicar el descuento.

Recibirás dos entradas: el porcentaje de descuento y el precio original. Lee ambas entradas, crea un closure que capture el porcentaje de descuento, llama al closure con el precio y muestra el precio final después del descuento.

Formato de entrada: Dos líneas: la primera línea contiene el porcentaje de descuento (un número), la segunda línea contiene el precio original (un número que puede contener decimales)

Salida esperada: El precio final después de aplicar el descuento

Pruébalo tú mismo

<?php
// Leer las entradas
$discount = floatval(fgets(STDIN));
$price = floatval(fgets(STDIN));

// TODO: Crear una función anónima que capture el porcentaje de descuento usando 'use'
// La función debe tomar un parámetro de precio y devolver el precio final después del descuento


// TODO: Llamar al closure con el precio y almacenar el resultado


// Imprimir el precio final
echo $finalPrice;
?>
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo