PHP 7: ¿y si fuera el momento de migrar?

Durante los últimos años, las versiones anteriores del PHP han contribuido considerablemente al aumento del rendimiento de este lenguaje. La comunidad que lo respalda se ha desarrollado profesionalmente, y ha puesto a la disposición de los programadores numerosas herramientas para mejorar la utilización del lenguaje y el mantenimiento de las aplicaciones. El lanzamiento del PHP 7, que sucederá al PHP 5, está anunciado para el próximo 12 de noviembre como un evento de gran envergadura. ¿Cuáles son las razones? Veamos qué esconde bajo la manga el PHP 7.

Descubra el artículo «¡El lenguaje PHP no ha muerto!»

Del PHP 5 al PHP 7: una distracción pasajera

¿Existen desavenencias entre los informáticos y los matemáticos? Después de Microsoft, que pasa de Windows 8 a Windows 10, PHP decide abstenerse de las reglas básicas de la aritmética, proponiendo por su parte la versión 7, después de la 5. Esta extravagancia se explica volviendo al año 2004, en que, luego del lanzamiento de PHP 5, se inició el proyecto de la versión 6, con el objetivo fundamental de integrar Unicode al lenguaje, para estandarizar los caracteres especiales. Abreviando: sin Unicode, no podemos escribir «I ❤ PHP».

La falta de motivación, unida a algunas decisiones erradas, llevaron a los programadores en PHP a detener el trabajo relacionado con esta versión 6 en el año 2010. Los detalles técnicos de esta decisión están disponibles en esta presentación de Andrei Zmievski. En este sentido, los programadores se enfocaron en lograr mejoras más pragmáticas, que integraron en las versiones anteriores hasta 2014.

Desde que los programadores comenzaron a trabajar en la nueva versión, se preguntaron qué nombre debían darle (consultar los elementos del debate). Numerosos artículos y hasta libros que hacían alusión al intento fallido de la versión 6, fueron publicados en aquel entonces, lo cual constituía un riesgo de confusión para los usuarios que buscaran la última versión del PHP. Por otra parte, la comunidad deseaba poner punto final a la desventurada misión, lo que conllevó al pronunciamiento masivo de nombrar PHP 7 a la nueva versión.

PHP 7 es el fruto de más de un año y medio de labor, y resulta difícil entrar en detalles sobre todas las innovaciones que ofrece. Por este motivo, nos concentraremos en los puntos más importantes.

PHP 7: dos veces más rápido que PHP 5.6

La competencia es positiva con frecuencia. Para satisfacer sus propias necesidades, Facebook creó en 2011 una plataforma de ejecución de PHP, denominada HHVM, la cual mejora el rendimiento de este lenguaje gracias a un sistema de compilación "sobre la marcha" (JIT). Inspirados en este proyecto, los programadores de la comunidad intentaron la integración de mejoras similares directamente en PHP. Estas mejoras, reagrupadas bajo el nombre de PHPNG (PHP New Generation), necesitaban un código de refactorización para preparar el terreno a la integración de un mecanismo de JIT que mejorara el rendimiento global del lenguaje. En condiciones reales, el PHP 7 es casi dos veces más rápido que el PHP 5, y si nos guiamos por las referencias establecidas por Rasmus Lerdorf (el creador de PHP), el PHP 7 alcanzó, durante el pasado abril, el mismo nivel de rendimiento que HHVM... cuyos programadores entraron en acción desde entonces para reconquistar el liderato.

Algunas publicaciones mostraron la rápida asimilación de esta nueva versión de PHP en PHPNG, cuyo impacto no ha sido para nada desdeñable, y solo representa una pequeña parte de todo el proyecto.

Del PHP 5 al PHP 7: la hora de la verdad

La llegada del PHP 7 va a conducir a la desactivación de algunas de las funciones ya en desuso desde versiones anteriores. Numerosas extensiones no soportadas han sido eliminadas. Entre ellas, las extensiones ereg_* y mysql, reemplazadas idealmente por PDO MySql o mysqli.

En caso de utilizar extensiones no soportadas por PHP, particularmente aquellas que se conectan a bases de datos específicas, se debe verificar su compatibilidad con PHP 7. PHPNG ha modificado el funcionamiento interno de las extensiones, las cuales se deben actualizar para que sean operativas en PHP 7. Existe un prototipo disponible para MongoDB.

Siempre desde la óptica del aumento de rendimiento, PHP utiliza actualmente un url="https://en.wikipedia.org/wiki/Abstract_syntax_tree"]« abstract syntax tree » (AST)[/url] (AST), que permite la optimización del código sobre la marcha, pero requiere la uniformidad del método de lectura del contenido. Con PHP 5, el compilador leía con más frecuencia de izquierda a derecha, salvo en ocasiones, en que leía algunas variables de derecha a izquierda. Estas excepciones ya no existen en PHP 7: todo el código se interpreta de izquierda a derecha.

Tomemos por ejemplo la variable «$foo->$bar['baz']». En PHP 5, la interpretación de la misma podía escribirse «$foo->{$bar['baz']}», mientras que en PHP 7, se interpretará $foo->$bar. En PHP 7, la interpretación podría escribirse «($foo->$bar)['baz']». Este cambio no debería causar un gran impacto en las aplicaciones, pero podrían aparecer errores con este tipo de sintaxis.

Otro cambio significativo, que más bien sería una buena noticia, es el retorno de los «errores fatales» en las excepciones, lo cual significa que este tipo de error se podría procesar directamente en la aplicación, y de este modo evitar el comportamiento por defecto de PHP de detectar dichos errores. Quienes han tenido que ver con este tipo de errores, sabe bien de qué se trata.

Finalmente, el lenguaje PHP incluye nuevas palabras reservadas. Palabras como int, foat, bool, string, true, false, null, resource, object, scalar, mixed, digital, etc, ya no podrán utilizarse para nombrar clases, namespaces o rasgos. Numerosos frameworks PHP tienen wrappers alrededor de ciertos tipos de datos como las cadenas de caracteres (string) y deberán adaptarse.

Los puntos abordados no representan todas las dificultades de compatibilidad en relación con el PHP 5.6, solo las más importantes. Una lista exhaustiva está disponible en el sitio web de PHP http://php.net/manual/es/migration70.php... e incluso si se han tomado todas las precauciones, no hay nada como una prueba en condiciones reales, en su propia infraestructura en preproducción, por ejemplo.

¡Evite errores fatales gracias al tipado de parámetros escalares!

La lista de las nuevas funciones del PHP 7 es larga, y en ella encontramos elementos suficientes para rebatir eficazmente los comentarios de quienes piensan que el PHP es peligroso a causa de su tipado dinámico, pues, por primera vez en su historia, el PHP integra el tipado estático de variables.

Es de imaginar la reacción de quienes piensan en el impacto sobre el código existente, pero para su alivio, se trata de funciones facultativas, accesibles únicamente cuando el tipado estricto es requerido de manera explícita. Paralelamente, habrá quienes opinen que esto no serviría de nada, lo cual no es verdad: la utilización de variables estáticas permite al compilador de PHP realizar optimizaciones impensables sin conocer de antemano el tipado de la variable. Si se busca la mejor estructura de datos, hay una excelente conferencia de Patrick Allaert sobre el tema. ¿Cuáles son las novedades alrededor del tipado de datos?

Hablamos en realidad de dos novedades: «scalar type declarations» y «return type declarations». El primer caso define el tipo esperado en los argumentos de una función. Si el valor esperado por la función es correctamente formateado, el lenguaje retorna una excepción. Por ejemplo: si se debe definir una función que permita dividir dos números enteros, se podrá escribir como sigue:

Código:

Resultado:

La función «return type declarations» permite declarar el formato de salida esperado de su función. Como antes, se obtendrá una excepción si la función retorna un valor incorrecto.

Código:

Resultado:

Los puristas del tipado estático dirán que el hecho de poder introducir una cadena de caracteres con un número entero debería dar un error, que tornaría decepcionantes las nuevas funciones... pero una vez más, el PHP 7 permite al programador definir el nivel de rigor. Del mismo modo, al añadir la línea «declare(strict_types=1) ;» al inicio de un archivo, PHP retornará una excepción.

Código:

Resultado:

Con nuevas funciones que permitan al compilador la optimización del funcionamiento del lenguaje, resulta una pena dejarlo pasar de largo, y, además, no es necesario reescribir el código para pasar a la versión 7, pues el tipado dinámico es parte de ella, y quedan algunos casos en los que su uso es bien práctico.
Cabe mencionar que el PHP soporta ahora los caracteres Unicode en las cadenas de caracteres, particularidad heredada de su versión 6.

CMS y Frameworks: ¿quién está listo?

Muchos programadores utilizan CMS o Frameworks para concentrarse mejor en las problemáticas relativas a su especialidad. La migración al PHP 7, para disfrutar de sus novedades, requerirá la actualización de Frameworks, lo cual no deberá tardar, ya que PHP 7 no incluirá sus nuevas funciones con relación a la versión en beta lanzada a inicios de julio, en la que se basaron los equipos que mantienen los principales CMS y Frameworks.
Algunos equipos incluso han anunciado que ya están listos para migrar al PHP 7, como es el caso de Symfony, listo desde agosto en las versiones 2.3, 2.6, 2.7 y 3.0; Zend Framework, listo desde la versión 2.4+; y WordPress, compatible desde la versión 4.3 lanzada en agosto.

El resto da aún sus primeros pasos:
• Drupal integrará el soporte de PHP 7 en su versión 8, cuyo lanzamiento es inminente
• Joomla no soporta el PHP 7 en su versión actual, pero la versión 3.5 será compatible
• PrestaShop no se ha pronunciado con respecto al soporte del PHP 7, pero la versión 1.6.1.2, cuyo cuarto lanzamiento se produjo recientemente, se instala perfectamente con PHP 7.

El año 2015 marcará probablemente un cambio de rumbo para el lenguaje PHP, gracias al aumento de rendimiento aportado por su versión PHP 7, que lo sitúa en medio de la competencia en cuanto a rapidez. Asimismo, esta versión integra las nuevas funciones tan esperadas por los programadores. Sin embargo, contrariamente a la migración de la versión 4 a la 5, las roturas no producen gran impacto, de modo que no será necesaria la revisión minuciosa de las aplicaciones. Entonces... quizás ya es el momento de visualizar la migración...

Mi cuenta de clienteContact SalesWebmail OVHcloud Blog

¡Bienvenido/a a OVHcloud!

Identifíquese para contratar una solución, gestionar sus productos y servicios, y consultar sus pedidos

Conectar