sábado, 15 de marzo de 2008

Lo nuevo de PHP 5.3

La versión actual de PHP es la 5.2.5 y la siguiente versión próxima a ser liberada es la 5.2.6 que principalmente incluye parches que resuelven bugs y problemas seguridad.

Sin embargo, desde hace varios meses se está trabajando en la versión 5.3 que incorporará nuevas funcionalidades que desde hace algún tiempo estaban siendo pedidas por parte de la comunidad. Esta nueva versión debiera ser publicada a mediados de 2008.


Namespaces (¡por fin!)
Sin duda el mayor cambio en esta nueva versión es el soporte a namespaces. Hasta ahora la técnica que se utilizaba para evitar la colisión de nombres era simplemente agregarle un prefijo al nombre de cada clase obteniendo nombres tan largos como: MDB2_Driver_Datatype_Common.

Algunas de las características de la implementación de namespaces son las siguientes:
  • Namespaces para clases, funciones y constantes.
  • Múltiples namespaces en un mismo archivo.
  • Se incorpora la constante __NAMESPACE__.
A continuación incluyo un ejemplo básico de cómo será el uso de namespaces en PHP 5.3:
<?php

namespace DB;
class MyDate {}
$clase1 = new MyDate();

namespace TYPES::BASIC;
class MyDate {}
$clase2 = new MyDate();

var_dump(
get_class($clase1),
get_class($clase2),
);

?>
La salida de este script es la siguiente:

string(10) "DB::MyDate"
string(20) "TYPES::BASIC::MyDate"
En el repositorio CVS de PHP podrán encontrar un README con más detalles de la implementación de namespaces.



Operador "?:"
Esta es otra funcionalidad que llevaba bastante tiempo siendo solicitada por algunos desarrolladores. Su utilidad es similar a la que presta el operador || en javascript, tal como muestro en el siguiente ejemplo donde se le asigna un valor por defecto a las variables width y height:
<script type="text/javascript">

function foo(width, height) {
width = width || 640;
height = height || 480;
// ...
}

</script>
En PHP podríamos hacer las siguientes validaciones:
<?php

$a = true ?: false; // true
$a = false ?: true; // true
$a = "" ?: 1; // 1
$a = 0 ?: 2; // 2
$a = array() ?: array(1); // array(1)
$a = strlen("") ?: strlen("a"); // 1

?>
Este ejemplo fue obtenido de http://ilia.ws

Como vemos no es una super-hiper-killer-funcionalidad, pero para los usuarios habituados a javascript es un placer contar con ella.



Otras mejoras
Otras mejoras -además de las habilituales correcciones de bugs, mejoras en seguridad y optimización de código- incluidas en PHP 5.3 son las siguientes:
  • Mejora en performance de md5().
  • Optimización de manejo de excepciones.
  • Nueva constante __DIR__. (esto nos evitará hacer dirname(__FILE__))
  • Nueva función mágina __callStatic() que complementa a __call().
  • El procesamiento de métodos estáticos se movió desde el tiempo de compilación a tiempo de ejecución (Late Static Binding).
  • Nuevo driver nativo de MySQL (MySQLnd) diseñado especialmente para PHP.
  • Soporte para archivos .ini (al estilo de .htaccess).
  • Nuevas funcionalidades de OpenSSL destinadas a simplificar las implementaciones de OpenID en PHP.
  • Profiling de XSLT. ($xsltprocessor->setProfiling("/tmp/profile.txt"));
  • Nueva constante de error E_DEPRECATED.
  • Garbage collector (gc_enable()).
  • NOWDOC, similar a los HEREDOC pero que no interpreta las variables como $myvar.

No hay comentarios: