В чем преимущество пространств имен в PHP? - PullRequest
15 голосов
/ 22 марта 2011

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

Ответы [ 6 ]

7 голосов
/ 22 марта 2011

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

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

6 голосов
/ 22 марта 2011

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

6 голосов
/ 22 марта 2011

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

3 голосов
/ 22 марта 2011

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

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

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

3 голосов
/ 22 марта 2011

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

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

0 голосов
/ 27 мая 2015

Это также поможет вашему коду быть более гибким и понятным. При сравнении Zend_Database_Adapter_Mysql и 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. Обратите внимание, что в приведенном примере шаблон фабричного метода не должен заботиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...