Re: [PATCH] Allow use($var..) statement ubiquitously

From: Date: Fri, 18 Jul 2008 06:10:38 +0000
Subject: Re: [PATCH] Allow use($var..) statement ubiquitously
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-39074@lists.php.net to get a copy of this message
On Thursday 17 July 2008 6:23:31 pm Moriyoshi Koizumi wrote: > Hi, > > Attached are the patches that allow the "use" statement that was > introduced with closures to appear within every function statement > except method definitions. I think this feature is a good addition > because it resolves inconsistency between closures and unticked > functions. In a nutshell, > > <?php > function foo() use (&$some_globals) { > echo $some_globals; > } > ?> > > is equivalent to > > <?php > function foo() { > global $some_globals; > echo $some_globals; > } > ?> > > While, > > <?php > function bar() { > $some_local_var = ''; > function fubar() use (&$some_local_var) { > echo $some_local_var; > } > } > ?> > > and > > <?php > function bar() { > function fubar() { > global $some_local_var; > echo $some_local_var; > } > } > ?> > > are of course not the same. Which is why I am not a fan of this syntax as proposed. You're using the same keyword to mean two different but very very close things. That's very confusing. It also means that you cannot take a global by value in a closure. Earlier the following was proposed: function foo($a, &$b) global ($c, &$d) { } $bar = new function($a, &$b) use ($c, &$d) global ($e, &$f) { }; Which I think is much more self-explanatory, accomplishes the same goal, and still does not introduce any new keywords. (I still think "lexical" is better than "use", and safe, but whatev. <g>) -- Larry Garfield larry@garfieldtech.com

« previous php.internals (#39074) next »