2
respostas

Fatal error: Uncaught Error: Call to a member function sacar() on float in /var/www/html/cursos/alura/php_poo/Banco/index.php:17

Não estou conseguindo acessar metodos encadeados conforme abaixo, mesmo retornando a classe com o return $this; no metodo

$contaJoao->depositar(150.00)->sacar(50);

<?php
class ContaCorrente {

    private $nome;
    private $agencia;
    private $conta;
    private $saldo;

    public function __construct($nome, $agencia, $conta, $saldo){
        $this->nome=$nome;
        $this->agencia=$agencia;
        $this->conta=$conta;
        $this->saldo=$saldo;

    }

    public function getNome(){
        return $this->nome;
    }

    public function getAgencia(){
        return $this->agencia;
    }

    public function getConta(){
        return $this->conta;
    }

    public function getSaldo(){
        return $this->saldo;
    }

    public function setNome($nome){
        $this->nome = $nome;
    }

    public function setAgencia($agencia){
        $this->agencia = $agencia;
    }

    public function setConta($conta){
        $this->conta = $conta;
    }

    public function setSaldo($saldo){
        $this->saldo = $saldo;
    }

    public function sacar($valor){
        return $this->saldo = $this->saldo - $valor;
        return $this;
    }

    public function depositar($valor){
        return $this->saldo = $this->saldo + $valor;
        return $this;
    }

    }
?>
2 respostas

Olá, Eustáquio.

Você na verdade está retornando o saldo em ambos os métodos:

    public function sacar($valor){
        return $this->saldo = $this->saldo - $valor;
        return $this;
    }

    public function depositar($valor){
        return $this->saldo = $this->saldo + $valor;
        return $this;
    }

Quando uma função (ou método) atinge a instrução return ela para sua execução e devolve o valor indicado.

No próximo curso de PHP básico que vai sair em breve o assunto de funções vai ser tratado com um pouco mais de atenção, mas espero que essa explicação já tenha resolvido.

TL;DR: Basta remover o primeiro return dos 2 métodos.

Fala, Eustáquio.

Conseguiu entender o problema?

O curso que eu citei é esse aqui: https://cursos.alura.com.br/course/php-arrays-strings-funcoes

Agora ele é pré-requisito deste curso de OO. :-)