Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:56696 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 20807 invoked from network); 30 Nov 2011 21:36:38 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 30 Nov 2011 21:36:38 -0000 Authentication-Results: pb1.pair.com smtp.mail=devis@oracolo.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=devis@oracolo.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain oracolo.com designates 209.85.215.42 as permitted sender) X-PHP-List-Original-Sender: devis@oracolo.com X-Host-Fingerprint: 209.85.215.42 mail-lpp01m010-f42.google.com Received: from [209.85.215.42] ([209.85.215.42:33703] helo=mail-lpp01m010-f42.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 38/D4-30469-5E1A6DE4 for ; Wed, 30 Nov 2011 16:36:38 -0500 Received: by lami14 with SMTP id i14so451581lam.29 for ; Wed, 30 Nov 2011 13:36:33 -0800 (PST) Received: by 10.152.110.102 with SMTP id hz6mr2754458lab.11.1322688993429; Wed, 30 Nov 2011 13:36:33 -0800 (PST) MIME-Version: 1.0 Sender: devis@oracolo.com Received: by 10.152.21.40 with HTTP; Wed, 30 Nov 2011 13:35:52 -0800 (PST) In-Reply-To: References: <4ED6713D.2050009@ralphschindler.com> <4ED67DCB.5090102@ralphschindler.com> <4ED68940.3050502@alliantinternet.com> <00ea01ccaf9a$2ab7e160$8027a420$@alliantinternet.com> Date: Wed, 30 Nov 2011 21:35:52 +0000 X-Google-Sender-Auth: wJHcWJgTmPNaRetFGlqWFSXqnUA Message-ID: To: Will Fitch Cc: Dmitri Snytkine , Ralph Schindler , Nikita Popov , internals Content-Type: multipart/alternative; boundary=bcaec54eee6a9a072904b2fa87a6 Subject: Re: [PHP-DEV] 5.4's New De-referencing plus assignment From: devis@lucato.it --bcaec54eee6a9a072904b2fa87a6 Content-Type: text/plain; charset=UTF-8 You surely could add a factory to every class in your project, perhaps with a trait, but you wouldn't have it for core and third party classes. On 30 November 2011 19:59, Will Fitch wrote: > 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: dsnytkine@ultralogistics.com > > Web: www.ultralogistics.com > > > > "A Top 100 Logistics I.T. Provider in 2011" > > > > > > -----Original Message----- > > From: Ralph Schindler [mailto:ralph@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 > >> 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 > > --bcaec54eee6a9a072904b2fa87a6--