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

Chamada na classe filho

Olá, Meu código está no git abaixo: https://github.com/rtomazini42/PHPOO

Eu estou testando as classes com o código de banco.php, porém quando modifiquei o colocando herança eu perdi algumas funcionalidades que acho que deveriam ter sido derivadas para as classes filhas, mais precisamente nas linhas 24 e 25 de banco.php:

echo $primeiraConta->retornaNome().PHP_EOL;
echo $primeiraConta->retornaCpf().PHP_EOL;

A resposta do compilador é:

Fatal error: Uncaught Error: Call to undefined method Conta::retornaNome() in D:\Users\Tomazini\Documents\programando\phpOO\banco.php:25

Como posso resolver isso e voltar a ter as duas funcionalidades?

2 respostas
solução!

Oi, Renan, como vai?

Para resolver este problema, algumas modificações terão que ser realizadas no código, são elas:

1 - Nas linhas 24 e 25 do arquivo banco.php, o acesso aos métodos retornaNome() e retornaCpf() terão que ser realizados a partir do atributo titular das contas, já que a classe Conta não possui mais esses métodos, segue o código para fazer isso:

echo $primeiraConta->titular->retornaNome().PHP_EOL;
echo $primeiraConta->titular->retornaCpf().PHP_EOL;

2 - Para conseguir acessar o atributo titular das contas, fora do arquivo da classe Conta, este atributo terá que se tornar público, segue o código para fazer isso:

class Conta{
    public $titular;
    public $saldo;
    private static $numeroDeContas = 0;

3 - Para conseguir acessar os atributos nome e cpf da classe Titular, estes atributos terão que se tornar públicos, como a classe Titular herda da classe Pessoa, temos que fazer a alteração da visibilidade dos atributos na classe Pessoa, segue o código para fazer isso:

class Pessoa{
    public $nome;
    public $cpf;

4 - Por último, no método retornaCpf() da classe Pessoa existe um erro, será preciso trocar CPF de maiúsculo para minúsculo, segue o código do método corrigido:

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

Seguindo todos esses passos, o código funcionará como o esperado.

Espero que essa explicação te auxilie.

Caso tenha quaisquer comentários ou dúvidas a respeito de alguma aula ou desafio, pode postar aqui no fórum que vamos te responder!

Abraços e bons estudos!

Tudo certo, muito obrigado!