es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PHP | ¿Qué hace ‘use function function_name;’ (donde function es una función integrada de PHP)?

Me he topado con un código PHP que utiliza la palabra clave use de una manera ligeramente diferente a lo que he visto antes. En realidad, lo vi en el código fuente del framework Slim.

use function array_pop;    // --> confusión :/
use function dirname;      // --> confusión :/
use function file_exists;  // --> confusión :/
use function sprintf;      // --> confusión :/
use function is_readable;  // --> confusión :/
use function is_writable;  // --> confusión :/

El código fuente está en las líneas 24 a 29.

Sé que la palabra clave use se utiliza para incluir clases:

use Psr\Container\ContainerInterface; // --> clase
use Psr\Http\Message\ResponseFactoryInterface; // --> clase

O para agregar variables de ámbito externo al cierre de las funciones:

$array = array('foo', 'bar', 'baz');
$prefix = uniqid();

$array = array_map(function ($elem) use ($prefix) {  // -> aquí la palabra clave use está clara
    return $prefix . $elem;
}, $array);

Pero la palabra clave use en este caso, declarada en la parte superior del script y frente a las funciones, es realmente extraña, ¡además todas son funciones incorporadas?!

Pregunta

  • ¿Qué hace use function [nombre-función-incorporada] en PHP (PHP “ˆ7.4 || ˆ8.0”)?
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    En PHP 7.4 y 8.0, la declaración use function se utiliza para importar funciones incorporadas del espacio de nombres global al espacio de nombres actual. Esto permite utilizar las funciones sin necesidad de agregar un espacio de nombres o importarlas mediante un espacio de nombres completamente calificado. En el fragmento de código dado, las declaraciones use function están importando las funciones incorporadas array_pop, dirname, file_exists, sprintf, is_readable e is_writable al espacio de nombres Slim\Routing\RouteCollector, lo que las hace disponibles para su uso directamente dentro de la clase sin ningún prefijo de espacio de nombres.

Comments are closed.