Mejorando el ejemplo dado en el post anterior (parte 1) vamos a añadir unas buenas prácticas enviando datos a nuestro objeto.
Diferentes situaciones para pasar un dato a una clase:
– Al crear el objeto, con su método constructor
– Al ejecutar cualquiera de sus otros métodos
– Definir una propiedad pública
Al ejecutarse con su método constructor
class Square
{
private $number;
public function __construct($value)
{
$this->number = $value;
}
public function area()
{
return $this->number * $this->number;
}
}
Ahora para pasarle el valor dinámicamente solo tendremos que cambiar un poco la instacia de nuestra clase:
include 'Square.php'; $side = 10; $instance = new Square($side); echo $instance->area();
Mediante un método
La segunda manera de pasar un dato es en el momento de ejucatar otro de sus métodos, en este caso lo más práctico sería que hiciara al momento de llamar al método area(), así que para el ejemplo eliminaremos el método “construct” y modificaremos la clase.
Square.php
class Square
{
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);
Propiedad pública
Square.php
class Square
{
public $number;
public function area()
{
return $this->number * $this->number;
}
}
El archivo index.php
include 'Square.php'; $instance = new Square(); $instance->number = 12; echo $instance->area();
Importante: con este último ejemplo se está violando una de las reglas básicas de la POO, la encapsulación de los datos internos. Desde el código de nuestra implementación no se debería dar un valor a una propiedad directamente, y tampoco leer datos directamente, para ello existon los getter y setter, para realizar estas tareas tan comunes.
Getters y Setters
La estrucutra de un método getter normalmente es muy sencilla, no recibe parámetros y limita a devolver mediante return el valor de una propiedad.
public function getNumber()
{
return $this->number;
}
Por el contrario, la estructura de un método setter sí debe recibir un parámetro obligatoriamente, que será el valor que se le asignará a la propiedad. No devolverá nada.
public function setNumber($value)
{
$this->number = $value;
}
Debemos modificar nuestra clase para agregar estos dos nuevos conceptos y tener un ejemplo sencillo pero bien realizado.
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;
}
}
Archivo index.php
include 'Square.php'; $instance = new Square(); $instance->setNumber(12); echo $instance->area();
Se debe intentar no caer en el error de definir un getter y un setter para todas las propiedades de un objeto, iría en contra de la idea principal de la POO que es esconder la mayor cantidad de información posible.

