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 .
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 .
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.
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.
ExtensionesEl 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:
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:
También hay un lugar para entornos de desarrollo completos para GUI PHP:
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.
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.
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.
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).
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.
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 proyectoTambié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)
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.
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] .
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
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).
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:
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.
EscribirEl 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:
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:
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 ;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.
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: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 (); // 3Desde 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 ;Los scripts PHP generalmente son procesados por el intérprete en un orden que garantiza que la aplicación desarrollada sea multiplataforma :
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] .
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 .
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] .
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:
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.
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-00AA001ACF42cuando ingresa este valor en la barra de direcciones del navegador, puede ver diferentes imágenes, dependiendo de la versión del intérprete:
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-00AA001ACF42Estos 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
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] .
PHP es el lenguaje más popular para desarrollar sistemas de gestión de contenido (CMS).
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 |
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.
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.
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).
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.
![]() | ||||
---|---|---|---|---|
sitios temáticos | ||||
diccionarios y enciclopedias | ||||
|
PHP | |
---|---|
Gente | |
Recursos |
|
Implementaciones | |
Marcos |
|
Pruebas |
|
ORM | |
IDE | |
Compilador | Falangero |
Kit de herramientas | |
Categoría |
Lenguajes de programación | |
---|---|
|
Software gratuito y de código abierto | |
---|---|
Lo principal |
|
Comunidad |
|
Organizaciones |
|
Licencias | |
Problemas | |
Otro |
|
|
Web y sitios web | |
---|---|
globalmente | |
En la zona | |
Tipos de sitios y servicios |
|
Creación y mantenimiento | |
Tipos de diseños, páginas, sitios. | |
Técnico | |
Marketing | |
sociedad y Cultura |
Protocolos de interacción | |
---|---|
Pasarelas |