Damián De Luca - Capacitación & Desarrollo Web

Clases en PHP

PHP
Programación Orientada a Objetos en PHP

La programación orientada a objetos (POO) ha estado disponible en PHP desde su versión 4, lanzada en el año 2000. Sin embargo, fue a partir de PHP 5, publicado en 2004, cuando se introdujeron características más completas y robustas, como el manejo de clases y objetos de forma adecuada. A partir de esa versión, la POO ha sido fundamental en PHP, evolucionando hasta convertirse en una de las mejores opciones más elegidas para desarrollar aplicaciones y sitios Web.

En este artículo analizaremos las ventajas de la Programación Orientada a Objetos y el uso de Clases en PHP.

¿Por qué usar Objetos en PHP?

Siempre explico a mis alumnos que el uso de objetos permite organizar el código en piezas reutilizables y modulares. Esto mejora en gran medida la legibilidad, facilita el mantenimiento, y permite escalar de una manera eficiente. Para pensarlo de una manera sencilla, en lugar de usar grandes funciones con muchas variables, podemos crear clases que encapsulen la funcionalidad, haciendo el código más limpio y estructurado.

Algunos beneficios clave que me gustaría resaltar sobre la Programación Orientada a Objetos son los siguiente:

Comparación con la Programación Funcional

A diferencia de la programación funcional, que se basa en el uso de funciones puras para transformar datos, la POO utiliza clases y objetos para representar entidades y comportamientos. Mientras que en programación funcional el estado se evita tanto como sea posible, en la POO los objetos pueden tener estado, lo que significa que pueden recordar información entre diferentes llamadas a métodos.

En PHP, la programación funcional puede ser adecuada para scripts pequeños o tareas simples, pero la POO es más poderosa y flexible cuando se trata de proyectos a gran escala.

A continuación veremos dos códigos de ejemplo. En el primero analizaremos como se armaría usando programación funcional y luego veremos como sería utilizando una clase, con sus propiedades y métodos.

Ejemplo de Programación Funcional:

function getCityCountry($city, $country) {
    return "$city, $country";
}

echo getCityCountry('Buenos Aires', 'Argentina'); // Output: Buenos Aires, Argentina

Ejemplo de Programación Orientada a Objetos:

class City {
    public $name;
    public $country;

    public function __construct($name, $country) {
        $this->name = $name;
        $this->country = $country;
    }

    public function getFullLocation() {
        return "$this->name, $this->country";
    }
}

$madrid = new City('Buenos Aires', 'Argentina');
echo $madrid->getFullLocation(); // Output: Buenos Aires, Argentina

Características principales de los Objetos en PHP

La POO en PHP sigue los principios fundamentales de la orientación a objetos que se encuentran en otros lenguajes como Java o C#. A continuación, las características más importantes:

  1. Clases y Objetos: las clases son como plantillas que definen las propiedades y métodos de un objeto. Estos aspectos son clave a la hora de comprender la base de la POO.
  2. Encapsulamiento: podemos proteger los datos internos de un objeto para evitar que sean manipulados directamente, utilizando modificadores de acceso como private, protected, y public.
  3. Herencia: permite que una clase herede propiedades y métodos de otra, reutilizando y extendiendo funcionalidades.
  4. Polimorfismo: los objetos pueden compartir la misma interfaz o base de clase, permitiendo que sean tratados de la misma forma.
  5. Abstracción: las clases abstractas y las interfaces permiten definir características que las clases hijas deben cumplir.

Ejemplos de uso de Clases en PHP

Ahora supongamos que estamos modelando un sistema de información geográfica que gestiona países y ciudades:

class Country {
    private $name;
    private $continent;

    public function __construct($name, $continent) {
        $this->name = $name;
        $this->continent = $continent;
    }

    public function getDetails() {
        return "$this->name está en $this->continent";
    }
}

class City extends Country {
    private $cityName;

    public function __construct($cityName, $countryName, $continent) {
        parent::__construct($countryName, $continent);
        $this->cityName = $cityName;
    }

    public function getLocation() {
        return "$this->cityName está en " . $this->getDetails();
    }
}

$paris = new City('París', 'Francia', 'Europa');
echo $paris->getLocation(); // Output: París está en Francia está en Europa

Para profundizar más el concepto ahora, veamos un ejemplo donde gestionamos una base de datos de clientes y empresas:

class Company {
    public $name;
    public $industry;

    public function __construct($name, $industry) {
        $this->name = $name;
        $this->industry = $industry;
    }

    public function getInfo() {
        return "Empresa: $this->name, Industria: $this->industry";
    }
}

class Client {
    private $name;
    private $company;

    public function __construct($name, Company $company) {
        $this->name = $name;
        $this->company = $company;
    }

    public function getClientDetails() {
        return "$this->name trabaja en " . $this->company->getInfo();
    }
}

$google = new Company('Google', 'Tecnología');
$client = new Client('Joaquín', $google);
echo $client->getClientDetails(); 
// Output: Joaquín trabaja en Empresa: Google, Industria: Tecnología

Novedades en PHP 8 para la Programación Orientada a Objetos

PHP 8 ha traído varias mejoras interesantes en lo relacionado a POO. Esto hace que PHP sea hoy en día aún más eficiente y moderno:

  class Product {
      public string $name;
      public float $price;

      public function __construct(string $name, float $price) {
          $this->name = $name;
          $this->price = $price;
      }
  }
  class User {
      public function __construct(
          public string $name,
          public int $age
      ) {}
  }

  $user = new User('Carlos', 25);
  $status = 'completed';

  echo match ($status) {
      'completed' => 'La tarea está completada',
      'pending' => 'La tarea está pendiente',
      default => 'Estado desconocido',
  };
  function createProduct(string $name, float $price) {
      // Código
  }

  createProduct(price: 10.99, name: 'Libro');

Objetos y Clases en PHP: conclusión

Los objetos en PHP han demostrado ser esenciales para el desarrollo moderno de aplicaciones web. Con el avance de versiones como PHP 8, las capacidades de la POO se han potenciado, proporcionando herramientas que permiten escribir código más eficiente, modular y fácil de mantener.

Si bien la programación funcional tiene su lugar, la orientación a objetos es fundamental cuando se trabaja en sistemas más complejos. PHP sigue evolucionando, y con cada nueva versión, la POO se vuelve más poderosa y accesible.

Como hemos visto en este artículo, las clases en PHP son una característica muy útil para crear proyectos más robustos, mantenibles y escalables.

Para saber más sobre PHP y sus últimas versiones podemos ingresar en: https://www.php.net/.

Salir de la versión móvil