Какая польза от пространств имен в PHP? Я работал над несколькими системами MVC и не нашел для них много пользы. Я читаю о них здесь … это проблема вроде того, что я никогда не использовал их? Это то, что является хорошим стандартом кодирования, который всегда используется?
Как и любые другие языки, пространства имен позволяют двусмысленным именам / классам с одинаковым именем сосуществовать, находясь в двух разных пространствах имен.
Например, класс Table
может ссылаться на таблицу в постоянной базе данных и на таблицу HTML. Я могу помещать пространства имен в конкретную таблицу, которую я хочу, т. Е. \Model\Table
и \View\Table
соответственно.
Пространство имен является частью хорошей практики ООП. Они действительно полезны в большом веб-приложении, потому что они помогают избежать двусмысленности между классами. Это способ организовать ваше приложение и сделать его более читаемым.
Основное преимущество пространств имен обычно происходит не из кода вашего собственного приложения, а из сторонних библиотек . Сторонники библиотек могут выбирать соответствующие пространства имен для своего собственного кода и гарантировать, что конфликты имен не будут совпадать с вашими собственными.
Это помогает избежать коллизий имен. Например, если у вас есть два пакета, и у каждого есть класс с именем Client (или что-то общее подобное), это приведет к столкновению имен. Перед PHP 5.3 решение избежать этих столкновений состояло в том, чтобы использовать имена классов следующим образом: VendorName_PackageName_Classname
Как вы видите, это не слишком приятно. Но теперь с PHP 5.3 вы можете использовать пространства имен, чтобы придумать более чистые имена классов.
Представьте, что у вас есть огромная база кода, с тысячами функций, классов и большого количества стороннего кода. И теперь две функции имеют одно и то же имя.
Вот куда входят пространства имен – путем упаковки вашего кода в пространства имен, вы можете исключить возможность столкновения имен.
Кроме того, пространства имен помогают вам структурировать ваш код – все, что принадлежит определенной функции или подсистеме, входит в одно пространство имен.
Это также поможет вашему коду стать более гибким и чистым. При сравнении, 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. Обратите внимание, что, например, шаблон фабричного метода не должен заботиться.