Programación orientada a objetos (POO) con PHP (II), la palabra clave ‘this’.
En la Programación Orientada a Objetos, hay ocasiones en las que resulta útil referirse al objeto desde el que se está ejecutando un método.
En esas ocasiones se puede usar la referencia especial de objeto this, pero siempre dentro de un método no estático.
Esta referencia se suele usar para pasar una referencia al objeto actual como un parámetro para otros métodos.
En el primer tutorial de esta serie , aprendimos cómo agrupar el código relacionado con un tema determinado en una sola clase.
Como ejemplo, escribimos una clase Coche que agrupa el código que maneja automóviles.
class Coche { public $comp; public $color = 'beige' ; public $techoSolar = true; public function hola() { return "beep" ; } }
Creamos dos objetos fuera de la clase para poder usar su código.
$bmw = new Coche(); $mercedes = new Coche();
Utilizando la palabra clave $ this
La palabra clave $this indica que usamos los propios métodos y propiedades de la clase, y nos permite tener acceso a ellos dentro del alcance de la clase.
La palabra clave $this nos permite acercarnos a las propiedades y métodos de la clase desde dentro de la clase utilizando la siguiente sintaxis:
- Solo la palabra clave $ this comienza con el signo $ , mientras que los nombres de las propiedades y métodos no comienzan con ella.
$this -> nombrePropiedad; $this -> nombreMetodo();
Vamos a ilustrar lo que acabamos de decir en la clase Coche . Habilitaremos el método hola() para que se acerque a las propiedades de la clase usando la palabra clave $this .
Para acercarse a la propiedad $comp usamos:
$this -> comp
Para acercarse a la propiedad $color usamos:
$this -> color
Así es como se ve el código:
class Coche { // propiedades public $comp; public $color = 'beige' ; public $techoSolar = true; public function hola() { return "Beep, soy un <i>" . $this -> comp . "</i>, y soy de color <i>" . $this -> color ; } }
Creemos dos objetos de la clase:
$bmw = new Coche(); $mercedes = new Coche();
y establezca los valores para las propiedades de clase:
$bmw -> comp = "BMW" ; $bmw -> color = "azul" ; $mercedes -> comp = "Mercedes Benz" ; $mercedes -> color = "verde" ;
Ahora podemos llamar al método hola() para el primer objeto de automóvil:
echo $bmw -> hello();
Resultado:
Beep Soy un BMW y soy azul .
Y para el segundo objeto del auto.
echo $mercedes -> hello();
Resultado:
Beep Soy un Mercedes Benz , y soy de color verde .
Este es el código que hemos escrito en este tutorial:
class Coche{ // propiedades public $comp; public $color = 'beige' ; public $techoSolar = true; // Metodo para saludar public function hola() { return "Beep Soy un <i>" . $this -> comp . "</i>, y soy de color <i>" . $this -> color ; } } // Creamos un nuevo objeto $bmw = new Coche(); $mercedes = new Coche(); // Establecemos las propiedades. $bmw -> color = 'azul' ; $bmw -> comp = "BMW" ; $mercedes -> comp = "Mercedes Benz" ; // LLamamos al método hola() del objeto $bmw. echo $bmw -> hello();
Self y Parent
A parte de la palabra resrvada this, también disponemos de las palabras self y parent.
Cuando queramos acceder a una constante o método estático desde dentro de la clase, usamos la palabra reservada: self.
Cuando queramos acceder a una constante o método de una clase padre, usamos desde la clase extendida la palabra reservada: parent. Un caso típico es cuando en una clase extendida se sobreescribe el mismo método eliminando las definiciones y cambiando su visibilidad del método de la clase padre,
- Diferencia entre $this y self::
Uno usa $this para hacer referencia al objeto (instancia) actual, y se utiliza self:: para referenciar a la clase actual.
Se utiliza $this->nombre para nombres no estáticos y self::nombres para nombres estáticos.
<?php class funcion { private $valor_no_estatico = 100; private static $valor_estatico = 200; function __construct() { echo $this-$valor_no_estatico; echo self::$valor_estatico; } } ?>
Conclusión
Hemos aprendido cómo usar la palabra clave $this para obtener las propiedades y métodos de la clase desde dentro de la propia clase.
En el próximo post trataremos el encadenamiento de métodos y propiedades.