Академический Документы
Профессиональный Документы
Культура Документы
class Usuario { }
Ahora veamos cmo podemos crear a juan. Solo tendremos que valernos de la palabra
clave new.
PHP
$juan = new Usuario;
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.
class Usuario {
public $usuario;
public $password;
}
$juan = new Usuario;
$juan->usuario = 'juan';
$juan->password = '01juan01';
echo $juan->usuario; // juan
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 . '!';
}
}
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
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
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
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';
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!
}
$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.