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
[EMAIL PROTECTED]

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

Reply via email to