{"id":22,"date":"2024-05-28T19:15:29","date_gmt":"2024-05-28T17:15:29","guid":{"rendered":"https:\/\/cienciaytecnology.com\/wordpress\/?p=22"},"modified":"2024-11-03T19:46:27","modified_gmt":"2024-11-03T18:46:27","slug":"php","status":"publish","type":"post","link":"https:\/\/cienciaytecnology.com\/wordpress\/php\/","title":{"rendered":"PHP"},"content":{"rendered":"\n<p>PHP est\u00e1 dise\u00f1ado para ser&nbsp;<strong>f\u00e1cil de aprender y potente en su aplicaci\u00f3n<\/strong>, lo que lo convierte en una opci\u00f3n popular para desarrolladores de todos los niveles. Aqu\u00ed tienes algunos aspectos b\u00e1sicos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Etiquetas de PHP<\/strong>: Un script de PHP se puede colocar en cualquier parte de un documento. Este script comienza con&nbsp;<code>&lt;?php<\/code>&nbsp;y termina con&nbsp;<code>?&gt;<\/code>. Por ejemplo:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/\/ C\u00f3digo PHP va aqu\u00ed\n?&gt;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Extensi\u00f3n de archivos<\/strong>: La extensi\u00f3n por defecto de los archivos PHP es&nbsp;<code>.php<\/code>.&nbsp;<a href=\"https:\/\/cms.rootstack.com\/es\/es\/blog\/php-cual-es-la-sintaxis-basica-de-este-lenguaje-de-programacion\" target=\"_blank\" rel=\"noreferrer noopener\">Un archivo PHP por lo general contiene etiquetas HTML y algunos c\u00f3digos PHP de secuencia de comandos<\/a><a href=\"https:\/\/cms.rootstack.com\/es\/es\/blog\/php-cual-es-la-sintaxis-basica-de-este-lenguaje-de-programacion\" target=\"_blank\" rel=\"noreferrer noopener\"><sup>2<\/sup><\/a>.<\/li>\n\n\n\n<li><strong>Separaci\u00f3n de instrucciones<\/strong>: Las instrucciones en PHP se separan con punto y coma (<code>;<\/code>). Por ejemplo:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>$nombre = \"Juan\";\necho \"Hola, \" . $nombre . \"!\";<\/code><\/pre>\n\n\n\n<p><strong>Comentarios<\/strong>: Puedes agregar comentarios en tu c\u00f3digo PHP para hacerlo m\u00e1s legible. Los comentarios de una sola l\u00ednea comienzan con&nbsp;<code>\/\/<\/code>, mientras que los comentarios de varias l\u00edneas se encierran entre&nbsp;<code>\/*<\/code>&nbsp;y&nbsp;<code>*\/<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Esto es un comentario de una sola l\u00ednea\n\n\/*\nEsto es un comentario\nde varias l\u00edneas\n*\/<\/code><\/pre>\n\n\n\n<p>En&nbsp;<strong>PHP<\/strong>, los tipos de datos se utilizan para representar diferentes tipos de valores que se pueden manipular en un programa. A continuaci\u00f3n, describir\u00e9 los tipos de datos m\u00e1s comunes en PHP:<\/p>\n\n\n\n<p><strong>Entero (int)<\/strong>: Representa n\u00fameros enteros sin parte decimal. Puede ser positivo o negativo. Por ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$edad = 30;<\/code><\/pre>\n\n\n\n<p><strong>Flotante o doble (float o double)<\/strong>: Representa n\u00fameros con punto flotante (decimales). Por ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$precio = 19.99;<\/code><\/pre>\n\n\n\n<p><strong>Cadena de caracteres (string)<\/strong>: Representa texto. Puede estar entre comillas simples o dobles. Por ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$nombre = \"Juan\";<\/code><\/pre>\n\n\n\n<p><strong>Booleano (bool)<\/strong>: Representa valores verdaderos (<code>true<\/code>) o falsos (<code>false<\/code>). Se utiliza en pruebas condicionales. Por ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$activo = true;<\/code><\/pre>\n\n\n\n<p><strong>Arreglo (array)<\/strong>: Almacena m\u00faltiples valores en una sola variable. Por ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$colores = array(\"rojo\", \"verde\", \"azul\");\n$colores = &#91;\"rojo\", \"verde\", \"azul\"];<\/code><\/pre>\n\n\n\n<p><strong>Objeto<\/strong>: Las clases y objetos son fundamentales en la programaci\u00f3n orientada a objetos. Un objeto es una instancia de una clase. Por ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Coche {\n    public $marca;\n    public function __construct($marca) {\n        $this-&gt;marca = $marca;\n    }\n}\n$miCoche = new Coche(\"Toyota\");<\/code><\/pre>\n\n\n\n<p><a href=\"https:\/\/www.php.net\/manual\/es\/language.types.php\" target=\"_blank\" rel=\"noreferrer noopener\">Recuerda que PHP no requiere (ni soporta) la definici\u00f3n expl\u00edcita de tipos en la declaraci\u00f3n de variables; el tipo de la variable se determina por el contexto en el cual se emplea la variable<\/a><\/p>\n\n\n\n<p>En&nbsp;<strong>PHP<\/strong>, los&nbsp;<strong>arrays<\/strong>&nbsp;son estructuras de datos que nos permiten almacenar m\u00faltiples valores en una sola variable. Existen dos tipos principales de arrays:&nbsp;<strong>arrays indexados<\/strong>&nbsp;y&nbsp;<strong>arrays asociativos<\/strong>. Vamos a explorar ambos:<\/p>\n\n\n\n<p><strong>Arrays Indexados<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Los&nbsp;<strong>arrays indexados<\/strong>&nbsp;utilizan&nbsp;<strong>\u00edndices num\u00e9ricos<\/strong>&nbsp;para acceder a sus elementos. Cada elemento se almacena en una posici\u00f3n espec\u00edfica del array, comenzando desde el \u00edndice 0.<\/li>\n\n\n\n<li>Ejemplo de un array indexado:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>$colores = array(\"rojo\", \"verde\", \"azul\");<\/code><\/pre>\n\n\n\n<p>En este caso,&nbsp;<code>$colores[0]<\/code>&nbsp;es \u201crojo\u201d,&nbsp;<code>$colores[1]<\/code>&nbsp;es \u201cverde\u201d y&nbsp;<code>$colores[2]<\/code>&nbsp;es \u201cazul\u201d.<\/p>\n\n\n\n<p><strong>Arrays Asociativos<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Los&nbsp;<strong>arrays asociativos<\/strong>&nbsp;utilizan&nbsp;<strong>claves personalizadas<\/strong>&nbsp;en lugar de \u00edndices num\u00e9ricos. Cada elemento se asocia con una clave espec\u00edfica.<\/li>\n\n\n\n<li>Ejemplo de un array asociativo:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>$persona = array(\n    \"nombre\" =&gt; \"Juan\",\n    \"edad\" =&gt; 30,\n    \"ciudad\" =&gt; \"Madrid\"\n);<\/code><\/pre>\n\n\n\n<p>En este caso,&nbsp;<code>$persona[\"nombre\"]<\/code>&nbsp;es \u201cJuan\u201d,&nbsp;<code>$persona[\"edad\"]<\/code>&nbsp;es 30 y&nbsp;<code>$persona[\"ciudad\"]<\/code>&nbsp;es \u201cMadrid\u201d.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Diferencias clave<\/strong>:\n<ul class=\"wp-block-list\">\n<li>En los arrays indexados, los \u00edndices son autom\u00e1ticamente asignados (0, 1, 2, \u2026).<\/li>\n\n\n\n<li>En los arrays asociativos, t\u00fa eliges las claves (pueden ser strings o n\u00fameros).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Ventajas de los Arrays Asociativos<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Puedes asignar significado a cada elemento mediante claves descriptivas.<\/li>\n\n\n\n<li>Son \u00fatiles para almacenar informaci\u00f3n estructurada, como datos de una persona o configuraciones de una aplicaci\u00f3n.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p><a href=\"https:\/\/www.php.net\/manual\/es\/language.types.array.php\" target=\"_blank\" rel=\"noreferrer noopener\">En resumen, los&nbsp;<strong>arrays indexados<\/strong>&nbsp;son ideales cuando necesitas una lista simple de elementos, mientras que los&nbsp;<strong>arrays asociativos<\/strong>&nbsp;son m\u00e1s apropiados cuando deseas relacionar datos con claves personalizadas<\/a><\/p>\n\n\n\n<p>Puedes crear&nbsp;<strong>arrays<\/strong>&nbsp;tanto&nbsp;<strong>indexados<\/strong>&nbsp;como&nbsp;<strong>asociativos<\/strong>&nbsp;utilizando la notaci\u00f3n de corchetes&nbsp;<code>[]<\/code>&nbsp;de forma abreviada. Perm\u00edteme mostrarte c\u00f3mo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Array Indexado (abreviado)<\/strong>:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>$colores = &#91;\"rojo\", \"verde\", \"azul\"];<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Array Asociativo (abreviado)<\/strong>:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>$persona = &#91;\n    \"nombre\" =&gt; \"Juan\",\n    \"edad\" =&gt; 30,\n    \"ciudad\" =&gt; \"Madrid\"\n];<\/code><\/pre>\n\n\n\n<p>Aqu\u00ed,&nbsp;<code>$persona[\"nombre\"]<\/code>&nbsp;es \u201cJuan\u201d,&nbsp;<code>$persona[\"edad\"]<\/code>&nbsp;es 30 y&nbsp;<code>$persona[\"ciudad\"]<\/code>&nbsp;es \u201cMadrid\u201d.<\/p>\n\n\n\n<p>La notaci\u00f3n de corchetes&nbsp;<code>[]<\/code>&nbsp;es una forma concisa y legible de definir arrays en PHP.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Clases y Objetos<\/strong><\/h3>\n\n\n\n<p>La&nbsp;<strong>programaci\u00f3n orientada a objetos (POO)<\/strong>&nbsp;se basa en la creaci\u00f3n de&nbsp;<strong>clases<\/strong>&nbsp;y&nbsp;<strong>objetos<\/strong>&nbsp;para encapsular datos y comportamientos.&nbsp;<a href=\"https:\/\/bing.com\/search?q=todo+sobre+objetos+y+clases+y+php\" target=\"_blank\" rel=\"noreferrer noopener\">En&nbsp;<strong>PHP<\/strong>, las clases y los objetos son los elementos fundamentales de la POO, y se utilizan para crear soluciones escalables y eficientes<\/a><a href=\"https:\/\/bing.com\/search?q=todo+sobre+objetos+y+clases+y+php\" target=\"_blank\" rel=\"noreferrer noopener\"><sup>1<\/sup><\/a>. Aqu\u00ed tienes algunos conceptos clave sobre clases y objetos en PHP:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Clases<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Una&nbsp;<strong>clase<\/strong>&nbsp;es una plantilla o un plano que define la estructura y el comportamiento de los objetos.<\/li>\n\n\n\n<li>Define propiedades (variables) y m\u00e9todos (funciones) que los objetos pueden tener.<\/li>\n\n\n\n<li>Puedes pensar en una clase como un \u201cmolde\u201d para crear objetos.<\/li>\n\n\n\n<li>Para definir una clase en PHP, utilizamos la palabra clave&nbsp;<code>class<\/code>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Objetos<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Un&nbsp;<strong>objeto<\/strong>&nbsp;es una instancia particular de una clase.<\/li>\n\n\n\n<li>Cada objeto tiene sus propios valores para las propiedades definidas en la clase.<\/li>\n\n\n\n<li>Puedes crear m\u00faltiples objetos a partir de una misma clase.<\/li>\n\n\n\n<li><a href=\"https:\/\/www.manualweb.net\/php\/clases-y-objetos-en-php\/\" target=\"_blank\" rel=\"noreferrer noopener\">Para crear un objeto en PHP, utilizamos la sintaxis:&nbsp;<code>$objeto = new NombreClase(valores);<\/code><\/a><a href=\"https:\/\/www.manualweb.net\/php\/clases-y-objetos-en-php\/\" target=\"_blank\" rel=\"noreferrer noopener\"><sup>2<\/sup><\/a>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Propiedades y M\u00e9todos<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Las&nbsp;<strong>propiedades<\/strong>&nbsp;son variables dentro de una clase que almacenan datos espec\u00edficos para cada objeto.<\/li>\n\n\n\n<li>Los&nbsp;<strong>m\u00e9todos<\/strong>&nbsp;son funciones dentro de una clase que definen el comportamiento de los objetos.<\/li>\n\n\n\n<li>Puedes acceder a las propiedades y m\u00e9todos de un objeto utilizando la notaci\u00f3n de punto (<code>$objeto-&gt;propiedad<\/code>&nbsp;o&nbsp;<code>$objeto-&gt;metodo()<\/code>).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Visibilidad<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Las propiedades y m\u00e9todos pueden tener diferentes niveles de visibilidad:&nbsp;<code>public<\/code>,&nbsp;<code>protected<\/code>&nbsp;o&nbsp;<code>private<\/code>.<\/li>\n\n\n\n<li><code>public<\/code>: Accesible desde cualquier lugar.<\/li>\n\n\n\n<li><code>protected<\/code>: Accesible solo dentro de la clase y sus subclases.<\/li>\n\n\n\n<li><code>private<\/code>: Accesible solo dentro de la clase.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Constructores y Destructores<\/strong>:\n<ul class=\"wp-block-list\">\n<li>El&nbsp;<strong>constructor<\/strong>&nbsp;es un m\u00e9todo especial que se ejecuta autom\u00e1ticamente al crear un objeto.<\/li>\n\n\n\n<li>El&nbsp;<strong>destructor<\/strong>&nbsp;se ejecuta cuando el objeto se destruye o se elimina.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Herencia<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Permite crear una nueva clase basada en una clase existente (clase padre).<\/li>\n\n\n\n<li>La nueva clase (clase hija) hereda propiedades y m\u00e9todos de la clase padre.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Abstracci\u00f3n, Interfaces y Rasgos (Traits)<\/strong>:\n<ul class=\"wp-block-list\">\n<li>La&nbsp;<strong>abstracci\u00f3n<\/strong>&nbsp;permite definir una clase base con m\u00e9todos abstractos que deben ser implementados por las clases derivadas.<\/li>\n\n\n\n<li>Las&nbsp;<strong>interfaces<\/strong>&nbsp;definen un conjunto de m\u00e9todos que las clases deben implementar.<\/li>\n\n\n\n<li>Los&nbsp;<strong>rasgos<\/strong>&nbsp;son fragmentos de c\u00f3digo reutilizables que se pueden incluir en m\u00faltiples clases.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>En resumen, las clases y objetos en PHP te permiten organizar y estructurar tu c\u00f3digo de manera m\u00e1s eficiente, facilitando la reutilizaci\u00f3n y la modularidad.<\/p>\n\n\n\n<p>A continuaci\u00f3n, te proporciono ejemplos pr\u00e1cticos para cada uno de los conceptos mencionados sobre&nbsp;<strong>clases y objetos en PHP<\/strong>:<\/p>\n\n\n\n<p><strong>Clases:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nclass Persona {\n    public $nombre;\n    public $edad;\n\n    public function saludar() {\n        echo \"\u00a1Hola, mi nombre es {$this-&gt;nombre}!\";\n    }\n}\n\n\/\/ Crear un objeto de la clase Persona\n$persona1 = new Persona();\n$persona1-&gt;nombre = \"Juan\";\n$persona1-&gt;edad = 30;\n$persona1-&gt;saludar();\n?&gt;<\/code><\/pre>\n\n\n\n<p>En este ejemplo, hemos definido una clase&nbsp;<code>Persona<\/code>&nbsp;con propiedades&nbsp;<code>nombre<\/code>&nbsp;y&nbsp;<code>edad<\/code>, as\u00ed como un m\u00e9todo&nbsp;<code>saludar()<\/code>&nbsp;que muestra un saludo personalizado.<\/p>\n\n\n\n<p><strong>Objetos:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/\/ Crear otro objeto de la clase Persona\n$persona2 = new Persona();\n$persona2-&gt;nombre = \"Mar\u00eda\";\n$persona2-&gt;edad = 25;\n$persona2-&gt;saludar();\n?&gt;<\/code><\/pre>\n\n\n\n<p>Aqu\u00ed creamos un segundo objeto&nbsp;<code>Persona<\/code>&nbsp;con diferentes valores para las propiedades.<\/p>\n\n\n\n<p><strong>Visibilidad:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nclass Coche {\n    private $marca;\n\n    public function setMarca($nuevaMarca) {\n        $this-&gt;marca = $nuevaMarca;\n    }\n\n    public function getMarca() {\n        return $this-&gt;marca;\n    }\n}\n\n$miCoche = new Coche();\n$miCoche-&gt;setMarca(\"Toyota\");\necho \"Marca del coche: \" . $miCoche-&gt;getMarca();\n?&gt;<\/code><\/pre>\n\n\n\n<p>En este ejemplo, la propiedad&nbsp;<code>$marca<\/code>&nbsp;es privada, pero podemos acceder a ella a trav\u00e9s de los m\u00e9todos&nbsp;<code>setMarca()<\/code>&nbsp;y&nbsp;<code>getMarca()<\/code>.<\/p>\n\n\n\n<p><strong>Constructores y Destructores<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nclass Producto {\n    public $nombre;\n\n    public function __construct($nombre) {\n        $this-&gt;nombre = $nombre;\n        echo \"Se cre\u00f3 un nuevo producto: {$this-&gt;nombre}\";\n    }\n\n    public function __destruct() {\n        echo \"El producto {$this-&gt;nombre} se ha eliminado.\";\n    }\n}\n\n$producto1 = new Producto(\"Laptop\");\n\/\/ ... m\u00e1s c\u00f3digo ...\nunset($producto1); \/\/ Elimina el objeto\n?&gt;<\/code><\/pre>\n\n\n\n<p>Aqu\u00ed utilizamos el constructor&nbsp;<code>__construct()<\/code>&nbsp;y el destructor&nbsp;<code>__destruct()<\/code>&nbsp;para manejar la creaci\u00f3n y eliminaci\u00f3n de objetos.<\/p>\n\n\n\n<p><strong>Herencia:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nclass Empleado extends Persona {\n    public $puesto;\n\n    public function trabajar() {\n        echo \"{$this-&gt;nombre} est\u00e1 trabajando como {$this-&gt;puesto}.\";\n    }\n}\n\n$empleado1 = new Empleado();\n$empleado1-&gt;nombre = \"Pedro\";\n$empleado1-&gt;puesto = \"Desarrollador\";\n$empleado1-&gt;trabajar();\n?&gt;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Aqu\u00ed creamos una clase&nbsp;<code>Empleado<\/code>&nbsp;que hereda de la clase&nbsp;<code>Persona<\/code>.<\/li>\n\n\n\n<li><strong>Abstracci\u00f3n, Interfaces y Rasgos (Traits)<\/strong>:\n<ul class=\"wp-block-list\">\n<li>La abstracci\u00f3n se logra mediante la definici\u00f3n de m\u00e9todos abstractos en una clase base.<\/li>\n\n\n\n<li>Las interfaces se definen con la palabra clave&nbsp;<code>interface<\/code>.<\/li>\n\n\n\n<li>Los rasgos se crean con la palabra clave&nbsp;<code>trait<\/code>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Vamos a explorar los conceptos de&nbsp;<strong>variables<\/strong>,&nbsp;<strong>constantes<\/strong>,&nbsp;<strong>expresiones<\/strong>&nbsp;y&nbsp;<strong>operadores<\/strong>&nbsp;en&nbsp;<strong>PHP<\/strong>. \ud83d\ude0a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Variables<\/strong>:\n<ul class=\"wp-block-list\">\n<li>En PHP, las variables se declaran utilizando el s\u00edmbolo de&nbsp;<code>$<\/code>&nbsp;seguido del nombre de la variable.<\/li>\n\n\n\n<li>No es necesario especificar el tipo de dato al declarar una variable, ya que PHP es un lenguaje de programaci\u00f3n con&nbsp;<strong>variables de tipado din\u00e1mico<\/strong>.<\/li>\n\n\n\n<li>Ejemplo:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>$nombre = \"Juan\";\n$edad = 25;\n$precio = 10.5;\n$esEstudiante = true;<\/code><\/pre>\n\n\n\n<p><strong>Constantes<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Las constantes son valores que no cambian durante la ejecuci\u00f3n del programa.<\/li>\n\n\n\n<li>Se definen utilizando la funci\u00f3n&nbsp;<code>define()<\/code>&nbsp;o la palabra clave&nbsp;<code>const<\/code>.<\/li>\n\n\n\n<li>Ejemplo:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>define(\"PI\", 3.14159);\nconst IVA = 0.21;<\/code><\/pre>\n\n\n\n<p><strong>Expresiones<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Las expresiones son combinaciones de valores, variables, operadores y funciones que devuelven un valor.<\/li>\n\n\n\n<li>Casi todo en PHP es una expresi\u00f3n.<\/li>\n\n\n\n<li>Ejemplo:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>$resultado = ($edad * 2) + 10;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Operadores<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Los operadores son s\u00edmbolos que realizan operaciones en expresiones.<\/li>\n\n\n\n<li>Algunos operadores comunes en PHP son:\n<ul class=\"wp-block-list\">\n<li><strong>Aritm\u00e9ticos<\/strong>:&nbsp;<code>+<\/code>,&nbsp;<code>-<\/code>,&nbsp;<code>*<\/code>,&nbsp;<code>\/<\/code>,&nbsp;<code>%<\/code><\/li>\n\n\n\n<li><strong>Asignaci\u00f3n<\/strong>:&nbsp;<code>=<\/code>,&nbsp;<code>+=<\/code>,&nbsp;<code>-=<\/code>,&nbsp;<code>*=<\/code>,&nbsp;<code>\/=<\/code><\/li>\n\n\n\n<li><strong>Comparaci\u00f3n<\/strong>:&nbsp;<code>==<\/code>,&nbsp;<code>!=<\/code>,&nbsp;<code>&lt;<\/code>,&nbsp;<code>&gt;<\/code>,&nbsp;<code>&lt;=<\/code>,&nbsp;<code>&gt;=<\/code><\/li>\n\n\n\n<li><strong>L\u00f3gicos<\/strong>:&nbsp;<code>&amp;&amp;<\/code>,&nbsp;<code>||<\/code>,&nbsp;<code>!<\/code><\/li>\n\n\n\n<li><strong>Concatenaci\u00f3n de strings<\/strong>:&nbsp;<code>.<\/code><\/li>\n\n\n\n<li><strong>Incremento\/Decremento<\/strong>:&nbsp;<code>++<\/code>,&nbsp;<code>--<\/code><\/li>\n\n\n\n<li><strong>Operadores ternarios<\/strong>:&nbsp;<code>? :<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Recuerda que las expresiones y operadores son fundamentales para construir programas en PHP.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Variables Superglobales<\/h2>\n\n\n\n<p>En PHP, las&nbsp;<strong>superglobales<\/strong>&nbsp;son variables internas que est\u00e1n disponibles en todos los \u00e1mbitos a lo largo del script. No es necesario emplear&nbsp;<code>global $variable;<\/code>&nbsp;para acceder a ellas dentro de las funciones o m\u00e9todos. Las principales superglobales son:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>$GLOBALS<\/code>: Contiene todas las variables globales.<\/li>\n\n\n\n<li><code>$_SERVER<\/code>: Proporciona informaci\u00f3n sobre el servidor y la solicitud HTTP.<\/li>\n\n\n\n<li><code>$_GET<\/code>: Almacena los par\u00e1metros pasados en la URL. &nbsp;(por ejemplo,&nbsp;<code>example.com\/index.php?param1=value1<\/code>&amp;param2=value2).<\/li>\n\n\n\n<li><code>$_POST<\/code>: Contiene datos enviados mediante formularios POST.<\/li>\n\n\n\n<li><code>$_FILES<\/code>: Utilizado para manejar archivos subidos por el usuario.<\/li>\n\n\n\n<li><code>$_COOKIE<\/code>: Almacena cookies del cliente.<\/li>\n\n\n\n<li><code>$_SESSION<\/code>: Mantiene informaci\u00f3n de sesi\u00f3n.<\/li>\n\n\n\n<li><code>$_REQUEST<\/code>: Combina datos de&nbsp;<code>$_GET<\/code>,&nbsp;<code>$_POST<\/code>&nbsp;y&nbsp;<code>$_COOKIE<\/code>.<\/li>\n\n\n\n<li><a href=\"https:\/\/www.php.net\/manual\/es\/language.variables.superglobals.php\" target=\"_blank\" rel=\"noreferrer noopener\"><code>$_ENV<\/code>: Contiene variables de entorno<\/a>.<\/li>\n<\/ol>\n\n\n\n<p>Aqu\u00ed tienes un ejemplo de un formulario HTML que env\u00eda datos al servidor mediante el m\u00e9todo POST y c\u00f3mo se procesan esos datos en un script PHP:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html&gt;\n&lt;head&gt;\n    &lt;title&gt;Formulario de Registro&lt;\/title&gt;\n    &lt;meta http-equiv=\"Content-Type\" content=\"text\/html; charset=UTF-8\"&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h2&gt;Formulario de Registro&lt;\/h2&gt;\n    &lt;form action=\"registration_form.php\" method=\"POST\"&gt;\n        First name: &lt;input type=\"text\" name=\"firstname\"&gt;&lt;br&gt;\n        Last name: &lt;input type=\"text\" name=\"lastname\"&gt;\n        &lt;input type=\"hidden\" name=\"form_submitted\" value=\"1\" \/&gt;\n        &lt;input type=\"submit\" value=\"Submit\"&gt;\n    &lt;\/form&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n\n\n\n<p>En este ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El formulario se env\u00eda al script \u201cregistration_form.php\u201d mediante el m\u00e9todo POST.<\/li>\n\n\n\n<li>Los datos recopilados (nombre y apellido) se guardan en las variables&nbsp;<code>$firstname<\/code>&nbsp;y&nbsp;<code>$lastname<\/code>&nbsp;utilizando la variable&nbsp;<code>$_POST<\/code>.<\/li>\n\n\n\n<li>El valor oculto&nbsp;<code>&lt;input type=\"hidden\" name=\"form_submitted\" value=\"1\" \/&gt;<\/code>&nbsp;se utiliza para comprobar si el formulario se ha enviado o no.<\/li>\n\n\n\n<li>Cuando se hace clic en el bot\u00f3n \u201cSubmit\u201d, los datos se env\u00edan al servidor para su procesamiento.<\/li>\n<\/ul>\n\n\n\n<p>el archivo&nbsp;<code>registration_form.php<\/code>&nbsp;que procesa los datos enviados desde el formulario de registro y c\u00f3mo mostrar esos datos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nif ($_SERVER&#91;\"REQUEST_METHOD\"] == \"POST\") {\n    \/\/ Obtener los valores enviados desde el formulario\n    $firstname = $_POST&#91;\"firstname\"];\n    $lastname = $_POST&#91;\"lastname\"];\n\n    \/\/ Procesar los datos (puedes guardarlos en una base de datos, enviar un correo, etc.)\n    \/\/ En este ejemplo, simplemente los mostraremos en la p\u00e1gina\n    echo \"\u00a1Gracias por registrarte!&lt;br&gt;\";\n    echo \"Nombre: \" . $firstname . \"&lt;br&gt;\";\n    echo \"Apellido: \" . $lastname;\n} else {\n    \/\/ Si el formulario no se ha enviado, muestra un mensaje\n    echo \"Por favor, completa el formulario.\";\n}\n?&gt;<\/code><\/pre>\n\n\n\n<p>En este c\u00f3digo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Verificamos si el m\u00e9todo de solicitud es POST (<code>$_SERVER[\"REQUEST_METHOD\"] == \"POST\"<\/code>).<\/li>\n\n\n\n<li>Recuperamos los valores enviados desde el formulario utilizando&nbsp;<code>$_POST<\/code>.<\/li>\n\n\n\n<li>Procesamos los datos (en este caso, solo los mostramos en la p\u00e1gina).<\/li>\n\n\n\n<li>Si el formulario no se ha enviado, mostramos un mensaje para completarlo.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Estructuras de control en php<\/h3>\n\n\n\n<p>Un script PHP est\u00e1 contruido a partir de&nbsp;<strong>sentencias<\/strong>. Una sentencia puede ser una asignaci\u00f3n, una llamada a una funci\u00f3n, un loop, una sentencia condicional o una sentencia vac\u00eda. Las sentencias normalmente finalizan con un punto y coma.<\/p>\n\n\n\n<p>Las&nbsp;<strong>estructuras de control<\/strong>&nbsp;son sentencias que permiten controlar c\u00f3mo el c\u00f3digo fluye en nuestro script bas\u00e1ndose en ciertos factores. Por ejemplo, cuando queremos realizar una acci\u00f3n s\u00f3lo si cierta variable est\u00e1 definida, o cuando queremos mostrar un&nbsp;<strong>array<\/strong>&nbsp;de datos a trav\u00e9s de un&nbsp;<strong>loop<\/strong>.<\/p>\n\n\n\n<p>Las estructuras de control son mayoritariamente&nbsp;<strong>condicionales<\/strong>&nbsp;(if, switch, etc) o&nbsp;<strong>loops<\/strong>&nbsp;(for, foreach, etc).<\/p>\n\n\n\n<p><strong>Indice de contenido<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><\/th><th><\/th><\/tr><\/thead><tbody><tr><td>1. if<\/td><td>9. continue<\/td><\/tr><tr><td>2. else<\/td><td>10. switch<\/td><\/tr><tr><td>3. elseif\/else if<\/td><td>11. declare<\/td><\/tr><tr><td>4. while<\/td><td>12. return<\/td><\/tr><tr><td>5. do-while<\/td><td>13. include\/include_once<\/td><\/tr><tr><td>6. for<\/td><td>14. require\/require_once<\/td><\/tr><tr><td>7. foreach<\/td><td>15. goto<\/td><\/tr><tr><td>8. break<\/td><td>16. Sintaxis alternativas<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">1. if<\/h3>\n\n\n\n<p>La estructura de control&nbsp;<strong>if<\/strong>&nbsp;permite la ejecuci\u00f3n condicional de fragmentos de c\u00f3digo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nif ($x &gt; $y) {\n    echo \"$x es mayor que $y\";\n}<\/code><\/pre>\n\n\n\n<p>Las sentencias if se pueden incluir unas dentro de otras indefinidamente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. else<\/h3>\n\n\n\n<p>Sirve para ejecutar una sentencia cuando otra no se cumple.&nbsp;<em><strong>else<\/strong><\/em>&nbsp;extiende una sentencia&nbsp;<em><strong>if<\/strong><\/em>, y se ejecuta cuando \u00e9sta es&nbsp;<strong>false<\/strong>. Siguiendo el ejemplo anterior:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nif ($x &gt; $y) {\n    echo \"$x es mayor que $y\";\n} else {\n    echo \"$y es mayor que $x\";\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. elseif\/else if<\/h3>\n\n\n\n<p>Es una combinaci\u00f3n entre&nbsp;<em><strong>if<\/strong><\/em>&nbsp;y&nbsp;<em><strong>else<\/strong><\/em>. Se ejecuta cuando if es&nbsp;<strong>false<\/strong>, pero s\u00f3lo si la expresi\u00f3n condicional del&nbsp;<em><strong>elseif<\/strong><\/em>&nbsp;es&nbsp;<strong>true<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nif ($x &gt; $y) {\n    echo \"$x es mayor que $y\";\n} elseif ($x == $y) {\n    echo \"$x es igual que $y\";\n} else {\n    echo \"$y es mayor que $x\";\n}<\/code><\/pre>\n\n\n\n<p>Puede haber varios&nbsp;<em><strong>elseif<\/strong><\/em>&nbsp;dentro de una sentencia&nbsp;<em><strong>if<\/strong><\/em>&nbsp;(aunque en ese caso suele ser m\u00e1s recomendable usar&nbsp;<em><strong>switch<\/strong><\/em>). No hay diferencias de comportamiento entre&nbsp;<em><strong>elseif<\/strong><\/em>&nbsp;y&nbsp;<em><strong>else if<\/strong><\/em>.<\/p>\n\n\n\n<p><em><strong>elseif<\/strong><\/em>&nbsp;s\u00f3lo se ejecuta si el&nbsp;<em><strong>if<\/strong><\/em>&nbsp;precedente o cualquier&nbsp;<em><strong>elseif<\/strong><\/em>&nbsp;anterior son evaluadas como&nbsp;<strong>false<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. while<\/h3>\n\n\n\n<p>Es el tipo m\u00e1s sencillo de&nbsp;<strong>loop<\/strong>&nbsp;en&nbsp;<strong>PHP<\/strong>. Se ejecutan las sentencias dentro del&nbsp;<em><strong>while<\/strong><\/em>&nbsp;siempre y cuando se eval\u00faen como&nbsp;<strong>true<\/strong>. El valor de la expresi\u00f3n se comprueba cada vez al inicio del&nbsp;<strong>loop<\/strong>, y la ejecuci\u00f3n no se detendr\u00e1 hasta que finalice la&nbsp;<strong>iteraci\u00f3n<\/strong>&nbsp;(cada vez que PHP ejecuta las sentencias en un loop es una iteraci\u00f3n). Si la expresi\u00f3n&nbsp;<em><strong>while<\/strong><\/em>&nbsp;se eval\u00faa como&nbsp;<strong>false<\/strong>, las sentencias no se ejecutar\u00e1n ni siquiera una vez.<\/p>\n\n\n\n<p>Tambi\u00e9n es posible agrupar varias instrucciones&nbsp;<em><strong>while<\/strong><\/em>&nbsp;dentro de una.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n$i = 1;\nwhile($i &lt;= 10){\n    echo $i;\n    $i++;\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5. do-while<\/h3>\n\n\n\n<p>Muy similares a los loops&nbsp;<em><strong>while<\/strong><\/em>, simplemente aqu\u00ed la expresi\u00f3n para el loop se verifica al final en lugar de al principio, esto garantiza que el c\u00f3digo se ejecute por lo menos la primera vez.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n$i = 0;\ndo {\n    echo $i;\n} while ($i &gt; 0);<\/code><\/pre>\n\n\n\n<p>Este loop se ejecutar\u00eda s\u00f3lo una vez, ya que despu\u00e9s no cumple la condici\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6. for<\/h3>\n\n\n\n<p>Los loops&nbsp;<em><strong>for<\/strong><\/em>&nbsp;son los m\u00e1s complejos en PHP.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nfor ($i = 1; $i &lt;= 10; $i++) {\n    echo $i;\n} \/\/ Devuelve 123456789<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Las expresiones o conjunto de expresiones van separadas por punto y coma&nbsp;<strong>;<\/strong>&nbsp;y s\u00f3lo hay 3.<\/li>\n\n\n\n<li>La primera expresi\u00f3n,&nbsp;<strong>$i = 1<\/strong>, se ejecuta una vez incondicionalmente al comienzo del bucle.<\/li>\n\n\n\n<li>La segunda expresi\u00f3n,&nbsp;<strong>$i &lt;= 10<\/strong>, es una&nbsp;<strong>condici\u00f3n<\/strong>, si es true, se ejecutar\u00e1 la tercera expresi\u00f3n.<\/li>\n\n\n\n<li>La tercera expresi\u00f3n,&nbsp;<strong>$i++<\/strong>, es la acci\u00f3n a realizar si se cumple la segunda expresi\u00f3n.<\/li>\n<\/ul>\n\n\n\n<p>Cada una de las expresiones pueden estar&nbsp;<strong>vac\u00edas<\/strong>&nbsp;o contener&nbsp;<strong>m\u00faltiples expresiones<\/strong>, lo que resulta \u00fatil en ciertas ocasiones. Si la expresi\u00f3n 2 est\u00e1 vac\u00eda, el loop ser\u00e1 definido como&nbsp;<strong>true<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/\/ Todos los siguientes ejemplos son v\u00e1lidos y devuelven lo mismo, 123456789\n\/\/ EJEMPLO 1\nfor($i = 1; $i &lt;= 10; $i++) {\n    echo $i;\n}\n\n\/\/ EJEMPLO 2\nfor ($i = 1; ; $i++){\n    if($i &gt; 10) {\n        break;\n    }\n    echo $i;\n}\n\n\/\/ EJEMPLO 3\n$i = 1;\nfor( ; ; ){\n    if($i &gt; 10){\n        break;\n    }\n    echo $i;\n    $i++;\n}\n\n\/\/ EJEMPLO 4\nfor ($i = 1, $j = 0; $i &lt;= 10; $j += $i, print $i, $i++);<\/code><\/pre>\n\n\n\n<p>Dependiendo de donde se coloque el operador&nbsp;<strong>incremento<\/strong>&nbsp;o&nbsp;<strong>decremento<\/strong>, dar\u00e1 un resultado distinto:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for ($i = 1; $i &lt;= 10; print $i++); \/\/ 12345678910\nfor ($i = 1; $i &lt;= 10; print ++$i); \/\/ 234567891011<\/code><\/pre>\n\n\n\n<p>Se pueden hacer&nbsp;<strong>iteraciones por medio de arrays<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$gente = array(\n    array('nombre' =&gt; 'Carlos', 'salt' =&gt; 123),\n    array('nombre' =&gt; 'Maria', 'salt' =&gt; 124));\n\/\/ Numero de gente\n$size = count($gente);\n\/\/ Loop que da un salt de 4 d\u00edgitos aleatorio\nfor ($i=0; $i &lt; $size; ++$i) {\n    $gente&#91;$i]&#91;'salt'] = mt_rand(0000, 9999);\n}\nvar_dump($gente);\n\/*\n* array (size=2)\n  0 =&gt;\n    array (size=2)\n      'nombre' =&gt; string 'Carlos' (length=6)\n      'salt' =&gt; int 2029\n  1 =&gt;\n    array (size=2)\n      'nombre' =&gt; string 'Maria' (length=5)\n      'salt' =&gt; int 9724\n*\/<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">7. foreach<\/h3>\n\n\n\n<p><em><strong>foreach<\/strong><\/em>&nbsp;permite una forma f\u00e1cil de iterar sobre&nbsp;<strong>arrays<\/strong>&nbsp;u&nbsp;<strong>objetos<\/strong>.<\/p>\n\n\n\n<p>Cuando&nbsp;<em><strong>foreach<\/strong><\/em>&nbsp;inicia su ejecuci\u00f3n, el puntero apunta directamente al primer elemento del&nbsp;<strong>array<\/strong>, por lo que no es necesario llamar a la funci\u00f3n&nbsp;<em>reset()<\/em>&nbsp;antes que un&nbsp;<strong>loop<\/strong>&nbsp;<em>foreach<\/em>. Es recomendable no cambiar el puntero dentro del loop.<\/p>\n\n\n\n<p>Se puede iterar de las siguientes dos formas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/\/ Devuelve directamente el value de cada key, comenzando desde el primero\nforeach ($array as $value) {\n    \/\/ Lo que se desee mostrar\n}\n\/\/ Devuelve cada key con cada value, para poder trabajar con cualquiera de los dos\nforeach ($array as $key =&gt; $value){\n    \/\/ Lo que se desee mostrar\n}<\/code><\/pre>\n\n\n\n<p>Se pueden modificar los elementos del array dentro del loop, anteponiendo&nbsp;<strong>&amp;<\/strong>&nbsp;a&nbsp;<em>$value<\/em>&nbsp;(asign\u00e1ndolo por referencia).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n$array = array(1, 2, 3, 4);\nforeach ($array as &amp;$value){\n    $value = $value * 2;\n}\n\/\/ cada valor del array vale ahora : 2, 4, 6, 8\nunset($value);<\/code><\/pre>\n\n\n\n<p>La funci\u00f3n&nbsp;<em>unset()<\/em>&nbsp;elimina la referencia del \u00faltimo elemento, pero el array sigue valiendo 2, 4, 6, 8. Es recomendable hacer&nbsp;<em>unset()<\/em>&nbsp;porque la referencia del&nbsp;<em>$valor<\/em>&nbsp;y el \u00faltimo elemento del array permanecen a\u00fan despu\u00e9s del loop foreach.<\/p>\n\n\n\n<p><a href=\"http:\/\/php.net\/manual\/es\/control-structures.foreach.php\"><em>foreach<\/em><\/a>&nbsp;y&nbsp;<em><a href=\"http:\/\/php.net\/manual\/es\/function.list.php\">list<\/a><\/em>&nbsp;pueden devolver los mismos resultados de la siguiente forma:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n$array = array(\"uno\", \"dos\", \"tres\");\nreset($array);\nwhile (list($clave, $valor) = each($array)){\n    echo \"Clave: $clave; Valor: $valor &lt;\/br&gt;\";\n}\n\nforeach ($array as $clave =&gt; $valor){\n    echo \"Clave: $clave; Valor: $valor &lt;\/br&gt;\";\n}<\/code><\/pre>\n\n\n\n<p>La funci\u00f3n&nbsp;<em>list()<\/em>&nbsp;coge un&nbsp;<em>array<\/em>&nbsp;y lo convierte en&nbsp;<strong>variables<\/strong>&nbsp;individuales.<\/p>\n\n\n\n<p><em>each()<\/em>&nbsp;coge un&nbsp;<em>array<\/em>&nbsp;y devuelve el key y value actuales, es decir, donde est\u00e1 apuntando el cursor en el array. Es necesario hacer un&nbsp;<em><a href=\"http:\/\/php.net\/manual\/es\/function.reset.php\">reset()<\/a><\/em>&nbsp;del&nbsp;<em>array<\/em>&nbsp;para asegurarse que el cursor comienza desde el principio (cosa que no es necesaria con el foreach).<\/p>\n\n\n\n<p>Suele ser m\u00e1s \u00f3ptimo y legible utilizar el&nbsp;<em><strong>foreach<\/strong><\/em>&nbsp;para iterar, aunque ambos se utilizan m\u00e1s o menos con la misma frecuencia.<\/p>\n\n\n\n<p>Con&nbsp;<strong>arrays multidimensionales<\/strong>&nbsp;se puede hacer un&nbsp;<strong>doble foreach<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n$x = array();\n$x&#91;0]&#91;0] = \"a\";\n$x&#91;0]&#91;1] = \"b\";\n$x&#91;1]&#91;0] = \"y\";\n$x&#91;1]&#91;1] = \"z\";\n\nforeach ($x as $primero){\n    foreach ($primero as $segundo){\n        echo \"$segundo\" . \"&lt;\/br&gt;\";\n        }\n    }\n<\/code><\/pre>\n\n\n\n<p>En el ejemplo anterior, si no se hace doble foreach con&nbsp;<em>$x<\/em>&nbsp;y se hace s\u00f3lo un foreach surgir\u00e1 un&nbsp;<em>Notice: Array to string conversion<\/em>.<\/p>\n\n\n\n<p>Desde PHP 5.5 se puede recorrer un&nbsp;<strong>array de arrays<\/strong>&nbsp;y utilizar el segundo array para asignar variables:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n$array = array(\n    array('azul', 'rojo'),\n    array('verde', 'amarillo')\n    );\n\nforeach ($array as list($a, $b)) {\n    echo \"A: $a; B: $b\" . \"&lt;\/br&gt;\";\n}\n\/\/ Devuelve: <\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">8. break<\/h3>\n\n\n\n<p><em><strong>break<\/strong><\/em>&nbsp;termina la ejecuci\u00f3n de las siguientes estructuras:&nbsp;<em><strong>for<\/strong><\/em>,&nbsp;<em><strong>foreach<\/strong><\/em>,&nbsp;<em><strong>while<\/strong><\/em>,&nbsp;<em><strong>do-while<\/strong><\/em>&nbsp;y&nbsp;<em><strong>switch<\/strong><\/em>.<\/p>\n\n\n\n<p>Se puede a\u00f1adir un&nbsp;<strong>argumento num\u00e9rico opcional<\/strong>&nbsp;que indica de cu\u00e1ntas estructuras debe salir. El valor por defecto es 1:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Ejemplo sin valor num\u00e9rico\n$array = array('uno', 'dos', 'parar', 'tres');\nwhile(list(, $valor) = each($array)){\n    if($valor == 'parar'){\n        break;\n    }\n    echo \"$valor&lt;\/br&gt;\";\n}\n\/\/ Ejemplo con valor num\u00e9rico\n$i = 0;\nwhile (++$i){\n    switch($i){\n        case 5:\n            echo \"He llegado a 5 &lt;\/br&gt;\";\n            break 1; \/\/ Aqu\u00ed s\u00f3lo saldr\u00eda del switch\n        case 10:\n            echo \"He llegado a 10 &lt;\/br&gt;\";\n            break 2; \/\/ Sale del switch y del while\n        default:\n            break;\n    }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">9. continue<\/h3>\n\n\n\n<p>Se utiliza&nbsp;<strong>dentro de las estructuras iterativas<\/strong>&nbsp;para&nbsp;<strong>saltar<\/strong>&nbsp;el resto de la iteraci\u00f3n actual del loop y&nbsp;<strong>continuar a la siguiente iteraci\u00f3n<\/strong>&nbsp;para su ejecuci\u00f3n:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nfor ($i=0; $i &lt; 10; $i++) {\n    if($i % 2 == 0)\n        continue;\n    print \"$i \";\n} \/\/ Devuelve 1 3 5 7 9<\/code><\/pre>\n\n\n\n<p>El c\u00f3digo anterior hace que cuando el n\u00famero sea par,&nbsp;<em><strong>continue<\/strong><\/em>&nbsp;se ejecute y no muestre el print de despu\u00e9s, sino que vuelva a empezar con la siguiente iteraci\u00f3n.&nbsp;<em><strong>print<\/strong><\/em>&nbsp;s\u00f3lo se ejecutar\u00e1 cuando&nbsp;<em>$i<\/em>&nbsp;sea impar.<\/p>\n\n\n\n<p>Al igual que con&nbsp;<em><strong>break<\/strong><\/em>, se puede a\u00f1adir un n\u00famero a&nbsp;<em><strong>continue<\/strong><\/em>&nbsp;que indica el n\u00famero de niveles de loops debe saltar:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n$i = 0;\nwhile ($i++ &lt; 5){\n    echo \"Uno &lt;\/br&gt;\";\n    while (1) {\n        echo \"Dos &lt;\/br&gt;\";\n        while (1) {\n            echo \"Tres &lt;\/br&gt;&lt;\/br&gt;\";\n            continue 3;\n        }\n        echo \"Esto no aparece.\";\n    }\n    echo \"Esto tampoco aparece.\";\n}<\/code><\/pre>\n\n\n\n<p>En este ejemplo, cuando llega a&nbsp;<em><strong>continue 3<\/strong><\/em>, comienza de nuevo la iteraci\u00f3n, y se comprueba otra vez la condici\u00f3n ($i++ &lt; 5). Si se pone, por ejemplo,&nbsp;<em><strong>continue 2<\/strong><\/em>, salta al segundo while, cuya condici\u00f3n siempre se cumple, y se produce un&nbsp;<strong>loop infinito<\/strong>&nbsp;que imprime \u00abDos Tres\u00bb continuamente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">10. switch<\/h3>\n\n\n\n<p><em><strong>switch<\/strong><\/em>&nbsp;es como una serie de sentencias&nbsp;<em><strong>if<\/strong><\/em>. Es \u00fatil para comparar una misma&nbsp;<strong>variable o expresi\u00f3n<\/strong>&nbsp;con valores direrentes y ejecutar un c\u00f3digo diferente a otro dependiendo de esos valores.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nswitch ($i) {\n    case \"perro\":\n        echo \"\\$i es un perro\";\n        break;\n    case \"gato\":\n        echo \"\\$i es un gato\";\n        break;\n    case \"avestruz\":\n        echo \"\\$i es un avestruz\";\n        break;\n}<\/code><\/pre>\n\n\n\n<p>Cuando una sentencia&nbsp;<em><strong>case<\/strong><\/em>&nbsp;coincide con el valor de la sentencia&nbsp;<em><strong>switch<\/strong><\/em>, PHP ejecuta el c\u00f3digo dentro del&nbsp;<em>case<\/em>. PHP sigue ejecutando las sentencias hasta el final o hasta que choca con un&nbsp;<em><strong>break<\/strong><\/em>, que entonces finaliza la iteraci\u00f3n. Si se omite&nbsp;<em>break<\/em>, swith ejecutar\u00e1 todos los&nbsp;<em>cases<\/em>&nbsp;restantes cuando encuentra uno que cumpla con la condici\u00f3n:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nswitch ($i) {\n    case 0:\n        echo \"i es igual a 0\";\n    case 1:\n        echo \"i es igual a 1\";\n    case 2:\n        echo \"i es igual a 2\";\n}<\/code><\/pre>\n\n\n\n<p>En el ejemplo anterior, si se define a&nbsp;<em>$i<\/em>&nbsp;como 0, se mostrar\u00e1n todos los&nbsp;<em><strong>echo<\/strong><\/em>&nbsp;restantes porque no hay ning\u00fan&nbsp;<em><strong>break<\/strong><\/em>. Si se define a&nbsp;<em>$i<\/em>&nbsp;como 1, se mostrar\u00e1n los&nbsp;<em>echo<\/em>&nbsp;del&nbsp;<em>case<\/em>&nbsp;1 y&nbsp;<em>case<\/em>&nbsp;2. Si se define a&nbsp;<em>$i<\/em>&nbsp;como 2, s\u00f3lo se mostrar\u00e1 el&nbsp;<em>case<\/em>&nbsp;2.<\/p>\n\n\n\n<p>Con&nbsp;<em><strong>switch<\/strong><\/em>&nbsp;la condici\u00f3n s\u00f3lo se eval\u00faa una vez, y su valor es comparado con cada uno de los&nbsp;<em>case<\/em>, a diferencia de lo que ocurre con&nbsp;<em><strong>elseif<\/strong><\/em>, que la condi\u00f3n se va evaluando continuamente con el loop.<\/p>\n\n\n\n<p><em><strong>case<\/strong><\/em>&nbsp;puede no ejecutar ning\u00fan c\u00f3digo, pero hace que se activen los cases posteriores hasta que se encuentre con un break:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nswitch ($i) {\ncase 0:\ncase 1:\ncase 2:\n    echo \"i es menor que 3 no negativo\";\n    break;\ncase 3:\n    echo \"i es 3\";\n}<\/code><\/pre>\n\n\n\n<p>En caso de que no haya ning\u00fan&nbsp;<em>case<\/em>&nbsp;v\u00e1lido, puede utilizarse&nbsp;<em><strong>default<\/strong><\/em>, para ejecutar algo cuando no se cumplen los case:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nswitch($i) {\n    case 0:\n        echo \"i es igual a 0\";\n        break;\n    case 1:\n        echo \"i es igual a 1\";\n        break;\n    default:\n        echo \"i no es ni 0 ni 1\";\n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>En los cases s\u00f3lo se permiten&nbsp;<strong>tipos simples<\/strong>:&nbsp;<em>int<\/em>,&nbsp;<em>float<\/em>&nbsp;y&nbsp;<em>string<\/em>. Los&nbsp;<strong>arrays<\/strong>&nbsp;y&nbsp;<strong>objetos<\/strong>&nbsp;pueden utilizarse si se muestran como un tipo simple.<\/li>\n\n\n\n<li>Es posible escribir punto y coma \u00ab;\u00bb en lugar de dos puntos \u00ab:\u00bb despu\u00e9s de un&nbsp;<em>case<\/em>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">11. declare<\/h3>\n\n\n\n<p><em><strong>declare<\/strong><\/em>&nbsp;sirve para fijar directivas de ejecuci\u00f3n para un bloque de c\u00f3digo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>declare (directive)\n    statement<\/code><\/pre>\n\n\n\n<p>La secci\u00f3n directive permite configurar el comportamiento de declare. S\u00f3lo hay dos directivas:&nbsp;<em><strong>ticks<\/strong><\/em>&nbsp;y&nbsp;<em><strong>encoding<\/strong><\/em>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No se pueden emplear variables ni constantes para las directivas.<\/li>\n<\/ul>\n\n\n\n<p>Se pueden usar corchetes para fijar el statement o si no se aplican afecta a todo el archivo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\ndeclare(ticks=1){\n   \/\/ C\u00f3digo afectado\n}\n\ndeclare(ticks=1);\n\/\/ C\u00f3digo afectado\n<\/code><\/pre>\n\n\n\n<p>En este segundo ejemplo si el archivo con el declare ha sido inclu\u00eddo, no afectar\u00e1 al archivo padre.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Ticks<\/strong><\/h4>\n\n\n\n<p>La ejecuci\u00f3n de un&nbsp;<strong>script PHP<\/strong>&nbsp;puede representarse como una ejecuci\u00f3n de muchas sentencias. La mayor\u00eda de las sentencias provocan un&nbsp;<strong>tick<\/strong>&nbsp;(aunque no todas). Por ejemplo en el siguiente ejemplo habr\u00eda 3 ticks:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n$x = 1;\n$y = 2;\n$z = 3;<\/code><\/pre>\n\n\n\n<p>Con&nbsp;<strong>declare(ticks=N)<\/strong>&nbsp;y _<a href=\"http:\/\/php.net\/manual\/es\/function.register-tick-function.php\">register_tick_function()<\/a>_ se puede ejecutar c\u00f3digo entre los&nbsp;<strong>ticks<\/strong>. La funci\u00f3n _register_tick<em>function<\/em>&nbsp;especifica la funci\u00f3n a llamar cuando un tick ocurre. declare establece cuantos ticks han de pasar hasta que un evento tick se ejecuta.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Con declare(ticks=1) y _register_tick<em>function(&#8216;miFuncion&#8217;)<\/em>; llamar\u00e1 a&nbsp;<em>miFuncion()<\/em>&nbsp;despu\u00e9s de cada tick.<\/li>\n\n\n\n<li>Con declare(ticks=3),&nbsp;<em>miFuncion()<\/em>&nbsp;se ejecutar\u00e1 cada 3 ticks.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nfunction handler(){\n    echo \"Hola\";\n}\n\nregister_tick_function(\"handler\");\n$i = 0;\ndeclare(ticks = 3) {\n    while($i &lt; 9)\n        echo ++$i;\n} \/\/ Devuelve 123Hola456Hola789Hola<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Encoding<\/strong><\/h4>\n\n\n\n<p>La codificaci\u00f3n puede ser especificada para cada script con encoding:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\ndeclare(encoding='ISO-8859-1');\n\/\/ C\u00f3digo a ejecutar<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">12. return<\/h3>\n\n\n\n<p><em><strong>return<\/strong><\/em>&nbsp;devuelve el control del programa al m\u00f3dulo que lo invoca. La ejecuci\u00f3n vuelve a la siguiente declaraci\u00f3n despu\u00e9s del m\u00f3dulo que lo invoca.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si se usa en una&nbsp;<strong>funci\u00f3n<\/strong>, return hace que la funci\u00f3n termine, devolviendo los argumentos que le sigan como valor de la llamada a la funci\u00f3n.<\/li>\n\n\n\n<li>Si se llama&nbsp;<strong>globalmente<\/strong>, finaliza la ejecuci\u00f3n del script actual.<\/li>\n\n\n\n<li>Si el archivo actual fue incluido o requerido, el control regresa al archivo que llama al&nbsp;<em><strong>include<\/strong><\/em>&nbsp;o&nbsp;<em><strong>require<\/strong><\/em>.<\/li>\n\n\n\n<li>Si el archivo est\u00e1 inclu\u00eddo con&nbsp;<em><strong>include<\/strong><\/em>, los argumentos del return se devolver\u00e1n como valor de la llamada&nbsp;<em><strong>include<\/strong><\/em>.<\/li>\n\n\n\n<li>Si return se usa en el&nbsp;<strong>archivo principal del script<\/strong>, termina la ejecuci\u00f3n del script.<\/li>\n\n\n\n<li>Tambi\u00e9n termina la ejecuci\u00f3n de una sentencia&nbsp;<em><strong>eval()<\/strong><\/em>.<\/li>\n<\/ul>\n\n\n\n<p>Es recomendable&nbsp;<strong>no<\/strong>&nbsp;usar par\u00e9ntesis despu\u00e9s de return.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">13. include\/include_once<\/h3>\n\n\n\n<p><em><strong>include<\/strong><\/em>&nbsp;incluye y ejecuta un archivo.<\/p>\n\n\n\n<p>Los archivos se incluyen en base a la&nbsp;<strong>ruta de acceso dada<\/strong>, y si no se proporciona ninguna, se utiliza el&nbsp;<a href=\"http:\/\/php.net\/manual\/es\/ini.core.php#ini.include-path\">include_path<\/a>. Si el archivo tampoco se encuentra en el&nbsp;<strong>include_path<\/strong>&nbsp;se mirar\u00e1 en el&nbsp;<strong>propio directorio<\/strong>&nbsp;desde donde se hace la llamada, antes de devolver un&nbsp;<strong>mensaje warning<\/strong>. Es en el tipo de mensaje donde difiere con require, que devuelve un&nbsp;<strong>error fatal<\/strong>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si se define una ruta absoluta (en Linux comenzando por \/) o relativa al directorio actual (comenzando con . o ..) el&nbsp;<strong>include_path<\/strong>&nbsp;ser\u00e1 ignorado.<\/li>\n<\/ul>\n\n\n\n<p>Las variables del archivo del include estar\u00e1n disponibles en el archivo desde el que se solicita:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/\/ archivo1.php\n$color = 'azul';\n\/\/ archivo2.php\necho $color; \/\/ Devuelve un Notice: Undefined variable: color\ninclude 'archivo1.php';\necho $color; \/\/ Devuelve azul<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si la inclusi\u00f3n se hace dentro de una&nbsp;<strong>funci\u00f3n<\/strong>, el contenido del archivo es como si estuviera dentro de esa funci\u00f3n, por tanto su contenido tendr\u00e1 el mismo \u00e1mbito.<\/li>\n\n\n\n<li>Cuando se incluye un archivo, el int\u00e9rprete abandona el modo PHP e ingresa al modo HTML al comienzo del archivo inclu\u00eddo, y se reanuda de nuevo al final. Es por ello que cualquier c\u00f3digo que tenga que ser interpretado como PHP debe incluir las etiquetas v\u00e1lidas de comienzo y terminaci\u00f3n (<strong>&lt;?php ?&gt;<\/strong>).<\/li>\n<\/ul>\n\n\n\n<p>Si est\u00e1n activadas las&nbsp;<strong>envolturas URL include<\/strong>, se puede incluir un archivo a trav\u00e9s de una URL (mediante HTTP u&nbsp;<a href=\"http:\/\/php.net\/manual\/es\/wrappers.php\">otro protocolo<\/a>). Si el servidor objetivo interpreta el archivo como PHP, las variables se pueden pasar al archivo usando un string de petici\u00f3n como con HTTP GET. El resultado no es lo mismo que en local, pues el archivo se ejecuta en el servidor remoto y el resultado se incluye en el local.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\ninclude 'http:\/\/www.ejemplo.com\/archivo.php?var=1';\n$var = 1;<\/code><\/pre>\n\n\n\n<p>Por&nbsp;<strong>seguridad<\/strong>&nbsp;es mejor que el archivo remoto se procese en el servidor remoto y se reciba s\u00f3lo la salida, con&nbsp;<a href=\"http:\/\/php.net\/manual\/es\/function.readfile.php\"><em>readfile()<\/em><\/a>.<\/p>\n\n\n\n<p>Es posible devolver valores desde los archivos include mediante&nbsp;<strong>return<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ archivo1.php con return\n&lt;?php\n$var = 'PHP';\nreturn $bar;\n?&gt;\n\/\/ archivo2.php sin return\n&lt;?php\n$var = 'PHP';\n?&gt;\n\/\/archivo3.php\n&lt;?php\n$foo = include 'archivo1.php';\necho $foo; \/\/ devuelve PHP\n\n$bar = include 'archivo2.php';\necho $bar; \/\/ Devuelve 1 porque el include ha sido exitoso, pero no tiene valor return. Si no hubiera funcionado devolver\u00eda false y un E_WARNING.<\/code><\/pre>\n\n\n\n<p>Tambi\u00e9n se pueden incluir archivos PHP en variables con un buffering de salida:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n$string = get_include_contents('archivo.php');\n\nfunction get_include_contents($filename) {\n    if(is_file($filename)) {\n        ob_start();\n        include $filename;\n        return ob_get_clean();\n    }\n    return false;\n}<\/code><\/pre>\n\n\n\n<p>Para incluir archivos autom\u00e1ticamente en scripts ver&nbsp;<a href=\"http:\/\/php.net\/manual\/es\/ini.core.php#ini.auto-prepend-file\">auto_preprend_file<\/a>&nbsp;y&nbsp;<a href=\"http:\/\/php.net\/manual\/es\/ini.core.php#ini.auto-append-file\">auto_append_file<\/a>&nbsp;de&nbsp;<em>php.ini<\/em>.<\/p>\n\n\n\n<p>_<strong>include_once<\/strong>_ incluye el archivo especificado s\u00f3lo una vez, si se incluye m\u00e1s veces tan s\u00f3lo devuelve true. Es \u00fatil en casos donde el mismo fichero se podr\u00eda incluir y evaluar m\u00e1s de una vez, para evitar as\u00ed redefinir funciones o reasignar valores a variables.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">14. require\/require_once<\/h3>\n\n\n\n<p><em><strong>require<\/strong><\/em>&nbsp;hace lo mismo que&nbsp;<em><strong>include<\/strong><\/em>&nbsp;pero en caso de fallar devuelve un&nbsp;<strong>error fatal<\/strong>&nbsp;de nivel&nbsp;<strong>E_COMPILE_ERROR<\/strong>, por lo que no puede continuar el script.&nbsp;<em>include<\/em>&nbsp;s\u00f3lo emite un&nbsp;<strong>E_WARNING<\/strong>&nbsp;que permite continuar el script.<\/p>\n\n\n\n<p>_<strong>require_once<\/strong><em>&nbsp;es igual que&nbsp;<\/em><strong>require<\/strong>_ pero PHP comprobar\u00e1 si el archivo ya ha sido inclu\u00eddo, y si es as\u00ed no se incluir\u00e1 otra vez.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">15. goto<\/h3>\n\n\n\n<p><em><strong>goto<\/strong><\/em>&nbsp;se utiliza para saltar a otra secci\u00f3n del script. La&nbsp;<strong>etiqueta de destino<\/strong>&nbsp;debe estar dentro del mismo fichero y \u00e1mbito.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\ngoto x;\necho 'Hola!';\n\nx:\necho 'Adios!';  \/\/ s\u00f3lo se imprimir\u00e1 Adios!<\/code><\/pre>\n\n\n\n<p>Tambi\u00e9n puede utilizarse en un&nbsp;<strong>loop<\/strong>&nbsp;en lugar de&nbsp;<em><strong>break<\/strong><\/em>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nfor($i=0, $j=50; $i&lt;100; $i++) {\n    while($j--) {\n        if($j==17) goto end;\n        }\n    }\necho \"i = $i\";\nend:\necho 'j lleg\u00f3 a 17';<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">16. Sintaxis alternativas<\/h3>\n\n\n\n<p>PHP ofrece una&nbsp;<strong>sintaxis alternativa<\/strong>&nbsp;para&nbsp;<em>if<\/em>,&nbsp;<em>while<\/em>,&nbsp;<em>for<\/em>,&nbsp;<em>foreach<\/em>&nbsp;y&nbsp;<em>switch<\/em>. Se cambia el corchete de apertura por dos puntos \u00ab:\u00bb y el corchete de cierre por&nbsp;<em><strong>endif<\/strong><\/em>,&nbsp;<em><strong>endwhile<\/strong><\/em>,&nbsp;<em><strong>endfor<\/strong><\/em>,&nbsp;<em><strong>endforeach<\/strong><\/em>, o&nbsp;<em><strong>endswitch<\/strong><\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php if ($x == 3): ?&gt;\nX es 3\n&lt;?php endif; ?&gt;<\/code><\/pre>\n\n\n\n<p>\u00abX es 3\u00bb es un bloque HTML que se mostrar\u00eda s\u00f3lo si se cumple la condici\u00f3n.<\/p>\n\n\n\n<p>Con&nbsp;<strong>else<\/strong>&nbsp;y&nbsp;<strong>elseif<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\nif($x == 3):\n    echo \"x igual a 3\";\nelseif ($x == 4):\n    echo \"x igual a 4\";\nelse:\n    echo \"x no es ni 3 ni 4\";\nendif;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Funciones<\/h2>\n\n\n\n<p>Cuando utilizamos en multiples ocasiones un mismo fragmento de c\u00f3digo debemos usar&nbsp;<strong>funciones<\/strong>&nbsp;(functions). Una herramienta para encapsular y ejecutar un mismo c\u00f3digo. Entre sus ventajas veremos que nos ayuda a que los ficheros tengan un menor tama\u00f1o y sea m\u00e1s f\u00e1cil de mantener.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>\/\/ Declarar<\/em>\n<strong>function<\/strong> <strong>nombre_de_funcion<\/strong>(tipo_de_parametro $parametros): tipo_return\n{\n    ...\n    <strong>return<\/strong> ...;\n}\n\n<em>\/\/ Llamar<\/em>\nnombre_de_funcion($parametros);\n<\/code><\/pre>\n\n\n\n<p>En el ejemplo inferior tenemos una funci\u00f3n cl\u00e1sica, con sint\u00e1xis moderna, donde es declarada y ejecutada seguido de un&nbsp;<code>echo<\/code>&nbsp;para ver el resultado. Lo \u00fanico que hace es devolver un texto cuando es llamado.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>\/**\n * Funci\u00f3n con educaci\u00f3n\n * @return {string}\n *\/<\/em>\n<strong>function<\/strong> <strong>saludar_ahora<\/strong>(): <strong>string<\/strong>\n{\n    <strong>return<\/strong> 'Hola, soy una funci\u00f3n';\n}\n<strong>echo<\/strong> saludar_ahora();\n<em>\/\/ Hola, soy una funci\u00f3n<\/em>\n<\/code><\/pre>\n\n\n\n<p>La receta par hacer una funci\u00f3n rica y con fundamento:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Las 4 primeras l\u00edneas es el formato de comentarios. Una funci\u00f3n, por mucha prisa que tengas, debe estar comentada con el formato del ejemplo.<\/li>\n\n\n\n<li>La palabra&nbsp;<code>function<\/code>&nbsp;esta reservada. A continuaci\u00f3n el nombre, que debe estar en min\u00fasculas con guiones bajos en lugar de espacios. Despu\u00e9s unos par\u00e9ntesis con los argumentos. Si no tiene, se dejan vac\u00edos pero siempre presentes. Luego dos puntos. Por \u00faltimo el tipo de valor resultante. M\u00e1s abajo te he dejado una tabla con&nbsp;<a href=\"https:\/\/programadorwebvalencia.com\/cursos\/php\/funciones\/#tipos-admitidos\">tipos admitidos<\/a>.<\/li>\n\n\n\n<li>Llaves para envolver tu c\u00f3digo&nbsp;<code>{}<\/code>.<\/li>\n\n\n\n<li>Y dentro la palabra reservada&nbsp;<code>return<\/code>&nbsp;seguido del valor a devolver.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"par\u00e1metros\">Par\u00e1metros<\/h2>\n\n\n\n<p>Nuestras funciones ser\u00e1n m\u00e1s interesantes si les damos algunos par\u00e1metros. Al darle variables podemos usar siempre el mismo c\u00f3digo pero con algunas variaciones.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>\/**\n * Corta un texto a 10 letras y a\u00f1ade puntos suspensivos al final\n * @param {string} $text - Texto a tratar\n * @return {string}\n *\/<\/em>\n<strong>function<\/strong> <strong>resumen<\/strong>(<strong>string<\/strong> $text): <strong>string<\/strong>\n{\n    <strong>return<\/strong> substr($text, 0, 20) . '...';\n}\n\n<strong>echo<\/strong> resumen('Cuanto te vi me enamor\u00e9 y tu sonre\u00edste porque lo sab\u00edas');\n<strong>echo<\/strong> resumen('La vida es una historia contada por un idiota, una historia llena de estruendo y furia, que nada significa');\n<em>\/\/ Cuanto te vi me enam...<\/em>\n<em>\/\/ La vida es una histo...<\/em>\n<\/code><\/pre>\n\n\n\n<p>Si no se cumple los tipos en&nbsp;<code>PHP 5<\/code>&nbsp;produce un error que para la ejecuci\u00f3n. En cambio, en&nbsp;<code>PHP 7<\/code>, se lanza una excepci\u00f3n&nbsp;<code>TypeError<\/code>&nbsp;pero continua.<\/p>\n\n\n\n<p>Nuestros par\u00e1metros de entrada pueden tener un&nbsp;<strong>valor por defecto<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>\/**\n * Saluda a una persona\n * @param {string} - Nombre\n * @return {string}\n *\/<\/em>\n<strong>function<\/strong> <strong>saludar<\/strong>(<strong>string<\/strong> $nombre = 'An\u00f3nimo'): <strong>string<\/strong>\n{\n    <strong>return<\/strong> 'Hola, persona llamada ' . $nombre .'. Por lo que veo tu nombre mide ' . strlen($nombre) . ' car\u00e1cteres.';\n}\n<strong>echo<\/strong> saludar();\n<em>\/\/ Hola, persona llamada An\u00f3nimo. Por lo que veo tu nombre mide 8 car\u00e1cteres.<\/em>\n<strong>echo<\/strong> saludar('Picasso');\n<em>\/\/ Hola, persona llamada Picasso. Por lo que veo tu nombre mide 7 car\u00e1cteres.<\/em>\n<\/code><\/pre>\n\n\n\n<p>Y, por supuesto, podemos a\u00f1adir&nbsp;<strong>varios par\u00e1metros<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>\/**\n * Saluda a una persona\n * @param {string} - Nombre\n * @param {string} - Profesi\u00f3n\n * @return {string}\n *\/<\/em>\n<strong>function<\/strong> <strong>saludar<\/strong>(<strong>string<\/strong> $nombre = 'An\u00f3nimo', <strong>string<\/strong> $profesion = 'ninguna'): <strong>string<\/strong>\n{\n    <strong>return<\/strong> 'Hola, persona llamada ' . $nombre .'. Por lo que veo tu nombre mide ' . strlen($nombre) . ' car\u00e1cteres. De profesi\u00f3n ' . $profesion . '.';\n}\n<strong>echo<\/strong> saludar();\n<em>\/\/ Hola, persona llamada An\u00f3nimo. Por lo que veo tu nombre mide 8 car\u00e1cteres. De profesi\u00f3n ninguna.<\/em>\n<strong>echo<\/strong> saludar('Espartaco');\n<em>\/\/ Hola, persona llamada Espartaco. Por lo que veo tu nombre mide 9 car\u00e1cteres. De profesi\u00f3n ninguna.<\/em>\n<strong>echo<\/strong> saludar('Picasso', 'pintor');\n<em>\/\/ Hola, persona llamada Picasso. Por lo que veo tu nombre mide 7 car\u00e1cteres. De profesi\u00f3n pintor.<\/em>\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tipos-admitidos\">Tipos admitidos<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Tipo<\/th><th>Descripci\u00f3n<\/th><th>Versi\u00f3n m\u00ednima<\/th><\/tr><\/thead><tbody><tr><td>string<\/td><td>El par\u00e1metro debe ser un string.<\/td><td>PHP 7.0.0<\/td><\/tr><tr><td>int<\/td><td>El par\u00e1metro debe ser un valor de tipo integer.<\/td><td>PHP 7.0.0<\/td><\/tr><tr><td>float<\/td><td>El par\u00e1metro debe ser un n\u00famero de tipo float.<\/td><td>PHP 7.0.0<\/td><\/tr><tr><td>bool<\/td><td>El par\u00e1metro debe ser un valor de tipo boolean.<\/td><td>PHP 7.0.0<\/td><\/tr><tr><td>array<\/td><td>El par\u00e1metro debe ser un array.<\/td><td>PHP 5.1.0<\/td><\/tr><tr><td>callable<\/td><td>El par\u00e1metro debe ser un callable v\u00e1lido.<\/td><td>PHP 5.4.0<\/td><\/tr><tr><td>self<\/td><td>El par\u00e1metro debe ser una instanceof de la misma clase donde est\u00e1 definido el m\u00e9todo. Esto solamente se puede utilizar en clases y m\u00e9todos de instancia.<\/td><td>PHP 5.0.0<\/td><\/tr><tr><td>nombre de clase\/interfaz<\/td><td>El par\u00e1metro debe ser una instanceof del nombre de la clase o interfaz dada.<\/td><td>PHP 5.0.0<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><a href=\"http:\/\/php.net\/manual\/es\/functions.arguments.php\">M\u00e1s informaci\u00f3n<\/a><\/p>\n\n\n\n<p>De forma autom\u00e1tica PHP arreglar\u00e1 las incompatibilidades de tipos.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>function<\/strong> <strong>incrementar<\/strong>(<strong>int<\/strong> $num): <strong>int<\/strong>\n{\n    <strong>return<\/strong> $num + 1;\n}\n\n<strong>echo<\/strong> incrementar(4.5);\n<em>\/\/ 5<\/em>\n<\/code><\/pre>\n\n\n\n<p>Pero si quieres ser estricto deber\u00e1s desactivar esta ayuda. En otras palabras, que si encuentra alg\u00fan problema de tipos muestre un error y no aplique una m\u00e1gica soluci\u00f3n.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>declare<\/strong>(strict_types=1);\n\n<strong>function<\/strong> <strong>incrementar<\/strong>(<strong>int<\/strong> $num): <strong>int<\/strong>\n{\n    <strong>return<\/strong> $num + 1;\n}\n\n<strong>echo<\/strong> incrementar(4.5);\n<em>\/\/ PHP Fatal error:  Uncaught TypeError: Argument 1 passed to incrementar() must be of the type int, float given<\/em>\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"return-con-tipos-alternativos\">Return con tipos alternativos<\/h2>\n\n\n\n<p>A partir de la versi\u00f3n 7.1 de PHP disponemos de la posibilidad de indicar si un&nbsp;<code>return<\/code>&nbsp;devuelve un tipo concreto o un&nbsp;<code>null<\/code>. Para ello solo habr\u00e1 que a\u00f1adir un interrogante en su inicio.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>function<\/strong> <strong>nombre<\/strong>(): <strong>?string<\/strong>\n{\n \n}\n<\/code><\/pre>\n\n\n\n<p>En el siguiente ejemplo podremos devolver un&nbsp;<code>string<\/code>&nbsp;o un&nbsp;<code>null<\/code>. Dependiendo de si el ganador esta entre los 3 primeros o no.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>\/**\n * M\u00e9todo que indica el tipo de metal que debe tener una medalla a partir del resultado\n * @param {int} $posicion - Posici\u00f3n\n * @return {string|null} - Tipo de metal\n *\/<\/em>\n<strong>function<\/strong> <strong>tipoDeMedalla<\/strong>(<strong>int<\/strong> $posicion): <strong>?string<\/strong>\n{\n    <strong>switch<\/strong> ($posicion) {\n        <strong>case<\/strong> 1:\n            <strong>return<\/strong> 'Oro';\n        <strong>case<\/strong> 2:\n            <strong>return<\/strong> 'Plata';\n        <strong>case<\/strong> 3:\n            <strong>return<\/strong> 'Bronce';\n        <strong>default<\/strong>:\n            <strong>return<\/strong> <strong>null<\/strong>;\n    }\n}\n\n<strong>echo<\/strong> tipoDeMedalla(2);\n<em>\/\/ Plata<\/em>\n\n<strong>echo<\/strong> tipoDeMedalla(34);\n<em>\/\/ null<\/em>\n<\/code><\/pre>\n\n\n\n<p>Tal vez fue a\u00f1adido esta caracter\u00edstica por lo pr\u00e1ctico que resulta al realizar testing.<\/p>\n\n\n\n<p>Y de la versi\u00f3n PHP 8 se enriquece m\u00e1s las posibilidades ya que es posible indicar 2 tipos diferentes.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>function<\/strong> <strong>nombre<\/strong>(): <strong>int<\/strong>|<strong>string<\/strong>\n{\n \n}\n<\/code><\/pre>\n\n\n\n<p>Nos puede ayudar en casos como, por ejemplo, dar un resultado alternativo o de seguridad.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>\/**\n * M\u00e9todo que duplica un n\u00famero en positivo\n * @param {int} $numero - N\u00famero a duplicar\n * @return {float|string} - Resultado o mensaje de ayuda\n *\/<\/em>\n<strong>function<\/strong> <strong>duplicarPositivo<\/strong>(<strong>float<\/strong> $numero): <strong>float<\/strong>|<strong>string<\/strong>\n{\n    <strong>if<\/strong> ($numero &gt; 0) {\n        <strong>return<\/strong> $numero * 2;\n    } <strong>else<\/strong> {\n        <strong>return<\/strong> 'No puedes usar n\u00famero en negativo o cero';\n    }\n}\n\n<strong>echo<\/strong> duplicarPositivo(12.1);\n<em>\/\/ 24.2<\/em>\n\n<strong>echo<\/strong> duplicarPositivo(-45);\n<em>\/\/ 'No puedes usar n\u00famero en negativo o cero'<\/em>\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"an\u00f3nimas\">An\u00f3nimas<\/h2>\n\n\n\n<p>Las funciones an\u00f3nimas son cerradas y pueden ser declaradas sin ning\u00fan nombre. Son obligatorias cuando tengamos que pasar una funci\u00f3n como un par\u00e1metro de otra.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>function<\/strong> () {\n    <strong>return<\/strong> 'Soy an\u00f3nima';\n}\n<\/code><\/pre>\n\n\n\n<p>En el siguiente ejemplo incrementamos en 1 cada n\u00famero del&nbsp;<code>array<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$numeros = &#91;10, 20, 30, 40];\n$numerosIncrementados = array_map(<strong>function<\/strong> ($numero) {\n    <strong>return<\/strong> $numero + 1;\n}, $numeros);\n\nvar_dump($numerosIncrementados);\n\n<em>\/*\narray(4) {\n  &#91;0]=&gt;\n  int(11)\n  &#91;1]=&gt;\n  int(21)\n  &#91;2]=&gt;\n  int(31)\n  &#91;3]=&gt;\n  int(41)\n}\n*\/<\/em>\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"usar-variables-externas\">Usar variables externas<\/h2>\n\n\n\n<p>Si vas a usar variables que est\u00e1n presentes en tu c\u00f3digo, puedes enriquecer el contenido de la funci\u00f3n usando&nbsp;<code>use<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$tienda = 'pescader\u00eda';\n\n<strong>function<\/strong> () use ($tienda) {\n    <strong>return<\/strong> \"Estoy en la $tienda\";\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"paradigma-funcional\">Paradigma Funcional<\/h2>\n\n\n\n<p>Las funciones esenciales para iterar y gestionar un&nbsp;<code>array<\/code>&nbsp;son:&nbsp;<code>array_walk<\/code>,&nbsp;<code>array_filter<\/code>,&nbsp;<code>array_map<\/code>&nbsp;y&nbsp;<code>array_reduce<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"array_walk-iterar\">array_walk (Iterar)<\/h3>\n\n\n\n<p>Recorre un&nbsp;<code>array<\/code>, similar a un&nbsp;<code>foreach<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>array_walk({<strong>array<\/strong>}, {funci\u00f3n});\n<\/code><\/pre>\n\n\n\n<p>En este ejemplo vamos a imprimir todas las ciudades.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>&lt;?php<\/strong>\n\n<em>\/\/ Diccionario<\/em>\n$apartamentos = &#91;\n    &#91;\n        'precio\/noche' =&gt; 40,\n        'ciudad' =&gt; 'Valencia',\n        'wifi' =&gt; <strong>True<\/strong>,\n        'pagina web' =&gt; 'https:\/\/hotel.com'\n    ],\n    &#91;\n        'precio\/noche' =&gt; 87,\n        'ciudad' =&gt; 'Calpe',\n        'wifi' =&gt; <strong>True<\/strong>,\n        'pagina web' =&gt; 'https:\/\/calpe.com'\n    ],\n    &#91;\n        'precio\/noche' =&gt; 67,\n        'ciudad' =&gt; 'Valencia',\n        'wifi' =&gt; <strong>False<\/strong>,\n        'pagina web' =&gt; 'https:\/\/denia.com'\n    ],\n    &#91;\n        'precio\/noche' =&gt; 105,\n        'ciudad' =&gt; 'Benidorm',\n        'wifi' =&gt; <strong>False<\/strong>,\n        'pagina web' =&gt; 'https:\/\/benidorm.com'\n    ]\n];\n\narray_walk($apartamentos, <strong>function<\/strong> ($apartamento, $posicion) {\n    <strong>echo<\/strong> $apartamento&#91;'ciudad'] . <strong>PHP_EOL<\/strong>;\n});\n\n<em>\/*\nValencia\nCalpe\nValencia\nBenidorm\n*\/<\/em>\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"array_filter-filtrar\">array_filter (filtrar)<\/h3>\n\n\n\n<p>Obtenemos un&nbsp;<code>array<\/code>&nbsp;a otro m\u00e1s peque\u00f1o.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>array_filter({<strong>array<\/strong>}, {funci\u00f3n});\n<\/code><\/pre>\n\n\n\n<p>En este ejemplo filtraremos&nbsp;<code>$apartamentos<\/code>&nbsp;para quedarnos con los que est\u00e1n en Valencia.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>&lt;?php<\/strong>\n\n<em>\/\/ Diccionario<\/em>\n$apartamentos = &#91;\n    &#91;\n        'precio\/noche' =&gt; 40,\n        'ciudad' =&gt; 'Valencia',\n        'wifi' =&gt; <strong>True<\/strong>,\n        'pagina web' =&gt; 'https:\/\/hotel.com'\n    ],\n    &#91;\n        'precio\/noche' =&gt; 87,\n        'ciudad' =&gt; 'Calpe',\n        'wifi' =&gt; <strong>True<\/strong>,\n        'pagina web' =&gt; 'https:\/\/calpe.com'\n    ],\n    &#91;\n        'precio\/noche' =&gt; 67,\n        'ciudad' =&gt; 'Valencia',\n        'wifi' =&gt; <strong>False<\/strong>,\n        'pagina web' =&gt; 'https:\/\/denia.com'\n    ],\n    &#91;\n        'precio\/noche' =&gt; 105,\n        'ciudad' =&gt; 'Benidorm',\n        'wifi' =&gt; <strong>False<\/strong>,\n        'pagina web' =&gt; 'https:\/\/benidorm.com'\n    ]\n];\n\n\n$todosLosApartamentosValencia = array_filter($apartamentos, <strong>function<\/strong> ($apartamento) {\n    <strong>return<\/strong> $apartamento&#91;'ciudad'] === 'Valencia';\n});\n\nvar_dump($todosLosApartamentosValencia);\n\n<em>\/*\narray(2) {                                                                  \n  &#91;0]=&gt;                                                                     \n  array(4) {                                                                \n    &#91;\"precio\/noche\"]=&gt;   \n    int(40)\n    &#91;\"ciudad\"]=&gt;\n    string(8) \"Valencia\"\n    &#91;\"wifi\"]=&gt;\n    bool(true)\n    &#91;\"pagina web\"]=&gt;\n    string(17) \"https:\/\/hotel.com\"\n  }\n  &#91;2]=&gt;\n  array(4) {\n    &#91;\"precio\/noche\"]=&gt;\n    int(67)\n    &#91;\"ciudad\"]=&gt;\n    string(8) \"Valencia\"\n    &#91;\"wifi\"]=&gt;\n    bool(false)\n    &#91;\"pagina web\"]=&gt;\n    string(17) \"https:\/\/denia.com\"\n  }\n}\n*\/<\/em>\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"array_map-modificar\">array_map (modificar)<\/h3>\n\n\n\n<p>Transforma el contenido de un&nbsp;<code>array<\/code>&nbsp;pero mantiene el n\u00famero de elementos.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>array_map({funci\u00f3n}, {<strong>array<\/strong>});\n<\/code><\/pre>\n\n\n\n<p>En este ejemplo vamos a reducir el precio por noche en 1.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>&lt;?php<\/strong>\n\n<em>\/\/ Diccionario<\/em>\n$apartamentos = &#91;\n    &#91;\n        'precio\/noche' =&gt; 40,\n        'ciudad' =&gt; 'Valencia',\n        'wifi' =&gt; <strong>True<\/strong>,\n        'pagina web' =&gt; 'https:\/\/hotel.com'\n    ],\n    &#91;\n        'precio\/noche' =&gt; 87,\n        'ciudad' =&gt; 'Calpe',\n        'wifi' =&gt; <strong>True<\/strong>,\n        'pagina web' =&gt; 'https:\/\/calpe.com'\n    ],\n    &#91;\n        'precio\/noche' =&gt; 67,\n        'ciudad' =&gt; 'Valencia',\n        'wifi' =&gt; <strong>False<\/strong>,\n        'pagina web' =&gt; 'https:\/\/denia.com'\n    ],\n    &#91;\n        'precio\/noche' =&gt; 105,\n        'ciudad' =&gt; 'Benidorm',\n        'wifi' =&gt; <strong>False<\/strong>,\n        'pagina web' =&gt; 'https:\/\/benidorm.com'\n    ]\n];\n\n$apartamentosMasBaratos = array_map(<strong>function<\/strong> ($apartamento) {\n    <strong>return<\/strong> array_merge($apartamento, &#91;'precio\/noche' =&gt; $apartamento&#91;'precio\/noche'] - 1]);\n}, $apartamentos);\n\nvar_dump($apartamentosMasBaratos);\n<em>\/*\narray(4) {\n  &#91;0]=&gt;\n  array(4) {\n    &#91;\"precio\/noche\"]=&gt;\n    int(39)\n    &#91;\"ciudad\"]=&gt;\n    string(8) \"Valencia\"\n    &#91;\"wifi\"]=&gt;\n    bool(true)\n    &#91;\"pagina web\"]=&gt;\n    string(17) \"https:\/\/hotel.com\"\n  }\n  &#91;1]=&gt;\n  array(4) {\n    &#91;\"precio\/noche\"]=&gt;\n    int(86)\n    &#91;\"ciudad\"]=&gt;\n    string(5) \"Calpe\"\n    &#91;\"wifi\"]=&gt;\n    bool(true)\n    &#91;\"pagina web\"]=&gt;\n    string(17) \"https:\/\/calpe.com\"\n  }\n  &#91;2]=&gt;\n  array(4) {\n    &#91;\"precio\/noche\"]=&gt;\n    int(66)\n    &#91;\"ciudad\"]=&gt;\n    string(8) \"Valencia\"\n    &#91;\"wifi\"]=&gt;\n    bool(false)\n    &#91;\"pagina web\"]=&gt;\n    string(17) \"https:\/\/denia.com\"\n  }\n  &#91;3]=&gt;\n  array(4) {\n    &#91;\"precio\/noche\"]=&gt;\n    int(104)\n    &#91;\"ciudad\"]=&gt;\n    string(8) \"Benidorm\"\n    &#91;\"wifi\"]=&gt;\n    bool(false)\n    &#91;\"pagina web\"]=&gt;\n    string(20) \"https:\/\/benidorm.com\"\n  }\n}\n*\/<\/em>\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"array_reduce-calcular\">array_reduce (calcular)<\/h3>\n\n\n\n<p>Obtiene un resultado a partir de un&nbsp;<code>array<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>array_reduce({<strong>array<\/strong>}, {funci\u00f3n}, {inicial});\n<\/code><\/pre>\n\n\n\n<p>En este ejemplo vamos calcular cual es la media del precio por noche.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>&lt;?php<\/strong>\n\n<em>\/\/ Diccionario<\/em>\n$apartamentos = &#91;\n    &#91;\n        'precio\/noche' =&gt; 40,\n        'ciudad' =&gt; 'Valencia',\n        'wifi' =&gt; <strong>True<\/strong>,\n        'pagina web' =&gt; 'https:\/\/hotel.com'\n    ],\n    &#91;\n        'precio\/noche' =&gt; 87,\n        'ciudad' =&gt; 'Calpe',\n        'wifi' =&gt; <strong>True<\/strong>,\n        'pagina web' =&gt; 'https:\/\/calpe.com'\n    ],\n    &#91;\n        'precio\/noche' =&gt; 67,\n        'ciudad' =&gt; 'Valencia',\n        'wifi' =&gt; <strong>False<\/strong>,\n        'pagina web' =&gt; 'https:\/\/denia.com'\n    ],\n    &#91;\n        'precio\/noche' =&gt; 105,\n        'ciudad' =&gt; 'Benidorm',\n        'wifi' =&gt; <strong>False<\/strong>,\n        'pagina web' =&gt; 'https:\/\/benidorm.com'\n    ]\n];\n\n$media = array_reduce($apartamentos, <strong>function<\/strong> ($acumulador, $apartamento) {\n    <strong>return<\/strong> $apartamento&#91;'precio\/noche'] + $acumulador;\n}, 0) \/ count($apartamentos);\n\n<strong>echo<\/strong> $media;\n<em>\/\/ 74.75<\/em><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Formulario<\/h2>\n\n\n\n<p>Los formularios es la \u00fanica manera de que el usuario nos transmita informaci\u00f3n, y tenemos una gran cantidad de posibilidades para recoger:&nbsp;<strong>textos<\/strong>,&nbsp;<strong>n\u00fameros<\/strong>,&nbsp;<strong>archivos<\/strong>,&nbsp;<strong>checks<\/strong>\u2026<\/p>\n\n\n\n<p>Para construir nuestro formulario necesitaremos la etiqueta&nbsp;<code>&lt;form&gt;<\/code>&nbsp;y dentro todos los&nbsp;<code>&lt;input&gt;<\/code>s que necesitemos.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html&gt;\n    &lt;body&gt;\n        &lt;form&gt;\n            <strong>&lt;?php<\/strong>\n                var_dump($_REQUEST);\n            <strong>?&gt;<\/strong>\n            &lt;input type=\"text\" name=\"nombre\"&gt;\n            &lt;input type=\"submit\"&gt;\n        &lt;\/form&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<p>Utiliza&nbsp;<code>var_dump($_REQUEST)<\/code>&nbsp;para saber que variables te llegan de un formulario.<\/p>\n\n\n\n<p><code>$_REQUEST<\/code>&nbsp;es un array que contiene todas las variables que recibimos, lo cual nos simplifica a la hora de extraer cada elemento.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html&gt;\n    &lt;body&gt;\n        <strong>&lt;?php<\/strong> <strong>if<\/strong> (isset($_REQUEST&#91;'nombre'])): <strong>?&gt;<\/strong>\n            &lt;p&gt;\u00bfDe verdad te llamas <strong>&lt;?php<\/strong> <strong>echo<\/strong> $_REQUEST&#91;'nombre']; <strong>?&gt;<\/strong>? Qu\u00e9 nombre m\u00e1s bonito.&lt;\/p&gt;\n        <strong>&lt;?php<\/strong> <strong>endif<\/strong>; <strong>?&gt;<\/strong>\n        &lt;form&gt;\n            &lt;input type=\"text\" name=\"nombre\"&gt;\n            &lt;input type=\"submit\"&gt;\n        &lt;\/form&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<p>La funci\u00f3n&nbsp;<code>isset()<\/code>&nbsp;te indica si existe cualquier tipo de variable: local, global o dentro de un&nbsp;<code>array<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"m\u00e9todos-de-petici\u00f3n\">M\u00e9todos de petici\u00f3n<\/h2>\n\n\n\n<p>Existe una gran cantidad de verbos HTTP, o&nbsp;<a href=\"https:\/\/developer.mozilla.org\/es\/docs\/Web\/HTTP\/Methods\">m\u00e9todos de petici\u00f3n<\/a>, dentro del desarrollo web:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GET<\/li>\n\n\n\n<li>POST<\/li>\n\n\n\n<li>PUT<\/li>\n\n\n\n<li>DELETE<\/li>\n\n\n\n<li>HEAD<\/li>\n\n\n\n<li>CONNECT<\/li>\n\n\n\n<li>OPTIONS<\/li>\n\n\n\n<li>TRACE<\/li>\n\n\n\n<li>PATH<\/li>\n<\/ul>\n\n\n\n<p>Todos ellos son como etiquetas que le damos a los datos para&nbsp;<strong>marcar su uso<\/strong>. Piensa en ellos como diferentes&nbsp;<strong>caminos para llegar al mismo sitio<\/strong>. Imagina que tienes que enviar 2 l\u00e1mparas a una misma direcci\u00f3n y decides usar 2 compa\u00f1ias de mensajer\u00eda diferentes: SEUR y CORREOS. Pero le avisas al destinatario que la l\u00e1mpara que reciba por SEUR es para el sal\u00f3n y la otra tiene una bombilla rota que debe cambiar. Pasado el tiempo, cuando reciba los paquetes, tratar\u00e1 cada l\u00e1mpara de forma especial. De esta manera puedes&nbsp;<strong>enviar varios datos en caminos diferentes para que el destinatario los use de forma distinta<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>if<\/strong> ($_SERVER&#91;'REQUEST_METHOD'] === 'POST') {\n    <strong>echo<\/strong> 'Llega algo por POST';\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"m\u00e9todo-get\">M\u00e9todo GET<\/h2>\n\n\n\n<p>Por defecto un formulario es enviado con el m\u00e9todo, verbo,&nbsp;<code>GET<\/code>. Tiene una particularidad que no tiene el resto. Pongamos el siguiente c\u00f3digo. Yo lo relleno con el nombre \u201cBuda\u201d y la edad \u201c30\u201d. A continuaci\u00f3n pulso el bot\u00f3n de enviar.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html&gt;\n    &lt;body&gt;\n        &lt;form method=\"get\"&gt;\n            &lt;input type=\"text\" name=\"nombre\"&gt;\n            &lt;input type=\"number\" name=\"edad\"&gt;\n            &lt;input type=\"submit\"&gt;\n        &lt;\/form&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<p>Si te fijas en la direcci\u00f3n, la URL, ver\u00e1s una ruta parecida a la siguiente.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>http:&#47;&#47;localhost\/?nombre=Buda&amp;edad=30\n<\/code><\/pre>\n\n\n\n<p><code>GET<\/code>&nbsp;nos permite ver en la barra del URL los datos d\u00e1ndonos la posibilidad de modificarlos.<\/p>\n\n\n\n<p>Cualquier persona observadora podr\u00e1 ver y modificar los datos. Ten mucho cuidado. \u00dasalo para informaci\u00f3n que no comprometa tu sitio: paginadores, mensajes, marcador de idioma\u2026<\/p>\n\n\n\n<p>Para recoger ser\u00e1 usando siempre&nbsp;<code>isset()<\/code>&nbsp;con&nbsp;<code>$_REQUEST<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$nombre = isset($_REQUEST&#91;'nombre']) ? $_REQUEST&#91;'nombre'] : '';\n$edad = isset($_REQUEST&#91;'edad']) ? $_REQUEST&#91;'edad'] : '';\n<\/code><\/pre>\n\n\n\n<p><a href=\"https:\/\/programadorwebvalencia.com\/cursos\/php\/actividades\/#5-1\">5-1<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"m\u00e9todo-post\">M\u00e9todo POST<\/h2>\n\n\n\n<p>El m\u00e9todo POST ser\u00e1 invisible al ojo del usuario. Recomendable cuando modificamos variables o una base de datos.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html&gt;\n    &lt;body&gt;\n        &lt;form method=\"post\"&gt;\n            &lt;input type=\"text\" name=\"nombre\"&gt;\n            &lt;input type=\"number\" name=\"edad\"&gt;\n            &lt;input type=\"submit\"&gt;\n        &lt;\/form&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<p><a href=\"https:\/\/programadorwebvalencia.com\/cursos\/php\/actividades\/#5-2\">5-2<\/a><a href=\"https:\/\/programadorwebvalencia.com\/cursos\/php\/actividades\/#5-3\">5-3<\/a><\/p>\n\n\n\n<p>Para obtener una varaible&nbsp;<strong>get<\/strong>&nbsp;tambi\u00e9n dispones de&nbsp;<code>$_GET['nombre']<\/code>&nbsp;y para post&nbsp;<code>$_POST['nombre']<\/code>, pero&nbsp;<code>$_REQUEST['nombre']<\/code>&nbsp;simplifica al unificar cualquier elemento que recibamos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"action\">Action<\/h2>\n\n\n\n<p>Si no indicas lo contrario, la informaci\u00f3n se enviar\u00e1 a la misma p\u00e1gina donde estemos. Con&nbsp;<code>action<\/code>&nbsp;podremos decirle al formulario que lleve los datos a otra URL.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html&gt;\n    &lt;body&gt;\n        &lt;form method=\"post\" action=\"login.php\"&gt;\n            &lt;input type=\"text\" name=\"nombre\"&gt;\n            &lt;input type=\"number\" name=\"edad\"&gt;\n            &lt;input type=\"submit\"&gt;\n        &lt;\/form&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"evitar-que-se-borren-los-campos\">Evitar que se borren los campos<\/h2>\n\n\n\n<p>Cada vez que pulsas en un&nbsp;<code>submit<\/code>&nbsp;la p\u00e1gina se refresca (se realiza una petici\u00f3n) y con ello se reinicia el formulario. \u00bfQu\u00e9 pasa si me he equivocado en alg\u00fan campo? Se pierde como l\u00e1grimas en la lluvia. El usuario tendr\u00eda que volver a rellenarlo. Un truco para solucionarlo ser\u00eda comprobar si existe el dato, y si es as\u00ed rellenar su&nbsp;<code>value<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html&gt;\n    &lt;body&gt;\n        &lt;form&gt;\n            &lt;input type=\"text\" placeholder=\"Nombre\" name=\"nombre\"<strong>&lt;?php<\/strong> <strong>if<\/strong> (isset($_REQUEST&#91;'nombre']) &amp;&amp; $_REQUEST&#91;'nombre'] != ''): <strong>?&gt;<\/strong> value=\"<strong>&lt;?php<\/strong> <strong>echo<\/strong> $_REQUEST&#91;'nombre']; <strong>?&gt;<\/strong>\"<strong>&lt;?php<\/strong> <strong>endif<\/strong>; <strong>?&gt;<\/strong>&gt;\n            &lt;input type=\"number\" placeholder=\"Edad\" name=\"edad\"<strong>&lt;?php<\/strong> <strong>if<\/strong> (isset($_REQUEST&#91;'edad']) &amp;&amp; $_REQUEST&#91;'edad'] != ''): <strong>?&gt;<\/strong> value=\"<strong>&lt;?php<\/strong> <strong>echo<\/strong> $_REQUEST&#91;'edad']; <strong>?&gt;<\/strong>\"<strong>&lt;?php<\/strong> <strong>endif<\/strong>; <strong>?&gt;<\/strong>&gt;\n            &lt;input type=\"submit\"&gt;\n        &lt;\/form&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<p><a href=\"https:\/\/programadorwebvalencia.com\/cursos\/php\/actividades\/#5-4\">5-4<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"campos-ocultos\">Campos ocultos<\/h2>\n\n\n\n<p>En ciertas ocasiones necesitaremos enviar por el formulario una informaci\u00f3n que no sea visible por el usuario: id, token, un hist\u00f3rico, un c\u00e1lculo, etc. Para ello disponemos de un&nbsp;<code>input<\/code>&nbsp;especial con el tipo&nbsp;<code>hidden<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html&gt;\n    &lt;body&gt;\n        &lt;form&gt;\n            &lt;input type=\"hidden\" name=\"maquina-enigma\" value=\"149\"&gt;\n            \n            &lt;input type=\"submit\"&gt;\n        &lt;\/form&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<p>En este caso, el visitante solo visualizar\u00e1 un bot\u00f3n pero al enviarse llegar\u00e1 la data&nbsp;<code>maquina-enigma<\/code>&nbsp;con el valor&nbsp;<code>149<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$codigoSecreto = isset($_REQUEST&#91;'maquina-enigma']) ? $_REQUEST&#91;'maquina-enigma'] : '';\n<strong>echo<\/strong> $codigoSecreto;\n\n<em>\/\/ 149<\/em>\n<\/code><\/pre>\n\n\n\n<p>Tambi\u00e9n puede ser utilizado para enviar&nbsp;<code>arrays<\/code>. Tan solo debemos repetir el&nbsp;<code>name<\/code>&nbsp;dejando presente&nbsp;<code>[]<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html&gt;\n    &lt;body&gt;\n        &lt;form&gt;\n            &lt;input type=\"hidden\" name=\"filtros&#91;]\" value=\"precio\"&gt;\n            &lt;input type=\"hidden\" name=\"filtros&#91;]\" value=\"valoracion\"&gt;\n            &lt;input type=\"hidden\" name=\"filtros&#91;]\" value=\"fecha\"&gt;\n\n            &lt;input type=\"submit\"&gt;\n        &lt;\/form&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>$misFiltros = isset($_REQUEST&#91;'filtros']) ? $_REQUEST&#91;'filtros'] : &#91;];\nvar_dump($misFiltros);\n\n<em>\/\/ &#91;'precio', 'valoracion', 'fecha']<\/em>\n<\/code><\/pre>\n\n\n\n<p>Aunque tambi\u00e9n nos podemos apoyar en las funciones&nbsp;<code>serialize()<\/code>&nbsp;y&nbsp;<code>unserialize()<\/code>. Nos convertir\u00e1 los arrays en texto o texto en arrays.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>echo<\/strong> serialize(&#91;'ma\u00f1ana', 'tarde', 'noche']);\n<em>\/\/ a:3:{i:0;s:7:\"ma\u00f1ana\";i:1;s:5:\"tarde\";i:2;s:5:\"noche\";}<\/em>\n\nvar_dump(unserialize('a:3:{i:0;s:7:\"ma\u00f1ana\";i:1;s:5:\"tarde\";i:2;s:5:\"noche\";}'));\n<em>\/\/ &#91;'ma\u00f1ana', 'tarde', 'noche']<\/em>\n<\/code><\/pre>\n\n\n\n<p>Estas funciones nos permiten mantener estructuras avanzadas como los diccionarios.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>echo<\/strong> serialize(&#91;'id' =&gt; 234, 'nombre' =&gt; 'Sauron']);\n<em>\/\/ a:2:{s:2:\"id\";i:234;s:6:\"nombre\";s:6:\"Sauron\";}<\/em>\n\nvar_dump(unserialize('a:2:{s:2:\"id\";i:234;s:6:\"nombre\";s:6:\"Sauron\";}'));\n<em>\/\/ &#91;'id' =&gt; 234, 'nombre' =&gt; 'Sauron']<\/em>\n<\/code><\/pre>\n\n\n\n<p>Si volvemos al ejemplo anterior, deberemos tener cuidado con las comillas dobles que entrar\u00e1n en conflicto con las propias de atributo HTML. En su lugar envuelve con comillas simples.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>&lt;?php<\/strong>\n$filtros = &#91;'precio', 'valoracion', 'fecha'];\n<strong>?&gt;<\/strong>\n\n&lt;html&gt;\n    &lt;body&gt;\n        &lt;form&gt;\n            &lt;input type=\"hidden\" name=\"filtros\" value='<strong>&lt;?=<\/strong> serialize($filtros); <strong>?&gt;<\/strong>'&gt;\n\n            &lt;input type=\"submit\"&gt;\n        &lt;\/form&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>$filtroSerializados = isset($_REQUEST&#91;'filtros']) ? $_REQUEST&#91;'filtros'] : '';\n$filtroDeserializados = unserialize($filtroSerializados);\nvar_dump($filtroDeserializados);\n\n<em>\/\/ &#91;'precio', 'valoracion', 'fecha']<\/em>\n<\/code><\/pre>\n\n\n\n<p>Es inseguro serializar un&nbsp;<code>string<\/code>&nbsp;proviene de un cliente. Se pr\u00e1ctica porque es c\u00f3modo y r\u00e1pido para recuperar&nbsp;<code>array<\/code>&nbsp;u objetos, aunque lamentablemente debes evitarlo ya que es posible manipular el texto recibido para inyectar c\u00f3digo malicioso en el backend. En su lugar recibe un JSON, ya que sus campos son muy limitados, y construye manualmente todos los elementos. Conoce todos los detalles al respecto en&nbsp;<a href=\"https:\/\/portswigger.net\/web-security\/deserialization\/exploiting\">PortSwigger<\/a>.<\/p>\n\n\n\n<p>Una \u00faltima opci\u00f3n, la cual es actualmente un est\u00e1ndar cuando hablamos de una estructura de datos, es trabajar con JSON.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>echo<\/strong> json_encode(&#91;'id' =&gt; 234, 'nombre' =&gt; 'Sauron']);\n<em>\/\/ {\"id\":234,\"nombre\":\"Sauron\"}<\/em>\n\nvar_dump(json_decode('{\"id\":234,\"nombre\":\"Sauron\"}'));\n<em>\/\/ &#91;'id' =&gt; 234, 'nombre' =&gt; 'Sauron']<\/em>\n<\/code><\/pre>\n\n\n\n<p>Si utilizamos el ejemplo anterior quedar\u00eda tal que as\u00ed.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>&lt;?php<\/strong>\n$filtros = &#91;'precio', 'valoracion', 'fecha'];\n<strong>?&gt;<\/strong>\n\n&lt;html&gt;\n    &lt;body&gt;\n        &lt;form&gt;\n            &lt;input type=\"hidden\" name=\"filtros\" value='<strong>&lt;?=<\/strong> json_encode($filtros); <strong>?&gt;<\/strong>'&gt;\n\n            &lt;input type=\"submit\"&gt;\n        &lt;\/form&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>$filtroEnJSON = isset($_REQUEST&#91;'filtros']) ? $_REQUEST&#91;'filtros'] : '';\n$filtro = json_decode($filtroEnJSON);\nvar_dump($filtro);\n\n<em>\/\/ &#91;'precio', 'valoracion', 'fecha']<\/em><\/code><\/pre>\n\n\n\n<p>Una de las tareas m\u00e1s laboriosas es validar una informaci\u00f3n que llega de un formulario. Es peligroso meter cualquier cosa que llegue a nuestra Base de Datos. El usuario es torpe o malintencionado.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Introducir e-mails sin sentidos.<\/li>\n\n\n\n<li>Letras en lugar de n\u00fameros (por ejemplo al pedir la edad).<\/li>\n\n\n\n<li>Dejar campos vac\u00edos cuando deben ser obligatorios.<\/li>\n\n\n\n<li>Dar malos formatos. (por ejemplo en un n\u00famero de tel\u00e9fono).<\/li>\n\n\n\n<li>Una longitud muy corta o muy larga de un texto.<\/li>\n\n\n\n<li>C\u00f3digo mal intencionado.<\/li>\n\n\n\n<li>Y largo etc\u00e9tera.<\/li>\n<\/ul>\n\n\n\n<p>No existe una \u00fanica manera de validar, cada programador tiene su m\u00e9todo. Pero lo que siempre hay que realizar son unos pasos estrictos:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Enviar datos desde nuestro formulario.<\/li>\n\n\n\n<li>Recoger los datos.<\/li>\n\n\n\n<li>Validar cada campo.<\/li>\n\n\n\n<li>Mostrar al usuario los errores con un mensaje.<\/li>\n\n\n\n<li>Si existen errores, mantenerse en la p\u00e1gina.<\/li>\n\n\n\n<li>Si no existen errores, generar la acci\u00f3n que busques e informar al usuario del \u00e9xito.<\/li>\n<\/ol>\n\n\n\n<p>Aunque valides en Javascript (frontend) debemos validar con PHP (backend). Los datos pueden ser alterados desde el navegador. \u00a1Nunca te f\u00edes del usuario!<\/p>\n\n\n\n<p>Nativamente PHP nos proporciona una funci\u00f3n llamada&nbsp;<code>filter_var<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>filter_var('correo@ejemplo.com', FILTER_VALIDATE_EMAIL);\n<em>\/\/ True<\/em>\n<\/code><\/pre>\n\n\n\n<p>Solo podemos validar el formato, no que sea un correo real. Para ello existen servicios de terceros como&nbsp;<a href=\"https:\/\/www.mailgun.com\/\">Mailgun<\/a>.<\/p>\n\n\n\n<p>Las diferentes validaciones disponibles puedes consultarlo en&nbsp;<a href=\"http:\/\/php.net\/manual\/es\/filter.filters.validate.php\">tipos de filtros<\/a>.<\/p>\n\n\n\n<p>A continuaci\u00f3n puedes ver analizar un ejemplo completo y real donde se ha validado cada campo y se informa al usuario en caso de encontrarse cualquier problema.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>&lt;html&gt;\n    &lt;body&gt;\n        <strong>&lt;?php<\/strong>\n            <em>\/\/======================================================================<\/em>\n            <em>\/\/ PROCESAR FORMULARIO <\/em>\n            <em>\/\/======================================================================<\/em>\n            <em>\/\/ Comprobamos si nos llega los datos por POST<\/em>\n            <strong>if<\/strong> ($_SERVER&#91;'REQUEST_METHOD'] == 'POST') {\n                <em>\/\/-----------------------------------------------------<\/em>\n                <em>\/\/ Funciones Para Validar<\/em>\n                <em>\/\/-----------------------------------------------------<\/em>\n\n                <em>\/**\n                 * M\u00e9todo que valida si un texto no esta vac\u00edo\n                 * @param {string} - Texto a validar\n                 * @return {boolean}\n                 *\/<\/em>\n                <strong>function<\/strong> <strong>validar_requerido<\/strong>(<strong>string<\/strong> $texto): <strong>bool<\/strong>\n                {\n                    <strong>return<\/strong> !(trim($texto) == '');\n                }\n\n                <em>\/**\n                 * M\u00e9todo que valida si es un n\u00famero entero \n                 * @param {string} - N\u00famero a validar\n                 * @return {bool}\n                 *\/<\/em>\n                <strong>function<\/strong> <strong>validar_entero<\/strong>(<strong>string<\/strong> $numero): <strong>bool<\/strong>\n                {\n                    <strong>return<\/strong> filter_var($numero, FILTER_VALIDATE_INT);\n                }\n\n                <em>\/**\n                 * M\u00e9todo que valida si el texto tiene un formato v\u00e1lido de E-Mail\n                 * @param {string} - Email\n                 * @return {bool}\n                 *\/<\/em>\n                <strong>function<\/strong> <strong>validar_email<\/strong>(<strong>string<\/strong> $texto): <strong>bool<\/strong>\n                {\n                    <strong>return<\/strong> filter_var($texto, FILTER_VALIDATE_EMAIL);\n                }\n\n                <em>\/\/-----------------------------------------------------<\/em>\n                <em>\/\/ Variables<\/em>\n                <em>\/\/-----------------------------------------------------<\/em>\n                $errores = &#91;];\n                $nombre = isset($_REQUEST&#91;'nombre']) ? $_REQUEST&#91;'nombre'] : <strong>null<\/strong>;\n                $edad = isset($_REQUEST&#91;'edad']) ? $_REQUEST&#91;'edad'] : <strong>null<\/strong>;\n                $email = isset($_REQUEST&#91;'email']) ? $_REQUEST&#91;'email'] : <strong>null<\/strong>;\n\n                <em>\/\/-----------------------------------------------------<\/em>\n                <em>\/\/ Validaciones<\/em>\n                <em>\/\/-----------------------------------------------------<\/em>\n                <em>\/\/ Nombre<\/em>\n                <strong>if<\/strong> (!validar_requerido($nombre)) {\n                    $errores&#91;] = 'El campo Nombre es obligatorio.';\n                }\n                <em>\/\/ Edad<\/em>\n                <strong>if<\/strong> (!validar_entero($edad)) {\n                    $errores&#91;] = 'El campo de Edad debe ser un n\u00famero.';\n                }\n                <em>\/\/ Email<\/em>\n                <strong>if<\/strong> (!validar_email($email)) {\n                    $errores&#91;] = 'El campo de Email tiene un formato no v\u00e1lido.';\n                }\n\n                <em>\/\/-----------------------------------------------------<\/em>\n                <em>\/\/ L\u00f3gica<\/em>\n                <em>\/\/-----------------------------------------------------<\/em>\n                <strong>if<\/strong> (!isset($errores)) {\n                    <em>\/\/ Enviamos el correo<\/em>\n                }\n            }\n        <strong>?&gt;<\/strong>\n        <em>&lt;!-- Mostramos errores por HTML --&gt;<\/em>\n        <strong>&lt;?php<\/strong> <strong>if<\/strong> (isset($errores)): <strong>?&gt;<\/strong>\n        &lt;ul class=\"errores\"&gt;\n            <strong>&lt;?php<\/strong> <strong>foreach<\/strong> ($errores <strong>as<\/strong> $error): <strong>?&gt;<\/strong>\n                &lt;li&gt;<strong>&lt;?=<\/strong> $error <strong>?&gt;<\/strong>&lt;\/li&gt;;\n            <strong>&lt;?php<\/strong> <strong>endforeach<\/strong>; <strong>?&gt;<\/strong> \n        &lt;\/ul&gt;\n        <strong>&lt;?php<\/strong> <strong>endif<\/strong>; <strong>?&gt;<\/strong>\n        <em>&lt;!-- Formulario --&gt;<\/em>\n        &lt;form method=\"post\"&gt;\n            &lt;p&gt;\n                <em>&lt;!-- Campo nombre --&gt;<\/em>\n                &lt;input type=\"text\" name=\"nombre\" placeholder=\"Nombre\"&gt;\n            &lt;\/p&gt;\n            &lt;p&gt;\n                <em>&lt;!-- Campo edad --&gt;<\/em>\n                &lt;input type=\"text\" name=\"edad\" placeholder=\"Edad\"&gt;\n            &lt;\/p&gt;\n            &lt;p&gt;\n                <em>&lt;!-- Campo Email --&gt;<\/em>\n                &lt;input type=\"text\" name=\"email\" placeholder=\"Email\"&gt;\n            &lt;\/p&gt;\n            &lt;p&gt;\n                <em>&lt;!-- Bot\u00f3n submit --&gt;<\/em>\n                &lt;input type=\"submit\" value=\"Enviar\"&gt;\n            &lt;\/p&gt;\n        &lt;\/form&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<p>Puedes utilizarlo como una base para futuros trabajos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ficheros<\/h2>\n\n\n\n<p>Es posible importar o llamar el c\u00f3digo desde otro archivo con PHP. De esta manera conseguiremos dividir nuestras p\u00e1gina din\u00e1micas en fragmentos m\u00e1s peque\u00f1os y f\u00e1ciles de gestionar evitando el famoso&nbsp;<strong>c\u00f3digo Spaghetti<\/strong>&nbsp;(escribir todo nuestro c\u00f3digo en un solo fichero con un interminable n\u00famero de l\u00edneas). Para esta buena pr\u00e1ctica disponemos en nuestro bat-cintur\u00f3n de hasta 4 herramientas diferentes.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Funci\u00f3n<\/th><th>Descripci\u00f3n<\/th><th>Caso de error<\/th><th>Ejemplo<\/th><\/tr><\/thead><tbody><tr><td><code>include ''<\/code><\/td><td>Incluye el fichero en cada ocasi\u00f3n.<\/td><td>Da una advertenia, pero continua la ejecuci\u00f3n.<\/td><td><code>include 'tu_archivo.php'<\/code><\/td><\/tr><tr><td><code>include_once ''<\/code><\/td><td>Incluye el fichero en una ocasi\u00f3n.<\/td><td>Da una advertenia, pero continua la ejecuci\u00f3n.<\/td><td><code>include_once 'tu_archivo.php'<\/code><\/td><\/tr><tr><td><code>require ''<\/code><\/td><td>Incluye el fichero en cada ocasi\u00f3n.<\/td><td>Para la ejecuci\u00f3n (Error fatal).<\/td><td><code>require 'tu_archivo.php'<\/code><\/td><\/tr><tr><td><code>require_once ''<\/code><\/td><td>Incluye el fichero en una ocasi\u00f3n.<\/td><td>Para la ejecuci\u00f3n (Error fatal).<\/td><td><code>require_once 'tu_archivo.php'<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Veamos con un ejemplo como funciona. Voy a tener un archivo llamado&nbsp;<code>header.php<\/code>&nbsp;con el siguiente contenido.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html&gt;\n    &lt;head&gt;\n    &lt;\/head&gt;\n    &lt;body&gt;\n<\/code><\/pre>\n\n\n\n<p>Otro con el nombre&nbsp;<code>footer.php<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        &lt;footer&gt;Soy yo&lt;\/footer&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<p>Ahora creo un fichero nuevo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>&lt;?php<\/strong> <strong>include<\/strong> 'header.php'; <strong>?&gt;<\/strong>\n&lt;h1&gt;Inicio&lt;\/h1&gt;\n<strong>&lt;?php<\/strong> <strong>include<\/strong> 'footer.php'; <strong>?&gt;<\/strong>\n<\/code><\/pre>\n\n\n\n<p>Me daria el siguiente HTML.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html&gt;\n    &lt;head&gt;\n    &lt;\/head&gt;\n    &lt;body&gt;\n        &lt;h1&gt;Inicio&lt;\/h1&gt;\n        &lt;footer&gt;Soy yo&lt;\/footer&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<p>Potente, \u00bfverdad? Evitaremos repartir partes de nuestro c\u00f3digo que sean muy reiterativas.<\/p>\n\n\n\n<p>En esta ocasi\u00f3n voy a repetir el&nbsp;<code>include<\/code>&nbsp;de footer.<\/p>\n\n\n\n<p>Ahora creo un fichero nuevo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>&lt;?php<\/strong> <strong>include<\/strong> 'header.php'; <strong>?&gt;<\/strong>\n&lt;h1&gt;Inicio&lt;\/h1&gt;\n<strong>&lt;?php<\/strong> <strong>include<\/strong> 'footer.php'; <strong>?&gt;<\/strong>\n<strong>&lt;?php<\/strong> <strong>include<\/strong> 'footer.php'; <strong>?&gt;<\/strong>\n<\/code><\/pre>\n\n\n\n<p>Lo que me generar\u00eda un pie duplicado.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html&gt;\n    &lt;head&gt;\n    &lt;\/head&gt;\n    &lt;body&gt;\n        &lt;h1&gt;Inicio&lt;\/h1&gt;\n        &lt;footer&gt;Soy yo&lt;\/footer&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n        &lt;footer&gt;Soy yo&lt;\/footer&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<p>Lo podemos prevenir con&nbsp;<code>include_once<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>&lt;?php<\/strong> <strong>include<\/strong> 'header.php'; <strong>?&gt;<\/strong>\n&lt;h1&gt;Inicio&lt;\/h1&gt;\n<strong>&lt;?php<\/strong> <strong>include_once<\/strong> 'footer.php'; <strong>?&gt;<\/strong>\n<strong>&lt;?php<\/strong> <strong>include_once<\/strong> 'footer.php'; <strong>?&gt;<\/strong>\n<\/code><\/pre>\n\n\n\n<p>Si ya ha sido llamado, lo ingora.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;html&gt;\n    &lt;head&gt;\n    &lt;\/head&gt;\n    &lt;body&gt;\n        &lt;h1&gt;Inicio&lt;\/h1&gt;\n        &lt;footer&gt;Soy yo&lt;\/footer&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"subir-un-archivo\">Subir un archivo<\/h2>\n\n\n\n<p>Un&nbsp;<strong>fichero es un elemento en binario<\/strong>&nbsp;que no es ni un n\u00famero o ni un texto: imagen, video, m\u00fasica, doc, iso\u2026 Nosotros somos incapaces de leerlo a no ser que tengamos un ojo bi\u00f3nico y un chip en el cerebro. Si careces de estos dos requisitos solo podr\u00e1s subirlo, por medio de un formulario, y almacenarlo en una carpeta.<\/p>\n\n\n\n<p>Se debe tratar de una forma especial. Necesitaremos usar&nbsp;<strong>siempre el method POST<\/strong>&nbsp;y a\u00f1adir&nbsp;<strong>enctype=\u201dmultipart\/form-data\u201d<\/strong>. Por \u00faltimo usar el&nbsp;<strong>input de tipo archivo<\/strong>&nbsp;(file).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>&lt;!-- Formulario --&gt;<\/em>\n&lt;form method=\"post\" enctype=\"multipart\/form-data\"&gt;\n    &lt;p&gt;\n        <em>&lt;!-- Campo imagen --&gt;<\/em>\n        &lt;input type=\"file\" name=\"fichero_usuario\"&gt;\n    &lt;\/p&gt;\n    &lt;p&gt;\n        <em>&lt;!-- Bot\u00f3n submit --&gt;<\/em>\n        &lt;input type=\"submit\" value=\"Enviar\"&gt;\n    &lt;\/p&gt;\n&lt;\/form&gt;\n<\/code><\/pre>\n\n\n\n<p>Cuando nuestro formulario sea enviado el archivo estar\u00e1 almacenado en una variable llamada&nbsp;<strong>$_FILES<\/strong>. La cual es un&nbsp;<code>array<\/code>&nbsp;con toda la informaci\u00f3n que vas a necesitar.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Nombre<\/th><th>Ejemplo de contenido<\/th><th>Descripci\u00f3n<\/th><\/tr><\/thead><tbody><tr><td>$_FILES[\u2018fichero_usuario\u2019][\u2018name\u2019]<\/td><td>\u2018foto_en_la_playa.jpg\u2019<\/td><td>Nombre del archivo<\/td><\/tr><tr><td>$_FILES[\u2018fichero_usuario\u2019][\u2018type\u2019]<\/td><td>\u2018image\/png\u2019<\/td><td>MIME (<a href=\"https:\/\/developer.mozilla.org\/es\/docs\/Web\/HTTP\/Basics_of_HTTP\/MIME_types\">formato del archivo<\/a>)<\/td><\/tr><tr><td>$_FILES[\u2018fichero_usuario\u2019][\u2018size\u2019]<\/td><td>3232424<\/td><td>Tama\u00f1o en bytes (5MB -&gt; 5 x 1024 x 1024 bytes)<\/td><\/tr><tr><td>$_FILES[\u2018fichero_usuario\u2019][\u2018error\u2019]<\/td><td>0<\/td><td>C\u00f3digo de error. El 0 es que todo ha ido bien, los otros puedes encontrarlos&nbsp;<a href=\"https:\/\/www.php.net\/manual\/en\/features.file-upload.errors.php\">aqu\u00ed<\/a><\/td><\/tr><tr><td>$_FILES[\u2018fichero_usuario\u2019][\u2018tmp_name\u2019]<\/td><td>213<\/td><td>Nombre temporal<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Ahora solo tendremos que moverlo de la carpeta temporal a la definitiva, usando el m\u00e9todo&nbsp;<strong>move_uploaded_file()<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>move_uploaded_file($_FILES&#91;'fichero_usuario']&#91;'tmp_name'], $fichero_subido);\n<\/code><\/pre>\n\n\n\n<p>Aqu\u00ed puedes ver un ejemplo completo.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>&lt;html&gt;\n    &lt;body&gt;\n        <strong>&lt;?php<\/strong>\n            <em>\/\/======================================================================<\/em>\n            <em>\/\/ PROCESAR IMAGEN <\/em>\n            <em>\/\/======================================================================<\/em>\n            <em>\/\/ Comprobamos si nos llega los datos por POST<\/em>\n            <strong>if<\/strong> ($_SERVER&#91;'REQUEST_METHOD'] == 'POST') {\n                <em>\/\/ Definir directorio donde se guardar\u00e1<\/em>\n                $dir_subida = '.\/subidos\/';\n                <em>\/\/ Definir la ruta final del archivo<\/em>\n                $fichero_subido = $dir_subida . basename($_FILES&#91;'fichero_usuario']&#91;'name']);\n                <em>\/\/ Mueve el archivo de la carpeta temporal a la ruta definida<\/em>\n                <strong>if<\/strong> (move_uploaded_file($_FILES&#91;'fichero_usuario']&#91;'tmp_name'], $fichero_subido)) {\n                    <em>\/\/ Mensaje de confirmaci\u00f3n donde todo ha ido bien<\/em>\n                    <strong>echo<\/strong> '&lt;p&gt;Se subi\u00f3 perfectamente.&lt;\/p&gt;';\n                    <em>\/\/ Muestra la imagen que acaba de ser subida<\/em>\n                    <strong>echo<\/strong> '&lt;p&gt;&lt;img width=\"500\" src=\"' . $fichero_subido . '\"&gt;&lt;\/p&gt;';\n                } <strong>else<\/strong> {\n                    <em>\/\/ Mensaje de error: \u00bfL\u00edmite de tama\u00f1o? \u00bfAtaque?<\/em>\n                    <strong>echo<\/strong> '&lt;p&gt;\u00a1Ups! Algo ha pasado.&lt;\/p&gt;';\n                }\n            }\n        <strong>?&gt;<\/strong>\n        <em>&lt;!-- Formulario --&gt;<\/em>\n        &lt;form method=\"post\" enctype=\"multipart\/form-data\"&gt;\n            &lt;p&gt;\n                <em>&lt;!-- Campo imagen --&gt;<\/em>\n                &lt;input type=\"file\" name=\"fichero_usuario\"&gt;\n            &lt;\/p&gt;\n            &lt;p&gt;\n                <em>&lt;!-- Bot\u00f3n submit --&gt;<\/em>\n                &lt;input type=\"submit\" value=\"Enviar\"&gt;\n            &lt;\/p&gt;\n        &lt;\/form&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"multiarchivo-subir-varios-archivos\">Multiarchivo (subir varios archivos)<\/h2>\n\n\n\n<p>Es posible subir varios archivos bajo el mismo nombre. Solo habr\u00e1 que a\u00f1adir unos corchetes (<code>[]<\/code>) despu\u00e9s del&nbsp;<code>name<\/code>&nbsp;como si fuera un&nbsp;<code>array<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>&lt;!-- Formulario --&gt;<\/em>\n&lt;form method=\"post\" enctype=\"multipart\/form-data\"&gt;\n    &lt;p&gt;\n        <em>&lt;!-- Campos de im\u00e1genes --&gt;<\/em>\n        &lt;input type=\"file\" name=\"imagen&#91;]\"&gt;\n        &lt;input type=\"file\" name=\"imagen&#91;]\"&gt;\n        &lt;input type=\"file\" name=\"imagen&#91;]\"&gt;\n    &lt;\/p&gt;\n    &lt;p&gt;\n        <em>&lt;!-- Bot\u00f3n submit --&gt;<\/em>\n        &lt;input type=\"submit\" value=\"Enviar\"&gt;\n    &lt;\/p&gt;\n&lt;\/form&gt;\n<\/code><\/pre>\n\n\n\n<p>Al recibir los datos tendremos que iterar la variable, igual que un&nbsp;<code>array<\/code>. Es recomendable comprobar en cada caso que el archivo se ha subido correctamente.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><em>\/\/ Comprobamos si nos llega los datos por POST<\/em>\n<strong>if<\/strong> ($_SERVER&#91;'REQUEST_METHOD'] == 'POST') {\n    <em>\/\/ Iteramos todos los archivos<\/em>\n    <strong>foreach<\/strong> ($_FILES&#91;\"imagen\"]&#91;\"error\"] <strong>as<\/strong> $posicion =&gt; $error) {\n        <em>\/\/ Comprobamos si se ha subido correctamente<\/em>\n        <strong>if<\/strong> ($error == UPLOAD_ERR_OK) {\n            <em>\/\/ Definir directorio donde se guardar\u00e1<\/em>\n            $dir_subida = '.\/subidos\/';\n            <em>\/\/ Definir la ruta final del archivo<\/em>\n            $fichero_subido = $dir_subida . basename($_FILES&#91;'imagen']&#91;'name']&#91;$posicion]);\n            <em>\/\/ Mueve el archivo de la carpeta temporal a la ruta definida<\/em>\n            <strong>if<\/strong> (move_uploaded_file($_FILES&#91;'imagen']&#91;'tmp_name']&#91;$posicion], $fichero_subido)) {\n                <em>\/\/ Mensaje de confirmaci\u00f3n donde todo ha ido bien<\/em>\n                <strong>echo<\/strong> '&lt;p&gt;Se subi\u00f3 perfectamente' . $_FILES&#91;'imagen']&#91;'name']&#91;$posicion] . '.&lt;\/p&gt;';\n                <em>\/\/ Muestra la imagen que acaba de ser subida<\/em>\n                <strong>echo<\/strong> '&lt;p&gt;&lt;img width=\"500\" src=\"' . $fichero_subido . '\"&gt;&lt;\/p&gt;';\n            } <strong>else<\/strong> {\n                <em>\/\/ Mensaje de error: \u00bfL\u00edmite de tama\u00f1o? \u00bfAtaque?<\/em>\n                <strong>echo<\/strong> '&lt;p&gt;\u00a1Ups! Algo ha pasado.&lt;\/p&gt;';\n            }\n        }\n    }\n}\n<\/code><\/pre>\n\n\n\n<p>Junto quedar\u00eda de la siguiente forma.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>&lt;html&gt;\n    &lt;body&gt;\n        <strong>&lt;?php<\/strong>\n            <em>\/\/======================================================================<\/em>\n            <em>\/\/ PROCESAR IMAGENES <\/em>\n            <em>\/\/======================================================================<\/em>\n            <em>\/\/ Comprobamos si nos llega los datos por POST<\/em>\n            <strong>if<\/strong> ($_SERVER&#91;'REQUEST_METHOD'] == 'POST') {\n                <em>\/\/ Iteramos todos los archivos<\/em>\n                <strong>foreach<\/strong> ($_FILES&#91;\"imagen\"]&#91;\"error\"] <strong>as<\/strong> $posicion =&gt; $error) {\n                    <em>\/\/ Comprobamos si se ha subido correctamente<\/em>\n                    <strong>if<\/strong> ($error == UPLOAD_ERR_OK) {\n                        <em>\/\/ Definir directorio donde se guardar\u00e1<\/em>\n                        $dir_subida = '.\/subidos\/';\n                        <em>\/\/ Definir la ruta final del archivo<\/em>\n                        $fichero_subido = $dir_subida . basename($_FILES&#91;'imagen']&#91;'name']&#91;$posicion]);\n                        <em>\/\/ Mueve el archivo de la carpeta temporal a la ruta definida<\/em>\n                        <strong>if<\/strong> (move_uploaded_file($_FILES&#91;'imagen']&#91;'tmp_name']&#91;$posicion], $fichero_subido)) {\n                            <em>\/\/ Mensaje de confirmaci\u00f3n donde todo ha ido bien<\/em>\n                            <strong>echo<\/strong> '&lt;p&gt;Se subi\u00f3 perfectamente' . $_FILES&#91;'imagen']&#91;'name']&#91;$posicion] . '.&lt;\/p&gt;';\n                            <em>\/\/ Muestra la imagen que acaba de ser subida<\/em>\n                            <strong>echo<\/strong> '&lt;p&gt;&lt;img width=\"500\" src=\"' . $fichero_subido . '\"&gt;&lt;\/p&gt;';\n                        } <strong>else<\/strong> {\n                            <em>\/\/ Mensaje de error: \u00bfL\u00edmite de tama\u00f1o? \u00bfAtaque?<\/em>\n                            <strong>echo<\/strong> '&lt;p&gt;\u00a1Ups! Algo ha pasado.&lt;\/p&gt;';\n                        }\n                    }\n                }\n            }\n        <strong>?&gt;<\/strong>\n        <em>&lt;!-- Formulario --&gt;<\/em>\n        &lt;form method=\"post\" enctype=\"multipart\/form-data\"&gt;\n            &lt;p&gt;\n                <em>&lt;!-- Campos de im\u00e1genes --&gt;<\/em>\n                &lt;input type=\"file\" name=\"imagen&#91;]\"&gt;\n                &lt;input type=\"file\" name=\"imagen&#91;]\"&gt;\n                &lt;input type=\"file\" name=\"imagen&#91;]\"&gt;\n            &lt;\/p&gt;\n            &lt;p&gt;\n                <em>&lt;!-- Bot\u00f3n submit --&gt;<\/em>\n                &lt;input type=\"submit\" value=\"Enviar\"&gt;\n            &lt;\/p&gt;\n        &lt;\/form&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"borrar-archivos\">Borrar archivos<\/h2>\n\n\n\n<p>Para eliminar un archivo debemos usar el m\u00e9todo&nbsp;<code>unlink<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>unlink('archivo');\n<\/code><\/pre>\n\n\n\n<p>Tan solo hay que dar la ruta que deseamos.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>unlink('subidos\/coche_rojo.jpg');\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"evitar-que-se-sobrescriba\">Evitar que se sobrescriba<\/h2>\n\n\n\n<p>\u00bfQu\u00e9 pasa si subimos dos archivos con el mismo nombre? Pues que el anterior desaparecer\u00eda, se sobrescribir\u00eda por tener el mismo nombre y guardarse en el mismo lugar. Debemos garantiza que el archivo posee un nombre \u00fanico.<\/p>\n\n\n\n<p>Un truco para solucionarlo generando un&nbsp;<em>hash<\/em>, o una secuencia alfanum\u00e9rica \u00fanica por cada archivo que sustituya al nombre. Un algoritmo muy popular es&nbsp;<strong>SHA-1<\/strong>.<\/p>\n\n\n\n<p>En criptograf\u00eda, SHA-1 (Secure Hash Algorithm 1) es una funci\u00f3n hash criptogr\u00e1fica que ha sido rota, pero que sigue siendo ampliamente utilizada para generar un n\u00famero hexadecimal de 40 d\u00edgitos. Su autor fue la Agencia de Seguridad Nacional de Estados Unidos, siendo usando para el procesamiento de informaci\u00f3n de Estados Unidos.<\/p>\n\n\n\n<p>Si quisi\u00e9ramos obtener un&nbsp;<em>hash<\/em>&nbsp;de un texto, deber\u00edamos usar&nbsp;<strong>sha1()<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>echo<\/strong> sha1('texto');\n<em>\/\/ ea631551f5569f612dd702b900c596c2a99c0dfd<\/em>\n<\/code><\/pre>\n\n\n\n<p>Para archivos disponemos de una funci\u00f3n determinada llamada&nbsp;<code>sha1_file()<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>echo<\/strong> sha1_file($_FILES&#91;'fichero_usuario']&#91;'tmp_name']);\n<em>\/\/ 2d68e69c476166978146c4f8e523ba8f87acbbc3<\/em>\n<\/code><\/pre>\n\n\n\n<p>Si tuvieramos un archivo llamado&nbsp;<code>reloj.jpg<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$fichero_subido = $dir_subida . sha1_file($_FILES&#91;'fichero_usuario']&#91;'tmp_name']) . basename($_FILES&#91;'fichero_usuario']&#91;'name']);\n<strong>echo<\/strong> $fichero_subido;\n<em>\/\/ subidos\/2d68e69c476166978146c4f8e523ba8f87acbbc3reloj.jpg<\/em>\n<\/code><\/pre>\n\n\n\n<p>Por muchos archivos&nbsp;<code>reloj.jpg<\/code>&nbsp;que suban nunca se sobrescribir\u00e1n, a no ser que a nivel binario sean exactamente iguales (lo cual tampoco ser\u00eda un problema porque ser\u00eda el mismo fichero).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tama\u00f1o-m\u00e1ximo\">Tama\u00f1o m\u00e1ximo<\/h2>\n\n\n\n<p>Si quieres limitar el tama\u00f1o de todos los archivos puedes hacerlo a\u00f1adiendo un&nbsp;<code>input<\/code>&nbsp;especial.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"20000\" \/&gt;\n<\/code><\/pre>\n\n\n\n<p>El&nbsp;<code>value<\/code>&nbsp;se mide en&nbsp;<code>bytes<\/code>.<\/p>\n\n\n\n<p>Si un archivo supera nuestra frontera dar\u00e1 un error, pero nunca llegar\u00e1 a subirse.<\/p>\n\n\n\n<p>Otra forma de cambiarlo, en este caso permanente, es modificando unas variables de PHP en su archivo de configuraci\u00f3n.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/php\/{versi\u00f3n}\/cli\/php.ini\n<\/code><\/pre>\n\n\n\n<p>Edita las siguientes variables si quieres limitarlo a&nbsp;<code>100Mb<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>upload_max_filesize=100Mb\npost_max_size=100Mb\n<\/code><\/pre>\n\n\n\n<p>Igualmente valida el tama\u00f1o con PHP, es f\u00e1cil manipular el l\u00edmite dentro del navegador. Recuerda: nunca te f\u00edes del usuario.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"procesamiento-de-im\u00e1genes\">Procesamiento de im\u00e1genes<\/h2>\n\n\n\n<p>PHP no esta solamente limitado a la generaci\u00f3n de HTML y mover archivos, tambi\u00e9n puede procesar im\u00e1genes. Existen una multitud de posibilidades.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Redimensionar (utilizado para crear miniaturas).<\/li>\n\n\n\n<li>Recortar.<\/li>\n\n\n\n<li>Aplicar filtros de color.<\/li>\n\n\n\n<li>Crear im\u00e1genes (como suena).<\/li>\n\n\n\n<li>A\u00f1adir marcas de agua.<\/li>\n\n\n\n<li>Cambiar de formato.<\/li>\n<\/ul>\n\n\n\n<p>Para crear una minuatura podr\u00edas hacerlo usando la libreria nativa&nbsp;<strong>Imagick<\/strong>.<\/p>\n\n\n\n<p>Primero tendremos que instalarla en el sistema. Con Ubuntu o Debian es muy sencillo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install php-imagick\n<\/code><\/pre>\n\n\n\n<p>Aahora ya puedes trabajar con ella. En el siguiente ejemplo se captura&nbsp;<code>imagen.jpg<\/code>&nbsp;y se redimensiona a&nbsp;<code>100px<\/code>&nbsp;de ancho. Por \u00faltimo se guarda con el nombre de&nbsp;<code>miniatura.jpg<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$imagen = <strong>new<\/strong> Imagick('imagen.jpg');\n\n<em>\/\/ Si se proporciona 0 como par\u00e1metro de ancho o alto,<\/em>\n<em>\/\/ se mantiene la proporci\u00f3n de aspecto<\/em>\n$imagen-&gt;thumbnailImage(100, 0);\n\n<em>\/\/ La guarda<\/em>\nfile_put_contents('miniatura.jpg', $imagen);\n<\/code><\/pre>\n\n\n\n<p>Dispone de diversas herramientas para manipular formatos tan conocidos como: JPEG, GIF, PNG y WebP (entre otros). Puedes ver m\u00e1s en la&nbsp;<a href=\"http:\/\/php.net\/manual\/es\/refs.utilspec.image.php\">documentaci\u00f3n<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ejemplo-completo\">Ejemplo completo<\/h2>\n\n\n\n<p>Puedes ver un ejemplo que recoge todos los casos anteriores.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Valida que se ha adjuntado una imagen en el formulario.<\/li>\n\n\n\n<li>Valida que sea una imagen en jpg o png.<\/li>\n\n\n\n<li>Valida que no supere cierto tama\u00f1o. En este caso 2Mb.<\/li>\n\n\n\n<li>Crea una miniatura. En este caso de 100px de ancho.<\/li>\n\n\n\n<li>Cambia el nombre aleatorio para evitar posibles conflictos con otros archivos.<\/li>\n\n\n\n<li>Muestra la miniatura en el HTML.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><strong>&lt;?php<\/strong>\n\n<em>\/\/======================================================================<\/em>\n<em>\/\/ VARIABLES<\/em>\n<em>\/\/======================================================================<\/em>\n$errorAvatar = 0;\n$avatar = <strong>null<\/strong>;\n$rutaThumbnail = <strong>null<\/strong>;\n\n<em>\/\/ Definir directorio donde se guardar\u00e1<\/em>\ndefine('PATH_AVATAR', '.\/subidos\/');\ndefine('PATH_AVATAR_THUMBNAIL', '.\/subidos\/thumbnails\/');\n\n<em>\/\/ Tamanyo max avatar: 2 Mb<\/em>\ndefine('MAX_SIZE_AVATAR_MB', 2);\ndefine('MAX_SIZE_AVATAR', MAX_SIZE_AVATAR_MB * 1024 * 1024);\n<em>\/\/ En \/etc\/php\/7.4\/cli\/php.ini edita las siguientes variables<\/em>\n<em>\/\/ upload_max_filesize=100Mb<\/em>\n<em>\/\/ post_max_size=100Mb<\/em>\n\n<em>\/\/ Anchura miniatura<\/em>\ndefine('WIDTH_THUMBNAIL', 100);\n\n<em>\/\/======================================================================<\/em>\n<em>\/\/ PROCESAR FORMULARIO<\/em>\n<em>\/\/======================================================================<\/em>\n\n<em>\/\/ Comprobamos si nos llega los datos por POST<\/em>\n<strong>if<\/strong> ($_SERVER&#91;'REQUEST_METHOD'] == 'POST' &amp;&amp; isset($_FILES)) {\n\n    <em>\/\/-----------------------------------------------------<\/em>\n    <em>\/\/  Recoger avatar<\/em>\n    <em>\/\/-----------------------------------------------------<\/em>\n\n    <em>\/\/ Verifica si existe el directorio, y en caso contrario lo crea<\/em>\n    <strong>if<\/strong> (!is_dir(PATH_AVATAR_THUMBNAIL)) {\n        mkdir(PATH_AVATAR_THUMBNAIL, 0775, <strong>true<\/strong>);\n    }\n    <em>\/\/ Definir la ruta final del archivo<\/em>\n    $nombreFoto = sha1_file($_FILES&#91;'avatar']&#91;'tmp_name']) . basename($_FILES&#91;'avatar']&#91;'name']);\n    $ficheroSubido = PATH_AVATAR . $nombreFoto;\n\n    <em>\/\/-----------------------------------------------------<\/em>\n    <em>\/\/  Control de errores<\/em>\n    <em>\/\/-----------------------------------------------------<\/em>\n\n    <em>\/\/ Tamanyo maximo<\/em>\n    <strong>if<\/strong> ($_FILES&#91;'avatar']&#91;'size'] &gt; MAX_SIZE_AVATAR) {\n        $errorAvatar = 1;\n    }\n\n    <em>\/\/ Solo JPG y PNG<\/em>\n    <strong>if<\/strong> ($_FILES&#91;'avatar']&#91;'type'] !== 'image\/png' &amp;&amp; $_FILES&#91;'avatar']&#91;'type'] !== 'image\/jpeg') {\n        $errorAvatar = 2;\n    }\n\n    <em>\/\/ Obligatorio<\/em>\n    <strong>if<\/strong> ($_FILES&#91;'avatar']&#91;'size'] === 0) {\n        $errorAvatar = 3;\n    }\n\n    <em>\/\/-----------------------------------------------------<\/em>\n    <em>\/\/  Procesar imagen<\/em>\n    <em>\/\/-----------------------------------------------------<\/em>\n\n    <strong>if<\/strong> ($errorAvatar === 0) {\n        <strong>if<\/strong> (move_uploaded_file($_FILES&#91;'avatar']&#91;'tmp_name'], $ficheroSubido)) {\n            <em>\/\/ Mueve el archivo de la carpeta temporal a la ruta definida<\/em>\n            $avatar = $ficheroSubido;\n\n            <em>\/\/ Creamos una miniatura<\/em>\n            <em>\/\/ No olvides instalarlo con: sudo apt install php-imagick<\/em>\n            $imagen = <strong>new<\/strong> Imagick($avatar);\n\n            <em>\/\/ Si se proporciona 0 como par\u00e1metro de ancho o alto,<\/em>\n            <em>\/\/ se mantiene la proporci\u00f3n de aspecto<\/em>\n            $imagen-&gt;thumbnailImage(WIDTH_THUMBNAIL, 0);\n            $rutaThumbnail = PATH_AVATAR_THUMBNAIL . $nombreFoto;\n            file_put_contents($rutaThumbnail, $imagen);\n        }\n    }\n}\n\n<strong>?&gt;<\/strong>\n<strong>&lt;!doctype html&gt;<\/strong>\n&lt;html lang=\"es\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\"&gt;\n    &lt;meta name=\"viewport\"\n          content=\"width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0\"&gt;\n    &lt;meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\"&gt;\n    &lt;title&gt;Perfil&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    <strong>&lt;?php<\/strong> <strong>if<\/strong> (isset($rutaThumbnail)): <strong>?&gt;<\/strong>\n        &lt;img src=\"<strong>&lt;?=<\/strong> $rutaThumbnail; <strong>?&gt;<\/strong>\" alt=\"mi avatar\" width=\"<strong>&lt;?=<\/strong> WIDTH_THUMBNAIL <strong>?&gt;<\/strong>\"&gt;\n    <strong>&lt;?php<\/strong> <strong>endif<\/strong>; <strong>?&gt;<\/strong>\n    &lt;form method=\"post\" enctype=\"multipart\/form-data\"&gt;\n        &lt;p&gt;\n            &lt;label&gt;\n                Foto:\n                &lt;input type=\"file\" name=\"avatar\"&gt;\n            &lt;\/label&gt;\n        &lt;\/p&gt;\n        <strong>&lt;?php<\/strong> <strong>if<\/strong> ($errorAvatar === 1): <strong>?&gt;<\/strong>\n        &lt;p style=\"color: red\"&gt;\n            Tama\u00f1o demasiado grande, intente que tenga menos de <strong>&lt;?=<\/strong> MAX_SIZE_AVATAR_MB <strong>?&gt;<\/strong>Mb\n        &lt;\/p&gt;\n        <strong>&lt;?php<\/strong> <strong>elseif<\/strong> ($errorAvatar === 2): <strong>?&gt;<\/strong>\n        &lt;p style=\"color: red\"&gt;\n            Solo admitido imagenes en JPG o PNG.\n        &lt;\/p&gt;\n        <strong>&lt;?php<\/strong> <strong>elseif<\/strong> ($errorAvatar === 3): <strong>?&gt;<\/strong>\n        &lt;p style=\"color: red\"&gt;\n            Debes incluir una imagen\n        &lt;\/p&gt;\n        <strong>&lt;?php<\/strong> <strong>endif<\/strong>; <strong>?&gt;<\/strong>\n        &lt;p&gt;\n            &lt;input type=\"submit\" value=\"Guardar\"&gt;\n        &lt;\/p&gt;\n    &lt;\/form&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><a href=\"https:\/\/programadorwebvalencia.com\/cursos\">https:\/\/programadorwebvalencia.com\/cursos<\/a><\/p>\n<cite>Biografia php<\/cite><\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">SQL con PHP<\/h2>\n\n\n\n<p>Para conectar PHP a una base de datos MySQL, puedes usar dos extensiones principales:&nbsp;<strong>MySQLi<\/strong>&nbsp;(MySQL Improved) y&nbsp;<strong>PDO<\/strong>&nbsp;(PHP Data Objects). Aqu\u00ed te muestro c\u00f3mo hacerlo con ambas:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Usando MySQLi<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Estilo Orientado a Objetos<\/h4>\n\n\n\n<p>PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n$servername = \"localhost\";\n$username = \"tu_usuario\";\n$password = \"tu_contrase\u00f1a\";\n$dbname = \"tu_base_de_datos\";\n\n\/\/ Crear conexi\u00f3n\n$conn = new mysqli($servername, $username, $password, $dbname);\n\n\/\/ Verificar conexi\u00f3n\nif ($conn-&gt;connect_error) {\n    die(\"Conexi\u00f3n fallida: \" . $conn-&gt;connect_error);\n}\necho \"Conexi\u00f3n exitosa\";\n?&gt;\n<\/code><\/pre>\n\n\n\n<p>C\u00f3digo generado por IA. Revisar y usar cuidadosamente.&nbsp;<a is=\"cib-link\" target=\"_blank\" href=\"https:\/\/www.bing.com\/new#faq\" rel=\"noreferrer noopener\">M\u00e1s informaci\u00f3n sobre preguntas frecuentes<\/a>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Estilo Procedural<\/h4>\n\n\n\n<p>PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n$servername = \"localhost\";\n$username = \"tu_usuario\";\n$password = \"tu_contrase\u00f1a\";\n$dbname = \"tu_base_de_datos\";\n\n\/\/ Crear conexi\u00f3n\n$conn = mysqli_connect($servername, $username, $password, $dbname);\n\n\/\/ Verificar conexi\u00f3n\nif (!$conn) {\n    die(\"Conexi\u00f3n fallida: \" . mysqli_connect_error());\n}\necho \"Conexi\u00f3n exitosa\";\n?&gt;\n<\/code><\/pre>\n\n\n\n<p>C\u00f3digo generado por IA. Revisar y usar cuidadosamente.&nbsp;<a is=\"cib-link\" target=\"_blank\" href=\"https:\/\/www.bing.com\/new#faq\" rel=\"noreferrer noopener\">M\u00e1s informaci\u00f3n sobre preguntas frecuentes<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Usando PDO<\/h3>\n\n\n\n<p>PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n$dsn = \"mysql:host=localhost;dbname=tu_base_de_datos\";\n$username = \"tu_usuario\";\n$password = \"tu_contrase\u00f1a\";\n\ntry {\n    $conn = new PDO($dsn, $username, $password);\n    \/\/ Establecer el modo de error de PDO a excepci\u00f3n\n    $conn-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);\n    echo \"Conexi\u00f3n exitosa\";\n} catch(PDOException $e) {\n    echo \"Conexi\u00f3n fallida: \" . $e-&gt;getMessage();\n}\n?&gt;\n<\/code><\/pre>\n\n\n\n<p>C\u00f3digo generado por IA. Revisar y usar cuidadosamente.&nbsp;<a is=\"cib-link\" target=\"_blank\" href=\"https:\/\/www.bing.com\/new#faq\" rel=\"noreferrer noopener\">M\u00e1s informaci\u00f3n sobre preguntas frecuentes<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Explicaci\u00f3n<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>MySQLi<\/strong>: Espec\u00edfico para MySQL y ofrece dos interfaces: orientada a objetos y procedural.<\/li>\n\n\n\n<li><strong>PDO<\/strong>: Soporta m\u00faltiples bases de datos (no solo MySQL) y usa una interfaz orientada a objetos.<\/li>\n<\/ul>\n\n\n\n<p><a href=\"https:\/\/www.bing.com\/aclick?ld=e8SRiL5uFYo7VbA3HW4yRK5jVUCUxbX-LQtM_7RAigivzVdVkm3KW-5FRfiOd2IJgF9BkXeZlruJjzMScjNvsjjEI0FZDCL90oMXfB7vut7WwwT5x6z026wZ06erxfEKz-BLtRKeItbgFkv2rhKljrTX6aJ9KswvqX6vaydadFahnmZxSO&amp;u=aHR0cHMlM2ElMmYlMmZ3d3cubW9uZ29kYi5jb20lMmZlcyUyZmxwJTJmY2xvdWQlMmZhdGxhcyUyZnRyeTQlM2Z1dG1fc291cmNlJTNkYmluZyUyNnV0bV9jYW1wYWlnbiUzZHNlYXJjaF9ic19wbF9ldmVyZ3JlZW5fYXRsYXNfY29yZV9wcm9zcC1icmFuZF9naWMtbnVsbF9lbWVhLWVzX3BzLWFsbF9kZXNrdG9wX2VzLWVzX2xlYWQlMjZ1dG1fdGVybSUzZG1vbmdvZGIlMjZ1dG1fbWVkaXVtJTNkY3BjX3BhaWRfc2VhcmNoJTI2dXRtX2FkJTNkcCUyNnV0bV9hZF9jYW1wYWlnbl9pZCUzZDY2MjgxNTA1MiUyNmFkZ3JvdXAlM2QxMzI2MDEzMzk0OTE4MDkyJTI2Y3FfY21wJTNkNjYyODE1MDUyJTI2bXNjbGtpZCUzZDJhNTlhMzNiN2Y5YzEyOTRiZmExYzVjMjU0MTlhZmVm&amp;rlid=2a59a33b7f9c1294bfa1c5c25419afef\" target=\"_blank\" rel=\"noreferrer noopener\">Ambos m\u00e9todos son seguros y eficientes, pero&nbsp;<strong>PDO<\/strong>&nbsp;es m\u00e1s flexible si planeas trabajar con diferentes tipos de bases de datos en el futuro<\/a><\/p>\n\n\n\n<p>Aqu\u00ed tienes algunos ejemplos de c\u00f3mo realizar consultas b\u00e1sicas de SQL desde PHP usando MySQLi y PDO.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Usando MySQLi<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Estilo Orientado a Objetos<\/h4>\n\n\n\n<p><strong>SELECT (Consultar datos)<\/strong><\/p>\n\n\n\n<p>PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n$servername = \"localhost\";\n$username = \"tu_usuario\";\n$password = \"tu_contrase\u00f1a\";\n$dbname = \"tu_base_de_datos\";\n\n\/\/ Crear conexi\u00f3n\n$conn = new mysqli($servername, $username, $password, $dbname);\n\n\/\/ Verificar conexi\u00f3n\nif ($conn-&gt;connect_error) {\n    die(\"Conexi\u00f3n fallida: \" . $conn-&gt;connect_error);\n}\n\n\/\/ Realizar consulta\n$sql = \"SELECT id, nombre, apellido FROM MiTabla\";\n$result = $conn-&gt;query($sql);\n\nif ($result-&gt;num_rows &gt; 0) {\n    \/\/ Salida de datos de cada fila\n    while($row = $result-&gt;fetch_assoc()) {\n        echo \"id: \" . $row&#91;\"id\"]. \" - Nombre: \" . $row&#91;\"nombre\"]. \" \" . $row&#91;\"apellido\"]. \"&lt;br&gt;\";\n    }\n} else {\n    echo \"0 resultados\";\n}\n$conn-&gt;close();\n?&gt;\n<\/code><\/pre>\n\n\n\n<p>C\u00f3digo generado por IA. Revisar y usar cuidadosamente.&nbsp;<a is=\"cib-link\" target=\"_blank\" href=\"https:\/\/www.bing.com\/new#faq\" rel=\"noreferrer noopener\">M\u00e1s informaci\u00f3n sobre preguntas frecuentes<\/a>.<\/p>\n\n\n\n<p><strong>INSERT (Insertar datos)<\/strong><\/p>\n\n\n\n<p>PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n$conn = new mysqli($servername, $username, $password, $dbname);\n\nif ($conn-&gt;connect_error) {\n    die(\"Conexi\u00f3n fallida: \" . $conn-&gt;connect_error);\n}\n\n$sql = \"INSERT INTO MiTabla (nombre, apellido, email) VALUES ('John', 'Doe', 'john@example.com')\";\n\nif ($conn-&gt;query($sql) === TRUE) {\n    echo \"Nuevo registro creado exitosamente\";\n} else {\n    echo \"Error: \" . $sql . \"&lt;br&gt;\" . $conn-&gt;error;\n}\n\n$conn-&gt;close();\n?&gt;\n<\/code><\/pre>\n\n\n\n<p>C\u00f3digo generado por IA. Revisar y usar cuidadosamente.&nbsp;<a is=\"cib-link\" target=\"_blank\" href=\"https:\/\/www.bing.com\/new#faq\" rel=\"noreferrer noopener\">M\u00e1s informaci\u00f3n sobre preguntas frecuentes<\/a>.<\/p>\n\n\n\n<p><strong>UPDATE (Actualizar datos)<\/strong><\/p>\n\n\n\n<p>PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n$conn = new mysqli($servername, $username, $password, $dbname);\n\nif ($conn-&gt;connect_error) {\n    die(\"Conexi\u00f3n fallida: \" . $conn-&gt;connect_error);\n}\n\n$sql = \"UPDATE MiTabla SET apellido='Smith' WHERE id=1\";\n\nif ($conn-&gt;query($sql) === TRUE) {\n    echo \"Registro actualizado exitosamente\";\n} else {\n    echo \"Error actualizando registro: \" . $conn-&gt;error;\n}\n\n$conn-&gt;close();\n?&gt;\n<\/code><\/pre>\n\n\n\n<p>C\u00f3digo generado por IA. Revisar y usar cuidadosamente.&nbsp;<a is=\"cib-link\" target=\"_blank\" href=\"https:\/\/www.bing.com\/new#faq\" rel=\"noreferrer noopener\">M\u00e1s informaci\u00f3n sobre preguntas frecuentes<\/a>.<\/p>\n\n\n\n<p><strong>DELETE (Eliminar datos)<\/strong><\/p>\n\n\n\n<p>PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n$conn = new mysqli($servername, $username, $password, $dbname);\n\nif ($conn-&gt;connect_error) {\n    die(\"Conexi\u00f3n fallida: \" . $conn-&gt;connect_error);\n}\n\n$sql = \"DELETE FROM MiTabla WHERE id=1\";\n\nif ($conn-&gt;query($sql) === TRUE) {\n    echo \"Registro eliminado exitosamente\";\n} else {\n    echo \"Error eliminando registro: \" . $conn-&gt;error;\n}\n\n$conn-&gt;close();\n?&gt;\n<\/code><\/pre>\n\n\n\n<p>C\u00f3digo generado por IA. Revisar y usar cuidadosamente.&nbsp;<a is=\"cib-link\" target=\"_blank\" href=\"https:\/\/www.bing.com\/new#faq\" rel=\"noreferrer noopener\">M\u00e1s informaci\u00f3n sobre preguntas frecuentes<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Usando PDO<\/h3>\n\n\n\n<p><strong>SELECT (Consultar datos)<\/strong><\/p>\n\n\n\n<p>PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n$dsn = \"mysql:host=localhost;dbname=tu_base_de_datos\";\n$username = \"tu_usuario\";\n$password = \"tu_contrase\u00f1a\";\n\ntry {\n    $conn = new PDO($dsn, $username, $password);\n    $conn-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);\n\n    $stmt = $conn-&gt;prepare(\"SELECT id, nombre, apellido FROM MiTabla\");\n    $stmt-&gt;execute();\n\n    $result = $stmt-&gt;fetchAll(PDO::FETCH_ASSOC);\n\n    foreach($result as $row) {\n        echo \"id: \" . $row&#91;\"id\"]. \" - Nombre: \" . $row&#91;\"nombre\"]. \" \" . $row&#91;\"apellido\"]. \"&lt;br&gt;\";\n    }\n} catch(PDOException $e) {\n    echo \"Error: \" . $e-&gt;getMessage();\n}\n$conn = null;\n?&gt;\n<\/code><\/pre>\n\n\n\n<p>C\u00f3digo generado por IA. Revisar y usar cuidadosamente.&nbsp;<a is=\"cib-link\" target=\"_blank\" href=\"https:\/\/www.bing.com\/new#faq\" rel=\"noreferrer noopener\">M\u00e1s informaci\u00f3n sobre preguntas frecuentes<\/a>.<\/p>\n\n\n\n<p><strong>INSERT (Insertar datos)<\/strong><\/p>\n\n\n\n<p>PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\ntry {\n    $conn = new PDO($dsn, $username, $password);\n    $conn-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);\n\n    $sql = \"INSERT INTO MiTabla (nombre, apellido, email) VALUES ('John', 'Doe', 'john@example.com')\";\n    $conn-&gt;exec($sql);\n    echo \"Nuevo registro creado exitosamente\";\n} catch(PDOException $e) {\n    echo \"Error: \" . $e-&gt;getMessage();\n}\n$conn = null;\n?&gt;\n<\/code><\/pre>\n\n\n\n<p>C\u00f3digo generado por IA. Revisar y usar cuidadosamente.&nbsp;<a is=\"cib-link\" target=\"_blank\" href=\"https:\/\/www.bing.com\/new#faq\" rel=\"noreferrer noopener\">M\u00e1s informaci\u00f3n sobre preguntas frecuentes<\/a>.<\/p>\n\n\n\n<p><strong>UPDATE (Actualizar datos)<\/strong><\/p>\n\n\n\n<p>PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\ntry {\n    $conn = new PDO($dsn, $username, $password);\n    $conn-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);\n\n    $sql = \"UPDATE MiTabla SET apellido='Smith' WHERE id=1\";\n    $stmt = $conn-&gt;prepare($sql);\n    $stmt-&gt;execute();\n\n    echo \"Registro actualizado exitosamente\";\n} catch(PDOException $e) {\n    echo \"Error: \" . $e-&gt;getMessage();\n}\n$conn = null;\n?&gt;\n<\/code><\/pre>\n\n\n\n<p>C\u00f3digo generado por IA. Revisar y usar cuidadosamente.&nbsp;<a is=\"cib-link\" target=\"_blank\" href=\"https:\/\/www.bing.com\/new#faq\" rel=\"noreferrer noopener\">M\u00e1s informaci\u00f3n sobre preguntas frecuentes<\/a>.<\/p>\n\n\n\n<p><strong>DELETE (Eliminar datos)<\/strong><\/p>\n\n\n\n<p>PHP<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\ntry {\n    $conn = new PDO($dsn, $username, $password);\n    $conn-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);\n\n    $sql = \"DELETE FROM MiTabla WHERE id=1\";\n    $conn-&gt;exec($sql);\n\n    echo \"Registro eliminado exitosamente\";\n} catch(PDOException $e) {\n    echo \"Error: \" . $e-&gt;getMessage();\n}\n$conn = null;\n?&gt;\n<\/code><\/pre>\n\n\n\n<p>C\u00f3digo generado por IA. Revisar y usar cuidadosamente.&nbsp;<a is=\"cib-link\" target=\"_blank\" href=\"https:\/\/www.bing.com\/new#faq\" rel=\"noreferrer noopener\">M\u00e1s informaci\u00f3n sobre preguntas frecuentes<\/a>.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.whtutorials.com\/tutorials\/php\/101-Executing-SQL-Queries\" target=\"_blank\" rel=\"noreferrer noopener\">Estos ejemplos cubren las operaciones b\u00e1sicas de CRUD (Crear, Leer, Actualizar, Eliminar) en PHP usando MySQLi y PDO<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>PHP est\u00e1 dise\u00f1ado para ser&nbsp;f\u00e1cil de aprender y potente en su aplicaci\u00f3n, lo que lo convierte en una opci\u00f3n popular para desarrolladores de todos los niveles. Aqu\u00ed tienes algunos aspectos b\u00e1sicos: Comentarios: Puedes agregar comentarios en tu c\u00f3digo PHP para hacerlo m\u00e1s legible. Los comentarios de una sola l\u00ednea comienzan con&nbsp;\/\/, mientras que los comentarios&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[60,62],"tags":[23,22,20,19,24,16,32,27,15,33,17,29,30,26,21,34,14,31,28],"class_list":["post-22","post","type-post","status-publish","format-standard","hentry","category-programacion","category-servidores","tag-arrays-asociativos","tag-arrays-indexados","tag-arreglo","tag-booleano","tag-clases","tag-comentarios","tag-constantes","tag-constructor","tag-etiquetas-de-php","tag-expresiones","tag-float","tag-herencia","tag-interfaces","tag-metodos","tag-objeto","tag-operadores","tag-php","tag-variables","tag-visibilidad"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>PHP - Ciencia y Tecnologia<\/title>\n<meta name=\"description\" content=\"PHP es un lenguaje de programaci\u00f3n de prop\u00f3sito general, ampliamente utilizado para el desarrollo web del lado del servidor. Fue creado por Rasmus Lerdorf en 1994 y ha evolucionado para convertirse en una de las principales herramientas para construir sitios web din\u00e1micos e interactivos.Caracter\u00edsticas Clave:Integraci\u00f3n con HTML: Se incrusta f\u00e1cilmente en p\u00e1ginas HTML, lo que permite a\u00f1adir funcionalidades din\u00e1micas sin necesidad de archivos adicionales.Bases de Datos: Ofrece una potente integraci\u00f3n con bases de datos como MySQL, PostgreSQL, y Oracle.Bibliotecas y Frameworks: Cuenta con un amplio ecosistema de bibliotecas y frameworks como Laravel, Symfony, y CodeIgniter, que aceleran el desarrollo.Comunidad Activa: Una vasta comunidad proporciona soporte, documentaci\u00f3n, y recursos en l\u00ednea.PHP es ideal tanto para principiantes como para desarrolladores avanzados que buscan crear aplicaciones web robustas y eficientes.\" \/>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP - Ciencia y Tecnologia\" \/>\n<meta property=\"og:description\" content=\"PHP es un lenguaje de programaci\u00f3n de prop\u00f3sito general, ampliamente utilizado para el desarrollo web del lado del servidor. Fue creado por Rasmus Lerdorf en 1994 y ha evolucionado para convertirse en una de las principales herramientas para construir sitios web din\u00e1micos e interactivos.Caracter\u00edsticas Clave:Integraci\u00f3n con HTML: Se incrusta f\u00e1cilmente en p\u00e1ginas HTML, lo que permite a\u00f1adir funcionalidades din\u00e1micas sin necesidad de archivos adicionales.Bases de Datos: Ofrece una potente integraci\u00f3n con bases de datos como MySQL, PostgreSQL, y Oracle.Bibliotecas y Frameworks: Cuenta con un amplio ecosistema de bibliotecas y frameworks como Laravel, Symfony, y CodeIgniter, que aceleran el desarrollo.Comunidad Activa: Una vasta comunidad proporciona soporte, documentaci\u00f3n, y recursos en l\u00ednea.PHP es ideal tanto para principiantes como para desarrolladores avanzados que buscan crear aplicaciones web robustas y eficientes.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cienciaytecnology.com\/wordpress\/php\/\" \/>\n<meta property=\"og:site_name\" content=\"Ciencia y Tecnologia\" \/>\n<meta property=\"article:published_time\" content=\"2024-05-28T17:15:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-03T18:46:27+00:00\" \/>\n<meta name=\"author\" content=\"david\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"david\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"29 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/php\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/php\\\/\"},\"author\":{\"name\":\"david\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/b76777e3c0d2d08ea263068461c90d4b\"},\"headline\":\"PHP\",\"datePublished\":\"2024-05-28T17:15:29+00:00\",\"dateModified\":\"2024-11-03T18:46:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/php\\\/\"},\"wordCount\":7340,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/b76777e3c0d2d08ea263068461c90d4b\"},\"keywords\":[\"Arrays Asociativos\",\"Arrays Indexados\",\"Arreglo\",\"Booleano\",\"Clases\",\"Comentarios\",\"constantes\",\"Constructor\",\"Etiquetas de PHP\",\"Expresiones\",\"float\",\"Herencia\",\"Interfaces\",\"metodos\",\"Objeto\",\"Operadores\",\"PHP\",\"variables\",\"Visibilidad\"],\"articleSection\":[\"Programacion\",\"Servidores\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/php\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/php\\\/\",\"url\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/php\\\/\",\"name\":\"PHP - Ciencia y Tecnologia\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#website\"},\"datePublished\":\"2024-05-28T17:15:29+00:00\",\"dateModified\":\"2024-11-03T18:46:27+00:00\",\"description\":\"PHP es un lenguaje de programaci\u00f3n de prop\u00f3sito general, ampliamente utilizado para el desarrollo web del lado del servidor. Fue creado por Rasmus Lerdorf en 1994 y ha evolucionado para convertirse en una de las principales herramientas para construir sitios web din\u00e1micos e interactivos.Caracter\u00edsticas Clave:Integraci\u00f3n con HTML: Se incrusta f\u00e1cilmente en p\u00e1ginas HTML, lo que permite a\u00f1adir funcionalidades din\u00e1micas sin necesidad de archivos adicionales.Bases de Datos: Ofrece una potente integraci\u00f3n con bases de datos como MySQL, PostgreSQL, y Oracle.Bibliotecas y Frameworks: Cuenta con un amplio ecosistema de bibliotecas y frameworks como Laravel, Symfony, y CodeIgniter, que aceleran el desarrollo.Comunidad Activa: Una vasta comunidad proporciona soporte, documentaci\u00f3n, y recursos en l\u00ednea.PHP es ideal tanto para principiantes como para desarrolladores avanzados que buscan crear aplicaciones web robustas y eficientes.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/php\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/php\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/php\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PHP\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/\",\"name\":\"Ciencia y Tecnologia\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/b76777e3c0d2d08ea263068461c90d4b\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/b76777e3c0d2d08ea263068461c90d4b\",\"name\":\"david\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/a-person-programming-with-a-computer-screen-and-code-visible.jpg\",\"url\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/a-person-programming-with-a-computer-screen-and-code-visible.jpg\",\"contentUrl\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/a-person-programming-with-a-computer-screen-and-code-visible.jpg\",\"width\":1024,\"height\":1024,\"caption\":\"david\"},\"logo\":{\"@id\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/a-person-programming-with-a-computer-screen-and-code-visible.jpg\"},\"sameAs\":[\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\"],\"url\":\"https:\\\/\\\/cienciaytecnology.com\\\/wordpress\\\/author\\\/david\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PHP - Ciencia y Tecnologia","description":"PHP es un lenguaje de programaci\u00f3n de prop\u00f3sito general, ampliamente utilizado para el desarrollo web del lado del servidor. Fue creado por Rasmus Lerdorf en 1994 y ha evolucionado para convertirse en una de las principales herramientas para construir sitios web din\u00e1micos e interactivos.Caracter\u00edsticas Clave:Integraci\u00f3n con HTML: Se incrusta f\u00e1cilmente en p\u00e1ginas HTML, lo que permite a\u00f1adir funcionalidades din\u00e1micas sin necesidad de archivos adicionales.Bases de Datos: Ofrece una potente integraci\u00f3n con bases de datos como MySQL, PostgreSQL, y Oracle.Bibliotecas y Frameworks: Cuenta con un amplio ecosistema de bibliotecas y frameworks como Laravel, Symfony, y CodeIgniter, que aceleran el desarrollo.Comunidad Activa: Una vasta comunidad proporciona soporte, documentaci\u00f3n, y recursos en l\u00ednea.PHP es ideal tanto para principiantes como para desarrolladores avanzados que buscan crear aplicaciones web robustas y eficientes.","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"es_ES","og_type":"article","og_title":"PHP - Ciencia y Tecnologia","og_description":"PHP es un lenguaje de programaci\u00f3n de prop\u00f3sito general, ampliamente utilizado para el desarrollo web del lado del servidor. Fue creado por Rasmus Lerdorf en 1994 y ha evolucionado para convertirse en una de las principales herramientas para construir sitios web din\u00e1micos e interactivos.Caracter\u00edsticas Clave:Integraci\u00f3n con HTML: Se incrusta f\u00e1cilmente en p\u00e1ginas HTML, lo que permite a\u00f1adir funcionalidades din\u00e1micas sin necesidad de archivos adicionales.Bases de Datos: Ofrece una potente integraci\u00f3n con bases de datos como MySQL, PostgreSQL, y Oracle.Bibliotecas y Frameworks: Cuenta con un amplio ecosistema de bibliotecas y frameworks como Laravel, Symfony, y CodeIgniter, que aceleran el desarrollo.Comunidad Activa: Una vasta comunidad proporciona soporte, documentaci\u00f3n, y recursos en l\u00ednea.PHP es ideal tanto para principiantes como para desarrolladores avanzados que buscan crear aplicaciones web robustas y eficientes.","og_url":"https:\/\/cienciaytecnology.com\/wordpress\/php\/","og_site_name":"Ciencia y Tecnologia","article_published_time":"2024-05-28T17:15:29+00:00","article_modified_time":"2024-11-03T18:46:27+00:00","author":"david","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"david","Tiempo de lectura":"29 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cienciaytecnology.com\/wordpress\/php\/#article","isPartOf":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/php\/"},"author":{"name":"david","@id":"https:\/\/cienciaytecnology.com\/wordpress\/#\/schema\/person\/b76777e3c0d2d08ea263068461c90d4b"},"headline":"PHP","datePublished":"2024-05-28T17:15:29+00:00","dateModified":"2024-11-03T18:46:27+00:00","mainEntityOfPage":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/php\/"},"wordCount":7340,"commentCount":0,"publisher":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/#\/schema\/person\/b76777e3c0d2d08ea263068461c90d4b"},"keywords":["Arrays Asociativos","Arrays Indexados","Arreglo","Booleano","Clases","Comentarios","constantes","Constructor","Etiquetas de PHP","Expresiones","float","Herencia","Interfaces","metodos","Objeto","Operadores","PHP","variables","Visibilidad"],"articleSection":["Programacion","Servidores"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/cienciaytecnology.com\/wordpress\/php\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/cienciaytecnology.com\/wordpress\/php\/","url":"https:\/\/cienciaytecnology.com\/wordpress\/php\/","name":"PHP - Ciencia y Tecnologia","isPartOf":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/#website"},"datePublished":"2024-05-28T17:15:29+00:00","dateModified":"2024-11-03T18:46:27+00:00","description":"PHP es un lenguaje de programaci\u00f3n de prop\u00f3sito general, ampliamente utilizado para el desarrollo web del lado del servidor. Fue creado por Rasmus Lerdorf en 1994 y ha evolucionado para convertirse en una de las principales herramientas para construir sitios web din\u00e1micos e interactivos.Caracter\u00edsticas Clave:Integraci\u00f3n con HTML: Se incrusta f\u00e1cilmente en p\u00e1ginas HTML, lo que permite a\u00f1adir funcionalidades din\u00e1micas sin necesidad de archivos adicionales.Bases de Datos: Ofrece una potente integraci\u00f3n con bases de datos como MySQL, PostgreSQL, y Oracle.Bibliotecas y Frameworks: Cuenta con un amplio ecosistema de bibliotecas y frameworks como Laravel, Symfony, y CodeIgniter, que aceleran el desarrollo.Comunidad Activa: Una vasta comunidad proporciona soporte, documentaci\u00f3n, y recursos en l\u00ednea.PHP es ideal tanto para principiantes como para desarrolladores avanzados que buscan crear aplicaciones web robustas y eficientes.","breadcrumb":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/php\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cienciaytecnology.com\/wordpress\/php\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/cienciaytecnology.com\/wordpress\/php\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/cienciaytecnology.com\/wordpress\/"},{"@type":"ListItem","position":2,"name":"PHP"}]},{"@type":"WebSite","@id":"https:\/\/cienciaytecnology.com\/wordpress\/#website","url":"https:\/\/cienciaytecnology.com\/wordpress\/","name":"Ciencia y Tecnologia","description":"","publisher":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/#\/schema\/person\/b76777e3c0d2d08ea263068461c90d4b"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cienciaytecnology.com\/wordpress\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":["Person","Organization"],"@id":"https:\/\/cienciaytecnology.com\/wordpress\/#\/schema\/person\/b76777e3c0d2d08ea263068461c90d4b","name":"david","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2024\/10\/a-person-programming-with-a-computer-screen-and-code-visible.jpg","url":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2024\/10\/a-person-programming-with-a-computer-screen-and-code-visible.jpg","contentUrl":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2024\/10\/a-person-programming-with-a-computer-screen-and-code-visible.jpg","width":1024,"height":1024,"caption":"david"},"logo":{"@id":"https:\/\/cienciaytecnology.com\/wordpress\/wp-content\/uploads\/2024\/10\/a-person-programming-with-a-computer-screen-and-code-visible.jpg"},"sameAs":["https:\/\/cienciaytecnology.com\/wordpress"],"url":"https:\/\/cienciaytecnology.com\/wordpress\/author\/david\/"}]}},"_links":{"self":[{"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/posts\/22","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/comments?post=22"}],"version-history":[{"count":12,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/posts\/22\/revisions"}],"predecessor-version":[{"id":107,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/posts\/22\/revisions\/107"}],"wp:attachment":[{"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/media?parent=22"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/categories?post=22"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cienciaytecnology.com\/wordpress\/wp-json\/wp\/v2\/tags?post=22"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}