On Mon, Apr 8, 2024, at 6:08 AM, Valentin Udaltsov wrote:
> 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

I always thought there was some technical parser reason why this wasn't 
possible.  Maybe that was true in 5.x but isn't anymore?

I cannot speak to the implementation, but I'm all for the change itself.

--Larry Garfield

Reply via email to