1
resposta

problema com cpf

Após a organização das pastas e criação do do autoload não tenho conseguido mais rodar completamente o banco.php O código executa tudo, menos a linha de recuperação do cpf na linha 30, pois apresenta a seguinte mensagem Fatal error: Uncaught Error: Object of class Alura\Banco\Modelo\Cpf could not be converted to string in C:\xampp\htdocs\alura\banco.php:30

Aqui está o arquivo** banco.php**

<?php 

require_once 'autoload.php';

use Alura\Banco\Modelo\Pessoa;
use Alura\Banco\Modelo\Endereco;
use Alura\Banco\Modelo\CPF;
use Alura\Banco\Modelo\Conta\Titular;
use Alura\Banco\Modelo\Conta\Conta;


$endereco = new Endereco('Ceilândia', 'QNQ','conjunto 5', '21');
$a=new Conta(new Titular(new Cpf('123.456.789-10'),'Doug sou eu',$endereco));
$a->depositar(45);
$a->sacar(50);

$b=new Conta(new Titular(new Cpf('123.456.789-11'),'Paty Mayo',$endereco));

echo PHP_EOL. "Saldo: " . $a->recuperarSaldo() ;
echo PHP_EOL. "Nome: " . $a->recuperaNomeTitular() ;

echo PHP_EOL. "CPF: " . $a->recuperaCpfTitular() ;
echo PHP_EOL."Numero de contas: " .Conta::recuperaNumeroDeContas();
echo "\n\n";
var_dump($a);

echo "\n\n";
?>

aqui está minha classe Conta, de onde em o método recuperaCpfTitular()

<?php 

namespace Alura\Banco\Modelo\Conta;

use Alura\Banco\Modelo\Cpf;

class Conta
{

    private $titular;
    private float $saldo;
    private static $numeroDeContas = 0;
    
    public function __construct(Titular $titular)
    {
        echo "Criando uma nova conta. \n" ; 
        $this->titular = $titular;  
        $this->saldo = 0; 
        self::$numeroDeContas++;
    }
    

    //(...) código omitido

    public function recuperaCpfTitular():Cpf
    {
        return $this->titular->recuperaCpf();
    }   
    
    public function recuperaNomeTitular():string 
    {
        return $this->titular->recuperaNome();
    }

}

?>

Aqui está a classe Titular

<?php 

namespace Alura\Banco\Modelo\Conta;

use Alura\Banco\Modelo\Pessoa;
use Alura\Banco\Modelo\Endereco;
use Alura\Banco\Modelo\CPF;

class Titular extends Pessoa
{

    private $endereco;
    

    public function __construct(Cpf $cpf, string $nome, Endereco $endereco)
    {
       parent::__construct($nome,$cpf);
       $this->endereco=$endereco;
    }
    
    public function recuperaEndereco(): Endereco
    {
        return $this->endereco;
    }

    
}

E aqui a classe CPF

<?php 

namespace Alura\Banco\Modelo;

class Cpf{


    private string $cpf;

    public function __construct(string $cepeefe)
    {
              
        $this->cpf=$cepeefe; 
        
    }
    

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

}

gostaria muito de saber onde estou errando

1 resposta

Oii, Nelcilene

Parece que o problema é no método recuperaCpfTitular() na classe Conta que está retornando um objeto do tipo Cpf, mas você está tentando concatenar esse valor em uma string para exibir na tela: echo PHP_EOL. "CPF: " . $a->recuperaCpfTitular() ;

Uma possível solução seria alterar o método "recuperaCpfTitular()" na classe Conta para retornar uma string em vez de um objeto Cpf. Você pode fazer isso chamando o método "recuperaCpf()" do objeto Cpf e retornando o valor retornado por esse método.

public function recuperaCpfTitular(): string
{
    return $this->titular->recuperaCpf()->recuperaCpf();
}

Dessa forma, o método "recuperaCpfTitular()" irá retornar a string do CPF do titular da conta.

Espero ter ajudado e bons estudos!