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

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article