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

PHP Fatal error: Uncaught Error

Olá, quando cheguei neste ponto da aula onde crio a public function _construct e removi os métodos de definição de CPF e nome e fui rodar no terminal recebi um aviso de Fatal error:

PHP Fatal error: Uncaught Error: Typed property Conta::$nomeTitular must not be accessed before initialization in C:\Users\PICHAU\Documents\Aulas Alura\Aula PHP\src\Conta.php:62Stack trace:

#0 C:\Users\PICHAU\Documents\Aulas Alura\Aula PHP\banco.php(9): Conta->recuperaNomeTitular()

#1 {main} thrown in C:\Users\PICHAU\Documents\Aulas Alura\Aula PHP\src\Conta.php on line 62

<?php

class Conta
{
    private string $cpfTitular;
    private string $nomeTitular;
    private float $saldo;

    public function __construct(string $cpfTitular, string $nomeTitular)
    {
        $this -> $cpfTitular = $cpfTitular;
        $this -> $nomeTitular = $nomeTitular;
        $this -> saldo = 0;
    }

    public function saca(float $valorASacar)
    {
        if ($valorASacar > $this -> saldo) {
            echo "Saldo indisponível";
            return;
        }

        $this -> saldo -= $valorASacar;

    }

    public function deposita(float $valorADepositar): void
    {
        if ($valorADepositar < 0) {
            echo "Valor precisa ser positivo";
            return;
        }

        $this -> saldo += $valorADepositar;

    }

    public function transfere(float $valorATransferir, Conta $contaDeDestino): void
    {
        if ($valorATransferir > $this -> saldo) {
            echo "Saldo indisponível";
            return;
        }

        $this -> saca($valorATransferir);
        $contaDeDestino -> deposita($valorATransferir);

    }

    public function recuperaSaldo(): float
    {
        return $this->saldo;
    }

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

    public function recuperaNomeTitular(): string
    {
        return $this -> nomeTitular;
    }
}

Aqui estão os códigos do aquivo banco.php:

<?php

require_once 'src/Conta.php';

$primeiraConta = new Conta('123.456.789-10', 'Victor Barros');
$primeiraConta -> deposita(500);
$primeiraConta -> saca(300);

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

Estou usando o PHP 8. Fiquei imaginando que poderia ter algo relacionado, se eu não deixei passar algum erro bobo rsrs

2 respostas
solução!

Oi Felipe, como vai?

Testei o código aqui e vi que o erro está no seu método construct, quando vamos acessar atributos da classe apenas utilizamos o sinal $ antes do this->, perceba que no seu método construtor o acesso as variáveis cpfTitular e nomeTitular tem o símbolo $ adicionado antes delas, o correto seria fazer igual você fez para acessar o atributo saldo.

Código correto:

public function __construct(string $cpfTitular, string $nomeTitular)
{
        $this -> cpfTitular = $cpfTitular;
        $this->nomeTitular = $nomeTitular;
        $this -> saldo = 0;
}

Espero que te ajude.

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!

Obrigado Murillo, foi uma falta de atenção minha!