Nuevas características de PHP 5.3 (parte 1)
Hace unos meses salió la versión 5.3 de PHP y para buena noticia de todos los que ansiosamente esperamos la versión 6, esta versión incluye varias mejoras que originalmente estaban planeadas para la siguiente.
Este artículo describe brevemente esas nuevas características y proporciona ejemplos útiles para su uso. Lo que no incluye el artículo son instrucciones para instalar esta nueva versión. Pero si deseas descargarlo puedes seguir el siguiente enlace.
Espacios de nombres (Namespaces)
Antes de que PHP fuera orientado a objetos, los desarrolladores se veían obligados a utilizar funciones con nombres muy largos, esto para evitar conflictos con otras librerías. Por ejemplo, WordPress utiliza funciones como wp_update_post y wp_create_user. El prefijo wp_ indica que la función pertenece a la aplicación WordPress y reduce las posibilidades de conflicto con cualquier otra función existente.
<?php class Usuario { public function establecerDatos($propiedad, $valor); { ... } public function guardar() { ... } } $usuario = new Usuario(); $usuario->establecerDatos('nombre', 'José'); $usuario->guardar();
En el ejemplo anterior, el método guardar no tendría conflictos con otros métodos, ya que está contenido dentro de la clase Cliente. Sin embargo, qué pasaría si en alguna otra parte del sistema existiera otra clase llamada Usuario? Esto principalmente podría ocurrir al integrar diversas aplicaciones open source, ya que cada una de ellas cuenta con sus propias clases y funciones.
Para solucionar este problema, se introdujo la nueva palabra clave namespace. Modifiquemos el ejemplo anterior haciendo uso de la nueva palabra clave:
namespace MiEmpresa\Blog; class Usuario { public function establecerDatos($propiedad, $valor); { ... } public function guardar() { ... } } $usuario = new MiEmpresa\Blog\Usuario(); $usuario->establecerDatos('nombre', 'José'); $usuario->guardar();
A simple vista los beneficios podrían no parecer obvios, ya que podriamos haber utilizado MiEmpresa_Blog_Usuario. Sin embargo, ahora podemos crear otra clase Usuario que pertenezca al submódulo de CMS usando un espacio de nombres diferente:
namespace MiEmpresa\CMS; class Usuario { public function establecerDatos($propiedad, $valor); { ... } public function guardar() { ... } } $usuario = new MiEmpresa\CMS\Usuario(); $usuario->establecerDatos('nombre', 'José'); $usuario->guardar();
Por lo tanto, ahora podemos utilizar las clases
MiEmpresa\Blog\Usuario MiEmpresa\CMS\Usuario
La palabra clave use
Utilizar clases dentro de espacios de nombres aun resulta en tener que escribir mucho código, y si utilizas varias clases de un mismo espacio de nombres se vuelve peor. Para estos casos es que la palabra use es muy útil, ya que permite acortar un poco el código al momento de utilizar clases dentro de espacios de nombre.
<?php use MiEmpresa\Blog; $usuario = new Blog::Usuario(); $mensaje = new Blog::Mensaje();
Y también la puedes utilizar para definir directamente clases como se muestra a continuación:
<?php usr MiEmpresa\Blog\Usuario; $usuario = new Usuario();
Alias de espacios de nombres
Anteriormente es este artículo, había comentado que una ventaja de usar espacios de nombres es la posibilidad de definir más de una clase con el mismo nombre pero en diferentes espacios de nombre. Habrán ocasiones en las que ambas clases sean utilizadas en un mismo script. Para eso tenemos dos opciones, la primera sería importar ambos espacios de nombres como mostramos anteriormente, y la segunda opción sería mediante un alias, que nos permite identificar a cada una de las clases como se muestra a continuación:
<?php use MiEmpresa\Blog\Usuario as UsuarioBlog; use MiEmpresa\CMS\Usuario as UsuarioCMS; $usuario1 = new UsuarioBlog(); $usuario2 = new UsuarioCMS();
Constantes de clase
A partir de la versión 5.3 de PHP, las constantes pueden ser definidas a nivel de clase; es decir, pueden ser accesadas sin necesidad de instanciar un objeto de la clase. Es importante notar que las constantes están disponibles cuando se importan los espacios de nombre, pero no pueden ser importadas directamente. En el ejemplo siguiente se muestra más claramente:
<?php namespace MiEmpresa; class Blog { const VERSION = '1.0'; } echo MiEmpresa\Blog::VERSION; // CORRECTO: imprimirá el valor 1.0 use MiEmpresa\Blog; echo Blog::VERSION; // CORRECTO: imprimirá 1.0 use MiEmpresa\Blog::VERSION as VersionBlog; echo VersionBlog; // INCORRECTO: no imprimirá el valor esperado
Funciones en espacios de nombre
El uso de métodos estáticos en clases ha ocasionado que las funciones sean algo del pasado. Sin embargo, si por alguna razón necesitaras hacer uso de una función en tu código, estas también serán afectadas por el espacio de nombre. Por ejemplo:
<?php namespace Funciones; function imprimir() { ... } imprimir(); // Para llamarla dentro del mismo espacio de nombres no hay que hacer nada en especial <?php require 'funciones.php'; Funciones\imprimir(); // Para llamarla desde otro lugar sí es necesario especificar el espacio de nombres.
Hasta aquí llegamos con este análisis de las nuevas características de la versión 5.3 de PHP. En una siguiente entrega analizaremos las otras mejoras.
Etiquetas: PHP
23/10/2009 a las 4:34 pm
[...] This post was mentioned on Twitter by Webmancers Studio, PHP Programming. PHP Programming said: RT @webmancers: Nuevas características de PHP 5.3 (1) http://bit.ly/3gbCMb [...]