Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

return this->

Dado a função:

function  transferirSaldo($valor,$conta){
        $this->sacar($valor);
        $conta->depositar($valor);
        return $this;
    }

Poderiam explicar melhor a necessidade de inserir a linha return $this?

Entendi a primeira aplicação em aulas atrás, que me permitiria colocar dois métodos na mesma linha, e no caso desta aula? Não ficou claro para mim.

2 respostas

Olá, Anderson! Tudo bem?

Basicamente, você está retornando uma referência do objeto ContaCorrente no método transferirSaldo. Assim, você pode acessar qualquer método e atributo da classe ContaCorrente a partir do método transferirSaldo.

Exemplo:

require_once "ContaCorrente.php";

$contaCorrenteJoao = new ContaCorrente("5199","122221-2");
$contaCorrenteJoao->titular = "João";
$contaCorrenteJoao->saldo = 500.00;

$contaCorrenteJose = new ContaCorrente("5199","4343343-2");
$contaCorrenteJose->titular = "José";
$contaCorrenteJose->saldo = 1500.00;

/* Perceba que logo após eu realizar a transferência, já chamo o atributo saldo do objeto $contaCorrenteJoao. Isso só é possível por causa do return $this */
var_dump($contaCorrenteJoao->transferir(20.00,$contaCorrenteJose)->saldo);
solução!

Oi Anderson, tudo bem? Na verdade não tem necessidade nenhuma nessa linha de código. Aliás, acredito que o instrutor tenha se enganado ao dizer que o returno do this é uma boa prática em todas as funções que tem retorno. (pelo menos foi assim que eu entendi que ele quis dizer).

Isso por que o retorno do this em funções (métodos na verdade) só é usado em contextos específicos onde se deseja fazer uso do que acabou sendo conhecido como Interface Fluente.

Isso é mais utilizado em ferramentas como frameworks de testes, bibliotecas de ORM, etc.

Não é simplesmente para reduzir a quantidade de linhas, mas sim para trazer uma legibilidade mais fluída potencializando o uso dos métodos. Lembrando que dependendo da implementação do framework ou biblioteca, o uso dessa estratégia é opcional e em outros casos ele é obrigatório.