Lección 13: Objetos

Con el lanzamiento de PHP 5 se añadió soporte para la Programación Orientada a Objetos (POO). Antes de continuar quiero que sepas que existen 3 paradigmas o formas de organizar su código:

  • Estructurada: Tal como hemos trabajado hasta ahora. Las instrucciones siguen un orden del principio del archivo hasta el final.
  • Funcional: funciones que llaman a otras funciones (declaradas o anónimas). Su potencial radica en que se evitan muchos errores. Existen lenguajes mejores que PHP para este fin (Lisp, Elixir, Haskell…).
  • Objetos: Encapsular variables y funciones.

Los objetos nos permiten mantener en un mismo sitio una gran cantidad de variables y funciones que se pueden fusionar con otros lugares. Tranquilo que no busco que los manejes como un experto pero si que seas capaz de interpretar y crear unos objetos simples.

Clase

En el ejemplo tenemos un objeto que lo hemos llamado Gato. Dentro contiene una variable y una función.

// Declaración
class Gato
{
    // Variables publicas
    public $nombre = 'Felix';

    /**
     * Método para escuchar al gato
     * @return void
     */
    public function maullar(): void
    {
        echo 'Miiiiauuuu';
    }
}

Para utilizarlo se debes instanciarlo. Para ello existe una palabra reservada llamada new.

// Se instancia el objeto Gato
$miGato = new Gato();

Ahora ya se puede utilizar su interior con las flechas ->.

// Se llama a la funcion de Gato
$miGato->maullar();
// echo: Miiiiauuuu
echo $miGato->nombre;
// echo: Felix

Herencia

Es posible instanciar un objeto y fusionar las variables y las funciones del otro objeto ya instanciado. Para ello se utiliza la palabra reservada extends.

// Hereda todo el objeto de Gato
class Garfield extends Gato {

    // Variables publicas
    public $nombre = 'Garfield';

    /**
     * Método para expresar la comida favorita
     * @return void
     */
    public function comidaFavorita(): void
    {
        echo 'Lasaña';
    }
}

Instanciamos nuestro gato Garfield.

// Se instancia el objeto Garfield
$miGatoComilon = new Garfield();

Y ya podemos usar todas las variables y funciones tanto de Gato como de Garfield. Pero… ¿que pasa con la variable que tiene el mismo nombre ($nombre)? Como Garfield es el hijo sobrescribe por su valor.

// Se llama a la funcion de Gato
$miGatoComilon->maullar();
// echo: Miiiiauuuu
// Se llama a la funcion de Garfield
$miGatoComilon->comidaFavorita();
// echo: Lasaña
echo $miGatoComilon->nombre;
// echo: Garfield

Se nos queda por el camino muchos conceptos que no veremos.

  • Poliformismo.
  • Visibilidad.
  • Interfaces.
  • Abstración.

Por ahora lo dejaremos aquí, no es necesario profundizar mucho más mientras sepamos utilizarlos.