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

Warning no método Destruct

Bom dia, Estou seguindo a aula "02 Criando a classe Titular", mas quando vou fazer o teste no CMD, aparece esse warning:

PHP Warning: Call to private Conta::__destruct() from context '' during shutdown ignored in Unknown on line 0

Não sei como resolver :')

Abaixo meu código do Conta.php:

`<?php

class Conta {

private $titular;
private $saldo = 0;

// Variável geral da prórpia Classe Conta, então, criamos um atributo estático
private static $numeroDeContas = 0;

// O Método Contrutor é o primeiro método criado 
// ele vai definir oq a classe Conta deverá receber como
// parametro obrigatoriamente, todas as classes que 
// precisam receber um dado, deve ter a classe Construtora
public function __construct( Titular $titular )
{
    $this->titular = $titular;
    $this->saldo = 0;

    // self = dentro da própria Classe
    self::$numeroDeContas++;
}

// O método 'destruct' retira da memória todo 'lixo' criado
// da memória da máquina (objetos sem ponteiros ou objetos que
// deixaram de ser utilizados por exemplo
private function __destruct() 
{
    self::$numeroDeContas--;
}

// void = não retorna nenhum valor
public function sacar(float $valorASacar): void
{
    // A 'variável 'this' pega a referecia do objeto
    // represetando pela 'variavel' que chamou sem 
    // precisar enviar o parametro '$umaConta' por exemplo
    if ($valorASacar > $this->saldo) {
        echo "Saldo indisponível";
        return;
    } 
    $this->saldo -= $valorASacar;
}

public function depositar(float $valorADepositar): void
{
    // Existe uma prática de programação para deixar o código
    // mais limpo, de fácil leitura e mais com processamento
    // mais rápido chamado Early Return que basicamente
    // evita AO MÁXIMO o uso de 'else if' e 'else'
    if ($valorADepositar < 0) {
        echo "Valor precisa ser positivo";

    } 
    $this->saldo += $valorADepositar;
}

public function transferir(float $valorATransferir, Conta $contaDestino): void
{
if ($valorATransferir > $this->saldo) {
    echo "Saldo indisponível";
    return;
    } 

$this->sacar($valorATransferir);
$contaDestino->depositar($valorATransferir);
}

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

// Código omitido, pois static
public static function recuperaNumeroDeContas(): int
{
    // Para acessar a variável estática, caso ela seja Publica
    // usa-se Contas::$numeroDeContas
    // Neste caso, nossa variável é privada, então criamos
    // um método para leitura dela, como é da própria classe
    // usamos 'self', por exemplo:
    return self::$numeroDeContas;
}

public function recuperaNomeTitular(): string
{
    return $this->titular->recuperaNome();
}

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

}`

Desde já agradeço a ajuda (;

2 respostas
solução!

Oi Natali, tudo bem?

Mude a visibilidade do método mágico __destruct de private para public.

Deixe dessa maneira: "public function __descruct()".

Bom dia! Desculpe a demora ontem o dia ficou bem corrido

Deu certo, muito obrigada pela ajuda :D

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