Object-Oriented Programming în WordPress Structuri de control II

Dacă ați urmărit cu noi în această serie, atunci fără îndoială știți că ne uităm la conceptele programării orientate obiect din perspectiva începătorului.

În mod specific, analizăm subiectul pentru cei care doresc să se familiarizeze cu paradigma, dar și cu modul de aplicare a conceptelor în contextul WordPress; cu toate acestea, înainte de a începe să lucrăm cu programarea orientată pe obiecte și WordPress, trebuie să punem fundația folosind caracteristicile de bază pe care le oferă PHP.

În cele din urmă, lucrăm la crearea unui exemplu practic de programare orientată obiect prin crearea unui plugin WordPress. Dar, înainte de a face acest lucru, mai sunt câteva lucruri pe care trebuie să le discutăm.

Dacă aceasta este prima dată când citiți această serie, atunci vă recomand să verificați articolele anterioare deoarece fiecare articol din această serie se bazează pe cel precedent. Dacă, pe de altă parte, sunteți o persoană mai familiarizată cu programarea orientată pe obiecte, atunci poate doriți să revizuiți seria odată ce intram în practică aplicarea ideilor.

Până în acest moment, am abordat următoarele subiecte.

  1. O introducere
  2. Clase
  3. Tipuri
  4. Structuri de control: declarații condiționate

În acest articol, vom încheia discuția noastră cu privire la structurile de control, analizând diferitele tipuri de bucle pe care le oferă PHP.

O analiză a structurilor de control

Dacă ați citit articolul precedent, amintiți-vă că "structurile de control" se referă la constructe care sunt furnizate de limba (în cazul nostru, PHP) care ne permit să modificăm modul în care codul se desfășoară pe întregul program pe baza unui număr de condiții.

În ultimul articol, ne-am uitat la modul în care putem face acest lucru prin utilizarea unor afirmații condiționale, care sunt afirmații care vor forța programul în jos pe o cale de execuție bazată pe o condiție (cum ar fi dacă o variabilă este setată, dacă o condiție este adevărată , si asa mai departe).

buclele

Dar nu este singurul tip de control pe care îl avem. În plus față de condiționalități, avem abilitatea de a itera (sau buclă) prin seturi de date, astfel încât să putem acționa asupra fiecărui element într-un set de date. Putem adăuga date, eliminăm datele, afișăm date, sortăm datele și multe altele.

De exemplu, să presupunem că avem un set de date, probabil un set de 10 postări, și că vrem să le rupem și să tipărim titlul și data fiecărui post. Buclele ne permit să facem acest lucru.

Oricare ar fi căutați să faceți acest lucru, există patru tipuri de bucle pe care le oferă PHP care ne permit să realizăm buclă prin seturi de date. În acest articol, vom arăta un exemplu de fiecare, precum și câteva nuanțe ale fiecăruia, astfel încât să avem încă un set de structuri de control pe care le putem folosi când vine momentul să începem să scriem cod orientat pe obiecte.

pentru buclele

pentru bucla este adesea considerată a fi cea mai complicată dintre bucle datorită naturii modului în care scrieți codul. Fluxul lui citește un pic nenatural.

În mod obișnuit, suntem obișnuiți să scriem codul în linie, astfel încât fiecare instrucțiune să fie setată pe o singură linie; cu toate acestea, cu pentru buclele, avem o abordare puțin diferită. În primul rând, voi împărtăși un exemplu de bază, vom acoperi aspectele acestuia și apoi vom analiza o abordare mai detaliată.

Iată un exemplu de bază care va conta la 10 și va afișa fiecare număr pe ecran în timp ce face acest lucru:

pentru ($ i = 0; $ i < 10; $i++ )  echo $i; 

În prima linie de buclă (în paranteze după pentru ), facem următoarele:

  • inițializând o variabilă $ i și stabilirea acesteia este egală cu zero
  • stabilind o condiție pentru ca aceasta să continue să ruleze în timp ce $ i < 10
  • incrementare $ i cu valoarea de 1 (folosind operatorul post-incrementare) după fiecare repetare

În corpul bucla, pur și simplu folosim PHP ecou pentru a imprima valoarea curentă a $ i. Pe măsură ce bucla procesează instrucțiunile, vom vedea 0 - 9 imprimate pe ecran (începând de la zero și executând în același timp) $ i este mai mică de 10).

Oamenii diferiți au tehnici diferite pentru modul în care citesc codul, deci strategia pe care am de gând să o recomand nu ar putea fi cea mai bună pentru tine, dar când citesc aceste tipuri de bucle, în mod normal le citesc în felul următor:

Cu $ i începând de la zero și în timp ce $ i este mai mic de 10, executați corpul bucla, apoi incrementați $ i cu 1. 

Captura este asta $ i poate începe la orice valoare, poate conta până la o sumă arbitrară și poate fi incrementată cu orice valoare. 

Cu ce ​​mai lucrăm cu noi pentru buclele, cu atât mai probabil veți prinde câteva lucruri care pot optimiza performanța. Pentru moment, totuși, elementele de bază ale bucla pentru au fost acoperite și tehnicile avansate sunt puțin în afara scopului acestui articol special.

pentru fiecare buclele

pentru fiecare buclele sunt similare cu cele pentru bucle pe măsură ce acestea se repetă printr-un set de date, dar fac acest lucru secvențial. Aceasta înseamnă că nu există nicio modalitate ușoară de a itera prin fiecare, să zicem, două elemente dintr-o listă (după cum puteți spune, de exemplu, $ i + 2 în pentru bucle).

Acest tip de buclă este, fără îndoială, cel mai lizibil. Pentru exemplul nostru, să presupunem că avem o matrice, iar matricea de date conține următoarele nume: Alpha, Bravo, Charlie, Delta, Echo și Foxtrot. Numele matricei este stocat într-o variabilă numită nume $.

În acest caz, putem configura a pentru fiecare buclă pentru a itera prin nume și afișa fiecare dintre ele pe ecran, astfel:

$ names = array ("Alpha", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot"); foreach (numele $ ca $ nume) echo $ name; 

Destul de ușor de configurat, nu-i așa??

Așa cum am împărtășit o modalitate de a citi originalul pentru în secțiunea anterioară, puteți citi textul pentru fiecare buclă în modul următor:

Pentru fiecare nume din colecția de nume, afișați-l pe ecran.

Sau, poate mai general:

Pentru fiecare element din colecție, afișați-l pe ecran.

Altceva?

Există și un alt aspect pentru fiecare care ar putea fi acoperită mai detaliat mai târziu în serie, însă ideea principală este că dacă sunteți familiarizat cu matricea asociativă, adică matrice indexate cu o cheie și care au o valoare asociată, puteți configura o pentru fiecare pentru a recupera fiecare cheie și valoare pentru fiecare iterație a buclei.

De exemplu, să presupunem că avem următoarea matrice asociativă:

$ heroes = array ('alien' => 'Superman', 'uman' => 'Batman');

Atunci când utilizați o matrice asociativă ca aceasta, puteți de asemenea să configurați a pentru fiecare cum ar fi:

foreach ($ eroi ca $ type => $ nume) echo $ nume. "este un". tip $; 

Acest lucru va duce la ieșirea citind ceva precum "Superman este un extraterestru", deoarece "Superman" este valoarea și "extraterestrul" este tipul lui (sau cheia lui). 

Forma mai generică a acestei bucle este următoarea:

foreach ($ collection ca $ key => valoare) // Lucrarea merge aici

Nimic de complicat.

in timp ce buclele

Cu variațiile de pentru bucle acoperite, este timpul să ne îndreptăm atenția in timp ce buclele din care există două variații (deși se numesc ceva diferit: in timp ce buclele și do buclele), dar ele diferă doar într-un mod minor.

Dar înainte de a ne uita la modul în care acestea diferă, să aruncăm o privire la in timp ce buclă, formatul său de bază, modul de utilizare și modul în care acesta se compară cu cel precedent pentru bucle.

În primul rând, formatul de bază al a in timp ce buclă este după cum urmează:

în timp ce (condiție) // nu lucrați

Observați că această bucla diferă de buclele noastre anterioare prin faptul că acceptă o condiție ca parte a declarației inițiale (de aici motivul pentru care am acoperit condiționările din ultimul nostru articol).

Buclele funcționează verificând mai întâi pentru a vedea dacă condiția este adevărată, executând blocul de cod în corpul buclei și apoi verificând din nou condiția. Aceasta înseamnă că in timp ce buclele pot face orice unitatea de lucru atâta timp cât condiția specificată este evaluată la adevărată. 

Deci, sigur, puteți trece printr-o listă de numere, puteți trece printr-o colecție de date, dar puteți face și anumite lucruri în timp ce, de exemplu, o valoare booleană este încă adevărată. Iar odată ce pavilionul ajunge la fals, atunci bucla în timp se va termina.

Să aruncăm o privire asupra unui exemplu în care descoperim elemente dintr-o matrice. Să presupunem că matricea inițială are 100 de elemente și că vom face acest lucru până când matricea va avea 50 de elemente rămase:

în timp ce (50! == count ($ elements)) array_pop ($ elements); 

Aici, condiția va continua să fie evaluată la adevărat până la numărul elementelor din elemente de $ array a fost redus la 50 de elemente.

Așa cum am făcut cu buclele anterioare, aceasta este o modalitate prin care puteți citi a in timp ce buclă:

În timp ce această condiție este adevărată, executați următorul cod.

Bineînțeles, asta se întâmplă în cod, oricum, nu-i așa??

do buclele

In cele din urma, do buclele sunt aproape exact ca in timp ce cu excepția cazului în care se va repeta cel puțin o dată înainte de verificarea stării.

Înainte de a arunca o privire la un exemplu, iată structura de bază a do buclă:

do work în timp ce (condiție);

Relativ clar, corect?

Deci, să stabilim un exemplu foarte simplu, care ne creează o matrice și o populație cu numere chiar și numai. Pentru a face acest lucru, avem nevoie de:

  • o matrice pentru a ține numerele
  • o variabilă care să țină de câte ori am repetat prin primele 100 de numere par

Cu acest lucru, se poate seta codul să arate astfel:

$ i = 1; $ even_numbers = array (); do if (0 === ($ i% 2)) $ even_numbers [] = $ i;  $ i ++;  în timp ce ($ i <= 100 );

Și în cele din urmă, ca și în restul buclelor, puteți citi aceste tipuri de bucle în felul următor:

Faceți următorul bloc de lucru, apoi verificați dacă următoarea condiție este adevărată. Dacă da, continuați să faceți lucrarea.

Altceva?

Cand vine vorba de do buclele, dacă lucrați cu o colecție, doriți să vă asigurați că colecția este nu gol înainte de a lucra la el, deoarece va executa codul în blocul bucla înainte de a verifica dacă condiția este adevărată. Acest lucru poate duce la erori dacă încercați să lucrați la un set de date gol.

Desigur, dacă asta intenționați să faceți, atunci una din celelalte bucle este optimizată mai bine pentru o astfel de operațiune.

Utilizați numai do bucle atunci când aveți un set de date sau o să faceți o procedură pe care o faceți ști trebuie să execute cel puțin o dată înainte de verificarea condiției care dictează numărul de execuții care ar trebui executate.

Ce urmeaza?

Cu această acoperire, am stabilit tot ce trebuie să facem pentru a începe să ne îndreptăm spre o discuție despre funcțiile, atributele, domeniul de aplicare și alte aspecte fundamentale ale programării orientate pe obiecte.

.

Cod