public static function unwrap(\Closure $closure)
{
$r = new \ReflectionFunction($closure);
if (substr($r->getName(), -1) === '}') {
$vars = $r->getStaticVariables();
return isset($vars['_callable_']) ? $vars['_callable_'] : $closure;
} elseif ($obj = $r->getClosureThis()) {
return [$obj, $r->getName()];
} elseif ($class = $r->getClosureScopeClass()) {
return [$class->getName(), $r->getName()];
} else {
return $r->getName();
}
}