Php y otras yerbas - Programación
Novedades para PHP 5.3: namespaces, closures, Phar
Julio 31st, 2008 - [Enlace local]
Traduzco literal de php.net:
La próxima versión de PHP 5.3 introduce algunas nuevas características mayores como namespaces, closures, bindings tardío estático, funciones de i18n, secciones en los archivos INI, y Phar entre otras
¿Qué tiene de importante esto? Varias cosas:
- Namespaces: Una de las peticiones más frecuentes para PHP 5 era la presencia de los namespaces. Una vez desechada para las primeras versiones de PHP5, creí que no lo vería hasta PHP 6, pero me equivoqué. La gran ventaja de los namespaces es que evita la colisión de nombres de clases al incorporar bibliotecas de proyectos distintos.
- closures: algo que siempre he extrañado en PHP, al trabajar en Ruby o Javascript, es el uso de las closures. Para aquellos que no las conozcan, un closure en una función en las cuales una o más variables dependen del contexto dentro del cual se llaman. Para los que trabajan con javascript, su uso más común es otorgar la funcionalidad para un callback. Por ejemplo, en jQuery es común la estructura:
$(".mis_objetos_clickeables").click(function() {alert(this)});Si se dan cuenta, el parámetro para la función "click" es la definión de una función, en la cual 'this' corresponde al objeto que fue clickeado. 'this' sería entonces la variable dependiente del contexto y se define al momento de hacer click en uno de los objetos - Phar: No sé si es bueno o malo esto para la comunidad PHPera, pero es el intento de utilizar algo similar a los JAR de Java, lo que permite encapsular una biblioteca o aplicación completa en un solo archivo.
¿Ven? Son grandes noticias. Lo que más me pone contento son las closures, ya que ahorran una gran cantidad de código y facilitaran mucho el trabajo con aquellas funciones que requieren callbacks, como usort. Por lo visto, quedara algo así como :
- $a = array(3, 2, 5, 6, 1);
- usort($a, function ($a,$b) {$a==$b ? 0:(($a<$b)?-1:1);});
Lo cual es mucho más sintético que:
- function cmp($a, $b)
- {
- if ($a == $b) {
- return 0;
- }
- return ($a < $b) ? -1 : 1;
- }
- $a = array(3, 2, 5, 6, 1);
- usort($a, "cmp");