Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Erro na criação de nova conta

Oi pessoal! Após criarmos uma classe Titular e refatorarmos o código, passei a receber um erro toda vez que tento instanciar uma nova conta:

Fatal error: Uncaught Error: Object of class Titular could not be converted to string in C:\Users\Rodrigo\Desktop\php-oo\projeto\src\Conta.php:11
Stack trace:
#0 C:\Users\Rodrigo\Desktop\php-oo\projeto\banco.php(6): Conta->__construct(Object(Titular))
#1 {main}
  thrown in C:\Users\Rodrigo\Desktop\php-oo\projeto\src\Conta.php on line 11
PHP Fatal error:  Uncaught Error: Object of class Titular could not be converted to string in C:\Users\Rodrigo\Desktop\php-oo\projeto\src\Conta.php:11
Stack trace:
#0 C:\Users\Rodrigo\Desktop\php-oo\projeto\banco.php(6): Conta->__construct(Object(Titular))
#1 {main}
  thrown in C:\Users\Rodrigo\Desktop\php-oo\projeto\src\Conta.php on line 11

Não consigo encontrar o ponto do código em que esse erro é gerado, já que não estou pedindo que a aplicação transforme o objeto Titular em string em nenhum momento. Segue a definição da classe Titular:

class Titular
{
    private $cpf;
    private $nome;

    public function __construct(string $cpf, string $nome)
    {
        $this->cpf = $cpf;
        $this->validaNomeTitular($nome);
        $this->nome = $nome;
    }
//...métodos de acesso e validação

E da classe Conta:

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

    public function __construct(Titular $titular)
    {
        $this->$titular = $titular;
        $this->saldo = 0;
        self::$numeroDeContas++;
    }
//...métodos de acesso

Aqui a chamada que está gerando o erro:

require_once 'src/Conta.php';
require_once 'src/Titular.php';

$primeiraConta = new Conta(new Titular('123.456.789-10', 'Vinicius Dias'));
//...código quebra nesse ponto... //
$primeiraConta->deposita(500);
$primeiraConta->saca(300); // isso é ok

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

Estou usando o PHP 7.4. Já tentei explicitar o tipo de $titular na classe Conta, sem sucesso. Podem me ajudar?

1 resposta
solução

Encontrei meu próprio erro, era um $ a mais no construtor. Sorry!

    public function __construct(Titular $titular)
    {
        $this->$titular = $titular;
        $this->saldo = 0;
        self::$numeroDeContas++;
    }