Sintaxis PHP#

Logo PHP

Sintáxis básica de PHP 7.4

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:

1// Comentario de una sola línea
  • Comentarios multilínea:

1/* Este comentario
2tiene más de una línea.
3Puede servir para escribir
4un manual u otras cosas.
5*/

Entrada y salida estandar#

Datos de entrada y salida a través de la consola y/o el navegador.

1<?php
2    // echo:
3    echo "hola mundo";
4
5    // print:
6    print("Hola mundo");
7?>

Atención

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:

1<?php
2    $variable = 20;
3
4    if($valor == 20){
5        echo "el valor es igual";
6    }
7?>
  • código php junto a HTML:

 1<?php
 2    $titulo = "practicando PHP";
 3?>
 4
 5<html>
 6    <head>
 7    </head>
 8    <body>
 9        <h1><?php echo $titulo; ?></h1>
10    </body>
11</html>
  • También podemos cargar etiquetas HTML con PHP:

1<?php
2    echo "<p>Etiqueta incrustada desde php</p>";
3?>

Atención

Las líneas terminan en ; obligatóriamente.

Concatenación#

Concatenación de variables y cadenas se realiza con .

1<?php
2    echo "cadena concatenada a " . "otra cadena";
3
4    echo "resultado en variable: " . $variable;
5?>

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:

 1<?php
 2    $cadena = "Cadena de texto";
 3    $entero = 27;
 4    $decimal = 23.27;
 5    $booleano = true; // false
 6    $array = ['datos', 2, 3.2, false];
 7    $array_asociativo = [
 8        'nombre' => 'Pepe',
 9        'telefono' => 753283723
10    ];
11
12?>
  • Constantes:

1<?php
2    // funcion define:
3    define("CONSTANTE", "valor de la misma");
4    echo CONSTANTE;
5
6    // palabra reservada const:
7    const constante = "valor de la constante";
8    echo constante;
9?>

Operadores#

Operadores aritméticos#

  • Operaciones aritméticas:

1<?php
2    $sumar = 3 + 6;
3    $restar = 7 * 9;
4    $multiplicar = 11 * 6;
5    $dividir = 13 / 20;
6    $resto = 54 % 7;
7?>
  • Incremento y decremento:

1<?php
2    $i++;
3    ++$i;
4    --$i;
5    $i--;
6?>
  • Asignar operación:

1<?php
2    // la variable debe tener un valor asignado:
3    $resultado = 0
4
5    $resultado += 12;
6    $resultado -= 16;
7    $resultado *= 19;
8    $resultado /= 6;
9?>

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:

1<?php
2    $edad = 18;
3
4    if($edad >= 18){
5        echo "Eres mayor de edad";
6    }
7?>
  • if / else:

1<?php
2    $edad = 15;
3
4    if($edad >= 18){
5        echo "Eres mayor de edad";
6    }else{
7        echo "Eres menor de edad";
8    }
9?>
  • else-if:

 1<?php
 2    $edad = 45;
 3
 4    if($edad >= 65){
 5        echo "Eres un anciano";
 6    }
 7    else if($edad >= 18){
 8        echo "Eres mayor de edad";
 9    }else{
10        echo "Eres menor de edad";
11    }
12?>
  • if alternativo:

 1<?php
 2    $edad = 73;
 3
 4    if($edad >= 65):
 5        echo "Eres un anciano";
 6    else if($edad >= 18):
 7        echo "Eres mayor de edad";
 8    else:
 9        echo "Eres menor de edad";
10    endif;
11?>

Nota

Aparte de este if, existe for, foreach y while que comparten la misma forma de operar.

  • Operador ternario:

1<?php
2    $edad = 35;
3    $comprobarEdad = $edad >= 18 ? "Eres mayor de edad" : "Eres menor de edad";
4
5    echo $comprobarEdad;
6?>

Condicional Switch#

Estructura de un switch:

 1<?php
 2    $color = "verde";
 3
 4    switch($color){
 5        case ("rojo"):
 6            echo "El color es rojo";
 7            break;
 8        case ("verde"):
 9            echo "El color es verde";
10            break;
11        case ("azul"):
12            echo "El color es azul";
13            break
14        default:
15            echo "No se reconoce el color";
16    }
17?>

Bucle for#

  • for básico:

1<?php
2    for($i = 0; $i <= 10; $i++){
3        echo "Repetición nº " . $i;
4    }
5?>
  • foreach:

1<?php
2    $electrodomesticos = ["lavadora","nevera","microondas"];
3
4    foreach($elecrodomesticos as $aparato){
5        echo $aparato . "<br>";
6    }
7?>
  • foreach clave / valor:

 1<?php
 2    $electrodomesticos = [
 3        "producto" => "Nevera",
 4        "modelo" => "FX27",
 5        "marca" => "Fagor",
 6        "precio" => 783.23
 7    ];
 8
 9    foreach($elecrodomesticos as $key => $value){
10        echo $key . ": " . $value . "<br>";
11    }
12?>

Bucle while#

  • While sencillo:

1<?php
2    $num = 0;
3
4    while($num < 10){
5        echo "código de mensaje - " . $num;
6        $num++;
7    }
8?>
  • do-while:

1<?php
2    $num = 0;
3
4    do{
5        echo "código de mensaje - " . $num;
6        $num++;
7    }
8    while($num < 10);
9?>

Detener secuenda de script#

1<?php
2    for($i = 0; $i <= 10; $i++){
3        if($i == 5){
4            echo "Ya has llegado a 5 y no más";
5            die;
6        }
7    }
8    echo "Esta frase no se mostrará";
9?>

Tipos de datos avanzados#

Arrays#

  • Declaración tradicional:

1<?php
2    $arreglo = ["cadena", 20, 18.27, false, ["otra cadena", 23, 18.77]];
3?>
  • Declaración con función array():

1<?php
2    $arreglo = array("cadena", 20, 18.27, false);
3?>
  • Array multidimensional:

 1<?php
 2    $operadores = array(
 3        ["OPERADOR", "DENOMINACIÓN"],
 4        ["suma", "+"],
 5        ["resta", "-"],
 6        ["multiplicación", "*"],
 7        ["división", "/"],
 8        ["resto", "%"]
 9    );
10
11    // ejemplo recorrido array multidimensional:
12    echo "<table border=1>";
13
14    foreach($operadores as $key => $value){
15        echo "<tr>";
16        foreach($operadores[$key] as $operador){
17            echo "<td>" . $operador . "</td>";
18        }
19        echo "</tr>";
20    }
21
22    echo "</table>";
23?>
  • Imprimir y asignar valores:

1<?php
2    echo $arreglo[2];
3    $arreglo[2] = "Veinte";
4?>

Arrays asociativos#

  • Declaración tradicional:

1<?php
2    $asociaciones = [
3        "clave" => "valor",
4        "nombre" => "Paco",
5        "edad" => 27,
6        "peso" => 77.32,
7        "cuota" => true
8    ];
9?>
  • Declaración con función array():

1<?php
2    $asociaciones = array(
3        "clave" => "valor",
4        "nombre" => "Paco",
5        "edad" => 27,
6        "peso" => 77.32,
7        "cuota" => true
8    );
9?>
  • Array multidimensional:

 1<?php
 2    $asociaciones = [
 3        "clave" => "valor",
 4        "nombre" => "Paco",
 5        "edad" => 27,
 6        "peso" => 77.32,
 7        "cuota" => true,
 8        "subscripciones" => [
 9            "netflix" => true,
10            "hbo" => false,
11            "prime" => true
12        ]
13    ];
14
15    foreach($asociaciones as $key => $value){
16        echo "<ul>";
17            if($key != "subscripciones"){
18                echo "<li>" . $key . ": " . $value . "</li>";
19            }else{
20                echo "<li>Subscripciones: ";
21                foreach($asociaciones[$key] as $key => $value){
22                    echo "<br>";
23                    if($value){
24                        echo "- " . $key . ": si";
25                    }else{
26                        echo "- " . $key . ": no";
27                    }
28                }
29            }
30        echo "</ul>";
31    }
32?>
  • Imprimir y asignar valores:

1<?php
2    echo $asociaciones["nombre"];
3    $arreglo["subscripciones"]["netflix"] = "subscrito";
4?>

Control de errores#

1<?php
2    try{
3        throw new Exception(" No existe archivo de configuracion ");
4    }catch(Exception $e){
5        echo " Hubo un error" . $e->getMessage();
6    }finally{
7        echo "Cerrando BD";
8    }
9?>

Programación modular#

Funciones#

  • Procedimienos:

1<?php
2    function saludar(){
3        echo "Hola persona";
4    }
5
6    saludar();
7?>
  • funciones:

1<?php
2    function saludar(){
3        return "Hola persona";
4    }
5
6    echo saludar();
7?>
  • uso de parámetros:

1<?php
2    function saludar($nombre){
3        return "Hola " . $nombre;
4    }
5
6    echo saludar("Pepe");
7?>
  • Funciones anónimas:

1<?php
2    $tuNombre = function($nombre){
3        return "Hola ". $nombre;
4    };
5
6    echo $tuNombre("Pepe");
7?>
  • Ámbito global:

 1<?php
 2    $nombre = "alberto";
 3
 4    $saludar = function(){
 5        global $nombre;
 6        return "¿Qué tal " . $nombre . "?";
 7    };
 8
 9    echo $saludar();
10?>

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:

 1<?php
 2    class Videoconsola {
 3        // atributos con ámbito obligatorio:
 4        public $modelo = "Mega Drive";
 5        public $marca = "Sega";
 6
 7        // métodos con ambito public por defecto:
 8        function descripcion(){
 9            echo "Es una " . $this->marca . " " . $this->modelo;
10        }
11    }
12
13    // crear objeto:
14    $megaDrive = new Videoconsola;
15
16    // recuperar atributo:
17    echo $megaDrive->marca . "<br>";
18
19    // recuperar métodos:
20    $megaDrive->descripcion();
21?>
  • Constructor:

 1<?php
 2    class Videoconsola {
 3        public $modelo;
 4        public $marca;
 5
 6        // constructor:
 7        function __construct($modelo, $marca){
 8            $this->modelo = $modelo;
 9            $this->marca = $marca;
10
11            echo "Se ha creado el objeto";
12            echo "<br>";
13        }
14
15        function descripcion(){
16            echo "Es una " . $this->marca . " " . $this->modelo;
17        }
18    }
19
20    // crear objeto con parámetros:
21    $playStation = new Videoconsola("PlayStation", "Sony");
22
23    $playStation->descripcion();
24
25?>
  • Get y Set:

 1<?php
 2    class Videoconsola {
 3        // métodos privados:
 4        private $modelo;
 5        private $marca;
 6
 7        function __construct($modelo, $marca){
 8            $this->modelo = $modelo;
 9            $this->marca = $marca;
10
11            echo "Se ha creado el objeto";
12            echo "<br>";
13        }
14
15        // get:
16        function getModelo(){
17            return $this->modelo;
18        }
19
20        function getMarca(){
21            return $this->marca;
22        }
23
24        // set:
25        public function setModelo($valor){
26            $this->modelo = $valor;
27        }
28
29        public function setMarca($valor){
30            $this->marca = $valor;
31        }
32
33        function descripcion(){
34            echo "Es una " . $this->marca . " " . $this->modelo;
35        }
36    }
37
38    $playStation = new Videoconsola("PlayStation", "Sony");
39
40    echo $playStation->getMarca() . "<br>";
41
42    $playStation->setModelo("PlayStation 5");
43    echo $playStation->getModelo();
44?>
  • Herencia:

 1<?php
 2    class Videoconsola {
 3        public $modelo;
 4        public $marca;
 5
 6        function __construct($modelo, $marca){
 7            $this->modelo = $modelo;
 8            $this->marca = $marca;
 9
10            echo "Se ha creado el objeto";
11            echo "<br>";
12        }
13
14        function descripcion(){
15            echo "Es una " . $this->marca . " " . $this->modelo;
16        }
17    }
18
19    class SuperNintendo extends Videoconsola{
20        function __construct(){
21            $this->modelo = "SNES";
22            $this->marca = "Nintendo";
23        }
24    }
25
26    $superNintendo = new SuperNintendo;
27
28    $superNintendo->descripcion();
29?>

Clases abstractas y resolución de ámbito#

  • uso de clases no instanciables:

 1<?php
 2    abstract class Videoconsola {
 3        public static $modelo = "Super Nintendo";
 4        public $marca;
 5
 6        function __construct($modelo, $marca){
 7            $this->modelo = $modelo;
 8            $this->marca = $marca;
 9
10            echo "Se ha creado el objeto";
11            echo "<br>";
12        }
13
14        public static function juegos(){
15            echo "La consola dispone de alrededor de 700 títulos";
16        }
17
18        // las funciones abstractas se deben usar obligatoriamente en la clase hija:
19        abstract function precio();
20    }
21
22    // clase a partir de clase abstracta:
23    class SuperNintendo extends Videoconsola{
24        function __construct(){
25            $this->modelo = "SNES";
26            $this->marca = "Nintendo";
27        }
28
29        function precio(){
30            echo "La consola cuesta 200 €";
31        }
32    }
33
34    // uso de clase hija:
35    $superNintendo = new SuperNintendo;
36    echo $superNintendo->modelo;
37    echo "<br>";
38    $superNintendo->precio();
39    echo "<br>";
40
41    // resolución de ámbito:
42    echo Videoconsola::$modelo;
43    echo "<br>";
44    Videoconsola::juegos();
45?>

Interfaces#

 1<?php
 2    interface Videoconsola{
 3        function descripcion();
 4        function precio();
 5    }
 6
 7    class NeoGeo implements Videoconsola{
 8        public $modelo;
 9        public $marca;
10        public $precio;
11
12        function __construct($modelo, $marca, $precio){
13            $this->modelo = $modelo;
14            $this->marca = $marca;
15            $this->precio = $precio;
16        }
17
18        function descripcion(){
19            echo "Es la consola " . $this->modelo . " de " . $this->marca . "<br>";
20        }
21        function precio(){
22            echo "La consola cuesta: " . $this->precio . " €";
23        }
24    }
25
26    $neoGeo = new NeoGeo("Neo Geo Pocket", "SNK", 149.99);
27    $neoGeo->descripcion();
28    $neoGeo->precio();
29?>

Importar y exportar#

include y require#

  • Importar archivos php:

 1<?php
 2    // incluir archivo php:
 3    include 'ruta/archivo.php';
 4
 5    // incluir obligatorio:
 6    require("ruta/archivo.php");
 7
 8    // incluir y no repetir:
 9    include_once 'ruta/archivo.php';
10
11    // incluir obligatorio y no repetir:
12    require_once("ruta/archivo.php");
13?>

Namespace#

  • Exportar (videojuegos.php):

     1<?php
     2
     3    namespace Videoconsola{
     4
     5        // las constantes solo se pueden definir con const:
     6        const generacion = "5ª Generación";
     7
     8        class Sistema {
     9            public $modelo = "Mega Drive";
    10            public $marca = "Sega";
    11
    12            function descripcion(){
    13                echo "Es una " . $this->marca . " " . $this->modelo;
    14            }
    15        }
    16
    17        function tipo(){
    18            echo "Es un sistema de tipo Videoconsola doméstica";
    19        }
    20    }
    21
    22    namespace Arcade{
    23
    24        // las constantes solo se pueden definir con const:
    25        const cabina = "Bartop";
    26
    27        class Sistema {
    28            public $modelo = "Naomi";
    29            public $marca = "Sega";
    30
    31            function descripcion(){
    32                echo "Es una placa" . $this->marca . " " . $this->modelo;
    33            }
    34        }
    35    }
    36?>
    
  • Importar namespace (index.php):

     1<?php
     2    include 'videojuegos.php';
     3
     4    // cargar cada namespace:
     5    use const Videoconsola\generacion;
     6    use Videoconsola\Sistema as Videoconsola;
     7    use function Videoconsola\tipo as tipo;
     8
     9    use Arcade\Sistema as Arcade;
    10
    11    echo generacion . "<br>";
    12    $megaDrive = new Videoconsola;
    13    $megaDrive->descripcion();
    14    echo "<br>";
    15    tipo();
    16    echo "<br>";
    17
    18    $naomi = new Arcade;
    19    $naomi->descripcion();
    20?>
    

Nota

Los namespace se pueden declarar sin el uso de llave.