Métodos mágicos __set e __get

Terceiro post sobre métodos mágicos no PHP 5 será sobre as funções __set() e __get().  Talvez a grande facilidade que esses métodos nos trazem é a possibilidade de utilizar o conceito de encapsulamento da orientação a objetos de forma mais econômica.

Em uma classe implementada nos padrões convencionais, para cada atributo privado declarado e que seu valor necessita ser manipulado “fora da classe”, precisamos criar 2 métodos (o set e o get) para atribuir e recuperar informações nesse atributo

Com os métodos mágicos __set e __get fica mais fácil, porque basta que eu os implemente e eles poderão ser utilizados para todos os atributos que a classe possuir.

Veja um exemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    class Pessoa {
      private $nome;
      private $sobrenome;
 
      public function __set($atrib, $value){
          $this->$atrib = $value;
      }
 
      public function __get($atrib){
          return $this->$atrib;
      }
    }

No método __set eu defini 2 parâmetros. No primeiro eu informo o atributo que deverá receber o valor e no segundo eu informo justamente o valor. Já no método __get eu informo apenas o atributo no qual eu desejo capturar o valor armazenado.

Agora vamos a um exemplo de utilização dessa classe:

1
2
3
4
5
6
7
<?php
   $Pessoa = new Pessoa();
   $Pessoa->nome = 'Rafael';
   $Pessoa->sobrenome = 'Pinheiro';
 
   echo 'Nome: ' . $Pessoa->nome . '<br />';
   echo 'Sobrenome: ' . $Pessoa->sobrenome;

Como os atributos são do tipo private, quando eu os invoco no objeto, na verdade o que está sendo executado são os métodos __set e __get. Essa técnica é chamada de overloading

Muito prático, fácil de entender e também de se utilizar.

Até a próxima.

Abs.

Siga-me no twitter: @rafaelwendel

É formado em Sistemas de Informação, pós-graduado em Sistemas de Banco de Dados e mestre em Educação com foco em Tecnologias Sociocomunitárias. Trabalha como professor de ensino técnico e tecnológico no Instituto Federal de Educação, Ciência e Tecnologia de São Paulo ministrando disciplinas nas áreas de programação, banco de dados, desenvolvimento de projetos e engenharia de software.

Posts relacionados

Comentários

Deixe um comentário

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