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

Reply via email to