[Powered by Google Translate] [Uke 9] [David J. Malan - Harvard University] [Dette er CS50. - CS50.TV] OK. Velkommen tilbake. Dette er CS50, og dette er begynnelsen av uke 9. I dag har vi spesielt fokusere på design, ikke lenger i sammenheng med C men i sammenheng med PHP og en bit av SQL og litt av JavaScript, spesielt mot slutten av både pset 7 og også det endelige prosjektet. Faktisk, hvis du er på det punktet i det endelige prosjektet hvor antakelig som for en time eller så siden du minst begynte å gi noen trodde til det endelige prosjektet, og du tenker at du har lyst til å samarbeide med en eller to klassekamerater, hvis du har problemer med å koble med sa klassekamerater, gjerne til å fylle ut skjemaet på cs50.net/partners/form. Det stiller bare deg hvem du er, hva slags prosjekt du tenker, hvor du bor bare for logistiske årsaker. Og hvis du ønsker å holde et øye med over neste uke eller så regnearket URL der, du kan da se en skrivebeskyttet versjon av Google doc der vi samle denne informasjonen. Så hvis du ønsker å jobbe med noen, for all del gjerne nå ut til folk via den mekanismen. Men flertallet av folk gjør arbeidet solo. Det er helt greit. Så føler ikke at dette på noen måte er obligatorisk. På fredag ​​var det bare meg og noen av teamet her, tom teater for det meste. Det var 3 turister sitter oppe, så det var litt vanskelig. Hva vi snakket om var databaser og vi snakket om pset 7 litt. Og hvis du ikke skje for å fange det på video ennå, er det helt greit. Jeg skal prøve å definere noen begreper som vi ellers ville ta for gitt basert på fredagens forelesning. Men i dag skal vi prøve å få deg til det punktet av ikke bare å være i stand til å gjøre noe sånt pset 7 men virkelig forstå hva som skjer under panseret, særlig noen av de abstraksjoner som vi satt på plass i functions.php fil for å gjøre livet litt enklere, men slik at du til slutt forstår slik at når trening hjul komme seg i et par uker kan du likevel overleve i den virkelige verden og gjøre slike ting uten CS50 rammeverk under deg. Denne $ _SESSION, for de av dere som er kjent eller som allerede fanget video på fredag, hva SESSION la oss gjøre i en PHP-basert web-applikasjon? Dette er en superglobal variabel, som betyr at det er lik i ånden til GET og POST og noen få andre, men hva er dette tingen nyttig for? Hva er SESSION til? Ja. [Student] Logger inn Beklager? [Student] Logger inn Logger inn Indeed. I pset 7 bruker vi denne SESSION superglobal å lette logge inn Og hva er fint om dette superglobal er at det er en assosiativ array. En assosiativ array, tilbakekalling, er bare en matrise, men hvis indeksene ikke lenger å være tall som 012. De kan være tall eller de kan være selv strenger. Og så hvis du har dykket inn pset 7 ennå, kan du huske at vi lagrer en nøkkel kalt ID innsiden av denne assosiativ array hvis verdi er noe som 123 - uansett påloggede brukeren ID-er. Motivasjonen for dette er at selv etter at brukeren har besøkt localhost eller min hjemmeside mer generelt og de har logget inn, selv om de ikke klikker på en lenke eller gå tilbake til min hjemmeside i 5 minutter eller enda en time eller en dag, men de forlater sitt nettleservindu åpent, via denne superglobal kan jeg huske at de er logget inn Med andre ord, gjør det meg å lagre litt langsiktig hva jeg vil om en bruker. Og du kan tenke på det egentlig som inkarnasjonen av en handlevogn. Steder som Amazon åpenbart lar deg sette ting i en handlekurv, men HTTP, protokollen som driver nettet, er statsløs i den forstand at når du besøker et nettsted, for det meste du ikke har noen konstant nettverkstilkobling mellom nettleseren og serveren. Så snart du har lastet ned HTML og JPEG og GIF og alt det der, forbindelsen blir borte og du trenger bare en kopi av HTML og whatnot fra serveren. Men hvis serveren ønsker å huske noe om deg, byrden er på serveren til å faktisk spille denne informasjonen. Og så du programmerer som har kontroll over serveren kan sette de fleste noe du ønsker innsiden av dette superglobal assosiativ array og det vil være det neste gang brukeren kommer tilbake, enten det er minutter eller til og med dager senere, med mindre de stenge sin nettleservinduet, noe som medførte at SESSION forsvinner. Så det er flyktig lagring, er det ikke vedvarende, og det er ment å gå bort så snart brukeren lukker nettleseren - ikke bare den fanen, ofte hele nettleseren, dermed effektivt logger brukeren ut. Så hvordan er dette tingen faktisk blir gjennomført? La oss ta en rask titt på et enkelt eksempel vi så på fredag. For de som ikke kjenner, var det så enkelt som dette. Dette er en nettside der det eneste mål i livet er å fortelle meg hvor mange ganger jeg har besøkt denne siden. Dette er første gang her på mandag at jeg besøkte den, så det sier 0 ganger. Men hvis jeg begynner omlasting denne siden, sier det en gang, 2, 3, 4, 5, og dette vil til slutt bare holde på å telle opp, opp, opp, opp, opp for hver gang jeg faktisk klikker Last på den. Så hvordan er dette arbeidet? La meg gå inn i denne filen som heter counter.php. Den øverste delen av det er alle blå kommentarer, men interessante er her. På linje 13 kaller vi denne funksjonen session_start, og det er bokstavelig talt alt du trenger å gjøre hvis du ønsker å ha tilgang til denne spesielle superglobal kalt $ _SESSION. Det gjør det hele mulig, og vi vil se i et øyeblikk hvor det er alt mulig. I linje 16 varsel hva jeg gjør. Hvis nøkkelen, kalt teller - med andre ord, indeksverdien - "counter" Det finnes inne i denne array kalt SESSION, så hva gjør jeg med det i linjen under? Hva er linje 18 gjør? [Uhørlig student respons] Hva er det? [Student] Lagre verdien. Bra. Det er lagring av verdien som er i SESSION akkurat nå i en ny lokal midlertidig variabel, $ Teller i alle små bokstaver. Legg merke til at PHP er allerede å være litt lat her. Legg merke til at vi ikke har noen omtale av int eller flyte eller hyssing eller noe sånt fordi PHP er svakt skrevet, hvor du ikke trenger å spesifisere hvilken type en variabel, og i dette tilfellet her ikke jeg har selv erklært det ennå. Jeg erklærer det innsiden av disse klammeparentes og i motsetning til C, dette er faktisk greit. Uansett hvor dypt nestet en variabel erklæring er i PHP - innsiden av krøllete spenne, innsiden av krøllete seler og lignende - det vil i det øyeblikk i tid finnes for resten av programmet, for bedre eller verre. Så det blir umiddelbart global så snart du definerer det som vi gjør her. Ellers, hvis jeg ikke finner at det er noe i SESSION superglobal, Jeg tydeligvis initialisering denne variabelen teller til 0, dermed bare forutsatt at brukeren har aldri vært her før. Og så dette selvfølgelig er inkrementering telleren hvordan? Jeg oppdaterer verdien som er inne i dette assosiativ array ved å sette den lik uansett teller i dag er + 1. Hvis jeg ruller nedover hit til HTML på siden, det er faktisk ganske enkelt. Alt jeg har i kroppen av denne siden er: "Du har besøkt dette området så-og-så ganger." Og dette er en PHP konstruksjon. Hvis du gjør