OOP | Métodos de Clase

     Es el momento de sacar uno poco más de provecho al uso de clases, porque aunque dentro de una Clase y de un Array podremos incluir datos, sólo dentro de una Clase podremos ejecutar funciones, conocidas también como Métodos.

     Un método no es más que una función, en la que podremos ejecutar código encapsulado que habita dentro de la clase. Existen varios tipos de Métodos, pero vamos a empezar poco a poco.

     Vamos a añadir un método al que llamaremos public function arrancarVehiculo(){}, dentro de nuestra clase Vehículo, así podremos ver y entender mejor el uso de los Métodos dentro de una clase. Añadiremos el siguiente código dentro de nuestra clase:

<?php

// Definimos la clase
class Vehiculo
{
  public $marca;

  public function encenderVehiculo ()
  {
     print 'RRRRUUUUUUUMMMMMMMM !!!!!!';
  }
}

     Con este nuevo código, ya hemos añadido un método, que nos devolverá en pantalla, el sonido de arranque del motor de nuestro vehículo. Ahora para realizar la llamada a este método, como ya hemos creado nuestro objeto, escribiremos el siguiente código:

// Ejemplo llamada a un método
$miNuevoVehiculo->encenderVehiculo();

     La diferencia entre llamar a una propiedad de la clase y a uno de sus métodos, es que al final del Método tendremos los paréntesis.

     El código completo que deberías tener en tu archivo de pruebas, será el siguiente:

<?php

// Definimos la clase
class Vehiculo
{
  public $marca;

  public function encenderVehiculo ()
  {
     print 'RRRRUUUUUUUMMMMMMMM !!!!!!';
  }
}

// Ejemplo de un objeto
$miNuevoVehiculo = new Vehiculo();
$miNuevoVehiculo->marca = 'Mercedes Benz';

// Imprimiremos en pantalla nuestro primer objeto
print "La marca de mi vehículo es: " . $miNuevoVehiculo->marca;
print '<hr>';
// Ejemplo llamada a un método
$miNuevoVehiculo->encenderVehiculo();

     Ahora, si guardarmos los cambios y refrescamos el navegador, deberíamos ver en pantalla el siguiente resultado:

OOP PHP | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Excelente!!!, ya nada nos detendrá, porque acabamos de poner el motor en marcha y no vamos a deternos hasta alcanzar la meta.

     Recuerda, los Métodos son iguales a las funciones tradicionales, la diferencia está en que habitan dentro de la clase, por esta razón, para acceder a ellos, debemos hacerlo a través de los objetos de esa clase.

   Cómo acceder al valor de una propiead a través de Métodos

     Los Métodos, al igual que las funciones, también pueden ser empleados para obtener datos y devolverlos. En este caso añadiremos un segundo método a nuestra clase, con el objetivo de que nos devuelva el nombre de la marca del Vehículo. Pero primero vamo a añadir un texto estático, para comprobar que todo funciona:

// Ejemplos llamada a un método
$miNuevoVehiculo->encenderVehiculo();
print '<hr>';
print $miNuevoVehiculo->getBrand();

     Si refrescamos el navegador, deberíamos ver el siguiente resultado:

OOP PHP | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Correcto, ya tenemos el resultado esperado, pero nos surge una nueva incógnita, ya sabemos que para acceder a la propiead del objeto, solo hace falta añadir la fecha antes del nombre de la propiead, pero en este caso, ¿Cómo podremos hacer, para que el método nos devuelva el nombre de la propiedad $brand, en este caso? 

     Para acceder a los valores desde dentro de un Método de clase, existe la variable especial llamada $this, en ella podremos acceder a los valores que existan dentro de la clase en la cuál reside nuestro método. La manera de llamar a la propiedad dentro del Método, utilizando $this, es la siguiente:

public function getBrand()
{
   return $this->brand;
}

     Una vez hagamos el cambio en nuestro Método y guardemos, podremos refrescar el navegador, para descubrir que ahora se muestra la marca de nuestro Vehículo, en lugar del texto estático que habíamos añadido al principio.

OOP PHP | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Por ahora, nuestra clase Vehículo{}, sólo tiene una propiedad $brand, así que es el momento de probar otras opciones. Abriremos nuestro archivo functions.php y añadiremos el resto de características, comunes para todos los vehículos de nuestro listado:

public $brand;
public $year = 0;
public $color;
public $price =0;

     En este caso, he añadido el valor por defecto cero ( 0 ), a las propiedades referentes al año y al precio del vehículo, ya que no las hemos utilizado nunca, así evitamos posibles fallos en las llamadas, a nuestros objetos durante el desarrollo del código.

   Vamos a realizar una prueba llamando a la propiedad $year; para ello ejecutaremos un var_dump(). Si guardamos el cambio y refrescamos el navegador, debería devolvernos el valor por defecto, que será igual a cero (0):

OOP PHP | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Ahora podremos asignarle un valor y volver a comprobar si todo funciona según lo esperado.

// Ejemplo de un objeto
$miNuevoVehiculo = new Vehiculo();
$miNuevoVehiculo->brand = 'Mercedes Benz';
$miNuevoVehiculo->price = 30;

     Si refrescamos el navegador, podremos comprobar que se ha realizado el cambio y ahora el precio que se muestra es el número que hemos añadido:

OOP PHP | www.drupaladicto.com - Consultor especializado en drupal y symfony

   Añadiendo complejidad al Método

     En el caso de los método anteriores, el resultado es muy simple, así que vamos a sacarle un poco más de provecho a los métodos en el siguiente ejemplo. Crearemos un nuevo método al que llamaremos getDeatilsVehicle(){}, el propósito de este nuevo método será obtener todos los detalles de un Vehículo inmediatamente:

public function getDetailsVehicle()
{
  return sprintf(
    '%s Y: %b C: %s P: %d',
       $this->brand,
       $this->year,
       $this->color,
       $this->price
  );
}

     Este método devolverá un resumen con todas las propiedades de nuestro objeto. Si quieres saber más sobre esta función HAZ CLIC AQUÍ

     Una vez hayamos completado nuestro Método, podremos llamarlo, al igual que hicimos con los anteriores:

// Otros ejemplos con métodos y propiedades
print $miNuevoVehiculo->getDetailsVehicle();

     Si refrescamos el navegador, el resultado obtenido en pantalla debería ser como el siguiente:

OOP PHP | www.drupaladicto.com - Consultor especializado en drupal y symfony