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 "";
if($key != "subscripciones"){
echo "- " . $key . ": " . $value . "
";
}else{
echo "- Subscripciones: ";
foreach($asociaciones[$key] as $key => $value){
echo "
";
if($value){
echo "- " . $key . ": si";
}else{
echo "- " . $key . ": no";
}
}
}
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.