metodos - php__ set_state
Activación de__call() en PHP incluso cuando existe un método (2)
La documentación de PHP dice lo siguiente sobre el método mágico __call()
:
__call () se activa cuando se invoca métodos inaccesibles en un contexto de objeto.
¿Hay alguna manera de que se pueda __call()
incluso cuando existe un método, antes de que se llame al método real? O, ¿hay algún otro gancho que pueda implementar u otra forma que proporcione esta funcionalidad?
Si importa, esto es para una static function
(y preferiría usar __callStatic
).
¿Por qué no hacer que todos sus métodos estén protegidos y llamarlos usando __call ():
class bar{
public function __call($method, $args){
echo "calling $method";
//do other stuff
//possibly do method_exists check
return call_user_func_array(array($this, $method), $args);
}
protected function foo($arg){
return $arg;
}
}
$bar = new bar;
$bar->foo("baz"); //echo''s ''calling foo'' and returns ''baz''
¿Qué tal si solo hace que todos sus otros métodos estén protegidos, y haga proxy a través de __callStatic?
namespace test/foo;
class A
{
public static function __callStatic($method, $args)
{
echo __METHOD__ . "/n";
return call_user_func_array(__CLASS__ . ''::'' . $method, $args);
}
protected static function foo()
{
echo __METHOD__ . "/n";
}
}
A::foo();