Comparativa entre PHP 4 y 5.

PHPWikibookCover

Comparado con un lenguaje como Java, PHP4 implementa solo las características mas rudimentarias para hacer posible un lenguaje orientado a objetos. En comparativa podemos encontrar que en PHP5 el manejo de objetos ha sido completamente reescrito, permitiendo mejor desempeño y mas características. En PHP4 y versiones anteriores, los objetos fueron manejados como tipos primitivos, el modelo de esta forma de trabajo permite que el objeto completo sea copiado/clonado cuando una variable es asignada como un parámetro a un método determinado. En el nuevo modelo, los objetos son referenciados con identificadores de objeto, y no por valor. Hoy en día muchos programadores de PHP4 ni siquiera están concientes de estas desventajas del viejo modelo. A continuación un listado con 22 razones básicos para cambiar a la versión 5.

Veintidos razones para cambiar de 4 a 5.

  1. Visibilidad sobre propiedades. PHP5 permite trabajar con visibilidad sobre propiedades públicas, protegidas y privadas.
  2. Visibilidad sobre métodos. PHP5 permite trabajar con métodos públicos, protegidos y privados, ello permite definir la visibilidad de los métodos de una clase.
  3. Clases y métodos abstractos. PHP5 permite trabajar con métodos y clases abstractas. Un método abstracto solo declara la firma del método y no provee implementación. Una clase que contiene métodos abstractos deberá ser declarada como abstracta.
  4. Interfaces. PHP5 permite trabajar con interfaces. Una clase puede implementar un listado arbitrario de interfaces.
  5. Tipos (Class Type Hints). PHP5 permite el uso de tipos para declarar argumentos a un método. Estos tipos no son revisados en tiempo de compilación, como sería el caso de un lenguaje como Java, sino que serán revisados en tiempo de ejecución.
  6. final. PHP5 permite trabajar con la palabra ‘final’ para declarar miembros y métodos finales. Los miembros y métodos declarador como finales no pueden ser heredados por subclases. También es posible hacer ‘final’ una clase. Haciendo esto, la clase no podrá ser heredada por otra. Una vez declara una clase como final, todos sus métodos se convierten en final.
  7. Clonado de objetos. Al utilizar un objeto como argumento para determinado método, PHP4 realiza una copia bit a bit de dicho objeto. Crear un copia de un objeto, duplicando todas sus propiedades no es una manera de trabajar deseada. PHP5 incluye por default el control y la asignacion de las referencias los objetos, y adicionalmente proporciona la palabra reservada ‘clone’ para los casos en los que se requiera duplicar un objeto.
  8. Constructores. PHP5 permite a los desarrolladores declarar métodos constructores para las clases. Las clases que tienen un método constuctor llaman a ese método en cada objeto recien creado. Esto es conveniente para cualquier inicialización que el objeto necesite antes de que este sea usado. En PHP4, los métodos constructores son métodos de la clase que tienen el mismo nombre de la clase. Como es muy común llamar contructores padres de clases derivadas, PHP4 vuelve incomodo mover clases alrededor de una larga jerarquía. Si una clase se mueve para residir bajo un padre diferente, el nombe del constructor padre se mueve también, y el código en la clase derivada que llama al constructor padre debe ser modificada. Por razones de compatibilidad, si PHP5 no puede encontrar un método __construct() en una clases dada, buscará al estilo PHP4 por el método que tenga el mismo nombre de la clase.
  9. Destructores. Contar la habilidad de definir destructores es muy útil y ahorra recursos. Los destructores pueden registrar mensajes de depuración, cerrar conexiones a bases de datos y otras tareas de limpieza. Ningún mecanismo de de destrucción de objetos existe en PHP4. PHP5 cuenta con el concepto de destructores similar al que ofrecen otros lenguajes orientados a objetos, como Java: Cuando la última referencia a un objeto es destruida, el destructor del objeto, que es un método llamado __destruct(), que no recibe parámetros, es llamado despúes de que el objeto finaliza. Como los constructores, los destructores padres no serán llamados implicitamente por el motor. Para poder ejecutar un destructor padre, se debe llamar explicitamente a parent::__destruct() en el cuerpo del destructor.
  10. Constantes. PHP5 útiliza constantes por clase.
  11. Excepciones. PHP4 no cuenta con manejo de excepciones. PHP5 cuenta con un modelo de excepciones simiar al de otros lenguajes de programación. Debe notarse que hay soporte para ‘catch all’ pero no para ‘finally’. Las excepciones pueden ser relanzadas en bloques de retención (catch). También es posible tener múltiples bloques catch. En ese caso especifico la execepción recuperada es comparada con el tipo de clase de cada bloque catch de arriba hacia abajo y el primer bloque que tenga un ‘instanceof’ que concuerde será ejecutado. Cuando el bloque de catch termina, la ejecución continúa al final del último bloque catch. Si el bloque catch no tiene ningún ‘instanceof’ que concuerde entonces se busca el próximo bloque try/catch hasta que no encuentre mas bloques try/catch disponibles. En ese caso la excepción es una excepción no atrapada y el programa termina mostrando la excepción.
  12. Propiedades estáticas (static) de clases estáticas o no estáticas pueden ser inicializados.
  13. Métodos estáticos. PHP5 ahora puede útilizar la palabra ‘static’ para declarar un método estático, que pueda ser llamado fuera del contexto del objeto.
  14. instanceof. PHP5 ahora cuenta con la palabra reservada ‘instanceof’ la cual permite comprobar si un objeto es o no una instancia de un clase, o si extendie una clase, o implementa una interface.
  15. Valores default. Los argumentos que pasen como referencia hacia un método, ahora pueden tener un valor por defecto.
  16. __autoload(). La función interceptora __autoload() será llamada automaticamente cuando una clase no declarada vaya a ser instanciada. El nombre de esa clase será pasado al interceptor __autoload() como su único argumento.
  17. Llamadas a métodos sobrecargados y de acceso a propiedades. Tanto las llamadas a métodos y accesos a propiedades pueden ser sobrecargados vía los métodos __call(), __get() y __set().
  18. Iteración. Los objetos pueden ser iterados en modo de sobrecarga cuando son útilizados en un foreach. El comportamiendo por defecto es iterar sobre todas las propiedades.
  19. Nueva constante predefinida __METHOD__. La nueva pseudo constante muestra la clase y método actuales cuando es usada dentro de un método y la función cuando es usada fuera de una clase.
  20. Nuevo método __toString(). El nuevo método mágico __toString() permite sobrecargar la conversión del objeto a una cadena.
  21. Reflexión de API. PHP5 tiene una completa Reflexión de API que añade la habilidad de realizar ingenieria reversa a las classes, interfases, funciones y métodos asi como a extenciones.
  22. Nuevo manejador de memoria. PHP5 tiene un nuevo manejador de memoria que permite ejecutar eficientemente en ambiéntes multihilos y no requiere el manejo de objetos mutexes para cerrar y abrir durante las asignaciones y deasignaciones.

Con todo lo anterior, mas lo que se añada y mejore con el tiempo, PHP5 se convierte en una buena selección para el desarrollo de sistemas basados en web que se desea sean altamente escalables, mantenibles y de rápido desarrollo.

Basilio Briceño

DevOps evangelist, SoftwareLibre activist, sometimes speaker & eclectic metalhead.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>