Você está na página 1de 10

Aprende programacin orientada a objectos (POO) con PHP desde cero

https://styde.net/aprende-programacion-orientada-a-objectos-poo-con-php/

Curso: PHP y programacin orientada a objetos


Ver todas las lecciones
En esta nueva serie, vamos a explicarte qu son las clases, los constructores, qu es la
herencia, cmo funciona la visibilidad de propiedades y mtodos, tambin te daremos una
introduccin a la inyeccin de dependencias, interfaces, mtodos mgicos, clases
abstractas, encadenar mtodos, autocarga, getters y setters.

Cmo definir una clase, propiedades y mtodos


Una clase, es un molde a partir del cual podemos crear objetos. Cuando definimos una
clase, debemos determinar tambin qu propiedades y mtodos tendrn los objetos que
crearemos a partir de ella, con ellos nos referimos a un concepto importante de la POO
llamado abstraccin.
Las propiedades de una clase son sus caractersticas, y podemos pensar en ellas como
variables que se definen con un valor inicial:
$color = 'White';age = 21;
$bedrooms = 4;

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.

Cmo se define una clase?


La clase se define anteponiendo la palabra class al nombre que le daremos, por
convencin el nombre de una clase va en singular y con la primera letra en mayscula, y
luego abrimos y cerramos llaves:
class Square
{
}

1
2
3

class Square
{
}

A continuacin, definiremos todas sus caractersticas o propiedades que tendrn los


objetos que crearemos a partir de ella, declarando variables a las que debemos anteponer
una palabra reservada que servir como modificador de visibilidad, es decir,
determinaremos desde donde se podr acceder a dicha variable o propiedad, existen tres
categorias: public, private o protected, que cubriremos ms adelante.
class Square
{
// propiedad, variable o carac
private $number;

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.

Cmo crear una instancia


Una vez definida la clase que servir de modelo para nuestro trabajo, ya podemos empezar
a crear objetos a partir de ese modelo. Cada objeto que hagamos a partir de una clase se
denomina instancia.
Para crear una instancia a partir de esta clase, en otro archivo llamado index.php,
incluiremos la clase y crearemos un objeto a partir de ella:

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:

Leer el valor de alguna propiedad

Definir un nuevo valor a alguna de sus propiedades

Ejecutar alguno de sus mtodos

Se pueden leer los valores de sus propiedades de la siguiente manera lo ms


recomendable es hacerlo mediante un getter:
include 'Square.php';
$instance = new Square();

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;

Tambin se pueden ejecutar sus mtodos de la siguiente manera:


include 'Square.php';
$instance = new Square();

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.

Al ejecutarse con su mtodo constructor.


class Square
{
private $number;

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;
}
}

Y en nuestro archivo index.php


include 'Square.php';
$instance = new Square();
echo $instance->area(10);

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

public function getNumber()


{
return $this->number;
}

Por el contrario, la estructura de un mtodo setter s debe recibir un parmetro


obligatoriamente, que ser el valor que se le asignar a la propiedad. No devolver nada
con return, simplemente le asignar un valor.

public function setNumber($valu


{
$this->number = $value;
}

1
2
3
4

public function setNumber($value)


{
$this->number = $value;
}

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.

Você também pode gostar