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

Encadeamento de métodos no PHP

Pessoal, ficou claro para mim o mecanismo de encadeamento das classes. Uma "chamando" a outra, usando o 'require'.

Estou em dúvida sobre como usar um método da classe "Endereco" pelo arquivo banco sem ter que envocar um 'getter' dessa classe.

Explico:

Para instanciar uma nova conta, preciso indicar o titular no parâmetro dessa classe, o que eu faço através de uma outra classe. Novo objeto instanciado 'Titular', eu tenho um endereço, que por sua vez, é uma instância da classe 'Endereco'.

Como faço para recuperar o endereço através da classe conta?

3 respostas
solução!

Olá, Júlio. Basta criar algo como getTitular na classe Conta e um getEndereco na classe Titular.

Não exatamente com esses nomes, mas essa é uma alternativa possível.

Via de regra você não vai precisar disso, inclusive recomendo que você dê uma pesquisada na Lei de Demeter.

:-)

Entendi sua dica, e mesmo sabendo que não é uma boa prática, gosto de explorar os limites da sintaxe da linguagem como forma de consolidar o aprendizado.

Neste sentido, reparei num detalhe que não consigo entender bem. Na aula sobre herança, a classe 'Titular' tem um método 'recuperaCpf()' assim:

public function recuperaCpf():string
{
    return $this->cpf->recuperaNumero();
}

Esse método retorna um objeto do tipo CPF, que por sua vez chama um método 'recuperaNumero' e retorna uma string.

Essa afirmação está correta?

Em segundo lugar, para recuperar um CPF específico, tive que recorrer ao código abaixo no arquivo banco.php.

$annaPaula->recuperaCpfTitular()->recuperaCpf();

Onde $annaPaula aponta para um objeto do tipo 'Titular'. Minha dúvia é: porque no primeiro código a chamada para o método dispensou o uso dos parênteses, e no segundo caso eu tive que usar?

Júlio, vamos por partes:

  1. Quando você marca um tópico como solucionado ele some da minha lista, então fica mais difícil pra eu interagir aqui. rsrs
  2. O método recuperaCpf retorna uma string, não um objeto do tipo CPF;
  3. Quando se usa parênteses, é um método. Caso contrário, é um atributo. No primeiro exemplo, $this->cpf não é um método, é um atributo. Desse atributo você chama um método `recuperaNumero(){ .