PHP Orientado a Objetos para iniciantes – Parte 5

Métodos Mágicos em OOP

Para tornar o uso de objetos mais fácil, o PHP também oferece um determinado número de métodos mágicos, ou métodos especiais, que são chamados sempre que determinadas ações comuns ocorrem com os objetos. Isto permite aos desenvolvedores executar uma série de tarefas úteis com relativa facilidade.

Usando Construtores e Destrutores

Quando um objeto é instanciado, muitas vezes é desejável definir algumas coisas logo de cara. Para lidar com isso, o PHP fornece o método mágico __construct (), que é chamado automaticamente sempre que um novo objeto é
criado.

Com a finalidade de ilustrar o conceito de construtores, adicione um construtor para MyClass que irá imprimir uma mensagem sempre que uma nova instância da classe é criada:

<?php  
  
class MyClass  
{  
    public $prop1 = "Eu sou uma propriedade de classe!";  
  
    public function __construct()  
    {  
        echo 'A classe "'. __CLASS__. '" foi iniciada!<br />';  
    }  
  
    public function setProperty($newval)  
    {  
        $this->prop1 = $newval;  
    }  
  
    public function getProperty()  
    {  
        return $this->prop1 . "<br />";  
    }  
}  
  
// Cria um novo objeto  
$obj = new MyClass;  
  
// Pega o valor de $prop1  
echo $obj->getProperty();  
  
// Retorna uma mensagem no final do arquivo  
echo "Fim do arquivo.<br />";  
  
?>  

Obs.: __CLASS__ retorna o nome da classe em que ela foi chamada; isto é o que chamamos de constantes mágicas. Existe inúmeras constantes mágicas disponíveis, você pode ler mais sobre elas no Manual do PHP.

Recarregando o arquivo de nossa classe no browser irá produzir o seguinte resultado:

A classe “MyClass” foi iniciada!
Eu sou uma propriedade de classe!
Fim do arquivo.

Para executar uma função quando um objeto é destruído, o método mágico __destruct é chamado. Isso é útil para limpeza de classe (fechamento de uma conexão de banco de dados, por exemplo).

Retorne uma mensagem ao destruir o objeto adicionando o método mágico __destruct em MyClass:

<?php  
  
class MyClass  
{  
    public $prop1 = "Eu sou uma propriedade de classe!";  
  
    public function __construct()  
    {  
        echo 'A classe "'.__CLASS__.'" foi iniciada!<br />';  
    }  
 
    public function __destruct() 
    { 
        echo 'A classe "'.__CLASS__.'" foi destruída!<br />';  
    } 
  
    public function setProperty($newval)  
    {  
        $this->prop1 = $newval;  
    }  
  
    public function getProperty()  
    {  
        return $this->prop1 . "<br />";  
    }  
}  
  
// Cria um novo objeto  
$obj = new MyClass;  
  
// Pega o valor de $prop1  
echo $obj->getProperty();  
  
// Retorna uma mensagem no final do arquivo  
echo "Fim do arquivo.<br />";  
  
?>  

Recarregando nossa classe de teste no browser, você deverá ver o seguinte retorno:

A classe “MyClass” foi iniciada!
Eu sou uma propriedade de classe!
Fim do arquivo.
A classe “MyClass” foi destruída!

Para acionar explicitamente o destrutor, você pode destruir o objeto usando a função unset ():

<?php  
  
class MyClass  
{  
    public $prop1 = "Eu sou uma propriedade de classe!";  
  
    public function __construct()  
    {  
        echo 'A classe "'.__CLASS__.'" foi iniciada!<br />';  
    }  
 
    public function __destruct() 
    { 
        echo 'A classe "'.__CLASS__.'" foi destruída!<br />';  
    } 
  
    public function setProperty($newval)  
    {  
        $this->prop1 = $newval;  
    }  
  
    public function getProperty()  
    {  
        return $this->prop1 . "<br />";  
    }  
}  
  
// Cria um novo objeto  
$obj = new MyClass;  
  
// Pega o valor de $prop1  
echo $obj->getProperty();  
  
// Destroi o objeto
unset($obj);
  
// Retorna uma mensagem no final do arquivo  
echo "Fim do arquivo.<br />";  
  
?>  

Recarregando o arquivo de teste no browser, agora você terá como retorno:

A classe “MyClass” foi iniciada!
Eu sou uma propriedade de classe!
A classe “MyClass” foi destruída!
Fim do arquivo.

Em nosso próximo post (PHP Orientado a Objetos para iniciantes – Parte 6), iremos aprender um pouco sobre herança de classes.

Se você não viu os posts anteriores desta série de posts, confira-os nos links abaixo:

PHP Orientado a Objetos para iniciantes – Parte 1
PHP Orientado a Objetos para iniciantes – Parte 2
PHP Orientado a Objetos para iniciantes – Parte 3
PHP Orientado a Objetos para iniciantes – Parte 4

Marcos de P. Muniz

Graduado em Sistemas de Informação pela UEMG, é Pós Graduado em Segurança da Informação pela Faculdade Pitágoras, é desenvolvedor PHP desde 2006, trabalha como Analista / Desenvolvedor em uma empresa que atua na área de ensino a distância, faz freelancer criando sites, sistemas e portais utilizando PHP, MySQL e jQuery.

Você pode gostar...

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *