В этой части учебника рассказывается что такое пространство имен в PHP и как с этим работать,это достаточна большая тема, поэтому здесь будет только самое базовое что нужно знать, но в конце будет ссылка, где будет можно подробнее прочитать про это.
Зачем нужны пространство имен:
Если грубо говоря, то пространство имён нужно для изоляции разных классов друг от друга, как папки в файловой системе для файлов.
Это позволяет избежать конфликтов между разными классами, особенно удобно когда больше нет нормальных имён для методов класса.
В том дело, рано или поздно, всё равно закончится нормальные имена для классов, если вы делаете какой то очень большой проект и пространство имен помогает с этим справится.
Пространство имен в PHP:
Покажу два примера программы, где показывается как работать с пространство имён в PHP.
Вот вам пример кода классов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | // Объявление пространства имён namespace Home; // Создаём класс User class User { // Объявление свойства name public $name; // Конструктор класса public function __construct ($name, $surname) { $this -> name = $name; $this -> surname = $surname; $this -> show_name(); } // Метод для вывода имени public function show_name () { echo "Имя: " . $this -> name . "</br>"; echo "Фамилия: " . $this -> surname . "</br>"; } } // Создаём наследуемый класс Admin class Admin extends User { // Объявление свойства status c значением admin public $status = 'admin'; // Конструктор класса public function __construct ($name, $surname) { // Вызов конструктора класса который наследовали parent::__construct($name, $surname); } // Метод для вывода имени public function show_name () { // Вызов метода show_name() parent::show_name(); echo "Статус: " . $this -> status . "</br>"; } } |
Теперь разберём этот код, в самом начале объявляется пространство имён, через ключевое слово
namespace
, как можете заметить у меня называется «Home», но по факту можно любое название использовать, кроме «PHP».
Теперь посмотрите как объявлять класс из пространства имён.
1 2 3 4 | require_once "user.php"; $user = new \Home\User("Вася", "Пупкин"); $admin = new \Home\Admin("Павел", "Иванов"); |
Сначала нам нужно подключить файл в котором хранятся наши классы в пространстве имён, делается это через слово require_once
, после пишется путь к файлу.
Дальше объявляем объект как обычно, но в название класса, сначала пишем пространство имён, а потом уже через обратный слеш пишем название класса.
Важно: Пространство имён работает только для классов, функций и константами.
Вот результат этой программы.
Также пространство имён может быть гораздо более большим, из-за чего объявлять объект класса может быть не удобно, вот пример такой программы и как это исправить.
В первом файле с классами, мы просто изменить значение namespace
.
1 2 | // Объявление пространства имён namespace Home\Users; |
А вот как изменим главный файл.
1 2 3 4 5 6 7 | require_once "user.php"; // Создаём псевдоним use Home\Users as Users; $user = new Users\User("Вася", "Пупкин"); $admin = new Users\Admin("Павел", "Иванов"); |
Мы создали псевдоним, для этого просто пишем слово use
, после пишем название пространство имён и слово as
, после которого пишем слово которым хотим заменить пространство имён, в нашем случае это Users
, теперь не обязательно писать полностью пространство имён и потом класс, достаточно только написать псевдоним и имя класса.
Выводит тоже самое, что и в прошлый раз.
Также можете сделать псевдоним плоть до класса, делаться это будет примерно так.
1 2 3 4 5 6 7 8 | require_once "user.php"; // Создаём псевдоним use Home\Users\User as User; use Home\Users\Admin as Admin; $user = new User("Вася", "Пупкин"); $admin = new Admin("Павел", "Иванов"); |
То есть теперь при объявление объекта нужно только использовать имя класса и всё.
Вывод:
В этой части учебника мы разобрали пространство имен в PHP, и как видите тут было достаточно много, но это только поверхность, по хорошому надо писать отдельный учебник по этой теме, поэтому переходите по этой ссылки, там пространство имён рассказывается гораздо подробнее.