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.
Desafío
FácilCrea 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;
?>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
1Funciones avanzadas
Funciones anónimasClosures y 'use'Funciones de flechaFunciones callbackUso de 'call_user_func'Funciones variablesPaso por referenciaFunciones recursivasResumen: Miscelánea de funciones4Arreglos multidimensionales
Crear un arreglo 2DAcceder a elementos de un arreglo 2DModificar elementos de un arreglo 2DIterar con bucles anidadosArreglos asociativos 2DResumen: Ejercicio de cuadrícula simple2Manipulación avanzada de arrays
Agregar con 'array_push'Eliminar con 'array_pop'Agregar con 'array_unshift'Eliminar con 'array_shift'Fusionar arrays indexadosFusionar arrays asociativosExtraer con 'array_slice'Valores con 'in_array'Claves con 'array_search'Resumen: Ejercicio de Playlist3Ordenar Arrays
Ordenar arrays indexados de forma ascendenteOrdenar arrays indexados de forma descendenteOrdenar arrays asociativos por valorOrdenar arrays asociativos por claveOrdenación por orden naturalOrdenación personalizada con 'usort'Resumen: Ordenar tablas de clasificaciónPractica por tu cuenta: Compilador de PHP online