Sobrecarga
Tanto las llamados a un metodo como el acceso a las propiedades pueden ser sobrecargadas por los metodos
__call,
__get y
__set. Estos metodos solo seran disparados cuando el objeto u objeto heredado no contenga la propiedad o el metodo al cual se esta intentando acceder.
Both method calls and member accesses can be overloaded via the __call, __get and __set methods. These methods will only be triggered when your object or inherited object doesn't contain the member or method you're trying to access. Sobrecargando Propiedades Código PHP:
void __set (string nombre, mixed valor)
mixed __get (mixed nombre)
Las porpiedades de la clase pueden ser sobrecargadas al ejecutar el codigo especifico definido en su clase mediante la definicion de metodos especialmente nombrados. El parametro
$nombre es usado con el nombre de la variable que deberia ser seteada o devuelta. EL parametro
$valor del metodo
__set() especifica el valor que el objeto deberia setear en ...
Class members can be overloaded to run custom code defined in your class by defining these specially named methods. The $name parameter used is the name of the variable that should be set or retrieved. The __set() method's $value parameter specifies the value that the object should set set the $name.
Ejemplo 19-18. Ejemplo de Sobrecarga con __get y __set Código PHP:
<?php
class Setter
{
public $n;
private $x = array("a" => 1, "b" => 2, "c" => 3);
function __get($nm)
{
print "Tomando [$nm]\n";
if (isset($this->x[$nm])) {
$r = $this->x[$nm];
print "Devolviendo: $r\n";
return $r;
} else {
echo "Nada!\n";
}
}
function __set($nm, $val)
{
print "Seteando [$nm] to $val\n";
if (isset($this->x[$nm])) {
$this->x[$nm] = $val;
echo "OK!\n";
} else {
echo "No OK!\n";
}
}
}
$foo = new Setter();
$foo->n = 1;
$foo->a = 100;
$foo->a++;
$foo->z++;
var_dump($foo);
?>
El resultado sera:
Cita: Setting [a] to 100
OK!
Tomando[a]
Devolviendo: 100
Seteando [a] to 101
OK!
Tomando [z]
Nada!
Seteando [z] to 1
No OK!
object(Setter)#1 (2) {
["n"]=>
int(1)
["x:private"]=>
array(3) {
["a"]=>
int(101)
["b"]=>
int(2)
["c"]=>
int(3)
}
}
Sobrecargando Metodos Código PHP:
mixed __call (string nombre, array argumentos)
Los Metodos pueden ser sobrecargados al ejecutar el codigo especifico definido en la clase mediante la definicion de metodos especialmente nombrados. El parametro
$nombre es usado con el mismo nombre de la funcion que fue solicitada para ser usada. Los argumentos que fueron pasados en la funcion seran definidos como un array en el parametro
$argumentos. El valor devuelto desde el metodo
__call() sera devuelto en la llamada del metodo solicitado.
Class methods can be overloaded to run custom code defined in your class by defining this specially named method. The $name parameter used is the name as the function name that was requested to be used. The arguments that were passed in the function will be defined as an array in the $arguments parameter. The value returned from the __call() method will be returned to the caller of the method.
Ejemplo 19-19. Ejemplo de Sobrecarga con __call Código PHP:
<?php
class Caller
{
private $x = array(1, 2, 3);
function __call($m, $a)
{
print "Metodo llamado $m:\n";
var_dump($a);
return $this->x;
}
}
$foo = new Caller();
$a = $foo->test(1, "2", 3.4, true);
var_dump($a);
?>
El resultado sera:
Cita: Metodo llamado test:
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)
}