Evolución de PHP cómo lenguaje desde la versión 1 a la 8

Descubra como ha evolucionado el lenguaje de programación PHP

Diego Delgado García

PHP, conocido como el Hypertext Preprocessor, es un lenguaje de programación de script de lado del servidor. Se usa principalmente para el desarrollo web y fue lanzado por primera vez en 1995 por Rasmus Lerdorf. Desde entonces, PHP ha visto un gran número de versiones, cada una con mejoras y cambios significativos. Vamos a echar un vistazo a la evolución de PHP desde sus inicios hasta PHP 8, la última versión que se conocía hasta septiembre de 2021.

Versiones de PHP y cambios importantes

PHP/FI (Personal Home Page / Forms Interpreter) 1.0 (Lanzado en 1995)

La primera versión de PHP, entonces conocida como PHP/FI, fue desarrollada por Rasmus Lerdorf. En ese momento, PHP era un simple conjunto de scripts de CGI en Perl que ayudaban a Lerdorf a mantener su currículum personal y recopilar ciertos datos. No fue hasta que Lerdorf combinó estos scripts con C para formar PHP/FI que PHP se convirtió en un producto que podía ser utilizado por otros.

PHP/FI 2.0 (Lanzado en el año 1997)

La versión 2 de PHP/FI introdujo una serie de características que sentaron las bases para lo que PHP se convertiría en el futuro. Estas características incluyeron soporte para formularios y cookies, así como la capacidad de incrustar código PHP directamente en HTML.

PHP 3 (Lanzado en el año 1998)

Desarrollado por Andi Gutmans y Zeev Suraski, PHP 3 presentó una revisión completa del lenguaje, estableciendo la mayoría de las convenciones de sintaxis que conocemos hoy. Incluyó el soporte para los objetos por primera vez, y fue la primera versión que realmente parecía un lenguaje de programación completo.

PHP 4 (Lanzado en el año 2000)

La versión 4 de PHP introdujo el motor Zend, una pieza de software que interpreta el código PHP. Esto llevó a un rendimiento mejorado, así como a un mejor soporte para la programación orientada a objetos. También incluyó características como la persistencia de sesiones y la salida de bufferización.

PHP 5

PHP 5 introdujo mejoras significativas en la programación orientada a objetos, con la adición de clases abstractas, interfaces, clonación de objetos y excepciones. Además, se mejoró el soporte para XML y se introdujo el soporte para SQLite.

PHP 5.0 (Lanzado en Julio de 2004)

  • Mejoras en la programación orientada a objetos: Introdujo un modelo de objetos completo que incluye modificadores de acceso, interfaces, clonación y excepciones.
  • Mejora en el manejo de XML: Se incluyó la extensión SimpleXML para una manipulación más fácil de XML.
  • SQLite: Se incluyó SQLite, un motor de base de datos SQL ligero, en PHP por defecto.

PHP 5.1 (Lanzado en Noviembre de 2005)

  • Soporte de PDO (PHP Data Objects): Proporciona una interfaz para acceder a bases de datos en PHP.
  • Mejoras en el rendimiento: Incluye la adición de un recolector de basura para eliminar los ciclos de referencia.

PHP 5.2 (Lanzado en Noviembre de 2006)

  • Introducción de filter_list(): Ayuda a validar y filtrar datos de una manera segura.
  • Mejoras en el rendimiento y la estabilidad: Incluye la actualización de la biblioteca de PCRE, que mejoró la compatibilidad y el rendimiento.

PHP 5.3 (Lanzado en Junio de 2009)

  • Namespaces: Permiten organizar mejor el código en paquetes.
  • Late Static Bindings: Mejora la herencia de código en PHP.
  • Closures (funciones anónimas): Las funciones ahora pueden ser creadas sin un nombre específico.
  • Mejoras en el manejo de excepciones: Se introduce la posibilidad de utilizar múltiples excepciones catch.
  • Soporte para sintaxis de ternarios anidados sin necesidad de paréntesis.

PHP 5.4 (Lanzado en Marzo de 2012)

  • Traits: Permite la reutilización de código en lenguajes de programación de un solo ancestro, una especie de herencia múltiple.
  • Short Array Syntax: Ahora es posible declarar arrays con corchetes [] en lugar de usar la función array().
  • Mejora de la gestión de la memoria: Reduce el uso general de memoria.

PHP 5.5 (Lanzado en Junio de 2013)

  • Generadores: Permite la creación fácil de iteradores sin necesidad de implementar la interfaz de iterador.
  • Finally keyword: Ayuda a garantizar que un segmento de código se ejecute siempre, independientemente de si se lanza una excepción.
  • Soporte para listas en foreach.

PHP 5.6 (Lanzado en Agosto de 2014)

  • Argument Unpacking: Permite usar ... para desempaquetar argumentos de un array o de un objeto Traversable.
  • Use function y use const: Importa funciones y constantes en un espacio de nombres.
  • Mejoras en GMP: Permite el uso de números GMP en funciones que aceptan enteros o strings.
  • Mejoras en seguridad: Se añade soporte para certificados de firma de clave pública.

PHP 7  (Lanzado en el año 2015)

Con PHP 7, se hizo un gran salto en el rendimiento gracias a la introducción de la máquina de ejecución Just In Time (JIT). Las características adicionales incluyen tipos de retorno, declaración de tipos escalares, operador de fusión nula y la posibilidad de definir arrays constantes utilizando la define().

PHP 7.0 (Lanzado en Diciembre de 2015)

  • Mejora en el rendimiento: El nuevo motor PHPNG (Zend Engine 3) mejora el rendimiento, reduce el uso de memoria y facilita el manejo de errores.
  • Return type declarations: Esta característica permite especificar el tipo de valor que una función debe devolver.
  • Scalar type declarations: Permite forzar el tipo de parámetros en las funciones (int, float, string, bool).
  • Operador de fusión nula (??): Este operador simplifica la comprobación de valores nulos.
  • Operador de nave espacial (<=>): Se introduce para facilitar la comparación entre dos expresiones.

PHP 7.1 (Lanzado en Diciembre de 2016)

  • Nullable types: Se permite indicar que el valor de retorno de una función puede ser de un tipo específico o nulo.
  • Void functions: Se introduce el tipo void para las funciones que no devuelven nada.
  • Class constant visibility: Ahora se pueden definir constantes de clase como public, private o protected.
  • Iterable pseudo-type: Se introduce el tipo iterable para los parámetros y los tipos de retorno de las funciones.

PHP 7.2 (Lanzado en Noviembre de 2017)

  • Libsodium: Esta biblioteca para la criptografía moderna y segura ahora está incluida por defecto.
  • Mejoras en el tipo: Se añade el tipo "object" y se permite el uso de tipos abstractos en tipos de parámetros y declaraciones de tipo de retorno.

PHP 7.3 (Lanzado en Diciembre de 2018)

  • Trailing commas in function calls: Se permiten las comas finales en las llamadas a funciones.
  • Mejora de la velocidad del código de JSON: El rendimiento de las funciones json_encode() y json_decode() ha sido mejorado.
  • GC improvements: Se introducen mejoras en el recolector de basura, lo que resulta en un menor uso de memoria.

PHP 7.4 (Lanzado en Noviembre de 2019)

  • Arrow functions: Esta característica permite la creación de funciones anónimas de una manera más concisa.
  • Typed properties: Las propiedades de las clases ahora pueden tener tipos declarados.
  • Unpacking inside arrays: Esta característica permite desempaquetar arrays dentro de otros arrays.
  • Weak references: Permiten la retención de referencias a objetos sin evitar que sean destruidos por el recolector de basura.

PHP 8 (Lanzado en el año 2020)

La versión 8 de PHP trajo consigo una serie de características nuevas y emocionantes, como la compilación Just-In-Time (JIT), que mejora aún más el rendimiento. También se añadieron tipos de datos union, match expressions, nullsafe operator, named arguments, y atributos, entre otras muchas características.

Bueno, ¿Y la versión 6 donde está?

La versión de PHP 6, de hecho, existió como un proyecto, pero nunca se lanzó oficialmente. El principal objetivo de PHP 6 era proporcionar soporte nativo para Unicode, un estándar que permite el procesamiento de texto en cualquier idioma del mundo.

Sin embargo, los desarrolladores se encontraron con una serie de problemas durante el desarrollo. Implementar el soporte completo de Unicode en el núcleo de PHP resultó ser un desafío mucho mayor de lo que se esperaba. Además, el rendimiento de la versión preliminar de PHP 6 con Unicode era significativamente más lento.

Debido a estas dificultades y a la demora en el desarrollo, el proyecto PHP 6 fue finalmente abandonado. Los desarrolladores decidieron saltarse el número 6 al nombrar la siguiente versión importante de PHP para evitar la confusión con el proyecto PHP 6 fallido. Por lo tanto, después de PHP 5.6, la siguiente versión importante fue PHP 7.0.

PHP 7 incorporó muchas de las características planificadas para PHP 6, pero no incluyó el soporte nativo para Unicode en el núcleo del lenguaje. En cambio, PHP 7 se centró en mejorar el rendimiento y añadir nuevas características al lenguaje.

Hablemos de rendimiento, ¿merece la pena actualizar la versión?

La evolución del lenguaje de programación no sólo ha aportado nueva funcionalidad, sino que también se ha realizado especial hincapié en mejorar el rendimiento con cada versión:

  • PHP/FI 2.0 - Baja. No estaba optimizado para el rendimiento, ya que el enfoque principal estaba en las capacidades de formularios y en la interacción con las bases de datos.
  • PHP 3 - Mejorado respecto a PHP/FI 2.0. La reescritura del motor de PHP permitió una mejora en el rendimiento y la eficiencia.
  • PHP 4 - Mejorado respecto a PHP 3. La introducción del motor Zend proporcionó una mejora adicional en el rendimiento.
  • PHP 5.0 - Similar a PHP 4. Aunque incluía mejoras significativas en la programación orientada a objetos y el soporte de XML, el rendimiento era similar al de PHP 4.
  • PHP 5.1 - 5.6 - Mejorado con cada versión menor, especialmente con las optimizaciones de rendimiento y las mejoras en la recolección de basura.
  • PHP 7.0 - Significativamente mejorado respecto a PHP 5.X, gracias a la introducción del motor Zend Engine 3. El rendimiento de PHP 7.0 podría ser el doble o el triple que el de PHP 5.6 para muchas aplicaciones.
  • PHP 7.1 - 7.4 - Cada versión menor introdujo mejoras en el rendimiento, aunque no tan drásticas como el salto de PHP 5.6 a PHP 7.0.
  • PHP 8.0 - Mejorado respecto a PHP 7.4. La adición de la compilación Just-In-Time (JIT) puede mejorar el rendimiento en ciertos casos, aunque la mejora puede no ser significativa para las aplicaciones web típicas.

¿Y deseguridad?, qué me puedes decir

PHP/FI 2.0 - PHP 3

  • En estas primeras versiones, la seguridad no era una gran preocupación y no se incluían muchas características de seguridad.

PHP 4

  • PHP 4 introdujo safe_mode, que estaba destinado a prevenir algunos tipos de ataques, pero finalmente fue considerado ineficaz y fue deprecado y eliminado en PHP 5.4.

PHP 5

PHP 5 introdujo una serie de mejoras en la seguridad:

  • Magic Quotes: Introducido para prevenir ataques de inyección de SQL, pero fue criticado por su comportamiento inconsistente y finalmente se desactivó de forma predeterminada en PHP 5.3 y se eliminó en PHP 5.4.
  • Mejoras en la manipulación de errores: PHP 5 introdujo las excepciones, que mejoran el manejo de errores y pueden ayudar a prevenir la exposición de información sensible.
  • PDO (PHP Data Objects): Introducido en PHP 5.1, proporciona una interfaz para acceder a bases de datos que incluye consultas preparadas, que pueden ayudar a prevenir la inyección de SQL.

PHP 5.2

  • Filtro de entrada: PHP 5.2 introdujo la extensión filter que permite la validación y filtrado de datos de entrada de una manera segura y consistente.

PHP 5.3

  • PHAR (PHP Archive): PHP 5.3 introdujo el soporte para PHAR, una forma de empaquetar aplicaciones PHP completas en un solo archivo. Aunque esto no es una mejora de seguridad en sí misma, PHAR incluye varias medidas de seguridad para prevenir ataques, como la capacidad de validar firmas digitales.

PHP 5.6

  • Mejora en la seguridad SSL/TLS: PHP 5.6 introdujo soporte para certificados de firma de clave pública y mejoras en la configuración predeterminada de SSL/TLS.

PHP 7

PHP 7 desactivó o eliminó varias funciones y características anticuadas y potencialmente inseguras:

  • Se eliminaron varias funciones de hash inseguras, como crypt() y hash().
  • Se desactivó la deserialización automática para prevenir la vulnerabilidad de la inyección de objetos.
  • Se introdujo el tipo de declaración y la declaración de tipo de retorno para ayudar a prevenir errores de tipo que podrían ser explotados.

PHP 7.2

  • Mejora en la seguridad de contraseñas: PHP 7.2 introdujo la función password_hash() con soporte para Argon2, un algoritmo de hashing de contraseñas más seguro.

PHP 8

PHP 8 no introdujo muchas nuevas características de seguridad, pero continuó la tendencia de PHP 7 de eliminar o desactivar características anticuadas y potencialmente inseguras.

Conclusión

Actualizar a la versión más reciente de PHP a menudo ofrece varios beneficios. En primer lugar, las actualizaciones suelen incluir mejoras en el rendimiento, lo que puede hacer que tus aplicaciones web se ejecuten más rápidamente. En segundo lugar, las versiones más recientes a menudo incluyen nuevas características que pueden hacer que el código sea más eficiente y más fácil de escribir y mantener. En tercer lugar, las versiones más recientes de PHP suelen incluir mejoras de seguridad que pueden proteger tu aplicación contra ataques y vulnerabilidades.

No obstante, también es importante tener en cuenta que actualizar a una nueva versión de PHP puede implicar desafíos. El código existente puede necesitar ser revisado o refactorizado para ser compatible con las nuevas características o para evitar características que han sido desactivadas o eliminadas. En cualquier caso, la actualización de PHP es una parte esencial de la gestión de una aplicación web segura y de alto rendimiento.