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”)?
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 declaracionesuse function
están importando las funciones incorporadasarray_pop
,dirname
,file_exists
,sprintf
,is_readable
eis_writable
al espacio de nombresSlim\Routing\RouteCollector
, lo que las hace disponibles para su uso directamente dentro de la clase sin ningún prefijo de espacio de nombres.