Abordagem exemplificada de orientação à objeto com PHP 5

Este artigo vem a complementar um outro que escrevi sobre orientação a objeto nos moldes do PHP4. Dessa vez venho trazendo o que houve de mudanças para o PHP5 com duas classes que exemplificam bem essas mudanças.

[ Hits: 36.838 ]

Por: Evaldo Barbosa em 17/08/2006


Construindo uma classe 'Pessoa'



A finalidade desse exemplo é justamente abordar a orientação a objeto em PHP5 de acordo com o que foi exposto anteriormente, com a visão deste desenvolvedor que aqui escreve para expor o seu pouco estudo com o intuito de mostrar aos que ainda pensão em se aventurar nessa versão e suas modificações.

Agora vamos ao exemplo!

class Pessoa {
    public $nome;
    public $sobrenome;
    public $nascimento;
    protected $idade;


    private $renda;


    function __construct() {
        $this->renda = 0;
    }

    function __destruct() {
        unset($this);
    }

    public function setNascimento($nascimento) {
        $ano; $mes; $dia; //explodindo a data
        $ar = array();
        $nascimento = eregi_replace("[-.]","/",$nascimento);
        $nascimento = (eregi("(0[0-9]{1}|[12]{1}[0-9]{1}|3[01]{1})/(0[1-9]{1}|1[012]{1})/([12][0-9]{3})",$nascimento)) ? $nascimento : $this->exception(0);
        $ar = explode("/",$nascimento);
        $dia = $ar[0];
        $mes = $ar[1];
        $ano = $ar[2];

        $this->nascimento = $nascimento;

        if (date("m") > $mes && date("d") > $dia)
            $this->idade = date("Y") - $ano;
        else $this->idade = date("Y") - $ano - 1;
    }

    public function getIdade() {
        return $this->idade;
    }

    protected function setRenda($v) {
        $this->renda = $v;
    }

    function getRenda() {
        return $this->renda;
    }

    function exception($exceptionNumber) {
        switch ($exceptionNumber) {
            case 0 : return "O formato da data de nascimento é dd/mm/yyyy. Corrija.";
            default : return "Erro não previsto.";
        }
    }
}

Comentando o exemplo:

Como vemos na classe Pessoa, temos o método __construct, onde atribuímos ao atributo privado 'renda' o valor 0 (zero), __destruct, no qual simplesmente retiramos da memória o objeto ($this refere-se internamente à própria classe), os getters (getIdade e getRenda) e os setters (setNascimento e setRenda) e por fim um método exception no qual podemos prever alguns erros e criar mensagens personalizadas para os mesmos.

Um destaque que dou é para o método setNascimento que parece o mais complexo, porém é de fácil entendimento. Esse método não faz nada a mais que descobrir a idade do indivíduo, dando a sua idade exata, baseada na data de seus aniversário. Para validação da data usei alguns padrões de expressões regulares para que o desenvolvedor que use essa classe atribua um valor formatado no padrão dd/mm/YYYY ou d-m-Y, como queiram.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Construtores e Destrutores, o que mudou?
   3. A filosofia dos 'getters' e dos 'setters'
   4. Construindo uma classe 'Pessoa'
   5. Derivando 'Funcionario' de 'Pessoa'
   6. Mudanças numa nova versão. O que ainda falta?
Outros artigos deste autor

Gerando gráficos com PHP e highcharts.com

Abordagem exemplificada à Orientação a Objetos com PHP

Construindo componentes em PHP e jQuery

Utilizando PHP e Apache para desligar um Ubuntu

Macromedia Studio 8 no Wine em detalhes

Leitura recomendada

Compactador de URL utilizando manipulação de diretórios do Linux com PHP

Instalando Lamp Stack no Servidor Debian

Capturando conteúdo de sites em PHP

Utilizando PHP para validar dados passados pelo usuário

Symfony Framework - Introdução

  
Comentários
[1] Comentário enviado por removido em 18/08/2006 - 08:58h

Parabéns collapse pelo artigo bem explicado...
Acredito que ajudará iniciantes, e aqueles que ainda têm medo de migrar para o PHP5, a utillizarem cada vez mais essa versão...

E tomara que muita coisa melhore nas próximas versões do PHP. Como a manipulação de eventos (dito por você), e tipagem forte de atributos/métodos...

Uma outra funcionalidade que acho interessante seria a possibilidade de se criar propriedades, como o C# (DotNet).

Abraços,

[2] Comentário enviado por F4xl em 19/08/2006 - 01:07h

Muito bom o artigo, Evaldo!

Principalmente para quem está iniciando os estudos em PHP. Um comentário que eu gostaria de ler aqui é sobre como o PHP vai se comportar no mercado concorrendo com a plataforma .NET da Microsoft, uma vez que todos parecem querer migrar para ela.

Abraços a todos!

[3] Comentário enviado por evandrofisico em 19/08/2006 - 20:52h

Para fazer um destructor em php4 é necessária uma pequena gambiarra, colocando dentro da funcao constructor um register_shutdown_function(array(&$this, 'quit'))

onde quit é o nome da funcao a ser executada antes do fim do script

[4] Comentário enviado por rockedsonbr em 30/08/2006 - 11:43h

Muito bom....

Algumas dúvidas?
O método __destruct() tem q ser envocado após o uso da classe?

$myvar->__destruct();

Posso usar unset($myvar); isto já resolve???

Andei lendo alguns artigos e pessoas tem explicações diferentes... qual o mais indicado?

Abraço


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts