I too am on the fence, but lean more towards not liking it. Here's why:
I'm on the fence about "use ((expression) as $foo)" -- I fully like the
idea of aliasing closure variables, but still thinking on the expression
syntax. It would be _inconsistent_ with how it works with namespaces
(which uses literals only), and _semi-consistent_ with traits (which
have the "insteadof" syntax). I can definitely think of some nice use
cases surrounding them, though.
I don't think I'm too fond of the analogy to the namespace "use"
statement b/c that is more akin to type names, whereas in this "use"
case, we're talking about how variables are scoped.
For namespaces, "use" really means "alias" as opposed to "import" which
I feel the name implies.
What's proposed is really more closely related to the functionality of
"global" since you're taking a non-local variable and making it accessible.
This would be the same as this improvement:
function foo() {
global $counter as $c;
}
Really though, all we're doing is, this:
$foo = 5;
$baz = function () use ($foo as $bar) {
}
Is the shorthand version of this:
$foo = 5;
$bar = $foo;
$baz = function () use ($bar) {
// use $bar somehow
}
And with that example, I see this making less sense. The thing is that
use () is a declaration time binding, which means the name is closely
related to the scope its defined within (I guess it could be an include
$fileReturnsFunction and that would work too). So, if that was a bad
variable name 2 lines earlier, why not just change the variable name for
both scopes?
-ralph
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php