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

Atributo Saldo, método de acesso.

Boa noite! Não entendo o porque o atributo saldo não aparece na tela, está referenciado com NULL???

index.php

<?php
header('Content-Type: text/html; charset=utf-8');

ini_set('display_errors', 1);//mostrar todos os error do projeto
error_reporting(E_ALL);
header('Content-Type: text/html; charset=utf-8');

require "ContaCorrente.php";

$contaJoao = new ContaCorrente("Joao", "7678", "78654-0", 9000.00);
$contaMaria = new ContaCorrente("Maria", "7678", "785645-0", 20000.00);//A classe é populada dentro dos parâmetros por causa do construct

var_dump($contaJoao); ?><br /><?php
var_dump($contaMaria);
<?php

class ContaCorrente{

    private $titular;

    private $agencia;

    private $numero;

    private $saldo;

    public $ultimaOperacao;

    public function __construct($agencia, $numero){//esta função garante que a cada nova conta criada sejam passados os atributos

        $this->agencia = $agencia;
        $this->numero = $numero;
        //a variável this permite que seja acessada os atributos da classe
    }

    public function sacar($valor){

        $this->saldo = $this->saldo - $valor;

        return $this;//o retorno permite passar só uma linha de cód sem precisar chamar a função
    }

    public function depositar($valor){

            $this->saldo = $this->saldo + $valor;

            return $this;
    }

    public function transferir($valor, $conta){

        $this->sacar($valor);
        $conta->depositar($valor);

        return $this;
    }

    public function __get($atributo){//Esta função permite que todos os atributos sejam acessados por outra classe, se tentarmos ler o valor, o método __get() será invocado automaticamente pela classe
        $this->protegerAtributo($atributo);

        return $this->$atributo;
    }

    public function __set($atributo, $valor){//Esta função permite modificar todos os atributos declarados como privados, se tentarmos alterar o valor de um atributo, o método __set será chamado.
            $this->protegerAtributo($atributo);
            return $this->$atributo = $valor;

    }

    private function protegerAtributo($atributo){

        if ($atributo == "titular" || $atributo == "saldo") {//não permite alterar os atributos

            throw new Exception("Este atributo $atributo continua privado.");

        }
    }

    public function setNumero($numero){//Esta função modificará o atributo após ser o acesso ser privado

        return $this->numero = $numero;
    }

    private function formatarSaldo(){//Formata os dados do saldo

        return "R$".number_format($this->saldo,2,",",".");

    }

    public function getSaldo(){//Para que possa permitir que o saldo seja acessado na tela

        return $this->formatarSaldo();
    }

}
2 respostas
solução!

Oi Grasiela, tudo bem?

Vi aqui que no seu _construct você está passando somente a agencia e o numero, e por isso o seu objeto está ficando com o saldo nulo.

Tenta passar os demais campos necessários e veja se funciona.

Abraço

Fiz a correção nesta função agora, funcionou. Muito obrigada!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software