Edit report at https://bugs.php.net/bug.php?id=65296&edit=1
ID: 65296 Comment by: llmll at gmx dot de Reported by: llmll at gmx dot de Summary: Support named parameters in constructors to inline initialize objects with new() Status: Open Type: Feature/Change Request Package: Scripting Engine problem Operating System: any PHP Version: Irrelevant Block user comment: N Private report: N New Comment: Just forgot to mention one more readability advantage: It would support "nested" initializations, like it is now possible with arrays full of strings $object = new Object({ Property: $aValue, Property2: $aValue2, Subobject: new Object({ ... }) }); Previous Comments: ------------------------------------------------------------------------ [2013-07-19 21:05:31] llmll at gmx dot de Of course its working, this is not about a bug but about sleekness and PHP-to-programmer support ;-) These assignment-lists are really lengthy and contain too many repetitions. Its more like requesting the ternary operator instead of the "old" if ... then ... else ... ------------------------------------------------------------------------ [2013-07-19 20:56:31] mail+php at requinix dot net So object literals. Getting to use names instead of strings. Meanwhile $object = new Object(); $object->StringMember = "content"; // etc doesn't work? ------------------------------------------------------------------------ [2013-07-19 20:52:32] llmll at gmx dot de I view as a strength of PHP, not having to declare all fields in a class. For example think of a class representing a HTML DOM element, like a link. It allow many fields, but most often you will only use some of them, like "href" or "class". In my opinion the best syntax to write is something like: $link = new Link(href: "target.html", class:"btn btn-info"); At the moment I use arrays: $link = (new Link)->assign("href" => "target.html", "class" => "btn btn-info"); But the fields in the strings are messy and un-recognizeable. Phpdoc is far too cluttering. Declaring every possible option is pointless for some classes, especially if they are highly dynamic, like derived from a database table. ------------------------------------------------------------------------ [2013-07-19 17:42:05] mail+php at requinix dot net Keeping in mind that your IDE could not possibly give you support for arbitrary properties on objects, they probably do support the @property phpdoc. Add that to __get/__set and you have /** * @property string $StringMember * @property int $Counter * @property mixed[] $ArrayMember */ class Foo { private $data; public function __construct(array $data) { $this->data = $data; } public function __get($name) { return $this->data[$name]; } public function __set($name, $value) { $this->data[$name] = $value; } } $foo = new Foo([ "StringMember" => "content", "Counter" => 42, "ArrayMember" => ["old" => "way"] ]); $foo-> // should autocomplete/suggest StringMember, Counter, and ArrayMember If you're talking about the {} syntax you used, https://wiki.php.net/rfc/objectarrayliterals ------------------------------------------------------------------------ [2013-07-19 10:25:40] llmll at gmx dot de typo in summary corrected ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=65296 -- Edit this bug report at https://bugs.php.net/bug.php?id=65296&edit=1