Пространства имён при разработке плагинов

Прежде, чем мы начнём, я бы хотел, чтобы вы проверили, какую версию PHP используете. Нам понадобится PHP 5.3 или выше. Проверили? Что же, давайте теперь поговорим о пространстве имён при работе с плагинами WordPress.

Также в моём видеокурсе про разработку плагинов есть отдельный урок, посвящённый работе с классами PHP.

Для чего нужны пространства имён в PHP?

Периодически почитывая мой блог, можно заметить, что почти все функции, которые я в нём использую имеют префиксы в своих названиях, например префиск true_ или misha_. Примерно тем же я привык руководствоваться, разрабатывая плагины, если я использую там класс My_Class, то я назову его True_My_Class, чтобы, если вдруг где-то у кого-то в теме или в другом плагине присутствует такое же название функции или класса, как минимум наш код будет работать, и как максимум, мы не получим ошибку 500.

Префиксы это тоже в какой-то степены способ задания пространства имён на самом деле.

Как создать пространство имён

Всё начинается с того, что в самом начале PHP-файла мы определяем его при помощи ключевого слова namespace. Обратите внимание – никакого другого кода перед ним, кроме разве что открывающего тега <?php быть не должно.

Пример с классом:

namespace Truemisha;
 
class My_Class {}

Пример с функциями:

namespace Truemisha\Functions;
 
function my_function() {}
 
function get_posts() {}

То есть, как только пространство имён определено в самом начале файла, весь код в нём уже будет принадлежать ему.

Также обратите внимание, как я назвал пространство имён во втором примере, мы можем также создать Truemisha\Helpers\Functions и т д.

Как использовать функции и классы из пространства имён?

Прежде всего, хочу напомнить, что мы всё ещё работаем с плагином WordPress, поэтому давайте в паре слов обсудим структуру файлов сейчас. Допустим, что My_Class из предудушего примера находится в файле classes/class-my-class.php (читайте про то, как правильно называть классы и файлы), а функции в файле includes/functions.php.

Предположим, что в нашем главном файле плагина мы хотим задействовать класс, то мы можем сделать это так:

require_once( __DIR__ . '/classes/class-my-class.php' );
 
use Truemisha\My_Class; 
// use пространство_имён\название_класса
 
$something = new My_Class();

Или вот так

require_once( __DIR__ . '/classes/class-my-class.php' );
 
use Truemisha\My_Class as Hello_World;
 
$something = new Hello_World();

Для функций используем use function, к примеру:

require_once( __DIR__ . '/includes/functions.php' );
 
use function Truemisha\Functions\get_posts;
// use function пространство_имён\название_функции
 
$posts = get_posts();

Или всё вместе:

require_once( __DIR__ . '/classes/class-my-class.php' );
require_once( __DIR__ . '/includes/functions.php' );
 
use Truemisha\My_Class;
use function Truemisha\Functions\get_posts;
 
$something = new My_Class();
 
$posts = get_posts();

Можно даже обращаться напрямую:

$something = new \Truemisha\My_Class();

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.

Миша Рудрастых и WordPress

Полезности из мира WordPress и жизни студии.

Мой телеграм-канал