PHP4 y PHP5: ¿Cuál elegir? ¿Migrar o no Migrar? El advenimiento de PHP6
Es uno de los dilemas a los que actualmente se enfrentan los programadores en PHP. En el presente artículo daré una perspectiva para tomar la mejor desición.
Parte I
A más de dos años de la llegada de la versión 5 de PHP, aún la comunidad de desarrolladores de PHP se plantea el interrogante.
Las dudas básicamente circulan siempre el mismo camino, y ambas elecciones tienen sus ventajas y desventajas. Intentaremos en este informe orientar a los desarrolladores a decidirse por una u otra alternativa.
Es importante remarcar antes de ubicarse de lleno en el análisis de las ventajas y desventajas de una u otra opción, las principales diferencias existentes entre ambas versiones, cuales son los cambios que repercuten más fuertemente en la compatibilidad de los scripts, y que es lo que nos depara el futuro en toda esta historia.
Cambios profundos:
La llegada de PHP5 vino emparejada de una reestructuración del Core de PHP, lo que los creadores de PHP llama Zend Engine.
Así, como el lejano PHP3 incluye su Zend Engine 0.5, y PHP4 el Zend Engine 1.0, tenemos Zend Engine 2.0 en PHP5. El cambio de versión no fue trivial; incluye la reescritura casi total del modelo de objetos, entre sus cambios más sustanciales.
Esto repercute directamente en los scripts de PHP4 que utilizan clases, tanto en la compatibilidad como en performance de ejecución. Posteriormente en este artículo nos referiremos nuevamente a este tema.
Veamos un ejemplo que nos muestra un cambio sustancial en la implementación del modelo de objetos:
<? class Persona { function setNombre($nombre) { $this->nombre = $nombre; } function getNombre() { return $this->nombre; } } function Algo($p) { $persona->setNombre("Daniel"); } 1 $persona = new Persona(); 2 $persona->setNombre("Pichongol"); 3 Algo($persona); 4 echo $persona->getNombre(); ?>
¿Cuál es el problema en este código corriendo en PHP4?
En la línea 1 instanciamos un objeto de la clase Persona. Luego le decimos que se llama Daniel. El error de implementación viene con la línea 3. El argumento $p que recibe Algo, no es más que una copia de $persona, y eso esta MAL. ¿Por qué?, mínimamente por 2 razones.
La primera razón es que esta estrategia es POO-No compatible. Claramente cuando hablamos del Paradigma Orientado a Objetos, estamos casi descartando que cada objeto sea referenciado por su Identificador. Sin embargo, el Zend Engine 1.0 no está preparado para dicha acción:
<? function ejemplo($val){ echo $val; } $cadena = "texto"; ejemplo($cadena); ?>
La variable $cadena pasada como argumento a la función ejemplo, es copiada para su uso local dentro de dicha función. Es lo que se conoce como paso de parámetros por valor.
El Zend Engine 1.0 hace exactamente esto para todas las funciones, inclusive para las que están dentro de una clase, las cuales en ese caso actúan como métodos:
<? function Algo($p) { $persona->setNombre("Daniel"); } ?>
Volviendo al ejemplo inicial de la clase persona, el método Algo recibe una copia (un clon) del objeto Persona.
La segunda razón viene emparejada con la primera, siendo consecuencia de esta.
Cualquier modificación del objeto Persona que se produzca dentro del método Algo, solo tendrá alcance local, y no se verá reflejado cuando la función retorne.
<? Algo($persona); echo $persona->getNombre(); ?>
En ese caso la modificación del nombre que hace la función Algo al objeto Persona no se ve reflejada cuando hacemos echo $persona->getNombre(). En nuestro browser veremos "Pichongol".
Este es solo un ejemplo del porque de la reestructuración tan importante en el Core de PHP. Es claro que toda reestructuración barre con cuestiones de compatibilidad, para ganar en otros skills; en este caso claramente estamos ganando en performance, al liberarnos del overhead que implica la constante copia de objetos que son argumentos de métodos y funciones.
En artículos posteriores trataremos en mayor detalle y profundidad los distintos aspectos que fueron modificados, haciendo una comparativa entre como se logran en PHP4 y como se logran en PHP5.
Además de explicar profundamente las diferencias en el modelo de objetos nos quedan temas pendientes como Opciones de configuración (php.ini), Conexión a MySQL (mysqli), cambios en los módulos, etc.
Hecha esta introducción, estamos en condiciones de definir las distintas situaciones en las que se puede encontrar el desarrollador, y que aspectos juegan a su favor o en contra según la situación en la que se encuentre.
¿Cual es mi escenario?
En el momento de plantearse la pregunta, el desarrollador seguramente se ubicará en alguno de los dos escenarios posibles:
- Newbie (Iniciación en PHP).
- Experimentado.
Newbie:
En el planteo de esta discusión, podríamos decir que es la situación ideal, o por lo menos la más beneficiosa. Si eres una persona que quiere arrancar en PHP, no lo dudes, PHP5 es para ti.
Tus aplicaciones gozaran de las nuevas capacidades en OOP, obtendrás el beneficio de una mejor performance de ejecución (esta comprobado experimentalmente que PHP5 corre un 25% más rápido que PHP4) y tu código estará muy bien acondicionado en cuanto a la compatibilidad con el nuevo hijo que asoma: PHP6.
Por cierto, no todo es color de rosas. Una de los mayores beneficios a la hora de elegir PHP para trabajar en nuestro proyecto es la gran cantidad de código que podemos encontrar en Internet, y utilizarlo para nuestros trabajos. Tenemos una gran probabilidad de que ante alguna tarea que se nos plantea, podamos encontrar algún script que nos solucione la vida, obviamente adaptándolo a nuestras necesidades.
Ahora bien, no todo el código que vamos a encontrar es compatible con PHP5. De hecho la gran mayoría todavía no se ha adaptado. Es cierto que con algún setting en nuestro php.ini podemos ayudar a darle mayor compatibilidad, pero como contrapartida muchas de estas settings se eliminaran en PHP6.
¿Qué queda? Hacerlo compatible modificando el código, una tarea que para un desarrollador que se inicia no siempre es sencillo. De todas formas a no alarmarse, que los grandes proyectos (PHPNuke, PHPBB, etc.) ofrecen compatibilidad.
Experimentado:
En este caso, el optar por quedarse con PHP4 o pasar a PHP5 depende de nuestra aplicación. Las interrogantes que el desarrollador se puede plantear podrían ser:
- ¿Mi aplicación usa clases y objetos?
- ¿Mi motor de Base de datos es MySQL?
- ¿Utilizo un hosting externo?
- ¿Mi aplicación sufre modificaciones en cuanto a los requerimientos y lógica de negocios?
Pasemos a discutir ventajas y desventajas en cada uno de los interrogantes:
¿Mi aplicación usa clases y objetos?
Como pudimos comprender al comienzo de este articulo, uno de los principales esfuerzos de los diseñadores del Zend Engine radicó en el mejoramiento del modelo de objetos, basándose claramente en un referente indiscutible en esta materia como lo es Sun.
Salvando las diferencias, se han tomado muchas cosas de Java, desde convenciones de nomenclaturas hasta estrategias de implementación. Seria un desperdicio no utilizar dicho esfuerzo, sobre todo si nuestra aplicación hace un uso exhaustivo de clases y objetos.
¿Mi motor de Base de datos es MySQL?
A diferencia de la estrategia de PHP4 para la conectividad PHP/MySQL, en la que el Core de PHP nos provee de un set de funciones para dicha interacción, en PHP5 MySQL nos provee de un API externo.
Básicamente, la razón de este cambio fue una modificación de licencia de MySQL, que obligo a PHP a hacer de MySQL una base de datos más, y no “LA” base de datos, como venia siendo en PHP3 y PHP4. De todas formas, esto no repercute en nuestro código, sino en la performance de nuestra aplicación.
El hecho de que una extensión no forme parte del Core de PHP y pase a ser externa nos genera un overhead, una sobrecarga de ejecución en detrimento de la performance. Como contrapartida, PHP5 nos da la posibilidad de sacarle el mayor jugo posible a las muchas mejoras incorporadas en MySQL 4.1.3 o superior, a través del API mysql.
Esto implica hacer uso de otras funciones, modificando nuestro código. Ahora bien, ¿que tan costosa es esta reescritura? Dependerá de nuestra estrategia de conexión a base de datos. ¿Utilizamos una capa de abstracción del estilo ADOdb?
Si la utilizamos estaremos mucho mejor parados frente a tal reescritura. En caso contrario el tiempo invertido será sensiblemente mayor.
¿Utilizo un hosting externo?
En caso de no disponer de un hosting propio, y tener que depender de un hosting externo que nos provea de PHP, seguramente el hecho de pensar en migrar a PHP5 puede ser un problema.
De hecho, estadísticas de principio de 2006 nos indican que solo alrededor del 5% de los hosting que proporcionan PHP, tienen PHP5.
Esto no hace mas que reflejar la lentitud con la que se esta moviendo el proceso de traspaso de PHP4 hacia PHP5.
Una pregunta que surge directamente sobre este tema es ¿Por qué?
Bueno, si uno tomo una distribución de Linux, es poco probable que la versión de PHP5 sea la incluida. La conformidad de los programadores con PHP4 es grande, y mucha de la documentación existente esta escrita para PHP4.
De todas formas, a no dormirse con PHP4. Un tema que se trata en la segunda parte de este artículo es lo nuevo que nos trae PHP6. Veremos que PHP5 en muchos aspectos es una transición mientras que la confirmación se llama PHP6.
¿Mi aplicación sufre modificaciones en cuanto a los requerimientos y lógica de negocios?
Cuando las aplicaciones tienen requerimientos de cliente bastante cambiantes, y se emplean recursos para su mantenimiento, o utilizamos una metodología de desarrollo incremental (software versionado), lo ideal es utilizar lo último que nos proporciona nuestra plataforma de programación. Generalmente lo que se busca es un cambio gradual, modular, y sostenido.
Por otro lado, si nuestras aplicaciones residen en producción sin mayores modificaciones (algún proceso batch, alguna aplicación depurada, algún algoritmo estable) y estamos conformes con su funcionamiento, quizás no sea de nuestro interés migrar hacia una nueva versión.
Nos queda analizar que hay de nuevo en PHP6 y que cosas deberíamos ir teniendo en cuenta si utilizamos PHP4 o PHP5. Eso será la segunda parte de nuestro artículo.
Wooooow esto va hacer un gran cambio…y creo que seri mejor ir aprendiendo poco poco desde ya ! para que cuando el php5 este de moda, podmos llevar el ritmo !!
El grupo de usuarios de PHP de Guatemala , http://strgt.cjb.net //
permitime citar tu post Daniel.
Saludos Cordiales.
Ok Williams, por mi parte encantado.
Es de mi agrado ser de utilidad a la comunidad de webmasters, y si este informe puede aportar, bienvenido a ello.
Saludos
Aclaro que la semana que viene estará publicada la segunda parte de este artículo, donde repasamos, entre otras cosas, que nos traerá de nuevo PHP6.
En efecto, hay que tratar de siempre estar con lo último.
Tal vez el único problema es cuando trabajamos para un tercero que nos da la sorpresa de tener un proveedor de alojamiento que aún no ha sido actualizado a la version 5. Sin embargo es allí cuando hay que presionarlo para que busque dar ese paso.
Estamos pendientes de las novedades de php6.
Es notoria la experiencia en el manejo de la herramienta. Que tal una tercera parte del articulo dedicada al manejo de Ajax y tecnologias relacionadas?
Saludos desde el infierno,,,,
// http://www.elorquidiario.com.ar/ //
exacto christian, pero bueno, si no tienen grandes razones para migrar a php5, de seguro lo tendrán para hacerlo a php6
Coincido en que uno debe elegir que version utilizar dependiendo de la aplicacion que realizara, todo programador sabe que es recomendable modularizar el codigo, y PHP 5 nos brinda gran comodidad a la hora de hacerlo.
Sr. Daniel Lopez o todo aquel desarrollador / programador SR. de PHP que esten interesados en una interesante propuesta laboral no dejen de comunicarse. 5239-5440 int 119. Muchas Gracias
el artikulo es muy bueno… yo kero empezar en esto…. me llama la atencion.. y gracias al artikulo…yo kreo ke me permitio decidir o mas bien.. krearme una konviccion..de ke voy a aprender php…jejeje..
// http://www.zonadelinks.tk //
Hola Anarko, muchas gracias por tu apreciación sobre el artículo! Esperamos contarte pronto entre la comunidad de desarrolladores PHP.
Saludos!
en que direcion bajo el software de php6
Ernesto, vamos a tener que esperar unos meses para poder bajarnos el PHP6, quizas hasta el año que viene…no está disponible aun
pienso que seria mejor esperar la confirmacion de PHP6.
Hola puedo ocupar parte de este articulo para un disertacion en mi universidad sobre PHP en general, y para mostrar mas sobre el nuevo php5??
Excelente articulo…. Pero estoy algo preocupado. He desarrollado aplicaciones web desde hace tiempo… aun trabajo con php4 ya que dependo proveedores de hosting para montar los sitios…. que va a pasar con mis aplicaciones web cuando a mi proveedor de hosting le de por cambiar a php6 ??? Pero dejame hacer un comentario, creo que ese cambio va a seguir siendo MUY lento…. gran parte de los programadores nos vemos obligados a seguir con php4 debido a los hosting provider y me imagino la gran cantidad de quejas de muchos clientes sobre todo de los “share” protestando porque las aplicaciones nos les funcionan….. perdon por mi ignorancia, pero me atrevo a decir que AJAX se quedara al final con todo: simplemente no tiene ataduras !
Gran Saludo.
PHP vuelve a incorporar MySQL
Se ha realizado una excepción en la licencia de MySQL que permite a programas FOSS (Free and Open Source Software) incluir librerías de dicho lenguaje para poder utilizar las Bases de Datos MySQL.
Hace unos meses PHP se quedó sin MySQl, y los programadores tuvieron que activar algunos drivers a mano para que funcionasen o incluso corregirlos.
Por esto mismo, los programadores comenzaron a dejar de lado el soporte MySQL y comenzaron a utilizar SQLite y PostGreSQL entre otros.
Esto ya no es necesario, ya que se vuelve a permitir la incorporación de librerías MySQL en nuestros proyectos.
Aquí una parte de la licencia MySQL:
We want specified Free/Libre and Open Source Software (“FLOSS”) applications to be able to use specified GPL-licensed MySQL client libraries (the “Program”) despite the fact that not all FLOSS licenses are compatible with version 2 of the GNU General Public License (the “GPL”).
Para leerla entera: http://www.mysql.com/company/legal/licensing/foss-exception.html
PHP vuelve a incorporar MySQL
Se ha realizado una excepción en la licencia de MySQL que permite a programas FOSS (Free and Open Source Software) incluir librerías de dicho lenguaje para poder utilizar las Bases de Datos MySQL.
Hace unos meses PHP se quedó sin MySQl, y los programadores tuvieron que activar algunos drivers a mano para que funcionasen o incluso corregirlos.
Por esto mismo, los programadores comenzaron a dejar de lado el soporte MySQL y comenzaron a utilizar SQLite y PostGreSQL entre otros.
Esto ya no es necesario, ya que se vuelve a permitir la incorporación de librerías MySQL en nuestros proyectos.
Aquí una parte de la licencia MySQL:
We want specified Free/Libre and Open Source Software (“FLOSS”) applications to be able to use specified GPL-licensed MySQL client libraries (the “Program”) despite the fact that not all FLOSS licenses are compatible with version 2 of the GNU General Public License (the “GPL”).
Para leerla entera: http://www.mysql.com/company/legal/licensing/foss-exception.html
Hola quisiera saber como puedo actualizar mi php 4 al 5 que está en un eqipo con linux (CentOS) ojalá si tienes una dirección o enlace para descargar los archivos rpm o algo así.
Hola KroNosX, puedes utilizarlo, manteniendo las fuentes inclusive puedes modificarlo a gusto
Saludos
Creo que es una buena decision de MySQL. Volver a la estrategia que los hizo populares seguramente les dará sus beneficios
Bueno, nosotros hemos mudado a PHP5 y algunos scripts que utilizabamos en PHP4 ya no funcionan. Por ejemplo con los newsletters y formmail, pero creemos que las proximas actualizaciones de la mayoria de scripts estaran escritas para PHP5. Eso si, vale la pena, porque notamos mas velocidad de respuesta y mucha mas estabilidad. Saludos a la comunidad de webmasters.
Pienso que definitivamente es mejor usar .NET por acá están aún muy colgados.
Tambien hay muchas cosas en temas de compatilidad; muchas aplicaciones que funcionan bien en PHP4 dejan de hacerlo en PHP5.
Un ejemplo de esto es cuando usas el soporte de DOMXml que trae el php4 intrinseco que no es lo mejor del mundo pero fue utilizado en cierta medida.
En PHP5 este soporte cambia y hay que hacer ajustes para lograr compatibilidad.
Solo digo que aquellos que tienen aplicaciones hechas ya en PHP4 deben revisar todo antes de moverse a PHP5 y en caso de que algo fallara claro esta que tendria que analizar si es conveniente mudarse o no en haras de la cantidad de tiempo a invertir en compatbilidad.
Es lo que pienso,
Saludos y suerte!
Hola, soy admin de http://www.cyberneticos.com Hemos trasladado muchas cuentas de php4 a php5 y no ha habido apenas problemas. Creo que php5 es bastante “backwards compatible” con php4
Saludos
No es posible que todavia se este desarrollando en php4, las mejoras en POO y MySqli son inminentes, no tengan miedo al cambio y lo nuevo siempre soporta lo viejo
cuales son las ventgajas de php con el uso de posgres
KJHN
[…] Referencia: maestrosdelweb.com […]
Pregunta ?
tengo una pagina para la cual uso un programador PHPLIB en php4, migre el servidor a php5 todas las otras paginas se ven sin problemas pero esta con PHPLIB no nos dimos cuenta y quedo re colgada… por lo que vi tira erro en las funciones donde le pasa como parametro $db etc… tratar de modificar esta pagina a php5 es como reescribir todo el PHPLIB ??? o con unos cambios simples se puede migrar ???
Buenas
Pues nada, me he decidido a lanzarme en el php5, al principio me descarge el easyphp ya que ofrece el php5, hice un par de pruebas y ya me decidi a coger un alojamiento ( empecé con uno de prueba en http://www.configbox.com después de buscar alguna empresa que de php5 en vez de 4 ).
Me estoy aplicando mucho en mi codigo y la verdad es que es una gozada, el codigo sale super claro.
Animo a la gente a que lo pruebe y dejar poco a poco el abuelete del php4 ( y mas sabiendo que el php6 esta por llegar pronto )
javier_enithost Tienes toda la razón, a mi me ocurrió que desarrolle una script usando el DOM sobre php5 sabiendo que mi provedor de Hosting tiene instalado Php4… Como no sabia es que el manejo del DOM es diferente entre las versiones, ahora tendré que regresar a php4…
Asi no hay forma de migrar… toca acomodarse a lo que a los provedores les de la gana… mal asunto..
Saludos!
Nosotros somos proveedores de hosting, y si bien tenemos php4, no vamos a migrar los servidores a php5. Lo que estamos haciendo es poner otro servidor con php5 y MySQL, dejando a que nuestros clientes migren cuando y como puedan.
Asi nos ahorramos problemas de soporte y les ahorramos problemas a ellos también.
bueno yo soy nuevo en php y quisiera por favor un consejo, si aprender bien php4 o aprender de una ves php5 gracias
Me empece a meter con php4, consegui el curso de aula formativa. Esta bastante bueno. Antes trabaje con cobol y basic. Otro mundo este. Bastante comprensible. Donde me bajo un manual de PHP5 y php5.
Cualquier ayuda sera bienvenida. Gracias.
[…] feliz de vacaciones me dedico a reescribir mi CMS mientras como helaos, me ha venido bien este artículo sobre PHP 4 y PHP 5. Es un artículo bastante claro y lo recomiendo, yo creo que me decidiré por PHP 5, ya […]
[…] clara una cosa: lo que aquí podáis leer no está garantizado de ninguna manera al 100% que se incorpore a PHP 6. Aún así, podemos entender la información de las transcripciones como el estado actual de las […]
el código php4 en su mayoría funciona con php5 solo bastaría ir a la documentación de php.net para tener una visión mas acabada de que funciones utilizar, la única gran diferencia es que php4 no es orientado a objeto, en cambio en php5 lo adaptaron para incorporar la orientación a objetos que no esta demás decir que aun no esta acabada y le faltan muchos componentes necesarios de la programación orientada a objetos, si tienen dudas a que me refiero, pueden ver como funciona PYTHON o RUBY en ese contexto, por lo demás son lenguajes tan sencillos como PHP pero mucho mas poderosos en rendimiento y escalabilidad.
Quiero que mi servidor trabaje con ambas versiones de php(4,5) para no alterar el contenido actual de un site implementado en la version 4, lo que queremos es trabajar con otros proyectos en version 5 pero no queremos que la funcionalidad del site en version 4 sea afectada. Como puedo configurar o que hay que hacer para que ambas versiones funcionen en mi servidor.
Muchas gracias por tu ayuda y sigue adelante, muy buen articulo
[…] clara una cosa: lo que aquí podáis leer no está garantizado de ninguna manera al 100% que se incorpore a PHP 6. Aún así, podemos entender la información de las transcripciones como el estado actual de las […]