PHP

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 2 de octubre de 2022; las comprobaciones requieren 7 ediciones .
PHP
clase de idioma multiparadigma , orientado a objetos , imperativo
Apareció en 8 de junio de 1995 [5] [6]
Autor Rasmo Lerdorf [3]
Desarrollador Rasmus Lerdorf [1] , Andy Gutmans [1] , PHP Group [d] , Zend Technologies [2] y Zeev Sourasky
extensión de archivo .php[7]
Liberar
sido influenciado C++ , Perl [8] , C [8] , Java [8] , Tcl [9] , HTML y JavaScript
Licencia Licencia PHP [10]
Sitio web php.net_
sistema operativo Sistema operativo similar a Unix y Microsoft Windows
 Archivos multimedia en Wikimedia Commons

PHP ( /pi:.eɪtʃ.pi:/ Inglés  PHP: Preprocesador de hipertexto  - "PHP: preprocesador de hipertexto "; originalmente PHP / FI (Página de inicio personal / Intérprete de formularios), y luego llamado Herramientas de la página de inicio personal [11]  - " Herramientas para crear páginas web personales") es un lenguaje de secuencias de comandos similar a C de propósito general [12] que se utiliza intensamente para desarrollar aplicaciones web. Actualmente es compatible con la gran mayoría de los proveedores de alojamiento y es uno de los principales lenguajes utilizados para crear sitios web dinámicos [13] .

El lenguaje y su intérprete ( Zend Engine ) están siendo desarrollados por un grupo de entusiastas como parte de un proyecto de código abierto [14] . El proyecto se distribuye bajo su propia licencia , la cual es incompatible con la GNU GPL .

Alcance

En el campo de la programación web, en particular del lado del servidor, PHP es uno de los lenguajes de programación populares (junto con JSP , Perl y los lenguajes utilizados en ASP.NET ).

La popularidad en el campo de la creación de sitios web está determinada por la presencia de un gran conjunto de herramientas integradas y módulos adicionales para desarrollar aplicaciones web [15] . Los principales son:

Utilizado por cientos de miles de desarrolladores a partir de la década de 2010; Según el ranking TIOBE basado en datos de motores de búsqueda, en mayo de 2016 PHP ocupaba el 6° lugar entre los lenguajes de programación [13] .

Incluido en LAMP  : un conjunto común de software para crear y alojar sitios web ( Linux , Apache , MySQL , PHP), así como LEMP, un conjunto de software igualmente común ( Linux , Nginx , MySql , PHP).

Los sitios que usan PHP incluyen Facebook , Wikipedia , Yahoo! , Baidu .

Funciones adicionales

El idioma admite automáticamente las cookies HTTP de acuerdo con los estándares de Netscape. Esto le permite configurar y leer pequeños segmentos de datos en el lado del cliente. El trabajo con Cookies se organiza a través de sesiones (sessions). Las sesiones tienen una fecha de caducidad (después de que caduque, los datos se eliminan), en las sesiones puede almacenar y editar diferentes tipos de datos, incluidos los serializados, pasados ​​​​por serializar (el proceso ocurre automáticamente), objetos PHP.

Creación de aplicaciones GUI

PHP no está enfocado a crear aplicaciones de escritorio, pero existe la necesidad de crear interfaces para configurar servidores, ejecución continua, depuración de scripts (scripts), administración de servidores locales y de prueba, etc. Debido a esto, surgieron soluciones a este problema.

Extensiones

El uso principal de las extensiones es agregar bibliotecas de interfaz de usuario (bibliotecas de interfaz de usuario).

Las extensiones se dividen convencionalmente en tres grupos:

  • Extensiones de PHP: WxPHP ( Windows , Linux , macOS ), Winbinder ( Windows );
  • wrappers que usan funciones del sistema usando herramientas FFI: Win32Std, Tk;
  • contenedores para usar la interfaz de línea de comandos: PHP-UI, PHP-XCB.

Se han desarrollado extensiones, como un contenedor bidireccional, para usar otros lenguajes al escribir extensiones de PHP y viceversa. Por ejemplo, PSV Component Library es un proyecto que consta de tres subproyectos:

  • PHP4Delphi implementa conexiones PHP a programas escritos en Delphi utilizando WinAPI ; desarrollado desde 1999, pero no actualizado desde 2009, por lo que aparecieron ramas;
  • Marco de desarrollo de extensiones PHP: una herramienta para crear extensiones PHP, los componentes VCL son una parte integral de PHP4Delphi, cuyos componentes básicos son necesarios para crear aplicaciones;
  • php4Applications es una extensión para usar PHP en otros lenguajes, basada en PHP4Delphi, que da acceso a macros y simplifica el uso de PHP al eliminar la necesidad de crear un wrapper.
Entornos de desarrollo (IDE)

También hay un lugar para entornos de desarrollo completos para GUI PHP:

  • DevPHP

Un pionero en esta categoría es el estudio DevPHP-IDE, que utilizó Kylix ( Delphi ) como columna vertebral de la interfaz y php- cli para crear programas personalizados.

Incluía un editor de código, varias herramientas y un visor HTML visual.

Se introdujo por primera vez en 2002, ahora tiene 3 versiones estables, pero el desarrollo no continúa: se detuvo debido a la muerte del desarrollador principal en un accidente automovilístico.

  • CodeGear Rad Studio (extensión)

Después de DevPHP IDE, apareció una extensión: un conjunto de componentes para CodeGear Rad Studio 2009 basado en php4delphi con algunas mejoras (elementos web, inspector, depurador), su soporte duró cuatro versiones, la segunda de las cuales se incluyó en la extensión paga Rad Studio 2010 : había una oportunidad de usar scripts, diseñar componentes web, ver estilos y páginas web antes de compilar el programa, ejecutar un servidor local, compilar el programa como una aplicación independiente y depurar el código. Con el lanzamiento de Delphi XE, la extensión se denominó RADPHP Xe. Además, el estudio en sí se conoció como Embarcadero Delphi, y el trabajo en esta extensión se suspendió indefinidamente.

  • DevelStudio (RAD)

En 2009, sobre la base de php4delphi, comenzó el desarrollo de un entorno para crear aplicaciones PHP gráficas, al que luego se unió Rostislav Romanov. El entorno se llamó PHP DevelStudio, la primera versión publicada fue la 0.1.7. DevelStudio tenía una pequeña cantidad de componentes en la caja de herramientas y se ejecutaba en PHP 4 obsoleto. En la segunda versión, DevelStudio recibió soporte para PHP 5. Se agregaron flujos y se realizaron muchos cambios y mejoras. El código de ensamblaje de los programas se ha cerrado, las versiones anteriores del programa y los mensajes en el foro se han eliminado para evitar intrusos.

La segunda versión de DevelStudio también recibió un conjunto de componentes AlphaControls, por lo que se utilizó para crear malware debido a su simplicidad y claridad. Los antivirus populares en ese momento (MacAffee, AVG , Avira ) comenzaron a reconocer cualquier programa compilado en DevelStudio como virus.

Después de un tiempo, el autor de AlphaControls presentó una queja ante los desarrolladores de DevelStudio y el conjunto de componentes se eliminó por completo del entorno, sin embargo, se conservó en una versión ya existente, que no se pudo eliminar del foro esta vez. .

En el momento de 2012, se lanzó la última versión del entorno: 3.0.2, donde apareció un nuevo conjunto de componentes, incluido el navegador Chromium en lugar de IE , que atrajo la atención de los desarrolladores web y usuarios del entorno Algorithm. En ese momento, se pagaba compilar programas en Algorithm, por lo que DevelStudio, como un entorno de desarrollo nuevo y gratuito, atrajo a la mayoría de la audiencia hacia sí mismo.

En 2014 comenzaron los primeros intentos de restauración del medio ambiente, esta vez por parte de la comunidad . A fines de 2018, el código fuente fue restaurado y está disponible en GitHub .

En 2019, la comunidad se acercó al creador de DevelStudio para cambiar la política de distribución del entorno y ponerlo a disposición para su actualización y edición. Debido a las quejas sobre la falta de enlaces a las bibliotecas utilizadas (DCEF, PHP4Delphi, TSizeCtrl, SynEdit), se eliminó el foro y una de las páginas que describen el entorno se redirigió a la página principal del sitio. De ahora en adelante, DevelStudio es oficialmente propiedad de la comunidad.

  • Desarrollo siguiente (DN)

Paralelamente a esto, el desarrollador principal DevelStudio comenzó a crear una "reencarnación" del entorno anterior. Tomó como base la biblioteca de gráficos JavaFX , lo que resultó en un entorno completamente nuevo, con soporte CSS , pero sin soporte completo para la biblioteca Zend PHP  : el proyecto se basó en su propio lenguaje jPHP. Sus características son, trabajo en JVM , compilador JIT , soporte Unicode , subprocesos múltiples y una biblioteca estándar orientada a objetos.

En la versión 16, el entorno DevelNext recibió soporte para php 7 y, en paralelo, un entusiasta amplió jPHP para el desarrollo bajo el sistema operativo Android .

Por el momento, el autor y los entusiastas están trabajando en la versión 2020 (anteriormente la 17).

  • PHP Qt

En 2015, Alexander Kazantsev comenzó a estudiar algoritmos de desarrollo de interfaces y creó la extensión php_qml, que permitía usar widgets de la biblioteca QT, pero solo funcionaba en Windows.

Con esto comenzó el desarrollo de PHPQt, las primeras versiones no prestaron mucha atención por parte de los desarrolladores web, por lo que el autor comenzó a mejorar la extensión en profundidad.

El 28 de julio de 2015 se publicó la primera versión del compilador del proyecto, en ese momento era un simple ejecutor de script (script) que adjuntaba código php al stub (como DevelStudio), y tenía una dependencia de la API de Windows, en en esta etapa, casi todos los widgets eran compatibles y multiproceso, hubo una fácil optimización del código php. A partir de ese momento, el motor pasó a llamarse PQEngine,

El 3 de agosto de 2016 se lanzó la quinta versión del compilador de aplicaciones (PqBuilder), que cambió a la base PlastiQ y tenía soporte para la última, en ese momento, php 7, los proyectos recibieron un compilador más completo y ya no requerían el presencia de PqEngine.dll cerca del archivo ejecutable, en cambio, estas bibliotecas visuales comenzaron a agregarse dinámicamente, como archivos, y no cosidos en PQEngine.dll. Este paso se tomó por compatibilidad con otros sistemas y las bibliotecas Qt originales.

Con la llegada de la sexta versión, el proyecto se convirtió en una adición al entorno de Qt Studio y el compilador se convirtió en un optimizador de código antes del ensamblaje final del programa. Apareció un editor de interfaz completo, sugerencias en el editor de código y comenzó a crearse documentación. A partir de ese momento se hizo un anuncio sobre la creación del entorno PqStudio, pero su desarrollo no fue muy lejos.

  • WinForms PHP

En 2018, apareció un proyecto que combina las capacidades de Windows Forms (.NET Framework) y PHP 7. Su desarrollo aún está en marcha a un ritmo lento.[ ¿cuándo? ] . Por el momento, casi todo está disponible en el motor.[ ¿Qué? ] funciones para programación orientada a objetos. El entorno se encuentra en urbanización privada. El ejecutable predeterminado viene con php7ts.dll.

Conectando PHP a un proyecto

También hay extensiones para el uso opuesto: conectar PHP a un proyecto en otro lenguaje de programación: Phalanger (C#, php de 5.4 a 7), Peachpie] (C#, php 7), PHP4Delphi (Lazarus, Delphi, C#, C, C++ , php 5.6, JPHP (Java, php 7.0), PHPly (Python, php 5.6)

Historia

En 1994, el programador danés Rasmus Lerdorf desarrolló en C [16] un conjunto de scripts CGI para dar cuenta de los visitantes de su currículum en línea , que procesa plantillas de documentos HTML . Lerdorf llamó al conjunto Personal Home Page Tools (Herramientas para una página de inicio personal ). Pronto, la funcionalidad ya no fue suficiente, y Lerdorf desarrolló un nuevo intérprete de plantilla PHP / FI ( Intérprete de formularios / página de inicio personal en inglés  - "intérprete de formularios / página de inicio personal") [17] .  

El 8 de junio de 1995, se lanzó la versión 1.0 de Personal Home Page (PHP Tools), la primera versión pública.

En 1997, después de una larga prueba beta , se lanzó la segunda versión del controlador escrito en C  : PHP / FI 2.0. Fue utilizado por alrededor del 1% (aproximadamente 50 mil) de todos los dominios de Internet en el mundo [11] .

PHP 3.0 ha sido objeto de una importante revisión que define la apariencia y el estilo modernos del lenguaje de programación. En 1997, dos programadores israelíes, Andy Gutmans y Zeev Suraski , reescribieron completamente el código del intérprete. PHP 3.0 se lanzó oficialmente en junio de 1998 [11] .

Uno de los puntos fuertes de PHP 3.0 era la capacidad de ampliar el núcleo con módulos adicionales. Posteriormente, la interfaz de escritura de extensiones atrajo a muchos desarrolladores externos a PHP que trabajaban en sus módulos, lo que hizo posible que PHP trabajara con una gran cantidad de bases de datos , protocolos y admitiera una gran cantidad de API . Una gran cantidad de desarrolladores condujo al rápido desarrollo del lenguaje y al rápido crecimiento de su popularidad. A partir de esta versión , el acrónimo de php significa "PHP: preprocesador de hipertexto", en lugar de la obsoleta "Página de inicio personal".

Para el invierno de 1998, casi inmediatamente después del lanzamiento oficial de PHP 3.0, Andy Gutmans y Zeev Suraski comenzaron a reelaborar el núcleo de PHP. Los objetivos incluían aumentar el rendimiento de aplicaciones complejas y mejorar la modularidad de la base de código PHP. El nuevo motor, llamado Zend Engine , hizo frente con éxito a las tareas y se introdujo por primera vez a mediados de 1999 . PHP 4.0 , basado en este motor y que trae consigo un conjunto de funciones adicionales, se lanzó oficialmente en mayo de 2000 . Además de las mejoras de rendimiento, PHP 4.0 tenía varias otras innovaciones clave, como soporte de sesión, almacenamiento en búfer de salida , formas más seguras de manejar la entrada del usuario y varias construcciones de lenguaje nuevas.

La quinta versión de PHP fue lanzada por los desarrolladores el 13 de julio de 2004 . Los cambios incluyen una actualización del núcleo Zend ( Zend Engine 2 ), que aumentó significativamente la eficiencia del intérprete . Se introdujo la compatibilidad con el lenguaje de marcado XML . Las funciones OOP han sido completamente rediseñadas y son muy similares al modelo utilizado en Java . En particular, se introdujo un destructor , miembros y métodos públicos, privados y protegidos, miembros y métodos finales, interfaces y clonación de objetos. Las versiones posteriores también introdujeron espacios de nombres , cierres y una serie de cambios bastante serios, cuantitativa y cualitativamente comparables a los que aparecieron durante la transición a PHP 5.0.

La sexta versión de PHP ha estado en desarrollo desde octubre de 2006 [18] . Se han realizado muchas innovaciones [19] [20] , como eliminar expresiones regulares POSIX y superglobales "largas" del núcleo, y eliminar las directivas safe_mode , magic_quotes_gpc y register_globals del archivo de configuración php.ini. Una de las principales innovaciones fue el soporte para Unicode [21] . Sin embargo, en marzo de 2010 , el desarrollo de PHP6 se ​​consideró poco prometedor [22] debido a las dificultades con la compatibilidad con Unicode. El código fuente de PHP6 se ​​ha movido a , y la versión 5.4 se ha convertido en la principal línea de desarrollo.

PHP7

En 2014, se llevó a cabo una votación, como resultado de lo cual la próxima versión se denominó PHP 7 [23] . El lanzamiento de la nueva versión estaba previsto para mediados de octubre de 2015 [24] . En marzo de 2015, Zend publicó una infografía que describe las principales innovaciones en PHP 7 [25] .

El 3 de diciembre de 2015, se anunció la versión 7.0.0 de PHP [26] .

La nueva versión se basa en una rama experimental de PHP, que originalmente se llamó phpng ( PHP Next Generation "próxima generación"), y se desarrolló con un enfoque en aumentar el rendimiento y reducir el consumo de memoria [27] . La nueva versión agrega la capacidad de especificar el tipo de datos devueltos por la función [28] , control de tipo agregado para datos [29] , así como nuevos operadores.  

El 13 de junio de 2019, se lanzó PHP 7.4. Las propiedades con tipo y las funciones de flecha se agregaron al núcleo, así como la covarianza de tipo de retorno acotado y la contravarianza de tipo de argumento [30] .

PHP 8

La versión 8.0 de PHP se lanzó el 26 de noviembre de 2020 [31] . Las principales innovaciones fueron [32] : compatibilidad con tipos de unión [33] , compilación JIT [34] y atributos (también conocidos como anotaciones), también se reemplazó la "construcción" del interruptor con una "expresión" de coincidencia y se incorporó un nuevo operador Nullsafe. adicional.

El 9 de julio de 2020, Dale Hirt , Gerente de Proyectos de PHP  en Microsoft, publicó un mensaje [35] en una lista de correo indicando que después del lanzamiento de PHP 8.0, Microsoft dejará de apoyar el desarrollo de este lenguaje de programación para Windows [36] . Los especialistas de Microsoft estaban compilando versiones binarias del intérprete para Windows y probando su seguridad. La comunidad de desarrolladores de PHP informó que tomaría todas las medidas necesarias para encontrar una opción alternativa para organizar el soporte para PHP 8.0 y superior para Windows en un futuro próximo, por ejemplo, por su cuenta [37] . php.internals

Sintaxis

La sintaxis de PHP es similar a la del lenguaje C. Algunos elementos, como las matrices asociativas y el bucle foreach, se toman prestados de Perl .

El análisis léxico de PHP se realiza a través de la utilidad re2c [38] [39] , que genera lexers rápidos y fáciles de integrar.

Para escribir un script simple, no necesita describir ninguna variable, módulo utilizado, etc. Cualquier script puede comenzar directamente con el archivo <?php.

El programa Hello world más simple en PHP se ve así:

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

También es posible una versión más corta de la salida de cadena:

<?= '¡Hola, mundo!' ?>

La etiqueta de vista de apertura se <?=utiliza para abreviar las construcciones utilizadas para mostrar una línea.

PHP ejecuta código que está dentro de delimitadores como <?php ?>. Cualquier cosa fuera de los límites se genera sin cambios. Esto se usa principalmente para insertar código PHP en un documento HTML, así:

< html > < encabezado > < título > Probando PHP </ título > </ cabeza > < cuerpo > <?php echo '¡Hola mundo!'; ?> </ cuerpo > </ html >

Además de los delimitadores <?php ?>, está permitido (pero reconocido como obsoleto y prácticamente no utilizado) el uso de una versión abreviada <? ?>. Además, antes de la versión 7.0, ASP <% %> y <script language="php"> </script>. El trabajo de los accesos directos se define en el archivo de configuración php .ini .

Los nombres de las variables comienzan con el símbolo $, no es necesario declarar el tipo de variable. Los nombres de variables y constantes distinguen entre mayúsculas y minúsculas. Los nombres de clases, métodos de clase y funciones no distinguen entre mayúsculas y minúsculas. Las variables se procesan en cadenas entre comillas dobles y cadenas heredoc ( cadenas creadas con el operador <<<). Las variables en cadenas entre comillas simples y nowdoc no se analizan.

Las declaraciones están separadas por un punto y coma ( ;), excepto en algunos casos después de la declaración de construcciones y bucles if/else.

Las variables se pueden pasar a una función tanto por valor como por referencia (se usa el signo &).

PHP admite tres tipos de comentarios: estilo C (delimitados /* */), C++ (comenzando //y continuando hasta el final de la línea) y shell UNIX ( #hasta el final de la línea).

Tipos de datos

PHP es un lenguaje de programación de tipo dinámico que no requiere que se especifique un tipo al declarar variables, así como la declaración de la variable en sí.

Los tipos de datos escalares incluyen:

Los tipos no escalares incluyen:

  • matriz _
  • objeto _
  • recurso externo (recurso)
  • valor indefinido (nulo)

El rango de enteros (int) en PHP depende de la plataforma (para una arquitectura de 32 bits, el rango del número no supera int32_t, es decir, de -2 147 483 648 a 2 147 483 647). Los números se pueden especificar en sistemas numéricos decimales, octales y hexadecimales . El rango de números reales (float) también depende de la plataforma (para una arquitectura de 32 bits, el rango te permite operar con números desde ±1.7×10 −308 hasta ±1.7×10 +308 ).

PHP proporciona a los desarrolladores un tipo booleano que solo puede tomar dos valores true("verdadero") y false("falso"). Cuando se convierte a booleano, el número 0, la cadena vacía, el cero en la cadena "0" nully la matriz vacía se consideran iguales false. Todos los demás valores se convierten automáticamente a true.

El tipo especial nulo es para variables sin un valor definido. El único valor de este tipo es un literal null. El tipo nulo acepta variables no inicializadas, variables inicializadas con una constante null, así como variables eliminadas usando el unset().

Los enlaces a recursos externos son de tipo recurso. Las variables de este tipo, por regla general, son un descriptor que le permite administrar objetos externos, como archivos, imágenes dinámicas, tablas de bases de datos resultantes, etc. A medida que se desarrolla el lenguaje, la biblioteca estándar se refina gradualmente y los recursos son reemplazados por objetos. . Por lo tanto, está previsto deshacerse por completo de este tipo.

Las matrices (array) admiten claves numéricas y de cadena y son heterogéneas . Los arreglos pueden contener valores de cualquier tipo, incluidos otros arreglos. Se conserva el orden de los elementos y sus claves. No es del todo correcto llamar matrices de matrices de php, de hecho, lo más probable es que sea un hash ordenado . Es posible un comportamiento inesperado cuando se usa un bucle forcon un contador en lugar de foreach. Entonces, por ejemplo, al ordenar una matriz con índices numéricos por funciones de la biblioteca estándar, las claves también se ordenan.

Escribir

El lenguaje permite teclear argumentos, devolver valores de funciones y métodos de clase , así como, a partir de la versión 7.4, teclear campos de clase . Habilitar el modo estricto deshabilita las conversiones de tipo implícitas en estas secciones de código, lo que acerca el comportamiento del lenguaje a los lenguajes con escritura fuerte .

Los tipos int, string, float, boolo son definiciones válidas de un tipo de argumento, campo de clase o valor de retorno array. objectTambién se permite usar los nombres de clases o interfaces para definir una implementación específica. No se permite el uso resourcepara la definición de tipo, y la indicación nulles posible con restricciones: solo dentro de la definición del tipo de suma , por ejemplo int|null(o ?int).

PHP moderno implementa soporte básico para tipos de datos algebraicos y permite usar tanto la conjunción como la disyunción al definir un tipo. El lenguaje no permite alias de tipo , pero proporciona varias implementaciones integradas que se denominan "pseudotipos" dentro de PHP. Un término similar en el lenguaje se aplica a cualquier definición de tipo que no sea independiente, aplicable a un valor, pero que se implemente solo como una instrucción de verificación de tipo en Zend VM.

Los pseudotipos incluyen:

  • mezclado cualquier tipo
  • iterable (matriz o cualquier objeto que implemente la interfaz del iterador ).
  • invocable ( función anónima , cadena o matriz) [40]
  • tipo de retorno nulo que significa que no hay retorno de la función
  • nunca devuelva el tipo que indica que la aplicación está interrumpida
  • self es un tipo que se refiere a la clase dentro de la cual se usó este tipo (puede usar los alias padre o estático, pero este último es solo como retorno)
  • tipo falso (parte booleana), que solo se puede utilizar como uno de los elementos del llamado tipo de unión , p.int|false

Además de las comprobaciones de tipo, los "pseudotipos" incorporados pueden implementar una lógica de comprobación adicional. Por ejemplo, callableun tipo podría estar representado:

  • una cadena que debe contener el nombre de la función;
  • una matriz donde los elementos cero y primero son cadenas (interpretadas como el nombre de una función de clase estática);
  • una matriz donde el elemento cero es un objeto y el primero es una cadena (interpretada como un método en el objeto).

Funciones

PHP admite tanto la declaración de funciones con nombre como funciones anónimas de primera clase , por ejemplo:

// Declaración de una función con nombre function get_hello_world () : string { return 'Hello World!' ; } // Declaración de función anónima $getHelloWorld = function () : string { return 'Hello World!' ; }; // Sintaxis abreviada $getHelloWorld = fn () : string => '¡Hola mundo!' ;

Vale la pena señalar que en el caso de las funciones anónimas, la diferencia no está solo en las diferencias visuales, sino también en la forma en que se capturan las variables de contexto externo. Cualquier forma de notación "corta" es un cierre , mientras que una notación larga para implementar un cierre requiere especificar explícitamente variables dentro del operador usedesde un contexto externo para capturarlas:

$variable = '¡Hola mundo!' ; // Usando la sentencia use function () use ( $variable ) : string { return $variable ; }; // Alternativa, utilizando la sintaxis abreviada de fn () : cadena => $variable ;

Acceso a variables y funciones

Se accede a las variables mediante el símbolo $seguido del nombre de la variable. Esta construcción también se puede utilizar para crear variables y funciones dinámicas. [41] Por ejemplo:

$a = 'Soy un' ; // Escribir valor en $a echo $a ; // Variable de salida $a $b = 'a' ; eco $$b ; // Muestra la variable $a ($ extra antes de la variable $b) eco $ { 'a' }; // Variable de salida $a nombre_función (); // Llamar a la función nombre_función $c = 'nombre_función' ; $c (); //Llamar a la función nombre_función $d = 'NombreClase' ; $obj = nuevo nombre de clase ; // Crear un objeto de clase ClassName $obj = new $d (); // Crear un objeto de clase ClassName $obj -> b ; // Accediendo a la propiedad b del objeto $obj -> c (); // Llamar al método c() del objeto $obj -> $b ; // Accediendo a la propiedad a del objeto ya que $b = 'a' $obj -> $c (); // Llamar al método function_name() del objeto ya que $c = 'function_name'

En PHP echo, printaunque parecen funciones, el primero es un operador [42] y el segundo es una expresión (es decir, printdevuelve un valor, a diferencia de echo). Puede omitir los paréntesis al usarlos.

Superglobales

Los arreglos superglobales en PHP son arreglos predefinidos que tienen un alcance global sin usar la directiva .  La mayoría de estas matrices contienen los datos de entrada de la solicitud del usuario (parámetros de solicitud GET , campos de formulario cuando se envía por el método POST , cookies , etc.). global

Todas las superglobales, excepto $GLOBALSy $_REQUEST, tienen contrapartes en desuso con nombres largos que están disponibles hasta la versión 5.3. x (ya que 5.4.0 se ha eliminado). Por lo tanto, las invocaciones de $_GET['year']y $HTTP_GET_VARS['year']son idénticas (excepto por el alcance: las matrices con nombres "largos" no son superglobales).

$GLOBALS Una matriz de todas las variables globales (incluidas las de usuario). $_SERVER(análogo por obsoleto - $HTTP_SERVER_VARS) Contiene variables de entorno que el sistema operativo pasa al servidor. $_ENV(boca $HTTP_ENV_VARS) Variables de entorno actuales ( ing.  Variables de entorno ). Su conjunto es específico para la plataforma en la que se ejecuta el script. $_GET(boca $HTTP_GET_VARS) Contiene los parámetros de la solicitud GET pasada en el URI después del signo de interrogación " ?". $_POST(boca $HTTP_POST_VARS) Una matriz asociativa de valores de campo de formulario HTML cuando se envía mediante el método POST. Los índices de elementos corresponden al valor de una propiedad de los nameobjetos (botones, formularios, botones de radio, casillas de verificación, etc.) del formulario HTML. $_FILES(boca $HTTP_POST_FILES) Una matriz asociativa con información sobre los archivos enviados por el método POST. Cada elemento tiene un índice que es idéntico al valor del atributo "nombre" en el formulario y, a su vez, también es una matriz con los siguientes elementos:
  • ['name'] es el nombre original del archivo en la computadora del usuario.
  • ['type']es el tipo MIME del archivo  especificado por el agente de usuario . PHP no lo verifica y, por lo tanto, no hay garantía de que el tipo especificado sea correcto.
  • ['size'] — tamaño del archivo en bytes.
  • ['tmp_name'] — ruta completa al archivo en la carpeta temporal. El archivo debe moverse desde allí usando el move_uploaded_file. PHP elimina los archivos cargados de la carpeta temporal por sí solo.
  • ['error'] - código de error. Si el archivo se cargó correctamente, este elemento será igual a 0 ( UPLOAD_ERR_OK).
$_COOKIE(boca $HTTP_COOKIE_VARS) Una matriz asociativa con valores de cookies pasados ​​por el agente de usuario . $_REQUEST Contiene elementos de matrices $_GET, $_POST, $_COOKIE. A partir de PHP 4.1, incluye $_FILES. $_SESSION(boca $HTTP_SESSION_VARS) Contiene datos de la sesión.

Programación orientada a objetos

La palabra clave classse reservó en la tercera versión del lenguaje. En la cuarta versión, se hizo posible crear clases y objetos basados ​​en ellos. Sin embargo, los principios de programación orientada a objetos solo se respaldaron parcialmente; por ejemplo, todos los miembros (variables y métodos) eran públicos. Además, la creación de objetos era costosa y lenta.

PHP tiene soporte total para programación orientada a objetos desde la versión 5 . Se ha optimizado el trabajo con clases y ahora dicho código funciona con bastante rapidez.

Una clase en PHP se declara con la extensión class. Los métodos y las propiedades de clase pueden ser públicos ( public, predeterminados), protegidos ( protected) y ocultos ( private). PHP admite los tres mecanismos principales de OOP: encapsulación , polimorfismo de subtipo y herencia (la clase principal se especifica con una palabra clave extendsdespués del nombre de la clase). Las interfaces son compatibles (asignadas con implements). Se permite declarar métodos y clases abstractos finales . No se admite la herencia múltiple de clases; sin embargo, una clase puede implementar múltiples interfaces. La palabra clave se utiliza para acceder a los métodos de la clase principal . parent

Desde la versión 5.4.0 , la herencia múltiple se puede implementar mediante el mecanismo de rasgos .  Las características son similares a los mixins , excepto que no se pueden instanciar directamente . La reutilización de código radica en el uso de código de característica en múltiples clases. Está permitido usar varias características en una clase. El mecanismo de características tiene un medio para resolver conflictos de nombres. Cuando se ejecuta el programa, el código de la función se "compilará" en el código de su clase contenedora.  

Las clases en PHP tienen una serie de métodos "mágicos" ( eng.  métodos mágicos ), comenzando con dos guiones bajos: un constructor ( __construct(), en versiones anteriores a la 5.0, el constructor era un método del mismo nombre que la clase) y un destructor ( __destruct()), así como __get()métodos de lectura ( ) y escritura ( __set()), plegado ( __sleep()) y expansión ( __wakeup()), clonación ( __clone()), etc. Estos métodos son una herramienta bastante flexible: al redefinirlos, puede lograr un cambio significativo en el comportamiento del objeto.

Todas las funciones miembro se implementan como virtuales y, por lo tanto, todas son métodos.

Las instancias de una clase se crean usando la palabra clave new, se accede a las propiedades y métodos de un objeto usando el operador ->. La variable se utiliza para acceder a los miembros de una clase desde sus métodos $this.

clase C1 extiende C2 implementa I1 , I2 { private $a ; protegido $b ; función pública __construcción ( $a , $b ) { padre :: __construcción ( $a , $b ); $esto -> a = $a ; $esto -> b = $b ; } public function plus () { return $esto -> a + $esto -> b ; } /* ............... */ } $d = nuevo C1 ( 1 , 2 ); echo $d -> más (); // 3

Desde PHP 5, los objetos se pasan por referencia:

clase A { public $color = 'rojo' ; } $a = nuevoA ( ); echo $a -> color ; // rojo $b = $a ; $b -> color = 'azul' ; echo $a -> color ; // azul

"Paamayim Nekudotayim" ( hebreo : פעמיים נקודתיים) o simplemente "dos puntos". Usando este token , el programador puede acceder a constantes, propiedades estáticas o sobrecargadas o métodos de la clase. Al referirse a estos elementos desde fuera de la clase, el programador debe usar el nombre de la clase. "Paamayim Nekudotayim" a primera vista puede parecer una frase extraña para dos puntos dobles. Sin embargo, durante la creación de la versión 0.5 de Zend Engine (que se incluyó en PHP3), Andi y Zeev eligieron esta notación [43] . "Paamayim Nekudotayim" realmente significa "doble colon" (literalmente: "doble colon") en hebreo. Esta notación nunca ha cambiado durante el desarrollo de PHP [44] .

class MyClass { public const CONST_VALUE = 'Valor constante' ; } // Usando :: fuera de la declaración de clase echo MyClass :: CONST_VALUE ;

Características del intérprete

Los scripts PHP generalmente son procesados ​​por el intérprete en un orden que garantiza que la aplicación desarrollada sea multiplataforma :

  1. análisis léxico del código fuente y generación de tokens ,
  2. análisis sintáctico de lexemas recibidos,
  3. generar un código de operación para una máquina virtual (una especie de código de bytes ),
  4. optimización (por ejemplo DCE ),
  5. ejecución del código de operación por parte del intérprete (sin crear un archivo ejecutable ), o compilación JIT del resultado con ejecución posterior (se requiere un indicador especial en la configuración del intérprete para habilitar JIT).

Anteriormente, para aumentar el rendimiento de las aplicaciones, era posible utilizar un software especial , los llamados aceleradores . El principio de su funcionamiento es almacenar en caché una vez generado el bytecode en la memoria y/o en el disco , por lo que las etapas 1-3 quedan excluidas del proceso de aplicación, lo que en general conduce a una aceleración significativa. Desde la versión 5.5, uno de los aceleradores, opcache , se ha integrado en el núcleo, por lo que las soluciones de terceros ya no son populares.

Una característica importante es que el desarrollador no necesita preocuparse por asignar y liberar memoria. El núcleo de PHP implementa facilidades para la gestión automática de memoria; toda la memoria asignada se devuelve al sistema después de que finaliza el script [45] .

Extensiones

El intérprete consta de un núcleo y complementos , "extensiones" , que son bibliotecas dinámicas . Las extensiones le permiten complementar las características principales del lenguaje, brindando capacidades para trabajar con bases de datos , sockets , gráficos dinámicos , bibliotecas criptográficas , documentos PDF y similares. Cualquiera puede desarrollar su propia extensión y conectarla. Hay una gran cantidad de extensiones, tanto estándar como creadas por empresas de terceros y entusiastas, pero solo se incluyen unas pocas docenas probadas en el paquete estándar. Muchas extensiones están disponibles en el repositorio de PECL .

Desde la versión 7.4.0, se ha agregado soporte FFI a PHP, lo que simplifica enormemente la interacción con bibliotecas escritas en cualquier otro idioma (incluida la API proporcionada por el sistema operativo). Esta nueva funcionalidad, a su vez, proporcionó una alternativa para escribir extensiones. Por lo tanto, con FFI puede escribir código en PHP e interactuar con cualquier biblioteca del sistema que proporcione cdecl, fastcallo stdcall ABI .

Configuraciones

El intérprete de PHP tiene un archivo de configuración  especial php.ini, que contiene muchas configuraciones, cuyo cambio afecta el comportamiento del intérprete [46] . Es posible deshabilitar el uso de una serie de funciones, cambiar los límites de la RAM utilizada por el script, el tiempo de ejecución, el tamaño de los archivos descargados, configurar el registro de errores, trabajar con sesiones y servicios de correo, conectar extensiones adicionales y mucho más. Es posible dividir un archivo de configuración grande en partes. Por ejemplo, es una práctica común colocar la configuración de la extensión en archivos separados. Las opciones del intérprete se pueden anular en los archivos de configuración del servidor HTTP (por ejemplo, .htaccessen Apache ) o en el propio script en tiempo de ejecución mediante el comando ini_set[47] .

Modos de inicio del intérprete (SAPI)

SAPI es una capa de abstracción externa diseñada para incrustar un intérprete en otras aplicaciones y es responsable de su funcionamiento (inicio, detención, paso de scripts para ejecución, acceso a datos externos). Hay varios SAPI principales que definen cómo se puede ejecutar y usar PHP:

  1. Como módulo para el servidor web (por ejemplo, para el módulo Apachemod_php ). En este caso, el intérprete de PHP se ejecuta en el entorno del proceso del servidor web. El servidor web administra la cantidad de procesos PHP que se están ejecutando y les dice qué scripts ejecutar.
  2. CGI SAPI. Usar CGI significa comenzar un nuevo proceso para procesar cada solicitud. Para ejecutar un script PHP, el servidor web ejecuta ./php-cgi /path/to/script.php. El principio mismo de dicho uso implica que el intérprete de PHP ejecuta solo un script, después de lo cual finaliza su trabajo. El costo de iniciar un proceso de interpretación e inicializarlo es muy a menudo comparable o incluso mayor que el costo de ejecutar un script PHP. Para resolver este problema, se introdujo el modo FastCGI en CGI SAPI. En este modo, el intérprete de PHP se ejecuta como un servidor independiente que procesa las solicitudes entrantes para ejecutar scripts de PHP utilizando el protocolo FastCGI, lo que le permite trabajar con cualquier servidor web que admita este protocolo.
  3. FPM SAPI, conocido como php-fpm, es otra implementación del protocolo FastCGI. Originalmente creado por Andrey Nigmatulin como un parche separado para usar en la red social de Badoo. Esta implementación resolvió una serie de problemas que impedían el uso de CGI/FastCGI SAPI. En particular, se hizo posible reiniciar el grupo de intérpretes de PHP sin perder solicitudes, ejecutar varios grupos con diferentes usuarios, reinicio de emergencia de los intérpretes en caso de problemas con ellos y algunas otras adiciones interesantes. Posteriormente, varias personas trabajaron en el parche, se agregó un modo para administrar dinámicamente la cantidad de procesos PHP en ejecución (similar a administrar la cantidad de procesos en el servidor web Apache) y, a partir de PHP 5.3.3, se incluyó php-fpm en PHP como un SAPI separado.
  4. Como un script de línea de comando (CLI SAPI), que es un archivo ejecutable que el usuario llama desde la línea de comando ; el script se ejecuta en el entorno del usuario que llama. En este caso, es posible utilizar PHP para crear aplicaciones GUI de cliente [48] y resolver tareas administrativas en los sistemas operativos UNIX , Linux , Microsoft Windows , Mac OS X y AmigaOS . Sin embargo, en esta capacidad, no ganó popularidad, dando la palma a Perl , Python y VBScript .

A partir de PHP 5.4.0, la CLI de SAPI tiene la capacidad de ejecutar PHP como un servidor HTTP independiente. Sin embargo, este modo es puramente para el desarrollo, ya que ejecuta solo un proceso de interpretación y ejecuta todas las consultas de manera puramente secuencial.

Huevos de Pascua

PHP tiene algunos huevos de pascua (bromas). Pasar parámetros GET especiales a cualquier secuencia de comandos php da como resultado la salida de varias imágenes.

Por ejemplo:

cualquier_script.php?=PHPE9568F36-D428-11d2-A769-00AA001ACF42

cuando ingresa este valor en la barra de direcciones del navegador, puede ver diferentes imágenes, dependiendo de la versión del intérprete:

  1. foto de Thies Arntzen (versiones 4.1.2, 4.2.2)
  2. foto de un perro salchicha (propietario Stig Bakken ) (versiones 4.3.2, 4.3.3, 4.3.8 - 4.3.10)
  3. foto de terrier negro (propietario Zeev Suraski ) (versiones 4.3.11, 4.4.0 - 4.4.4, 5.1.0, 5.1.2)
  4. foto de un conejo (versiones 4.3.1, 5.0.0, 5.0.3)
  5. logotipo de PHP distorsionado (versiones 5.1.3 - 5.2.13) [49]
  6. foto de un elefante azul de juguete con inscripción PHP (desde la versión 5.3.0) [49]

Los siguientes dos valores le permitirán ver el logotipo estándar de PHP y ZEND, respectivamente [49] :

cualquier_script.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42

cualquier_script.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42

Estos valores también se pueden obtener directamente en el script PHP utilizando las funciones php_logo_guidy zend_logo_guidpara el logotipo de Zend.

También hay un valor especial para mostrar una lista de todos los autores de PHP (4,5) [49] :

cualquier_script.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000

Implementaciones alternativas

Debido a la popularidad del lenguaje PHP y el deseo de aumentar la velocidad de las aplicaciones web basadas en él, se han creado varios compiladores alternativos que se acercan al lenguaje PHP. Entonces, en febrero de 2010, Facebook abrió [ 50] [51] su compilador PHP - HipHop (HPHP, Hyper-PHP) que genera código C++ , seguido de compilación a código de máquina usando gcc . En julio de 2013, la empresa rusa VKontakte anunció un producto similar, KPHP [52] .

La tabla proporciona una lista de implementaciones alternativas actualmente existentes.

Nombre Versión de PHP (aprox.) Licencia resultado de la compilación
PHP 7.4 GPL C++ , código nativo
hip hop 5.4 Licencia PHP C++ , código nativo
Envío de carretera PHP 5.3 GPL / LGPL C , código de máquina
Falangero 5.5 Sra. SS-PL [53] ( fuente compartida ) Microsoft IL
Quercus (parte del servidor web de Resin ) 5.2 GPL o comercial JVM
APS 5.2 BSDL C , código de máquina
pepita [54] 5.3 Licencia Artística y GNU GPL Loro
JPHP [55] 7.1 (parcialmente 7.2, 7.3 y 7.4) [56] apache 2.0 JVM
PHP 5.4 MIT PHP
PH7 5.5 Propio (Licencia pública de Symisc) C , código de máquina
HippyVM 5.6 MIT RPython/PyPy

Un análisis comparativo de algunos compiladores está disponible en phpclasses.org [57] .

Licencias

Ecosistema

Marcos

Sistemas de gestión de contenidos

PHP es el lenguaje más popular para desarrollar sistemas de gestión de contenido (CMS).

Herramientas para desarrollar aplicaciones PHP

Nombre Licencia
Código langosta software gratuito
komodo Trilicencia de Mozilla ( MPL / LGPL / GPL ) [58]
tormenta de php Software propietario
Herramientas de desarrollo PHP Licencia pública de Eclipse
estudio zend shareware
Estudio Aptana GNU GPL
phpDiseñador shareware
Editor experto PHP Shareware [59]
NetBeansIDE CDDL
RadPHP XE prueba
Nuesfera prueba
KDesarrollo [60] GNU GPL
Matriz web de Microsoft software gratuito
Bloc de notas++ GNU GPL
Texto sublime Software propietario
VS.Php para Visual Studio Software propietario
Herramientas PHP para Visual Studio prueba
DesarrollarSiguiente MPL-2.0
jEditar GNU GPL -2.0

Recomendaciones estándar de PHP

La recomendación estándar de PHP ( abbr. PSR  [ ) es una especificación de PHP desarrollada, aceptada y publicada por un grupo de proyectos de PHP autorizados, incluidos CakePHP, Composer , Joomla, PEAR , Phalcon, phpDocumentor , TYPO3, Yii framework [61] . La especificación sirve como una estandarización de los conceptos de programación de PHP y se basa en la experiencia real, así como en la investigación y la experimentación [62] . El propósito de las recomendaciones es asegurar la compatibilidad de los componentes de aplicaciones web desarrollados por diferentes desarrolladores.

Crítica

Los defensores del lenguaje PHP citan el uso generalizado, la demanda de desarrolladores de PHP en el mercado laboral y la facilidad de aprendizaje como sus principales ventajas. Las ventajas del lenguaje incluyen su evolución bastante rápida.

Falta de soporte para codificaciones multibyte en el núcleo del lenguaje

El soporte para cadenas con codificaciones multibyte (como UTF-8 ) se implementa a través de extensiones separadas mbstringy iconvno hay soporte a nivel de kernel; sin embargo, desde PHP 4.2.0 es posible anular las funciones estándar para trabajar con cadenas, reemplazando ellos con análogos de mbstring. La compatibilidad con codificaciones multibyte en todas las funciones de cadena está disponible desde la versión 5.4.0 (marzo de 2012).

Falta de soporte multiproceso

El lenguaje no proporciona la capacidad de crear aplicaciones de subprocesos múltiples y no hay soporte para el acceso sincronizado a los recursos, sin embargo, se implementa utilizando la extensión PCNTL [63] (del control de procesos en inglés  ), pero no es adecuado para la solución de problemas específicos.

Aunque es posible instalar la extensión pthreads para hilos “honestos”, para ello se debe compilar el intérprete con el indicador de seguridad de hilos, y la propia extensión ha quedado obsoleta a favor de la paralela (del mismo autor).

Una alternativa más moderna es usar la extensión Swoole.

Véase también

Notas

  1. 1 2 3 4 http://php.net/manual/en/history.php.php
  2. 1 2 https://www.technotification.com/2018/04/best-php-frameworks.html
  3. 1 2 http://lerdorf.com/bio/  _
  4. Versión 8.1.12 - 2022.
  5. Grupos de Google
  6. PHP: Historia de PHP - Manual
  7. https://fileinfo.com/extension/php
  8. 1 2 3 PHP: Prefacio - Manual
  9. Rasmus Lerdorf | PHP en Hormonas - 2013.
  10. http://php.net/license/
  11. 1 2 3 PHP: Historia de PHP - Manual . Fecha de acceso: 18 de enero de 2009. Archivado desde el original el 1 de febrero de 2009.
  12. ↑ PHP : Prefacio-Manual  . Archivado desde el original el 21 de agosto de 2011.
  13. 1 2 Software TIOBE: Índice Tiobe . Consultado el 2 de noviembre de 2009. Archivado desde el original el 22 de junio de 2013.
  14. Historia de PHP y  proyectos relacionados . Archivado desde el original el 21 de agosto de 2011.
  15. PHP: Funciones - Manual (21 de junio de 2009). Consultado el 13 de noviembre de 2009. Archivado desde el original el 21 de agosto de 2011.
  16. Rasmus Lerdorf. Me pregunto por qué la gente sigue escribiendo que PHP alguna vez se escribió en Perl. nunca lo fue #php  (inglés) . @rasmus (20 de julio de 2012). Consultado el 8 de enero de 2019. Archivado desde el original el 3 de enero de 2018.
  17. Savelyeva N. Clase 1: Introducción al lenguaje de programación PHP/PHP. Archivado el 22 de enero de 2015 en Wayback Machine Intuit, 2005. ISBN 978-5-9556-0026-0
  18. Número de funciones reescritas con soporte Unicode . Fecha de acceso: 19 de enero de 2007. Archivado desde el original el 19 de enero de 2007.
  19. El archivo news.txt de la distribución de PHP 6 (enlace descendente) . Fecha de acceso: 19 de enero de 2007. Archivado desde el original el 12 de diciembre de 2008. 
  20. PHP 6 Actual Terminado y Backlog . Consultado el 7 de abril de 2008. Archivado desde el original el 18 de abril de 2008.
  21. Lista completa de cambios planificados para diciembre de 2005 . Consultado el 12 de agosto de 2006. Archivado desde el original el 12 de agosto de 2006.
  22. Cómo murió PHP6 Archivado el 13 de octubre de 2011 en Wayback Machine // amiro.ru
  23. PHP RFC: Nombre de la próxima versión de PHP . Consultado el 28 de marzo de 2015. Archivado desde el original el 3 de julio de 2017.
  24. RFC de PHP: línea de tiempo de PHP 7.0 . Fecha de acceso: 28 de marzo de 2015. Archivado desde el original el 17 de marzo de 2015.
  25. ↑ Características más geniales de PHP 7 : naves espaciales, sugerencias de tipo, velocidad 2X  . www.zend.com. Consultado el 6 de julio de 2017. Archivado desde el original el 8 de julio de 2017.
  26. PHP: Archivo de noticias - 2015 . Fecha de acceso: 12 de diciembre de 2015. Archivado desde el original el 12 de diciembre de 2015.
  27. PHP:rfc:phpng . php.net . Fecha de acceso: 16 de diciembre de 2014. Archivado desde el original el 19 de octubre de 2014.
  28. RFC: Tipos de devolución . php.net . Consultado el 28 de marzo de 2015. Archivado desde el original el 17 de julio de 2017.
  29. RFC: Declaraciones de tipos escalares . php.net . Consultado el 28 de marzo de 2015. Archivado desde el original el 7 de julio de 2017.
  30. PHP: Nuevas funciones - Manual . Consultado el 2 de mayo de 2020. Archivado desde el original el 2 de mayo de 2020.
  31. PHP: Archivo de noticias - 2020 . Consultado el 29 de noviembre de 2020. Archivado desde el original el 13 de octubre de 2020.
  32. Novedades de PHP 8 - stitcher.io . Consultado el 3 de mayo de 2020. Archivado desde el original el 19 de mayo de 2020.
  33. PHP: rfc: union_types_v2 . Consultado el 3 de mayo de 2020. Archivado desde el original el 1 de abril de 2020.
  34. PHP:rfc:jit . Consultado el 3 de mayo de 2020. Archivado desde el original el 18 de mayo de 2020.
  35. Dale Hirt - Microsoft Support of PHP on Windows Archivado el 16 de julio de 2020 en Wayback Machine . 
  36. Windows 10 dejará de admitir PHP Archivado el 16 de julio de 2020 en Wayback Machine  (ruso)
  37. Microsoft no admitirá PHP 8.0 para Windows . Consultado el 16 de julio de 2020. Archivado desde el original el 17 de julio de 2020.
  38. Construyendo  PHP . Libro de aspectos internos de PHP. Consultado el 1 de marzo de 2022. Archivado desde el original el 8 de mayo de 2021.
  39. ↑ RE2C : generador Alexer basado en lookahead-TDFA  . Impactos del software. Consultado el 1 de marzo de 2022. Archivado desde el original el 27 de enero de 2022.
  40. PHP: Funciones de devolución de llamada (Funciones de devolución de llamada) - Manual . seguro.php.net. Consultado el 27 de febrero de 2019. Archivado desde el original el 28 de febrero de 2019.
  41. PHP: Variables variables - Manual . Consultado el 17 de diciembre de 2008. Archivado desde el original el 11 de mayo de 2008.
  42. PHP: echo - Manual . Fecha de acceso: 14 de enero de 2010. Archivado desde el original el 24 de febrero de 2009.
  43. Aparentemente tomado del lenguaje C++ , donde es la forma binaria de especificar el alcance , una construcción con él, un nombre calificado , en este caso una constante.
  44. http://php.net/manual/en . Consultado el 25 de marzo de 2010. Archivado desde el original el 12 de junio de 2010.
  45. PHP: Gestión básica de memoria - Manual (13 de noviembre de 2009). Consultado el 17 de noviembre de 2009. Archivado desde el original el 21 de agosto de 2011.
  46. PHP: directivas de php.ini - Manual  ( 6 de noviembre de 2009). Consultado el 13 de noviembre de 2009. Archivado desde el original el 21 de agosto de 2011.
  47. PHP: Lista de directivas de php.ini - Manual  ( 6 de noviembre de 2009). Consultado el 13 de noviembre de 2009. Archivado desde el original el 21 de agosto de 2011.
  48. PHP: Uso de PHP en la línea de comandos - Manual (21 de junio de 2009). Consultado el 13 de noviembre de 2009. Archivado desde el original el 21 de agosto de 2011.
  49. 1 2 3 4 Huevo  de Pascua de PHP . Consultado el 16 de noviembre de 2009. Archivado desde el original el 21 de agosto de 2011.
  50. HipHop para PHP: Muévete Rápido
  51. Facebook ha abierto el código para un traductor de PHP de alto rendimiento . Consultado el 3 de febrero de 2010. Archivado desde el original el 6 de febrero de 2010.
  52. Pavel Durov y sus colegas desarrollaron una versión mejorada de PHP . Consultado el 2 de enero de 2014. Archivado desde el original el 12 de diciembre de 2013.
  53. Texto de  licencia
  54. El proyecto se encuentra en etapa experimental
  55. El proyecto se encuentra en etapa experimental. Última versión 1.3.1 (a julio de 2020)
  56. jphp-group/  jphp . GitHub. Consultado el 18 de noviembre de 2018. Archivado desde el original el 5 de octubre de 2018.
  57. Rendimiento del compilador de PHP . Consultado el 1 de marzo de 2010. Archivado desde el original el 26 de febrero de 2010.
  58. Komodo IDE es un entorno de desarrollo profesional para Perl, Python, Tcl | ActiveState (enlace descendente) . Consultado el 22 de noviembre de 2011. Archivado desde el original el 20 de diciembre de 2008. 
  59. Se proporciona registro gratuito para ciudadanos de la ex URSS
  60. Soporte PHP para KDevelop 4 (y eventualmente Quanta+) | Millian Wolff . Fecha de acceso: 11 de diciembre de 2010. Archivado desde el original el 2 de enero de 2011.
  61. Personal._  _ _ Consultado el 1 de agosto de 2020. Archivado desde el original el 2 de junio de 2020.
  62. ↑ Misión y Estructura  . Consultado el 1 de agosto de 2020. Archivado desde el original el 1 de agosto de 2020.
  63. PCNTL . Fecha de acceso: 23 de enero de 2012. Archivado desde el original el 17 de enero de 2012.

Literatura

  • Matt Zandstra. PHP: Objetos, Patrones y Prácticas = Objetos PHP, Patrones y Práctica, Tercera Edición. — 3ra edición. - M .: " Williams ", 2010. - S. 560. - ISBN 978-5-8459-1689-1 .
  • Christian Dari, Emilian Balanescu. PHP y MySQL: creación de una tienda en línea = inicio de comercio electrónico con PHP y MySQL: de novato a profesional. - M .: " Williams ", 2010. - ISBN 978-5-8459-1602-0 .
  • Jason Langstorf. PHP y jQuery para profesionales = Pro PHP y jQuery. - M .: " Williams ", 2010. - S. 352. - ISBN 978-5-8459-1693-8 .
  • Quentin Zervas. Web 2.0: Construcción de Aplicaciones con PHP = Prácticas Aplicaciones Web 2.0 con PHP. - M .: " Williams ", 2009. - S. 544. - ISBN 978-5-8459-1590-0 .
  • Kuznetsov Maxim, Simdianov Igor. PHP 5/6. - San Petersburgo. : " BHV-Petersburg ", 2009. - S. 1024. - ISBN 978-5-9775-0304-4 .
  • Kuznetsov Maxim, Simdianov Igor. Programación orientada a objetos en PHP. - San Petersburgo. : " BHV-Petersburg ", 2007. - S. 608. - ISBN 978-5-9775-0142-2 .
  • Ed Lecky-Thompson, Alec Kove, Stephen Nowitzki, Hyao Eyde-Goodman. PHP 5 para profesionales = Profesional PHP 5. - M. : " Dialéctica ", 2006. - S. 608. - ISBN 0-7645-7282-2 .
  • Kuznetsov Maxim, Simdianov Igor. Tutorial de PHP 5/6. - 3ª ed., revisada. y adicional - San Petersburgo. : " BHV-Petersburg ", 2009. - P. 672. - ISBN 978-5-9775-0409-6 .
  • Kuznetsov Maxim, Simdianov Igor. PHP. La práctica de crear sitios Web. - 2ª ed. revisado y adicional - San Petersburgo. : " BHV-Petersburg ", 2008. - S. 1264. - ISBN 978-5-9775-0203-0 .
  • Kuznetsov Maxim, Simdianov Igor. Rompecabezas de PHP para el hacker. - 2ª ed. revisado y adicional - San Petersburgo. : " BHV-Petersburg ", 2008. - P. 544. - ISBN 978-5-9775-0204-7 .
  • Kuznetsov Maxim, Simdianov Igor. PHP con ejemplos. - 2ª ed. revisado y adicional - San Petersburgo. : " BHV-Petersburg ", 2011. - Pág. 400. - ISBN 978-5-9775-0445-4 .
  • Luke Welling, Laura Thompson. Desarrollo de aplicaciones web con PHP y MySQL. - 5ª ed.- San Petersburgo. : " Dialéctica ", 2019. - S. 768. - ISBN 978-5-9908911-9-7 .
  • Luke Welling, Laura Thompson. Desarrollo Web PHP y MySQL. - quinta edición. - " Addison-Wesley ", 2017. - Pág. 687. - ISBN 978-0-321-83389-1 .
  • Zandstra M. PHP. Objetos, patrones y técnicas de programación. - 4ª ed.- San Petersburgo. : " Dialéctica ", 2015. - S. 576. - ISBN 978-5-8459-1922-9 .
  • Zandstra M. PHP. Objetos, patrones y técnicas de programación. - 5ª ed.- San Petersburgo. : " Dialéctica ", 2019. - S. 736. - ISBN 978-5-907144-54-5 .
  • Zandstra M. Objetos PHP, patrones y práctica . — 5ª edición. - " Apresar ", 2016. - S.  583 . — ISBN 978-1-4842-1995-9 .
  • Nixon R. Creación de sitios web dinámicos con PHP, MySQL, JavaScript, CSS y HTML5. - 4ª ed.- San Petersburgo. : " O'Reilly Bestsellers ", 2016. - P. 768. - ISBN 978-5-496-02146-3 .
  • Ulman, Larry. PHP y MySQL: creación de tiendas online. - 2ª ed.- San Petersburgo. , 2015. - S. 544. - ISBN 978-5-8459-1939-7 .
  • Kuznetsov M., Simdyanov I. Manual de autoinstrucción PHP 7. - 2ª ed. - San Petersburgo. , 2018. - Pág. 448. - ISBN 978-5-9775-3817-6 .

Enlaces