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

Reply via email to