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: Expr_Ternary(
        cond: Expr_Variable(
            name: a
        )
        if: Expr_Variable(
            name: b
        )
        else: Expr_Variable(
            name: c
        )
    )
    1: Expr_Ternary(
        cond: Expr_Variable(
            name: a
        )
        if: null
        else: Expr_Variable(
            name: c
        )
    )
    2: Expr_Ternary(
        cond: Expr_Ternary(
            cond: Expr_Variable(
                name: a
            )
            if: Expr_Variable(
                name: b
            )
            else: Expr_Variable(
                name: c
            )
        )
        if: Expr_Variable(
            name: d
        )
        else: Expr_Variable(
            name: e
        )
    )
    3: 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: Expr_BinaryOp_Coalesce(
        left: Expr_Variable(
            name: a
        )
        right: Expr_Variable(
            name: b
        )
    )
    5: Expr_BinaryOp_Coalesce(
        left: Expr_Variable(
            name: a
        )
        right: Expr_BinaryOp_Coalesce(
            left: Expr_Variable(
                name: b
            )
            right: Expr_Variable(
                name: c
            )
        )
    )
    6: 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: Expr_BinaryOp_Coalesce(
        left: Expr_BinaryOp_BooleanAnd(
            left: Expr_Variable(
                name: a
            )
            right: Expr_Variable(
                name: b
            )
        )
        right: Expr_Variable(
            name: c
        )
    )
)
