Прежде, чем мы начнём, я бы хотел, чтобы вы проверили, какую версию PHP используете. Нам понадобится PHP 5.3 или выше. Проверили? Что же, давайте теперь поговорим о пространстве имён при работе с плагинами WordPress.
Для чего нужны пространства имён в 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();