Introdução
O propósito desta extensão é permitir a sobrecarga de propriedades
de acesso e metodos de objetos. Somente uma função é definida
nesta extensão, overload() que
recebe o nome da classe que deve ter esta funcionalidade
habilitada. A classe especificada tem que definir os metodos para
ter esta funcionalidade: __get(),
__set() e __call()
respectivamente para leitura/escrita das propriedades, ou chamar um metodo.
Desta forma a sobrecarga pode ser seletiva: Dentro destas funções
a sobrecarga é desabilitada de forma que você possa acessar
propriedades do objeto normalmente.
Atenção |
Este módulo é
EXPERIMENTAL. Isso quer dizer que o comportamento neste módulo ---
incluindo suas funções e seus nomes, e TUDO mais que está documentado
sobre esse módulo --- poderá mudar em futuras versões do PHP, SEM QUALQUER NOTIFICAÇÃO.
Esteja avisado, e use este módulo por sua própria conta e risco. |
Requisitos
Nenhuma biblioteca externa é necessária para compilar esta extensão.
Instalação
Para poder utilizar essas funções, você precisa compilar o
PHP com a opção --enable-overload.
Configuração durante execução
Esta extenção não define nenhum parâmetro de configuração no php.ini.
Tipos Resource
Esta extensão não possui nenhum tipo resource.
Constantes Predefinidas
Esta extensão não possui nenhuma constante.
Exemplos
Alguns exemplos simples da utilização da função
overload():
Exemplo 1. Sobrecarga de uma classe no PHP <?php
class OO
{
var $a = 111;
var $elem = array('b' => 9, 'c' => 42);
// Metodo callback para pegar uma propriedade
function __get($prop_name, &$prop_value)
{
if (isset($this->elem[$prop_name])) {
$prop_value = $this->elem[$prop_name];
return true;
} else {
return false;
}
}
// Metodo callback para definir uma propriedade
function __set($prop_name, $prop_value)
{
$this->elem[$prop_name] = $prop_value;
return true;
}
}
// Aqui nós sobrecarregamos o objeto OO
overload('OO');
$o = new OO;
print "\$o->a: $o->a\n"; // imprime: $o->a:
print "\$o->b: $o->b\n"; // imprime: $o->b: 9
print "\$o->c: $o->c\n"; // imprime: $o->c: 42
print "\$o->d: $o->d\n"; // imprime: $o->d:
// adicionar um novo intem para o array $elem em OO
$o->x = 56;
// iniciar stdclass (é integrada no PHP 4)
// $var não é sobrecarregada!
$val = new stdclass;
$val->prop = 555;
// Que "a" seja um array com o objeto $val dentro dele
// mas __set() o colocará no array $elem
$o->a = array($val);
var_dump($o->a[0]->prop);
?> |
|
Atenção |
Como esta é uma extensão experimental, nem todas as coisas
funcionam. Não existe ainda suporte para __call()
e você somente pode fazer a sobrecaraga das operações get e set para
propriedades. Você não pode invocar
as chamadas originais da classe
e __set() somente funciona até um nível
de acesso de propriedades.
|