A veces, en algunas bibliotecas como thephpleague/csv , veo la palabra clave use para importar identificadores centrales (por ejemplo, funciones, clases o constantes), pero no puedo entender por qué se importan.
Vea el siguiente ejemplo:
use Generator; use SplFileObject; use function filter_var; use function get_class; use function mb_strlen; use function rawurlencode; use function sprintf; use function str_replace; use function str_split; use function strcspn; use function strlen; use const FILTER_FLAG_STRIP_HIGH; use const FILTER_FLAG_STRIP_LOW; use const FILTER_SANITIZE_STRING;O más desde aquí .
Estas clases, funciones y constantes que se importan en este archivo pertenecen al núcleo de PHP, por lo que en realidad no necesitaríamos importarlas.
¿Por qué esta y otras bibliotecas importan estos?
Cuando estás en un espacio de namespace , cada nombre simple se refiere a un nombre dentro de ese espacio de nombres. Es decir:
namespace Foo; echo bar(); bar aquí realmente significa Foo\bar .
Hay reglas para los respaldos a los nombres globales si el nombre no existe dentro de este espacio de nombres. Si no quiere confiar en esas reglas, o si realmente tiene esos nombres definidos en su espacio de nombres y no quiere tener que escribir constantemente \bar() explícitamente, es cuando puede use explícitamente esos nombres globales para que quede claro que bar se refiere a \bar y no a Foo\bar .
Probablemente no sea necesario la mayoría de las veces para los nombres integrados de PHP, pero tal vez el autor del proyecto simplemente lo haya establecido como regla para evitar errores debido a la ambigüedad en la resolución del espacio de nombres.
El objetivo con esto es realizar una (micro) optimización del rendimiento, como se describe aquí . ( Enlace archivado , por si acaso).
La idea es que al evitar la búsqueda de nombres globales y omitir las reglas de respaldo , se puede obtener algo de rendimiento.
Tenga en cuenta que con cualquier carga de trabajo de la vida real, estas ganancias son insignificantes e intrascendentes, y en su mayoría se vuelven irrelevantes debido al almacenamiento en caché del código de operación. Sin embargo, la ganancia de rendimiento, por pequeña que sea, existe.
Puede leer una discusión larga e interesante sobre esto: