PHP orientado à objetos – parte 3

Postado por Abraão Levi em 30 de dezembro de 2010

Acompanhe os artigos sobre orientado à objetos:

Para tornar o uso de objetos mais simples, o PHP também oferece uma série de métodos mágicos, ou métodos especiais que são chamados quando certas ações comuns ocorrem dentro de objetos. Isso permite aos desenvolvedores executar uma série de tarefas úteis com relativa facilidade.

Construtores e Destrutores

Quando um objeto é instanciado, muitas vezes é desejável definir algumas coisas que são padrões. Para lidar com isso, o PHP fornece o método mágico __construct(), que é chamado automaticamente sempre que um novo objeto é criado, como o próprio nome diz, ele é o método construtor.

Para ilustrar o conceito de construtores, adicione um construtor para MyClass que retorna uma mensagem sempre que uma nova instância da classe é criada:

<?php
 
class MyClass
{
    public $prop1 = "Eu sou uma propriedade da classe!";
 
    public function __construct()
    {
        echo 'A classe "', __CLASS__, '" foi inicializada!<br />';
    }
 
    public function setProperty($novoValor)
    {
        $this->prop1 = $novoValor;
    }
 
    public function getProperty()
    {
        return $this->prop1 . "<br />";
    }
}
 
// Cria um novo Objeto
$obj = new MyClass;
 
// Retorna o valor do atributo $prop1
echo $obj->getProperty();
 
// Identifica quando o fim do arquivo
echo "Fim do arquivo.<br />";
 
?>

Nota__CLASS__ retorna o nome da classe na qual ele é chamado, é o que é conhecido como uma constante mágica. Existem várias disponíveis que você pode ler mais sobre no manual do PHP.

A saída esperada é a seguinte:

 
A classe MyClass foi inicializada!
Eu sou uma propriedade da classe!
Fim do arquivo.

Para chamar uma função quando o objeto é destruído, o __destruct() método mágico que está disponível. Isso é útil para a limpeza da classe (fechamento de uma conexão com o banco, por exemplo).

Vamos modificar um pouco o código e ver seu resultado no navegador:

<?php
 
class MyClass
{
    public $prop1 = "Eu sou uma propriedade da classe!";
 
    public function __construct()
    {
        echo 'A classe "', __CLASS__, '" foi inicializada!<br />';
    }
 
    public function __destruct()
    {
        echo 'A classe "', __CLASS__, '" foi destruida.<br />';
    }
 
    public function setProperty($novoValor)
    {
        $this->prop1 = $novoValor;
    }
 
    public function getProperty()
    {
        return $this->prop1 . "<br />";
    }
}
 
// Cria um novo Objeto
$obj = new MyClass;
 
// Retorna o valor do atributo $prop1
echo $obj->getProperty();
 
// Identifica quando o fim do arquivo
echo "Fim do arquivo.<br />";
 
?>

Resultado no browser:

 
A classe MyClass foi inicializada!
Eu sou uma propriedade da classe!
Fim do arquivo.
A classe MyClass foi destruida!

Quando um arquivo finaliza sua execução, o PHP automaticamente libera todos os recursos.

Caso você queira acionar o destrutor antes do termino da execução do arquivo, você pode destruir o objeto usando o
unset() função:

<?php
 
class MyClass
{
    public $prop1 = "Eu sou uma propriedade da classe!";
 
    public function __construct()
    {
        echo 'A classe "', __CLASS__, '" foi inicializada!<br />';
    }
 
    public function __destruct()
    {
        echo 'A classe "', __CLASS__, '" foi destruida.<br />';
    }
 
    public function setProperty($novoValor)
    {
        $this->prop1 = $novoValor;
    }
 
    public function getProperty()
    {
        return $this->prop1 . "<br />";
    }
}
 
// Cria um novo Objeto
$obj = new MyClass;
 
// Retorna o valor do atributo $prop1
echo $obj->getProperty();
 
// Destroi o objeto
unset($obj);
 
// Identifica quando o fim do arquivo
echo "Fim do arquivo.<br />";
 
?>

Veja:

 
A classe MyClass foi inicializada!
Eu sou uma propriedade da classe!
A classe MyClass foi destruida!
Fim do arquivo.

Existem outros métodos __call, __callStatic, __get, __set, __isset, __unset, __sleep, __wakeup, __toString, __invoke, __set_state e __clone que você pode ver mais no manual do PHP, mas de início os métodos __construct e __destruct são mais que suficientes para podermos brincar um pouco com orientação objetos em PHP. Em outras linguagens, como o Java, também possuem contrutores e outros métodos que auxiliam, o que diferencia mesmo é sintaxe.

No próximo artigo vamos falar um pouco de como usar herança de classe.

Até a próxima!

Artigo postado em: Artigos e tutoriais, PHP

Tags: , ,



Compartilhe:

Sobre: Abraão Levi

Desenvolvedor web do Kekanto um guia colaborativo de Restaurantes, Bares, Baladas. Acredita em idéias simples e usabilidade. Sigam @AbraaoLevi

Comentários

Sem Comentários

Deixe um Comentário!

Nome: ( necessário )

E-Mail: ( necessário )

Website:

Comentário: