First, a comment from haskell-land:
http://www.haskell.org/pipermail/haskell-cafe/2008-June/044533.html
http://www.haskell.org/pipermail/haskell-cafe/2008-June/thread.html#44379
On Wednesday 18 June 2008, Christian Seiler wrote:
> Frankly, I don't really see a problem with using references. It fits
> into what's already there in PHP and it assures that closures have the
> necessary properties to make them useful.
References are necessary, but an easy way to obtain copies of variables from
the lexical context would be really nice.
I have been introduced to functional programming through Haskell, where values
are immutable, so a reference is basically the same as a copy. I like this
behaviour because it makes closures distinctly non-dangerous by default.
Getting the same behaviour out of PHP should not be as difficult as this:
for ($i = 0; $i < 10; $i++) {
$loopIndex = $i;
$arr[$i] = function () { lexical $loopIndex; return $loopIndex; };
unset ($loopIndex);
}
This is not only quite a hassle (making beer much cheaper than water, so to
speak), I also believe it to be error-prone. A lot of programmers are going
to forget that unset().
I would prefer something like this:
for ($i = 0; $i < 10; $i++) {
$arr[$i] = function () { lexical_copy $i; return $i; };
}
An alternative would be to let lexical behavie like function parameters:
- copies by default
lexical $x;
- objects referenced by default
lexical $obj;
- other references optional
lexical &$y;
Of course this would make lexical behave quite differently from global in this
regard, decreasing consistency, but f*ck global, nobody should use that
anyway. Better to have nice lexical closures.
Gesundheit
Wag
--
Be careful about reading health books. You may die of a misprint.
- Mark Twain
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php