framework/helpers/BaseVarDumper.php
private static function exportClosure(\Closure $closure)
    {
        $reflection = new \ReflectionFunction($closure);

        $fileName = $reflection->getFileName();
        $start = $reflection->getStartLine();
        $end = $reflection->getEndLine();

        if ($fileName === false || $start === false || $end === false) {
            return 'function() {/* Error: unable to determine Closure source */}';
        }

        --$start;

        $source = implode("\n", array_slice(file($fileName), $start, $end - $start));
        $tokens = token_get_all('<?php ' . $source);
        array_shift($tokens);

        $closureTokens = [];
        $pendingParenthesisCount = 0;
        foreach ($tokens as $token) {
            if (isset($token[0]) && $token[0] === T_FUNCTION) {
                $closureTokens[] = $token[1];
                continue;
            }
            if ($closureTokens !== []) {
                $closureTokens[] = isset($token[1]) ? $token[1] : $token;
                if ($token === '}') {
                    $pendingParenthesisCount--;
                    if ($pendingParenthesisCount === 0) {
                        break;
                    }
                } elseif ($token === '{') {
                    $pendingParenthesisCount++;
                }
            }
        }

        return implode('', $closureTokens);
    }
private static function exportClosure(\Closure $closure)
    {
        $reflection = new \ReflectionFunction($closure);

        $fileName = $reflection->getFileName();
        $start = $reflection->getStartLine();
        $end = $reflection->getEndLine();

        if ($fileName === false || $start === false || $end === false) {
            return 'function() {/* Error: unable to determine Closure source */}';
        }

        --$start;

        $source = implode("\n", array_slice(file($fileName), $start, $end - $start));
        $tokens = token_get_all('<?php ' . $source);
        array_shift($tokens);

        $closureTokens = [];
        $pendingParenthesisCount = 0;
        foreach ($tokens as $token) {
            if (isset($token[0]) && $token[0] === T_FUNCTION) {
                $closureTokens[] = $token[1];
                continue;
            }
            if ($closureTokens !== []) {
                $closureTokens[] = isset($token[1]) ? $token[1] : $token;
                if ($token === '}') {
                    $pendingParenthesisCount--;
                    if ($pendingParenthesisCount === 0) {
                        break;
                    }
                } elseif ($token === '{') {
                    $pendingParenthesisCount++;
                }
            }
        }

        return implode('', $closureTokens);
    }
private static function exportClosure ( \ Closure $ closure ) { $ reflection = new \ ReflectionFunction ( $ closure ) ; $ fileName = $ reflection -> getFileName ( ) ; $ start = $ reflection -> getStartLine ( ) ; $ end = $ reflection -> getEndLine ( ) ; if ( $ fileName === false || $ start === false || $ end === false ) { return 'function() {/* Error: unable to determine Closure source */}' ; } -- $ start ; $ source = implode ( "\n" , array_slice ( file ( $ fileName ) , $ start , $ end - $ start ) ) ; $ tokens = token_get_all ( '<?php ' . $ source ) ; array_shift ( $ tokens ) ; $ closureTokens = [ ] ; $ pendingParenthesisCount = 0 ; foreach ( $ tokens as $ token ) { if ( isset ( $ token [ 0 ] ) && $ token [ 0 ] === T_FUNCTION ) { $ closureTokens [ ] = $ token [ 1 ] ; continue ; } if ( $ closureTokens !== [ ] ) { $ closureTokens [ ] = isset ( $ token [ 1 ] ) ? $ token [ 1 ] : $ token ; if ( $ token === '}' ) { $ pendingParenthesisCount -- ; if ( $ pendingParenthesisCount === 0 ) { break ; } } elseif ( $ token === '{' ) { $ pendingParenthesisCount ++ ; } } } return implode ( '' , $ closureTokens ) ; }
Exports a [[Closure]] instance.
@param \Closure $closure closure instance.
@return string
Exports a [[ Closure ]] instance .