Ternary operator
-----
<?php

// ternary
$a ? $b : $c;
$a ?: $c;

// precedence
$a ? $b : $c ? $d : $e;
$a ? $b : ($c ? $d : $e);

// null coalesce
$a ?? $b;
$a ?? $b ?? $c;
$a ?? $b ? $c : $d;
$a && $b ?? $c;
-----
array(
    0: Stmt_Expression(
        expr: Expr_Ternary(
            cond: Expr_Variable(
                name: a
                comments: array(
                    0: // ternary
                )
            )
            if: Expr_Variable(
                name: b
            )
            else: Expr_Variable(
                name: c
            )
            comments: array(
                0: // ternary
            )
        )
        comments: array(
            0: // ternary
        )
    )
    1: Stmt_Expression(
        expr: Expr_Ternary(
            cond: Expr_Variable(
                name: a
            )
            if: null
            else: Expr_Variable(
                name: c
            )
        )
    )
    2: Stmt_Expression(
        expr: Expr_Ternary(
            cond: Expr_Ternary(
                cond: Expr_Variable(
                    name: a
                    comments: array(
                        0: // precedence
                    )
                )
                if: Expr_Variable(
                    name: b
                )
                else: Expr_Variable(
                    name: c
                )
                comments: array(
                    0: // precedence
                )
            )
            if: Expr_Variable(
                name: d
            )
            else: Expr_Variable(
                name: e
            )
            comments: array(
                0: // precedence
            )
        )
        comments: array(
            0: // precedence
        )
    )
    3: Stmt_Expression(
        expr: Expr_Ternary(
            cond: Expr_Variable(
                name: a
            )
            if: Expr_Variable(
                name: b
            )
            else: Expr_Ternary(
                cond: Expr_Variable(
                    name: c
                )
                if: Expr_Variable(
                    name: d
                )
                else: Expr_Variable(
                    name: e
                )
            )
        )
    )
    4: Stmt_Expression(
        expr: Expr_BinaryOp_Coalesce(
            left: Expr_Variable(
                name: a
                comments: array(
                    0: // null coalesce
                )
            )
            right: Expr_Variable(
                name: b
            )
            comments: array(
                0: // null coalesce
            )
        )
        comments: array(
            0: // null coalesce
        )
    )
    5: Stmt_Expression(
        expr: Expr_BinaryOp_Coalesce(
            left: Expr_Variable(
                name: a
            )
            right: Expr_BinaryOp_Coalesce(
                left: Expr_Variable(
                    name: b
                )
                right: Expr_Variable(
                    name: c
                )
            )
        )
    )
    6: Stmt_Expression(
        expr: Expr_Ternary(
            cond: Expr_BinaryOp_Coalesce(
                left: Expr_Variable(
                    name: a
                )
                right: Expr_Variable(
                    name: b
                )
            )
            if: Expr_Variable(
                name: c
            )
            else: Expr_Variable(
                name: d
            )
        )
    )
    7: Stmt_Expression(
        expr: Expr_BinaryOp_Coalesce(
            left: Expr_BinaryOp_BooleanAnd(
                left: Expr_Variable(
                    name: a
                )
                right: Expr_Variable(
                    name: b
                )
            )
            right: Expr_Variable(
                name: c
            )
        )
    )
)