Når vi fortsetter vår diskusjon av objektorientert programmering innenfor WordPress-sammenheng, er det på tide for oss å begynne å snakke om faktiske funksjoner ved objektorientert programmering.
Selv om vi allerede har dekket klasser, trengte vi å utforske noen grunnleggende programmeringskonstruksjoner før vi kom tilbake til noen av de kjerneobjektorienterte konseptene.
I denne artikkelen skal vi begynne å snakke om funksjoner og attributter: To grunnleggende aspekter ved objektorientert programmering. Men først, sørg for at du er helt opptatt av de forrige artiklene:
Et av poengene jeg vil gjenta om denne serien er at vi jobber med å undersøke objektorientert programmering innenfor WordPress-sammenheng ved å starte fra de absolutte grunnleggende aspektene ved programmering.
Vi gjør dette for å sikre at de som er nybegynnere til programmering, har alt de trenger ikke bare for å komme i gang med programmering, men også å lære paradigmet og til slutt jobbe med å bygge et WordPress-plugin.
Med det sagt, la oss gjenoppta diskusjonen vår ved å snakke om funksjoner og attributter.
For de som er kjent med prosedyreprogrammering, er du uten tvil kjent med funksjoner - tross alt, de er hvordan du får jobbet, riktig?
Men for de som bare hopper inn i programmering, er det to ting å forstå om funksjoner:
Til det andre punktet er det sant at mye av det vi diskuterte før - det vil si variabler, conditionals, sløyfer og så videre - er ansvarlig for å fullføre et enkelthetsarbeid også; Men hver av dem jobber sammen med hverandre for å oppnå noe litt større enn seg selv.
Avhengig av språket, er du også sannsynlig å høre disse referert til som metoder eller rutiner. Uansett hvilken terminologi som brukes, er poenget at funksjoner bruker grunnleggende konstruksjoner for å fullføre en handling.
Funksjoner kan fungere på tre måter:
Vi tar en nærmere titt på hvert av disse scenariene i et øyeblikk, og i en fremtidig artikkel skal vi se hvordan de jobber i klassen. For nå, la oss ta en titt på hvordan funksjoner fungerer i PHP og flere nyanser om hver av dem.
Husk fra det forrige avsnitt at det er tider der vi kan definere funksjoner som ikke aksepterer noen inngang, heller ikke de returnerer noen informasjon.
I slike tilfeller vil disse typer funksjoner vanligvis utføre en type operasjon (for eksempel å oppdatere et alternativ i databasen) og de vil bli påkalt av en annen funksjon etter at en bestemt operasjon har fullført.
Så, for eksempel, la oss si at vi har en funksjon som vi vil bruke til å oppdatere den underliggende WordPress-databasen. Dette krever at vi vet flere ting:
update_option
I vårt tilfelle, la oss si at vi vil oppdatere en verdi i databasen som er identifisert av blog_last_updated
nøkkel. Da bruker vi PHP-funksjonen tid()
for å lagre tiden når funksjonen kalles.
Med det sagt, la oss definere vår funksjon:
Basert på beskrivelsen som vi har gitt ovenfor, kan du se at kroppens funksjon bruker
update_option
WordPress API-funksjonen med den angitte nøkkelen og verdien som vi beskrev.Dette kan deretter påberopes av et annet stykke kode ved ganske enkelt å ringe
set_blog_updated ();
.argumenter
Funksjoner som ikke godtar argumenter, kan bare være nyttige til et bestemt nivå. På et tidspunkt må du kunne sende informasjon til en funksjon slik at den kan utføre noen form for beregning, drift eller evaluering av informasjonen.
I samsvar med vårt eksempel over, la oss si at vi fortsatt vil oppdatere databasen med en tidsstempel, men bare hvis en bestemt nøkkel blir sendt inn i funksjonen; Ellers vil vi ikke gjøre noe.
Legg merke til at funksjons signaturen - det vil si navnet på funksjonen og dataene i parentesene - har blitt oppdatert for å godta en variabel som refereres av
$ nøkkel
.Deretter bruker funksjonen en betingelse for å kontrollere verdien av variabelen er lik den for nøkkelen som vi så på i den første versjonen av funksjonen. For å gjøre en enkel sammenligning, reduserer den verdien av
$ nøkkel
ved hjelp av php sstrtolower
funksjon.Dette betyr at vi kan påberope funksjonen på følgende måte og fortsatt ha det oppdatert:
set_blog_updated ('BLOG_LAST_UPDATED');
set_blog_updated ('Blog_Last_Updated');
set_blog_updated ('blog_last_updated');
Alle de ovennevnte funksjonsanropene utfører følgende operasjon; Hvis vi skulle passere noe annet i funksjonen, ville betingelsene imidlertid evaluere til falsk
og ville ikke brann oppdateringsfunksjonen.
For eksempel ringer set_blog_updated ('not_now');
ville ikke arbeid.
La oss nå si at vi vil ha funksjonen som vi jobber for å returnere en verdi. Spesielt, la oss si at vi ønsket å returnere en verdi på om oppdateringsfunksjonen ble avfyrt eller ikke.
For å gjøre dette kan vi dra nytte av en funksjon komme tilbake
setningen samt verdien som funksjonen update_option returnerer. Ifølge WordPress Codex, update_option
vil returnere følgende:
True hvis alternativverdien er endret, falsk hvis ikke eller hvis oppdateringen mislyktes.
For det formål kan vi justere vår funksjon for å fungere slik:
Nå har vi en funksjon som aksepterer et argument, returnerer en verdi, og utnytter også en betinget, ikke bare for å oppdatere verdien, men også for å sikre at verdien ble oppdatert.
Gitt funksjonen ovenfor kan vi påberope det som vi har i tidligere eksempler, men nå kan vi lagre det som resultat i en variabel som gjør at vi kan forbedre koden i vårt program.
For eksempel kan vi fortsette å ringe funksjonen ved å si
set_blog_last_updated ('blog_last_updated');
men nå kan vi også lagre resultatet av funksjonen i en variabel.For å gjøre dette, er alt vi trenger å gjøre, å skrive en linje med kode som utfører følgende:
$ blog_was_updated = set_blog_last_updated ('blog_last_updated');
I dette tilfellet er variabelen$ blog_was_updated
vil bli satt tilekte
hvis tilstanden kjørte, og oppdateringssamtalen var vellykket, men vil værefalsk
hvis tilstanden ikke løp eller hvis den kjørte, menupdate_function
mislyktes.Variable-Length Arguments
Det er et annet aspekt av funksjoner som er utenfor omfanget av denne spesifikke artikkelen, og det er argumenter med variabel lengde. Kort sagt, det er en måte at en funksjon kan akseptere en rekke argumenter som vi ikke kan forutse mens du skriver kode.
Hvis du er interessert i å lese fremover, kan du sjekke ut artikkelen i PHP-håndboken. Vi ser imidlertid til å dekke dette senere i serien.
Egenskaper
På dette punktet skal vi flytte gir og snakke om noe som er rent relatert til objektorientert programmering, og det er klassegenskaper.
Husk fra vår diskusjon om klasser at vi så på en prøveklasse for a
Blogg innlegg
. Til referanse så koden slik ut:klasse Blog_Post privat $ forfatter; privat $ publish_date; privat $ er_publisert; offentlig funksjon publisering () // Publiser artikkelen her offentlig funksjon slette () // Slett artikkelen herPå dette punktet i serien, bør du enkelt kunne identifisere klasses Definisjon, Funksjonsdefinisjon og attributter.
Spesifikt er attributter de tre variablene som finnes øverst på filen over funksjonene. Som nevnt i artikkelen om klasser, kan attributter betraktes som de adjektiver som beskriver klassen.
I eksemplet ovenfor har vi en klasse som representerer et blogginnlegg, og et blogginnlegg kan beskrives av forfatteren, publiseringsdatoen, og om det er publisert eller ikke..
Disse spesifikke verdiene er ikke noe annet enn variabler som vi har sett på tidligere i serien, og de kan holde en hvilken som helst type verdi, enten det er en primitiv datatype som en streng, heltall, boolesk eller den kan referere til en mer kompleks datatype som sådan som en matrise eller et annet objekt.
Poenget med attributter er at de eksisterer på klassenivå. Dette betyr at variablene kan brukes i noen av funksjonene som er definert i klassen - de behøver ikke å bli overført som funksjonsargumenter, og de kan oppdateres for å gjenspeile tilstanden til objektet når som helst under dens runtime.
Nå, når det gjelder hvordan de er satt, dette gjøres i sammenheng med en spesiell type funksjon kalt en konstruktør. Kort sagt, en konstruktør er en funksjon som er avsatt spesielt for initialisering av en klasse, og i mange tilfeller er den vant til å starte verdier.
I PHP er en konstruktør en funksjon som heter
__construct
som er et reservert ord på språket. Så gitt egenskapene ovenfor og vår primer på funksjoner, her er hvordan vi kan gå om å initialisere våre attributter:klasse Blog_Post privat $ forfatter; privat $ publish_date; privat $ er_publisert; offentlig funksjon __construct () $ this-> author = "; $ this-> publish_date = null; $ this-> is_published = false; offentlig funksjon publisering () // Publiser artikkelen her // Slett artikkelen herEn av de viktigste tingene å ta bort fra koden ovenfor er at attributter er referanser litt annerledes enn normale variabler. Merk spesielt at de er referert ved hjelp av
$ dette
søkeord. Dette er hva som skiller attributter fra normale variabler innenfor en klasses Definisjon.For det andre, merk at variablene som settes til innledende verdier. Som det står akkurat nå, vil hvert blogginnlegg som er opprettet vilje ikke ha en forfatter som er spesifisert, det vil ikke har en publiseringsdato, og det vil ikke har en status for å bli publisert.
Når vi drar videre til diskusjonen om objektorientert programmering, skal vi snakke om hvordan variabler er satt, hvordan de kan brukes i hele klassen, hvordan de kan settes, hentes osv..
Offentlig, Privat og Hva?
For de stakkars leserne har du sannsynligvis lagt merke til at søkeordene blir brukt i hele koden, for eksempel
offentlig
ogprivat
. Det er også et annet søkeord som brukes innen objektorientert programmering, og det erbeskyttet
.Vi snakker om hver av disse i detalj i neste artikkel.
Nestemann
Som vi nettopp nevnte, er det en rekke søkeord som brukes til å referere til attributter og funksjoner som alle har å gjøre med det som er kjent som omfang. I neste artikkel skal vi begynne å utforske variabel og funksjonsomfang som er en kjerneidee i objektorientert programmering.
Så som vi har dekket alle grunnleggende elementene i programmering i PHP, blir vi nå klar til å flytte mer inn i objektorientert programmering, hvorefter vi skal bevege oss inn i å anvende konsepter og teknikker i WordPress-utvikling.