La butto qui 
ho trovato interessante questo post di John Resig sulle funzioni parziali in JavaScript.
Magari vi sembrera' un'assurdita', ma per un problema al lavoro ho pensato di sfruttare la stessa tecnica, peccato che il linguaggio sia PHP.
A volte PHP e' comunque piu' flessibile di quello che si pensa (almeno di quello che IO penso).
Ecco il risultato:
codice:
class ReflectionPartialFunction extends ReflectionFunction {
protected $args;
public function __construct($name){
parent::__construct($name);
$this->args = func_get_args();
array_splice($this->args, 0, 1);
}
public function invoke($args){
$args = func_get_args();
return $this->invokeArgs($args);
}
public function invokeArgs(array $args){
return parent::invokeArgs(array_merge($this->args, $args));
}
}
class ReflectionPartialMethod extends ReflectionMethod {
protected $args;
public function __construct($class, $name){
parent::__construct($class, $name);
$this->args = func_get_args();
array_splice($this->args, 0, 2);
}
public function invoke($object, $args){
$args = func_get_args();
return $this->invokeArgs(array_shift($args), $args);
}
public function invokeArgs($object, array $args){
return parent::invokeArgs($object, array_merge($this->args, $args));
}
}
Ed ecco un paio di tests facili facili:
codice:
function mul($fixedParam, $num){
return $fixedParam * $num;
}
class Test{
protected $num;
public function __construct($num){
$this->num = $num;
}
public function me($fixedParam, $num){
return $this->num * $fixedParam * $num;
}
}
$partial = new ReflectionPartialFunction('mul', 12);
echo $partial->invoke(2); // 24
$partial = new ReflectionPartialMethod('Test', 'me', 12);
echo $partial->invoke(new Test(2), 2); // 48
A voi trovarne applicazioni