Hello, On Mon, Nov 16, 2009 at 2:51 PM, Mathieu Suen <mathieu.s...@easyflirt.com>wrote:
> Etienne Kneuss a écrit : > > Hello, >> >> On Mon, Nov 16, 2009 at 2:10 PM, Mathieu Suen <mathieu.s...@easyflirt.com >> >wrote: >> >> Pierre Joye a écrit : >>> >>> On Mon, Nov 16, 2009 at 12:07 PM, Mathieu Suen >>> >>>> <mathieu.s...@easyflirt.com> wrote: >>>> >>>> • Pensez à l'environnement, n'imprimez cet e-mail qu'en cas de réelle >>>> >>>>> 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, >>>> >>>> That'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: >>> >>> >> Static 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). >> > > 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; } > > You simply cannot take $a = ..; as a variable declaration, otherwise $a = 2; if (..) { $a = 3; } echo $a; would output 2, which is wrong. In fact, you haven't really solved any of the two problems I described. > 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... > > It's not strange, PHP does not have specific scopes for control structures, and $_GET/$_POST can be considered as global variables. Of course it may not be like language X or Y, but it makes sense considering the paradigm behind variables in PHP. > > There is only an > >> 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 >> >> >> "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 >>> >>> >>> >> >> > > -- Mathieu Suen > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > > -- Etienne Kneuss http://www.colder.ch