<?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);
}
Fatal error: Uncaught exception 'ReflectionException' with message 'Method __invoke does not exist' in /in/ls5YL:6
Stack trace:
#0 /in/ls5YL(6): ReflectionClass->getMethod('__invoke')
#1 {main}
thrown in /in/ls5YL on line 6
Process exited with code 255.