✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

Registri mustri kasutamine WordPressis

13

Olen vestelnud Twitteris erinevate sõprade ja teiste inimestega programmeerimiskeelte globaalsete muutujate mõiste üle. Neile, kes on programmeerimisega uued või kes pole kindlad, miks need halvad on:

Globaalsete muutujate kasutamine muudab tarkvara lugemise ja mõistmise raskemaks. Kuna mis tahes kood programmis võib muutuja väärtust igal ajal muuta, võib muutuja kasutamise mõistmine eeldada suure osa programmist mõistmist.

See ei tähenda, et neid ei kasutata, kuid kui olete huvitatud objektorienteeritud programmeerimisest (eriti WordPressi seadetes, kus kavatsete PHP-d kasutada), on oluline mõista mõnda paremat alternatiivi. kui globaalsed muutujad.

See tähendab, et on olemas viise, kuidas oma rakenduses andmeid edastada, ilma et oleks vaja globaalseid muutujaid. Ja üks selline viis on registri muster.

WordPressi registri muster

Esiteks pange tähele, et kujundusmustrid ületavad mis tahes konkreetset mustrit. Kuni keel pakub objektide (või isegi abstraktsioonide) mõisteid, on mustrit võimalik rakendada.

Aga milleks selle kasutamisega vaeva näha?

Registri mustri kasutamine WordPressis

Samuel Zelleri foto saidil Unsplash

Lühidalt öeldes pakub see objektorienteeritud viisi rakenduse ümber teabe edastamiseks ilma globaalseid muutujaid kasutamata. Sellised asjad nagu sõltuvussüsti konteinerid on ka selleks head, kuid need ei kuulu selle postituse ulatusse. Ma väidan ka, et mõnikord võivad need väikeste pistikprogrammide kontekstis olla üle jõu käivad.

Mustri rakendamine

Seda arvestades, kuidas saaksime WordPressis registrimustrit rakendada ja seejärel kogu oma töös ära kasutada? Vaatame kõigepealt mustri põhistruktuuri :

<?php

/**
 * Serves as a registry for all objects that need to be accessed globally throughout the
 * plugin.
 */
class Registry
{

  /**
   * @var array The array used to the the various objects that will be used in the plugin.
   */
  private $storage;

  /**
   * Initializes the plugin by creating an instance of an empty array.
   */
  public function __construct()
  {
      $this->storage = [];
  }

  /**
   * Adds an instance of a class to the registry's storage array using the given key
   *
   * @param string $id    The ID of the object to be used to retrieve it later in the plugin.
   * @param mixed  $class An instance of the class that will be associated with the specified key.
   */
  public function add($id, $class)
  {
      $this->storage[$id] = $class;
  }

  /**
   * @param string $id    The ID of the object to retrieve from the repository.
   * @return mixed $class An instance of the class associated with the specified key (or null if it doesn't exist).
   */
  public function get($id)
  {
      return array_key_exists($id, $this->storage)? $this->storage[$id]: null;
  }
}

Pange tähele, et selle rakendamine on üsna lihtne:

  1. Klass sisaldab eraomandina ühte massiivi.
  2. Andmed lisatakse massiivi kindla ID-ga.
  3. Andmeid saab mustrist ID-ga kätte saada.

Võite isegi viia selle konkreetse mustri järgmisele tasemele, kui see aktsepteerib ainult teatud tüüpi klassi (näiteks AbstractEvent) ja käivitab seejärel automaatselt klassi funktsiooni, kui see registrist sisestatakse (või hangitakse).

Kuid see on muutumas keerulisemaks teostuseks, mida ma selle postituse jaoks sooviksin.

Registri seadistamine

WordPressi konksusüsteemi olemuse tõttu tuleb register seadistada ja seejärel WordPressis registreerida.

Oletame, et töötate pistikprogrammiga. Tehke pistikprogrammi alglaadimisfailis midagi sellist:

<?php

/**
 * Creates a Registry using the Registry Design Pattern to store objects
 * that can be used throughout the plugin.
 *
 */
$registry = new Registry();
add_filter('acmeRegistry', function() use ($registry) {
  return $registry;
});

See loob registri ja seejärel vastava filtri, mida saame hiljem pistikprogrammis kasutada registri ja seega ka muude selle hooldatavate objektide toomiseks.

Registri kasutamine

Objekti registrisse lisamiseks helistage lisamisfunktsioonile ja edastage kordumatu ID ja objekti eksemplar. Pange tähele, et meie praegune rakendamine hävitab kõik sama võtmega objekti varasemad eksemplarid ja asendab selle sellega, mida me sellele edastame.

<?php

/**
 * Get an reference to the repository and add an instance of a 
 * PostManager to it. The PostManager is a class that allows us
 * to manipulate posts.
 */
$this->registry = apply_filters('acmeRegistry', null);
$this->registry->add('postManager', new PostManager());

Sealt saate seejärel tuua registrisse salvestatud objektid .

<?php

/**
 * Get an reference to the repository, get a reference to the PostManager
 * then you can begin working with it.
 */
$this->registry = apply_filters('acmeRegistry', null);
$this->registry->add('postManager', new PostManager());

// An example call that you can make to set the title of the post.
$postManager->updateTitle('This Is the New Title');

Ja saate neid kasutada samamoodi nagu oy muul viisil. Kuid see väldib üksikute, globaalsete muutujate või muude ohtlike asjade kasutamise vajadust.

Sõna testitavuse kohta

Teine eelis, mille ma selle mustri rakendamisel leian, on see, et see mitte ainult ei võimalda teil hõlpsamini selle vastu ühikteste kirjutada, vaid annab teile ka võimaluse kirjutada teste objektide vastu, mida see mahutab.

Selle all pean silmas, et saate oma klassid kirjutada WordPressist sõltumatumalt, eraldades seega domeeniloogika põhirakendusest ja muutes need paremini esindavaks andmete suhtes, mida nad peaksid säilitama.

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem