Re: bug when using foreach with references?
| From: | Mathieu Suen | Date: | Mon, 16 Nov 2009 14:48:45 +0000 |
| Subject: | Re: bug when using foreach with references? | ||
| References: | 1 2 3 4 5 6 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-46060@lists.php.net to get a copy of this message | ||
Maybe you find it useless. That is just a discussion. I don't expect PHP to change thought it should IMHO, especially now that you are introducing closure. :)
For those who complain about the foreach behavior (including me) that's typically a scope issue. Doing an automatic unset isn't the right way of solving it.
Somehow this foreach exemple show why you don't want dynamic scoping.
Victor Bolshov a écrit :
That's a completely useless discussion, isn't it? Whoever is "right" with his opinion regarding scoping - nobody will (and nobody would like to) change PHP's scoping for those reasons as it would break too much existing code. 2009/11/16 Mathieu Suen <mathieu.suen@easyflirt.com>:-- Mathieu SuenEtienne Kneuss a écrit :Hello, On Mon, Nov 16, 2009 at 2:10 PM, Mathieu Suen <mathieu.suen@easyflirt.com>wrote:I am pretty sure you can have static scoping without declaration statement. Or you can consider "$a = 2" as a declaration statement. Which imply that if (..) { $a = 2; } else { $a = 3; } Produce 2 bindings of $a or can be a free if you 'declare' it outside . As: $a = null; if (..) { $a = 2; } else { $a = 3; } What's strange is that part of the language is statically scoped will the other part is dynamic. See function vs. if, loop statement. Even worst if you think of the $_GET variable which should have a special scope... There is only anPierre Joye a écrit : On Mon, Nov 16, 2009 at 12:07 PM, Mathieu SuenStatic scoping is closely related to variable declaration. In PHP, there is no such thing as a variable declaration statement (apart from function arguments or class members, which are correcly scoped).<mathieu.suen@easyflirt.com> wrote: • Pensez à l'environnement, n'imprimez cet e-mail qu'en cas de réelleThat's not a question, look at what lisp dose and scheme. Look at the lambda calculus etc. The variable inside the foreach should not be captured outside. Like function argument. And again and again you are doing the same mistake:nécessitéDiscussing endlessly an issue only because you do not understand it is also an environmental problem, please consider to read the manual and stop to use every single channel to ask the same questions again and again. Salutations,assign statement, that may introduce a new variable, or not. Without such a declaration statement, static scoping doesn't make much sense. For example: if (..) { $a = 2; } else { $a = 3; } echo $a; would either fail or require some branch analysis at compile time to work. which we can't really afford. Or: $a = 2; if (...) { $a = 3; } There is no way of stating whether $a = 3; should be for a $a that is unrelated to the outer $a. In other words, the kind of scoping you want will most likely never be implemented in PHP. Best-- Mathieu Suen -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php"Dynamic scoping is primarily interesting as a historical mistake: it was in the earliest versions of Lisp, and persisted for well over a decade. Scheme was created as an experimental language in part to experiment with static scope. This was such a good idea that eventually, even Common Lisp adopted static scope. Most modern languages are statically scoped, but sometimes they make the mistake of recapitulating this phylogeny. So-called “scripting” languages, in particular, often make the mistake of implementing dynamic scope (or the lesser mistake of just failing to create closures), and must go through multiple iterations before they eventually implement static scope correctly." - Shriram Krishnamurthi, "Programming Languages: Application and Interpretation" section 6.5: -- Mathieu Suen -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php