Hello internals,

I would like to propose a syntax change for PHP 8.4 that allows to
immediately access instantiated objects without wrapping the expression
into parentheses.


This was requested and discussed several times, see:

- https://externals.io/message/66197

- https://bugs.php.net/bug.php?id=70549

- https://externals.io/message/101811

- https://externals.io/message/113953


Here's what you will be able to write after this change:

```php

class MyClass

{

    const CONSTANT = 'constant';

    public static $staticProperty = 'staticProperty';

    public static function staticMethod(): string { return 'staticMethod'; }

    public $property = 'property';

    public function method(): string { return 'method'; }

    public function __invoke(): string { return '__invoke'; }

}


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"

);

```


For more details see the RFC:
https://wiki.php.net/rfc/new_without_parentheses

Implementation: https://github.com/php/php-src/pull/13029


--

Best regards, Valentin

Reply via email to