Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:92466 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 75581 invoked from network); 19 Apr 2016 14:38:48 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 19 Apr 2016 14:38:48 -0000 Authentication-Results: pb1.pair.com header.from=rowan.collins@gmail.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=rowan.collins@gmail.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 74.125.82.43 as permitted sender) X-PHP-List-Original-Sender: rowan.collins@gmail.com X-Host-Fingerprint: 74.125.82.43 mail-wm0-f43.google.com Received: from [74.125.82.43] ([74.125.82.43:35043] helo=mail-wm0-f43.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id A0/A5-43496-6F246175 for ; Tue, 19 Apr 2016 10:38:47 -0400 Received: by mail-wm0-f43.google.com with SMTP id e201so16489766wme.0 for ; Tue, 19 Apr 2016 07:38:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-transfer-encoding; bh=N37R1weHsuV9oS082B8JEi1FeYddOrW908gUYAMIvUI=; b=goTSehWyJhR4BmWW7GMD1NU/lpzZEgKOalOTpLax4BFzxEnqa9mmRrdvj86Oj1qFX5 Y8zChLJfCQG3KN1HiM4mdbHipb1jLtPpvqq0jTcOiRIU+H8K+FWfEVG52Dc7hwAyGZgS 9VDY2aNJ5NfdryY9MYbE4kQzkqj+apj6uGKXuLCskFzU1QmEGNOFNBiMiYzbptAG65Bv JbD8UR3Bc5QN3dQSAqFPFBdE7t0PZsqO88h0D9l9m0qdHzQxNyU3vXoDr8aTU30osZ1O KLDV76O4a1lSZrnbyZ0Dzg9HnzRtWI5gRcksYWx/1TQ9QkvKFAf7AXiEBn/G2In1/uRC pNfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding; bh=N37R1weHsuV9oS082B8JEi1FeYddOrW908gUYAMIvUI=; b=amgTpjkBURwvvDnPtHaARXA6CHkSgKMocLvhfT/fovz9FuHhGgN9/BJYcB5fPNAj3f /N7zjEUJudpgKd77zfqYBf84SF/t4Qrt1ihHz85YKObIj6vJvYsSO24OTIzDHGnyfG39 oMNAkkBuVItcgDXBRWpD8sS2pZmAOe6LQgEJxgFQ+wDO99jopjIPH9K6xAxCNAo3gVmZ VX2MukERr81FNd1aqYIxVih25Ex9QeJPZHLVrzbVuXKcnlJ/TCy3jUJrq5lgFmI2vG06 uX/40xq2PLxk4DmIbpHIL0qDCannHdSLCktyMaA4ivnw3V3z3KZFg5vaMCryk501QvJE 9HMg== X-Gm-Message-State: AOPr4FWOQiMjdowEhO/LlziC576nvpWP8Bot/PhqPtIj/cXLBcjcuLD/T3XoCNxyR+rc0A== X-Received: by 10.194.77.42 with SMTP id p10mr3512537wjw.111.1461076724174; Tue, 19 Apr 2016 07:38:44 -0700 (PDT) Received: from [192.168.0.77] ([93.188.182.58]) by smtp.googlemail.com with ESMTPSA id c125sm4690094wme.6.2016.04.19.07.38.43 for (version=TLSv1/SSLv3 cipher=OTHER); Tue, 19 Apr 2016 07:38:43 -0700 (PDT) To: internals@lists.php.net References: Message-ID: <57164297.2090208@gmail.com> Date: Tue, 19 Apr 2016 15:37:11 +0100 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.7.2 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [PHP-DEV] RFC: Anonymous Class Lexical Scope From: rowan.collins@gmail.com (Rowan Collins) Nikita Popov wrote on 19/04/2016 15:18: > I'd like to suggest an alternative syntax: > > $foo = 42; > return new class { > private $bar = $foo; > public function getBar() { return $this->bar; } > } > > That is, allow properties inside the anonymous class to be initialized > based on values from the surrounding scope. The problem with this is that it violates PHP's normal scoping rules, because the variable is crossing scopes "uninvited". It makes it more explicit where the variable is going *to*, but hides where it is coming *from*. Perhaps a Trait-like syntax might work? $foo = 42; return new class { use $foo as private $bar; public function getBar() { return $this->bar; } } This makes it clear both that $foo is being imported from somewhere, and that it is being saved to a particular private member. Regards, -- Rowan Collins [IMSoP]