I read parts of the thread and I'm curious about a situation that seems Marcus' patch will deny. It seems that it'll be denied the possibility to require/include a file inside of a method of a class/function inside a namespace.
Now I need to bring a situation where maybe Doctrine will implement. We may have the namespace Doctrine and inside of it a function or maybe a method called autoload. This one will be linked with spl_register_autoload. This method actually includes a file on script and since the autoload is inside namespace Doctrine and the file included may be part of namespace Doctrine::XXX::YYY, how will it work? It seems Marcus' patch denies this possibility. I review the earlier implementations of namespace support, but now I'm curious what's the real issue with namespaces and included files. Please, please please, that's not a flaming discussion. I just want to have things clear in my head why this design decision was taken. IMHO, if I have something like: namespace Doctrine { function autoload($class) { include 'Doctrine/Orm/Entity.php'; } } And...: namespace Doctrine::Orm { class Entity { ... } } The included file should have 2 different possibilities of being processed: 1- It is called in global scope, so it'll be able to Doctrine::Orm::Entity 2- It is called in local scope. This is something that would be awesome, but would lead compilers crazy. How? The example: namespace Doctrine { function autoload($class) { include 'Doctrine/Orm/Entity.php'; } } And...: namespace Orm { class Entity { ... } } And since include was done inside Doctrine namespace, it'd be accessible through Doctrine::Orm::Entity. This would lead after some time into a newer request of users... namespace Foo { namespace Bar { class Baz { ... } } } // Acess as Foo::Bar::Baz Or even: namespace Foo::Bar { namespace Baz::Wee { class Blah { ... } } } // Acess as Foo::Bar::Baz::Wee:Blah In this situation, if you separate (using the last example), you could do a simply: namespace Foo::Bar { include 'Baz/Wee.php'; } And it should result the same thing as my example. Please notice I do not want to start a "why not use my syntax". I want answers what can be accomplish, what cannot be accomplished and why things are possible/impossible. Lukas knows more than anyone else that we from Doctrine team are expecting 5.3 to be a God master in namespace and waiting for a full scope to be defined (and win release work) to start to port our code. Thanks in advance, Cheers, On Wed, Aug 13, 2008 at 8:00 PM, Lukas Kahwe Smith <[EMAIL PROTECTED]> wrote: > > On 14.08.2008, at 00:54, Rasmus Lerdorf wrote: > >> Gregory Beaver wrote: >>> >>> Lukas Kahwe Smith wrote: >>>> >>>> On 13.08.2008, at 22:18, Stanislav Malyshev wrote: >>>> >>>>> Simply include a script from two locations with different namespaces >>>>> or one >>>>>> >>>>>> with namespace and the otherone without. >>>>> >>>>> I'm afraid you misunderstand how namespaces work. As I explained >>>>> numerous times, namespaces are file-local, and this when including >>>>> file, it does not matter a bit what was including context. >>>> >>>> I think Marcus is talking about files that are included that do not >>>> specify a namespace explicitly. In this situation the context does >>>> matter. >>>> >>>> We do not know if the developer in question is aware that the context >>>> would matter in this case. Actually like I said in a previous email it >>>> would be nice to at least not throw a warning if the file that is >>>> included specifies an explicit namespace (I assume that is possible?). >>>> Maybe adding a new "include" is a solution. This way developers can say >>>> explicitly what they want to do without having to suppress the warning. >>>> Then again quickly some smartass developer is going to teach people that >>>> these annoying warnings go away if you just use this new include >>>> everywhere. Then again, I am not sure if I even have my head wrapped >>>> around this entire namespace thing. >>> >>> Hi, >>> >>> Currently, if you include a file within a class method that contains >>> function definitions, they remain functions outside the class. If you >>> include a file that contains a class. >>> >>> In short, only global cpde is executed in the scope, and there is no >>> precedent in PHP to redefine re-usable elements based on scope. >>> >>> Why would namespaces be any different? This whole argument makes no >>> sense to me. >> >> Well, it depends how you view the scope. If you include a file that >> defines a variable from within a function or a method, that variable becomes >> function-scoped, not global. In the case of a namespaced function or method >> including a file containing functions or classes, those classes become >> global. That has, of course, always been the case, but we haven't had the >> concept of a namespace context before and we haven't had anything that was >> file-scoped like this. So people might extrapolate from the >> function-context case to this and assume the wrong thing. That's what >> Marcus' patch it about. >> >> I happen to disagree with him and I think we should just write really good >> docs explaining how namespaces work and provide a lot of examples. > > > My previous comments were wrong. Sorry about causing confusion. As Rasmus > points out what Marcus is trying to solve with the warning is the false > expectation that something that is included in a namespace would also be > namespaced. This is not the case. As such if you want the included code to > be in some namespace you have to explicitly do so in the file that is being > included. > > As such I also agree that we do not need a warning. It will do at least as > much harm to legitimate uses as it tries to solve for illegitimate uses. And > those problematic users will hopefully decide to read out docs .. > > regards, > Lukas Kahwe Smith > [EMAIL PROTECTED] > > > > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > > -- Guilherme Blanco - Web Developer CBC - Certified Bindows Consultant Cell Phone: +55 (16) 9166-6902 MSN: [EMAIL PROTECTED] URL: http://blog.bisna.com Rio de Janeiro - RJ/Brazil -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php