News

Is class instantiation without extra parenthesis coming to PHP 8.4?

Published
Is class instantiation without extra parenthesis coming to PHP 8.4? image

The RFC for omitting parentheses around the new expression is likely coming to PHP 8.4. This RFC is currently in the voting phase, with 21 "yes" and 3 "no" votes. Voting ends May 24th, so there's still a chance the 2/3 vote could fail, but optimistically, it looks like it's heading in the right direction.

Since member access during instantiation was introduced, you must wrap the new MyClass() call in parentheses, or you'll get a parse error. The proposed syntax would allow you to access constants, properties, and methods without the extra parentheses:

class Request implements Psr\Http\Message\RequestInterface
{
// ...
}
 
// Valid
$request = (new Request())->withMethod('GET')->withUri('/hello-world');
 
// PHP Parse error: syntax error, unexpected token "->"
$request = new Request()->withMethod('GET')->withUri('/hello-world');

Here are some common examples you'll probably use with this feature (the RFC has more examples):

var_dump(
new MyClass()::CONSTANT, // string(8) "constant"
new MyClass()::$staticProperty, // string(14) "staticProperty"
new MyClass()::staticMethod(), // string(12) "staticMethod"
new MyClass()->property, // string(8) "property"
new MyClass()->method(), // string(6) "method"
new MyClass()(), // string(8) "__invoke"
);

You can read all the details about this proposed change in the RFC. This feature likely drops in PHP 8.4. The implementation looks to be code-complete (not approved and merged yet) and can be found on GitHub.

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Filed in

Sponsored

acquaintsoft logo
Acquaint Softtech

Hire Laravel developers with AI expertise at $20/hr. Get started in 48 hours.

Visit Acquaint Softtech

The latest

View all →
Laravel Chores: Resumable Data Operations and Cleanups image

Laravel Chores: Resumable Data Operations and Cleanups

Read article
NativePHP v4: Build Native iOS and Android UI in Blade image

NativePHP v4: Build Native iOS and Android UI in Blade

Read article
Laravel Lock: Distributed Locks for Models and Routes image

Laravel Lock: Distributed Locks for Models and Routes

Read article
Laravel Image Responses: Serve Resized Images From Routes image

Laravel Image Responses: Serve Resized Images From Routes

Read article
Pause All Laravel Queues During a Deploy image

Pause All Laravel Queues During a Deploy

Read article
Laravel Terminal UI for the artisan dev Command image

Laravel Terminal UI for the artisan dev Command

Read article