Hello Larry,

Sunday, January 4, 2009, 10:05:25 PM, you wrote:

> On Sunday 04 January 2009 10:45:30 am Sebastian Bergmann wrote:
>> Marcus Boerger schrieb:
>> > $f = function() { use $x; }
>>
>>  +1 for consistency.

> +1 for consistency as well, which is why, as I recall, that syntax was 
> rejected.

> $f = function() {
>   global $x;  // By reference.
>   use $y;  // By value or by reference?  
> }

> If $y is by reference by default there was no obvious way to make it by value.
> If by value, then it is inconsistent with the behavior of global, which is by
> reference.  It was determined that we definitely needed to be able to allow
> both by value and by reference.

> $f = function() use ($y, &$z) {
>   global $x;  // By reference
> }

> $y is clearly by value, and $z clearly by reference, as that parallels the way
> function parameters work right next to the lexical variables.

> The way to increase consistency would be to allow the opposite:

And then what do we do with static? And besides how is:
...use (&$ref)
different from:
...use &$ref;

But maybe you want consistency by breaking nearly every PHP script ever
written? Or did I miss some Months and it is early April rather than early
January?

> $f = function($a, &$b) use ($y, &$z) global ($x, &$w) {

> }

> $x is pulled from global scope by value.
> $w is pulled from global scope by reference.
> $y is pulled from lexical scope by value.
> $z is pulled from lexical scope by reference.
> $a is pulled from calling scope by value.
> $b is pulled from calling scope by reference.

> Right now we have everything there except the global param list.  I don't know
> if we want to bother adding that in 5.3 at this point (as it would be a 
> syntax/feature change), but IMO that is the best way to improve consistency
> while getting a little extra functionality (global by value) at the same time.

> -- 
> Larry Garfield
> la...@garfieldtech.com




Best regards,
 Marcus


-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to