<?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'; };