Poo en php
En programación, un objeto es una unidad que encapsula estado y comportamiento.En un programa representaríamos los libros con objetos que estarían constituidos de estado y
comportamiento. El estado vendría representado por las propiedades del objeto, mientras que el
comportamiento vendría definido por los métodos.
Para representar un libro podríamos optar por varias estrategias en PHP.
<?php
$aBookTitle = 'Don Qujote';
$aBookAuthor = 'Miguel de Cervantes';
$aBookAvailable = true;
echo "El libro se titula ".$aBookTitle." y está escrito por ".$aBookAuthor;
?>
Afortundamante PHP ofrece una estructura de datos que podría encajar muy bien aquí: los arryas
asociativos.
<?php
2
3 $aBook = array(
4 'title' => 'Don Quijote',
5 'author' => 'Miguel de Cervantes',
6 'available' => true
7 );
8
9 echo "El libro se titula ".$aBook['title']." y está escrito por ".$aBook['author\
10 '];
11 ?>
Pero vayamos por partes: las propiedades del objeto son como variables definidas dentro del ámbito
del objeto y pueden adoptar cualquier tipo de valor soportado por el lenguaje de programación,
incluyendo otros objetos.
1 <?php
2 class Book {
3 var $title;
4 var $author;
5 var $available;
6 }
7 ?>
Este código muestra cómo instanciar un objeto de la clase Book.
Instanciar es crear una variable del tipo de objeto deseado. La clave new le dice a PHP que cree un
objeto de la clase Book en memoria y lo asocie a la variable $aBook.
¿Qué pasaría si añadimos una línea al código anterior y creamos otra instancia de Book?
1 <?php
2
3 class Book {
4 var $title;
5 var $author;
6 var $available;
7 }
8
9 $aBook = new Book();
10 $otherBook = new Book();
11
12 ?>
$otherBook es un objeto de la clase Book, o sea, de la misma clase que $aBook, pero es un objeto
distinto. Ocupa diferente espacio en memoria. Aunque se usasen los mismos dato representan dos
libros físicamente distintos, de la misma forma en que una biblioteca puede tener varios ejemplares
de un mismo título.
¿Cómo asignamos valores a las propiedades del objeto?
<?php
2
3 class Book {
4 var $title;
5 var $author;
6 var $available;
7 }
8
9 $aBook = new Book();
10 $aBook->title = 'Don Quijote';
11 $aBook->author = 'Miguel de Cervantes';
12 $aBook->available = true;
13
14 echo "El libro se titula ".$aBook->title." y está escrito por ".$aBook->author;
15
16 ?>
Las propiedades privadas sólo están accesibles dentro del objeto en que
están definidas. Pero entonces no tenemos modo de asignar ni obtener sus valores. Necesitamos
métodos para ello. Los veremos dentro de un momento.
<?php
2
3 class Book {
4 private $title;
5 private $author;
6 private $available;
7
8 function __construct($aTitle, $anAuthor) {
9 $this->title = $aTitle;
10 $this->author = $anAuthor;
11 }
12 }
13
14 $aBook = new Book('El Quijote', 'Miguel de Cervantes');
15
16 ?>
Lo más llamativo de este método es la partícula $this->. Esta partícula indica que nos referimos
a la propiedad con ese nombre del objeto. También usaremos $this para referirnos a los métodos.
$this viene a significar “la instancia actual de la clase”.
Obetener el valor de propiedades privadas: getters
Ahora que nuestro libro ya puede tener título y autor se nos plantea el problema de acceder a esos
valores. Es decir, hemos aprendido a asignar valores a las propiedades durante la construcción del
objeto, pero ¿cómo accedo a esos valores si necesito consultarlos más adelante?
Para ello debemos escribir métodos que nos los devuelvan. A este tipo de métodos se les suele llamar
getters: Veamos un ejemplo:
<?php
2
3 class Book {
4 private $title;
5 private $author;
6 private $available;
7
8 function __construct($aTitle, $anAuthor) {
9 $this->title = $aTitle;
10 $this->author = $anAuthor;
11 }
12
13 public function getTitle() {
14 return $this->title;
15 }
16 }
17
18 $aBook = new Book('El Quijote', 'Miguel de Cervantes');
19 echo $aBook->getTitle();
20
21 ?>
El método getTitle nos permite obtener el contenido de la propiedad $title del objeto. Como
puedes ver las visibilidad del objeto es pública, para que pueda ser usado por nuestro programa y se
limita a devolver el valor mediante return.
En nuestro caso, puede que nos interese poder acceder al título para generar listados de los libros
utilizados por un lector determinado. Podría ser incluso que nunca necesitemos un método que nos
devuelva sólo el autor, sino una cadena que combine título y autor. Todo esto depende, obviamente,
de los casos de uso que queremos cubrir con nuestra aplicación. Veamos un ejemplo:
Qué son los objetos y cómo se crean 11
1 <?php
2
3 class Book {
4 private $title;
5 private $author;
6 private $available;
7
8 function __construct($aTitle, $anAuthor) {
9 $this->title = $aTitle;
10 $this->author = $anAuthor;
11 }
12
13 public function getTitle() {
14 return $this->title;
15 }
16
17 public function getAsReference() {
18 return $this->author.', '.$this->title;
19 }
20 }
21
22 $aBook = new Book('El Quijote', 'Miguel de Cervantes');
23 echo $aBook->getAsReference();
24
25 ?>
Una nota sobre los nombres de los métodos: deberían revelar las intenciones, o sea, el nombre del
método debería indicar qué hace el método y qué podemos esperar de él. El nombre del método no
debe reflejar el cómo lo hace.
Asignar valor a propiedades: setters.
<?php
class foo
{
function hacer_algo()
{
echo "Haciendo algo.";
}
}
$bar = new foo;
$bar->hacer_algo();
?>
Una primera forma de afrontar la cuestión es crear métodos que nos permitan asignar valores
a propiedades. A los métodos cuyo propósito es asignar valores a una propiedad específica los
llamamos setters. Para asignar valores a $available, podríamos hacer lo siguiente:
<?php
2
3 class Book {
4 private $title;
5 private $author;
6 private $available;
7
8 function __construct($aTitle, $anAuthore) {
9 $this->title = $aTitle;
10 $this->author = $anAuthor;
11 $this->available = false;
12 }
13
14 public function setAvailable($available) {
15 $this->available = $available;
16 }
17
18 public function getAvailable() {
19 return $this->available;
20 }
21 }
22
23 $aBook = new Book('El Quijote', 'Miguel de Cervantes');
24 $aBook->setAvailable(true);
25 ?>
Comentarios
Publicar un comentario