Creando Objetos en PHP

      No hay comentarios en Creando Objetos en PHP

Originalmente PHP no nació como un lenguaje orientado a objetos y no fue sino hasta la versión de PHP 5 que se le empezó a dar soporte a esto.

En este artículo vamos a ver como crear objetos en PHP junto con algunos conceptos básicos.

No quiero divagar demasiado con conceptos teóricos y aburrirlos, así que para empezar vamos como definir una clase en PHP.

(El código completo lo pueden encontra aca)

Este es el diagrama en UML de la clase con la que trabajaremos

Rectangle

El código en PHP para implementar esta clase es

<?php
class Rectangle{
private $x;
private $y;
private $height;
private $width;

public function __construct($width=10, $height=10, $x=0, $y=0){
$this->width = $width;
$this->height = $height;
$this->x = $x;
$this->y = $y;
}

public function getArea(){
return $this->height*$this->width;
}

public function printInfo(){
printf("Area ".($this->height * $this->width)." xPos = ".$this->x." yPos = ".$this->y."<br/>");
}
}

?>





Esta definición de clase nos va a servir para ver varios conceptos.

Al igual que la mayoría de los lenguajes orientados a objetos, PHP usa la noción de clases como un lugar donde se definen los atributos y métodos, que dan soporte al estado y comportamiento de un objeto que será instancia de dicha clase.

En el ejemplo observamos que tenemos 4 atributos:

  • x
  • y
  • width
  • height

y  3 métodos

  • __construct()
  • getArea()
  • printInfo()

A su vez también observamos que cada uno de ellos viene acompañado de su modificador de acceso, que determina cual será la visibilidad que tendrán los demás objetos de otras clases.

Para nuestro caso todos los atributos son private, esto quiere decir que ningún otro objeto de otra clase podrá acceder a dichos atributos sino atraves de métodos públicos.

Los métodos en nuestra clase son public y esto permite que cualquier objeto de otra clase pueda ver invocar a los mismos.

Tanto los métodos como atributos públicos de nuestro objeto conforman lo que se denomina su interfaz.

$this

Cuando queremos referirnos a los atributos de un objeto desde dentro del mismo objeto usamos la palabra reservada $this. 

Esta forma de acceder a los atributos/métodos nos permite entre otras cosas eliminar la ambigüedad. Esto puede verse bien dentro del método __construct($width=10, $height=10, $x=0, $y=0). En este, tenemos que que encontrar una forma de diferenciar cuando nos referimos a atributos del objeto y cuando nos referimos a los parámetros del método ya que ambos tienen el mismo nombre.

Un dato interesante, es que a diferencia de otros lenguajes como Java, si sacamos $this para hacer referencia a un atributo dentro de un método, nos saltará un error diciéndonos que la variable esta indefinida. Como ejemplo, basta con sacar la $this en la sentencia  return $this->height*$this->width; y observar que sucede.

Creando el objeto

Ahora que tenemos definida la clase, vamos a crear unos cuantos objetos.

<?php
include 'Rectangle.php';

$square1 = new Rectangle(100,100);
$square2 = new Rectangle(100,100,20,40);

$rectangle1 = new Rectangle(50,60, 10,20);
$rectangle2 = new Rectangle(null,null,20,10);
$rectangle3 = new Rectangle();

printf("Area for square1 ".$square1->getArea()."<br/>");
printf("Area for square2 ".$square2->getArea()."<br/>");

printf("Info about rectangle1: ");
$rectangle1->printInfo();

printf("Info about rectangle2: ");
$rectangle2->printInfo();

printf("Info about rectangle3: ");
$rectangle3->printInfo();
?>

Para crear objetos o instancias de una clase usamos la palabra reservada new y el nombre de la clase. El resultado de ejecutar esta instrucción es que se reserva un espacio en memoria capaz de albergar a nuestro objeto y se devuelve una referencia a dicho espacio.

Vale la pena recalcar que lo que va a contener cada una de las variables a las que se le asigna new Rectangle(…) es en realidad una referencia a un objeto y no el objeto en si mismo.

Reference

__construct()

Cuando creamos el objeto con new, el intérprete de PHP buscará dentro de la definición del objeto el método __construct; si este existe lo ejecutará. En el podemos hacer todas las inicializaciones que necesitemos. Este método es el análogo a lo que en otros lenguajes conocemos como constructores.

Sin embargo es de notar que a diferencia de otros lenguajes no podemos sobrecargar el constructor. Esto tiene su razón de ser, pero no lo vamos a ver en este artículo.

 

Parámetros del constructor

Como vemos en el ejemplo, podemos inicializar un objeto de diversas maneras. Recordemos que el encabezado de nuestro __construct era este

public function __construct($width=10, $height=10, $x=0, $y=0){

 

Esto nos permite que todos los parámetros sean opcionales cuando instanciamos un nuevo objeto, ya que tendrán un valor por defecto.

En los ejemplos de instanciación quedarían:

  • square1: tamaño 100×100 y sus coordenadas por defecto 0,0
  • square2: tamaño 100×100 y coordenadas 20,40
  • rectangle2: tamaño por defecto 10×10 y coordenadas 20,10

Finalmente, la salida de nuestro ejemplo seria

Area for square1 10000
Area for square2 10000
Info about rectangle1: Area 3000 xPos = 10 yPos = 20
Info about rectangle2: Area 0 xPos = 20 yPos = 10
Info about rectangle3: Area 100 xPos = 0 yPos = 0

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

6 + 14 =