Hello, I tried to register in RFC Wiki but I get the error "That wasn't the answer we were expecting", but in all cases, I'm David Rodrigues, and I like to suggest a method to initialize objects by using an object initializar. Currently it is supported on C# -- read here <https://msdn.microsoft.com/en-us/library/bb397680.aspx?f=255&MSPPError=-2147217396> ..
Basically, it'll allow you create a new instance of some object and set your properties directly. *Class example:* class Example { public $a; protected $b; private $c; private $d; public function __construct($d) { $this->d = $d; } } *Currently:* *// Public scope:* $example = new Example($d); $example->a = $a; $example->b = $b; // error, protected $example->c = $c; // error, private return $example; *// Protected scope:* $example = new Example($d); $example->a = $a; $example->b = $b; $example->c = $c; // error, private return $example; *// Private scope:* $example = new Example($d); $example->a = $a; $example->b = $b; $example->c = $c; return $example; *Using object initializer:* *// Public scope:* return new Example($d) { $a => $a, $b => $b, // error, protected $c => $c, // error, private }; *// Protected scope:* return new Example($d) { $a => $a, $b => $b, $c => $c, // error, private }; *// Private scope:* return new Example($d) { $a => $a, $b => $b, $c => $c, }; *Variation:* *// Constructor without required arguments:* return new User { $name => "John", $surname => "Doe", }; *// Object initializer as array:* return new User [ $name => "John", $surname => "Doe", ]; *Others RFCs:* We have two RFCs about that, one was declined (Automatic Property Initialization <https://wiki.php.net/rfc/automatic_property_initialization>), other in draft (Constructor Argument Promotion <https://wiki.php.net/rfc/constructor-promotion>). This second one, I think that not is too clear what I'm trying to do, just by set visibility keywords before argument (like __construct(private $name)). And too, it'll affect all methods parsing, by checking if it is the __construct method, and if was setted visibility keywords. In my suggestion, that is similar to C#, it'll be done after the class initialization, probability less costly to parser. Probably it'll affect this: new_expr: T_NEW class_name_reference ctor_arguments object_initializer { $$ = zend_ast_create(ZEND_AST_NEW, $2, $3); } | T_NEW anonymous_class { $$ = $2; } ; object_initializer: /* empty */ | '{' object_initializer_list '}' -- David S. Rodrigues