Manual do PHP
Anterior |  | Próxima

# LXXXII. 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.

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.

# 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():

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.

Anterior | Principal | Próxima
output_reset_rewrite_vars | Acima | overload