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

erro método recuperar saldo

Alguem pode me ajudar ? quando crio os método para exibibir as propriedades que estão privadas aparece este erro que não consigo achar o motivo "PHP Fatal error: Uncaught Error: Cannot access private property Conta::$cpfTitular in /home/igorr/Documentos/php1/src /tempCodeRunnerFile.php:7 Stack trace:

#0 {main} thrown in /home/igorr/Documentos/php1/src /tempCodeRunnerFile.php on line 7.

<?php
class Conta
{                                                          
    private $cpfTitular;           
    private $nomeTitular;
    private $saldo = 0;

    public function sacar(float $valorASacar)
    {
        if ($valorASacar > $this->saldo) {
            echo "saldo indisponivel";
        } else {
            $this->saldo -= $valorASacar;
        }
    }

    public function depositar(float $valorADepositar) {
        if ($valorADepositar <=  0 ) {
            echo "você não pode depositar esse valor";
        } else {
            $this->saldo += $valorADepositar;
        }
    }


    public function transferir(float $valorATransferir, Conta $contaDestino)
    {
        if ($valorATransferir > $this->saldo) {
            echo "Saldo insuficiente";
        } else {
            $this->sacar($valorATransferir);
            $contaDestino->depositar($valorATransferir);
        }
    } 

    public function recuperarSaldo(): float
    {
        return $this->saldo;
    }
}`                                                                                                                                                                                                                                                                  `<?php

require_once 'Conta.php';

$primeiraConta = new Conta();

$primeiraConta->cpfTitular = '789.4124.515';
$primeiraConta-> nomeTitular = 'guilherme';
$primeiraConta->saldo = 1000;


$segundaConta = new Conta();

$segundaConta->cpfTitular = '9887.654.321.-10';
$segundaConta->nomeTitular = 'giovanna';
$segundaConta->saldo = 2000;


echo $primeiraConta->recuperarSaldo();
 `
2 respostas
solução!

Olá, Igor. Tudo bem?

Vamos resolver esse erro juntos, beleza?

Veja que o PHP te retornou este erro:

PHP Fatal error: Uncaught Error: Cannot access private property Conta::$cpfTitular

Traduzindo para o português:

  • Não foi possível acessar a propriedade privada Conta::$cpfTitular

Esse erro foi causado por esta linha de código:

$primeiraConta->cpfTitular = '789.4124.515';

Repare que você tenta atribuir o CPF diretamente no atributo cpfTitular através do arquivo tempCodeRunnerFile.php, porém, o PHP tenta acessar diretamente o atributo $cpfTitular e não consegue, pois você declarou que cpfTitular é um atributo privado, ou seja, apenas a Classe Conta possui acesso à ele.

Mas você pode me perguntar:

Então, Vinicius como eu vou acessar atributos privados de outros arquivos se apenas a classe Conta possui acesso?

O acesso pode ser feito através de alguns métodos dentro da classe Conta, que irão exibir e definir os valores de cada atributo da Classe.

Geralmente, esses métodos são conhecidos como Getters e Setters

  • Getters: são utilizados para retornarem o status de uma variável interna.

  • Setters: são utilizados para definirem valores para uma propriedade específica.

Na aula Métodos de acesso o instrutor Vinicius Dias, declara os métodos Setters na classe Conta assim:


    public function defineCpfTitular(string $cpf): void
    {
        $this->cpfTitular = $cpf;
    }

        public function defineNomeTitular(string $nome): void
    {
        $this->nomeTitular = $nome;
    }

E esses valores são definidos dessa forma:

$primeiraConta = new Conta();
$primeiraConta->defineCpfTitular('123.456.789-10')
$primeiraConta->defineNomeTitular('Guilherme')
$primeiraConta->deposita(500);
$primeiraConta->saca(300);

Obs: Os Setters para o atributo saldo são definidos pelos métodos saca e deposita:

    public function saca(float $valorASacar): void
    {
        if ($valorASacar > $this->saldo) {
            echo "Saldo indisponível";
            return;
        }

        $this->saldo -= $valorASacar;
    }

    public function deposita(float $valorADepositar): void
    {
        if ($valorADepositar < 0) {
            echo "Valor precisa ser positivo";
            return;
        }

        $this->saldo += $valorADepositar;
    }

Na aula Métodos de acesso o instrutor Vinicius Dias, declara os métodos Getters na classe Conta assim:

    public function recuperaSaldo(): float
    {
        return $this->saldo;
    }

    public function recuperaCpfTitular(): string
    {
        return $this->cpfTitular;
    }

    public function recuperarNomeTitular(): string
    {
        return $this->nomeTitular;
    }

E esses valores são acessados dessa forma:

$primeiraConta = new Conta();
echo $primeiraConta->recuperaSaldo();
echo $primeiraConta->recuperaCpfTitular();
echo $primeiraConta->recuperaSaldo();

Quero te recomendar um artigo aqui da Alura que irá exemplificar o uso de Getters e Setters. Vale lembrar que o texto do artigo são com exemplos de Javascript, porém é 100% aplicável ao PHP (bastando ignorar termos específicos).

Espero ter ajudado, Igor. Se tiver mais alguma dúvida estou a disposição e bons estudos =)

Grande abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

entendi, ajudou bastante muito obrigado.