Os dejo un hilo de comentario



La línea de código include 'includes/header.php'; en PHP se utiliza para incluir el contenido de un archivo PHP dentro de otro archivo PHP. En este caso específico, se está incluyendo el archivo header.php que se encuentra en la carpeta includes.

La función include en PHP se utiliza para insertar el contenido de un archivo en otro archivo. Cuando se ejecuta esta línea de código, el intérprete de PHP buscará el archivo especificado (header.php) y lo incorporará en el lugar donde se encuentra la línea de código.

Esta técnica es comúnmente utilizada para separar el código en archivos más pequeños y reutilizables. Por ejemplo, en un proyecto de página web, el archivo header.php podría contener la estructura HTML del encabezado de la página (como la etiqueta <header>, el logo, el menú de navegación, etc.), y mediante el uso de include 'includes/header.php';, se puede agregar ese contenido en múltiples archivos PHP sin necesidad de repetir el código en cada uno.

De esta manera, el código se vuelve más modular, fácil de mantener y se evita la repetición de código. Además, si se realizan cambios en el archivo header.php, se reflejarán automáticamente en todos los archivos que lo incluyen.

Es importante asegurarse de que la ruta del archivo sea correcta y esté accesible desde el archivo en el que se realiza la inclusión.

 

 

La línea de código include 'includes/footer.php'; en PHP se utiliza para incluir el contenido de otro archivo PHP, en este caso el archivo footer.php, dentro del archivo actual.

Al igual que en el caso anterior, la función include se encarga de buscar el archivo especificado (footer.php) en la ubicación indicada (includes/) y lo incorpora en el lugar donde se encuentra la línea de código.

Usar include 'includes/footer.php'; es una práctica común para incluir el contenido del pie de página en múltiples archivos PHP. Esto ayuda a mantener una estructura de código modular y evita la repetición de código. Por ejemplo, el archivo footer.php podría contener información como derechos de autor, enlaces de navegación adicionales o código JavaScript relacionado con el pie de página.

Al igual que con cualquier inclusión de archivo, es importante asegurarse de que la ruta del archivo sea correcta y esté accesible desde el archivo en el que se realiza la inclusión.


 

Utilizando un contrunstor – datos de un formulario




<?Php

class Persona {

    private $nombre;

    private $edad;

 

    public function __construct($nombre, $edad) {

        $this->nombre = $nombre;

        $this->edad = $edad;

    }

 

    public function saludar() {

        echo "Hola, mi nombre es " . $this->nombre . " y tengo " . $this->edad . " años.";

    }

}

 

// Creación de un objeto de la clase Persona utilizando el constructor

$persona = new Persona("Juan", 30);

 

// Llamada al método saludar

$persona->saludar();

?>

 

En este código PHP, se define la clase Persona con dos atributos privados: $nombre y $edad. La clase también tiene un constructor __construct() que recibe dos parámetros ($nombre y $edad) y asigna esos valores a los atributos correspondientes de la clase.

El método público saludar() se utiliza para mostrar un mensaje de saludo que incluye el nombre y la edad de la persona.

Después de definir la clase, se crea un objeto de la clase Persona llamado $persona utilizando el constructor. Se le pasan los valores "Juan" y 30 como argumentos.

Finalmente, se llama al método saludar() del objeto $persona, que muestra el mensaje "Hola, mi nombre es Juan y tengo 30 años.".

La encapsulación se aplica al hacer los atributos $nombre y $edad privados, lo que significa que no se puede acceder a ellos directamente desde fuera de la clase. Sin embargo, se proporciona un método público (saludar()) para acceder a los valores y mostrarlos.

Esta estructura de clase con atributos privados y métodos públicos es común en la programación orientada a objetos para proteger y controlar el acceso a los datos internos de un objeto, promoviendo así la encapsulación y la modularidad del código.

 

Otro ejemplo de construct pero con string, int y bool




class Usuario {

    private $nombre;

    private $edad;

    private $activo;

 

    public function __construct(string $nombre, int $edad, bool $activo) {

        $this->nombre = $nombre;

        $this->edad = $edad;

        $this->activo = $activo;

    }

 

    public function getInfo() {

        $estado = $this->activo ? 'activo' : 'inactivo';

        return "Nombre: {$this->nombre}, Edad: {$this->edad}, Estado: {$estado}";

    }

}

 

// Creación de un objeto de la clase Usuario utilizando el constructor

$usuario = new Usuario("Juan", 30, true);

 

// Llamada al método getInfo

echo $usuario->getInfo();

 

En este ejemplo, se define la clase Usuario con tres propiedades privadas: $nombre de tipo string, $edad de tipo int y $activo de tipo bool.

El constructor __construct recibe tres parámetros: $nombre de tipo string, $edad de tipo int y $activo de tipo bool. Se utilizan los tipos de datos especificados en la declaración del constructor para asegurar que los valores pasados cumplan con el tipo esperado.

Dentro del constructor, se asignan los valores de los parámetros a las propiedades correspondientes de la clase.

El método getInfo devuelve una cadena de texto que contiene la información del usuario, incluyendo el nombre, la edad y el estado (activo o inactivo) basado en la propiedad $activo.

Después de definir la clase, se crea un objeto de la clase Usuario llamado $usuario utilizando el constructor. Se le pasan los valores "Juan" (string), 30 (int) y true (bool) como argumentos.

Finalmente, se llama al método getInfo del objeto $usuario para obtener la información del usuario y se muestra en pantalla.

Este ejemplo ilustra cómo un constructor puede recibir diferentes tipos de datos como parámetros y utilizarlos para inicializar las propiedades de la clase.

 

Creación de métodos




class Calculadora {

    public function sumar($a, $b) {

        return $a + $b;

    }

 

    public function restar($a, $b) {

        return $a - $b;

    }

 

    public function multiplicar($a, $b) {

        return $a * $b;

    }

 

    public function dividir($a, $b) {

        if ($b != 0) {

            return $a / $b;

        } else {

            return "Error: división por cero";

        }

    }

}

 

// Creación de un objeto de la clase Calculadora

$calculadora = new Calculadora();

 

// Llamada a los métodos de la calculadora

echo "Suma: " . $calculadora->sumar(5, 3) . "<br>";

echo "Resta: " . $calculadora->restar(8, 2) . "<br>";

echo "Multiplicación: " . $calculadora->multiplicar(4, 6) . "<br>";

echo "División: " . $calculadora->dividir(10, 2) . "<br>";

echo "División: " . $calculadora->dividir(8, 0) . "<br>"; // Esto generará un error de división por cero

 

Métodos estáticos



class MathUtil {

    public static function sumar($a, $b) {

        return $a + $b;

    }

 

    public static function restar($a, $b) {

        return $a - $b;

    }

}

 

// Llamada a los métodos estáticos sin crear un objeto

echo "Suma: " . MathUtil::sumar(5, 3) . "<br>";

echo "Resta: " . MathUtil::restar(8, 2) . "<br>";

 

En este ejemplo, se crea la clase MathUtil que tiene dos métodos estáticos: sumar y restar. Estos métodos pueden ser llamados directamente desde la clase sin necesidad de crear un objeto.

Para definir un método estático, se utiliza la palabra clave static antes de la declaración del método. Dentro del método, no se puede acceder a las propiedades de instancia de la clase, ya que no hay una instancia específica asociada.

Para llamar a un método estático, se utiliza la sintaxis NombreDeClase::nombreDelMetodo(). En el ejemplo, se llama a los métodos estáticos sumar y restar utilizando MathUtil::sumar() y MathUtil::restar() respectivamente.

Los métodos estáticos son útiles cuando necesitas tener funcionalidad asociada a la clase en sí misma y no a instancias individuales de la clase. Se utilizan con frecuencia para crear utilidades, funciones auxiliares o métodos de fábrica que no dependen de un estado específico de la instancia.

 

Herencia de clases



class Animal {

    protected $nombre;

    protected $edad;

 

    public function __construct($nombre, $edad) {

        $this->nombre = $nombre;

        $this->edad = $edad;

    }

 

    public function comer() {

        echo "El animal está comiendo.";

    }

 

    public function dormir() {

        echo "El animal está durmiendo.";

    }

}

 

class Perro extends Animal {

    private $raza;

 

    public function __construct($nombre, $edad, $raza) {

        parent::__construct($nombre, $edad);

        $this->raza = $raza;

    }

 

    public function ladrar() {

        echo "El perro está ladrando.";

    }

}

 

// Creación de un objeto de la clase Perro

$perro = new Perro("Max", 5, "Labrador");

 

// Acceso a los métodos de la clase Animal (heredados)

$perro->comer();   // Método de la clase Animal

$perro->dormir();  // Método de la clase Animal

 

// Acceso a los métodos de la clase Perro

$perro->ladrar();  // Método específico de la clase Perro

 

En este ejemplo, se define la clase base Animal, que tiene dos propiedades protegidas: $nombre y $edad. También tiene dos métodos públicos: comer() y dormir().

Luego, se define la clase Perro, que extiende la clase Animal utilizando la palabra clave extends. La clase Perro agrega una propiedad privada $raza y un método público ladrar().

Dentro del constructor de la clase Perro, se utiliza parent::__construct() para llamar al constructor de la clase Animal y pasar los valores correspondientes.

Cuando se crea un objeto de la clase Perro, se heredan automáticamente las propiedades y métodos de la clase Animal. Esto significa que el objeto $perro puede acceder a los métodos comer() y dormir() definidos en la clase Animal, así como al método ladrar() específico de la clase Perro.

La herencia de clases permite compartir código y comportamiento común entre diferentes clases, evitando la duplicación de código y promoviendo la reutilización. Además, las clases derivadas pueden extender y personalizar el comportamiento de la clase base, añadiendo propiedades y métodos adicionales según sea necesario.

 

 

Clases abstractas



abstract class Figura {

    protected $color;

 

    public function __construct($color) {

        $this->color = $color;

    }

 

    abstract public function calcularArea();

}

 

class Circulo extends Figura {

    private $radio;

 

    public function __construct($color, $radio) {

        parent::__construct($color);

        $this->radio = $radio;

    }

 

    public function calcularArea() {

        return pi() * pow($this->radio, 2);

    }

}

 

class Rectangulo extends Figura {

    private $base;

    private $altura;

 

    public function __construct($color, $base, $altura) {

        parent::__construct($color);

        $this->base = $base;

        $this->altura = $altura;

    }

 

    public function calcularArea() {

        return $this->base * $this->altura;

    }

}

 

// Creación de objetos de las clases concretas

$circulo = new Circulo("Rojo", 5);

$rectangulo = new Rectangulo("Azul", 4, 6);

 

// Llamada a los métodos específicos de cada clase

echo "Área del círculo: " . $circulo->calcularArea() . "<br>";

echo "Área del rectángulo: " . $rectangulo->calcularArea();

 

En este ejemplo, se define la clase abstracta Figura con una propiedad protegida $color y un método abstracto calcularArea(). El método abstracto no tiene implementación en la clase abstracta, sino que se implementa en las clases concretas que heredan de ella.

La clase Figura es una abstracción general que representa una figura geométrica genérica. No se pueden crear objetos directamente de una clase abstracta, por lo que no se puede hacer $figura = new Figura().

Luego, se definen dos clases concretas Circulo y Rectangulo que heredan de la clase abstracta Figura. Estas clases implementan el método calcularArea() de acuerdo con las fórmulas específicas de cada figura geométrica.

Se crean objetos de las clases Circulo y Rectangulo y se llama al método calcularArea() para calcular el área de cada figura. Los resultados se muestran en pantalla.

La clase abstracta Figura proporciona una estructura común y un contrato para las clases derivadas, asegurando que todas las clases que heredan de ella implementen el método calcularArea(). La utilización de una clase abstracta permite definir comportamiento común y forzar la implementación de métodos específicos en las clases hijas.

 

Interfaces





Una interfaz es una forma de definir un conjunto de métodos que una clase debe implementar. Puedes definir una interfaz utilizando la palabra clave interface.

 

interface Animal {

    public function hacerSonido();

    public function moverse();

}

 

class Perro implements Animal {

    public function hacerSonido() {

        echo "El perro hace: ¡Guau! <br>";

    }

 

    public function moverse() {

        echo "El perro se mueve corriendo. <br>";

    }

}

 

class Gato implements Animal {

    public function hacerSonido() {

        echo "El gato hace: ¡Miau! <br>";

    }

 

    public function moverse() {

        echo "El gato se mueve saltando. <br>";

    }

}

 

// Creación de objetos de las clases que implementan la interfaz

$perro = new Perro();

$gato = new Gato();

 

// Llamada a los métodos de la interfaz

$perro->hacerSonido();

$perro->moverse();

 

$gato->hacerSonido();

$gato->moverse();

 

En este ejemplo, se define la interfaz Animal que contiene dos métodos: hacerSonido() y moverse(). Estos métodos deben ser implementados por cualquier clase que implemente la interfaz.

Luego, se crean dos clases Perro y Gato que implementan la interfaz Animal. Estas clases deben proporcionar una implementación para los métodos definidos en la interfaz.

Se crean objetos de las clases Perro y Gato y se llaman a los métodos de la interfaz Animal. Los métodos hacerSonido() y moverse() se ejecutan de acuerdo con la implementación de cada clase.

Las interfaces en PHP permiten definir un contrato que garantiza que las clases implementen ciertos métodos. Esto promueve la consistencia y la interoperabilidad en el código, ya que diferentes clases pueden implementar la misma interfaz y ser utilizadas de manera intercambiable en función de su comportamiento común.

 

Polimorfismo



El polimorfismo es un concepto clave en la programación orientada a objetos (POO) que permite que objetos de diferentes clases sean tratados de manera uniforme cuando implementan una interfaz común o heredan de la misma clase base.

En PHP, puedes lograr el polimorfismo mediante la herencia y la implementación de interfaces.

 

interface Animal {

    public function hacerSonido();

}

 

class Perro implements Animal {

    public function hacerSonido() {

        echo "El perro hace: ¡Guau! <br>";

    }

}

 

class Gato implements Animal {

    public function hacerSonido() {

        echo "El gato hace: ¡Miau! <br>";

    }

}

 

// Función que toma un objeto Animal como parámetro

function hacerRuidoAnimal(Animal $animal) {

    $animal->hacerSonido();

}

 

// Creación de objetos de diferentes clases pero del tipo Animal

$perro = new Perro();

$gato = new Gato();

 

// Llamada a la función hacerRuidoAnimal con diferentes objetos

hacerRuidoAnimal($perro);

hacerRuidoAnimal($gato);


En este ejemplo, se define la interfaz Animal que contiene el método hacerSonido(). Las clases Perro y Gato implementan la interfaz Animal y proporcionan una implementación del método hacerSonido() específico para cada animal.

La función hacerRuidoAnimal() toma un objeto del tipo Animal como parámetro y llama al método hacerSonido() del objeto pasado. Debido al polimorfismo, podemos pasar tanto un objeto Perro como un objeto Gato a esta función, ya que ambas clases implementan la interfaz Animal. El comportamiento de la función hacerRuidoAnimal() dependerá del tipo de objeto que se le pase como argumento.

En resumen, el polimorfismo en PHP nos permite tratar objetos de diferentes clases de manera uniforme cuando comparten una interfaz común o una clase base. Esto simplifica el código y permite la reutilización y extensibilidad, ya que podemos trabajar con diferentes objetos utilizando una misma interfaz o clase base sin preocuparnos por los detalles específicos de cada implementación.

 

Autoload de clases



En PHP, el autoloading de clases permite cargar automáticamente las clases cuando son necesarias, sin necesidad de incluir manualmente los archivos que las contienen. Esto mejora la organización del código y evita errores por archivos faltantes.

Aquí tienes un ejemplo de cómo implementar un autoload básico en PHP utilizando la función spl_autoload_register():

 

spl_autoload_register(function ($className) {

    // Convertir el nombre de la clase en una ruta de archivo

    $filePath = __DIR__ . '/classes/' . $className . '.php';

 

    // Verificar si el archivo existe y cargarlo

    if (file_exists($filePath)) {

        require_once $filePath;

    }

});

 

// Creación de objetos de las clases cargadas automáticamente

$clase1 = new Clase1();

$clase2 = new Clase2();

 

En este ejemplo, se utiliza la función spl_autoload_register() para registrar una función anónima como el autoloader. Esta función se ejecutará automáticamente cuando se intente crear una instancia de una clase que aún no ha sido cargada.

Dentro de la función del autoloader, se construye la ruta del archivo de la clase utilizando el nombre de la clase. En este caso, se asume que las clases se encuentran en la carpeta "classes" y siguen una convención de nombres en la que el nombre del archivo coincide con el nombre de la clase.

Luego, se verifica si el archivo de la clase existe y, en caso afirmativo, se incluye utilizando require_once. Esto carga el archivo y hace que la clase esté disponible para su uso.

Una vez registrado el autoloader, se pueden crear objetos de las clases sin necesidad de incluir manualmente los archivos. El autoloader se encargará de cargarlos automáticamente cuando sean necesarios.

Es importante destacar que este es solo un ejemplo básico de autoloading. En aplicaciones más grandes y complejas, puedes utilizar librerías y herramientas dedicadas como Composer para gestionar el autoloading de clases de manera más eficiente y flexible.

 

Namespaces



Los namespaces en PHP permiten organizar y agrupar clases, interfaces, funciones y constantes en espacios de nombres separados. Esto evita colisiones de nombres y facilita la organización del código.

namespace MiProyecto;

 

class MiClase {

    public function saludar() {

        echo "¡Hola desde MiClase en el namespace MiProyecto!";

    }

}

 

namespace OtroProyecto;

 

class OtraClase {

    public function despedirse() {

        echo "Adiós desde OtraClase en el namespace OtroProyecto!";

    }

}

 

// Creación de objetos de las clases utilizando los namespaces

$miObjeto = new MiProyecto\MiClase();

$otroObjeto = new OtroProyecto\OtraClase();

 

// Llamada a los métodos de los objetos

$miObjeto->saludar();

$otroObjeto->despedirse();

 

En este ejemplo, se definen dos namespaces: MiProyecto y OtroProyecto. Cada namespace contiene una clase con el mismo nombre: MiClase en MiProyecto y OtraClase en OtroProyecto.

Para acceder a las clases en los namespaces, se utiliza la sintaxis Namespace\Clase. En el código de ejemplo, se crean objetos de las clases MiClase y OtraClase utilizando la sintaxis de namespace.

Luego, se llaman a los métodos saludar() y despedirse() de los objetos correspondientes.

El uso de namespaces permite evitar conflictos de nombres entre clases y organizar el código de manera más estructurada y modular. También facilita la reutilización de código, ya que se pueden importar clases específicas de un namespace utilizando la palabra clave use.

Es importante tener en cuenta que los namespaces deben estar definidos al principio del archivo antes de cualquier declaración de código. Además, los archivos que contienen las clases deben estar ubicados en una estructura de directorios que coincida con los namespaces para que el autoloading de clases funcione correctamente.

Programació web en l'entorn Servidor.

Curs subvencionat