Again, back to my question of why not use: MyComponent::factory($bar, $option);
Depending on what ::factory does, it could then pass $option(s) to the constructor or method getting your instance needed. On Nov 30, 2011, at 2:56 PM, Dmitri Snytkine wrote: > Just for such case I use factory methods in a class, so I can do this: > MyComponent::factory($bar)->configure($option) > > A clean one-liner. > > The static factory method just returns the object of class, your standard > factory pattern. > Plus you may gain extra flexibility from using factory instead of directly > calling new() > > Dmitri Snytkine > Web Developer > Ultra Logistics, Inc. > Phone: (888) 220-4640 x 2097 > Fax: (888) 795-6642 > E-Mail: dsnytk...@ultralogistics.com > Web: www.ultralogistics.com > > "A Top 100 Logistics I.T. Provider in 2011" > > > -----Original Message----- > From: Ralph Schindler [mailto:ra...@ralphschindler.com] > Sent: Wednesday, November 30, 2011 2:51 PM > To: Nikita Popov > Cc: internals > Subject: Re: [PHP-DEV] 5.4's New De-referencing plus assignment > > Ironically, quite the opposite is something I find useful: > > ($foo = new MyComponent($bar))->configure($options); > > In a single line, instantiate and configure (via an API call) an object. > The return of configure() is not important to me, but the brevity of > that workflow, and the result of "new" is. > > -ralph > > > On 11/30/11 1:13 PM, Nikita Popov wrote: >> To me the main problem here is that $bar = ($foo = new Foo)->bar() >> simply doesn't make much sense. It is equivalent to: >> $foo = new Foo; >> $bar = $foo->bar(); >> Which is much cleaner and easier to understand. >> >> The plain (new Foo)->bar() syntax *is* useful for cases like (new >> ReflectionClass($class))->implementsInterface('Foo'), where you need >> only one single bit of information from a class. >> >> Nikita >> >> On Wed, Nov 30, 2011 at 8:02 PM, Ralph Schindler >> <ra...@ralphschindler.com> wrote: >>> Nikita, >>> >>> You're completely right about the expanded expressions, but I'm not sure > its >>> an edge-case per-se. >>> >>> The problem with the current syntax is that the resultant of the 'new' >>> operation is lost UNLESS your chained method returns $this - which IMO > makes >>> it about as 1/2 as useful as it really could be. >>> >>> In the case of "new" though, the resultant is always an object, it seems >>> like it should be permissible to change the parser to allow for variable >>> assignment of the target object. >>> >>> I think for people just trying out this new behavior (by seeing it in the >>> release notes as (new Foo)->bar()), the next logical thing is to try this >>> syntax: >>> >>> ($foo = new Foo)->bar() >>> >>> // OR in bison >>> '(' variable '=' new_expr ')' >>> >>> I did it, and I see other people doing it too. So I guess the question > is... >>> "how edge case is this edge case?" :) > > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php