Class declaration
-----
<?php

class A extends B implements C, D {
    const A = 'B', C = 'D';

    public $a = 'b', $c = 'd';
    protected $e;
    private $f;

    public function a() {}
    public static function b($a) {}
    public final function c() : B {}
    protected function d() {}
    private function e() {}
}
-----
array(
    0: Stmt_Class(
        flags: 0
        name: Identifier(
            name: A
        )
        extends: Name(
            parts: array(
                0: B
            )
        )
        implements: array(
            0: Name(
                parts: array(
                    0: C
                )
            )
            1: Name(
                parts: array(
                    0: D
                )
            )
        )
        stmts: array(
            0: Stmt_ClassConst(
                flags: 0
                consts: array(
                    0: Const(
                        name: Identifier(
                            name: A
                        )
                        value: Scalar_String(
                            value: B
                        )
                    )
                    1: Const(
                        name: Identifier(
                            name: C
                        )
                        value: Scalar_String(
                            value: D
                        )
                    )
                )
            )
            1: Stmt_Property(
                flags: MODIFIER_PUBLIC (1)
                type: null
                props: array(
                    0: Stmt_PropertyProperty(
                        name: VarLikeIdentifier(
                            name: a
                        )
                        default: Scalar_String(
                            value: b
                        )
                    )
                    1: Stmt_PropertyProperty(
                        name: VarLikeIdentifier(
                            name: c
                        )
                        default: Scalar_String(
                            value: d
                        )
                    )
                )
            )
            2: Stmt_Property(
                flags: MODIFIER_PROTECTED (2)
                type: null
                props: array(
                    0: Stmt_PropertyProperty(
                        name: VarLikeIdentifier(
                            name: e
                        )
                        default: null
                    )
                )
            )
            3: Stmt_Property(
                flags: MODIFIER_PRIVATE (4)
                type: null
                props: array(
                    0: Stmt_PropertyProperty(
                        name: VarLikeIdentifier(
                            name: f
                        )
                        default: null
                    )
                )
            )
            4: Stmt_ClassMethod(
                flags: MODIFIER_PUBLIC (1)
                byRef: false
                name: Identifier(
                    name: a
                )
                params: array(
                )
                returnType: null
                stmts: array(
                )
            )
            5: Stmt_ClassMethod(
                flags: MODIFIER_PUBLIC | MODIFIER_STATIC (9)
                byRef: false
                name: Identifier(
                    name: b
                )
                params: array(
                    0: Param(
                        type: null
                        byRef: false
                        variadic: false
                        var: Expr_Variable(
                            name: a
                        )
                        default: null
                    )
                )
                returnType: null
                stmts: array(
                )
            )
            6: Stmt_ClassMethod(
                flags: MODIFIER_PUBLIC | MODIFIER_FINAL (33)
                byRef: false
                name: Identifier(
                    name: c
                )
                params: array(
                )
                returnType: Name(
                    parts: array(
                        0: B
                    )
                )
                stmts: array(
                )
            )
            7: Stmt_ClassMethod(
                flags: MODIFIER_PROTECTED (2)
                byRef: false
                name: Identifier(
                    name: d
                )
                params: array(
                )
                returnType: null
                stmts: array(
                )
            )
            8: Stmt_ClassMethod(
                flags: MODIFIER_PRIVATE (4)
                byRef: false
                name: Identifier(
                    name: e
                )
                params: array(
                )
                returnType: null
                stmts: array(
                )
            )
        )
    )
)