Manual do PHP
Anterior | Capítulo 19. Classes e Objetos (PHP 5) | Próxima

# Sobrecarga

Tanto chamada de métodos e acesso a membros podem ser sobrecarregados pelos métodos __call, __get e __set. Esses métodos só serão disparados quando seu objeto ou o objeto herdado não contiver o membro ou método que você está tentando acessar.

## Sobrecarga de método

void __set ( string name, mixed value )
void __get ( mixed name )

Membros de classes podem ser sobrecarregados para executar código específico definido na sua classe definindo esses métodos especialmente nomeados. O parâmetro $name usado é o nome da variável que deve ser configurada ou recuperada. O parâmetro $value do método __set() especifica o valor que o objeto deve atribuir à variável $name.

Exemplo 19-18. Exemplo de sobrecarga com __get e __set
`<?php class Setter { public $n; private $x = array("a" => 1, "b" => 2, "c" => 3); function __get($nm) { print "Pegando [$nm]\n"; if (isset($this->x[$nm])) { $r = $this->x[$nm]; print "Retornando: $r\n"; return $r; } else { echo "Nada!\n"; } } function __set($nm, $val) { print "Atribuindo à [$nm] o valor $val\n"; if (isset($this->x[$nm])) { $this->x[$nm] = $val; echo "OK!\n"; } else { echo "Não funcionou\n"; } } } $foo = new Setter(); $foo->n = 1; $foo->a = 100; $foo->a++; $foo->z++; var_dump($foo); ?>`
Terá a seguinte saída:
`Atribuindo à [a] o valor 100 OK! Pegando [a] Retornando: 100 Atribuindo à [a] o valor 101 OK! Pegando [z] Nada! Atribuindo à [z] o valor 1 Não funcionou! object(Setter)#1 (2) { ["n"]=> int(1) ["x:private"]=> array(3) { ["a"]=> int(101) ["b"]=> int(2) ["c"]=> int(3) } }`

## Sobrecarga de método

mixed __call ( string name, array arguments )

Membros de classes podem ser sobrecarregados para executar código específico definido na sua classe definindo esses métodos especialmente nomeados. O parâmetro $name usado é o nome da função que foi requerida a ser usada. Os argumentos que foram passado na função serão definidos como um array no parâmetro $arguments. O valor retorna do método __call() será retornado ao chamador do método.

Exemplo 19-19. Exemplo de sobrecarga com __call
`<?php class Caller { private $x = array(1, 2, 3); function __call($m, $a) { print "Método $m chamado:\n"; var_dump($a); return $this->x; } } $foo = new Caller(); $a = $foo->teste(1, "2", 3.4, true); var_dump($a); ?>`
Terá a seguinte saída:
`Método teste chamado: array(4) { [0]=> int(1) [1]=> string(1) "2" [2]=> float(3.4) [3]=> bool(true) } array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }`

Anterior | Principal | Próxima
Interfaces de Objetos | Acima | Iteração de Objetos