Escolar Documentos
Profissional Documentos
Cultura Documentos
https://styde.net/aprende-programacion-orientada-a-objectos-poo-con-php/
1
2
3
$color = 'White';
$age = 21;
$bedrooms = 4;
En cambio, los mtodos de una clase corresponden a las acciones que es capaz de hacer
la clase y normalmente se escriben con verbos en infinitivo, si nos fijamos en un ejemplo
de la vida real, un gato, sus acciones seran correr, morder, comer, saltar, etc.
1
2
$cat->run();
$cat->eat();
$cat->jump();
En la programacin orientada a objetos, las acciones las definimos con funciones tambin
llamadas mtodos.
1
2
3
class Square
{
}
1 class Square
2 {
3
// propiedad, variable o caracterstica dentro de la clase "Square":
4
private $number;
5 }
Luego se declaran los mtodos que podrn utilizar los objetos creados a partir de esta clase,
que no son ms que funciones declaradas de la misma manera a la que estamos
acostumbrados, slo que adems deben llevar un modificador de visibilidad:
{
return $this->number * $thi
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Square
{
private $number;
public function setNumber()
{
$this->number = 5;
}
public function area()
{
return $this->number * $this->number;
}
}
Importante
Cuando en el cuerpo de los mtodos nos referimos a las propiedades para asignar algn
valor, lo hacemos mediante la palabra reservada $this-> y, a continuacin, el nombre de la
variable sin el signo $, Por qu? Por que ya lo tiene $this.
La palabra $this hace referencia a este objeto, esta instancia, la que est ejecutando el
mtodo. Decir $this->number = 5 es lo mismo que decir: asignar el valor 5 a la variable
number de este objeto de la clase Square en el que estamos.
include 'Square.php';
$instance = new Square();
1
2
3
include 'Square.php';
$instance = new Square();
Desde este instante, $instance ya es un objeto, a pesar de que parece una variable a simple
vista. Es una instancia de la clase Square. Por esta razn, ya posee todas las propiedades
definidas dentro de la clase y tambin la capacidad de ejecutar cualquiera de sus mtodos.
Adems en el mismo momento en que creamos la instancia cuando se ejecuta new, se
ejecuta un mtodo llamado constructor, pero en nuestro caso no lo hemos definido.
Con esta instancia, se pueden realizar cualquiera de las tareas tpicas:
1
2
3
4
5
include 'Square.php';
$instance = new Square();
echo $instance->number;
Esto nos arrojara un error, porque nuestra propiedad $number es private, pero bastara
con cambiar la visibilidad a public para deshacernos del error.
Se pueden definir nuevos valores a sus propiedades de la siguiente manera lo ms
recomendable es hacerlo mediante un setter:
include 'Square.php';
$instance = new Square();
1
2
3
4
5
include 'Square.php';
$instance = new Square();
$instance->number = 7;
1
2
3
4
5
include 'Square.php';
$instance = new Square();
$instance->area();
Mejorando el ejemplo
Ahora s, mejoremos ese mismo ejemplo agregando unas buenas prcticas. No siempre
necesitaremos el area de un cuadrado que mida 5 por lado, as que necesitamos enviar datos
a nuestro objeto. Cul es la mejor situacin para pasar un dato a una clase?
1. Al crear el objeto, con su mtodo constructor.
2. Al ejecutar cualquier de sus otros mtodos.
3. Definir una propiedad pblica.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Square
{
private $number;
public function __construct($value)
{
$this->number = $value;
}
public function area()
{
return $this->number * $this->number;
}
}
Ahora para pasarle el valor dinmicamente, solo tenemos que cambiar un poco la instancia
de nuestra clase de la siguiente manera:
include 'Square.php';
$side = 10;
$instance = new Square($side)
1
2
3
4
5
6
include 'Square.php';
$side = 10;
$instance = new Square($side);
echo $instance->area();
Mediante un mtodo
La segunda manera de pasar un dato es en el momento de ejecutar otro de sus mtodos, en
este caso, lo ms prctico sera que se hiciera al momento de llamar al mtodo area(), as
que para este ejemplo eliminaremos el mtodo construct y modificaremos la clase.
Square.php
class Square
{
1
2
3
Square.php
class Square
4
5
6
7
8
9
10
11
12
{
private $number;
public function area($value)
{
$this->number = $value * $value;
return $this->number;
}
}
1
2
3
4
include 'Square.php';
$instance = new Square();
echo $instance->area(10);
Propiedad pblica
La tercera forma es que definamos una propiedad de visibilidad public que luego ser
usada por un mtodo. Veamos la implementacin.
Square.php
class Square
{
1
2
3
4
5
6
7
8
9
10
11
Square.php
class Square
{
public $number;
public function area()
{
return $this->number * $this->number;
}
}
index.php
include 'Square.php';
$instance = new Square();
$instance->number = 12;
1
2
3
4
5
6
include 'Square.php';
$instance = new Square();
$instance->number = 12;
echo $instance->area();
Nota importante
El problema con sta ltima operacin es que estaramos violando una de las reglas bsicas
de la POO, Ya saben cul? La encapsulacin de los datos internos, que solo deberan
poder accederse mediante la ejecucin de los mtodos de dicha clase. Desde el cdigo de
nuestra implementacin no se debera dar un valor a una propiedad directamente, y
tampoco leer datos directamente, para eso existen los getter y setter, para realizar estas
tareas tan comunes:
Getters y Setters
La estructura de un mtodo getter por lo general es sumamente sencilla, no recibe ningn
parmetro, y se limita a devolver mediante el return el valor de una propiedad.
Sintaxis bsica de un getter.
public function getNumber()
{
return $this->number;
}
1
2
3
4
1
2
3
4
Ahora necesitamos modificar nuestra clase para agregar estos dos nuevos conceptos y tener
un ejemplo sencillo pero bien realizado.
{
return $this->number * $thi
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Square.php
class Square
{
private $number;
public function setNumber($value)
{
$this->number = $value;
}
public function getNumber()
{
return $this->number;
}
public function area()
{
return $this->number * $this->number;
}
}
index.php
include 'Square.php';
$instance = new Square();
$instance->setNumber(12);
1
2
3
4
5
6
include 'Square.php';
$instance = new Square();
$instance->setNumber(12);
echo $instance->area();
Listo! Con esto tenemos nuestro pequeo ejemplo finalizado. Es importante evitar caer en
el error comn: definir un getter y un setter a todas las propiedades de un objeto, ira en
contra de la idea principal de la POO que es esconder la mayor cantidad de informacin
posible.