public function callbackReflector($callback)
{
while ($callback instanceof WrappedInvocable) {
$callback = $callback->callback();
}
if (is_array($callback)) {
return new ReflectionMethod($callback[0], $callback[1]);
}
if (is_string($callback) && false !== strpos($callback, '::')) {
list($className, $methodName) = explode('::', $callback);
return new ReflectionMethod($className, $methodName);
}
if (is_object($callback) && !$callback instanceof Closure) {
if (method_exists($callback, '__invoke')) {
return new ReflectionMethod($callback, '__invoke');
}
throw new ReflectionException('Invalid callback.');
}
return new ReflectionFunction($callback);
}