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

mesmo definindo atributos como privados eles continuam sendo expostos no browser

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 se o atributo estivesse publico
public function sacar($valor){
$this->saldo = $this->saldo - $valor;
return $this;
}
//metodo para depositar se o atributo estivesse publico
    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;
        }
    */
}

index.php

<?php
require "contacorrente.php";

$contajoao = new contacorrente("joao","0783", "21867-3","500");
$contamaria = new contacorrente("maria","4831", "71321-3", "1000");

var_dump($contajoao);
var_dump($contamaria);

/*
$contajoao->sacar("400") ->depositar(770);
$contamaria->depositar("1000") ->sacar(25);

var_dump($contajoao);
var_dump($contamaria);

contamaria->setsaldo("50000");
var_dump($contamaria);
*/

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" }
4 respostas
solução!

Olá Marcos,

No caso da função var_dump(), veja que a documentação explica que ele vai exibir normalmente propriedades public e private.

A razão para isto é que var_dump é uma função interna especial do PHP e tem a capacidade de enxergar o objeto como um todo. Entretando o seu código não pode fazer isto, uma vez que você definiu a propriedade como private, apenas métodos da própria classe podem fazer o acesso.

https://www.php.net/manual/pt_BR/function.var-dump.php

Esta função mostrará uma representação estruturada sobre uma ou mais expressões, incluindo o tipo e o valor. Arrays e objetos são explorados recursivamente com valores identados na estrutura mostrada.

No PHP 5 todas propriedades public, private e protected do objeto são retornados na saída.

Espero ter ajudado. Um abraço!

então o vardump sempre irá exibir os atributos, só apresentaria erro se eu tentasse exibir o valor diretamente:

echo $contajoao->saldo;

Marcos,

Correto. É isto mesmo.

obrigado