Grunnleggende PHP - Del 14 Innledning Dette er del 14 av min serie, Grunnleggende PHP. I PHP referanser er et middel for å få tilgang til samme variabel innhold (verdi) med forskjellige navn. Verdier (variabel innhold) blir holdt i minnesteder. En variabel identifiserer en minneplassering. En referanse er vanligvis brukes når du er mer interessert i hva som er i en minneplass og ikke variabelen. PHP referanse er forskjellig fra referanse i andre programmeringsspråk.
Når du leser denne artikkelen, unngå å gjøre sammenligning med hva du leser eller hva som finnes i andre programmeringsspråk, som C, som det kan forvirre deg. Jeg har gjort mitt beste for å sette dette i en logisk progressiv måte, så ta ting som jeg gir deg. Merk: Hvis du ikke kan se koden, eller hvis du tror noe mangler (ødelagt kobling, bilde fraværende), bare kontakte meg på [email protected]. Det er, kontakt meg for den minste problemet du har om hva du leser. Minne Beliggenhet En minneplass er et område i datamaskinens minne som holder verdien av en variabel.
En teknikk for å arbeide med en Memory Tenk på følgende uttalelse: $ var = 5; Verdien 5 er i en minnelokasjon. Du kan bruke den samme minneområde for å øke verdien på 5 til 8, ved å legge til 3. Du vil gjøre dette: $ var = $ var + 3; Hva skjer er dette: Datamaskinen vet at $ var identifiserer minneområde som har nummer 5. For høyre operand av ovennevnte uttalelse, går datamaskinen til minneplasseringen identifisert av $ var og legger 3 til hva som er der. Hva er det er 5. Når tre er lagt til, har du 8 i minneplasseringen identifisert av $ var.
Plasseringen med 8, som ble tildelt variabelen $ var, fremdeles er tilordnet den samme variable. Langs linjen, ingenting forandret oppdraget. Det samme prinsippet brukes på strenger, som i følgende eksempel: $ var = "one"; $ var = $ var. " to"; Legg merke til at i den andre setningen, er det et punkt mellom $ var og "to". Dette kalles dot operatør; det blir med to strenger sammen. I den første setningen, har $ var verdien, "en". Variabelen, identifiserer $ var plasseringen ha, "en".
I den andre setningen, for den høyre operand "to" er lagt til (sluttet) til dette stedet, for å gi strengen, «en to". Identifiseringen av denne plasseringen er ikke endret. Så $ var fortsatt identifiserer plasseringen. Stedet er fortsatt tildelt $ var. Så, for å modifisere innholdet av et sted, har vi benyttet det samme sted i stedet for to forskjellige steder. Ulike minnesteder med ulike variabler vurdere følgende to påfølgende uttalelser: $ myVar = "Jeg er innholdet i en stor tekstfil fra harddisken, nå i minnet."; $ Avar = "Jeg er innholdet i en stor tekstfil fra harddisken, nå i minnet.
"; Du har to forskjellige variabler med forskjellige navn, men med de samme strengverdier. En variabel identifiserer en minneplassering. To forskjellige variabler med to forskjellige navn identifiserer to forskjellige minneplasser, alt er likt. I det ovennevnte tilfelle, de to verdier, selv om de samme, er i to forskjellige minnesteder. Samme Memory Sted for to ulike variabler i PHP kan du gjøre det samme minneområde har to forskjellige variabler. De to forskjellige variabler vil selvsagt identifisere den samme verdi.
Vurdere følgende påfølgende to uttalelser: $ myVar = "Jeg er innholdet i en stor tekstfil fra harddisken, nå i minnet."; $ hisVar = & $ myVar; For det første utsagnet du har en verdi tilordne variabelen, $ myVar. I den andre setningen, er $ myVar innledes med & skilt før de blir tildelt en ny variabel, $ hisVar. & Er en operatør. I den andre setningen, den og føreren, før den første variabelen, gjør andre variable identifiserer samme minneplass (samme verdi) som den første variabel. En viktig ting å merke seg her er at & $ myVar refererer til en minneplassering innhold.
Du kan også si at & $ myVar refererer til verdien i minneplasseringen. For den andre setningen, og $ myVar, med og kan betraktes som en referanse, men $ hisVar kan ikke anses som en referanse; vær så snill, ta imot dette. $ hisVar er en variabel, ikke en referanse; bare godta dette. & $ myVar er tildelt (ikke likhetstegn) til $ hisVar og i ferd med å bli tildelt det gjør $ hisVar identifisere den samme minneområde som $ myVar; godta dette. Godta disse tre setninger jeg har nettopp gitt. Prøver å forstå hvorfor de er som kan få deg til ikke å forstå PHP henvisning.
Nå, hvis du skriver, $ myVar = "mann"; eller $ hisVar = "kvinne"; Innholdet i den samme minnelokasjon identifiseres ved $ myVar samt $ hisVar ville forandre seg. Den første setningen vil endre innholdet til "mannen" og den andre setningen ville endre den til "kvinne". Med å registrere som sådan, både $ myVar og $ hisVar identifisere samme verdi (minneområde). Ved hjelp av en referanse uten Pre-erklæring eller oppdrag i forrige avsnitt, og $ myVar ble tildelt $ hisVar, og $ myVar var allerede erklært. Du kan bruke en referanse uten pre-erklæring eller oppdrag.
En referanse består av og etterfulgt av en variabel navn. Den variable navn trenger ikke å eksistere før, som i ovennevnte tilfelle. I ovennevnte sak, har & $ myVar, der $ myVar eksisterte før deg. Du bruker slike referanser innen uttrykk og uttalelser. Du kan ikke begynne en setning med slik henvisning. Du kan ikke erklære en variabel med slik henvisning. Så du kan ikke gjøre dette: & $ ref = "noen verdi"; //galt når du har en referanse som & $ dommeren i en kodesegmentet, kan du tilordne den til en variabel indirekte.
Et argument, som er en variabel deklarert et eller annet sted, kan ha tilordnet en referanse, i løpet av et funksjonskall. Noe sånt som: $ theVar = myFn ($ var1); hvor $ var1 er en variabel deklarert sted (over) i koden. Funksjonen, myFn (), returnerer & $ ref under utførelsen, som er tildelt $ theVar. Vi kan si at dette oppdraget er gjort indirekte. En referanse refererer til et minneområde. Du kan bruke referansen til å gjøre hva du vil gjøre med minnet sted, for eksempel endring av innholdet på minneplassen.
Du kan ha tildelt indirekte henvisning til en variabel, og deretter bruke innholdet av minneplassen, gjennom den variable. I denne artikkelen innholdet på en minneplassering og verdi (bokstavelig), mener det samme. Når du vet betydningen av en referanse; som er ett stadium av forståelse henvisning. Det neste du må gjøre er å lære å bruke den. Les videre. Ulempen med å ikke bruke en referanse i visse situasjoner Tenk deg at du har en tekstfil i en harddisk, og innholdet i denne filen er nå i minnet. Du har kanskje dette innholdet som en streng, tildelt en variabel, på vanlig måte, i koden.
Hva du virkelig ønsker å gjøre med slikt stort innhold fra en fil, er å endre noe av sin tekst, slette noe av sin tekst eller legge noen ny tekst til innholdet. Etter at du lagrer innholdet tilbake, som en fil til harddisken, og du trenger ikke lenger innholdet i minnet. Følgende kode viser én måte å legge til (legg ved utgangen) tekst til slikt innhold (den har en ulempe): $ var1 = ". Jeg er innholdet i en stor tekstfil fra harddisken, nå i minne"; funksjon appendFn ($ var2) {$ var2 = $ var2. "Den siste teksten.
"; returnere $ var2; } $ Var1 = appendFn ($ var1); echo $ var1; ?> I begynnelsen av koden, har du variabel, $ var1. Til denne variabelen er tildelt en strengverdi. Denne strengverdien er kort, men la det representere innholdet i en stor tekstfil. Deretter må du funksjonen, appendFn (). Denne funksjonen legger strengen, "Den siste teksten." til strengen på variabelen, $ var1. Funksjonen kalles som følger: appendFn ($ var1) hvor variabelen, $ var1 sendes som argument. Funksjonen selv har parameter, $ var2. Når funksjonen kalles, identifiserer denne parameteren verdien av argumentet sendt.
Denne parameteren er faktisk en variabel forskjellig fra $ var1. $ var2 holder verdien av argumentet sendt av kallet uttalelse. Så like før funksjonen er utført, har du to forskjellige variabler som identifiserer samme verdi. Men ingen av disse variablene arbeider med å registrere, så du har samme verdi på to forskjellige steder i minnet. Ett av stedene er identifisert av $ var1 og den andre er identifisert ved $ var2. Denne statusen fortsetter til slutten av programmet kjøres. Det er to uttalelser i funksjonsdefinisjonen. Den første setningen legger strengen, "Den siste teksten.
" til verdien av den variable, $ var2. Den andre setningen returnerer verdien av variabelen, $ var2. Funksjonen ringer uttalelse i koden (utenfor funksjonsdefinisjonen) mottar denne verdien, og re-tilordner den til variabelen, $ var1. I denne koden, har ingen henvisning blitt offisielt brukt. Slik at de to variablene hver har sitt eget lagersted. En variabel er utenfor funksjonsdefinisjon, og den andre er på innsiden av funksjonsdefinisjon. Stedet for den variable utenfor funksjonsdefinisjonen, i utgangspunktet har en strengverdi.
Etter at funksjonen samtalen, har dette stedet en snor lagt til den. Stedet for den variable inne i funksjonsdefinisjon i utgangspunktet har strengen at plasseringen av den variable utsiden har. Den andre setningen i funksjonsdefinisjonen legger hyssing til stedet. Legg merke til at den teknikk som er beskrevet ovenfor er blitt benyttet her. Eksistensen av disse to stedene er en sløsing med minne. Med henvisning, kan disse to stedene reduseres til en plassering (se nedenfor). Nå er minne alltid mangelvare.
Det er som penger, uansett hvor mye du har, du har fortsatt grunner til å trenge mer penger. I koden ovenfor, har hele hukommelsen ikke benyttet økonomisk. Du må alltid prøve å bruke så lite minne som mulig når det er mulig. Vit at bruken på å registrere fører til en økonomisk bruk av minne og forbedret ytelse av koden din. Passerer en variabel med referanse Det finnes situasjoner når du trenger bare å henvise til et sted i minnet, er variabelen for minneplasseringen ikke veldig viktig.
Ville det ikke vært fint hvis du hadde en referanse som bare refererer til plasseringen av $ var1 variabelen i koden ovenfor. Du bruker referansen for å føye hyssing. Etter at funksjonen samtalen (statement) og utførelse av funksjonen, trenger du ikke referansen lenger. På denne måten vil du ha bare én minneplassering å håndtere; ikke to som før. Så du spare minne, og det er bedre ytelse. Følgende kode illustrerer dette (se forklaring nedenfor): $ var1 = "Jeg er innholdet i en stor tekstfil fra harddisken, nå i minnet."; fungere appendFn (& $ ref) {$ ref = $ ref. "Den siste teksten.
"; returnere $ ref; } $ Var1 = appendFn ($ var1); echo $ var1; ?> Koden og den forrige er like. Forskjellen ligger i funksjonsdefinisjonen. Når funksjonen kalles, er variabel, $ var1 sendt som argument. Parameteren av funksjonen er nå en referanse. Den variable delen ($ ref) i denne referansen var ikke tidligere erklært. Denne referansen er ikke tildelt en ny variabel og vil aldri bli tildelt, direkte (du vil aldri ha noe lignende, $ someVar = & $ ref). Det er imidlertid indirekte tilordnet $ var1 ved begynnelsen av gjennomføring av funksjonen.
Så som den funksjonen er utført, både $ var1 og & $ Dommeren mener det samme minneområde. Den delen av koden du anser som en referanse, begynner med &, etterfulgt av en variabel navn, f.eks $ ref, som starter med $ signert. Inne funksjonen definisjon, bruker du variabelnavnet del innledes med $ å løse plasseringen referert til av referansen. Som jeg sa over, etter å vite betydningen referanse, må du lære hvordan du bruker det. I denne koden, er $ ref inne funksjonsdefinisjonen henviser til samme sted som $ var1 utenfor.
Avkastningen uttalelsen bruker $ dommeren å returnere innhold (verdi) av minneplassen. Det bruker ikke & $ dommeren selv om & $ pipeblåser effektivt hva funksjonen samtale avkastning. Det skjer her, at kilde- og destinasjonsstedet av innholdet er det samme. Som du kan se, har vi kun brukt en minneplassering i stedet for to (som i forrige sak). Vi har oppnådd økonomi minne og forbedret ytelse. Funksjon Returnere en referanse i koden ovenfor, ble en referanse returnert. Det er imidlertid ikke alle tider når plasseringen av referanse er den samme som for den argument.
Noen funksjoner er kanskje ikke noe parameter (så får ingen argument), men du vil at den skal returnere en referanse. Funksjonen i følgende kode mottar ikke et argument. Funksjonen returnerer en referanse og i kallet uttalelse, er referansen indirekte tilordnet en variabel. funksjon og AFN () {$ myVar = "en verdi"; returnere $ myVar; } $ TheVar = AFN (); echo $ theVar; ?>