Segui os passos do instrutor para manter um valor (saldo), privado para que não fosse alterado, porém depois disso o saldo continuou podendo ser alterado, queria que caso o valor fosse bloqueado ao tentar alterá-lo ele além de não ser alterado ainda retornasse o valor atual, segue os códigos:
contacorrente.php
<?php
class contacorrente
{
private $titular;
private $agencia;
private $numero;
private $saldo;
public function __construct($titular, $agencia, $numero, $saldo)
{
$this->titular = $titular;
$this->agencia = $agencia;
$this->numero = $numero;
$this->saldo = $saldo;
}
//metodo para sacar
public function sacar($valor){
$this->saldo = $this->saldo - $valor;
return $this;
}
//metodo para depositar
public function depositar($valor){
$this->saldo = $this->saldo + $valor;
return $this;
}
/*
// formas de liberar para visualizar e alterar individualmente cada atributo
//liberando para consultar titular
public function gettitular(){
return $this->titular;
}
//liberando para consultar saldo
public function getsaldo(){
return $this->saldo;
}
//liberando para alterar o titular
public function settitular($titular){
return $this->titular = $titular;
}
//liberando para alterar o saldo
public function setsaldo($saldo){
return $this->saldo = $saldo;
}
*/
public function __get($atributo)
{
$this->protegeatributo($atributo);
return $this->$atributo;
}
public function __set($atributo, $valor){
$this->protegeatributo($atributo);
$this->$atributo = $valor;
}
private function protegeatributo ($atributo){
if ($atributo == "titular" || $atributo == "saldo") {
//throw new Exception ("errado");
//return false;
echo PHP_EOL . "erro ao alterar o valor do saldo" . PHP_EOL . PHP_EOL;
}
}
//funçao para formatar o saldo
private function formatasaldo (){
return number_format ($this->saldo, 2, ",", ".");
}
public function getsaldo(){
return $this->formatasaldo();
}
}
index.php
<?php
require "contacorrente.php";
$contajoao = new contacorrente("joao","0783", "21867-3","500");
$contamaria = new contacorrente("maria","4831", "71321-3", "1000");
//$contajoao->sacar("400") ->depositar(770);
//$contamaria->depositar("1000") ->sacar(25);
var_dump($contajoao);
var_dump($contamaria);
echo "antiga agencia maria: {$contamaria->__get("agencia")} , saldo antigo da maria: {$contamaria->getsaldo()}" . PHP_EOL;
$contamaria->agencia = "2734";
$contamaria->saldo = "50000";
echo PHP_EOL . " nova agencia da Maria: {$contamaria->__get ("agencia")} , novo saldo a maria: {$contamaria->getsaldo()}" . PHP_EOL;
var_dump($contamaria);
forma que é exibida no browser:
object(contacorrente)#1 (4) {
["titular":"contacorrente":private]=>
string(4) "joao"
["agencia":"contacorrente":private]=>
string(4) "0783"
["numero":"contacorrente":private]=>
string(7) "21867-3"
["saldo":"contacorrente":private]=>
string(3) "500"
}
object(contacorrente)#2 (4) {
["titular":"contacorrente":private]=>
string(5) "maria"
["agencia":"contacorrente":private]=>
string(4) "4831"
["numero":"contacorrente":private]=>
string(7) "71321-3"
["saldo":"contacorrente":private]=>
string(4) "1000"
}
antiga agencia maria: 4831 , saldo antigo da maria: 1.000,00
erro ao alterar o valor do saldo
nova agencia da Maria: 2734 , novo saldo a maria: 50.000,00
object(contacorrente)#2 (4) {
["titular":"contacorrente":private]=>
string(5) "maria"
["agencia":"contacorrente":private]=>
string(4) "2734"
["numero":"contacorrente":private]=>
string(7) "71321-3"
["saldo":"contacorrente":private]=>
string(5) "50000"
}
ou seja, o saldo foi alterado de 1000 para 50000. quando eu insiro na função protegeatributo>
throw new Exception ("errado");
ele retorna um erro porém não segue o código e queria que quando isso acontecesse além de informar que não conseguiu alterar o saldo também informe o valor atual.