Tutorial de POO no PHP: Intercepções
Autor/fonte: Bruno Viana
Tags: [ tutorial poo ]
O PHP inseriu a partir da sua versão 5 o conceito de Intercepções. As interceoções são realizadas através de métodos conhecidos como Métodos Mágicos (Magic Methods).
Os métodos mágicos
São métodos opcionais que podemos por em nossas classes para executarem em momentos específicos e realizar ações especiais. Os principais são:
1. Método __set()
O método __set é chamado toda vez quem tentamos dar um valor a alguma propriedade da classe, independente dela ter sido declarada ou não.
No exemplo queremos que qualquer propriedade que o usuário tentar adicionar seja armazenada em um array:
O método __set receb dois parâmetros. Um é o nome da propriedade que estamos tentando inserir e o outro é o valor que estamos atribuindo.
2. Método __get()
Continuando com o exemplo passado, agora queremos recuperar esses valores armazenados. Atualmente não é possível pois o array $_dados é privado e não é possível acessar de fora da classe.
Para isso usamos o método __get, que intercepta toda vez que tentamos resgatar uma propriedade:
3. Método __call()
O método __call é chamado toda vez que um método é chamado em uma classe e o PHP não o encontra. Com isso é possível definir comportamento padrão caso um método seja chamado.
O método __call recebe dois parâmetros. Um é uma string com o nome do método que tentarão chamar e o outro é um array com os argumentos declarados. Se o método __call não for encontrado, o PHP continua com seu fluxo normal e dispara um Fatal Error.
Os métodos mágicos
São métodos opcionais que podemos por em nossas classes para executarem em momentos específicos e realizar ações especiais. Os principais são:
1. Método __set()
O método __set é chamado toda vez quem tentamos dar um valor a alguma propriedade da classe, independente dela ter sido declarada ou não.
No exemplo queremos que qualquer propriedade que o usuário tentar adicionar seja armazenada em um array:
<?php
class Pessoa
{
private $_dados;
public function __set( $chave, $valor )
{
$this->dados[ $chave ] = $valor
}
}
$pessoa = new Pessoa();
$pessoa->nome = 'Bruno Viana';
?>
O método __set receb dois parâmetros. Um é o nome da propriedade que estamos tentando inserir e o outro é o valor que estamos atribuindo.
2. Método __get()
Continuando com o exemplo passado, agora queremos recuperar esses valores armazenados. Atualmente não é possível pois o array $_dados é privado e não é possível acessar de fora da classe.
Para isso usamos o método __get, que intercepta toda vez que tentamos resgatar uma propriedade:
<?php
class Pessoa
{
private $_dados;
public function __set( $chave, $valor )
{
$this->dados[ $chave ] = $valor
}
public function __get( $chave )
{
return $this->{$chave};
}
}
$pessoa = new Pessoa();
$pessoa->nome = 'Bruno Viana';
echo $pessoa->nome;
?>
3. Método __call()
O método __call é chamado toda vez que um método é chamado em uma classe e o PHP não o encontra. Com isso é possível definir comportamento padrão caso um método seja chamado.
<?php
class Pessoa
{
private $_dados;
public function __set( $chave, $valor )
{
$this->dados[ $chave ] = $valor
}
public function __get( $chave )
{
return $this->{$chave};
}
public function __call( $nomeDoMetodo, $argumentos )
{
LogManager::logar( "Foi chamado o método '$nomeDoMetodo' na classe Pessoa e ele não existe." );
}
}
$pessoa = new Pessoa();
/**
* Isso guarda um log com a mensagem:
* Foi chamado o método 'andar' na classe Pessoa e ele não existe
*/
$pessoa->andar();
?>
O método __call recebe dois parâmetros. Um é uma string com o nome do método que tentarão chamar e o outro é um array com os argumentos declarados. Se o método __call não for encontrado, o PHP continua com seu fluxo normal e dispara um Fatal Error.

Enviado por xKuRt em 03/02/2009 às 08:52
Itens relacionados
Tutorial de POO no PHP: Abstração
Tutorial de POO no PHP: Classes e Objetos
Tutorial de POO no PHP: Tratamento de erros
Tutorial de POO no PHP: Membros da classe
Tutorial de POO no PHP: Encapsulamento
Tutorial de POO no PHP: Padrões de projetos
Tutorial de POO no PHP: Herança e polimorfismo
Tutorial de POO no PHP: Programação Estruturada x Programação Orientada a Objetos
Avaliação
Avaliação desta publicação: 10.00; Total de avaliações: 1
A avaliação de publicações é restrita a membros cadastrados e logados no nosso site.
Comentários
| Enviado por BMCVET em 07/11/2009 às 12:08 Muito Bom Tuturial Parabens !!! -- BMCVET |
Envio de comentário:
Quinta, 02 de Setembro de 2010
Área restrita
Leitura recomendada
Últimas publicações
Top 5 membros
- dddweb213 pts
- Jotah191 pts
- fbinasco165 pts
- andersonop153 pts
- fredbcn117 pts
Últimos membros cadastrados
- reniltonem 02/09
- baixehdem 02/09
- danilocarlosem 02/09



