Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:66244 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 3266 invoked from network); 26 Feb 2013 15:10:25 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 26 Feb 2013 15:10:25 -0000 Authentication-Results: pb1.pair.com header.from=nikita.ppv@gmail.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=nikita.ppv@gmail.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.219.52 as permitted sender) X-PHP-List-Original-Sender: nikita.ppv@gmail.com X-Host-Fingerprint: 209.85.219.52 mail-oa0-f52.google.com Received: from [209.85.219.52] ([209.85.219.52:48768] helo=mail-oa0-f52.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 8B/B2-16132-160DC215 for ; Tue, 26 Feb 2013 10:10:25 -0500 Received: by mail-oa0-f52.google.com with SMTP id k14so5419321oag.11 for ; Tue, 26 Feb 2013 07:10:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:in-reply-to:references:date:message-id :subject:from:to:cc:content-type; bh=RO3C71cCojdcpoTAVIn3j4FIzNNys83LAdg+Cq/6jtk=; b=J0kcsC81DIju3JJ+lUW3AE0x0f85iabcFe/3C6OkuzPGMxnipQhMYCZKKCPTiSn7V+ LYaWjcu//DjtByP8Xf1fNJCZG19139grmdor9an27ZtoF5N36WYhjuoTcjpS2gRYgNzF qdnaz7scohk+rrCiMjGABtFlzbRR0s01TcV7bYO2iJAe+Kcn4j3d/LMoG+kjd7xSNDOw FOkeHql6T4pDHWftOQAqkiJWtRyIzNIG+l+wLOjeXVxqJV1Q0rNIZ75BQhQ6Eb8ChII7 le8gMRzA+uV+IlPMWoLmquo7tSOHLFLnXBtkXZUpkoyLucz/b9VUHtrPM7j4cCu+P62W NOWQ== MIME-Version: 1.0 X-Received: by 10.60.170.44 with SMTP id aj12mr1685804oec.42.1361891422819; Tue, 26 Feb 2013 07:10:22 -0800 (PST) Received: by 10.182.49.136 with HTTP; Tue, 26 Feb 2013 07:10:22 -0800 (PST) In-Reply-To: References: Date: Tue, 26 Feb 2013 16:10:22 +0100 Message-ID: To: Dmitry Stogov Cc: PHP internals Content-Type: multipart/alternative; boundary=bcaec54d475c7adf9904d6a20efb Subject: Re: [PHP-DEV] Allow (...)->foo() expressions not only for `new` From: nikita.ppv@gmail.com (Nikita Popov) --bcaec54d475c7adf9904d6a20efb Content-Type: text/plain; charset=ISO-8859-1 On Tue, Feb 26, 2013 at 7:41 AM, Dmitry Stogov wrote: > Hi Nikita, > > I like the idea. > But note, that it may cause some unexpected behaviour and bugs. > I didn't test the patch I just guess it on my previous experience > introducing similar features. > > - usage expression in write context (e.g. passing constant by reference) > > function foo(&$foo) {} > foo("abc"[0]); > > - destruction of temporary result > > ($a . $b)[4]; // if ($a.$b) is destroyed? > > - in some cases destruction of temporary result may cause destruction of > final result > > ((object)(array("a"=>"b")))->a = "c"; // temporary object may be destroyed > before assignment > > All these edge cases must be carefully analyzed. > I like the current patch, and in case the edge cases won't require many > hacks, I'm all for it. > > Thanks. Dmitry. > All these edge-cases are covered by not being allowed :) The old (new Foo)->bar syntax did not allow usage as a variable and I stayed with that. I.e. (expr)->xyz will still be an expression, not a variable and as such (expr)->xyz = 'foo' will be a syntax error. I stayed with the old behavior because I thought that it would just be a small bugfix-like change that way, whereas allowing usage in write-context could require larger changes (though I haven't tried, maybe its just as simple). But now that everybody seems to think that this is a major change that requires serious consideration, I guess I can have a look at the write-context use too :) Nikita --bcaec54d475c7adf9904d6a20efb--