Objektorienterad programmering i WordPress Kontrollstrukturer II

Om du har spårat med oss ​​i hela serien ser du ingen tvekan om att vi tittar på begreppen objektorienterad programmering från nybörjarperspektivet.

Specifikt tittar vi på ämnet för dem som vill bekanta sig med paradigmet, men också med hur man tillämpar begreppen inom ramen för WordPress; dock innan vi börjar arbeta med objektorienterad programmering och WordPress, måste vi lägga grunden med de grundläggande funktionerna som PHP tillhandahåller.

I slutändan arbetar vi för att skapa ett praktiskt exempel på objektorienterad programmering genom att skapa ett WordPress-plugin. Men innan vi gör det finns det några fler saker som vi behöver diskutera.

Om det här är första gången du läser den här serien rekommenderar jag att du checkar ut de tidigare artiklarna, eftersom varje artikel i den här serien bygger på den före den. Om du däremot är någon som är mer bekant med objektorienterad programmering, så kanske du vill återkomma serien när vi kommer in i den praktiska tillämpningen av idéerna.

Hittills har vi behandlat följande ämnen.

  1. En introduktion
  2. Klasser
  3. typer
  4. Kontrollstrukturer: Villkorliga uttalanden

I den här artikeln ska vi sammanfoga vår diskussion om kontrollstrukturer genom att titta på de olika typerna av loopar som PHP tillhandahåller.

En översyn av kontrollstrukturer

Om du har läst den föregående artikeln kommer du ihåg att "kontrollstrukturer" avser konstruktioner som tillhandahålls av språket (i vårt fall, PHP) som gör det möjligt för oss att ändra hur kod under hela programmet baserat på ett antal villkor.

I den senaste artikeln såg vi på hur vi kan göra detta genom att använda villkorade uttalanden som är uttalanden som kommer att tvinga programmet ner en körningsväg baserad på en villkorlig (till exempel om en variabel är inställd om ett villkor är sant , och så vidare).

Loops

Men det är inte den enda kontrollen vi har. Förutom conditionals har vi möjlighet att iterera (eller loop) genom uppsättningar data så att vi kan vidta åtgärder på varje objekt i en uppsättning data. Vi kan lägga till data, ta bort data, visa data, sortera data och mycket mer.

Anta till exempel att vi har en uppsättning data, kanske en uppsättning av 10 inlägg, och att vi vill gå igenom och skriva ut titeln och datumet för varje inlägg. Loops tillåter oss att göra detta.

Vad det än är som du vill göra finns det fyra typer av slingor som PHP ger som tillåter oss att slingra igenom uppsättningar av data. I den här artikeln ska vi se ett exempel på varje och några nyanser av var och en så att vi har ännu en uppsättning kontrollstrukturer som vi kan använda när tiden börjar börja skriva objektorienterad kod.

för Loops

De för slingan anses ofta vara den mest komplicerade av slingorna på grund av hur du skriver koden. Flödet av det läser lite onaturligt.

Vanligtvis brukar vi skriva kodlinje så att varje instruktion är inställd på en enda rad. dock med för slingor, vi har en något annorlunda inställning. Först ska jag dela ett grundläggande exempel, vi kommer att täcka aspekterna av det, och sedan tittar vi på ett mer detaljerat tillvägagångssätt.

Här är ett grundläggande exempel som räknas till 10 och kommer att visa varje nummer på skärmen som det gör så:

för ($ i = 0; $ i < 10; $i++ )  echo $i; 

I den första linjen i slingan (inom parentesen efter för uttalande), gör vi följande:

  • initiering av en variabel $ i och ställa in det lika med noll
  • ställer in ett villkor för att detta ska fortsätta springa under $ i < 10
  • inkrementering $ i med värdet 1 (med hjälp av operatören efter inkrement) efter varje iteration

I loopens kropp använder vi helt enkelt PHP eko funktion för att skriva ut nuvärdet av $ i. Eftersom slingan behandlar instruktionerna ser vi 0 - 9 utskrivna på skärmen (eftersom vi börjar noll och kör medan $ i är mindre än 10).

Olika människor har olika tekniker för hur de läser kod, så den strategi som jag ska rekommendera kanske inte är bäst för dig, men när jag läser dessa typer av slingor läser jag normalt dem så här:

Med $ i börjar jag med noll, och medan $ i är mindre än 10, kör kroppens loop och öka sedan $ i med 1. 

Fångsten är det $ i kan börja med något värde, kan räkna upp till ett godtyckligt belopp och kan ökas med vilket värde som helst. 

Ju mer arbete vi gör med för slingor, desto mer sannolikt kommer du att fånga några saker som kan optimera prestanda. För nu har dock grunderna i förbandet blivit täckta och avancerade tekniker ligger lite utanför ramen för den här artikeln.

för varje Loops

för varje slingor liknar för slingor som de itererar genom en dataset, men de gör det i följd. Det betyder att det inte finns något enkelt sätt att iterera genom varje, säg två objekt i en lista (som du kan med, säg, $ i + 2 i för slingor).

Denna typ av slinga är utan tvekan den läsbaraste. För vårt exempel, låt oss anta att vi har en matris och datamängden innehåller följande namn: Alpha, Bravo, Charlie, Delta, Echo och Foxtrot. Namnet på arrayen lagras i en uppringd variabel $ namn.

I det här fallet kan vi installera en för varje loop för att iterera genom namnen och visa var och en av dem på skärmen så här:

$ names = array ('Alpha', 'Bravo', 'Charlie', 'Delta', 'Echo', 'Foxtrot'); foreach ($ namn som $ namn) echo $ name; 

Ganska lätt att installera, är det inte?

Precis som vi delade ett sätt att läsa in initialen för loop i föregående avsnitt, kan du läsa för varje slinga på följande sätt:

För varje namn i samlingen av namn, visa det på skärmen.

Eller kanske mer generellt:

För varje element i samlingen, visa den på skärmen.

Något annat?

Det finns en annan aspekt till för varje loop som vi kan omfatta mer detaljerat senare i serien, men huvudidén är att om du är bekant med associativ array, det vill säga arrayer som är indexerade med en nyckel och som har ett associerat värde, kan du konfigurera en för varje slinga för att hämta varje nyckel och värde för varje iteration av slingan.

Låt oss till exempel säga att vi har följande associativa array:

$ hjältar = array ('alien' => 'Superman', 'human' => 'Batman');

När du använder en associativ array så här kan du också konfigurera en för varje slinga så här:

foreach ($ hjältar som $ type => $ namn) echo $ name. ' är en ' . typ $; 

Detta kommer att resultera i att produktionen läser något som "Superman är en främling" eftersom "Superman" är värdet och "alien" är hans typ (eller hans nyckel). 

Den mer generiska formen av den här slingan är som följer:

foreach ($ samling som $ key => värde) // Arbetet går här

Ingenting fruktansvärt komplicerat.

medan Loops

Med variationerna av för loopar täckt, det är dags att rikta vår uppmärksamhet åt medan slingor av vilka det finns två variationer (även om de kallas något annat: medan slingor och do slingor), men de skiljer sig bara på ett mindre sätt.

Men innan vi tittar på hur de skiljer sig, låt oss ta en titt på medan loop, dess grundläggande format, hur man använder det och hur det jämförs med det föregående för slingor.

Först, det grundläggande formatet av a medan slingan är enligt följande:

medan (villkor) // arbeta

Observera att denna slinga skiljer sig från våra tidigare slingor genom att den accepterar en villkorlig del av det ursprungliga uttalandet (alltså anledningen till att vi täckte villkor i vår senaste artikel).

Slingan fungerar genom att först kontrollera om villkoret är sant, exekvera kvarterskoden i slingkroppen och sedan kontrollera tillståndet igen. Detta innebär att medan slingor kan göra några arbetsenhet så länge det angivna villkoret utvärderas till sant. 

Så, säkert, du kan iterera genom en lista med siffror, springa igenom en samling data, men du kan också göra vissa saker, medan ett booleskt värde fortfarande är sant. Och när flaggan når falsk, så kommer slingan att avslutas.

Låt oss titta på ett exempel där vi delar ut element från en matris. Låt oss anta att den ursprungliga matrisen har 100 element och att vi gör detta tills matrisen har 50 element kvar:

medan (50! == count ($ elements)) array_pop ($ element); 

Här kommer villkoret att fortsätta utvärdera till sant tills antalet objekt i $ element array har reducerats till 50 objekt.

Som vi har gjort med tidigare loopar är detta ett sätt att du kan läsa en medan slinga:

Medan detta villkor är sant, kör följande kod.

Självklart, så är det hur det ser ut i kod ändå, är det inte?

do Loops

Till sist, do slingor är nästan exakt tycka om medan slingor förutom att det kommer att iterera minst en gång innan du kontrollerar tillståndet.

Innan vi tittar på ett exempel är här grundstrukturen för do slinga:

gör // arbeta medan (villkor);

Relativt tydligt, rätt?

Så låt oss installera ett mycket grundläggande exempel som har oss att skapa en array och att fylla i det med lika många siffror. För att göra detta behöver vi:

  • en matris för att hålla siffrorna
  • en variabel för att hålla vad hur många gånger vi har iterated genom de första 100 jämnt antal

Med det sagt kan man ställa in koden så att den ser ut så här:

$ i = 1; $ even_numbers = array (); gör if (0 === ($ i% 2)) $ even_numbers [] = $ i;  $ i ++;  medan ($ i <= 100 );

Och äntligen, som med resten av slingorna, kan du läsa dessa slingor på följande sätt:

Gör följande arbetsblock och kontrollera om följande villkor är sanna. Om så är fallet, fortsätt arbetet.

Något annat?

När det kommer till do slingor, om du arbetar med en samling, vill du vara säker på att samlingen är inte töm innan du arbetar på det eftersom det kommer att köra koden i blocket av slingan innan du kontrollerar om villkoret är sant. Det kan leda till fel om du försöker arbeta med en datasättning som är tom.

Naturligtvis, om det är vad du planerar att göra, är en av de andra looparna bättre optimerad för den typen av operation.

Använd bara do loopar när du har en uppsättning data eller du kommer att utföra ett förfarande som du känna till måste genomföras åtminstone en gång innan man kontrollerar villkoret som dikterar antalet avrättningar som ska utföras.

Vad kommer härnäst?

Med det här har vi lagt fram allt vi behöver göra för att börja flytta in i en diskussion om funktioner, attribut, omfattning och andra grundaspekter av objektorienterad programmering.

.