<?php
$obj = new MyClass();
$obj =& new MyClass();
$obj = &new MyClass();
new MyClass();

$objects = array('one' => new MyClass());
$object->myFunction(new MyClass());

throw new MyException($msg);

function foo() { return new MyClass(); }

$doodad = $x ? new Foo : new Bar;

function returnFn() {
    $fn = fn($x) => new MyClass();
}

function returnMatch() {
    $match = match($x) {
        0 => new MyClass()
    }
}

// Issue 3333.
$time2 ??= new \DateTime();
$time3 = $time1 ?? new \DateTime();
$time3 = $time1 ?? $time2 ?? new \DateTime();

function_call($time1 ?? new \DateTime());
$return = function_call($time1 ?? new \DateTime()); // False negative depending on interpretation of the sniff.

function returnViaTernary() {
    return ($y == false ) ? ($x === true ? new Foo : new Bar) : new FooBar;
}

function nonAssignmentTernary() {
    if (($x ? new Foo() : new Bar) instanceof FooBar) {
        // Do something.
    }
}

// Test for tokenizer issue #3789.
$a = $b !== null
    ? match ($c) {
        default => 5,
    }
    : new Foo;
