# Команда use и пространства имен

Пусть у нас есть следующий класс `Data`:

`<?php namespace \Core\Admin; class Data { public function __construct($num) { } } ?>`

Пусть также есть класс `Page`, создающий внутри себя объекты класса `Data`:

`<?php namespace Users; class Page { public function __construct() { $data1 = new \Core\Admin\Data('1'); $data2 = new \Core\Admin\Data('2'); } } ?>`

Как вы видите, оба наших класса находятся в совсем разных пространствах имен, поэтому вызовы класса `Data` упростить нельзя, подобно тому, как мы это делали в предыдущем уроке. Эти вызовы, однако, очень длинные и неудобные, так как в каждом вызове класса `Data` приходится указывать его длинное пространство имен.

Для решения подобной проблемы существует специальная команда `use`. С помощью этой команды достаточно один раз подключить класс по его полному имени, и после этого можно будет обращаться к этому классу просто по имени класса. Смотрите пример:

`<?php namespace Users; use \Core\Admin\Data; // подключаем класс class Page extends Controller { public function __construct() { $data1 = new Data('1'); // вызываем просто по имени $data2 = new Data('2'); // вызываем просто по имени } } ?>`

Упростите следующий код с использованием `use`:

`<?php namespace Project; class Test { public function __construct() { // Создаем 3 объекта одного класса: $data1 = new \Core\Users\Data('user1'); $data2 = new \Core\Users\Data('user3'); $data3 = new \Core\Users\Data('user3'); } } ?>`

Даны следующие классы:

`<?php namespace Core\Admin; class Controller { } ?>`
`<?php namespace Users; class Page extends \Core\Admin\Controller { } ?>`

Упростите код наследования класса, применив команду `use`.

## Подключение нескольких классов

Если нужно подключить несколько классов, то каждый из них подключается своей командой `use`:

`<?php namespace Users; use \Core\Admin\Data1; // подключаем класс use \Core\Admin\Data2; // подключаем класс class Page extends Controller { public function __construct() { $data1 = new Data1; // вызываем просто по имени $data2 = new Data2; // вызываем просто по имени } } ?>`

Упростите следующий код с использованием `use`:

`<?php namespace Project; class Test { public function __construct() { $model = new \Core\Admin\Model; $data = new \Core\Users\Storage\Data; } } ?>`

## Команда use и относительные пути

При использовании команды `use` можно указывать относительные пути, подобно тому, как мы это делали в предыдущем уроке. Давайте посмотрим на примере. Пусть мы подключаем некоторый класс:

`<?php namespace Core\Admin; use \Core\Admin\Path\Router; // подключаем класс class Controller extends Router { } ?>`

Как вы видите, начало пространства имен подключаемого класса совпадает с текущим пространством. Это значит, что мы можем эту часть при подключении нашего класса, убрав при этом начальный обратный слеш:

`<?php namespace Core\Admin; use Path\Router; // делаем относительный путь class Controller extends Router { } ?>`

Упростите следующий код с использованием `use`:

`<?php namespace Core\Storage; class Model { public function __construct() { $database = new \Core\Storage\DataBase; } } ?>`
←→
↑