Sintaxis PHP ============ .. image:: /logos/logo-php.png :scale: 15% :alt: Logo PHP :align: center .. |date| date:: .. |time| date:: %H:%M Sintáxis básica de PHP 7.4 .. contents:: Índice Elementos básicos del lenguaje ############################## Instalación *********** * Instalación: ``sudo apt install php7.4`` * Extensión de archivos: **.php** Comentarios *********** * Comentarios de una sola línea: .. code-block:: php :linenos: // Comentario de una sola línea * Comentarios multilínea: .. code-block:: php :linenos: /* Este comentario tiene más de una línea. Puede servir para escribir un manual u otras cosas. */ Entrada y salida estandar ************************* Datos de entrada y salida a través de la consola y/o el navegador. .. code-block:: php :linenos: .. attention:: No existe una entrada estandar como tal, en todo caso sería mediante métodos GET, POST, etc. Estructura en php ***************** * Código PHP puro: .. code-block:: php :linenos: * código php junto a HTML: .. code-block:: php :linenos:

* También podemos cargar etiquetas HTML con PHP: .. code-block:: php :linenos: Etiqueta incrustada desde php

"; ?> .. attention:: Las líneas terminan en ; obligatóriamente. Concatenación ************* Concatenación de variables y cadenas se realiza con **.** .. code-block:: php :linenos: PHP-CLI - Comandos de PHP ************************* Comandos de PHP: * php -v: versión usada * php -m: módulos cargados * php -i: configuración de php actual * php -r: enviar código a ejecutar ej: ``echo "hola mundo"`` * php archivo.php: ejecutar un archivo php. * php -S: ejecutar servidor php ``php -S localhost:8000`` * php -S -t: establecer un directorio inicial de arrance del server: ``php -S localhost:8000 -t inicial/`` Variables y tipos de datos ########################## * Declaración, asignación y tipo: .. code-block:: php :linenos: 'Pepe', 'telefono' => 753283723 ]; ?> * Constantes: .. code-block:: php :linenos: Operadores ########## Operadores aritméticos ********************** * Operaciones aritméticas: .. code-block:: php :linenos: * Incremento y decremento: .. code-block:: php :linenos: * Asignar operación: .. code-block:: php :linenos: Operadores relacionales *********************** Validación entre dos números. * Mayor que: **>**. * Menor que: **<**. * Mayor o igual que: **>=**. * Menor o igual que: **<=**. * Igual que: **==**. Operadores lógicos ****************** Expresiones de operaciones lógicas. * and: **&&**. * or: **||**. * not: **!**. Estructuras de control ###################### Condicional if ************** * if sencillo: .. code-block:: php :linenos: = 18){ echo "Eres mayor de edad"; } ?> * if / else: .. code-block:: php :linenos: = 18){ echo "Eres mayor de edad"; }else{ echo "Eres menor de edad"; } ?> * else-if: .. code-block:: php :linenos: = 65){ echo "Eres un anciano"; } else if($edad >= 18){ echo "Eres mayor de edad"; }else{ echo "Eres menor de edad"; } ?> * if alternativo: .. code-block:: php :linenos: = 65): echo "Eres un anciano"; else if($edad >= 18): echo "Eres mayor de edad"; else: echo "Eres menor de edad"; endif; ?> .. note:: Aparte de este if, existe for, foreach y while que comparten la misma forma de operar. * Operador ternario: .. code-block:: php :linenos: = 18 ? "Eres mayor de edad" : "Eres menor de edad"; echo $comprobarEdad; ?> Condicional Switch ****************** Estructura de un switch: .. code-block:: php :linenos: Bucle for ********* * for básico: .. code-block:: php :linenos: * foreach: .. code-block:: php :linenos: "; } ?> * foreach clave / valor: .. code-block:: php :linenos: "Nevera", "modelo" => "FX27", "marca" => "Fagor", "precio" => 783.23 ]; foreach($elecrodomesticos as $key => $value){ echo $key . ": " . $value . "
"; } ?> Bucle while *********** * While sencillo: .. code-block:: php :linenos: * do-while: .. code-block:: php :linenos: Detener secuenda de script ************************** .. code-block:: php :linenos: Tipos de datos avanzados ######################## Arrays ****** - Declaración tradicional: .. code-block:: php :linenos: - Declaración con función array(): .. code-block:: php :linenos: - Array multidimensional: .. code-block:: php :linenos: "; foreach($operadores as $key => $value){ echo ""; foreach($operadores[$key] as $operador){ echo "" . $operador . ""; } echo ""; } echo ""; ?> * Imprimir y asignar valores: .. code-block:: php :linenos: Arrays asociativos ****************** - Declaración tradicional: .. code-block:: php :linenos: "valor", "nombre" => "Paco", "edad" => 27, "peso" => 77.32, "cuota" => true ]; ?> - Declaración con función array(): .. code-block:: php :linenos: "valor", "nombre" => "Paco", "edad" => 27, "peso" => 77.32, "cuota" => true ); ?> - Array multidimensional: .. code-block:: php :linenos: "valor", "nombre" => "Paco", "edad" => 27, "peso" => 77.32, "cuota" => true, "subscripciones" => [ "netflix" => true, "hbo" => false, "prime" => true ] ]; foreach($asociaciones as $key => $value){ echo ""; } ?> - Imprimir y asignar valores: .. code-block:: php :linenos: Control de errores ################## .. code-block:: php :linenos: getMessage(); }finally{ echo "Cerrando BD"; } ?> Programación modular #################### Funciones ********* * Procedimienos: .. code-block:: php :linenos: * funciones: .. code-block:: php :linenos: * uso de parámetros: .. code-block:: php :linenos: * Funciones anónimas: .. code-block:: php :linenos: * Ámbito global: .. code-block:: php :linenos: Programación orientada a objetos ################################ Los elementos de una clase se definen con ámbito **public**, **private** y **protected**. Adicionalmente se puede agregar el modificador **static** para poder acceder a los atributos y métodos sin crear un objeto. Clases y objetos **************** * Estructura clase: .. code-block:: php :linenos: marca . " " . $this->modelo; } } // crear objeto: $megaDrive = new Videoconsola; // recuperar atributo: echo $megaDrive->marca . "
"; // recuperar métodos: $megaDrive->descripcion(); ?> * Constructor: .. code-block:: php :linenos: modelo = $modelo; $this->marca = $marca; echo "Se ha creado el objeto"; echo "
"; } function descripcion(){ echo "Es una " . $this->marca . " " . $this->modelo; } } // crear objeto con parámetros: $playStation = new Videoconsola("PlayStation", "Sony"); $playStation->descripcion(); ?> * Get y Set: .. code-block:: php :linenos: modelo = $modelo; $this->marca = $marca; echo "Se ha creado el objeto"; echo "
"; } // get: function getModelo(){ return $this->modelo; } function getMarca(){ return $this->marca; } // set: public function setModelo($valor){ $this->modelo = $valor; } public function setMarca($valor){ $this->marca = $valor; } function descripcion(){ echo "Es una " . $this->marca . " " . $this->modelo; } } $playStation = new Videoconsola("PlayStation", "Sony"); echo $playStation->getMarca() . "
"; $playStation->setModelo("PlayStation 5"); echo $playStation->getModelo(); ?> * Herencia: .. code-block:: php :linenos: modelo = $modelo; $this->marca = $marca; echo "Se ha creado el objeto"; echo "
"; } function descripcion(){ echo "Es una " . $this->marca . " " . $this->modelo; } } class SuperNintendo extends Videoconsola{ function __construct(){ $this->modelo = "SNES"; $this->marca = "Nintendo"; } } $superNintendo = new SuperNintendo; $superNintendo->descripcion(); ?> Clases abstractas y resolución de ámbito **************************************** - uso de clases no instanciables: .. code-block:: php :linenos: modelo = $modelo; $this->marca = $marca; echo "Se ha creado el objeto"; echo "
"; } public static function juegos(){ echo "La consola dispone de alrededor de 700 títulos"; } // las funciones abstractas se deben usar obligatoriamente en la clase hija: abstract function precio(); } // clase a partir de clase abstracta: class SuperNintendo extends Videoconsola{ function __construct(){ $this->modelo = "SNES"; $this->marca = "Nintendo"; } function precio(){ echo "La consola cuesta 200 €"; } } // uso de clase hija: $superNintendo = new SuperNintendo; echo $superNintendo->modelo; echo "
"; $superNintendo->precio(); echo "
"; // resolución de ámbito: echo Videoconsola::$modelo; echo "
"; Videoconsola::juegos(); ?> Interfaces ********** .. code-block:: php :linenos: modelo = $modelo; $this->marca = $marca; $this->precio = $precio; } function descripcion(){ echo "Es la consola " . $this->modelo . " de " . $this->marca . "
"; } function precio(){ echo "La consola cuesta: " . $this->precio . " €"; } } $neoGeo = new NeoGeo("Neo Geo Pocket", "SNK", 149.99); $neoGeo->descripcion(); $neoGeo->precio(); ?> Importar y exportar ################### include y require ***************** * Importar archivos php: .. code-block:: php :linenos: Namespace ********* * Exportar (videojuegos.php): .. code-block:: php :linenos: marca . " " . $this->modelo; } } function tipo(){ echo "Es un sistema de tipo Videoconsola doméstica"; } } namespace Arcade{ // las constantes solo se pueden definir con const: const cabina = "Bartop"; class Sistema { public $modelo = "Naomi"; public $marca = "Sega"; function descripcion(){ echo "Es una placa" . $this->marca . " " . $this->modelo; } } } ?> * Importar namespace (index.php): .. code-block:: php :linenos: "; $megaDrive = new Videoconsola; $megaDrive->descripcion(); echo "
"; tipo(); echo "
"; $naomi = new Arcade; $naomi->descripcion(); ?> .. note:: Los namespace se pueden declarar sin el uso de llave.