Boa tarde, pessoal. Tudo certo? Tô com um pouco de dúvida a respeito do método destruct (). Eu estou o utilizando para mandar uma mensagem com alguns dados do usuário como cpf, nome e até saldo, mas gostaria de saber se isso é perigoso? Porque não entendi muito bem do que se trata essa ideia da instância deixar de existir na memória. Bom, eu tô achando que os dados adicionados pelo usuário são apagados com o uso do destruct e dessa não forma não iriam parar no meu suposto database. Também pesquisei um pouco mais na net e vi que o destruct(), de acordo com w3school, é uma função que é chamada automaticamente no final do script, no entanto não vi nada sobre garbage collector e até mesmo sobre o momento que uma instância deixa de existir na memória. Agradeço desde já!
class Conta {
//properties or attributes
private $cpfTitular;
private $name;
private $cash;
private static $numberAccount = 0;
private static $codeBank = 77;
//methods
function __construct(string $cpfTitular, string $name) {
$this->cpfTitular = $cpfTitular;
$this->valid_name($name);
$this->name = $name;
$this->cash= 0;
echo Conta::$codeBank;
Conta::$numberAccount++ ; //Atributos estáticos eu acesso com o nome da classe dois pontos e defino o nome do atributo acompanhado do cifrão
//posso usar self no lugar de conta para me referir a classe
}
function withdraw(float $cashOut) {
if ($this->cash < $cashOut) {
return "Esse valor de saque está indisponível para sua conta";
exit(); //Com o return, eu saio da condição, logo significa que deu certo e eu posso tirar o else. Posso usar tanto o exit(), quanto o retun nesse caso
}
return 'Valor após o saque é de '.$this->cash-=$cashOut;
}
function deposit(float $depositCash) {
if ($depositCash < 0) {
return 'Operação impossível, somente são aceitos valores positivos e não nulos';
}
else {
return 'Valor após o depósito é de '.$this->cash = $this->cash + $depositCash;
}
}
function transfAccount (float $transfCash, Conta $newAccount) {
if ($transfCash > $this->cash) {
return 'Essa opção não poderá ser realizada';
}
elseif ($transfCash <= 0){
return 'O valor transferido deve ser maior do que zero';
}
else{
$this->withdraw($transfCash);
$newAccount->deposit($transfCash);
return 'O saldo atual é de '.$newAccount->cash;
}
}
public function getCpfTitular()
{
return $this->cpfTitular;
}
public function getName()
{
return $this->name;
}
public function getCash()
{
return $this->cash;
}
public static function get_numberAccount() {
return Conta::$numberAccount;
}
private function valid_name($name) {
if (strlen($name) < 5) {
echo ' Esse nome não é válido, é necessário que ele tenha 5 ou mais caracteres ';
exit();
};
}
public function __destruct() {
echo "O dono da conta é {$this->name}, seu CPF: {$this->cpfTitular} e o seu saldo atual é de {$this->cash}.";
}
Esse é o código, peço desculpas pela bagunça e por alguns comentários desnecessários. Estou usando realmente para estudar e gosto de deixar algumas informações comentadas, porém sei que não é o ideal para visualização.
Segue a instância:
$priaccount = new Conta('123.456.789-45', 'Leonardosvaldo');
echo '<br>';
echo $priaccount->getCash();
echo$priaccount->getName();
echo $priaccount->getCpfTitular();
echo '<br>'.$priaccount->deposit(400).'<br>';
echo $priaccount->withdraw(700). '<br>';
echo Conta::get_numberAccount();
Também vi que colocando um unset logo após instanciar a classe, o método destruct é o único executado, já que a instância não existe mais. O 77 é o código do banco e esse é implementado pelo meu construct.
$priaccount = new Conta(' 123.456.789-45 ', ' Leonardosvaldo ');
unset($priaccount);
echo '<br>';
echo $priaccount->getCash();
echo$priaccount->getName();
echo $priaccount->getCpfTitular();
echo '<br>'.$priaccount->deposit(400).'<br>';
echo $priaccount->withdraw(700). '<br>';
echo Conta::get_numberAccount().'<br>';