protected function parseController($controller)
    {
        if (\is_string($controller) && false !== strpos($controller, '::')) {
            $controller = explode('::', $controller);
        }

        if (\is_array($controller)) {
            try {
                $r = new \ReflectionMethod($controller[0], $controller[1]);

                return [
                    'class' => \is_object($controller[0]) ? \get_class($controller[0]) : $controller[0],
                    'method' => $controller[1],
                    'file' => $r->getFileName(),
                    'line' => $r->getStartLine(),
                ];
            } catch (\ReflectionException $e) {
                if (\is_callable($controller)) {
                    // using __call or  __callStatic
                    return [
                        'class' => \is_object($controller[0]) ? \get_class($controller[0]) : $controller[0],
                        'method' => $controller[1],
                        'file' => 'n/a',
                        'line' => 'n/a',
                    ];
                }
            }
        }

        if ($controller instanceof \Closure) {
            $r = new \ReflectionFunction($controller);

            $controller = [
                'class' => $r->getName(),
                'method' => null,
                'file' => $r->getFileName(),
                'line' => $r->getStartLine(),
            ];

            if (false !== strpos($r->name, '{closure}')) {
                return $controller;
            }
            $controller['method'] = $r->name;

            if ($class = $r->getClosureScopeClass()) {
                $controller['class'] = $class->name;
            } else {
                return $r->name;
            }

            return $controller;
        }

        if (\is_object($controller)) {
            $r = new \ReflectionClass($controller);

            return [
                'class' => $r->getName(),
                'method' => null,
                'file' => $r->getFileName(),
                'line' => $r->getStartLine(),
            ];
        }

        return \is_string($controller) ? $controller : 'n/a';
    }
protected function parseController($controller)
    {
        if (\is_string($controller) && false !== strpos($controller, '::')) {
            $controller = explode('::', $controller);
        }

        if (\is_array($controller)) {
            try {
                $r = new \ReflectionMethod($controller[0], $controller[1]);

                return [
                    'class' => \is_object($controller[0]) ? \get_class($controller[0]) : $controller[0],
                    'method' => $controller[1],
                    'file' => $r->getFileName(),
                    'line' => $r->getStartLine(),
                ];
            } catch (\ReflectionException $e) {
                if (\is_callable($controller)) {
                    // using __call or  __callStatic
                    return [
                        'class' => \is_object($controller[0]) ? \get_class($controller[0]) : $controller[0],
                        'method' => $controller[1],
                        'file' => 'n/a',
                        'line' => 'n/a',
                    ];
                }
            }
        }

        if ($controller instanceof \Closure) {
            $r = new \ReflectionFunction($controller);

            $controller = [
                'class' => $r->getName(),
                'method' => null,
                'file' => $r->getFileName(),
                'line' => $r->getStartLine(),
            ];

            if (false !== strpos($r->name, '{closure}')) {
                return $controller;
            }
            $controller['method'] = $r->name;

            if ($class = $r->getClosureScopeClass()) {
                $controller['class'] = $class->name;
            } else {
                return $r->name;
            }

            return $controller;
        }

        if (\is_object($controller)) {
            $r = new \ReflectionClass($controller);

            return [
                'class' => $r->getName(),
                'method' => null,
                'file' => $r->getFileName(),
                'line' => $r->getStartLine(),
            ];
        }

        return \is_string($controller) ? $controller : 'n/a';
    }
protected function parseController ( $ controller ) { if ( \ is_string ( $ controller ) && false !== strpos ( $ controller , '::' ) ) { $ controller = explode ( '::' , $ controller ) ; } if ( \ is_array ( $ controller ) ) { try { $ r = new \ ReflectionMethod ( $ controller [ 0 ] , $ controller [ 1 ] ) ; return [ 'class' => \ is_object ( $ controller [ 0 ] ) ? \ get_class ( $ controller [ 0 ] ) : $ controller [ 0 ] , 'method' => $ controller [ 1 ] , 'file' => $ r -> getFileName ( ) , 'line' => $ r -> getStartLine ( ) , ] ; } catch ( \ ReflectionException $ e ) { if ( \ is_callable ( $ controller ) ) { // using __call or  __callStatic return [ 'class' => \ is_object ( $ controller [ 0 ] ) ? \ get_class ( $ controller [ 0 ] ) : $ controller [ 0 ] , 'method' => $ controller [ 1 ] , 'file' => 'n/a' , 'line' => 'n/a' , ] ; } } } if ( $ controller instanceof \ Closure ) { $ r = new \ ReflectionFunction ( $ controller ) ; $ controller = [ 'class' => $ r -> getName ( ) , 'method' => null , 'file' => $ r -> getFileName ( ) , 'line' => $ r -> getStartLine ( ) , ] ; if ( false !== strpos ( $ r -> name , '{closure}' ) ) { return $ controller ; } $ controller [ 'method' ] = $ r -> name ; if ( $ class = $ r -> getClosureScopeClass ( ) ) { $ controller [ 'class' ] = $ class -> name ; } else { return $ r -> name ; } return $ controller ; } if ( \ is_object ( $ controller ) ) { $ r = new \ ReflectionClass ( $ controller ) ; return [ 'class' => $ r -> getName ( ) , 'method' => null , 'file' => $ r -> getFileName ( ) , 'line' => $ r -> getStartLine ( ) , ] ; } return \ is_string ( $ controller ) ? $ controller : 'n/a' ; }
Parse a controller.

@param mixed $controller The controller to parse

@return array|string An array of controller data or a simple string
Parse a controller .