<?php $foo = new Foo(); $foo = new Foo; $foo = new Foo\Bar; $foo = new Foo\Bar(); $foo = new Foo /* comment */ (); $foo = new $foo(); $foo = new $foo; $foo = new $$foo(); $foo = new $$foo; $foo = new self(); $foo = new self; $foo = new static(); $foo = new static; foo(new class {}); echo (new Foo())->bar(); echo (new Foo)->bar(); echo (new Foo((new Bar)->getBaz()))->bar(); $foo = (new Foo)::$bar; echo (new Foo((new Bar//comment )->getBaz(new Baz /* comment */)))->bar(); $foo = new $bar['a'](); $foo = new $bar['a']['b'](); $foo = new $bar['a'][$baz['a']['b']]['b'](); $foo = new $bar['a'] [$baz['a']/* comment */ ['b']]['b']; $a = new self::$transport[$cap_string]; $renderer = new $this->inline_diff_renderer; $a = new ${$varHoldingClassName}; $class = new $obj?->classname(); $class = new $obj?->classname; $class = new ${$obj?->classname}; // Issue 3456. // Anon classes should be skipped, even when there is an attribute between the new and the class keywords. $anonWithAttribute = new #[SomeAttribute('summary')] class { public const SOME_STUFF = 'foo'; };