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.

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

La palabra clave use permite que una clausura «capture» variables de su ámbito superior y las use dentro de la función:

<?php
$message = "Welcome";

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

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

Observa cómo $message se define fuera de la función, pero al incluir use ($message) después de la lista de parámetros, el cierre puede acceder a esa variable y utilizarla. Puedes capturar varias 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 mediante la palabra clave use. La función debe recibir 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 una clausura que capture el porcentaje de descuento, llama a la clausura con el precio e imprime 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

Practica por tu cuenta: Compilador de PHP online