PHP

PHP

Tutorial PHP: Introducción a la POO en PHP

Descubre los fundamentos de la Programación Orientada a Objetos en PHP. Aprende a usar clases y objetos para un desarrollo más estructurado.

Aprende PHP GRATIS y certifícate

Conceptos básicos de POO

La Programación Orientada a Objetos (POO) es un paradigma de programación que organiza el código en clases y objetos, facilitando la modularidad y reutilización del código. En PHP, la POO permite modelar entidades del mundo real y sus interacciones dentro del software.

Una clase es una plantilla que define las propiedades (atributos) y métodos (comportamientos) que los objetos creados a partir de ella tendrán. Las propiedades son variables que representan el estado del objeto, mientras que los métodos son funciones que definen su comportamiento.

Para declarar una clase en PHP, se utiliza la palabra clave class seguida del nombre de la clase:

<?php
class Coche
{
    public $marca;
    public $modelo;

    public function arrancar()
    {
        echo "El coche está arrancando.\n";
    }
}

En este ejemplo, la clase Coche tiene dos propiedades públicas $marca y $modelo, y un método público arrancar() que imprime un mensaje.

Un objeto es una instancia de una clase. Para crear un objeto, se utiliza el operador new:

$coche1 = new Coche();
$coche1->marca = "Toyota";
$coche1->modelo = "Corolla";
$coche1->arrancar(); // Salida: El coche está arrancando.

Aquí, $coche1 es un objeto de la clase Coche con sus propias propiedades y métodos.

Las propiedades y métodos pueden tener distintos niveles de visibilidad:

  • public: Accesible desde cualquier lugar.
  • protected: Accesible solo desde la clase y sus subclases.
  • private: Accesible únicamente desde la clase que lo define.

La herencia es un mecanismo que permite crear nuevas clases basadas en clases existentes, heredando sus propiedades y métodos. Se utiliza la palabra clave extends para indicar que una clase hereda de otra:

class Deportivo extends Coche
{
    public function activarTurbo()
    {
        echo "Turbo activado.\n";
    }
}

En este caso, la clase Deportivo hereda de Coche y añade el método activarTurbo().

La encapsulación es el principio que restringe el acceso directo a ciertas componentes de un objeto, protegiendo su estado interno. Esto se logra mediante los modificadores de acceso y métodos específicos para interactuar con las propiedades, como getters y setters.

El polimorfismo permite que objetos de diferentes clases puedan ser tratados como objetos de una clase común. Esto es especialmente útil al utilizar interfaces y clases abstractas, que definen métodos que deben ser implementados por las clases que las utilizan.

La palabra clave this se utiliza dentro de una clase para hacer referencia al objeto actual. Por ejemplo, para acceder a una propiedad o método dentro de la misma clase:

public function mostrarInformacion()
{
    echo "Marca: " . $this->marca . ", Modelo: " . $this->modelo . "\n";
}

La Programación Orientada a Objetos en PHP permite escribir código más estructurado y fácil de mantener al modelar entidades como objetos con atributos y comportamientos bien definidos.

Ventajas de la POO

La Programación Orientada a Objetos (POO) ofrece múltiples ventajas en el desarrollo de aplicaciones en PHP, permitiendo crear código más estructurado, modular y fácil de mantener.

  • Una de las principales ventajas es la modularidad, ya que al dividir el código en clases y objetos, cada componente puede desarrollarse y probarse de forma independiente. Esto facilita la detección y corrección de errores, además de mejorar la organización del proyecto.
  • La reutilización es esencial en la POO. Mediante herencia y composición, es posible crear nuevas clases basadas en clases existentes, reutilizando código y reduciendo la duplicación. Esto potencia la eficiencia en el desarrollo y simplifica el mantenimiento.
  • La encapsulación protege el estado interno de los objetos, exponiendo solo lo necesario a través de interfaces públicas. Al controlar el acceso a las propiedades y métodos, se mejora la seguridad y se previene la manipulación indebida de datos internos.
  • El polimorfismo permite tratar objetos de diferentes clases de forma uniforme si comparten una misma interfaz o clase base. Esto simplifica la gestión de colecciones de objetos y habilita comportamientos dinámicos en tiempo de ejecución.
  • La abstracción es fundamental para manejar la complejidad. Al centrarse en las características esenciales y ocultar los detalles de implementación, se facilita la comprensión del código y se promueve un diseño más claro y conciso.
  • La POO mejora la mantenibilidad del software. Con clases bien definidas y responsabilidades claras, las actualizaciones y ampliaciones pueden realizarse con menor riesgo de introducir errores. Esto conduce a un ciclo de desarrollo más eficiente y sostenible.
  • La escalabilidad es otra ventaja notable. La POO permite que las aplicaciones crezcan en funcionalidad sin comprometer la estructura existente, facilitando la incorporación de nuevos módulos y adaptaciones a futuros requerimientos.

La POO fomenta la colaboración entre desarrolladores. Al seguir principios y patrones de diseño comunes, diferentes miembros del equipo pueden trabajar en partes específicas del proyecto sin interferencias, lo que aumenta la productividad y coherencia del código.

Listado de mecanismos de POO en PHP

La Programación Orientada a Objetos en PHP cuenta con diversos mecanismos que permiten construir aplicaciones robustas y escalables. 

Listado de los principales mecanismos de POO disponibles:

  • Clases y objetos
    • Las clases son plantillas que definen las propiedades y métodos que los objetos instanciarán. 
    • Los objetos son instancias de clases que pueden interactuar entre sí.
<?php
class Usuario
{
    public string $nombre;
    public int $edad;

    public function mostrarInformacion(): void
    {
        echo "Nombre: " . $this->nombre . ", Edad: " . $this->edad . "\n";
    }
}

$usuario = new Usuario();
$usuario->nombre = "Ana";
$usuario->edad = 30;
$usuario->mostrarInformacion(); // Salida: Nombre: Ana, Edad: 30
  • Constructores y destructores: El método mágico __construct() se utiliza para inicializar objetos al crearlos, mientras que __destruct() se ejecuta al destruirlos.
class Conexion
{
    private $conexion;

    public function __construct(string $dsn)
    {
        $this->conexion = new PDO($dsn);
    }

    public function __destruct()
    {
        $this->conexion = null;
    }
}
  • Herencia: Permite que una clase hija herede propiedades y métodos de una clase padre usando extends, promoviendo la reutilización de código.
class Animal
{
    public function comer(): void
    {
        echo "El animal está comiendo.\n";
    }
}

class Perro extends Animal
{
    public function ladrar(): void
    {
        echo "El perro está ladrando.\n";
    }
}

$perro = new Perro();
$perro->comer();   // Salida: El animal está comiendo.
$perro->ladrar();  // Salida: El perro está ladrando.
  • Visibilidad: Controla el acceso a propiedades y métodos mediante los modificadores public, protected y private, lo que facilita la encapsulación.
  • Clases y métodos abstractos: Las clases abstractas no pueden ser instanciadas y pueden contener métodos abstractos que deben ser implementados por las clases hijas.
abstract class Vehiculo
{
    abstract public function acelerar(): void;
}

class Coche extends Vehiculo
{
    public function acelerar(): void
    {
        echo "El coche está acelerando.\n";
    }
}
  • Interfaces: Definen un contrato que las clases deben cumplir, asegurando que implementen métodos específicos. Se declaran con la palabra clave interface.
interface Enviable
{
    public function enviar(string $destino): void;
}

class Mensaje implements Enviable
{
    public function enviar(string $destino): void
    {
        echo "Enviando mensaje a " . $destino . "\n";
    }
}
  • Traits: Son mecanismos para reutilizar código en múltiples clases sin usar herencia. Se incluyen en las clases con la palabra clave use.
trait Logger
{
    public function log(string $mensaje): void
    {
        echo "Log: " . $mensaje . "\n";
    }
}

class Servicio
{
    use Logger;
}

$servicio = new Servicio();
$servicio->log("Servicio iniciado"); // Salida: Log: Servicio iniciado
  • Namespaces: Los espacios de nombres organizan el código y evitan conflictos entre clases o funciones con el mismo nombre en diferentes partes del programa.
namespace Aplicacion\Modelos;

class Producto
{
    // Código de la clase Producto
}

use Aplicacion\Modelos\Producto;

$producto = new Producto();
  • Autoloading: Facilita la carga automática de clases cuando se necesitan, utilizando spl_autoload_register() y siguiendo estándares como PSR-4.
spl_autoload_register(function ($clase) {
    $ruta = __DIR__ . '/' . str_replace('\\', '/', $clase) . '.php';
    if (file_exists($ruta)) {
        require $ruta;
    }
});
  • Propiedades y métodos estáticos: Pertenecen a la clase en lugar de a una instancia. Se accede a ellos usando el operador ::.
class Configuracion
{
    public static string $entorno = "producción";

    public static function mostrarEntorno(): void
    {
        echo "Entorno: " . self::$entorno . "\n";
    }
}

Configuracion::mostrarEntorno(); // Salida: Entorno: producción
  • Clases anónimas: Permiten crear objetos sin definir una clase nombrada, útiles para implementaciones rápidas.
$controlador = new class {
    public function ejecutar(): void
    {
        echo "Ejecutando controlador anónimo.\n";
    }
};

$controlador->ejecutar(); // Salida: Ejecutando controlador anónimo.
  • Type hints y tipado fuerte: PHP admite tipos estrictos en propiedades, parámetros y valores de retorno, incluyendo tipos de unión (|) y tipos de intersección (&).
function procesarDatos(array|Traversable $datos): void
{
    foreach ($datos as $dato) {
        echo $dato . "\n";
    }
}
  • Enums: Introducidos en PHP 8.1, los enum permiten definir un conjunto limitado de valores posibles para un tipo.
enum Direccion
{
    case NORTE;
    case SUR;
    case ESTE;
    case OESTE;
}

$marcha = Direccion::NORTE;
  • Clases readonly: A partir de PHP 8.2, es posible definir clases donde todas las propiedades son de solo lectura usando la palabra clave readonly.
readonly class Punto
{
    public int $x;
    public int $y;

    public function __construct(int $x, int $y)
    {
        $this->x = $x;
        $this->y = $y;
    }
}

$punto = new Punto(5, 10);
  • Métodos mágicos: Son métodos especiales que comienzan con __ y permiten interactuar con la funcionalidad interna de objetos, como __get(), __set(), __call(), entre otros.
class MiClase
{
    private array $datos = [];

    public function __set(string $nombre, $valor): void
    {
        $this->datos[$nombre] = $valor;
    }

    public function __get(string $nombre)
    {
        return $this->datos[$nombre] ?? null;
    }
}

$obj = new MiClase();
$obj->atributo = "Valor dinámico";
echo $obj->atributo . "\n"; // Salida: Valor dinámico
  • Clases finales y métodos finales: Mediante la palabra clave final, se evita que las clases o métodos sean extendidos o sobrescritos, garantizando la integridad del comportamiento.
final class Base
{
    final public function ejecutar(): void
    {
        echo "Ejecutando método final.\n";
    }
}
  • Funciones de primera clase: PHP 8.1 introdujo una nueva sintaxis para referenciar funciones y métodos como valores, mejorando el manejo de callables.
function sumar(int $a, int $b): int
{
    return $a + $b;
}

$operacion = sumar(...);
echo $operacion(2, 3) . "\n"; // Salida: 5
  • Deprecación de propiedades dinámicas: PHP 8.2 depreca la creación de propiedades dinámicas en objetos que no permiten propiedades mágicas, fomentando un código más seguro y predecible.

Estos mecanismos proporcionan una base sólida para aplicar principios de diseño orientado a objetos en PHP, permitiendo desarrollar aplicaciones más seguras, mantenibles y eficientes.

Para seguir leyendo hazte Plus

¿Ya eres Plus? Accede a la app

20 % DE DESCUENTO

Plan mensual

19.00 /mes

15.20 € /mes

Precio normal mensual: 19 €
58 % DE DESCUENTO

Plan anual

10.00 /mes

8.00 € /mes

Ahorras 132 € al año
Precio normal anual: 120 €
Aprende PHP GRATIS online

Todas las lecciones de PHP

Accede a todas las lecciones de PHP y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Introducción A Php

PHP

Introducción Y Entorno

Instalación Y Primer Programa De Php

PHP

Introducción Y Entorno

Tipos De Datos, Variables Y Constantes

PHP

Sintaxis

Operadores Y Expresiones

PHP

Sintaxis

Estructuras De Control

PHP

Sintaxis

Funciones Y Llamada De Funciones

PHP

Sintaxis

Cadenas De Texto Y Manipulación

PHP

Sintaxis

Manejo De Números

PHP

Sintaxis

Manejo De Fechas Y Tiempo

PHP

Sintaxis

Manejo De Arrays

PHP

Sintaxis

Introducción A La Poo En Php

PHP

Programación Orientada A Objetos

Clases Y Objetos

PHP

Programación Orientada A Objetos

Constructores Y Destructores

PHP

Programación Orientada A Objetos

Herencia

PHP

Programación Orientada A Objetos

Encapsulación

PHP

Programación Orientada A Objetos

Polimorfismo

PHP

Programación Orientada A Objetos

Interfaces

PHP

Programación Orientada A Objetos

Traits

PHP

Programación Orientada A Objetos

Namespaces

PHP

Programación Orientada A Objetos

Autoloading De Clases

PHP

Programación Orientada A Objetos

Manejo De Errores Y Excepciones

PHP

Programación Orientada A Objetos

Manejo De Archivos

PHP

Programación Orientada A Objetos

Patrones De Diseño

PHP

Programación Orientada A Objetos

Introducción A Los Formularios En Php

PHP

Formularios

Procesamiento De Datos De Formularios

PHP

Formularios

Manejo De Archivos En Formularios

PHP

Formularios

Redirecciones Y Retroalimentación Al Usuario

PHP

Formularios

Formularios Dinámicos Y Separación De Lógica

PHP

Formularios

Introducción A La Persistencia En Php

PHP

Persistencia

Conexión A Bases De Datos

PHP

Persistencia

Consultas Y Operaciones Crud

PHP

Persistencia

Gestión De Transacciones

PHP

Persistencia

Manejo De Errores Y Excepciones En Base De Datos

PHP

Persistencia

Patrones De Acceso A Datos

PHP

Persistencia

Concepto De Sesiones En Php

PHP

Sesiones Y Cookies

Configuración De Sesiones

PHP

Sesiones Y Cookies

Cookies

PHP

Sesiones Y Cookies

Manejo Avanzado De Sesiones Y Cookies

PHP

Sesiones Y Cookies

Principales Vulnerabilidades En Php

PHP

Seguridad

Seguridad En Formularios Y Entrada De Datos

PHP

Seguridad

Protección Frente A Inyección Sql

PHP

Seguridad

Gestión De Contraseñas Y Cifrado

PHP

Seguridad

Seguridad En Sesiones Y Cookies

PHP

Seguridad

Configuraciones De Php Para Seguridad

PHP

Seguridad

Introducción Al Testing En Php

PHP

Testing

Phpunit

PHP

Testing

Cobertura De Código En Testing

PHP

Testing

Test Doubles (Mocks, Stubs, Fakes, Spies)

PHP

Testing

Pruebas De Integración Y Funcionales

PHP

Testing

Accede GRATIS a PHP y certifícate

En esta lección

Objetivos de aprendizaje de esta lección

  • Comprender el paradigma de POO y su aplicación en PHP.
  • Declarar y utilizar clases, propiedades y métodos.
  • Aplicar herencia para crear jerarquías de clases.
  • Implementar visibilidad para encapsular datos.
  • Utilizar abstractos e interfaces para diseñar código flexible.
  • Emplear traits y namespaces para organización y reutilización.