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

Erro no método depositar

    public function depositar(float $valorADepositar): void
    {
        if($valorADepositar < 0){
            echo "O valor precisa ser positivo";
            return;
        }
        $this->saldo += $valorADepositar;
    }

$conta1 = new Conta();

$conta1->depositar(1000);

Professor, criei o método depositar e ao acessa-lo utilizando o objeto recebi o seguinte erro: Fatal error: Uncaught Error: Typed property Conta::$saldo must not be accessed before initialization.

Dei uma pesquisada e vi que definindo o atributo saldo desta maneira: "private ?float $saldo = null;" resolveria meu problema, e de fato resolveu. Gostaria de saber o porque desse erro e se há alguma outra maneira de evitar o mesmo.

2 respostas

Creio que o problema é que você está tentando adicionar um valor ( $this->saldo +=...) a um atributo que não foi inicializado ainda.

Você pode fazer o seu atributo ser igual a zero quando instanciar sua classe.

private ?float $saldo = 0.0;

Ou, se preferir, inicializar o atributo dentro do construtor.

Fala, Natan! Você definiu o tipo do atributo $saldo mas não definiu um valor inicial para ele. Ao tentar realizar $this->saldo += $valorADepositar;, o PHP tenta acessar o valor do atributo, que ainda não existe. A solução é bem simples:

private float $saldo = 0;

Assim você está informando que o saldo de toda conta começa zerado.