Пространства имен предназначены не только для автозагрузки классов. Они также предотвращают конфликты имен. На самом деле, это их основная цель.
Скажем, у вас есть проект, которому нужен класс с именем User
для хранения информации о пользователях вашего приложения, но плагин также использует (другой) класс с именами User
для хранения информации. Пространства имен позволяют вам создать свой класс в одном пространстве имен (скажем, MyApp
) и позволить плагину использовать другое пространство имен (скажем, CoolPlugin
). Код в MyApp
пространстве может просто ссылаться User
(например, new User();
), и поэтому может кодироваться в CoolPlugin
пространстве; каждый получит ожидаемый результат. Когда вам нужно использовать код из другого пространства имен, вы просто префикс его. Например, код в CoolPlugin
пространстве может получить доступ к User
классу MyApp
черезnew \MyApp\User();
Альтернатива состоит в том, что каждому классу везде нужно сложное имя , такое как class MyApp_User
и class CoolPlugin_User
. Пространства имен позволяют вам упростить вещи большую часть времени и всегда избегать конфликтов имен.
Изменить: Чтобы ответить на вопрос "Есть ли разница в производительности между двумя?"
Не значащий, нет. Я не тестировал его, но, вероятно, есть разница на уровне наносекунд. Тем не менее, жертвовать качеством кода ради сверхмалых настроек производительности не очень хорошая стратегия, поэтому вы должны использовать пространства имен независимо от того. Для тестов подобных проблем см. PHPbench.com и этот ответ StackOverflow .
Ваш код должен быть невероятно трудным и невероятно чувствительным ко времени (например, высокочастотная торговля или управление ядерными реакциями), прежде чем вам придется беспокоиться о его микрооптимизации в такого рода контексте. Если это действительно так чувствительно ко времени, вы, вероятно, должны писать код на c или даже на ассемблере , а не на интерпретируемых языках, таких как PHP.