On Thu, Sep 6, 2012 at 6:15 PM, Sherif Ramadan <theanomaly...@gmail.com> wrote:
> On Thu, Sep 6, 2012 at 5:30 PM, Mark <mark...@gmail.com> wrote:
>> Hi,
>>
>> I was just using the PHP namespaces for the first time and noticed a
>> difference that i really didn't expect. (No, i won't start complaining
>> about the slash based namespace).
>>
>> In C++ when you type:
>> using std;
>>
>> Then you can use all methods/classes/whatever is defined in std
>> without typing std.
>> so: std::cout becomes just cout.
>>
>> In PHP that's a bit different. Lets take this as an example:
>> =================================
>> namespacetst.php
>>
>> <?php
>> namespace Some\Long\Namespace;
>>
>> Class SomeClass
>> {
>> }
>>
>>
>> Now the one using that "SomeClass" has to do something like this:
>> index.php
>> use Some\Long\Namespace;
>>
>> $oClass = new Namespace\SomeClass();
>> =================================
>>
>> Yes, you can also do:
>>
>> index.php
>> use Some\Long\Namespace\SomeClass;
>> $oClass = new SomeClass();
>>
>> But i'm wondering why the "use Some\Long\Namespace" doesn't work like
>> the C++ one. Since i would have guessed that adding that use will give
>> me access to all the methods/classes/whatever that live within that
>> namespace _without_ having to prefix it with the last part of the
>> namespace.
>>
>> I hope someone can shed some light over this.
>>
>> Regards,
>> Mark
>>
>> --
>> PHP Internals - PHP Runtime Development Mailing List
>> To unsubscribe, visit: http://www.php.net/unsub.php
>>
>
>
> Yes, PHP namespaces are completely different from what you'd be used
> to in C++. In all honesty namespaces were never well designed in PHP
> and were implemented in a haphazard way, which is why I generally
> don't bother using them.
>
> To clarify, importing namespaces in PHP isn't like importing
> namespaces in C++ at all, really. You are merely aliasing namespaces
> in PHP when you use the "use" keyword. Meaning that what's actually
> happening is PHP expects you to alias one namespace to another (and
> thus you can never import one namespace directly into the existing
> namespace since this creates a name conflict). It's messy...
>
> NameSpacedFile.php
> namespace My\Name\Space;
> class MyClass { }
>
>
> Index.php
> use My\Name\Space; // This doesn't actually import anything
> // What happened here is we created an alias
> // It's the same thing as saying "use My\Name\Space as \Space
> // So now My\Name\Space is aliased to \Space
>
> $obj = new \Space\MyClass; // great
> $obj = new MyClass; // this won't do what you want
>
>
> Here's the full example:
>
> http://viperpad.com/qcAUNM
>
> It simply doesn't work like that because PHP's namespaces are
> implemented in such a way that they don't really resemble namespaces.
> Just some fancy magic going on in the engine that allow it to mimic
> namespaces.

While that is true, I cannot stress their importance in organizing
code.  Nearly every codebase I've seen that can use namespaces maps
the namespace to the file system which makes for very easy-to-code
autoloaders.  Very helpful indeed.  It would be nice to see improved
namespaces, though.

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

Reply via email to