Jedną z zalet pracy z programowaniem obiektowym jest możliwość definiowania interfejsów tak, aby klasy implementujące te interfejsy miały ścisły zestaw funkcji, które te klasy muszą implementować.
W każdym razie jest to definicja interfejsu klasowego:
Interfejs to kontrakt określający zestaw metod, pól i właściwości, które będą dostępne na dowolnym obiekcie implementującym
Ale jak to może wyglądać, jeśli naszym celem jest stworzenie rozwiązania z przestrzenią nazw do dołączania interfejsów wtyczek WordPress (lub interfejsu) dla klasy, która może być używana do kolejkowania arkuszy stylów lub plików JavaScript?
Interfejsy wtyczek WordPress: zasoby
Na potrzeby tego posta załóżmy, że definiujemy interfejs, który będzie używany w obszarze administracyjnym WordPressa. Oznacza to, że stworzymy interfejs, który będzie używany do kolejkowania arkuszy stylów i plików JavaScript.
Musimy uwzględnić następujące elementy:
- przestrzeń nazw, którą można wykorzystać w całym projekcie,
- funkcja do inicjalizacji klasy,
- funkcja do faktycznego kolejkowania aktywów.
A ponieważ jest to na tyle ogólne, że może być używane w JavaScript i arkuszach stylów, zdecydowałem się po prostu nazwać go Asset.
Wynik końcowy może wyglądać mniej więcej tak :
<?php
namespace AcmeAdminInterfaces;
interface Asset {
public function init();
public function enqueue();
}
Następnie musimy faktycznie zaimplementować interfejs z klasą. Powinno to być stosunkowo proste, ponieważ ustaliliśmy metody, które muszą zostać zaimplementowane.
Zauważ jednak, że udostępniam kilka właściwości, które są ustawiane w konstruktorze klasy. Są one specyficzne dla tej klasy i sprawiają, że czynność faktycznego zakolejkowania pliku jest nieco łatwiejsza.
<?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
);
}
}
Kilka rzeczy do zapamiętania na temat powyższego kodu:
- używa słowa kluczowego use, aby PHP wiedziało, że będziemy pracować z interfejsem Asset ,
- Poprzedziłem nazwę JavaScriptem, aby było jasne, z jakim typem zasobu pracuję.
Na koniec, aby utworzyć instancję klasy, która implementuje interfejs, po prostu zrób to :
<?php
$assets = new AdminJavaScript_Assets();
$assets->init();
Jasne, ten konkretny przykład jest prosty i pominąłem zwykłe komentarze do kodu, ale generalnie chodzi o czytelność. Jeśli chcesz zobaczyć coś takiego w akcji, przejrzyj kod źródłowy dla
Jeśli chcesz zobaczyć coś takiego w działaniu, przejrzyj kod źródłowy tej konkretnej wtyczki.