Namespaces are not just for autoloading classes. They also prevent naming conflicts. In fact, that's their primary purpose.
Say you have a project that needs a class named
User, to store info about users of your application, but a plugin also uses a (different) class named
User to store information. Namespaces let you create your class within one namespace (say,
MyApp) and let the plugin use another namespace (say,
CoolPlugin). Code within the
MyApp space can just refer to
new User();), and so can code in the
CoolPlugin space; each will get the expected result. When you need to use code from another namespace, you just prefix it. For example, code in the
CoolPlugin space can access the
User class in
The alternative is that every class needs a complex name everywhere, such as
class MyApp_User and
class CoolPlugin_User. Namespaces let you simplify things most of the time and avoid naming conflicts all of the time.
Edit: To answer the question, "Is there any performance difference between the two?"
Not a meaningful one, no. I haven't benchmarked it, but there is probably a difference on the nanosecond level. That said, sacrificing code quality for super-small performance tweaks is not a good strategy, so you should use namespaces regardless. For benchmarks of similar kinds of problems, see PHPbench.com and this StackOverflow answer.
Your code needs to be incredibly tight and incredibly time-sensitive (think high-frequency trading or managing nuclear reactions) before you need to worry about micro-optimizing it in this kind of context. If it really is that time-sensitive, you should probably be coding in c or even assembly, not interpreted languages like PHP.