Closures
-----
<?php
function($a) { $a; };
function($a) use($b) {};
function() use($a, &$b) {};
function &($a) {};
static function() {};
function($a) : array {};
function() use($a) : \Foo\Bar {};
-----
array(
    0: Stmt_Expression(
        expr: Expr_Closure(
            static: false
            byRef: false
            params: array(
                0: Param(
                    type: null
                    byRef: false
                    variadic: false
                    var: Expr_Variable(
                        name: a
                    )
                    default: null
                )
            )
            uses: array(
            )
            returnType: null
            stmts: array(
                0: Stmt_Expression(
                    expr: Expr_Variable(
                        name: a
                    )
                )
            )
        )
    )
    1: Stmt_Expression(
        expr: Expr_Closure(
            static: false
            byRef: false
            params: array(
                0: Param(
                    type: null
                    byRef: false
                    variadic: false
                    var: Expr_Variable(
                        name: a
                    )
                    default: null
                )
            )
            uses: array(
                0: Expr_ClosureUse(
                    var: Expr_Variable(
                        name: b
                    )
                    byRef: false
                )
            )
            returnType: null
            stmts: array(
            )
        )
    )
    2: Stmt_Expression(
        expr: Expr_Closure(
            static: false
            byRef: false
            params: array(
            )
            uses: array(
                0: Expr_ClosureUse(
                    var: Expr_Variable(
                        name: a
                    )
                    byRef: false
                )
                1: Expr_ClosureUse(
                    var: Expr_Variable(
                        name: b
                    )
                    byRef: true
                )
            )
            returnType: null
            stmts: array(
            )
        )
    )
    3: Stmt_Expression(
        expr: Expr_Closure(
            static: false
            byRef: true
            params: array(
                0: Param(
                    type: null
                    byRef: false
                    variadic: false
                    var: Expr_Variable(
                        name: a
                    )
                    default: null
                )
            )
            uses: array(
            )
            returnType: null
            stmts: array(
            )
        )
    )
    4: Stmt_Expression(
        expr: Expr_Closure(
            static: true
            byRef: false
            params: array(
            )
            uses: array(
            )
            returnType: null
            stmts: array(
            )
        )
    )
    5: Stmt_Expression(
        expr: Expr_Closure(
            static: false
            byRef: false
            params: array(
                0: Param(
                    type: null
                    byRef: false
                    variadic: false
                    var: Expr_Variable(
                        name: a
                    )
                    default: null
                )
            )
            uses: array(
            )
            returnType: Identifier(
                name: array
            )
            stmts: array(
            )
        )
    )
    6: Stmt_Expression(
        expr: Expr_Closure(
            static: false
            byRef: false
            params: array(
            )
            uses: array(
                0: Expr_ClosureUse(
                    var: Expr_Variable(
                        name: a
                    )
                    byRef: false
                )
            )
            returnType: Name_FullyQualified(
                parts: array(
                    0: Foo
                    1: Bar
                )
            )
            stmts: array(
            )
        )
    )
)