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