> I think allowing globals/lexicals to be passed by value doesn't make
> much sense, you could just use a regular parameter for that.
No, that is highly inconvenient when you're doing actual functional
programming with higher order functions and everything.
$i = 1;
$incrementor = lambda ($x) lexical ($i) { return $x + $i; }
...
$arr = array_map($incrementor,$arr);
How would you do this by passing in $i as a parameter without a closure?
And if you use references, this may break if $i is a loop variable (the
canonical example of closure-WTF).
> And that would bring another inconsistency to PHP, and would mean that PHP
> is discouraging the use of $_GLOBALS, that was created to discourage to use
> of 'global $var'.
All languages accumulate cruft as they evolve.
global behaves in a manner that is inconsistent with pretty much everything
else in PHP (referencing by default), and variables can be declared global in
the middle of a function, which makes no sense at all. It would be a mistake
to be consistent with something so badly broken.
By "long term replacement for global" I meant to imply that it would actually
be a good idea to remove the old global keyword from the language. Deprecate
it in PHP 6 and kill it in PHP 7, or maybe in PHP 7 and 8. Cruft gone.
$GLOBALS should be kept around because it is not a reference and allows
acutally unset()ing a global variable, for example.
Gesundheit
Wag
--
Da saß ich nun, führte Krieg und hatte Geburtstag.
- Joschka Fischer
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php