Olá galera, tudo bom? Gostaria de umas dicas de como utilizar um método de LOgs com esse destruct, idem ao que ele mostrou.
Cheguei a fazer um exemplo, só deu erro na hora de utilizar o fclose. Poderiam me dar uma forcinha.
<?php
class Conta{
private String $cpf;
private String $nome;
private float $saldo = 0.0;
private static int $numeroContas = 0; //Isso é um Atributo da Class, São membros da classe em si, e não de cada instância (objeto).
//Para Realizar o Log
private static string $url = 'C:/xampp/htdocs/Alura/log/criacaoContas_log_';
private static $fp;
public function __construct(string $cpf, string $nome){
$this->cpf = $cpf;
$this->validaNomeTitular($nome);
$this->nome = $nome;
$this->saldo = 0;
self::$numeroContas += 1; // Self> Sig. 'Está mesma class'.
self::$fp = fopen(self::$url.'_'.self::$numeroContas.'.txt','w');
fwrite(self::$fp, "Feito a criação de uma nova Conta: \n");
fwrite(self::$fp, 'Nome: '.$this->nome.PHP_EOL);
fwrite(self::$fp, 'Cpf: '.$this->cpf.PHP_EOL);
fwrite(self::$fp, 'Data e Criação: '.date('d/m/Y').PHP_EOL );
fwrite(self::$fp, '----------------------'.PHP_EOL);
}
public function __destruct(){
self::$numeroContas--;
fclose(self::$fp);
}
public function sacar(float $saldoASacar):void {
$this->Log('ini','sacar', $saldoASacar);
if($this->getSaldo() < $saldoASacar) {
echo 'Não Ha Fundos suficiente';
return;
}
$this->saldo = $this->getsaldo() - $saldoASacar ;
$this->Log('fim');
}
public function depositar($saldoDeposito):void {
$this->Log('ini','depositar', $saldoDeposito);
if($saldoDeposito < 0){
echo 'Valor deve ser maior que zero';
return;
}
$this->saldo = $this->getsaldo() + $saldoDeposito ;
$this->Log('fim');
}
public function statusConta(){
echo '<br><br>'.var_dump($this).'';
}
public function Log($sts, $nomeMetodo='', $param=''){
echo '<br>';
if($sts == 'ini'){
$this->statusConta();
echo '<br> Chamando a função '.$nomeMetodo."(".$param.")<br> <hr>";
}else{
$this->statusConta();
}
}
//Esse método é utilizado somente nesta class, logo, não precisamos deixa-lo publico a todos
private function validaNomeTitular(string $nome){
if(strlen($nome) < 5){
echo "O nome precisa ter pelo menos 5 caracteres!";
exit;
}
}
// métodos getters e setters
function getCpf(){
return $this->cpf;
}
function getNome(){
return $this->nome;
}
function getSaldo(){
return $this->saldo;
}
public static function recuperaQtdContas():int{
return self::$numeroContas;
}
}
---- No Momento em que eu utilizo o __destruct()
me gera a seguinte mensagem
Warning: fclose(): supplied resource is not a valid stream resource in C:\xampp\htdocs\Alura\php_OO\src\Conta.php on line 36
Os Arquivos de logs são criados corretamente.
Obriado!!!