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.s...@easyflirt.com>: > 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; } > > 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 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 > > -- Regards, Victor -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php