Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola pessoal, estou estudando OO a fundo e me deparei com essa dúvida, se algum desenvolvedor OO poder me ajudar agradeço.
então a dúvida é quando devo usar throw ou retornar um false, vejas os exemplos abaixo
Exemplo 01:
public function fazAlgumaCoisa() {
// código aqui
// verifica se é valido, caso não for dispara um exception
throw new Excpetion('ocorreu um erro aqui');
}
OU
Exemplo 02:
public function fazAlgumaCoisa() {
// código aqui
// verifica se é valido, caso não for retorna false
return false;
}
No exemplo 02 poderia retornar um false e depois disparar um exception
Obs.: estou publicando está dúvida pois vi alguns frameworks que eles fazem isso,
retorna false as vezes, então por isso que me veio essa dúvida
Resumidamente, é uma questão de coesão e coerência (sim, do português).
Métodos só devem retornar algo, quando é "pedido". Ou seja, se vocês perguntar ao método algo, ele deve retornar.
O que é perguntar?
Basicamente são os métodos com prefixo: is (é), has (tem), can (pode), get (pegar).
Em suma, os que será retornado também difere pela nomenclatura:
$class->isClass();//boolean
$class->hasProperties() //boolean
$class->canSave(); //boolean
$class->getSomething()//mixed|anything
Exceções:
Um exemplo é o método com prefixo add (adicionar), normalmente é utilizado em conjunto com fluente interface, ou seja, retornará o próprio objeto.
$list->add('string 1')
->add('string 2')
->add('string 3');
Alguns métodos de execução.
Como o PHP não utilizava lançamento de exception (agora no 7 usa por padrão), ele apenas retornava true ou false. Dessa forma, o método ficava responsável por retornar o resultado da execução.
Um exemplo prático é o método PDOStatement::execute(), que, dependendo da configuração, pode lançar uma exception ao invés de retornar false. Como pode ser visto no exemplo do link abaixo:
http://forum.imasters.com.br/topic/519213-transacoes-pdo-em-php/?p=2064505
Por outro lado, quando você "mandar" o método fazer algo, ele deve fazê-lo. Ele só não poderá realizar a sua função, quando ocorrer um erro.
Erro, do ponto de vista da engenharia de software, é algo que sai do percurso de execução do software (conhecido como caminho feliz). Essa saída de percurso é conhecido como exceção (pois pode ocorrer em determinados momentos atípicos).
Se ocorrer um desses momentos atípicos, deve retornar uma exceção.
try {
$transaction->beginTrasaction():
$transaction->execute();
$transaction->commit():
echo 'transação realizada com sucesso';
} catch (Exception $exception) {
$transaction->rollBack():
echo 'Erro: '.$exception->getMessage();
}
Depois, existem outros problemas, que é a questão de validar os retornos e o encadeamento de validações. O Null object, etc..
O livro Clean Code do Robert C. Martin trata muito bem dessa questão. É um capítulo inteiro somente sobre essa questão.
No exemplo 02 poderia retornar um false e depois disparar um exception
Não, é um ou outro. Os dois é impossível.
Obs.: estou publicando está dúvida pois vi alguns frameworks que eles fazem isso,retorna false as vezes, então por isso que me veio essa dúvida
Essa é uma questão a parte. Pois os métodos do PHP por si só são controversos. Dessa forma, os frameworks são construídos tentando manter uma similaridade com a linguagem.
Já a mudança de métodos antigos para um padrão mais aceitável é sempre muito difícil por causa da compatibilidade e a rigidez em não querer se alterar algo.
Sobre isso, você pode ver mais no tópico linkado abaixo (o que é comum de se ver em pessoa atípicas a mudanças):
http://forum.imasters.com.br/topic/550177-mudanca-para-mysqli/
Gabriel Heming Top!
Vlw Gabriel ajudou bastante!
Justamente isso, depende diretamente da sua necessidade e frequência a qual a exceção vai ser lançada.