Одним из преимуществ работы с объектно-ориентированным программированием является возможность определять интерфейсы, чтобы классы, реализующие эти интерфейсы, имели строгий набор функций, которые эти классы должны реализовать.
Во всяком случае, это определение интерфейса класса:
Интерфейс — это контракт, определяющий набор методов, полей и свойств, которые будут доступны для любого реализующего объекта.
Но как это может выглядеть, если мы стремимся создать решение с пространством имен для включения интерфейсов плагинов WordPress (или интерфейса) для класса, который можно использовать для постановки в очередь таблиц стилей или файлов JavaScript?
Интерфейсы плагинов WordPress: Активы
Для целей этого поста предположим, что мы определяем интерфейс, который будет использоваться в области администрирования WordPress. То есть мы создадим интерфейс, который будет использоваться для постановки в очередь таблиц стилей и файлов JavaScript.
Нам нужно будет включить следующее:
- пространство имен, которое можно использовать во всем проекте,
- функция для инициализации класса,
- функция для фактической постановки активов в очередь.
И поскольку он достаточно общий, чтобы его можно было использовать для JavaScript и таблиц стилей, я решил назвать его просто Asset.
Конечный результат может выглядеть примерно так :
<?php
namespace AcmeAdminInterfaces;
interface Asset {
public function init();
public function enqueue();
}
Далее нам нужно реализовать интерфейс с помощью класса. Это должно быть относительно просто, так как мы установили методы, которые должны быть реализованы.
Обратите внимание, однако, что я предоставляю пару свойств, которые устанавливаются в конструкторе класса. Они специфичны для этого класса и немного упрощают фактическую постановку файла в очередь.
<?php
namespace AcmeAdmin;
use AcmeAdminInterfaces;
class JavaScript_Assets implements InterfacesAsset {
private $assets_dir;
private $js_dir;
public function __construct() {
$this->assets_dir = trailingslashit(
plugin_dir_url( __FILE__ ). 'assets'
);
$this->js_dir = trailingslashit( $this->assets_dir. 'js' );
}
public function init() {
add_action(
'admin_enqueue_scripts',
array( $this, 'enqueue') );
}
public function enqueue() {
wp_enqueue_script(
'toggle-admin-notices',
$this->js_dir. 'admin.js',
array( 'jquery' ),
false
);
}
}
Несколько замечаний по приведенному выше коду:
- он использует ключевое слово use, чтобы PHP знал, что мы будем работать с интерфейсом Asset ,
- Я добавил к имени префикс JavaScript, чтобы было ясно, с каким типом ресурса я работаю.
Наконец, чтобы создать экземпляр класса, реализующего интерфейс, вы просто делаете следующее :
<?php
$assets = new AdminJavaScript_Assets();
$assets->init();
Конечно, этот конкретный пример прост, и я оставил обычные комментарии кода, но в основном это делается для удобочитаемости. Если вы хотите увидеть что-то подобное в действии, просмотрите исходный код для
Если вы хотите увидеть что-то подобное в действии, просмотрите исходный код именно этого плагина.