Estoy haciendo la transición al uso de OOP para todos mis proyectos, históricamente todo lo que he construido ha sido bastante pequeño y OOP no parecía ser una opción eficiente, pero ahora con grandes proyectos sí lo es. Sin embargo, más recientemente me he encontrado con más y más preguntas de "mejores prácticas" que tengo y no puedo encontrar la respuesta.PHP OOP Theory - ¿Error al verificar dentro o fuera de la clase?
Por ejemplo, imagina que tengo el siguiente:
class numbers{
function __construct($number){
$this->number = (int)$number;
}
function add($add){
$this->added = $this->number + $add;
}
function multiply($multiply){
$this->multiplied = $this->number * $multiply;
}
function minus($minus){
$this->minused = $this->number - $minus;
}
function number(){
return $this->number();
}
}
Ahora vamos a decir que quiero aplicar add
, entonces multiply
y luego minus
. Cada etapa puede fallar (no incluí eso en el ejemplo, pero imagino que está allí). Aquí es donde radica mi problema, debería hacer:
$numbers = new numbers(8);
if($numbers->add(7)){
if($numbers->multiply(6)){
if($numbers->minus(7){
echo $numbers->number();
}else{
echo 'error minusing';
}
}else{
echo 'error multiplying number';
}
}else{
echo 'error adding number';
}
O debería tener esa parte en mi constructor, como:
class numbers{
function __construct($number){
$this->add(6);
$this->multiply(9);
$this->minus(7);
if($this->error){
return false;
}else{
return true;
}
}
function add($add){
$this->added = $this->number + $add;
if(!this->added){
$this->error = "couldn't be added";
}
}
function multiply($multiply){
$this->multiplied = $this->number * $multiply;
if(!this->multiplied){
$this->error = "couldn't be multiplied";
}
}
function minus($minus){
$this->minused = $this->number - $minus;
if(!this->minused){
$this->error = "couldn't be minused";
}
}
function number(){
return $this->number();
}
function error(){
return $this->error();
}
}
y luego simplemente hacer:
$numbers = new numbers(5);
if($numbers){
echo $numbers->number();
}else{
echo $numbers->error();
}
este momento si el ejemplo es largo (también ignoro los errores, lo escribí aquí solo para delinear lo que trato de hacer, este no es el código que estoy usando ...) pero no sé cómo pregunta sin un ejemplo. Básicamente, ¿debería estar revisando los errores dentro de la clase o debería hacerlo afuera cuando llamo a la clase?
@FrustratedWithFormsDesigner: ¿Por qué la edición? El método se llama 'menos' - es perfectamente aceptable usar la forma del verbo en este caso. Creo que su edición hizo la pregunta más confusa, no menos. – Gian
@Gian: cuando se usa un nombre de método como verbo, generalmente es mejor dejar en claro que se está hablando del método, no de un verbo general, más similar. Esto: "Quiero' agregar', luego 'multiplicar' y luego' menos'. " deja en claro que estás hablando de llamar al método 'menos', sin tratar de usar mal la palabra "menos" como verbo. – FrustratedWithFormsDesigner
En el mundo de habla inglesa, se llama restar. Minus es un signo. –