[prev in list] [next in list] [prev in thread] [next in thread]
List: php-internals
Subject: [PHP-DEV] Scoping of "use" statements and a strategy for 5.3/6.0 release of namespace
From: "Stan Vassilev | FM" <sv_forums () fmethod ! com>
Date: 2008-09-11 15:32:13
Message-ID: EDD81B0D532744D4A80E7AFA2AA377FE () pc
[Download RAW message or body]
Hi,
Multiple namespaces per file were introduced to allow certain workflows in PEAR and \
frameworks like Symphony which can combine multiple classes and namespaces in a \
single package.
They work like this:
namespace X;
...
namespace Y;
...
The problem is, no one thought of scoping "use" statements, so now those merged files \
share their "use" imports, thus breaking all the code where collisions occur.
Also we have the problems with name resolution of internal vs user classes and \
autoloaders, discussed here.
And we also have the non-intuitive differentiation between resolving \
functions/classes/constant which will most likely lead people to believe \
functions/constants aren't supported in any way in namespaces (if they try, and it \
doesn't work, they won't try second time).
Which leads me to the following proposal:
For PHP 5.3 we introduce namespaces with a very limited "safe" set of barebones \
features, that we won't regret later for releasing and having to modify in a non-BC \
way. It'll let people start porting their code and be ready for the full featureset \
later on, which will be a proper superset of the 5.3 release:
1) We disable support for multiple namespaces per file as it is, as it can't be used \
without ability to scope "use" statements as well.
2) We remove the statement "use" (regarding namespaces, not regarding closures), \
until we get more feedback from the community on the exact preferred resolution \
algorithms, and more thought is put to this.
For PHP 5.4 or 6:
1) Introduce file-level "use" statements with same syntax as now, but modified \
resolution rules based on further discussion and feedback. And if someone is about to \
say "we had plenty of discussion", well it's apparent we didn't have enough given all \
the problems facing namespaces right now, or maybe not enough of the constructive \
type of discussion.
2) Introduce ability to scope "use" and "namespace" statements with curly brackets, \
so that multiple files can be safely merged without changing intent (all file-level \
namespace can be converted with curly brackets, and the existing curly bracket ones \
don't need to be converted), example:
namespace X {
use Y as Z {
...
}
}
namespace Y {
use X as Z {
...
}
}
Waiting for your feedback...
Regards,
Stan Vassilev
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic