Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:53532 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 56538 invoked from network); 23 Jun 2011 15:03:14 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 23 Jun 2011 15:03:14 -0000 Authentication-Results: pb1.pair.com header.from=neufeind@php.net; sender-id=unknown Authentication-Results: pb1.pair.com smtp.mail=neufeind@php.net; spf=unknown; sender-id=unknown Received-SPF: unknown (pb1.pair.com: domain php.net does not designate 91.184.32.3 as permitted sender) X-PHP-List-Original-Sender: neufeind@php.net X-Host-Fingerprint: 91.184.32.3 mail.speedpartner.de Linux 2.5 (sometimes 2.4) (4) Received: from [91.184.32.3] ([91.184.32.3:37000] helo=mail.speedpartner.de) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id EE/60-53684-2B5530E4 for ; Thu, 23 Jun 2011 11:03:14 -0400 Received: from localhost (localhost.localdomain [127.0.0.1]) by mail.speedpartner.de (Postfix) with ESMTP id 7B6B3B3CA6 for ; Thu, 23 Jun 2011 17:03:11 +0200 (CEST) Received: from mail.speedpartner.de ([127.0.0.1]) by localhost (mail.speedpartner.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id pNc5jodWPtkl for ; Thu, 23 Jun 2011 17:03:11 +0200 (CEST) Received: from collab.speedpartner.de (collab.speedpartner.de [91.184.32.10]) by mail.speedpartner.de (Postfix) with ESMTP id 63854B3ABB for ; Thu, 23 Jun 2011 17:03:11 +0200 (CEST) Received: from localhost (localhost.localdomain [127.0.0.1]) by collab.speedpartner.de (Postfix) with ESMTP id 5C675FF0003 for ; Thu, 23 Jun 2011 17:03:09 +0200 (CEST) X-Virus-Scanned: amavisd-new at collab.speedpartner.de Received: from collab.speedpartner.de ([127.0.0.1]) by localhost (collab.speedpartner.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id diOqLswLXVkQ; Thu, 23 Jun 2011 17:03:08 +0200 (CEST) Received: from sn-dell.local.neufeind.net (ip-62-143-29-72.unitymediagroup.de [62.143.29.72]) by collab.speedpartner.de (Postfix) with ESMTPSA id BD037FF0002; Thu, 23 Jun 2011 17:03:08 +0200 (CEST) Message-ID: <4E0355AE.4080305@php.net> Date: Thu, 23 Jun 2011 17:03:10 +0200 User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.17) Gecko/20110428 Fedora/3.1.10-1.fc15 Thunderbird/3.1.10 MIME-Version: 1.0 To: internals@lists.php.net Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Variable scopes for language constructs (foreach, ...) From: neufeind@php.net (Stefan Neufeind) Hi, I've lately discussed with a colleague which scopes of variables exist for PHP or would probably make sense. In general I think the general idea of having variables available all throughout a function is okay as this allows things like foreach($vals as $v) { // ... $found = true; } if($found) { // ... } (setting $found inside the loop while still being able to access it outside) But the interesting part is that $v is also still available outside the loop (last value). While most people would say this is not a big problem, it can become problematic when using references. foreach($vals as &$temp) { // ... } // ... $temp = 5; (when you don't think about the reference anymore but want some temp-variable) If this has been "throughly discussed" before, please excuse. But if not maybe somebody could share his oppinion on the following proposal. What if we (for example with PHP 5.4 or if not possible maybe with the next one) change the behaviour so that * variables used for key/value in foreach (probably other places?) would be limited to that loop-scope and maybe * variable $found in the first example would need to be initialised before the loop. Otherwise it would be a new variable inside the scope of foreach that would be gone afterwards and/or maybe * allowing to explicitly limit variable-scopes inside blocks, for example by allowing var $found somewhere inside a function to allow things like if($a) { var $temp; $temp = 5; } // and $temp would be gone here; was limited to the scope in which it was defined by var Hope this is not too much of a non-sense idea to you :-) Kind regards, Stefan