Nu folosi clase pentru namespacing

Nu folosi clase pentru namespacing

În lumea WordPress este recomandarea asta: toate funcțiile să fie prefixate de ceva. E.g. nu ai get_user_title() ci my_plugin_get_user_title(). Treaba asta evită tot felul de conflicte prezente și viitoare într-un sistem cu măruntaie antice.

Ca o paranteză: în WP nu exista get_post_type_archive_link(), prin urmare a apărut un plugin. Ghici ce s-a întâmplat când funcția a fost introdusă în core? Exact, servere pe butuci și clienți fericiți :D

Ai puțină clasă!

O alternativă la prefixarea funcțiilor? Le pui frumușel într-o clasă, le faci metode statice:

class MyPlugin
{
  public static function get_user_title(){}
  public static function get_site_admin_email(){}
}

În felul ăsta, le poți apela de oriunde: MyPlugin::get_site_admin_email(). Evităm conflicte, toată lumea e fericită. Call it a day, cum spun americanii.

Chiar dacă pare o idee bună, nu este. Pe termen lung, clasa se va lungi ad infinitum cu metode care nu au nici o legătura între ele. WPML avea la un moment dat o clasă de vreo 12.000 linii. Succes la debug!

OOP

În mod ideal, fă tot posibilul să te folosești de ceea ce oferă OOP. Tratează lucrurile ca pe obiecte și profită pe cât se poate de moșteniri, polimorfism șamd.

Ok, dar din varii motive nu vrei să faci asta, ci vrei să păstrezi funcții stand alone. Nu le prefixa, folosește de namespaces.

Namespace

O alternativă mai elegantă este să folosești… namespaces. Este un concept nou în PHP, abia are vreo zece ani ( :D ), prin urmare unii sunt oarecum reticienți în a folosi tehnologie de ultimă oră.

Poți converti codul de mai sus destul de simplu:

namespace MyPlugin;

public static function get_user_title(){}
public static function get_site_admin_email(){}

Bonus: Sub-namespace

Aceste namespace-uri pot avea… sub-namespace-uri, reflectând (opțional) structura ierarhică a fișierelor pe disc.

Prin urmare, poți grupează funcțiile pe responsabilități: ai o funcție ce adaugă un filtru? O pui în myPlugin\filters\wp\pre_get_posts(). O funcție pentru titlu? myPlugin\filters\wp\get_title() șamd.

2 Comentarii

Adaugă un comentariurăspuns pentru

Poți adăuga bucăți de cod folosind [code]codul tău aici[/code], [js][/js], [php][/php] etc.

Link-urile în context sunt binevenite. Comentariile fără nume/email valid sunt șterse.
PS: Comentariul NU este editabil.

Acest sit folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.

Site-ul blog.iamntz.com utilizează cookie-uri. Continuarea navigării presupune acceptarea lor. Mai multe informații.

windows apple dropbox facebook twitter