# PHP

PHP es un lenguaje de programación interpretado del lado del servidor y de uso general que se adapta especialmente al desarrollo web. Fue creado inicialmente por el programador danés-canadiense Rasmus Lerdorf en 1994. En la actualidad, la implementación de referencia de PHP es producida por The PHP Group. PHP originalmente significaba Personal Home Page (Página personal), pero ahora significa el inicialismo recursivo PHP: Hypertext Preprocessor.
El código PHP suele ser procesado en un servidor web por un intérprete PHP desarrollado como un módulo, un daemon o como un ejecutable de interfaz de entrada común (CGI). En un servidor web, el resultado del código PHP interpretado y ejecutado —que puede ser cualquier tipo de datos, como el HTML generado o datos de imágenes binarias— formaría la totalidad o parte de una respuesta HTTP. Existen diversos sistemas de plantillas, sistemas de gestión de contenidos y frameworks que pueden emplearse para organizar o facilitar la generación de esa respuesta. Por otra parte, PHP puede utilizarse para muchas tareas de programación fuera del contexto de la web, como aplicaciones gráficas autónomas y el control de drones. También se puede interpretar y ejecutar un código PHP cualquiera a través de una interfaz de línea de comandos (CLI).
El intérprete estándar de PHP, impulsado por Motor Zend, es un software libre publicado bajo Licencia PHP. PHP ha sido ampliamente portado y puede ser desplegado en la mayoría de los servidores web en casi todos los sistemas operativos y plataformas, de forma gratuita.
El lenguaje PHP evolucionó sin una especificación formal escrita o un estándar hasta 2014, con la implementación original actuando como el estándar de facto que otras implementaciones intentaban seguir. Desde 2014, se ha trabajado para crear una especificación formal de PHP.

## Visión general

PHP puede ser desplegado en la mayoría de los servidores web y en todos los sistemas operativos y plataformas sin costo alguno. El lenguaje PHP se encuentra instalado en más de 20 millones de sitios web y en un millón de servidores. Migrar los servicios basados en PHP hacia las nuevas tecnologías que aparecen, supone un costo a justificar monetariamente (sobre todo, en términos de hardware y rendimiento), por ello, hablar si el número de sitios basados en PHP se ha visto reducido progresivamente en los últimos años, con la aparición de nuevas tecnologías como Node.js, Golang, ASP.NET, etc.
Poderse hacer una visión general de como PHP está evolucionando a día de hoy, es hablar sobre las nuevas librerías disponibles, el uso de matrices, manejo de números enteros, tratamiento de la criptografía cuando se usa una Base64, Web scraping, indexación de webs, precocinado de datos, Macrodatos, set de datos, supervisión de datos, set de proposiciones dimensionales. Como vemos, una visión general de este lenguaje, es mucho más compleja que afirmar que es un lenguaje para desarrollo web. Dicha realidad, subyace en la aparición de dominios xyz, cuya finalidad y especialidad es el cacheado de los servicios PHP para servir contenido con una orientación al desempeño vinculada a servicios para consumo de otros servicios que necesitan datos, tales como I.A.s. donde PHP está viendo una acogida con un sentimiento de confianza en los resultados a obtener (sin pretender servir de lenguaje en sí mismo orientado a la I.A., dado que no fue su conceptualización origen). Aunque el marketing que está recibiendo este tipo de dominios, está relacionado con las nuevas generaciones de personas educadas en las nuevas tecnologías Como parte de la visión general, habría que incluir un último aspecto, y es la capacidad de generar capas de seguridad autodependientes, en un paradigma solo emergente gracias a las librerías de las que dispone PHP (En proceso de desarrollo).
El sitio web de Wikipedia está desarrollado en PHP. Es también el módulo Apache más popular entre las computadoras que utilizan Apache como servidor web.
El gran parecido que posee PHP con los lenguajes más comunes de programación estructurada, como C y Perl, permiten a la mayoría de los programadores crear aplicaciones complejas con una curva de aprendizaje muy corta. También les permite involucrarse con aplicaciones de contenido dinámico sin tener que aprender todo un nuevo grupo de funciones.
Aunque todo en su diseño está orientado a facilitar la creación de sitios webs, es posible crear aplicaciones con una interfaz gráfica de usuario, utilizando alguna extensión como puede ser PHP-Qt, PHP-GTK, WxPHP, WinBinder, Roadsend PHP, Phalanger, Phc o HiP Hop VM. También puede ser usado desde la línea de comandos, de la misma manera como Perl o Python pueden hacerlo; a esta versión de PHP se la llama PHP-CLI (Command Line Interface).
Cuando el cliente hace una petición al servidor para que le envíe una página web, el servidor ejecuta el intérprete de PHP. Este procesa el script solicitado que generará el contenido de manera dinámica (por ejemplo obteniendo información de una base de datos). El resultado es enviado por el intérprete al servidor, quien a su vez se lo envía al cliente.
Mediante extensiones es también posible la generación de archivos PDF, Flash, así como imágenes en diferentes formatos.
Permite la conexión a diferentes tipos de servidores de bases de datos tanto SQL como NoSQL tales como MySQL, PostgreSQL, Oracle, ODBC, DB2, Microsoft SQL Server, Firebird, SQLite o MongoDB.
PHP también tiene la capacidad de ser ejecutado en la mayoría de los sistemas operativos, tales como Unix (y de ese tipo, como Linux o Mac OS X) y Microsoft Windows, y puede interactuar con los servidores de web más populares ya que existe en versión CGI, módulo para Apache e ISAPI.
PHP es una alternativa a las tecnologías de Microsoft ASP y ASP.NET (que utiliza C# y Visual Basic .NET como lenguajes), a ColdFusion de la empresa Adobe, a JSP/Java, CGI/Perl y a Node.js/Javascript. Aunque su creación y desarrollo se da en el ámbito de los sistemas libres, bajo la licencia GNU, existe además un entorno de desarrollo integrado comercial llamado Zend Studio. CodeGear (la división de lenguajes de programación de Borland) ha sacado al mercado un entorno de desarrollo integrado para PHP, denominado 'Delphi for PHP. También existen al menos un par de módulos para Eclipse, uno de los entornos más populares.

## Historia

Fue originalmente diseñado en Perl, con base en la escritura de un grupo de CGI binarios escritos en el lenguaje C por el programador danés-canadiense Rasmus Lerdorf en el año 1994 para mostrar su currículum vítae y guardar ciertos datos, como la cantidad de tráfico que su página web recibía. El 8 de junio de 1995 fue publicado «Personal Home Page Tools» después de que Lerdorf lo combinara con su propio Form Interpreter para crear PHP/FI.
Dos programadores israelíes del Technion, Zeev Suraski y Andi Gutmans, reescribieron el analizador sintáctico (parser, en inglés) en 1997 y crearon la base del PHP3, y cambiaron el nombre del lenguaje por PHP: Hypertext Preprocessor. Inmediatamente comenzaron experimentaciones públicas de PHP3, y se publicó oficialmente en junio de 1998. Para 1999, Suraski y Gutmans reescribieron el código de PHP, y produjeron lo que hoy se conoce como motor Zend. También fundaron Zend Technologies en Ramat Gan, Israel.
En mayo del 2000, PHP 4 se lanzó bajo el poder del motor Zend 1.0. El 13 de julio de 2007 se anunció la suspensión del soporte y desarrollo de la versión 4 de PHP, y, a pesar de lo anunciado, se ha liberado una nueva versión con mejoras de seguridad, la 4.4.8, publicada el 13 de enero del 2008, y posteriormente la versión 4.4.9, publicada el 7 de agosto del 2008. Según esta noticia, se le dio soporte a fallos críticos hasta el 9 de agosto del 2008.
El 13 de julio de 2004, se lanzó PHP 5, utilizando el motor Zend Engine 2.0 (o Zend Engine 2). Incluye todas las ventajas que provee el nuevo Zend Engine 2, como:
* Mejor soporte para la programación orientada a objetos, que en versiones anteriores era extremadamente rudimentario.
* Mejoras de rendimiento
* Mejor soporte para MySQL con extensión completamente reescrita
* Mejor soporte a XML (XPath, DOM, etc.)
* Soporte nativo para SQLite
* Soporte integrado para SOAP
* Iteradores de datos
* Manejo de excepciones
* Mejoras con la implementación con Oracle
En abril de 2020, más de la mitad de los sitios en la web que usaban PHP seguían en la versión descontinuada 5.6 o anterior. y con la versión 7.0 y 7.1 más del 68%, que no están oficialmente soportadas por The PHP Development Team, mientras que el soporte de seguridad es proporcionado por terceros, como Debian (hasta junio de 2020 para PHP 5). Adicionalmente, la versión 7.2, la versión con soporte más popular, dejó de recibir actualizaciones de seguridad el 30 de noviembre de 2020.
El 26 de noviembre de 2020 se presenta la actualización del lenguaje PHP a su versión 8.0 que más recursos y optimizaciones incluyendo argumentos nombrados, tipos de uniones, atributos, promoción de propiedades constructivas, expresiones match, operador nullsafe, JIT (traducción dinámica) y también mejoras en el sistema de tipos, manejo de errores y consistencia en general, esta la cual llegara a su fin en noviembre del 2023, también considerando que a partir de lanzamiento de php 8.2 el 8 de noviembre del año 2022, Wordpress que ha logrado ser compatible al día siguiente el 9 de diciembre del 2022. seguido del Framework CodeIgniter que actualmente ha expulsado a php7.4 de sus compatibilidades en sus nuevas actualizaciones.
En enero de 2023, según W3Techs «PHP es utilizado por el 77.8 % de todos los sitios web que se ejecutan en el lado del servidor». También informa de que sólo el 8 % de los usuarios de PHP utilizan las versiones 8.x actualmente soportadas. La última versión publicada de PHP es PHP 8.3.

### Historial de lanzamiento

| | Significado |
| Rojo | Versión antigua, sin soporte |
| Amarillo | Con soporte para errores de seguridad |
| Verde | Con soporte para errores generales y de seguridad |
| Azul | Lanzamiento futuro |
| Rosa | Lanzamiento cancelado |
| Versión | Fecha de lanzamiento | Fin de soporte | Notas |
| 1.0 | 08-06-1995 | | Llamada oficialmente «Personal Home Page Tools (PHP Tools)». Es la primera versión en usar el nombre «PHP». |
| 2.0 | 01-11-1997 | | Considerada por sus creadores la «herramienta más rápida y sencilla» para crear páginas web dinámicas. |
| 3.0 | 06-06-1998 | 20-10-2000 | Zeev Suraski y Andi Gutmans reescribieron la base para esta versión. |
| 4.0 | 22-05-2000 | 23-01-2001 | Se añadió un sistema de parsing de dos fases llamado motor Zend. |
| 4.1 | 10-12-2001 | 12-03-2002 | Se introducen 'superglobales' ($_GET, $_POST, $_SESSION, etc.) |
| 4.2 | 22-04-2002 | 06-09-2002 | Se deshabilitan register_globals por defecto. Datos recibidos por la red no son insertados en el espacio de nombres global, cerrando posibles agujeros de seguridad en las aplicaciones. |
| 4.3 | 27-12-2002 | 31-03-2005 | Se introduce CLI, y CGI. |
| 4.4 | 11-07-2005 | 07-08-2008 | Se añaden páginas man para phpize y php-config. |
| 5.0 | 13-07-2004 | 05-09-2005 | Motor Zend II con un nuevo modelo de objetos. |
| 5.1 | 24-11-2005 | 24-08-2006 | Mejoras de rendimiento con la introducción de variables de compilador para el nuevo motor de PHP. |
| 5.2 | 02-11-2006 | 06-01-2011 | Actividad extensión de filtro por defecto. Soporte JSON nativo. |
| 5.3 | 30-06-2009 | 14-08-2014 | Soporte para espacios de nombres, enlace estático en tiempo de ejecución, etiqueta de salto (GOTO limitada), Clausuras nativas, Soporte nativo para archivos PHP (phar), recolección de basura para referencias circulares, soporte mejorado para Windows, sqlite3, mysqlnd como reemplazo a libmysql como biblioteca para extensiones que funcionan con MySQL, fileinfo como reemplazado de mime_magic para mejor soporte MIME, extensión de Internacionalización, y etiqueta ereg obsoleta. |
| 5.4 | 01-03-2012 | 15-09-2015 | Soporte para Trait y sintaxis abreviada de array. Elementos eliminados: register_globals, safe_mode, allow_call_time_pass_reference, session_register, session_unregister y session_is_registered. Servidor web incorporado. Varias mejoras a características existentes y al rendimiento, y requerimientos de memoria menores. |
| 5.5 | 20-06-2013 | 20-06-2016 | Nuevos generadores para bucles, empty soporta expresiones. Se pierde el soporte para Windows XP y Windows Server 2003. |
| 5.6 | 20-08-2014 | 31-12-2018 | Constantes con expresiones escalares, listas de argumentos de longitud variable y exponencial mediante el operador **. |
| 6 | | | El desarrollo de PHP 6 ha sido retrasado porque los desarrolladores decidieron que el enfoque actual para tratar cadenas Unicode no es correcto, y están considerando formas alternas para la siguiente versión. Las mejoras planeadas para PHP 6 fueron añadidas en su lugar en PHP 5.3.0 (Soporte para espacios de nombre, enlace estático en tiempo de ejecución, funciones lambda, clausuras, goto) y 5.4.0 (traits, revinculación de clausura). Se abandonó la versión 6 de PHP siendo la siguiente versión la 7. |
| 7.0 | 03-12-2015 | 03-12-2018 | Mejoras de rendimiento , declaración de tipos de retorno en funciones |
| 7.1 | 01-12-2016 | 01-12-2019 | Tipo de retorno vacío, Clase constante modificadores de visibilidad, Tipos nullable, iterable de tipo seudo, Captura múltiples tipos de excepciones. |
| 7.2 | 30-11-2017 | 30-11-2020 | Nuevo tipo de retorno «object», integración de Libsodium como una extensión del núcleo |
| 7.3 | 6-12-2018 | 6-12-2021 | Sintaxis flexible para Nowdoc y Heredoc, soporte para referencias y deconstrucción de arrays con list, soporte para PCRE2, función hrtime |
| 7.4 | 28-11-2019 | 28-11-2022 | PHP 7.4 llegó al final de su vida útil el 28 de noviembre de 2022. |
| 8.0 | 26-11-2020 | 26-11-2023 | Ingresadas Nuevas características e incremento de rendimiento |
| 8.1 | 25-11-2021 | 25-11-2024 | Propiedades «readonly», «enums», «fiber» y nuevas sintaxis |
| 8.2 | 08-12-2022 | 08-12-2025 | Creación de propiedades dinámicas esta desaprobada y es agregado el atributo AllowDynamicProperties |
| 8.3 | 23-11-2023 | 23-11-2026 | Tipado de constantes, atributo override y nuevos métodos para obtener valores aleatorios. |
| 8.4 | 21-11-2024 | 31-12-2026 | Limpieza de código obsoleto nuevas características como hooks, visibilidad asimetrica |

## Sintaxis

La sintaxis de PHP, se fundamenta en los principios de programación de C.
El intérprete de PHP solo ejecuta el código que se encuentra entre sus delimitadores. Los delimitadores más comunes son <?php para abrir una sección PHP y ?> para cerrarla. El propósito de estos delimitadores es separar el código PHP del resto de código, como por ejemplo el HTML. En los archivos que contienen solo código PHP, el delimitador ?> se puede omitir. De hecho, PHP-FIG a través de sus recomendaciones estándar para PHP recomienda omitir el delimitador ?>, ya que así no se envía contenido HTML de manera accidental. Por ejemplo, si se envía un carácter «no PHP» (que no es procesado por el intérprete de PHP), no se podrán ejecutar ciertas acciones como enviar encabezados HTTP a través de la función header, ya que el proceso de respuesta ya ha comenzado.
Las variables se prefijan con el símbolo del dólar ($) y no es necesario indicar su tipo. Las variables, a diferencia de las funciones, distinguen entre mayúsculas y minúsculas. Las cadenas de caracteres pueden ser encapsuladas tanto en dobles comillas como en comillas simples, aunque en el caso de las primeras, se pueden insertar variables en la cadena directamente, sin necesidad de concatenación.
Los comentarios se pueden escribir bien con dos barras (//) al principio de la línea, o con una almohadilla (#). También permite comentarios multi-línea encapsulados en /* */.
En cuanto a las palabras clave, PHP comparte con la mayoría de otros lenguajes con sintaxis C las condiciones con if, los bucles con for y while y los retornos de funciones. Habitualmente en este tipo de lenguajes, las sentencias deben acabar con punto y coma (;).

### Ejemplos de código en PHP Básico

Programa Hola mundo con PHP inmerso dentro de código HTML:
Programa Hola mundo con PHP en forma de app monolítica:
Programa Hola mundo con PHP respondiendo en formato JSON:
El lado del cliente que realizará petición al archivo PHP:

### Bases de datos (MySQL)

PHP puede combinarse con MySQL para trabajar con bases de datos, aunque también se pueden utilizar otros motores de base de datos como Microsoft SQL Server, PostgreSQL, MongoDB, entre otros.
El siguiente ejemplo se muestra el inicio de sesión con usuario y contraseña utilizando MySQL y PHP con el estilo orientado a objetos:
El siguiente ejemplo hace lo mismo que el anterior, pero con la seguridad de que sea cual sea el estado medio del servicio, si no hay forma de conectar, se destruirá la clase y se cerrará lo adjunto a sus hilos.
Bórrese

### Como servicio REST

Los servicios REST se fundamentan en tres conceptos fundamentales:
* Concepto de recurso
* Concepto de itinerancia
* Concepto de API

## Características de PHP
### Características

* Orientado al desarrollo de aplicaciones web dinámicas con acceso a información almacenada en una base de datos.
* El modelo de ejecución de PHP es «síncrono a la petición» (modelo single-request-per-script-execution) : la recepción de una petición activa la ejecución del script PHP y, a continuación, el resultado generado se devuelve a la salida. Como resultado, un sistema con PHP difícilmente puede quedar paralizado por un error, ya que la ejecución del script se reinicia con cada petición. Esto contrasta, por ejemplo, con los lenguajes en los que el programa se compila y ejecuta dentro de un «ejecutable», que dejará de funcionar si se produce un error.
* Es considerado un lenguaje fácil de aprender, ya que en su desarrollo se simplificaron distintas especificaciones, como es el caso de la definición de las variables primitivas, ejemplo que se hace evidente en el uso de php arrays.
* El código fuente escrito en PHP es invisible al navegador web y al cliente, ya que es el servidor el que se encarga de ejecutar el código y enviar su resultado (habitualmente, un contenido HTML hacia el navegador).
* Capacidad de conexión con la mayoría de los motores de base de datos que se utilizan en la actualidad, destaca su conectividad con MySQL y PostgreSQL.
* Capacidad de expandir su potencial utilizando módulos (llamados extensiones).
* Posee una amplia documentación en su sitio web oficial, entre la cual se destaca que todas las funciones del sistema están explicadas y ejemplificadas en un único archivo de ayuda.
* Es libre, por lo que se presenta como una alternativa de fácil acceso para todos.
* Permite aplicar técnicas de programación orientada a objetos.
* No requiere definición de tipos de variables aunque sus variables se pueden evaluar también por el tipo que estén manejando en tiempo de ejecución.
* Tiene manejo de excepciones (desde PHP5).
* Si bien PHP no obliga a quien lo usa a seguir una determinada metodología a la hora de programar, aun haciéndolo, el programador puede aplicar en su trabajo cualquier técnica de programación o de desarrollo que le permita escribir código ordenado, estructurado y manejable. Un ejemplo de esto son los desarrollos que en PHP se han hecho del patrón de diseño Modelo Vista Controlador (MVC), que permiten separar el tratamiento y acceso a los datos, la lógica de control y la interfaz de usuario en tres componentes independientes.
* Debido a su flexibilidad, ha tenido una gran acogida como lenguaje base para las aplicaciones WEB de manejo de contenido, y es su uso principal.

### Inconvenientes

* Como es un lenguaje que se interpreta en ejecución, para ciertos usos puede resultar un inconveniente que el código fuente no pueda ser ocultado. La ofuscación es una técnica que puede dificultar la lectura del código pero no necesariamente impide que el código sea examinado.
* Debido a que es un lenguaje interpretado, un script en PHP suele funcionar considerablemente más lento que su equivalente en un lenguaje de bajo nivel, sin embargo este inconveniente se puede minimizar con técnicas de caché tanto en archivos como en memoria.
* En las versiones previas a la 7, las variables no son tipificadas, lo cual dificulta a los diferentes IDEs ofrecer asistencias para el tipificado del código, aunque esto no es realmente un inconveniente del lenguaje en sí. Esto es solventado por algunos IDEs añadiendo un comentario con el tipo a la declaración de la variable.
* El hecho de que este lenguaje se ejecute a partir de una petición (modelo single-request-per-script-execution) hace difícil la realización de tareas asíncronas o permanentes (ex: crawler, cálculos a largo plazo etc.) ;

### Desafíos

Una de las dificultades que enfrentan las empresas para actualizar a las versiones más altas actuales de los lenguajes de programación es la compatibilidad con el código existente contrastado las mejoras. Muchas veces, el código antiguo utiliza funciones o sintaxis que han sido modificadas o eliminadas en las nuevas versiones, lo que genera errores o incompatibilidades. Además, las empresas deben invertir tiempo y recursos en capacitar a sus programadores para que se adapten a los cambios y puedan aprovechar las nuevas características y ventajas de los lenguajes actualizados. El desafío de cambiar las versiones de PHP también puede ser que algunas bibliotecas, complementos y extensiones utilizados en la aplicación también necesiten actualizarse. Si estos no se actualizan, pueden generar conflictos o errores en la aplicación.

### XAMPP, LAMP, WAMP, MAMP, UwAmp

XAMPP es un servidor independiente de plataforma, software libre, que consiste principalmente en la base de datos MySQL, el servidor web Apache y los intérpretes para lenguajes de script: PHP y Perl. El nombre proviene del acrónimo de X (para cualquiera de los diferentes sistemas operativos), Apache, MySQL, PHP, Perl. El programa está liberado bajo la licencia GNU y actúa como un servidor web libre, fácil de usar y capaz de interpretar páginas dinámicas. Actualmente XAMPP está disponible para Microsoft Windows, GNU/Linux, Solaris, y MacOS X.
Es un software «liviano» que se puede utilizar en cualquier PC. No necesita muchos recursos.
LAMP presenta una funcionalidad parecida a XAMPP, pero enfocada en Linux, WAMP lo hace enfocado en Windows, y MAMP para MacOS X. UwAmp es muy idéntico a WAMP y se destaca en que se puede ejecutar desde una memoria USB.

### Principales sitios desarrollados con PHP

Se utiliza PHP en millones de sitios; entre los más destacados se encuentran:
* Digg
* Facebook
* Flickr
* Mailchimp
* Tumblr
* Wikipedia
* WordPress
* Yahoo!