Páginas

quinta-feira, 17 de maio de 2012

Métodos mágicos do PHP


Intercepções: métodos __set(), __get() e __call(). Vamos falar também sobre __toString().


    É muito comum a gente encontrar classes básicas com métodos get e set para cada atributo da classe, como mostra o exemplo a seguir:

Usuario.class.php

class Usuario{

    private $id;
    private $email;
    private $nomeCompleto;

       public getId(){
             return $this->id;
       }
     
       public setId($id){
             $this->id = $id;
      }

       public getEmail(){
            return $this->email;
      }

       public setEmail(){
            $this->email = $email;
      }

  ...

}
Isso é bastante trabalhoso e sai do conceito de você ter que evitar reescrita de código, por que você fica escrevendo a mesma coisa N vezes para cada classe criada.

Foi quando no PHP 5, foram criados os métodos mágicos.
Método __set():
Sintaxe :
function __set( $propriedade, $valor){
          /* Aqui dentro você faz todos os tratamentos que
          quiser, no nosso caso eu vou apenas retornar para o
          atributo o valor setado.*/
          $this->$propriedade = $valor;
}
Método __get():
Sintaxe:
function __get($propriedade){
       /* Aqui dentro você faz todos os tratamentos que
          quiser, no nosso caso eu vou apenas retornar
         o valor que foi atribuído via __set() para o atributo.*/
      return $this->$propriedade;
}
Como ficaria a nossa classe básica com o nossos novos métodos ??


Usuario.class.php

class Usuario{


    private $id;
    private $email;
    private $nomeCompleto;


       function __get($propriedade){
                 return $this->$propriedade;
       }

       function __set( $propriedade, $valor){
                 $this->$propriedade = $valor;
       }

  ...

}
Perceba que não foi necessário ficar escrevendo um get e um set para cada atributo da classe, isso é uma maravilha =D.
Certo, agora já estamos com a nossa classe básica e como vamos atribuir valores e receber ?

Em nosso arquivo index.php....

index.php

<?php
       /*Vamos dar um require_once em nossa classe básica*/
       require_once 'Usuario.class.php';
   
       /* vamos instanciar nosso objeto*/
   $objUsuario = new Usuario();
      /* atribuindo um valor para a propriedade nomeCompleto.*/
   $objUsuario->nomeCompleto = "DiaDiadeTi";
    /*Imprimindo o valor de um atributo*/
     echo $objUsuario->nomeCompleto;
?>
Continuamos na Próxima postagem .... Clique aqui !

Nenhum comentário:

Postar um comentário