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

Objeto da classe Alura \ Banco \ Modelo \ CPF não pôde ser convertido em string

PHP Warning: Uncaught Error: Object of class Alura\Banco\Modelo\CPF could not be converted to string in C:\Users\gb2020\Documents\Alura\PHP\src\Modelo\Pessoa.php:15 Stack trace:

#0 C:\Users\gb2020\Documents\Alura\PHP\src\Modelo\Conta\Titular.php(15): Alura\Banco\Modelo\Pessoa->__construct('Gabriel Soares', Object(Alura\Banco\Modelo\CPF))

#1 C:\Users\gb2020\Documents\Alura\PHP\banco.php(17): Alura\Banco\Modelo\Conta\Titular->__construct(Object(Alura\Banco\Modelo\CPF), 'Gabriel Soares', Object(Alura\Banco\Modelo\Endereco))

#2 php shell code(1): require('C:\Users\gb2020...')

#3 {main} thrown in C:\Users\gb2020\Documents\Alura\PHP\src\Modelo\Pessoa.php on line 15

Warning: Uncaught Error: Object of class Alura\Banco\Modelo\CPF could not be converted to string in C:\Users\gb2020\Documents\Alura\PHP\src\Modelo\Pessoa.php:15 Stack trace:

#0 C:\Users\gb2020\Documents\Alura\PHP\src\Modelo\Conta\Titular.php(15): Alura\Banco\Modelo\Pessoa->__construct('Gabriel Soares', Object(Alura\Banco\Modelo\CPF))

#1 C:\Users\gb2020\Documents\Alura\PHP\banco.php(17): Alura\Banco\Modelo\Conta\Titular->__construct(Object(Alura\Banco\Modelo\CPF), 'Gabriel Soares', Object(Alura\Banco\Modelo\Endereco))

#2 php shell code(1): require('C:\Users\gb2020...')

#3 {main} thrown in C:\Users\gb2020\Documents\Alura\PHP\src\Modelo\Pessoa.php on line 15

6 respostas

Gabriel, em algum lugar você está tentando usar um objeto do tipo CPF como se fosse uma string.

Essa mensagem de erro possui o que chamamos de stack trace (pilha de execução. No treinamento de erros vamos falar mais disso). Nessa stack trace você consegue ver exatamente onde o erro aconteceu.

Na linha 17 do banco.php você cria um titular. Na linha 15 de Titular.php o construtor de Pessoa é chamado. Lá, provavelmente, você está esperando uma string no lugar de um CPF.

<?php

namespace Alura\Banco\Modelo;

class Pessoa {

protected  $nome;
private  $cpf;


public function __construct(string $nome, CPF $cpf) {

    $this -> validaNomeTitular($nome);
    $this -> nome = $nome;
    $this -> $cpf = $cpf;
}

public function recuperaNome(): string {
    return $this -> nome;
}

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

protected function validaNomeTitular(string $nomeTitular)
{
    if (strlen($nomeTitular) < 5) {
        echo "Nome precisa ter pelo menos 5 caracteres";
        exit();
    }
}

}

<?php

namespace Alura\Banco\Modelo\Conta;

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

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;
}

}

<?php

require_once 'src/Modelo/Conta/Conta.php'; require_once 'src/Modelo/Pessoa.php'; require_once 'src/Modelo/Endereco.php'; require_once 'src/Modelo/Conta/Titular.php'; require_once 'src/Modelo/CPF.php';

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

$endereco = new Endereco ('sao paulo', 'itaquera', 'estevan', '897'); $primeiraConta = new Conta(new Titular(new CPF('123.456.789-10'), 'Gabriel Soares', $endereco)); $primeiraConta -> deposita(500); $primeiraConta -> saca(300); var_dump($primeiraConta);

echo $primeiraConta->recuperaNomeTitular() . PHP_EOL; echo $primeiraConta->recuperaCpfTitular() . PHP_EOL; echo $primeiraConta->recuperaSaldo() . PHP_EOL;

$patricia = new Titular(new CPF('111.111.11-22'), 'gafffb', $endereco); $segundaConta = Conta($patricia);

$outroendereco = new Endereco ('bahia', 'salvador', 'praia', '56'); $outra = new Conta(new CPF('123.32323'), 'gabddr', $endereco); echo Conta:: recuperaNumeroDeContas();

Não consigo achar o erro

solução!

Fala Gabriel, beleza?

Ficou meio complicado identificar o seu erro, o código está incompleto, mas com certeza foi oq Vinicius falou, ou então o problema é em algum desses echo onde, talvez, você esteja tentando imprimir na tela um objeto do tipo CPF, sendo que o PHP espera que seja impresso uma string.

Acho que a melhor alternativa seja você refazer essa parte de manipular a aplicação por que seu código parece ter várias coisas estranhas.

Nessa linha por exemplo:$segundaConta = Conta($patricia); você esqueceu do operador "new".

Outro detalhe é que você tenta criar uma Conta de duas formas diferentes. Em dado momento você passa para o método construtor de Conta um Titular e em outro dado momento você tenta criar uma Conta com um CPF, nome e endereço de formas livres.