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:

$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

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

Reply via email to