Articulo de referencia

PHP

PHP es un lenguaje de programación de propósito general orientado al desarrollo web . [9] Fue creado originalmente por el programador danés-canadiense Rasmus Lerdorf en 1993 y l...

PHP es un lenguaje de programación de propósito general orientado al desarrollo web . [9] Fue creado originalmente por el programador danés-canadiense Rasmus Lerdorf en 1993 y lanzado en 1995. [10] [11] La implementación de referencia de PHP ahora es producida por PHP Group. [12] PHP era originalmente una abreviatura de Personal Home Page , [13] [14] pero ahora representa el acrónimo recursivo PHP: Hypertext Preprocessor . [15]

El código PHP generalmente se procesa en un servidor web mediante un intérprete PHP implementado como un módulo , un demonio o 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 se pueden emplear 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 [16] y control de drones . [17] El código PHP también se puede ejecutar directamente desde la línea de comandos .

El intérprete PHP estándar, impulsado por Zend Engine , es un software libre publicado bajo la Licencia PHP . PHP ha sido ampliamente adaptado y puede implementarse en la mayoría de los servidores web en una variedad de sistemas operativos y plataformas . [18]

El lenguaje PHP ha evolucionado sin una especificación o estándar formal escrito, y la implementación original actuó como el estándar de facto que otras implementaciones intentaron seguir.

W3Techs informa que al 23 de mayo de 2024 [update](seis meses después del lanzamiento de PHP 8.3), el 76,2 % de todos los sitios web cuyo lenguaje de programación se pudo determinar utilizan PHP, y el 55,1 % de ellos utilizan PHP 7, que está desactualizado y se sabe que es inseguro. [19] [20]

Historia

Rasmus Lerdorf , creador de PHP; y Andi Gutmans y Zeev Suraski , creadores del motor Zend

Historia temprana

El desarrollo de PHP comenzó en 1993 [10] cuando Rasmus Lerdorf escribió varios programas de Interfaz de Puerta de Enlace Común (CGI) en C , [21] [22] que utilizó para mantener su página de inicio personal . Los amplió para que funcionaran con formularios web y para comunicarse con bases de datos , y llamó a esta implementación "Página de inicio personal/Intérprete de formularios" o PHP/FI.

Un ejemplo de la sintaxis PHP temprana : [23]

<!--include /texto/encabezado.html-->

<!--getenv HTTP_USER_AGENT--> 
<!--if substr $exec_result Mozilla--> 
  ¡Oye, estás usando Netscape! < p > 
<!--endif-->

<!--sql database select * from table where user='$username'--> 
<!--ifless $numentries 1--> 
  Lo sentimos, ese registro no existe < p > 
<!--endif exit--> 
  ¡Bienvenido <!--$user--> ! < p > 
  Le quedan <!--$index:0--> créditos en su cuenta. < p >

<!--include /texto/pie de página.html-->

PHP/FI se podía utilizar para crear aplicaciones web simples y dinámicas . Para acelerar el reporte de errores y mejorar el código, Lerdorf anunció inicialmente el lanzamiento de PHP/FI como "Personal Home Page Tools (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. [1] [24] Esta versión incluía funcionalidades básicas como variables similares a Perl , manejo de formularios y la capacidad de incrustar HTML . En este punto, la sintaxis había cambiado para parecerse a la de Perl , pero era más simple, más limitada y menos consistente. [13] [12]

En sus inicios, PHP nunca tuvo la intención de ser un nuevo lenguaje de programación ; más bien, creció orgánicamente, y Lerdorf señaló en retrospectiva: "No sé cómo detenerlo [...] nunca hubo ninguna intención de escribir un lenguaje de programación [...] No tengo ni la menor idea de cómo escribir un lenguaje de programación [...] Simplemente seguí añadiendo el siguiente paso lógico en el camino". [25] Se empezó a formar un equipo de desarrollo y, después de meses de trabajo y pruebas beta , lanzó oficialmente PHP/FI 2 en noviembre de 1997. [26]

El hecho de que PHP no haya sido diseñado originalmente, sino que se haya desarrollado orgánicamente, ha llevado a una denominación inconsistente de las funciones y a un orden inconsistente de sus parámetros. [27] En algunos casos, los nombres de las funciones se eligieron para que coincidieran con las bibliotecas de nivel inferior que PHP estaba "envolviendo", [28] 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 . [29]

PHP 3 y 4

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

Zeev Suraski y Andi Gutmans reescribieron el analizador en 1997 y formaron la base de PHP 3, cambiando el nombre del lenguaje al acrónimo recursivo PHP: Hypertext Preprocessor . [12] [30] Posteriormente, comenzaron las pruebas públicas de PHP 3 y el lanzamiento oficial se produjo en junio de 1998. Suraski y Gutmans comenzaron entonces una nueva reescritura del núcleo de PHP, produciendo el motor Zend en 1999. [31] También fundaron Zend Technologies en Ramat Gan , Israel . [12]

El 22 de mayo de 2000 se lanzó PHP 4, basado en el motor Zend Engine 1.0. [12] En agosto de 2008, esta rama había alcanzado la versión 4.4.9. PHP 4 ya no se encuentra en desarrollo y no se prevé lanzar actualizaciones de seguridad. [32] [33]

PHP 5

El 1 de julio de 2004 se lanzó PHP 5, impulsado por el nuevo motor Zend Engine II. [12] PHP 5 incluía nuevas características como un soporte mejorado para la 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 rendimiento. [34] En 2008, PHP 5 se convirtió en la única versión estable en desarrollo. El enlace estático tardío había estado ausente en versiones anteriores de PHP y se agregó en la versión 5.3. [35] [36]

Muchos proyectos de código abierto de alto perfil dejaron de dar soporte a PHP 4 en código nuevo a partir del 5 de febrero de 2008, debido a la iniciativa GoPHP5, [37] proporcionada por un consorcio de desarrolladores de PHP que promovía la transición de PHP 4 a PHP 5. [38] [39]

Con el tiempo, los intérpretes de PHP se hicieron disponibles en la mayoría de los sistemas operativos de 32 y 64 bits existentes , ya sea compilándolos a partir del código fuente de PHP o utilizando binarios precompilados. [40] 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 , [41] [42] que requerían el modo de compatibilidad de 32 bits de Windows al usar Internet Information Services (IIS) en una plataforma Windows de 64 bits. La versión 5.5 de PHP hizo que las compilaciones x86-64 de 64 bits estuvieran disponibles para Microsoft Windows. [43]

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

PHP 6 y Unicode

PHP recibió críticas mixtas debido a la falta de soporte nativo de Unicode en el nivel del lenguaje principal. [45] [46] En 2005, se inició un proyecto encabezado por Andrei Zmievski para brindar soporte nativo de Unicode en todo PHP, incorporando la biblioteca International Components for Unicode (ICU) y representando cadenas de texto como UTF-16 internamente. [47] Dado que esto causaría cambios importantes tanto en el interior 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 que entonces estaban en desarrollo. [48]

Sin embargo, la falta de desarrolladores que comprendieran los cambios necesarios y los problemas de rendimiento que surgieron de la conversión a y desde UTF-16, que rara vez se utiliza en un contexto web, provocaron retrasos en el proyecto. [49] Como resultado, se creó una versión PHP 5.3 en 2009, con muchas características no Unicode incorporadas desde PHP 6, en particular los espacios de nombres. En marzo de 2010, el proyecto en su forma actual fue abandonado oficialmente y se preparó una versión PHP 5.4 para contener la mayoría de las características no Unicode restantes de PHP 6, como los rasgos y la re-vinculación de cierres. [50] Las esperanzas iniciales eran que se formara un nuevo plan para la integración de Unicode, pero en 2014 no se había adoptado ninguno. [ cita requerida ]

PHP 7

Durante 2014 y 2015, se desarrolló una nueva versión principal de PHP, PHP 7. La numeración de esta versión generó cierto debate entre los desarrolladores internos. [51] Si bien los experimentos Unicode de PHP 6 nunca se habían publicado, varios artículos y títulos de libros hacían referencia a los nombres de PHP 6, lo que podría haber causado confusión si una nueva versión reutilizara el nombre. [52] Después de una votación, se eligió el nombre PHP 7. [53]

La base de PHP 7 es una rama de PHP que originalmente se denominó PHP next generation ( phpng ). Fue creada por Dmitry Stogov, Xinchen Hui y Nikita Popov, [54] y tenía como objetivo optimizar el rendimiento de PHP mediante la refactorización del motor Zend, manteniendo al mismo tiempo una compatibilidad casi completa con el lenguaje. [55] Para el 14 de julio de 2014, los puntos de referencia basados ​​en WordPress , que sirvieron como la suite de puntos de referencia principal para el proyecto phpng, mostraron un aumento de casi el 100% en el rendimiento. Los cambios de phpng facilitan la mejora del rendimiento en versiones futuras, 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 justo a tiempo (JIT). [56] Debido a los cambios significativos, el motor Zend rediseñado se denominó Zend Engine 3 , sucediendo al Zend Engine 2 utilizado en PHP 5. [57]

Debido a los importantes cambios internos en phpng, debe recibir un nuevo número de versión principal de PHP, en lugar de una versión menor de PHP 5, según el proceso de lanzamiento de PHP. [58] 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 interrupciones de compatibilidad con versiones anteriores. [ cita requerida ] En particular, implicó los siguientes cambios:

  • Muchos mecanismos de error de PHP heredados, fatales o recuperables, fueron reemplazados por excepciones orientadas a objetos modernas . [59]
  • La sintaxis para la desreferenciación de variables fue reelaborada para que sea internamente más consistente y completa, permitiendo el uso de los operadores ->, [], (), {}, y ::, con expresiones arbitrarias con significado del lado izquierdo. [60]
  • El soporte para los métodos constructores de estilo PHP 4 heredado quedó obsoleto. [61]
  • Se modificó el comportamiento de la foreachdeclaración para que fuera más predecible. [62]
  • Los constructores de las pocas clases integradas en PHP que devolvían nulo en caso de error fueron modificados para que en su lugar generen una excepción, por coherencia. [63]
  • Se eliminaron del núcleo PHP varias interfaces de programación de aplicaciones de servidormysql (SAPI) y extensiones sin mantenimiento o en desuso, en particular la extensión heredada. [64]
  • list()Se modificó el comportamiento del operador para eliminar el soporte para cadenas. [65]
  • Se eliminó el soporte para los delimitadores de estilo ASP heredados <%y %>y <script language="php"> ... </script>. [66]
  • Se corrigió un error que permitía que una declaración switch tuviera múltiples defaultcláusulas. [67]
  • Se eliminó la compatibilidad con números hexadecimales en algunas conversiones implícitas de cadenas a tipos de números. [68]
  • Se modificaron los operadores de desplazamiento a la izquierda y a la derecha para que se comporten de manera más consistente en todas las plataformas. [69]
  • Se cambiaron las conversiones entre números de punto flotante y números enteros (por ejemplo, se cambió infinito para convertirlo en cero) y se implementaron de manera más consistente en todas las plataformas. [69] [70]

PHP 7 también incluyó nuevas características del lenguaje. En particular, introdujo declaraciones de tipos de retorno para funciones [71] que complementan las declaraciones de tipos de parámetros existentes, y soporte para los tipos escalares (entero, flotante, cadena y booleano) en las declaraciones de parámetros y tipos de retorno. [72]

PHP 8

PHP 8 se lanzó el 26 de noviembre de 2020 y actualmente es la segunda versión principal de PHP más utilizada. PHP 8 es una versión principal y tiene cambios importantes con respecto a las versiones anteriores. [73] [74] Las nuevas características y los cambios notables incluyen:

Recopilación justo a tiempo

La compilación Just-in-time es compatible con PHP 8. [75]

El compilador JIT de PHP 8 puede proporcionar mejoras de rendimiento sustanciales para algunos casos de uso, [76] [77] mientras que el desarrollador de PHP Nikita Popov afirmó 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. [78] Se esperan mejoras sustanciales más para operaciones de tipo matemático que para casos de uso de desarrollo web comunes. [78] Además, el compilador JIT proporciona el potencial futuro de mover algo de código de C a PHP, debido a las mejoras de rendimiento para algunos casos de uso. [79]

Adición de la expresión de coincidencia

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

Cambios y adiciones de tipo

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

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. [73]

throwpasó de ser una declaración a ser una expresión. [83] Esto permite que se lancen excepciones en lugares donde antes no era posible. [73]

Cambios y adiciones de sintaxis

PHP 8 incluye cambios para permitir sintaxis alternativas, más concisas o más consistentes en una serie de escenarios. Por ejemplo, el operador nullsafe es similar al operador null coalescing ?? , pero se utiliza al llamar a métodos. [84] El siguiente fragmento de código no generará un error si getBirthday()devuelve null:

$fecha_legible_humana  =  $usuario -> obtenerCumpleaños () ?-> diffForHumans ();

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

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

Cambios y adiciones a la biblioteca estándar

  • En PHP 8 se añadieron mapas débiles. Un mapa débil WeakMapcontiene referencias a objetos, pero estas referencias no impiden que dichos objetos sean recolectados como basura . [86] Esto puede proporcionar mejoras de rendimiento en escenarios donde los datos se almacenan en caché ; esto es de particular relevancia para los mapeos relacionales de objetos (ORM). [73]
  • Se realizaron 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 tipos. [73]
  • Varias funciones nuevas, incluidas , , y ; [87] ; ; y [73]str_contains()str_starts_with()str_ends_with() fdiv()get_debug_type()get_resource_id()
  • Implementación de objeto de [73]token_get_all()

Cambios adicionales

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

PHP 8.1

PHP 8.1 se lanzó el 25 de noviembre de 2021. [89] Añadió compatibilidad con enumeraciones (también llamadas "enums"), declaración de propiedades como readonly(que evita la modificación de la propiedad después de la inicialización) y descompresión de matrices con claves de cadena. El nuevo tipo never se puede utilizar para indicar que una función no retorna. [90]

PHP 8.2

PHP 8.2 se lanzó el 8 de diciembre de 2022. [91] Las novedades de esta versión son readonlylas clases (cuyas propiedades de instancia son implícitamente de solo lectura), los tipos de forma normal disyuntiva (DNF) y la randomextensión, que proporciona un generador de números pseudoaleatorios con una API orientada a objetos , [92] la redacción de valores de parámetros sensibles y un montón de otras características.

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. [58] Bajo este sistema, se debe realizar al menos un lanzamiento cada mes. Una vez al año, se debe realizar un lanzamiento menor que puede incluir nuevas características. Cada lanzamiento menor debe tener soporte al menos durante dos años con correcciones de seguridad y 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 lanzamiento menor. No se deben introducir nuevas características, a menos que sean pequeñas y autónomas, en un lanzamiento menor durante el proceso de lanzamiento de tres años.

Mascota

El elePHPant, la mascota de PHP

La mascota del proyecto PHP es el elePHPant , un elefante azul con el logo de PHP en su costado, diseñado por Vincent Pontier [204] en 1998. [205] "Las letras (PHP) formaban la forma de un elefante si se las miraba de lado". [206] El elePHPant a veces tiene un color diferente cuando tiene forma de peluche . [207]

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

Sintaxis

Una aplicación "Hola, mundo" en PHP 7.4 ejecutándose en su servidor de desarrollo integrado

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

<!DOCTYPE html> 
< html > 
    < head > 
        < title > Programa PHP "¡Hola, mundo!" </ title > 
    </ head > 
    < body > 
< p > <? = '¡Hola, mundo!' ?> </ p > </ body > </ html >          
    

Sin embargo, como no existe ningún requisito para que el código PHP esté integrado en HTML, la versión más simple de ¡Hola, mundo! se puede escribir así, ?>omitiendo la etiqueta de cierre, como se prefiere en archivos que contienen código PHP puro. [210]

<?php  echo  '¡Hola, mundo!' ;

El intérprete PHP solo ejecuta código PHP dentro de sus delimitadores . PHP no procesa nada que esté fuera de sus delimitadores, aunque el texto que no es PHP sigue estando sujeto a las estructuras de control descritas en el código PHP. Los delimitadores más comunes son <?phppara abrir y ?>cerrar secciones PHP. <?También existe la forma abreviada. Este delimitador corto hace que los archivos de script sean menos portables, ya que su compatibilidad se puede desactivar en la configuración local de PHP y, por lo tanto, se desaconseja. [211] [212] Por el contrario, no hay ninguna recomendación contra la etiqueta corta echo <?=. [213] Antes de PHP 5.4.0, esta sintaxis corta para echosolo funciona con la short_open_tagopción de configuración habilitada, mientras que para PHP 5.4.0 y posteriores siempre está disponible. [214] [215] [211] El propósito de todos estos delimitadores es separar el código PHP del contenido que no es PHP, como el código JavaScript o el marcado HTML. [216] Por lo tanto, el programa "Hola, mundo" más corto escrito en PHP es:

<? = '¡Hola, mundo!' ;

La primera forma de delimitadores, <?phpy ?>, en XHTML y otros documentos XML , crea instrucciones de procesamiento XML correctamente formadas. [217] Esto significa que la mezcla resultante de código PHP y otros marcados en el archivo del lado del servidor es en sí misma XML bien formado.

Las variables tienen como prefijo el símbolo del dólar y no es necesario especificar un tipo de antemano. PHP 5 introdujo declaraciones de tipos que permiten a las funciones forzar a que sus parámetros sean objetos de una clase específica, matrices, interfaces o funciones de devolución de llamada . Sin embargo, antes de PHP 7, las declaraciones de tipos no se podían usar con tipos escalares como números enteros o cadenas. [72]

A continuación se muestra un ejemplo de cómo se declaran e inicializan las variables PHP.

<?php 
    $name  =  'John' ;   // variable de tipo cadena que se declara e inicializa 
    $age  =  18 ;        // variable de tipo entero que se declara e inicializa 
    $height  =  5.3 ;    // variable de tipo doble que se declara e inicializa 
    echo  $name  .  ' is '  .  $height  .  "m tall \n " ;  // concatenando variables y cadenas 
    echo  " $name is $age years old." ;  // interpolando variables a cadena 
?>

A diferencia de los nombres de funciones y clases, los nombres de variables distinguen entre mayúsculas y minúsculas. Tanto las cadenas entre comillas dobles ("") como las cadenas heredoc proporcionan la capacidad de interpolar el valor de una variable en la cadena. [218] PHP trata las nuevas líneas como espacios en blanco a la manera de un lenguaje de formato libre , y las sentencias terminan con un punto y coma. [219] PHP tiene tres tipos de sintaxis de comentarios : /* */marca comentarios en bloque y en línea; //o #se utilizan para comentarios de una sola línea. [220] La echosentencia es una de las varias facilidades que ofrece PHP para generar texto. [ cita requerida ]

En términos de palabras clave y sintaxis del lenguaje, PHP es similar a la sintaxis de estilo C. ifLas condiciones, forlos whilebucles y los retornos de funciones son similares en sintaxis a lenguajes como C, C++, C#, Java y Perl. [ cita requerida ]

Tipos de datos

PHP es de tipo flexible . Almacena números enteros en un rango dependiente de la plataforma, ya sea como un entero con signo de 32, 64 o 128 bits equivalente al tipo long del lenguaje C. Los números enteros sin signo se convierten en valores con signo en ciertas situaciones, lo que es un comportamiento diferente al de muchos otros lenguajes de programación. [221] Las variables enteras se pueden asignar utilizando notaciones decimales (positivas y negativas), octales , hexadecimales y binarias . [ cita requerida ]

Los números de punto flotante también se almacenan en un rango específico de la plataforma. Se pueden especificar utilizando notación de punto flotante o dos formas de notación científica . [222] PHP tiene un tipo booleano nativo que es similar a los tipos booleanos nativos en Java y C++ . Usando las reglas de conversión de tipo booleano, los valores distintos de cero se interpretan como verdaderos y cero como falso, como en Perl y C++. [222]

El tipo de datos nulo representa una variable que no tiene valor; NULLes el único valor permitido para este tipo de datos. [222]

Las variables del tipo "recurso" representan referencias a recursos de fuentes externas. Normalmente, las crean funciones de una extensión determinada y solo pueden procesarlas funciones de la misma extensión; por ejemplo, recursos de archivos, imágenes y bases de datos. [222]

Las matrices pueden contener elementos de cualquier tipo que PHP pueda manejar, incluidos recursos, objetos e incluso otras matrices. El orden se conserva en listas de valores y en hashes con claves y valores, y ambos pueden entremezclarse. [222] PHP también admite cadenas , que se pueden usar con comillas simples, comillas dobles, sintaxis nowdoc o heredoc . [223]

La biblioteca PHP estándar (SPL) intenta resolver problemas estándar e implementa interfaces y clases de acceso a datos eficientes. [224]

Funciones

PHP define una amplia gama de funciones en el lenguaje central y muchas también están disponibles en varias extensiones; estas funciones están bien documentadas en la documentación de PHP en línea. [225] Sin embargo, la biblioteca incorporada tiene una amplia variedad de convenciones de nomenclatura e inconsistencias asociadas, como se describe en el historial anterior.

El desarrollador puede definir funciones personalizadas:

function  myAge ( int  $birthYear ) :  string 
{ 
    // calcula la edad restando el año de nacimiento del año actual. 
    $yearsOld  =  date ( 'Y' )  -  $birthYear ;

    // devuelve la edad en una cadena descriptiva. 
    return  $yearsOld  .  ( $yearsOld  ==  1  ?  ' year'  :  ' years' ); 
}

echo  'Actualmente soy '  .myAge  ( 1995 ) . ' viejo. ' ;  

A partir de 2024, el resultado del programa de ejemplo anterior es "Actualmente tengo 29 años".

En lugar de punteros de función , las funciones en PHP pueden ser referenciadas por una cadena que contiene su nombre. De esta manera, las funciones normales de PHP pueden ser utilizadas, por ejemplo, como devoluciones de llamadas o dentro de tablas de funciones . [226] Las funciones definidas por el usuario pueden ser creadas en cualquier momento sin necesidad de prototipos . [225] [226] Las funciones pueden ser definidas dentro de bloques de código, lo que permite una decisión en tiempo de ejecución sobre si una función debe ser definida o no. Hay una función que determina si una función con un nombre dado ya ha sido definida. Las llamadas a funciones deben usar paréntesis, con la excepción de las funciones constructorasfunction_exists de clase de cero argumentos llamadas con el operador PHP , en cuyo caso los paréntesis son opcionales. [ cita requerida ]new

Desde PHP 4.0.1 create_function(), una envoltura delgada alrededor de eval(), permitió que se crearan funciones PHP normales durante la ejecución del programa; quedó obsoleta en PHP 7.2 y se eliminó en PHP 8.0 [227] a favor de la sintaxis para funciones anónimas o " cierres " [228] que pueden capturar variables del ámbito circundante, que se agregó en PHP 5.3. La sintaxis abreviada de flecha se agregó en PHP 7.4: [229]

función  getAdder ( $x )  { 
    return  fn ( $y )  =>  $x  +  $y ; 
}

$adder  =  getAdder ( 8 ); 
echo  $adder ( 2 );   // imprime "10"

En el ejemplo anterior, getAdder()la función crea un cierre utilizando el argumento pasado $x, que toma un argumento adicional $yy devuelve el cierre creado al invocador. Una función de este tipo es un objeto de primera clase, lo que significa que se puede almacenar en una variable, pasar como parámetro a otras funciones, etc. [230]

De manera inusual para un lenguaje de tipado dinámico, PHP admite declaraciones de tipos en parámetros de funciones, que se aplican en tiempo de ejecución. Esto se ha admitido para clases e interfaces desde PHP 5.0, para matrices desde PHP 5.1, para "callables" desde PHP 5.4 y para tipos escalares (enteros, float, string y booleanos) desde PHP 7.0. [72] PHP 7.0 también tiene declaraciones de tipos para tipos de retorno de funciones, que se expresan colocando el nombre del tipo después de la lista de parámetros, precedido por dos puntos. [71] Por ejemplo, la getAdderfunción del ejemplo anterior podría anotarse con tipos como en PHP 7:

función  getAdder ( int  $x ) :  Cierre 
{ 
    return  fn ( int  $y ) :  int  =>  $x  +  $y ; 
}

$adder  =  getAdder ( 8 ); 
echo  $adder ( 2 );  // imprime "10" 
echo  $adder ( null );  // lanza una excepción porque se pasó un tipo incorrecto 
$adder  =  getAdder ([]);  // también lanzaría una excepción

De manera predeterminada, las declaraciones de tipos escalares siguen principios de tipado débil. Por ejemplo, si el tipo de un parámetro es int, PHP no solo permitiría que se pasaran números enteros, sino también cadenas numéricas convertibles, números flotantes o booleanos a esa función, y los convertiría. [72] Sin embargo, PHP 7 tiene un modo de "tipado estricto" que, cuando se utiliza, no permite tales conversiones para llamadas de función y devoluciones dentro de un archivo. [72]

Objetos PHP

La funcionalidad básica de programación orientada a objetos se agregó en PHP 3 y se mejoró en PHP 4. [12] Esto permitió que PHP obtuviera mayor abstracción, lo que facilitó las tareas creativas para los programadores que usaban el lenguaje. El manejo de objetos se reescribió por completo para PHP 5, lo que amplió el conjunto de características y mejoró el rendimiento. [231] En versiones anteriores de PHP, los objetos se manejaban como tipos de valor . [231] El inconveniente de este método era que el código tenía que hacer un uso intensivo de las variables de "referencia" de PHP si quería modificar un objeto que se le pasaba en lugar de crear una copia del mismo. En el nuevo enfoque, los objetos se referencian por identificador y no por valor. [ cita requerida ]

PHP 5 introdujo variables y métodos miembros privados y protegidos , junto con clases abstractas , clases finales , métodos abstractos y métodos finales . También introdujo una forma estándar de declarar constructores y destructores , similar a la de otros lenguajes orientados a objetos como C++ , y un modelo estándar de manejo de excepciones . Además, PHP 5 agregó interfaces y permitió la implementación de múltiples interfaces. Hay interfaces especiales que permiten que los objetos interactúen con el sistema de tiempo de ejecución. Los objetos que implementan ArrayAccess se pueden usar con la sintaxis de matriz y los objetos que implementan Iterator o IteratorAggregate se pueden usar con el foreach lenguaje construct . No hay una característica de tabla virtual en el motor, por lo que las variables estáticas se vinculan con un nombre en lugar de una referencia en el momento de la compilación. [232]

Si el desarrollador crea una copia de un objeto utilizando la palabra reservada clone, el motor Zend comprobará si __clone()se ha definido un método. Si no, llamará a un valor predeterminado __clone()que copiará las propiedades del objeto. Si __clone()se define un método, entonces será responsable de establecer las propiedades necesarias en el objeto creado. Para mayor comodidad, el motor proporcionará una función que importe las propiedades del objeto de origen, de modo que el programador pueda comenzar con una réplica por valor del objeto de origen y solo anular las propiedades que se deben cambiar. [233]

La visibilidad de las propiedades y métodos de PHP se define utilizando las palabras claves public , private, y protected. El valor predeterminado es public, si solo se utiliza varvar ; es un sinónimo de public. publicSe puede acceder a los elementos declarados en todas partes. protectedlimita el acceso a las clases heredadas (y a la clase que define el elemento). privatelimita la visibilidad solo a la clase que define el elemento. [234] Los objetos del mismo tipo tienen acceso a los miembros privados y protegidos de los demás, aunque no sean la misma instancia. [ cita requerida ]

Ejemplo

El siguiente es un ejemplo básico de programación orientada a objetos en PHP 8:

<?php

 clase  abstracta Usuario
{
     cadena  protegida $nombre ;

     función  pública __construct ( cadena  $nombre )
    {
        // hacer que la primera letra sea mayúscula y el resto minúscula
        $this -> nombre  =  ucfirst ( strtolower ( $nombre ));
    }

     función  pública saludo () :  cadena
    {
        devuelve  "Hola, mi nombre es "  .  $this -> nombre ;
    }

     función pública  abstracta job () : cadena ;  
}

La clase  Estudiante  extiende  Usuario
{
     función  pública __construct ( cadena  $nombre ,  cadena privada  $curso ) 
    {
        padre :: __construct ( $nombre );
    }

     función  pública job () :  cadena
    {
        devuelve  "Aprendo"  .  $this -> curso ;
    }
}

La clase  Profesor  extiende  al Usuario
{
     función  pública __construct ( cadena  $nombre ,  matriz privada  $cursosdeenseñanza ) 
    {
        padre :: __construct ( $nombre );
    }

     función  pública job () :  cadena
    {
        devuelve  "Yo enseño"  .  implode ( ", " ,  $this -> cursosenseñanza );
    }
}

$estudiantes  =  [
     Estudiante nuevo ( "Alice" ,  "Ciencias de la Computación" ),
    Nuevo  estudiante ( "Bob" ,  "Ciencias de la Computación" ),
    Nuevo  estudiante ( "Charlie" ,  "Estudios Empresariales" ),
];

$profesores  =  [
    nuevo  Profesor ( "Dan" ,  [ "Ciencias de la Computación" ,  "Seguridad de la Información" ]),
    nueva  profesora ( "Erin" ,  [ "Ciencias de la Computación" ,  "Programación de Gráficos 3D" ]),
    nuevo  Profesor ( "Frankie" ,  [ "Marketing Online" ,  "Estudios Empresariales" ,  "Comercio Electrónico" ]),
];

foreach  ([ $estudiantes ,  $profesores ]  como  $usuarios )  {
    echo  $usuarios [ 0 ] :: clase  .  "s: \n " ;

    array_walk ( $usuarios ,  función  ( Usuario  $usuario )  {
        echo  " { $usuario -> saludo () } , { $usuario -> trabajo () } \n " ;
    });
}

Este programa genera el siguiente resultado:

Estudiantes:
Hola, mi nombre es Alice, estudio informática.
Hola, mi nombre es Bob, estudio Ciencias de la Computación.
Hola, mi nombre es Charlie, estudio Estudios Empresariales.
Profesores:
Hola, mi nombre es Dan, enseño Ciencias de la Computación, Seguridad de la Información.
Hola, mi nombre es Erin, enseño Ciencias de la Computación, Programación de Gráficos 3D.
Hola, mi nombre es Frankie, doy clases de Marketing Online, Estudios Empresariales, Comercio Electrónico.

Implementaciones

La única implementación completa de PHP es la original, conocida simplemente como PHP. Es la más utilizada y está impulsada por el motor Zend . Para distinguirla de otras implementaciones, a veces se la llama extraoficialmente "Zend PHP". El motor Zend compila el código fuente de PHP sobre la marcha en un formato interno que puede ejecutar, por lo que funciona como un intérprete . [235] [236] También es la "implementación de referencia" de PHP, ya que PHP no tiene una especificación formal, y por lo tanto la semántica de Zend PHP define la semántica de PHP. Debido a la semántica compleja y matizada de PHP, definida por cómo funciona Zend, es difícil que las implementaciones de la competencia ofrezcan una compatibilidad completa. [ cita requerida ]

El modelo de ejecución de una sola solicitud por script de PHP y el hecho de que Zend Engine sea un intérprete conducen a la ineficiencia; como resultado, se han desarrollado varios productos para ayudar a mejorar el rendimiento de PHP. Para acelerar el tiempo de ejecución y no tener que compilar el código fuente de PHP cada vez que se accede a la página web, los scripts de PHP también se pueden implementar en el formato interno del motor PHP mediante el uso de un caché de códigos de operación , que funciona almacenando en caché la forma compilada de un script PHP (códigos de operación) en la memoria compartida para evitar la sobrecarga de analizar y compilar el código cada vez que se ejecuta el script. Un caché de códigos de operación, Zend Opcache , está integrado en PHP desde la versión 5.5. [237] Otro ejemplo de un caché de códigos de operación ampliamente utilizado es el Alternative PHP Cache (APC), que está disponible como una extensión PECL . [238]

Si bien Zend PHP sigue siendo la implementación más popular, se han desarrollado otras implementaciones. Algunas de ellas son compiladores o admiten la compilación JIT y, por lo tanto, ofrecen ventajas de rendimiento sobre Zend PHP a costa de carecer de compatibilidad total con PHP. [ cita requerida ] Las implementaciones alternativas incluyen las siguientes:

  • HHVM (HipHop Virtual Machine): desarrollado en Facebook y disponible como código abierto, convierte el código PHP en un bytecode de alto nivel (comúnmente conocido como lenguaje intermedio ), que luego se traduce a código de máquina x86-64 dinámicamente en tiempo de ejecución mediante un compilador just-in-time (JIT), lo que da como resultado mejoras de rendimiento de hasta 6 veces. [239] Sin embargo, desde la versión 7.2, Zend ha superado a HHVM, [240] y HHVM 3.24 es la última versión que admite oficialmente PHP. [241]
    • HipHop  – desarrollado en Facebook y disponible como código abierto, transforma los scripts PHP en código C++ y luego compila el código resultante, reduciendo la carga del servidor hasta en un 50%. A principios de 2013, Facebook lo desestimó en favor de HHVM debido a múltiples razones, incluidas las dificultades de implementación y la falta de soporte para todo el lenguaje PHP, incluidas las construcciones create_function()y . [242]eval()
  • Parrot  – una máquina virtual diseñada para ejecutar lenguajes dinámicos de manera eficiente; el traductor cruzado Pipp transforma el código fuente PHP en la representación intermedia de Parrot , que luego se traduce al código de bytes de Parrot y es ejecutado por la máquina virtual.
  • PeachPie : un compilador de segunda generación para el código de bytes del lenguaje intermedio común (CIL) de . NET , creado sobre la plataforma Roslyn ; sucesor de Phalanger, que comparte varios componentes arquitectónicos
  • Phalanger  : compila PHP en código de bytes del lenguaje intermedio común .Net; predecesor de PeachPie
  • Quercus  – compila PHP en bytecode Java

Licencias

PHP es un software libre publicado bajo la Licencia PHP , que estipula que: [243]

Los productos derivados de este software no pueden llamarse "PHP", ni puede aparecer "PHP" en su nombre, sin el permiso previo por escrito de group@php.net. Puede indicar que su software funciona en conjunto con PHP diciendo " Foo for PHP" en lugar de llamarlo "PHP Foo" o "phpfoo".

Esta restricción en el uso de "PHP" hace que la Licencia PHP sea incompatible con la Licencia Pública General GNU (GPL), mientras que la Licencia Zend es incompatible debido a una cláusula de publicidad similar a la de la licencia BSD original . [244]

Desarrollo y comunidad

PHP incluye varias bibliotecas gratuitas y de código abierto en su distribución fuente o las utiliza en compilaciones binarias PHP resultantes. PHP es fundamentalmente un sistema que reconoce Internet con módulos integrados para acceder a servidores de Protocolo de Transferencia de Archivos (FTP) y muchos servidores de bases de datos, incluyendo PostgreSQL , MySQL , Microsoft SQL Server y SQLite (que es una base de datos integrada), servidores LDAP y otros. Numerosas funciones son familiares para los programadores de C, como las de la familia stdio , están disponibles en compilaciones PHP estándar. [245]

PHP permite a los desarrolladores escribir extensiones en C para añadir funcionalidad al lenguaje PHP. Las extensiones PHP pueden compilarse estáticamente en PHP o cargarse dinámicamente en tiempo de ejecución. Se han escrito numerosas extensiones para añadir compatibilidad con la API de Windows , gestión de procesos en sistemas operativos tipo Unix , cadenas multibyte ( Unicode ), cURL y varios formatos de compresión populares . Otras características de PHP disponibles a través de extensiones incluyen la integración con Internet Relay Chat (IRC), la generación dinámica de imágenes y contenido de Adobe Flash , PHP Data Objects (PDO) como una capa de abstracción utilizada para acceder a bases de datos, [246] [247] [248 ] [ 249] [250] [251] [252] e incluso síntesis de voz . Algunas de las funciones principales del lenguaje, como las que tratan con cadenas y matrices, también se implementan como extensiones. [253] El proyecto PHP Extension Community Library (PECL) es un repositorio de extensiones para el lenguaje PHP. [254]

Otros proyectos, como Zephir , ofrecen la posibilidad de crear extensiones PHP en un lenguaje de alto nivel y compilarlas en extensiones PHP nativas. Este enfoque, en lugar de escribir extensiones PHP directamente en C, simplifica el desarrollo de extensiones y reduce el tiempo necesario para la programación y las pruebas. [255]

En diciembre de 2018, el Grupo PHP estaba formado por diez personas: Thies C. Arntzen, Stig Bakken, Shane Caraveo, Andi Gutmans , Rasmus Lerdorf , Sam Ruby , Sascha Schumann, Zeev Suraski , Jim Winstead y Andrei Zmievski . [256]

Zend Technologies ofrece un examen de certificación PHP basado en PHP 7 [257] (y anteriormente basado en PHP 5.5) para que los programadores se conviertan en desarrolladores PHP certificados.

La Fundación PHP

El 26 de noviembre de 2021, el blog JetBrains anunció la creación de The PHP Foundation, que patrocinará el diseño y desarrollo de PHP. [259]

La fundación contrata a "desarrolladores básicos" para trabajar en el repositorio básico del lenguaje PHP. Roman Pronskiy, miembro de la junta directiva de la fundación, dijo que su objetivo es pagar "salarios de mercado" a los desarrolladores. [262]

La respuesta a la fundación ha sido mayoritariamente positiva, y se la ha elogiado por brindar un mejor soporte al lenguaje y ayudar a detener la disminución de la popularidad del lenguaje. [263] [264] Sin embargo, también ha sido criticada por agregar cambios importantes a versiones menores de PHP, como en PHP 8.2, donde inicializar miembros de una clase fuera del alcance de la clase original causaría errores de depreciación, [265] estos cambios afectaron a varios proyectos de código abierto, incluido WordPress . [266]

El Fondo Tecnológico Soberano de Alemania proporcionó más de 200.000 euros para apoyar a la Fundación PHP. [267]

Instalación y configuración

Ejemplo de salida de la función phpinfo() en PHP 7.1

Existen dos formas principales de agregar soporte para PHP a un servidor web: como un módulo de servidor web nativo o como un ejecutable CGI. PHP tiene una interfaz de módulo directa llamada interfaz de programación de aplicaciones de servidor (SAPI), que es compatible con muchos servidores web, incluidos Apache HTTP Server , Microsoft IIS y iPlanet Web Server . Algunos otros servidores web, como OmniHTTPd, admiten la Interfaz de programación de aplicaciones de servidor de Internet (ISAPI), que es la interfaz de módulo de servidor web de Microsoft . Si PHP no tiene soporte de módulo para un servidor web, siempre se puede usar como una Interfaz de puerta de enlace común (CGI) o un procesador FastCGI ; en ese caso, el servidor web está configurado para usar el ejecutable CGI de PHP para procesar todas las solicitudes a archivos PHP. [268]

PHP-FPM (FastCGI Process Manager) es una implementación alternativa de FastCGI para PHP, incluida en la distribución oficial de PHP desde la versión 5.3.3. [269] En comparación con la implementación anterior de FastCGI, contiene algunas características adicionales, en su mayoría útiles para servidores web con mucha carga. [270]

Al utilizar PHP para la ejecución de scripts desde la línea de comandos, se necesita un ejecutable de interfaz de línea de comandos (CLI) de PHP. PHP admite una interfaz de programación de aplicaciones de servidor CLI (SAPI) desde PHP 4.3.0. [271] El objetivo principal de esta SAPI es desarrollar aplicaciones de shell utilizando PHP. Existen bastantes diferencias entre la SAPI CLI y otras SAPI, aunque comparten muchos de los mismos comportamientos. [272]

PHP tiene una interfaz de módulo directo llamada SAPI para diferentes servidores web; [273] en el caso de PHP 5 y Apache 2.0 en Windows, se proporciona en forma de un archivo DLL llamado php5apache2.dll , [274] que es un módulo que, entre otras funciones, proporciona una interfaz entre PHP y el servidor web, implementado en un formato que el servidor entiende. Este formato es lo que se conoce como SAPI. [ cita requerida ]

Existen diferentes tipos de SAPI para varias extensiones de servidor web. Por ejemplo, además de las mencionadas anteriormente, otras SAPI para el lenguaje PHP incluyen la interfaz de puerta de enlace común y la interfaz de línea de comandos. [273] [275]

PHP también se puede utilizar para escribir aplicaciones de interfaz gráfica de usuario (GUI) de escritorio, mediante el uso de la extensión PHP-GTK . PHP-GTK no está incluido en la distribución oficial de PHP [268] y, como extensión, se puede utilizar únicamente con las versiones de PHP 5.1.0 y posteriores. La forma más común de instalar PHP-GTK es compilándolo a partir del código fuente [276] .

Cuando se instala y utiliza PHP en entornos de nube , se proporcionan kits de desarrollo de software (SDK) para utilizar funciones específicas de la nube. [ cita requerida ] Por ejemplo:

Se admiten numerosas opciones de configuración que afectan tanto a las funciones básicas de PHP como a las extensiones. [279] [280] El archivo de configuración php.inise busca en diferentes ubicaciones, según la forma en que se utiliza PHP. [281] El archivo de configuración se divide en varias secciones, [282] mientras que algunas de las opciones de configuración también se pueden establecer dentro de la configuración del servidor web. [283]

Usar

Una descripción general amplia del paquete de software LAMP, que se muestra aquí junto con Squid

PHP es un lenguaje de programación de propósito general que es especialmente adecuado para el desarrollo web del lado del servidor , en cuyo caso PHP generalmente se ejecuta en un servidor web . Cualquier código PHP en un archivo solicitado es ejecutado por el entorno de ejecución de PHP, generalmente para crear contenido de página web dinámico o imágenes dinámicas utilizadas en sitios web o en otros lugares. [284] También se puede utilizar para scripts de línea de comandos y aplicaciones de interfaz gráfica de usuario (GUI) del lado del cliente . PHP se puede implementar en la mayoría de los servidores web, muchos sistemas operativos y plataformas , y se puede utilizar con muchos sistemas de administración de bases de datos relacionales (RDBMS). La mayoría de los proveedores de alojamiento web admiten PHP para su uso por parte de sus clientes. Está disponible de forma gratuita y PHP Group proporciona el código fuente completo para que los usuarios lo creen, personalicen y amplíen para su propio uso. [18]

Página web dinámica: ejemplo de scripting del lado del servidor (PHP y MySQL)

Originalmente diseñado para crear páginas web dinámicas , PHP ahora se enfoca principalmente en scripts del lado del servidor , [285] y es similar a otros lenguajes de scripts del lado del servidor que proporcionan contenido dinámico desde un servidor web a un cliente , como Python , ASP.NET de Microsoft , JavaServer Pages de Sun Microsystems , [286] y . PHP también ha atraído el desarrollo de muchos marcos de software que proporcionan bloques de construcción y una estructura de diseño para promover el desarrollo rápido de aplicaciones (RAD). [ cita requerida ] Algunos de estos incluyen PRADO , CakePHP , Symfony , CodeIgniter , Laravel , Yii Framework , Phalcon y Laminas , que ofrecen características similares a otros marcos web . mod_perl

La arquitectura LAMP se ha vuelto popular en la industria web como una forma de implementar aplicaciones web. [287] PHP se usa comúnmente como la P en este paquete junto con Linux , Apache y MySQL , aunque la P también puede referirse a Python , Perl o alguna combinación de los tres. Paquetes similares, WAMP y MAMP , también están disponibles para Windows y macOS , y la primera letra representa el sistema operativo respectivo. Aunque tanto PHP como Apache se proporcionan como parte de la instalación base de macOS, los usuarios de estos paquetes buscan un mecanismo de instalación más simple que se pueda mantener actualizado más fácilmente. [ cita requerida ]

Para escenarios de uso específicos y más avanzados, PHP ofrece una forma bien definida y documentada de escribir extensiones personalizadas en C o C++ . [288] [289] [290] [291] [292] [293] [294] [ se necesita una fuente no primaria ] Además de extender el lenguaje en sí en forma de bibliotecas adicionales , las extensiones brindan una forma de mejorar la velocidad de ejecución donde es crítica y hay espacio para mejoras mediante el uso de un lenguaje compilado real . [295] [296] PHP también ofrece formas bien definidas de incrustarse en otros proyectos de software. De esa manera, PHP se puede usar fácilmente como un lenguaje de script interno para otro proyecto, proporcionando también una interfaz estrecha con las estructuras de datos internas específicas del proyecto . [297]

PHP recibió críticas mixtas debido a la falta de soporte para subprocesos múltiples en el nivel del lenguaje central, [298] aunque el uso de subprocesos es posible gracias a la extensión PECL "pthreads" . [299] [300]

Se han producido una interfaz de línea de comandos, php-cli, y dos motores de scripts ActiveX Windows Script Host para PHP. [ cita requerida ]

Estadísticas de popularidad y uso

PHP se utiliza para sistemas de gestión de contenido web , incluidos MediaWiki , [301] WordPress , [302] Joomla , [303] Drupal , [304] Moodle , [305] eZ Publish , eZ Platform y SilverStripe . [306]

En enero de 2013 [update], PHP se utilizaba en más de 240 millones de sitios web (el 39 % de los muestreados) y estaba instalado en 2,1 millones de servidores web . [307]

Al 23 de septiembre de 2024 [update](diez meses después del lanzamiento de PHP 8.3), PHP se utiliza como lenguaje de programación del lado del servidor en el 75,8% de los sitios web donde se pudo determinar el lenguaje; PHP 7 es la versión más utilizada del lenguaje con el 51% de los sitios web que usan PHP en esa versión, mientras que el 35,3% usa PHP 8, el 13,5% usa PHP 5 y el 0,1% usa PHP 4. [20]

8 pesos filipinos
35,3%
7 pesos filipinos
51%
5 pesos filipinos
13,5%
4 pesos filipinos
0,1%


Porcentaje de uso de las versiones de PHP el 23 de septiembre de 2024:
diez meses después del lanzamiento de PHP 8.3 [20] [308] [309] [310] [311]

  PHP 8,3: 7,70% de PHP 8 (2,72%)
  PHP 8.2: 22,6% de PHP 8 (7,98%)
  PHP 8.1: 42,0% de PHP 8 (14,83%)
  PHP 8.0: 27,7% de PHP 8 (9,78%)
  PHP 7.4: 71.7% de PHP 7 (36.57%)
  PHP 7,3: 11,9% de PHP 7 (6,07%)
  PHP 7.2: 8,80% de PHP 7 (4,49%)
  PHP 7.1: 3,80% de PHP 7 (1,94%)
  PHP 7.0: 3,90% de PHP 7 (1,99%)
  PHP 5.6: 54,2% de PHP 5 (7,3170%)
  PHP 5,5: 8,20 % de PHP 5 (1,1070 %)
  PHP 5.4: 15.5% de PHP 5 (2.0925%)
  PHP 5.3: 14.7% de PHP 5 (1.9845%)
  PHP 5.2: 6,80% de PHP 5 (0,9180%)
  PHP 5.1: 0,40% de PHP 5 (0,0540%)
  PHP 5.0: 0,10 % de PHP 5 (0,0135 %)
  PHP 4.4: 76.4% de PHP 4 (0.0764%)
  PHP 4.3: 19,0% de PHP 4 (0,0190%)
  PHP 4.2: 3,30% de PHP 4 (0,0033%)
  PHP 4.1: 0,90% de PHP 4 (0,0009%)
  PHP 4.0: 0,40% de PHP 4 (0,0004%)

Seguridad

En 2019, el 11% de todas las vulnerabilidades enumeradas por la Base de Datos Nacional de Vulnerabilidades estaban vinculadas a PHP; [312] históricamente, alrededor del 30% de todas las vulnerabilidades enumeradas desde 1996 en esta base de datos están vinculadas a PHP. Las fallas técnicas de seguridad del lenguaje en sí o de sus bibliotecas principales no son frecuentes (22 en 2009, alrededor del 1% del total, aunque PHP se aplica a aproximadamente el 20% de los programas enumerados). [313] Reconociendo que los programadores cometen errores, algunos lenguajes incluyen la verificación de defectos para detectar automáticamente la falta de validación de entrada que induce muchos problemas. Esta característica se ha propuesto para PHP en el pasado, pero se ha rechazado o se ha abandonado la propuesta. [314] [315] [316]

Proyectos de terceros como Suhosin [317] y Snuffleupagus [318] tienen como objetivo eliminar o cambiar partes peligrosas del lenguaje.

Historically, old versions of PHP had some configuration parameters and default values for such runtime settings that made some PHP applications prone to security issues. Among these, magic_quotes_gpc and register_globals[319] configuration directives were the best known; the latter made any URL parameters become PHP variables, opening a path for serious security vulnerabilities by allowing an attacker to set the value of any uninitialized global variable and interfere with the execution of a PHP script. Support for "magic quotes" and "register globals" settings has been deprecated since PHP 5.3.0, and removed from PHP 5.4.0.[320]

Another example for the potential runtime-settings vulnerability comes from failing to disable PHP execution (for example by using the engine configuration directive)[321] for the directory where uploaded files are stored; enabling it can result in the execution of malicious code embedded within the uploaded files.[322][323][324] The best practice is to either locate the image directory outside of the document root available to the web server and serve it via an intermediary script or disable PHP execution for the directory which stores the uploaded files.[citation needed]

Also, enabling the dynamic loading of PHP extensions (via enable_dl configuration directive)[325] in a shared web hosting environment can lead to security issues.[326][327]

Implied type conversions that result in different values being treated as equal, sometimes against the programmer's intent, can lead to security issues. For example, the result of the comparison '0e1234' == '0' is true, because strings that are parsable as numbers are converted to numbers; in this case, the first compared value is treated as scientific notation having the value (0×101234), which is zero. Errors like this resulted in authentication vulnerabilities in Simple Machines Forum,[328] Typo3[329] and phpBB[330] when MD5 password hashes were compared. The recommended way is to use hash_equals() (for timing attack safety), strcmp or the identity operator (===), as '0e1234' === '0' results in false.[citation needed]

In a 2013 analysis of over 170,000 website defacements, published by Zone-H, the most frequently (53%) used technique was the exploitation of file inclusion vulnerability, mostly related to insecure usage of the PHP language constructs include, require, and allow_url_fopen.[331][332]

Cryptographic Security

PHP includes rand()[333] and mt_rand()[334]functions which use a pseudorandom number generator, and are not cryptographically secure. As of version 8.1, the random_int() function is included, which uses a cryptographically secure source of randomness provided by the system.[335]

There are two attacks that can be performed over PHP entropy sources: "seed attack" and "state recovery attack".[citation needed] As of 2012, a $250 GPU can perform up to 230 MD5 calculations per second, while a $750 GPU can perform four times as many calculations at the same time.[336] In combination with a "birthday attack" this can lead to serious security vulnerabilities.[citation needed]

Long Term Support

The PHP development team provides official bug fixes for 2 years following release of each minor version, followed by another 2 years where only security fixes are released.[337] After this, the release is considered end of life and no longer officially supported.

Extended Long Term Support beyond this is available from commercial providers, such as Zend and others[338][339]

See also

References

  1. ^ a b Lerdorf, Rasmus (June 8, 1995). "Announce: Personal Home Page Tools (PHP Tools)". Retrieved 7 June 2011.
  2. ^ a b Lerdorf, Rasmus (2007-04-26). "PHP on Hormones – history of PHP presentation by Rasmus Lerdorf given at the MySQL Conference in Santa Clara, California". The Conversations Network. Archived from the original on 2019-01-06. Retrieved 2009-12-11.
  3. ^ "PHP: News Archive - 2024". www.php.net.
  4. ^ "PHP: News Archive - 2024". www.php.net.
  5. ^ "PHP: Function arguments – Manual". secure.php.net.
  6. ^ "PHP: Release Archives (museum)". museum.php.net.
  7. ^ "PHP: Preface – Manual".
  8. ^ Stogov, Dmitry [@dstogov] (2015-12-04). "It's not a secret that some #PHP7 optimization ideas came from HHVM, LuaJIT and V8. Thank you @HipHopVM @SaraMG. #php7thankyou" (Tweet) – via Twitter.
  9. ^ "PHP: Hypertext Preprocessor". www.php.net. Retrieved 2020-02-12.
  10. ^ a b Krill, Paul (2013-11-18). "Believe the hype: PHP founder backs Facebook's HipHop technology". InfoWorld. Retrieved 2022-10-13.
  11. ^ "Announce: Personal Home Page Tools (PHP Tools)". groups.google.com. Retrieved 2022-11-03.
  12. ^ a b c d e f g h i "History of PHP and related projects". The PHP Group. Retrieved 2008-02-25.
  13. ^ a b "History of PHP". php.net.
  14. ^ Olsson, Mikael (2013-09-04). PHP Quick Scripting Reference. Apress. ISBN 978-1-4302-6284-8.
  15. ^ PHP Manual: Preface, www.php.net.
  16. ^ "Introduction: What can PHP do?". PHP Manual. Retrieved 2009-03-05.
  17. ^ helicopter: Port of node-ar-drone which allows user to control a Parrot AR Drone over PHP: jolicode/php-ar-drone, JoliCode, 2019-01-11, retrieved 2019-02-23
  18. ^ a b "Embedding PHP in HTML". O'Reilly. 2001-05-03. Archived from the original on 2008-02-19. Retrieved 2008-02-25.
  19. ^ "PHP: Unsupported Branches". www.php.net.
  20. ^ a b c "Usage statistics of PHP for websites". W3Techs – World Wide Web Technology Surveys. W3Techs. Retrieved 23 September 2024.
  21. ^ Lerdorf, Rasmus (2012-07-20). "I wonder why people keep writing that PHP was ever written in Perl. It never was. #php". Twitter. Retrieved 2014-09-04.
  22. ^ Lerdorf, Rasmus (2007-04-26). "PHP on Hormones". The Conversations Network. Archived from the original (mp3) on 2019-01-06. Retrieved 2009-06-22.
  23. ^ Lerdorf, Rasmus (2007). "Slide 3". slides for 'PHP on Hormones' talk. The PHP Group. Retrieved 2009-06-22.
  24. ^ Lerdorf, Rasmus (1995-06-08). "Announce: Personal Home Page Tools (PHP Tools)". Newsgroup: comp.infosystems.www.authoring.cgi. Retrieved 2006-09-17.
  25. ^ "Rasmus Lerdorf, Senior Technical Yahoo: PHP, Behind the Mic". 2003-11-19. Archived from the original on 2013-07-28.
  26. ^ Alshetwi, A.B.; Rahmat, R. A. A. O.; Borhan, M. N.; Ismael, S.; Ali, A.; Irtema, H. I. M.; Alfakhria, A. Y. (2018). "Web-Based Expert System for Optimizing of Traffic Road in Developing Countries". Retrieved 13 Feb 2024.
  27. ^ "Problems with PHP". Retrieved 20 December 2010.
  28. ^ "php.internals: Re: Function name consistency". news.php.net. 2013-12-28. Retrieved 2014-02-09.
  29. ^ Rasmus Lerdorf (Dec 16, 2013). "Re: Flexible function naming". Newsgroup: php.internals. Retrieved December 26, 2013.
  30. ^ "PHP – Acronym Meaning Vote". PHP.net. Archived from the original on August 15, 2000.
  31. ^ "Zend Engine version 2.0: Feature Overview and Design". Zend Technologies Ltd. Archived from the original on 2006-07-19. Retrieved 2006-09-17.
  32. ^ "php.net 2007 news archive". The PHP Group. 2007-07-13. Retrieved 2008-02-22.
  33. ^ Kerner, Sean Michael (2008-02-01). "PHP 4 is Dead—Long Live PHP 5". InternetNews. Archived from the original on 2018-08-06. Retrieved 2018-12-16.
  34. ^ Trachtenberg, Adam (2004-07-15). "Why PHP 5 Rocks!". O'Reilly. Archived from the original on 2016-03-31. Retrieved 2008-02-22.
  35. ^ "Late Static Binding in PHP". Digital Sandwich. 2006-02-23. Retrieved 2008-03-25.
  36. ^ "Static Keyword". The PHP Group. Retrieved 2008-03-25.
  37. ^ "GoPHP5". Archived from the original on 2011-07-17.
  38. ^ "PHP projects join forces to Go PHP 5" (PDF). GoPHP5 Press Release. Archived from the original (PDF) on 2019-08-04. Retrieved 2008-02-23.
  39. ^ "GoPHP5". GoPHP5. Archived from the original on 2011-04-27. Retrieved 2008-02-22.
  40. ^ "PHP Installation and Configuration". php.net. Retrieved 2013-10-29.
  41. ^ "PHP for Windows: Binaries and sources releases (5.3)". php.net. Retrieved 2013-10-29.
  42. ^ "PHP for Windows: Binaries and sources releases (5.4)". php.net. Retrieved 2013-10-29.
  43. ^ "PHP for Windows: Binaries and sources releases (5.5)". php.net. Retrieved 2013-10-29.
  44. ^ "PHP: Supported Versions".
  45. ^ "Types: Strings (PHP Manual)". PHP.net. Retrieved 2013-09-22.
  46. ^ "Details of the String Type (PHP Manual)". PHP.net. Retrieved 2021-09-22.
  47. ^ Andrei Zmievski (2005-08-10). "PHP Unicode support design document" (Mailing list). Retrieved 2014-02-09.
  48. ^ "PHP 5.5 or 6.0". Retrieved 2014-02-09.
  49. ^ Andrei Zmievski (2011-04-22). "The Good, the Bad, and the Ugly: What Happened to Unicode and PHP 6". Retrieved 2014-02-09.
  50. ^ Rasmus Lerdorf (2010-03-11). "PHP 6" (Mailing list). Retrieved 2014-02-07.
  51. ^ "The Neverending Muppet Debate of PHP 6 v PHP 7". Archived from the original on 2015-11-19. Retrieved 2015-11-19.
  52. ^ "RFC: Name of Next Release of PHP". php.net. 2014-07-07. Retrieved 2014-07-15.
  53. ^ "Re: [PHP-DEV] [VOTE] [RFC] Name of Next Release of PHP (again)". 2014-07-30. Retrieved 2014-07-30.
  54. ^ "phpng: Refactored PHP Engine with Big Performance Improvement". news.php.net.
  55. ^ "PHP: rfc:phpng". php.net. Retrieved 16 December 2014.
  56. ^ a b "PHP: phpng". php.net. Retrieved 2014-07-15.
  57. ^ "Merge branch 'ZendEngine3'". github.com. 2014-12-05. Retrieved 2014-12-05.
  58. ^ a b c "PHP: Release Process". 2011-06-20. Retrieved 2013-10-06.
  59. ^ a b "PHP RFC: Exceptions in the engine (for PHP 7)". php.net. Retrieved 2015-05-21.
  60. ^ a b "PHP RFC: Uniform Variable Syntax". php.net. 2014-05-31. Retrieved 2014-07-30.
  61. ^ "Online PHP editor | output for udRhX". 3v4l.org.
  62. ^ "PHP RFC: Fix "foreach" behavior". php.net. Retrieved 2015-05-21.
  63. ^ "PHP RFC: Constructor behaviour of internal classes". php.net. Retrieved 2015-05-21.
  64. ^ "PHP RFC: Removal of dead or not yet PHP7 ported SAPIs and extensions". php.net. Retrieved 2015-05-21.
  65. ^ "PHP RFC: Fix list() behavior inconsistency". php.net. Retrieved 2015-05-21.
  66. ^ "PHP RFC: Remove alternative PHP tags". php.net. Retrieved 2015-05-21.
  67. ^ "PHP RFC: Make defining multiple default cases in a switch a syntax error". php.net. Retrieved 2015-05-21.
  68. ^ "PHP RFC: Remove hex support in numeric strings". php.net. Retrieved 2015-05-21.
  69. ^ a b "PHP RFC: Integer Semantics". php.net. Retrieved 2015-05-21. Making NaN and Infinity always become zero when cast to integer means more cross-platform consistency, and is also less surprising than what is currently produces
  70. ^ "PHP RFC: ZPP Failure on Overflow". php.net. Retrieved 2015-05-21.
  71. ^ a b c "RFC: Return Types". php.net. 2015-01-27. Retrieved 2015-01-28.
  72. ^ a b c d e f "RFC: Scalar Type Declarations". php.net. 2015-03-16. Retrieved 2015-03-17.
  73. ^ a b c d e f g h i j k l Brent. "What's new in PHP 8". Stitcher. Retrieved 22 September 2020.
  74. ^ a b "PHP 8 Released". PHP. Retrieved 27 November 2020.
  75. ^ a b "PHP: rfc:jit". wiki.php.net. Retrieved 2019-04-05.
  76. ^ Brent. "PHP 8: JIT performance in real-life web applications". Stitcher.io. Retrieved 4 October 2020.
  77. ^ Rethams, Derick. "PHP 8: A Quick Look at JIT".
  78. ^ a b Popov, Nikita (13 July 2020). ""What's new in PHP 8.0?" Nikita Popov". PHP fwdays. Archived from the original on 2021-12-11. Retrieved 4 October 2020.
  79. ^ Daniele, Carlo (25 May 2020). "What's New in PHP 8 (Features, Improvements, and the JIT Compiler)". Kinsta. Retrieved 24 December 2020.
  80. ^ Redmond, Paul (15 July 2020). "Match Expression is Coming to PHP 8". Laravel News. Retrieved 4 October 2020.
  81. ^ "PHP 8.0: Match Expressions". PHP Watch. Retrieved 4 October 2020.
  82. ^ Barnes, Eric (27 November 2020). "PHP 8 is now Released!". Laravel News. Retrieved 24 December 2020.
  83. ^ a b "PHP RFC: throw expression". wiki.php.net. Retrieved 14 August 2020.
  84. ^ a b "PHP RFC: Nullsafe operator". wiki.php.net. Retrieved 14 August 2020.
  85. ^ Roose, Brent. "PHP 8: Constructor property promotion". Retrieved 30 April 2024.
  86. ^ a b "PHP: rfc:weakrefs". wiki.php.net. Retrieved 2019-04-05.
  87. ^ Merchant, Amit (13 June 2020). "These new string functions are coming in PHP 8". Amit Merchant. Retrieved 4 October 2020.
  88. ^ Popov, Nikita. "Call for participation: Annotating internal function argument and return types". Externals. Retrieved 19 November 2020.
  89. ^ "PHP 8 ChangeLog". PHP.net. Retrieved 2024-01-05.
  90. ^ "PHP: PHP 8.1.0 Release Announcement". PHP.net. Retrieved 2024-01-05.
  91. ^ "PHP 8 ChangeLog". PHP.net. Retrieved 2024-01-05.
  92. ^ "PHP: PHP 8.2.0 Release Announcement". PHP.net. Retrieved 2024-01-05.
  93. ^ a b c d e f g h i j k l "Unsupported Branches". php.net. Retrieved 2019-07-31.
  94. ^ "PHP 4.0.0 Released". Retrieved 25 October 2020.
  95. ^ a b c d "PHP: PHP 4 ChangeLog". The PHP Group. 2008-01-03. Retrieved 2008-02-22.
  96. ^ "PHP 4.1.0 Release Announcement". Retrieved 25 October 2020.
  97. ^ "PHP 4.2.0 Release Announcement". Retrieved 25 October 2020.
  98. ^ "PHP 4.3.0 Release Announcement". Retrieved 25 October 2020.
  99. ^ "Using PHP from the command line". PHP Manual. The PHP Group. Retrieved 2009-09-11.
  100. ^ "PHP 4.4.0 Release Announcement". Retrieved 25 October 2020.
  101. ^ "PHP 4.4.0 Release Announcement". PHP Mannual. The PHP Group. Retrieved 2013-11-24.
  102. ^ "PHP 5.0.0 Released!". Retrieved 25 October 2020.
  103. ^ a b c "PHP: PHP 5 ChangeLog". The PHP Group. 2007-11-08. Retrieved 2008-02-22.
  104. ^ "PHP 5.1.0 Release Announcement". Retrieved 25 October 2020.
  105. ^ "PHP manual: PDO". The PHP Group. 2011-11-15. Retrieved 2011-11-15.
  106. ^ "PHP 5.2.0 Release Announcement". Retrieved 25 October 2020.
  107. ^ "PHP 5.3.0 Release Announcement". Retrieved 25 October 2020.
  108. ^ "PHP 5.4.0 Release Announcement". Retrieved 25 October 2020.
  109. ^ "Built-in web server". Retrieved March 26, 2012.
  110. ^ "PHP 5.5.0 Release Announcement". Retrieved 25 October 2020.
  111. ^ a b c d "Supported Versions". php.net. Retrieved 2017-12-13.
  112. ^ "PHP 5.5.0 changes". php.net. Retrieved 2015-03-03.
  113. ^ "PHP 5.6.0 Release Announcement". Retrieved 25 October 2020.
  114. ^ "Migrating from PHP 5.5.x to PHP 5.6.x". php.net. Retrieved 2014-03-24.
  115. ^ "Resetting PHP 6". There have been books on the shelves purporting to cover PHP 6 since at least 2008. But, in March 2010, the PHP 6 release is not out – in fact, it is not even close to out. Recent events suggest that PHP 6 will not be released before 2011 – if, indeed, it is released at all.
  116. ^ "PHP 7 moves full speed ahead". 2014-10-31. Recent versions of PHP have been part of the 5.x release series, but there will be no PHP 6. "We're going to skip [version] 6, because years ago, we had plans for a 6, but those plans were very different from what we're doing now," Gutmans said. Going right to version 7 avoids confusion.
  117. ^ "News Archive – 2018: PHP 7.2.9 Released". php.net. 2018-08-16. Retrieved 2018-08-16.
  118. ^ "PHP: rfc:size_t_and_int64_next". php.net. Retrieved 16 December 2014.
  119. ^ "PHP: rfc:abstract_syntax_tree". php.net. Retrieved 16 December 2014.
  120. ^ "PHP: rfc:closure_apply". php.net. Retrieved 16 December 2014.
  121. ^ "PHP: rfc:integer_semantics". php.net. Retrieved 16 December 2014.
  122. ^ "PHP: rfc:isset_ternary". php.net. Retrieved 16 December 2014.
  123. ^ "RFC: Unicode Codepoint Escape Syntax". 2014-11-24. Retrieved 2014-12-19.
  124. ^ "Combined Comparison (Spaceship) Operator". php.net. Retrieved 2015-05-21.
  125. ^ "PHP RFC: Generator Delegation". php.net. Retrieved 2015-05-21.
  126. ^ "PHP RFC: Anonymous Classes". php.net. Retrieved 2015-05-21.
  127. ^ "PHP RFC: Easy User-land CSPRNG". php.net. Retrieved 2015-05-21.
  128. ^ "PHP RFC: Group Use Declarations". php.net. Retrieved 2015-05-21.
  129. ^ "PHP: rfc:iterable". php.net. 2016-06-10. Retrieved 2023-06-30.
  130. ^ "PHP: rfc:nullable_types". php.net. 2014-04-10. Retrieved 2023-06-30.
  131. ^ "PHP: rfc:void_return_type". php.net. 2015-11-09. Retrieved 2015-11-14.
  132. ^ "PHP: rfc:class_constant_visibility". php.net. 2015-10-27. Retrieved 2015-12-08.
  133. ^ "PHP: rfc:short_list_syntax". php.net. 2016-04-07. Retrieved 2023-06-30.
  134. ^ "PHP: rfc:multiple-catch". php.net. 2016-03-06. Retrieved 2023-06-30.
  135. ^ "PHP: rfc:object-typehint". wiki.php.net.
  136. ^ "PHP: rfc:libsodium". wiki.php.net.
  137. ^ "PHP: rfc:allow-abstract-function-override". wiki.php.net.
  138. ^ "PHP: rfc:parameter-no-type-variance". wiki.php.net.
  139. ^ "PHP: todo:php73". wiki.php.net.
  140. ^ "PHP: rfc:flexible_heredoc_nowdoc_syntaxes". wiki.php.net.
  141. ^ "PHP: rfc:list_reference_assignment". wiki.php.net.
  142. ^ "PHP: rfc:pcre2-migration". wiki.php.net.
  143. ^ "PHP: hrtime – Manual". php.net.
  144. ^ "PHP 7.4.0 Released!". php.net. Retrieved 2019-11-28.
  145. ^ "PHP: rfc:typed_properties_v2". wiki.php.net. Retrieved 2019-04-04.
  146. ^ "PHP: rfc:preload". wiki.php.net. Retrieved 2019-04-04.
  147. ^ "PHP: rfc:null_coalesce_equal_operator". wiki.php.net. Retrieved 2019-04-04.
  148. ^ "PHP: rfc:improve-openssl-random-pseudo-bytes". wiki.php.net. Retrieved 2019-04-04.
  149. ^ "PHP: rfc:ffi". wiki.php.net. Retrieved 2019-04-05.
  150. ^ "PHP: rfc:permanent_hash_ext". wiki.php.net. Retrieved 2019-04-05.
  151. ^ "PHP: rfc:password_registry". wiki.php.net. Retrieved 2019-04-05.
  152. ^ "PHP: rfc:mb_str_split". wiki.php.net. Retrieved 2019-04-05.
  153. ^ "PHP: rfc:reference_reflection". wiki.php.net. Retrieved 2019-04-05.
  154. ^ "PHP: rfc:deprecate-and-remove-ext-wddx". wiki.php.net. Retrieved 2019-04-05.
  155. ^ "PHP: rfc:custom_object_serialization". wiki.php.net. Retrieved 2019-04-05.
  156. ^ "PHP: Supported Versions". php.net. Retrieved 2023-11-26.
  157. ^ "PHP: rfc:negative_array_index". wiki.php.net. Retrieved 2019-04-05.
  158. ^ "PHP RFC: Validation for abstract trait methods". wiki.php.net. Retrieved 14 August 2020.
  159. ^ "PHP RFC: Saner string to number comparisons". wiki.php.net. Retrieved 14 August 2020.
  160. ^ "PHP RFC: Saner numeric strings". wiki.php.net. Retrieved 14 August 2020.
  161. ^ "PHP RFC: Stricter type checks for arithmetic/bitwise operators". wiki.php.net. Retrieved 14 August 2020.
  162. ^ "PHP RFC: Reclassifying engine warnings". wiki.php.net. Retrieved 14 August 2020.
  163. ^ "PHP: rfc:consistent_type_errors". wiki.php.net. Retrieved 2019-04-05.
  164. ^ "PHP: rfc:lsp_errors". wiki.php.net. Retrieved 2019-05-26.
  165. ^ "PHP RFC: Locale-independent float to string cast". wiki.php.net. Retrieved 14 August 2020.
  166. ^ "PHP RFC: Variable Syntax Tweaks". wiki.php.net. Retrieved 14 August 2020.
  167. ^ "PHP RFC: Attributes V2". wiki.php.net. Retrieved 14 August 2020.
  168. ^ "PHP RFC: Attribute Amendments". wiki.php.net. Retrieved 14 August 2020.
  169. ^ "PHP RFC: Shorter Attribute Syntax". wiki.php.net. Retrieved 2020-06-20.
  170. ^ "PHP RFC: Shorter Attribute Syntax Change". wiki.php.net. Retrieved 14 August 2020.
  171. ^ "PHP RFC: Named Arguments". wiki.php.net. Retrieved 14 August 2020.
  172. ^ "PHP RFC: Match expression v2". wiki.php.net. Retrieved 14 August 2020.
  173. ^ "PHP RFC: Constructor Property Promotion". wiki.php.net. Retrieved 14 August 2020.
  174. ^ "PHP RFC: Union Types 2.0". wiki.php.net. Retrieved 14 August 2020.
  175. ^ "PHP RFC: Mixed Type v2". wiki.php.net. Retrieved 14 August 2020.
  176. ^ "PHP RFC: Static return type". wiki.php.net. Retrieved 14 August 2020.
  177. ^ "PHP RFC: non-capturing catches". wiki.php.net. Retrieved 14 August 2020.
  178. ^ Andre, Tyson. "PHP RFC: Always available JSON extension". PHP. Retrieved 25 October 2020.
  179. ^ "PHP: todo:php81". wiki.php.net. Retrieved 2022-06-16.
  180. ^ "PHP RFC: Explicit octal integer literal notation". wiki.php.net. Retrieved 2020-11-25.
  181. ^ "PHP RFC: Enumerations". wiki.php.net. Retrieved 2021-03-25.
  182. ^ "PHP: rfc:readonly_properties_v2". wiki.php.net. Retrieved 2021-11-26.
  183. ^ "PHP: rfc:first_class_callable_syntax". wiki.php.net. Retrieved 2021-11-26.
  184. ^ "PHP: rfc:new_in_initializers". wiki.php.net. Retrieved 2021-11-26.
  185. ^ "PHP: rfc:pure-intersection-types". wiki.php.net. Retrieved 2021-11-26.
  186. ^ "PHP: rfc:noreturn_type". wiki.php.net. Retrieved 2021-11-26.
  187. ^ "PHP: rfc:final_class_const". wiki.php.net. Retrieved 2021-11-26.
  188. ^ "PHP: rfc:fibers". wiki.php.net. Retrieved 2021-11-26.
  189. ^ "PHP: todo:php82". wiki.php.net. Retrieved 2022-06-16.
  190. ^ "PHP: rfc:readonly_classes". wiki.php.net. Retrieved 2022-06-16.
  191. ^ "PHP: rfc:null-false-standalone-types". wiki.php.net. Retrieved 2022-06-16.
  192. ^ "PHP: rfc:true-type". wiki.php.net. Retrieved 2022-06-16.
  193. ^ "PHP: rfc:strtolower-ascii". wiki.php.net. Retrieved 2022-06-16.
  194. ^ "PHP: rfc:dnf_types". wiki.php.net. Retrieved 2023-02-07.
  195. ^ "PHP: rfc:constants_in_traits". wiki.php.net. Retrieved 2023-02-07.
  196. ^ "PHP 8.3.0 Released!". php.net. 23 November 2023. Retrieved 24 November 2023.
  197. ^ "PHP: rfc:typed_class_constants". wiki.php.net. Retrieved 2023-12-17.
  198. ^ "PHP: rfc:dynamic_class_constant_fetch". wiki.php.net. Retrieved 2023-12-17.
  199. ^ "PHP: rfc:marking_overriden_methods". wiki.php.net. Retrieved 2023-12-17.
  200. ^ "PHP: rfc:readonly_amendments". wiki.php.net. Retrieved 2023-12-17.
  201. ^ "PHP: rfc:json_validate". wiki.php.net. Retrieved 2023-12-17.
  202. ^ "PHP: rfc:randomizer_additions". wiki.php.net. Retrieved 2023-12-17.
  203. ^ "PHP: todo: php84". php.net. 26 March 2024. Retrieved 26 March 2024.
  204. ^ "PHP: ElePHPant". 4 Oct 2014. Retrieved 4 Oct 2014.
  205. ^ "Redirecting…". wwphp-fb.github.io.
  206. ^ "The PHP Mascot's Birth - Creator Of The elePHPant Vincent Pontier Reveals The True Story!". 7php.com. 2014-01-06.
  207. ^ "ElePHPant". PHP.earth. Retrieved 2024-02-13.
  208. ^ "PHP: ElePHPant". www.php.net.
  209. ^ "A Field Guide to Elephpants". afieldguidetoelephpants.net.
  210. ^ "tags – Manual". php.net. Retrieved 2014-02-17.
  211. ^ a b "PHP: rfc:shortags". php.net. 2008-04-03. Retrieved 2014-05-08.
  212. ^ "PHP: Basic syntax". The PHP Group. Retrieved 2008-02-22.
  213. ^ "Basic Coding Standard". PHP Framework Interoperability Group. Retrieved 2016-01-03.
  214. ^ "echo – Manual". php.net. Retrieved 2014-02-17.
  215. ^ "Description of core php.ini directives – Manual". php.net. 2002-03-17. Retrieved 2014-02-17.
  216. ^ "Your first PHP-enabled page". The PHP Group. Retrieved 2008-02-25.
  217. ^ Bray, Tim; et al. (26 November 2008). "Processing Instructions". Extensible Markup Language (XML) 1.0 (Fifth Edition). W3C. Retrieved 2009-06-18.
  218. ^ "Variables". The PHP Group. Retrieved 2008-03-16.
  219. ^ "Instruction separation". The PHP Group. Retrieved 2008-03-16.
  220. ^ "Comments". The PHP Group. Retrieved 2008-03-16.
  221. ^ "Integers in PHP, running with scissors, and portability". MySQL Performance Blog. March 27, 2007. Retrieved 2007-03-28.
  222. ^ a b c d e "Types". The PHP Group. Retrieved 2008-03-16.
  223. ^ "Strings". The PHP Group. Retrieved 2008-03-21.
  224. ^ "SPL – StandardPHPLibrary". PHP.net. March 16, 2009. Retrieved 2009-03-16.
  225. ^ a b "User-defined functions (PHP manual)". php.net. 2014-07-04. Retrieved 2014-07-07.
  226. ^ a b "Variable functions (PHP manual)". php.net. 2014-07-04. Retrieved 2014-07-07.
  227. ^ "create_function() (PHP manual)". php.net. 2022-04-06. Retrieved 2022-05-04.
  228. ^ "Anonymous functions (PHP manual)". php.net. 2014-07-04. Retrieved 2014-07-07.
  229. ^ "Arrow Functions (PHP manual)". php.net. Retrieved 2021-01-25.
  230. ^ Christian Seiler; Dmitry Stogov (2008-07-01). "Request for Comments: Lambda functions and closures". php.net. Retrieved 2014-07-07.
  231. ^ a b "PHP 5 Object References". mjtsai.com. Retrieved 2008-03-16.
  232. ^ "Classes and Objects (PHP 5)". The PHP Group. Retrieved 2008-03-16.
  233. ^ "Object cloning". The PHP Group. Retrieved 2008-03-16.
  234. ^ "Visibility (PHP Manual)". theserverpages.com. 2005-05-19. Archived from the original on 2010-09-24. Retrieved 2010-08-26.
  235. ^ "How do computer languages work?". Archived from the original on 2011-07-16. Retrieved 2009-11-04.
  236. ^ Gilmore, W. Jason (2006-01-23). Beginning PHP and MySQL 5: From Novice to Professional. Apress. p. 43. ISBN 1590595521.
  237. ^ "[VOTE] Integrating Zend Optimizer+ into the PHP distribution". news.php.net. Retrieved 2013-03-08.
  238. ^ "Alternative PHP Cache". PHP.net. Archived from the original on 2013-11-15. Retrieved 2013-09-21.
  239. ^ "We are the 98.5% (and the 16%) « HipHop Virtual Machine". hhvm.com. December 2013. Retrieved 2014-02-23.
  240. ^ "The Definitive PHP 5.6, 7.0, 7.1, 7.2 & 7.3 Benchmarks (2019)". 2019-01-14. Retrieved 2019-04-19.
  241. ^ Krill, Paul (2017-09-20). "Forget PHP! Facebook's HHVM engine switches to Hack instead". InfoWorld. Retrieved 2019-02-06.
  242. ^ "Announcement on GitHub removing HPHPc support". GitHub. Retrieved 2013-05-24.
  243. ^ "The PHP License, version 3.01". Retrieved 2010-05-20.
  244. ^ "GPL-Incompatible, Free Software Licenses". Various Licenses and Comments about Them. Free Software Foundation. Retrieved 2011-01-03.
  245. ^ "PHP: Function and Method listing – Manual". The PHP Group. Retrieved 2015-01-14.
  246. ^ "Introduction – Manual". php.net. 2013-06-07. Retrieved 2013-06-13.
  247. ^ Darryl Patterson (5 August 2004). "Simplify Business Logic with PHP DataObjects — O'Reilly Media". ibm.com. Archived from the original on 16 December 2014. Retrieved 16 December 2014.
  248. ^ "IBM — United States". Retrieved 16 December 2014.
  249. ^ "Five common PHP database problems". ibm.com. 2006-08-01. Retrieved 2013-06-13.
  250. ^ "IBM Redbooks — Developing PHP Applications for IBM Data Servers". redbooks.ibm.com. Retrieved 16 December 2014.
  251. ^ "php[architect] Magazine - The Journal for PHP Programmers". www.phparch.com.
  252. ^ Krill, Paul (19 October 2005). "PHP catching on at enterprises, vying with Java". InfoWorld. Archived from the original on 13 July 2014.
  253. ^ "Cross Reference: /PHP_5_4/ext/standard/". php.net. Archived from the original on 16 March 2012. Retrieved 16 December 2014.
  254. ^ "Developing Custom PHP Extensions". devnewz.com. 2002-09-09. Archived from the original on 2008-02-18. Retrieved 2008-02-25.
  255. ^ "Why Zephir?". zephir-lang.com. 2015-10-20. Retrieved 2015-12-14.
  256. ^ "PHP Credits". Retrieved 2018-12-16.
  257. ^ "Learn PHP Via PHP Training and PHP Certification". www.zend.com. Retrieved 2020-11-16.
  258. ^ Walker, James (2021-12-13). "What the New PHP Foundation Means for PHP's Future". How-To Geek. Retrieved 2023-11-26.
  259. ^ "The New Life of PHP – The PHP Foundation | The PhpStorm Blog". The JetBrains Blog. 22 November 2021. Retrieved 2022-06-16.
  260. ^ "The PHP Foundation: Impact and Transparency Report 2022". thephp.foundation. Retrieved 2023-11-27.
  261. ^ Pronskiy, Roman (2024-02-26). "The PHP Foundation: Impact and Transparency Report 2023". The PHP Foundation. Retrieved 2024-04-01.
  262. ^ Anderson, Tim. "PHP Foundation formed to fund core developers". www.theregister.com. Retrieved 2023-12-05.
  263. ^ "Programming languages: This old favourite is gaining popularity again". ZDNET. Retrieved 2023-12-05.
  264. ^ "PHP 8.1 Released With Enums, Read-Only Properties and Fibers". www.i-programmer.info. Retrieved 2023-12-05.
  265. ^ "It's time for the PHP Foundation to #StopBreakingPHP". trongate.io. Retrieved 2023-11-27.
  266. ^ "WordPress 6.4 PHP Compatibility". Make WordPress Hosting. 2023-11-16. Retrieved 2023-11-27.
  267. ^ "PHP". Sovereign Tech Fund. Retrieved 2024-05-26.
  268. ^ a b "General Installation Considerations". php.net. Retrieved 2013-09-22.
  269. ^ "News Archive: PHP 5.3.3 Released!". php.net. 2010-07-22.
  270. ^ "FastCGI Process Manager (FPM)". php.net. Retrieved 2013-09-22.
  271. ^ "Command line usage: Introduction". php.net. Retrieved 2013-09-22.
  272. ^ "Command line usage: Differences to other SAPIs". php.net. Retrieved 2013-09-22.
  273. ^ a b "General Installation Considerations". php.net. Retrieved 2013-09-22.
  274. ^ "PHP: Apache 2.x on Microsoft Windows". php.net. Archived from the original on 2013-09-26. Retrieved 2013-09-22.
  275. ^ "Command line usage: Introduction". php.net. Retrieved 2013-09-22.
  276. ^ "Installing PHP-GTK 2". php.net. Archived from the original on 2013-12-12. Retrieved 2013-09-22.
  277. ^ "AWS SDK for PHP". aws.amazon.com. Retrieved 2014-03-06.
  278. ^ "Windows Azure SDK for PHP — Interoperability Bridges and Labs Center". interoperabilitybridges.com. Archived from the original on 2014-03-20. Retrieved 2014-03-06.
  279. ^ "Runtime configuration: Table of contents". php.net. Retrieved 2013-09-22.
  280. ^ "php.ini directives: List of php.ini directives". php.net. Retrieved 2013-09-22.
  281. ^ "Runtime configuration: The configuration file". PHP.net. Retrieved 2013-09-22.
  282. ^ "php.ini directives: List of php.ini sections". PHP.net. Retrieved 2013-09-22.
  283. ^ "Runtime configuration: Where a configuration setting may be set". PHP.net. Retrieved 2013-09-22.
  284. ^ "PHP Manual Image Processing and GD;". php.net. Retrieved 2011-04-09.
  285. ^ "PHP Server-Side Scripting Language". Indiana University. 2007-04-04. Archived from the original on 2016-01-21. Retrieved 2008-02-25.
  286. ^ "JavaServer Pages Technology — JavaServer Pages Comparing Methods for Server-Side Dynamic Content White Paper". Sun Microsystems. Retrieved 2008-02-25.
  287. ^ "Five simple ways to tune your LAMP application". IBM. 2011-01-25.
  288. ^ "PHP at the core: Extension structure". PHP.net. Archived from the original on 2013-09-26. Retrieved 2013-09-22.
  289. ^ "PHP at the core: The "counter" Extension – A Continuing Example". PHP.net. Archived from the original on 2013-09-26. Retrieved 2013-09-22.
  290. ^ "Extension Writing Part I: Introduction to PHP and Zend". Zend Technologies. 2005-03-01. Archived from the original on 2013-09-24. Retrieved 2013-09-22.
  291. ^ "Extension Writing Part II: Parameters, Arrays, and ZVALs". Zend Technologies. 2005-06-06. Archived from the original on 2013-09-26. Retrieved 2013-09-22.
  292. ^ "Extension Writing Part II: Parameters, Arrays, and ZVALs (continued)". Zend Technologies. 2005-06-06. Archived from the original on 2013-09-26. Retrieved 2013-09-22.
  293. ^ "Extension Writing Part III: Resources". Zend Technologies. 2006-05-12. Archived from the original on 2013-09-26. Retrieved 2013-09-22.
  294. ^ "Wrapping C++ Classes in a PHP Extension". Zend Technologies. 2009-04-22. Archived from the original on 2013-09-20. Retrieved 2013-09-22.
  295. ^ "Extending PHP with C++?". Stack Overflow. Retrieved 2013-09-22.
  296. ^ "How can I use C++ code to interact with PHP?". Stack Overflow. Retrieved 2013-09-22.
  297. ^ Golemon, Sara (2006). Extending and Embedding PHP. Sams. ISBN 978-0-672-32704-9.
  298. ^ "Request #46919: Multithreading". PHP.net. Retrieved 2013-09-22.
  299. ^ "pthreads: Introduction (PHP Manual)". PHP.net. Retrieved 2013-09-22.
  300. ^ "PECL :: Package :: pthreads". pecl.php.net. Retrieved 2014-02-09.
  301. ^ "Manual:Installation requirements#PHP". MediaWiki. 2010-01-25. Retrieved 2010-02-26. PHP is the programming language in which MediaWiki is written [...]
  302. ^ "About WordPress". Retrieved 2010-02-26. WordPress was [...] built on PHP
  303. ^ Kempkens, Alex. "Joomla! — Content Management System to build websites & apps".
  304. ^ "PHP and Drupal". Drupal.org. 16 September 2007. Archived from the original on 2010-02-08. Retrieved 2010-06-13.
  305. ^ "About". Moodle.org. Archived from the original on 2010-01-11. Retrieved 2009-12-20.
  306. ^ "Server requirements of SilverStripe". Archived from the original on 28 November 2014. Retrieved 13 October 2014. SilverStripe requires PHP 5.3.2+
  307. ^ Ide, Andy (2013-01-31). "PHP just grows & grows". Retrieved 2013-04-01.
  308. ^ "Usage Statistics and Market Share of PHP Version 4 for Websites, September 2024". w3techs.com.
  309. ^ "Usage Statistics and Market Share of PHP Version 5 for Websites, September 2024". w3techs.com.
  310. ^ "Usage Statistics and Market Share of PHP Version 7 for Websites, September 2024". w3techs.com.
  311. ^ "Usage Statistics and Market Share of PHP Version 8 for Websites, September 2024". w3techs.com.
  312. ^ "National Vulnerability Database (NVD) Search Vulnerabilities Statistics". Retrieved 2019-11-22.
  313. ^ "Developer Meeting Notes, Nov. 2005".
  314. ^ "Taint mode decision, November 2007". Archived from the original on 2009-02-26.
  315. ^ "PHP: rfc:taint". wiki.php.net.
  316. ^ "Hardened-PHP Project". 2008-08-15. Archived from the original on 2019-02-24. Retrieved 2019-08-22.
  317. ^ "Snuffleupagus Documentation".
  318. ^ "Security: Using Register Globals". PHP Manual. PHP.net. Archived from the original on 2013-09-27. Retrieved 2013-09-22.
  319. ^ "Magic Quotes". PHP Manual. PHP.net. Archived from the original on 2014-02-08. Retrieved 2014-01-17.
  320. ^ "'engine' configuration directive". PHP: Runtime Configuration. PHP.net. Retrieved 2014-02-13.
  321. ^ "PHP Security Exploit With GIF Images". 2007-06-22. Archived from the original on 2013-09-27. Retrieved 2013-09-22.
  322. ^ "PHP security exploit with GIF images". PHP Classes blog. 2007-06-20. Retrieved 2013-09-22.
  323. ^ "Passing Malicious PHP Through getimagesize()". 2007-06-04. Archived from the original on 2013-09-21. Retrieved 2013-09-22.
  324. ^ "'enable_dl' configuration directive". PHP: Runtime Configuration. PHP.net. Retrieved 2014-02-13.
  325. ^ "PHP function reference: dl()". PHP.net. Retrieved 2013-09-22.
  326. ^ "My host won't fix their Trojan". WebHosting Talk. Retrieved 2013-09-22.
  327. ^ Raz0r (25 January 2013). "Simple Machines Forum <= 2.0.3 Admin Password Reset".{{cite web}}: CS1 maint: numeric names: authors list (link)
  328. ^ Nibble Security. "TYPO3-SA-2010-020, TYPO3-SA-2010-022 EXPLAINED".
  329. ^ "Криптостойкость и небезопасное сравнение". ahack.ru (in Russian). Archived from the original on 4 July 2017.{{cite web}}: CS1 maint: unfit URL (link)
  330. ^ Krawczyk, Pawel (2013). "Most common attacks on web applications". IPSec.pl. Archived from the original on 2015-04-15. Retrieved 2015-04-15.
  331. ^ Krawczyk, Pawel (2013). "So what are the "most critical" application flaws? On new OWASP Top 10". IPSec.pl. Retrieved 2015-04-15.
  332. ^ "PHP: Rand - Manual".
  333. ^ "PHP: Mt_rand - Manual".
  334. ^ "PHP: Random_int - Manual".
  335. ^ Argyros, George; Kiayias, Aggelos (10 August 2012). "I Forgot Your Password: Randomness Attacks Against PHP Applications". usenix.org. USENIX. Retrieved 19 April 2024.
  336. ^ https://wiki.php.net/rfc/release_cycle_update
  337. ^ "PHP Support for PHP 7.2 - 8.0 | PHP LTS | Zend by Perforce". Retrieved 2024-05-23.
  338. ^ "Pagely PHP Long Term Support Page". Pagely. Retrieved 2024-09-14.

Further reading

Listen to this article (35 minutes)
Spoken Wikipedia icon
This audio file was created from a revision of this article dated 23 November 2011 (2011-11-23), and does not reflect subsequent edits.
  • Ford, Paul (June 11, 2015). "What is Code?". Bloomberg Businessweek. What's the Absolute Minimum I Must Know About PHP?
  • Official website
  • PHP at Curlie
Retrieved from "https://en.wikipedia.org/w/index.php?title=PHP&oldid=1247909596"