martes, 22 de enero de 2013

Clases, Objetos y Constructores en PHP


Para entender los constructores hay que tener claro el concepto de clase y objeto.

No voy a utilizar definiciones formales, ni voy a referenciar a otros sitios. Si no queda claro, siempre se puede preguntar e intentare aclararlo cuando sea posible.

CLASES

Una clase es la definición de como son las cosas.
Por ejemplo, podemos tener una clase Persona, a la cual le asignaremos una altura y un nombre.
Quedaría definida tal que así:
class Persona {
   var $nombre;
   var $altura;
}

Esta es la definición básica de una clase persona.
A cada variable interna que creamos la llamaremos atributos. Así pues Persona tiene dos atributos: nombre y altura.

 Ahora pasaremos a ver los objetos y su relación con las clases.

OBJETOS

Los objetos son cosas concretas de un determinado tipo. Al tipo al que nos referimos será la clase.
Por ejemplo, tenemos la clase persona, así que ahora podemos definir diferentes objetos de esa clase.

$juan = new Persona;
$jesus = new Persona;
$ana = new Persona;

Acabamos de crear 3 objetos de tipo Persona (también se puede decir que hemos creado 3 instancias de la clase Persona).

Ahora podríamos acceder a ellos y asignarles diferentes valores a sus atributos.
Por ejemplo:

$juan->nombre = "Juan";
$juan->altura = 182;

$jesus->nombre = "Jesus Alfonso";
$jesus->altura = 168;

$ana->nombre = "Ana";
$ana->altura = 162;
No debemos confundir el nombre de la variable de los objetos, en este caso: $juan, $jesus y $ana con el atributo nombre que le hemos dado a esta clase "Juan", "Jesus Alfonso", "Ana".
Ni es obligatorio que una clase tenga atributo nombre, ni este ha de ser el mismo que el de la variable. Simplemente debemos nombrar la variable de la manera que mejor nos recuerde que contiene.

Podemos tambien imprimir los datos de los objetos:
print "Nombre: " . $juan->nombre . ", altura: ". $juan->altura;
print "Nombre: " . $jesus->nombre . ", altura: ". $jesus->altura;
print "Nombre: " . $ana->nombre . ", altura: ". $ana->altura;

CONSTRUCTORES

A la hora de crear objetos nos puede venir bien tener constructores, que son funciones que se ejecutan al crear el objeto de una clase.

Los podemos utilizar para inicializar valores de la clase, enlazar el objeto con otros objetos, mostrar mensajes por pantalla, etc. para lo que queramos básicamente.
Para crear un constructor hay que definir una función llamada __construct en la cual definiremos lo que vamos a hacer.
En la clase Persona que vimos anteriormente vamos a crear un constructor que nos muestre un mensaje por pantalla e inicialice la altura y nombre de los objetos que creemos posteriormente.

class Persona {
 var $nombre; // esto es un atributo
 var $altura; // esto es un atributo

 function __construct($nombre, $altura){ // este es el constructor
  print "Creando objecto de la clase Persona con nombre " . 
    $nombre . " y altura " . $altura . "cm";
  $this->nombre = $nombre;  
  $this->altura = $altura;
 }
}
Nota: Como podemos ver, hacemos uso de la variable $this. Esta variable nos sirve para acceder a los parámetros y funciones de la clase.

En este caso accedemos al parámetro nombre y altura.

Gracias al constructor ahora podemos crear objetos de manera más rápida.
$juan = new Persona("Juan", 182);
$jesus = new Persona("Jesus Alfonso", 168);
$ana = new Persona("Ana", 162);

Ahora ya podríamos acceder a estos objetos, y a sus variables.
print "Nombre: " . $juan->nombre . ", altura: ". $juan->altura;
print "Nombre: " . $jesus->nombre . ", altura: ". $jesus->altura;
print "Nombre: " . $ana->nombre . ", altura: ". $ana->altura;
Nota: En este caso no se hace uso de la variable $this, para acceder a los parámetros, sino que se utiliza el nombre del objeto en concreto. La variable $this se utiliza sólo dentro de la definición de la clase.

La salida que obtenemos es la siguiente:

Creando objecto de la clase Persona con nombre Juan y altura 182cm
Creando objecto de la clase Persona con nombre Jesus Alfonso y altura 168cm
Creando objecto de la clase Persona con nombre Ana y altura 162cm
Nombre: Juan, altura: 182
Nombre: Jesus Alfonso, altura: 168
Nombre: Ana, altura: 162

Se pueden bajar los archivos usados de ejemplo desde los siguientes enlaces:
Ejemplo 1: clase básica.
Ejemplo 2: clase con constructor.

2 comentarios:

  1. Muchichísimas gracias por tu ayuda!!! :)

    ResponderEliminar
  2. My brother suggested I may like this web site. He was once entirely right.
    This post actually made my day. You can not imagine just how so much time I had spent
    for this information! Thanks!

    Also visit my blog post anti cellulite treatment

    ResponderEliminar