Encapsulación en PHP: clases, objetos, constructores e importación

Definición de una clase

Para crear una clase se utiliza la palabra reservada class. Dentro de ella se declaran los atributos (datos) y los métodos (comportamientos). A continuación se muestra un ejemplo con una clase Libro:

class Libro
{
    public $titulo;
    public $autor;
    public $paginas;

    public function describir()
    {
        return "{$this->titulo}, escrito por {$this->autor}, tiene {$this->paginas} páginas.";
    }

    public function avanzar($cantidad)
    {
        return "Has avanzado {$cantidad} páginas en {$this->titulo}.";
    }
}

La palabra clave public indica que el atributo o método es accesible desde cualquier parte del código. Para acceder a los miembros de la instancia desde dentro de la clase se usa $this->....

Instanciación de objetos

Para utilizar una clase es necesario crear un objeto con el operador new. Cada objeto reserva su propio espacio en memoria, por lo que modificar uno no afecta a los demás. El acceso a atributos y métodos se realiza con el operador flecha ->:

$novela = new Libro();
$novela->titulo = "Cien años de soledad";
$novela->autor = "Gabriel García Márquez";
$novela->paginas = 471;

echo $novela->describir();

Inclusión de clases externas

Cuando una clase se encuentra en un arrchivo separado, es posible importarla mediante include, require, include_once o require_once. La variante require genera un error fatal si el archivo no existe, mientras que include solo emite una advertencia. Para evitar definiciones duplicadas se recomienda usar include_once o require_once:

// Libro.php
class Libro
{
    public $titulo;
    public $autor;
}
// index.php
require_once "Libro.php";

$ejemplar = new Libro();
$ejemplar->titulo = "El Principito";

Constructor y destructor

El constructor es un método especial que PHP invoca automáticamente al crear un objeto. Permite inicializar los atributos de la clase. Se define con __construct. Por el contrario, el destructor, definido como __destruct, se ejecuta cuando el objeto se destruye o el recolector de basura libera la memoria asociada:

class Pelicula
{
    public $nombre;
    public $director;
    public $anio;

    public function __construct($nombre, $director, $anio)
    {
        $this->nombre = $nombre;
        $this->director = $director;
        $this->anio = $anio;
    }

    public function ficha()
    {
        return "{$this->nombre} ({$this->anio}) - Dirigida por {$this->director}";
    }

    public function __destruct()
    {
        echo "Eliminando la película {$this->nombre} de la memoria.";
    }
}

$pelicula = new Pelicula("Inception", "Christopher Nolan", 2010);
echo $pelicula->ficha();

Gracias al constructor, la inicialización de objetos se realiza de forma compacta y segura, mientras que el destructor permite liberar recursos o registrar eventos al finalizar el ciclo de vida del objeto.

Etiquetas: PHP POO Encapsulación Constructores destructores

Publicado el 7-15 09:45