PHP


PHP es un lenguaje de secuencias de comandos de propósito general especialmente adecuado para el desarrollo web . [5] Fue creado originalmente por el programador danés-canadiense Rasmus Lerdorf en 1994. [6] La implementación de referencia PHP ahora es producida por The PHP Group. [7] PHP originalmente significaba página de inicio personal , [6] pero ahora representa el inicialismo recursivo PHP: preprocesador de hipertexto . [8]

El código PHP generalmente se procesa en un servidor web mediante un intérprete de PHP implementado como un módulo , un demonio o como un ejecutable de Common Gateway Interface (CGI). En un servidor web, el resultado del código PHP interpretado y ejecutado, que puede ser cualquier tipo de datos, como HTML generado o datos de imágenes binarias , formaría la totalidad o parte de una respuesta HTTP . Existen varios sistemas de plantillas web , sistemas de gestión de contenido web y marcos web que pueden emplearse para orquestar o facilitar la generación de esa respuesta. Además, PHP se puede utilizar para muchas tareas de programación fuera del contexto web, como aplicaciones gráficas independientes [9] y control de drones robóticos . [10] El código PHP también se puede ejecutar directamente desde la línea de comandos .

El intérprete de PHP estándar, impulsado por Zend Engine , es un software gratuito publicado bajo la licencia de PHP . PHP ha sido ampliamente adaptado y se puede implementar en la mayoría de los servidores web en casi todos los sistemas operativos y plataformas , de forma gratuita. [11]

El lenguaje PHP evolucionó sin una especificación formal escrita o estándar hasta 2014, con la implementación original actuando como el estándar de facto que otras implementaciones pretendían seguir. Desde 2014, se ha trabajado para crear una especificación PHP formal. [12]

W3Techs informa que, en abril de 2021 , "PHP es utilizado por el 79,2% de todos los sitios web cuyo lenguaje de programación del lado del servidor conocemos". [13]

Historia temprana

Rasmus Lerdorf , quien escribió el componente Common Gateway Interface (CGI) original, junto con Andi Gutmans y Zeev Suraski , quienes reescribieron el analizador que formó PHP 3.

El desarrollo de PHP comenzó en 1994 cuando Rasmus Lerdorf escribió varios programas CGI ( Common Gateway Interface ) en C, [14] [15] [16] que utilizó para mantener su página de inicio personal . Los amplió para trabajar con formularios web y para comunicarse con bases de datos , y llamó a esta implementación "Intérprete de formularios / página de inicio personal" o PHP / FI.

PHP / FI se puede utilizar para crear aplicaciones web dinámicas y sencillas . Para acelerar la notificación de errores y mejorar el código, Lerdorf anunció inicialmente el lanzamiento de PHP / FI como "Herramientas de página de inicio personal (PHP Tools) versión 1.0" en el grupo de discusión de Usenet comp.infosystems.www.authoring.cgi el 8 de junio de 1995 . [17] [18] Esta versión ya tenía la funcionalidad básica que PHP tiene hoy. Esto incluía variables similares a Perl , manejo de formularios y la capacidad de incrustar HTML. La sintaxis se parecía a la de Perl , pero era más simple, más limitada y menos consistente. [7]

Un ejemplo de la sintaxis PHP temprana :

incluir  / texto / encabezado . html ->getenv  HTTP_USER_AGENT -> si  substr  $ exec_result  Mozilla ->  Hey ,  usted  está  utilizando  Netscape ! < P > endif ->sql  base de datos de  seleccionar  *  de  la tabla  , donde  usuario = '$ nombre de usuario' -> ifless  $ NumEntries  1 ->  Lo sentimos ,  que  registro  no  no  existe < p > endif  salida ->  Bienvenido  $ usuario ! -> < p >  Usted  tiene  $ index : 0 ->  créditos  que quedan  en  su  cuenta <. p >incluir  / texto / pie de página . html ->

PHP temprano no tenía la intención de ser un nuevo lenguaje de programación y creció orgánicamente, con Lerdorf observando en retrospectiva: "No sé cómo detenerlo, nunca hubo la intención de escribir un lenguaje de programación [...] absolutamente ninguna idea de cómo escribir un lenguaje de programación, simplemente seguí agregando el siguiente paso lógico en el camino ". [19] Un equipo de desarrollo comenzó a formarse y, después de meses de trabajo y pruebas beta , lanzó oficialmente PHP / FI 2 en noviembre de 1997.

El hecho de que PHP no se diseñó originalmente, sino que se desarrolló orgánicamente ha dado lugar a una nomenclatura inconsistente de funciones y un orden inconsistente de sus parámetros. [20] En algunos casos, los nombres de las funciones se eligieron para que coincidieran con las bibliotecas de nivel inferior que PHP estaba "envolviendo", [21] mientras que en algunas versiones muy tempranas de PHP la longitud de los nombres de las funciones se usaba internamente como una función hash. , por lo que se eligieron nombres para mejorar la distribución de los valores hash. [22]

PHP 3 y 4

Este es un ejemplo de código PHP personalizado para el sistema de gestión de contenido de WordPress .

Zeev Suraski y Andi Gutmans reescribieron el analizador en 1997 y formaron la base de PHP 3, cambiando el nombre del lenguaje por el acrónimo recursivo PHP: Hypertext Preprocessor . [7] [23] Posteriormente, comenzaron las pruebas públicas de PHP 3, y el lanzamiento oficial se produjo en junio de 1998. Suraski y Gutmans luego comenzaron una nueva reescritura del núcleo de PHP, produciendo Zend Engine en 1999. [24] También fundaron Zend Tecnologías en Ramat Gan , Israel. [7]

El 22 de mayo de 2000, se lanzó PHP 4, impulsado por Zend Engine 1.0. [7] En agosto de 2008, esta rama alcanzó la versión 4.4.9. PHP 4 ya no está en desarrollo ni se lanzará ninguna actualización de seguridad. [25] [26]

PHP 5

El 1 de julio de 2004, PHP 5 fue lanzado impulsado por el nuevo Zend Engine II. [7] PHP 5 incluyó nuevas características como soporte mejorado para programación orientada a objetos , la extensión PHP Data Objects (PDO) (que define una interfaz liviana y consistente para acceder a bases de datos) y numerosas mejoras de desempeño. [27] En 2008, PHP 5 se convirtió en la única versión estable en desarrollo. El enlace estático tardío había faltado en PHP y se agregó en la versión 5.3. [28] [29]

Muchos proyectos de código abierto de alto perfil dejaron de admitir PHP 4 en código nuevo a partir del 5 de febrero de 2008, debido a la iniciativa GoPHP5, [30] proporcionada por un consorcio de desarrolladores de PHP que promueven la transición de PHP 4 a PHP 5. [31 ] [32]

Con el tiempo, los intérpretes de PHP estuvieron disponibles en la mayoría de los sistemas operativos existentes de 32 y 64 bits , ya sea construyéndolos a partir del código fuente PHP o usando binarios prediseñados. [33] Para las versiones 5.3 y 5.4 de PHP, las únicas distribuciones binarias de Microsoft Windows disponibles eran compilaciones IA-32 de 32 bits , [34] [35] que requieren el modo de compatibilidad de Windows de 32 bits mientras se usa Internet Information Services (IIS) en un 64 -Bit de plataforma Windows. La versión 5.5 de PHP hizo que las compilaciones x86-64 de 64 bits estuvieran disponibles para Microsoft Windows. [36]

El soporte de seguridad oficial para PHP 5.6 finalizó el 31 de diciembre de 2018. [37]

PHP 6 y Unicode

PHP recibió críticas mixtas debido a la falta de compatibilidad nativa con Unicode en el nivel del idioma principal. [38] [39] En 2005, se inició un proyecto encabezado por Andrei Zmievski para brindar soporte nativo Unicode a través de PHP, incorporando la biblioteca International Components for Unicode (ICU) y representando cadenas de texto como UTF-16 internamente. [40] Dado que esto causaría cambios importantes tanto en los aspectos internos del lenguaje como en el código de usuario, se planeó lanzar esto como la versión 6.0 del lenguaje, junto con otras características importantes en desarrollo. [41]

Sin embargo, la escasez de desarrolladores que entendieron los cambios necesarios y los problemas de rendimiento que surgen de la conversión hacia y desde UTF-16, que rara vez se usa en un contexto web, provocaron retrasos en el proyecto. [42] Como resultado, se creó una versión de PHP 5.3 en 2009, con muchas características que no son Unicode retroportadas desde PHP 6, en particular espacios de nombres. En marzo de 2010, el proyecto en su forma actual se abandonó oficialmente y se preparó una versión PHP 5.4 que contiene la mayoría de las características restantes que no son Unicode de PHP 6, como rasgos y reenlace de cierre. [43] Las esperanzas iniciales eran que se formaría un nuevo plan para la integración Unicode, pero en 2014 no se había adoptado ninguno.

PHP 7

Durante 2014 y 2015, se desarrolló una nueva versión principal de PHP, que fue numerada PHP 7. La numeración de esta versión implicó cierto debate entre los desarrolladores internos. [44] Si bien el experimento PHP 6 Unicode nunca se había publicado, varios artículos y títulos de libros hicieron referencia al nombre PHP 6, lo que podría haber causado confusión si una nueva versión reutilizara el nombre. [45] Después de una votación, se eligió el nombre PHP 7. [46]

La base de PHP 7 es una rama de PHP que originalmente se denominó PHP de próxima generación ( phpng ). Fue escrito por Dmitry Stogov, Xinchen Hui y Nikita Popov, [47] y tenía como objetivo optimizar el rendimiento de PHP mediante la refactorización del motor Zend al tiempo que conservaba una compatibilidad casi completa del lenguaje. [48] Para el 14 de julio de 2014, los puntos de referencia basados ​​en WordPress , que sirvieron como la suite de referencia principal para el proyecto phpng, mostraron un aumento de casi un 100% en el rendimiento. También se espera que los cambios de phpng faciliten la mejora del rendimiento en el futuro, ya que las estructuras de datos más compactas y otros cambios se consideran más adecuados para una migración exitosa a un compilador Just-In -Time (JIT). [49] Debido a los cambios significativos, el motor Zend reelaborado se llama Zend Engine 3 , sucediendo al Zend Engine 2 utilizado en PHP 5. [50]

Debido a cambios internos importantes en phpng, debe recibir un nuevo número de versión principal de PHP, en lugar de una versión menor de PHP 5, de acuerdo con el proceso de lanzamiento de PHP. [51] Las versiones principales de PHP pueden romper la compatibilidad con versiones anteriores del código y, por lo tanto, PHP 7 presentó una oportunidad para otras mejoras más allá de phpng que requieren rupturas de compatibilidad con versiones anteriores. En particular, implicó los siguientes cambios:

  • Muchos mecanismos de error de PHP heredados de nivel fatal o recuperable fueron reemplazados por excepciones modernas orientadas a objetos . [52]
  • La sintaxis para desreferenciar variable fue revisado a fin de ser internamente más consistente y completa, lo que permite el uso de los operadores ->, [], (), {}, y ::, con expresiones del lado izquierdo significativas arbitrarias. [53]
  • La compatibilidad con los métodos de constructor de estilo PHP 4 heredados quedó obsoleta. [54]
  • El comportamiento de la foreachdeclaración se cambió para que sea más predecible. [55]
  • Los constructores para las pocas clases integradas en PHP que devolvieron nulos en caso de falla se cambiaron para lanzar una excepción en su lugar, por coherencia. [56]
  • Varias interfaces de programación de aplicaciones de servidor (SAPI) y extensiones que no se mantuvieron o en desuso se eliminaron del núcleo de PHP, sobre todo la mysqlextensión heredada . [57]
  • El comportamiento del list()operador se modificó para eliminar la compatibilidad con cadenas. [58]
  • Se eliminó el soporte para los delimitadores de estilo ASP heredados <%y %>y . [59]
  • Se corrigió una supervisión que permitía que una declaración de cambio tuviera múltiples defaultcláusulas. [60]
  • Se eliminó el soporte para el soporte de números hexadecimales en algunas conversiones implícitas de cadenas a tipos de números. [61]
  • Se cambiaron los operadores de desplazamiento a la izquierda y a la derecha para que se comporten de forma más coherente en todas las plataformas. [62]
  • Se cambiaron las conversiones entre números de punto flotante y enteros (por ejemplo, se cambió el infinito para convertirlo en cero) y se implementaron de manera más consistente en todas las plataformas. [62] [63]

PHP 7 también incluyó nuevas funciones de lenguaje. Más notablemente, introduce declaraciones de tipo de retorno para funciones [64] que complementan las declaraciones de tipo de parámetro existentes, y soporte para los tipos escalares (integer, float, string y booleano) en declaraciones de tipo de parámetro y retorno. [sesenta y cinco]

PHP 8

PHP 8 se lanzó el 26 de noviembre de 2020. PHP 8 es una versión principal y tiene cambios importantes con respecto a versiones anteriores. [66] [67] Las nuevas funciones y los cambios notables incluyen:

Recopilación justo a tiempo

La compilación justo a tiempo es compatible con PHP 8. [68]

El compilador JIT de PHP 8 puede proporcionar mejoras sustanciales de rendimiento para algunos casos de uso. [69] [70] El desarrollador de PHP Nikita Popov ha declarado que las mejoras de rendimiento para la mayoría de los sitios web serán menos sustanciales que la actualización de PHP 5 a PHP 7. [71] Se espera que las mejoras de rendimiento debido a la adición del compilador JIT sean más sustancial para operaciones de tipo matemático que para casos de uso comunes de desarrollo web. [71] Además, el compilador JIT ofrece un potencial futuro para mover algunos códigos de C a PHP, debido a las mejoras de rendimiento para algunos casos de uso. [72]

Adición de la expresión de coincidencia

PHP 8 introdujo la matchexpresión. [73] La expresión de coincidencia es conceptualmente similar a una switchdeclaración y es más compacta para algunos casos de uso. [74] Debido a que matches una expresión, su resultado puede capturarse en una variable o devolverse desde una función. [75]

Cambios de tipo y adiciones

PHP 8 introdujo tipos de unión, un nuevo statictipo de retorno y un nuevo mixedtipo. [66]

Los "atributos", a menudo denominados "anotaciones" en otros lenguajes de programación, se agregaron en PHP 8, lo que permite agregar metadatos a las clases. [66]

throwpasó de ser una declaración a ser una expresión. [76] Esto permite lanzar excepciones en lugares que antes no eran posibles. [66]

Cambios y adiciones de sintaxis

PHP 8 incluye cambios para permitir sintaxis alternativas, más concisas o más consistentes en varios escenarios. Por ejemplo, el operador nullsafe es similar al operador de fusión nula ?? , pero se usa al llamar a métodos. [77] El siguiente fragmento de código no generará un error si getBirthday()devuelve un valor nulo:

$ human_readable_date  =  $ usuario -> getBirthday () ? -> diffForHumans ();

La promoción de la propiedad del constructor se ha agregado como " azúcar sintáctico " , lo que permite que las propiedades de la clase se establezcan automáticamente cuando los parámetros se pasan a un constructor de la clase . [66] Esto reduce la cantidad de código repetitivo que debe escribirse.

Otros cambios menores incluyen soporte para el uso de ::classen objetos, que sirve como una alternativa para el uso de get_class(); [66] capturas sin captura en bloques de try-catch; ajustes de sintaxis variable para resolver inconsistencias; soporte para argumentos con nombre; y soporte para comas finales en listas de parámetros, lo que agrega coherencia con soporte para comas finales en otros contextos, como en matrices.

Cambios y adiciones estándar de la biblioteca

  • Se agregaron mapas débiles en PHP 8. A WeakMapcontiene referencias a objetos, pero estas referencias no impiden que dichos objetos sean recolectados como basura . [78] Esto puede proporcionar mejoras de rendimiento en escenarios donde los datos se almacenan en caché ; esto es de particular relevancia para los ORM . [66]
  • Varios ajustes a las interfaces, como agregar soporte para crear DateTimeobjetos a partir de interfaces y la adición de una Stringableinterfaz que se puede usar para sugerencias de tipo.
  • Varias funciones nuevas que incluyen str_contains (), str_starts_with () y str_ends_with (); [79] fdiv (); get_debug_type (); y get_resource_id ()
  • Implementación de objeto de token_get_all ()

Cambios adicionales

  • Las anotaciones de tipo también se agregaron al código fuente C de PHP para permitir que las funciones y métodos internos tengan "información de tipo completa en reflexión". [80]
  • Herencia con métodos privados
  • Métodos abstractos en mejoras de rasgos

Historial de versiones

A partir del 28 de junio de 2011, el equipo de desarrollo de PHP implementó un cronograma para el lanzamiento de nuevas versiones de PHP. [51] Con este sistema, debería producirse al menos un lanzamiento cada mes. Una vez al año, debería producirse una versión menor que puede incluir nuevas funciones. Cada versión menor debe ser compatible con al menos dos años con seguridad y correcciones de errores, seguido de al menos un año de solo correcciones de seguridad, para un total de un proceso de lanzamiento de tres años para cada versión menor. No se introducirán nuevas funciones, a menos que sean pequeñas y autónomas, en una versión menor durante el proceso de publicación de tres años.

El elePHPant, mascota de PHP

La mascota del proyecto PHP es elePHPant , un elefante azul con el logotipo de PHP en un costado, diseñado por Vincent Pontier [165] en 1998. [166] "Las letras (PHP) tenían la forma de un elefante si se veían en un ángulo lateral ". [167] El elePHPant a veces tiene un color diferente cuando está en forma de peluche .

Se han realizado muchas variaciones de esta mascota a lo largo de los años. Solo los elePHPants basados ​​en el diseño original de Vincent Pontier son considerados oficiales por la comunidad. [168] Estos son coleccionables y algunos de ellos son extremadamente raros. [169]

Una aplicación "Hello World" en PHP 7.4 que se ejecuta en un servidor de desarrollo localhost

El siguiente "¡Hola, mundo!" El programa está escrito en código PHP incrustado en un documento HTML :

     PHP "¡Hola, mundo!" programa     php echo  '

¡Hola, mundo!

'
;
?>