Está en la página 1de 7

De Objetos y Clases

Empezamos con algo suavito. Qu es un objeto? Qu es una clase? Son lo mismo? En


qu se parecen y diferencian?
Una clase es algo conceptual, es la definicin, ms bien la base de los objetos. Las clases
definen las propiedades y los mtodos que luego podrn usar los objetos. En trminos de
una aplicacin, usaremos un usuario. Sabemos que un usuario va a tener, por ejemplo, un
valor usuario y otro valor password as como un mtodo para hacer login.
El objeto, por otro lado, es la usuario en s que se ajusta a lo que hemos definido en
la clase. Por tanto, tenemos al usuario juan con contrasea 01juan01 y sabemos que puede
hacer login. Se dice que juan es una instancia del objeto Usuario. Podemos tener cienes
y cienes de usuarios, pero sabemos que todos ellos tienen lo mismo.
Ahora en PHP
Crear una clase en PHP es bastante sencillo y no difiere mucho a como se hace en otros
lenguajes de programacin:
PHP

class Usuario { }

Ahora veamos cmo podemos crear a juan. Solo tendremos que valernos de la palabra
clave new.
PHP
$juan = new Usuario;

Por ahora fcil, no?

Aadiendo propiedades
Una propiedad no es ms que una variable, y la usaremos para guardar informacin sobre el
objeto en s. Veamos cmo aadir nuestras propiedades.
PHP

class Usuario {
public $usuario;
public $password;
}

En seguida veremos qu es public. Por ahora qudate con que la propiedad es pblica lo
cual quiere decir que cualquiera puede acceder a ella. Despus de public, tenemos el
nombre de la propiedad.

Veamos cmo escribir y leer estas propiedades.


PHP

class Usuario {
public $usuario;
public $password;
}
$juan = new Usuario;
$juan->usuario = 'juan';
$juan->password = '01juan01';
echo $juan->usuario; // juan

Si te fijas, estamos usando $juan->[nombre_propiedad]. Quiz te ests preguntando


por qu no puedo hacer algo as? Usuario->usuario. La respuesta es, que puede haber un
nmero indeterminado de usuarios y, el valor 01juan01 est dentro del objeto, no de la
clase.

Aadiendo mtodos
Aadir mtodos es tan sencillo como aadir propiedades. Vamos a aadir un mtodo para
saludar.
PHP
class Usuario {
public $usuario;
public $password;
public function saludar() {
echo 'Hola ' . $this->usuario . '!';
}
}

Lo primero que te estars preguntando es qu es $this? $this es la forma que tienen


los objetos de referirse a s mismos. Por ende, para poder acceder al valor de $usuario
desde el propio objeto, tendremos que valernos de $this.
Llamar al mtodo no tiene mucho misterio:
PHP

$juan = new Usuario;


$juan->usuario = 'juan';
$juan->saludar(); // Hola juan!

Ahora, si usamos varios objetos, podemos almacenar valores distintos en ellos y llamar a
sus mtodos:
PHP
$usuarios = null;
$usuarios[] = new Usuario;
$usuarios[] = new Usuario;

$usuarios[0]->usuario = 'juan';
$usuarios[1]->usuario = 'manolo';
foreach ($usuarios as $usuario) {
$usuario->saludar();
} // 'Hola juan!' // 'Hola manolo!'

Mtodos mgicos
PHP nos ofrece una serie de mtodos mgicos que son llamados cuando realizamos ciertas
acciones con el objeto, como por ejemplo cuando un objeto es creado. Esto nos ayuda a
automatizar trabajo en ciertas ocasiones.

Constructores y destructores
Cuando una clase se crea o se destruye, se llama a unos mtodos mgicos como ya hemos
adelantado. Si queremos realizar alguna accin en cualquiera de los dos eventos, tendremos
que definir esos mtodos e implementar su funcionalidad.
El mtodo __construct() se llama cuando creamos una clase y suele ser un buen punto
para rellenar informacin por defecto, o formar un objeto con algo que venga de la base de
datos, etc.
PHP
class Usuario {
public $usuario;
public $password;
public function __construct() {
$this->password = '1234'; //Seguridad al poder!
}
}
$usuario = new Usuario;
echo $usuario->password; // 1234

Cabe destacar que podemos pasar datos al constructor:


class Usuario { public $usuario; public $password; public function __construct($usuario)
{ $this->password = '1234'; $this->usuario = $usuario; } } $usuario = new Usuario('juan');
echo $usuario->usuario; // juan
Por otro lado, el destructor se llama cuando la clase es destruida. Esto ocurre
automticamente cuando PHP termina de ejecutarse, libera todos los recursos que tenga
asociados y va llamando al mtodo __destruct() de todas las clases en caso de que lo
tengan. Tambin podemos forzarlo usando la funcin unset sobre el objeto. En el
destructor se suelen implementar cierres de conexiones a bases de datos, liberacin de
memoria, etc.
Vemoslo en un breve ejemplo:

PHP

class Usuario {
public $usuario;
public $password;
public function __construct($usuario) {
$this->password = '1234';
$this->usuario = $usuario;
}
public function __destruct() {
echo 'Muero...';
}
}
$usuario = new Usuario('juan');
unset($usuario); // 'Muero...';

Nota: Existen ms mtodos mgicos que he obviado porque no los considero importantes
para un curso bsico de orientacin a objetos. No obstante si eres curioso o quieres saber
ms, no dejes de echarle un vistazo a la documentacin oficial.

Herencia de clases
Aqu es donde veremos uno de los aspectos ms potentes de la orientacin a objetos. Una
clase puede heredar propiedades y mtodos de otra clase. Esto es til cuando quieres
aadir funcionalidad a una clase ya existente.
Siguiendo nuestro ejemplo, nuestra clase padre es Usuario y ahora, vamos a crear una
clase hija que sea Administrador.
PHP
class Usuario {
public $usuario;
public $password;
public function saludar() {
echo 'Hola ' . $this->usuario;
}
}
class Administrador extends Usuario {
public function banear($usuario) {
echo $usuario->usuario . " ha sido baneado";
}
}
$usuario = new Usuario;
$usuario->usuario = 'juan';
$admin = new Administrador;
$admin->usuario = 'Sper Lpez';
$admin->saludar(); // Hola Sper Lpez
$admin->banear($usuario); // juan ha sido baneado

Usando la palabra clave extends, la clase Administrador ha heredado las propiedades


usuario y password y el mtodo saludar y hemos aadido un nuevo mtodo banear a
esta clase extendiendo las funcionalidades bsicas de un usuario. Quiz el ejemplo sea muy

absurdo pero tened en cuenta que podemos querer implementar funciones ms complejas
como login, logout, etc. y de esta forma nos acabamos ahorrando muchsimo cdigo.
Qu pasara si quiero que saludar sea distinto en el Administrador?

Sobreescribiendo mtodos
Sobreescribir un mtodo es tan sencillo como volverlo a definir! En la clase hija,
volvemos a definir el mtodo saludar.
PHP

class Usuario {
public $usuario;
public $password;
public function saludar() {
echo 'Hola ' . $this->usuario;
}
}
class Administrador extends Usuario {
public function saludar() {
echo 'Hola admin>> ' . $this->usuario;
}
public function banear($usuario) {
echo $usuario->usuario . " ha sido baneado";
}
}
$admin = new Administrador;
$admin->usuario = 'Sper Lpez';
$admin->saludar(); // Hola admin>> Sper Lpez

Si adems queremos mantener la funcionalidad original, podemos hacerlo llamando a la


funcin del padre:
PHP

class Usuario {
public $usuario;
public $password;
public function saludar() {
echo 'Hola ' . $this->usuario;
}
}
class Administrador extends Usuario {
public function saludar() {
echo '';
parent::saludar();
echo '!';
}
public function banear($usuario) {
echo $usuario->usuario . " ha sido baneado";
}
}
$admin = new Administrador;
$admin->usuario = 'Sper Lpez';

$admin->saludar(); // Hola Sper Lpez!

Como vers, hemos mezclado funcionalidades de ambos mtodos.

Visibilidad de mtodos y propiedades


Hasta ahora tanto las propiedades como los mtodos que hemos vistos, eran todos public.
Ahora vamos a ver qu significa eso y el resto de tipos que tenemos.

public
A los mtodos y propiedades public, se puede acceder desde cualquier sitio. Tanto dentro
de la clase como fuera.

protected
Cuando declaramos una propiedad o mtodo como protected, solo podremos accederlos
desde la propia clase o sus descendientes (las clases hijas).

private
Los mtodos y propiedades private solo pueden ser ledos dentro de la propia clase que lo
define. Este breve ejemplo nos muestra lo que pasara:
PHP
class Usuario {
public $usuario;
private $password;
}
$usuario = new Usuario;
$usuario->password = 'Argofifa'; // <-- ERROR!

Clases y mtodos estticos


Las clases y mtodos estticos pueden ser de cualquiera de los tipos anteriores, public,
protected o private pero tienen la peculiaridad de que no requieren que la clase sea
instanciada. Adems, las propiedades estticas guardan el valor durante la ejecucin del
script. Veamos un breve ejemplo:
PHP
<?php
class Usuario {
public $usuario;
public $password;
public static $contador = 0;
public function __construct() {
self::$contador++;
}

}
$usuario1 = new Usuario;
echo Usuario::$contador; // 1
$usuario1 = new Usuario;
echo Usuario::$contador; // 2
?>

Ten en cuenta, que cuando nos referimos a una propiedad o mtodo esttico, no podremos
hacer uso de $this, pero tendremos acceso a self, que viene a ser lo mismo solo que
nicamente podremos usar mtodos y propiedades estticas. Puedes llamar a mtodos y
usar propiedades estticas desde un mtodo pblico pero no al contrario.
Y hasta aqu por ahora. Ahora mismo tendras que tener una idea ms clara del estilo de
programacin con objetos. Te recomiendo que empieces a probar por tu cuenta y, si tienes
dudas, vengas y las comentes. Aprender la programacin orientada a objetos es uno de los
pasos importantes de la vida de todo programador. Cuando se lleva a cabo de la forma
adecuada, el cdigo producido ser ms fcil de leer, de mantener e incluso podrs
compartir clases entre distintas aplicaciones ya que una clase solo debe contener cdigo
relacionado con su propia clase.
En algn momento del futuro lejano publicar un artculo sobre la metodologa MVC, otro
de los grandes escollos con los que nos encontramos en nuestra carrera de programadores.
Crees que hay algo que se haya quedado por explicar? Algn punto que no entiendas?
Ya usas la orientacin a objetos y crees que podras dar algn consejo a un principiante?
nimo! Djanos un comentario.

También podría gustarte