Команда 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;
}
}
?>