Какая польза от пространств имен в PHP?

Какая польза от пространств имен в PHP? Я работал над несколькими системами MVC и не нашел для них много пользы. Я читаю о них здесь... это проблема вроде того, что я никогда не использовал их? Это то, что является хорошим стандартом кодирования, который всегда используется?

Ответы

Ответ 1

Как и любые другие языки, пространства имен допускают совместное существование двусмысленных имен/классов с одинаковым именем, находясь в двух разных пространствах имен.

Например, класс Table может ссылаться на таблицу в постоянной базе данных и на таблицу HTML. Я могу помещать пространства имен в конкретную таблицу, которую я хочу, т.е. \Model\Table и \View\Table соответственно.

Ответ 2

Пространство имен является частью хороших практик ООП. Они действительно полезны в большом веб-приложении, потому что они помогают избежать двусмысленности между классами. Это способ организовать ваше приложение и сделать его более читаемым.

Ответ 3

Основное преимущество пространств имен обычно не исходит из вашего собственного кода приложения, а из сторонних библиотек. Сторонники библиотек могут выбирать соответствующие пространства имен для своего собственного кода и гарантировать, что конфликты имен не конфликтуют с вашими собственными.

Ответ 4

Это помогает избежать конфликтов имен. Например, если у вас есть два пакета, и у каждого есть класс с именем Client (или что-то общее подобное), это приведет к столкновению имен. Перед PHP 5.3 решение избежать этих столкновений состояло в том, чтобы использовать имена классов следующим образом: VendorName_PackageName_Classname

Как вы можете видеть, это не слишком приятно. Но теперь с PHP 5.3 вы можете использовать пространства имен, чтобы придумать более чистые имена классов.

Ответ 5

Представьте, что у вас есть огромная база кода, с тысячами функций, классов и большого количества стороннего кода. И теперь две функции имеют одно и то же имя.

Что там, где происходят пространства имен - путем переноса вашего кода в пространства имен, вы можете исключить возможность столкновений имен.

Кроме того, пространства имен помогают вам структурировать ваш код - все, что принадлежит определенной функции или подсистеме, входит в одно пространство имен.

Ответ 6

Это также помогает вашему коду более гибко и чище. При сравнении Zend_Database_Adapter_Mysql vs Zend/Database/Adapter/Mysql равен, чтобы избежать неоднозначных имен.

 // use namespace
 use Zend/Database/Adapter/Mysql as DbAdapter;
 $dbAdapter = new DbAdapter;

 // use naming convention    
 $dbAdapter = new Zend/Database/Adapter/Mysql;

При использовании пространства имен, если адаптер изменен, ваш код не будет изменен слишком много. Все действия изменяются только командой use. Обратите внимание, что в примере шаблон factory не должен заботиться.