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: 35.777 ]

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

Utilizando PHP e Apache para desligar um Ubuntu

Abordagem exemplificada à Orientação a Objetos com PHP

Macromedia Studio 8 no Wine em detalhes

Gerando gráficos com PHP e highcharts.com

Construindo componentes em PHP e jQuery

Leitura recomendada

Inteligência Artificial com PHP e MySQL (parte I)

PEAR - Utilizando classes prontas e documentadas no PHP

Guia completo do Ocomon módulo admin no Linux (exclusivo VOL)

Referências ou ponteiros em PHP

Guia completo do Ocomon no Linux - Módulo cliente, abertura de ocorrência (exclusivo VOL)

  
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