Funktioiden käyttäminen globaalien sijasta: get_post_field
Kun PHP on jatkanut edistymistä ja WordPress (ja sen kehittäjätalous) alkaa käyttää nykyaikaisempia ominaisuuksia, yksi asia, jonka näemme edelleen tapahtuvan, on globaalien käyttö WordPressissä.
Jossain määrin se on väistämätöntä: Merkittävät osat sovelluksesta rakennettiin käyttämällä globaaleja, kun se oli toiminto, joka oli ensisijainen ominaisuus; muut osat ovat kuitenkin edenneet tarjoamalla luokkia tai toimintoja, jotka estävät meitä tekemästä sitä.
Esimerkkinä: get_post_fieldon vankka vaihtoehto $postglobaalin käytölle, joka tarjoaa suuren osan samasta tiedosta hieman nykyaikaisemmalla (ja luultavasti turvallisemmalla) tapa lukea dataa.
Monille seuraavan kaltaisen tavan käyttäminen on yleinen käytäntö:
<?php
/**
* Retrieves the slug for the current post via the current post's
* post_name property.
*
* @return string the slug of the post.
*/
function getPostSlug(): string
{
global $post;
return $post->post_name;
}
Ei ole harvinaista nähdä jotain, kuten get_the_title(get_the_ID());koko koodissa, mikä on hyvä asia, mutta joskus näemme kirjoitettua koodia, joka käyttää nykyisen viestin tiettyjä puolia.
Ja kyseenalaistan, kuinka tarpeellista tuolle harjoitukselle todella annetaan get_post_fieldtehtävä. Koodiviitteestä :
Hae tiedot viestikentästä viestitunnuksen perusteella.
Esimerkkejä viestikentästä ovat ’post_type’, ’post_status’, ’post_content’ jne., ja ne perustuvat post-objektin ominaisuuksiin tai avainten nimiin.
Samanlainen esimerkki tälle funktiolle on get_user_byfunktio, jossa välität tietyn merkkijonon funktiolle, jonka tiedot haluat hakea, sekä tunnuksen (tai koko post-objektin, mutta kun tunnus riittää, miksi ei?).
Erona tässä on se, että noutat pyydetyn kentän arvon tai tyhjän merkkijonon (eikä virheen tai tyhjän tai epätosi), kun pyyntö epäonnistuu. Tämä tarkoittaa, että meidän on kirjoitettava ehdollinen tai vartijalauseke tällaisen tapauksen käsittelemiseksi.
Joten tämän toiminnon ja koodin täysi käyttötapaus voi vaatia pari toimintoa :
<?php
/**
* Generates a boolean value based on the presence of a post slug.
*
* @return bool True if there is a slug; otherwise, false.
*/
function hasPostSlug(): bool
{
return ('' === getPostSlug());
}
/**
* Retrieves the slug for the current post via the get_post_field
* API function.
*
* @return string the slug of the post.
*/
function getPostSlug(): string
{
return get_post_field('post_name', get_the_ID());
}
Nämä kaikki voidaan yhdistää näin:
<?php
if (hasPostSlug()) {
echo getPostSlug();
}
Tämäntyyppisen koodin jakamisen tarkoitus on auttaa jakamaan joitain vaihtoehtoja, joita meillä on globaaleille muuttujille, jotta voimme jakaa myös olemassa olevia mutta mahdollisesti vajaakäytössä olevia API-liittymiä.
