Curiosidades sobre el código fuente de Symfony2
Hace cuatro años publicamos un artículo en el que mencionábamos las 20 funciones PHP más utilizadas en el código de Symfony 1. Después de todo este tiempo y con la nueva versión Symfony 2.1 recién publicada, hemos decidido volver a curiosear sobre las funciones PHP utilizadas en el código fuente de Symfony2.
Nuestro análisis se basa en todos los archivos PHP que se encuentran en el directorio vendor/
de una instalación estándar de Symfony 2.1. Esto significa que, además del núcleo de Symfony, se incluye el código de todos los componentes y librerías que forman el framework Symfony2: Twig, Monolog, Doctrine, SwiftMailer, etc.
Número total de funciones utilizadas
En la versión PHP 5.3 de nuestro servidor de pruebas, el lenguaje PHP tiene 1.575 funciones definidas, tal y como se puede comprobar con una llamada a la función get_defined_functions()
. De ellas, el código de Symfony2 utiliza 467 funciones diferentes. Así que Symfony 2.1 no utiliza el 70% de las funciones de PHP.
Las funciones más utilizadas
count()
, 1.806 vecessprintf()
, 1.610 vecessubstr()
, 536 vecesdirname()
, 500 vecesis_array()
, 500 vecesimplode()
, 483 vecesstrpos()
, 442 vecesstrtolower()
, 426 vecesget_class()
, 407 vecesclass_exists()
, 386 veces
Para comparar, en el año 2008 la lista de funciones más utilizadas del viejo Symfony 1 era:
isset()
, 1.083 vecessprintf()
, 729 vecescount()
, 515 vecessubstr()
, 372 vecesstrlen()
, 256 vecesis_null()
, 230 vecesis_array()
, 229 vecesdirname()
, 218 vecesempty()
, 213 vecesstrpos()
, 204 veces
Las funciones menos utilizadas
Existen decenas de funciones que sólo se llaman una vez en todo el código de Symfony 2.1. Como muchas de ellas están relacionadas, la siguiente lista agrupa algunas de ellas y muestra otras funciones que nos han parecido curiosas:
xml_xxx()
(xml_set_element_handler
,xml_set_object
,xml_set_character_data_handler
,xml_parser_create
, ...) Relacionadas con el procesamiento de archivos XML. Se utilizan sobre todo en el componente SwiftMailer.getmypid()
, devuelve el PID del proceso que está ejecutando PHP. Sólo se utiliza en un test de SwiftMailer.readline_xxx()
, que integran la libreríareadline
de GNU y se utilizan para proporcionar un historial de comandos en la shell de Symfony2 (accede a ella con el comandophp app/console --shell
).lchown()
, que cambia el usuario de un enlace simbólico y se utiliza en el componenteFilesystem
.php_uname()
, que proporciona información sobre el sistema operativo en el que está corriendo PHP y se utiliza en el componenteConsole
para detectar si estás ejecutando Symfony2 en un OS400.openlog()
,syslog()
ycloselog()
, que sirven para abrir, escribir y cerrar el archivo de log del servidor. Como era de esperar, se utilizan en el componente Monolog.crc32()
, calcula el código de redundancia cíclica de un valor (algo parecido a un primitivomd5()
) y se utiliza en Doctrine.array_product()
, que multiplica el valor de todos los elementos de un array. Se utiliza en Assetic.chunk_split()
, divide una cadena de texto en trozos más pequeños de la longitud deseada (a este tipo de funciones se les suele llamar word wrappers). Se utiliza por ejemplo para hacer que el contenido de los emails cumpla los estándares. No es de extrañar por tanto que se utilice en el componente SwiftMailer.compact()
, que es difícil de explicar con palabras, así que observa este ejemplo:$a = 3; $vars = compact('a'); // $vars ahora es array('a' => 3)
. A pesar de lo útil que es, sólo se utiliza una vez en el componenteTranslation
.hash_algos()
, devuelve la lista de algoritmos de codificación disponibles en tu sistema (md5, sha1, etc.) Se utiliza en el componente de seguridad.str_getcsv()
, parsea una línea en formato CSV y devuelve un array con un elemento por cada campo CSV. Se utiliza cuando el profiler guarda sus datos en un archivo (en formato CSV) en vez de en una base de datos.array_pad()
, aumenta el tamaño del array que le pasas hasta el tamaño que le indicas y lo rellena con el valor que le pasas. Sólo se utiliza en un test de Twig.strpbrk()
, devuelve el trozo de cadena que empieza en el carácter que le indicas ofalse
si no lo encuentra. Se utiliza en uno de los mensajes de error más populares de Symfony2: el del componente YAML que te dice que no puedes añadir tabuladores en un archivo YAML. Con esta función muestran el trozo de línea donde has escrito el tabulador.ngettext()
, la versión para plurales de la funcióngettext()
, que muestra la traducción de un texto al idioma actualmente seleccionado. Esta función es necesaria porque algunos idiomas tienen diferentes plurales en función de cuántos elementos sean. Por ejemplo en checo "2 ventanas" se dice "2 okna", pero "5 ventanas" se dice "5 oken". Esta función es imprescindible para el componente de traducción de Twig.
Cuando utilizas un framework como Symfony 2.1 que abstrae todas las partes del desarrollo de una aplicación, es fácil olvidar que todo el código corre sobre PHP. Tienes más de 1.500 funciones a tu disposición, así que no caigas en el error de programar algo que puede resolver una simple función PHP.
Comentarios
-
#1
que buena info Javier ...
Este artículo ya no permite añadir más comentarios.
¿Por qué? Los artículos cierran sus comentarios automáticamente
unos meses después de su publicación para asegurar que estos sigan
siendo relevantes.
Proyectos Symfony destacados
La forma más sencilla de generar el backend de tus aplicaciones Symfony. Ver más
Síguenos en @symfony_es para acceder a las últimas noticias.