Ничего не дается бесплатно, в том числе и пространства имен. Вызовы функций становятся длинными и неудобными:
<?php
require_once(__DIR__ . '/src/Formatters/Pretty.php');
namespace Generator;
function generate($data)
{
return \Formatters\Pretty\render($data);
}
Представьте, что будет, если понадобится вызвать эту функцию много раз. В глазах очень быстро начнет рябить от обратных слешей. Для решения этой задачи придумали механизм импорта, с которым мы познакомимся в этом уроке.
С помощью механизма импорта можно импортировать функцию в текущее пространство имен так, как будто она определена прямо здесь:
<?php
require_once(__DIR__ . '/src/Formatters/Pretty.php');
namespace Generator;
use function Formatters\Pretty\render;
function generate($data)
{
return render($data);
}
Импорт функции выполняется оператором use
, за которым идет ключевое слово function
и затем полный путь до функции с указанием всех его пространств имен — без обратного слэша в начале.
Количество импортов при этом ничем не ограничено. Их используют и добавляют исключительно по соображениям удобства:
<?php
// Подключаем файл, в котором определены функции:
// cons(), car(), cdr(), toString()
require_once(__DIR__ . '/src/Pairs.php');
namespace Php\Pairs\Data\Lists;
use function Php\Pairs\Pairs\cons;
use function Php\Pairs\Pairs\car;
use function Php\Pairs\Pairs\cdr;
use function Php\Pairs\Pairs\toString;
Изредка случаются ситуации, когда хочется импортировать функцию, но в текущем пространстве это невозможно:
- Либо уже определена функция с таким именем
- Либо функция с таким именем была импортирована ранее из другого пространства имен
Чтобы исправить ситуацию, можно использовать алиасы (псевдонимы) — механизм, позволяющий переименовывать импортируемые функции:
<?php
require_once(__DIR__ . '/src/Formatters/Pretty.php');
require_once(__DIR__ . '/src/Formatters/Simple.php');
namespace Generator;
use function Formatters\Pretty\render;
use function Formatters\Simple\render as simpleRender;
function generate($data)
{
return simpleRender($data);
}
Для переименования достаточно в конце импорта добавить ключевое слово as
, а затем имя, под которым функция должна стать доступна.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты