Forum und email

Sobrecarga de propriedades e métodos de objetos

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.

Aviso

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.

Aviso

Esta extensão não é parte do PHP 5. PHP 5 suporta __get(), __set() e __call() nativamente. Veja a página Sobrecarga no PHP 5 para mais informação.

Dependências

Nenhuma biblioteca externa é necessária para compilar esta extensão.

Instalação

In order to use these functions, you must compile PHP with the --enable-overload option. Starting with PHP 4.3.0 this extension is enabled by default. You can disable overload support with --disable--overload.

A versão para Windows do PHP tem suporte embutido para esta extensão. Você não precisa carregar nenhuma extensão adicional para utilizar essas funções.

Nota: Builtin support for overload is available with PHP 4.3.0.

Configurações em execução

Esta extensã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 pré-definidas

Esta extensão não possui nenhuma constante.

Exemplos

Alguns exemplos simples da utilização da função overload():

Example#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;
echo 
"\$o->a: $o->a\n"// print: $o->a: 111
echo "\$o->b: $o->b\n"// print: $o->b: 9
echo "\$o->c: $o->c\n"// print: $o->c: 42
echo "\$o->d: $o->d\n"// print: $o->d:

// adicionar um novo intem para o array $elem em OO
$o->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->= array($val);
var_dump($o->a[0]->prop);

?>