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

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

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

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

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

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

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

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

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

namespace Truemisha;
 
class My_Class {}

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

namespace TruemishaFunctions;
 
function my_function() {}
 
function get_posts() {}

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

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

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

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

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

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

Или вот так

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

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

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

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

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

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

$something = new TruemishaMy_Class();

Источник: Блог Миши Рудрастых

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

Путешествует по миру и рассказывает всем о WordPress лично, у себя в блогах и на курсах в Санкт-Петербурге. Умеет просто объяснять сложные вещи, делает это красиво. Организовывает неплохие WordCamp's, но совсем не умеет слушать чужие доклады.

Добавить комментарий

%d такие блоггеры, как: