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