Какая польза от пространств имен в 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 не должен заботиться.