<?php
$closure1 = function($val){ return $val; };
$closure2 = function($val){ return $val; };
$reflection_class = new ReflectionClass($closure1);
$reflection_method = $reflection_class->getMethod('__invoke');
$arguments1 = array('hello');
$arguments2 = array('world');
// Invoking once is OK...
print $reflection_method->invokeArgs($closure1, $arguments1);
if(true){
// But don't do it again!
#print $reflection_method->invokeArgs($closure1, $arguments1);
// Using different arguments per invokation makes no difference :(
#print $reflection_method->invokeArgs($closure1, $arguments2);
// Doesn't matter if you attempt to invoke a different closure with the same reflection.
print $reflection_method->invokeArgs($closure2, $arguments1);