Edit report at https://bugs.php.net/bug.php?id=65296&edit=1
ID: 65296 Comment by: mail+php at requinix dot net 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: 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 Previous Comments: ------------------------------------------------------------------------ [2013-07-19 10:25:40] llmll at gmx dot de typo in summary corrected ------------------------------------------------------------------------ [2013-07-19 10:20:30] llmll at gmx dot de Description: ------------ As PHP does not support *real* overloading by different parameter sets, arrays are being used for dynamic parameters as well as for object initialization in constructors. However arrays use strings as keys, which kills syntax highlighting and refactoring capabilities in IDEs. PHP engine should provide a way to initialize an object inline by dynamically providing parameters to new(). Test script: --------------- $object = new Object({ StringMember: "content", Counter: 42, ArrayMember: ["old" => "way"] }); Expected result: ---------------- $object->StringMember = "content"; $object->Counter = 42; $object->ArrayMember = array("old" => "way"); $object->MoreProperties = "stay untouched"; Actual result: -------------- not possible. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=65296&edit=1