public static function toReflection($callable)
{
if ($callable instanceof \Closure) {
$callable = self::unwrap($callable);
} elseif ($callable instanceof Nette\Callback) {
trigger_error('Nette\\Callback is deprecated.', E_USER_DEPRECATED);
$callable = $callable->getNative();
}
$class = class_exists(Nette\Reflection\Method::class) ? Nette\Reflection\Method::class : 'ReflectionMethod';
if (is_string($callable) && strpos($callable, '::')) {
return new $class($callable);
} elseif (is_array($callable)) {
return new $class($callable[0], $callable[1]);
} elseif (is_object($callable) && !$callable instanceof \Closure) {
return new $class($callable, '__invoke');
} else {
$class = class_exists(Nette\Reflection\GlobalFunction::class) ? Nette\Reflection\GlobalFunction::class : 'ReflectionFunction';
return new $class($callable);
}
}