[MUSIC SPILLE] SPEAKER 1: Dette er CS50 og Dette er slutten av uken syv. I dag er kanskje der vi virkelig lærer deg språk. Vi introduserte i de siste par uker HTML og CSS, verken som er programmeringsspråk. Og ja, selv om vi ikke se på nesten alle kodene som HTML kommer med og nesten alle av eiendommene som CSS kommer med, det er slags det for HTML og CSS. Vi vil bare generelt starte forutsatt at du forstå de generelle ideer av koder og attributter, og sider som sendes fra klient til server. Fordi i dag begynner vi å se på et annet programmeringsspråk, PHP. Vi kommer til å gjøre dette super rask. Vi kommer ikke til å lære deg PHP per se, mye som vi ikke strebe etter å lære deg C, per se, men heller programmering. Og ja, en av de mål for dette kurset er ikke å lære deg C, eller HTML eller CSS, eller PHP, eller hvilket som helst antall annen buzz ord eller akronymer, men heller informatikk og hvordan du kan programmere fundamentalt. Og ja, i dag skal vi begynne å ta disse støttehjulene av alle ytterligere ved å fly gjennom en språket heter PHP, som følger. Her er hva dette språket ser ut. Det viser seg at det ikke er behov for en hovedfunksjon i et program som er skrevet på et språk som heter PHP. Så det allerede høres litt enklere enn C, som vi er kjent. Det viser seg at hvis du ønsker å erklære en variabel, du gjør det nesten identisk til C. Men det er helt klart en forskjell her når jeg erklære en streng, eller kanskje to forskjeller. Hva ser annerledes? PUBLIKUM: Dollartegnet. SPEAKER 1: Ja, det er dollar signere, som vi aldri har sett før. Og hva som mangler? Yeah? PUBLIKUM: [uhørbart] SPEAKER 1: Ja, det er ingen datatype. Så det viser seg at PHP er hva vi kalle en løst skrevet språk, der C er sterkt skrevet. Løst skrevet betyr bare at det er forskjellige datatyper, det er strenger, og ints, og flyter. Men datamaskinen tall som ut. Du menneske programmerer trenger ikke å finne ut av det. Så alt du trenger å gjøre å erklære en variabel er dollartegn, navnet på variabel, og deretter, for eksempel, quote unquote, hallo verden. Vel, dette er hva en tilstand ser ut i PHP. Eventuelle forskjeller? Nei. Så det viser seg disse er identiske. Og du kan ha færre grener eller flere grener, men syntaks svingene ut nøyaktig den samme. Boolske uttrykk kan bestilles sammen. Boolske uttrykk kan-koblet sammen. Du har fortsatt brytere. Selv om du ikke har brukt disse, disse finnes i C og de er funksjonelt tilsvarende i PHP. Og faktisk, i PHP de er litt kraftigere. I C, kan du bare sammenligne viss datatyper som ints og tegn, mens i PHP kan du faktisk sammenligne full flygedyktige strenger uten å ha å bekymre seg for pekere og lignende. Så her er en for loop. Dette er bare pseudo kode, hvis du vil. Men strukturelt det er identisk med C. Her er en stund loop, pseudo therefore-- identisk med C. Her er en gjør mens loop-- identiske. Og så det er slags dette mønsteret her hvor det er noen annen syntaktisk funksjonene vi faktisk kommer til å se. Faktisk er her en fin måte i PHP der, Hvis du ønsker å reagere over en tabell, og du ønsker ikke å hoppe gjennom mentale og syntaktiske hoops å ha int i lik 0, i mindre enn n, jeg pluss plus-- som er bare en masse irriterende syntaks. Du kan si litt mer flyter bedre for hver tall som nummer, hvor i dette tilfellet dollar sign tall, jeg antar, er som en matrise kalles tall. Og så jeg antar nummer, entall, kommer til å være en variabel. Og hva PHP vil gjøre for meg som jeg iterere over denne sløyfe er, på hver iterasjon, det kommer oppdatere variabelt antall til være ith element i antall, flertall. Så det bare håndterer alt dette for meg. Ingen hakeparentes, ingen dollartegn, ingen semikolon. Det er bare litt enklere. Vel, hvis du ønsker en array, viser det seg at du kan gjøre noe ganske lik C. Syntaksen er litt annerledes. Men her er et utvalg kalt dollar signert tall. Og jeg bruker, i PHP, firkantet braketter, viser det seg. Og vi kommer til å se disse igjen i JavaScript-- enda et språk. Jeg bare bruke hakeparentes notasjon å ha en kommaseparert liste av heltall, i dette tilfellet. Men det gir meg en matrise. Men enda kraftigere i PHP, vi har også det er generelt kalles assosiative arrays. Og mange språk har disse også. Saken om C arrays er at indeksene for en matrise, ting som du bruker i hakeparentes via som du tilgang elementer, må være hva? PUBLIKUM: [uhørbart] SPEAKER 1: De må være tall eller heltall, spesielt fra null på opp. Vel, i PHP, og viser det ut, i andre språk, du kan begynne å ha indekser som ikke er numerisk. Men de er faktisk ord eller setninger, slik at i stedet prøver å huske hvor noe er, eller lagres i en variabel i, du kan faktisk bruke et ord og si at-- du kan si et ord som dette. Så dollartegn sitat er navnet på en variabel her. Dette er noe funky syntaks det er å knytte to viktige verdi par for denne variabelen. Spesielt er dette gir meg en matrise som er av lengde 2. Men indeksene ikke er 0 og 1. Indeksene er sitat unquote symbol og quote unquote pris. Og verdiene av disse indekser henholdsvis er FB for Facebook og $ 79,53, da jeg vare sjekket en pris for dette. Hva betyr det? Vel, betyr det at i stedet for å skrive kode som dette, hvor jeg pleide å gjøre noe som dollar sign-- eller rettere sagt, i C Jeg ville ikke engang ha et dollartegn. Jeg ville gjøre noe som sitater og deretter Jeg ville gjøre braketten jeg å komme på noen vilkårlig numerisk indeksert verdi. Starter i dag i PHP, hvis du ønsker å komme på noen verdi, vi liksom har mer semantisk uttrykksfullhet. Bare en fancy måte å si vi kan bare kalle ting hva de er. Og hvis du ønsker å få på noe symbol, nå er du bokstavelig talt gjøre sitere unquote symbol i hakeparentes i stedet for bare en rekke. Så det er en fin bekvemmelighet. Og det er liksom det for nå. Det er bunter av andre funksjoner i PHP. Og ja, kommer PHP med den velkjente kjøkkenbenken. Dusinvis, hundrevis av funksjoner kommer med PHP-- så mange flere enn kom med C. Og det er ikke ment å velde men heller hjelpe du skjønner at vi ikke lenger trenger å skrive kode det er liksom her nede konseptuelt. Nå kan vi bare begynne å dra nytte av mye mer avanserte funksjoner at språk som PHP har. Så vi trenger ikke å bekymre deg for flytte ting rundt i minnet. Vi trenger ikke å bekymre deg for malloc og alle disse lavere nivå, kraftige detaljer som du vil bakse med, hvis ikke sliter med, pset5, men du kan begynne å snart tar for gitt. Faktisk, la oss skrive et super enkelt program i PHP, som følger. Jeg kommer til å gå mann inn CS50 IDE her, og hva jeg skal gjøre er å opprette en ny fil, som veldig enkelt kommer til å bli kalt hallo dot PHP. Så i stedet for dot c, er det kommer til å bli kalt dot PHP. Og så i denne filen, Jeg kan begynne å skrive. Men det viser seg at en ting jeg må vite er at enhver PHP fil generelt, trenger å starte med noen spesiell syntaks. Ligner i ånden til HTML, men igjen, PHP er et programmeringsspråk, ikke et kodespråk. Så hver fil, og det er liksom dum ser jeg skal innrømme. Åpen brakett, spørsmålstegn, PHP. Og det er bare språkets måte å si: hei, datamaskin her kommer noen kode skrevet i et språk som heter PHP. Og så helt på slutten av filen, du gjør slags form for det motsatte. Du trenger ikke skrive PHP igjen, kun gjøre spørsmålstegn, vinkeljern. Og så alt du putter inni av disse to kodene, så å si, vil bli, eller bør være, PHP-kode. Så la oss gjøre noe super enkelt. Jeg kommer til å gå videre og gjøre print def, hei verden, backslash n, lagre. Og nå på mitt spørsmål, jeg kommer til å gjør, gjør hello-- nei, jeg kommer til å gjøre, dot slash hei. Nei, dot slash, hm. Så noe er annerledes. Og ja, dette er en viktig forskjell mellom PHP og språk som C C var et såkalt kompilert språk. Hva betydde det for C må kompileres? Hva var konsekvensen? Yeah. PUBLIKUM: Skrev det til maskinkode så det kan være drevet av datamaskinen. SPEAKER 1: Nettopp. Vi må først konvertere den til såkalt maskinkode, nuller og enere, før det faktisk vil være kjørbar og forstått av datamaskinen. Av Intel inne. Av CPU innsiden av maskinen. PHP, derimot, er det som kalles et tolket språk, hvilken betyr at du ikke kompilere den inn nuller og enere, maskinkode, du i stedet la det som kildekoden. Og du i stedet sende den som input til et program, en tolk at noen andre skrev år siden som forstår det linje for linje, karakter for karakter. Så med andre ord, mennesker der ute skrev et program som vil se på koden linje for linje, og finne ut hva datamaskinen skal gjøre, uten å konvertere den direkte til nuller og enere. Så hvis den ser en for loop, denne såkalte tolk kommer til å være som, greit, skal jeg gjøre noe igjen og igjen og igjen. Hva burde jeg gjøre? La meg se på neste linje. La meg se på neste linje. Og det virkelig tolker det linje for linje. Så for å kjøre den, jeg bruker ikke sminke. Jeg bruker ikke dot slash i dette tilfellet. I stedet gjør PHP, som er navnet på et program, a.k.a. Tolk, det er pre-installert i CS50 IDE, og nå trenger jeg å passere en kommandolinje argument, som er ganske enkelt navn fil som jeg ønsker å tolke. Eller mer tilfeldig, at jeg ønsker å kjøre. Og hvis jeg trykker Enter, der har vi det. Hallo verden. Nå viser det seg at jeg brukte print def bevisst å bygge bro oss fra C til PHP. De fleste PHP programmerere, som du vil se, ikke engang gidder å bruke print def. De bare bruke en funksjon som heter print, som C ikke har. Og så hvis jeg kjøre det nå, det faktisk oppfører seg funksjonelt det samme. Jeg kan ikke bruke prosent s og i prosent, og så videre, men det er andre måter i PHP for å gjøre det. Men dette er bare å si at syntaktisk, annet enn noen rare ting opp toppen, og noen rare tegn ned ved bunnen, begrepene nå av programmering i denne andre språk kommer til å være akkurat det samme. Faktisk, la oss gjøre ett annet eksempel. Så jeg kommer til å gå videre og lukke denne filen. La meg skape en annen som Jeg ringer forhold 1 prikk PHP. Så ingen null, fordi det jeg gjorde var jeg så tilbake et par uker siden, vi hadde en fil som heter forhold en prikk C. Og hva Jeg ble omgjort det i min hode, og her på papir, og snart på kursets nettside, linje for linje i PHP. Så i C-versjonen, gjorde vi noe like streng s får få streng. Så det er litt annerledes å gjøre det i PHP. I stedet, jeg bare går for å gjøre, eller rettere sagt, I kan ha gjort int n får komme int, i dette eksempelet tidligere. Så i stedet for at jeg kommer til å gjøre n blir lest linje, vil jeg gjerne et heltall, please. Så dette er bare min rask. Og så viser det seg, og Jeg ville bare vite dette fra å ha lest eller sett funksjonen før, lese linjer av funksjon i PHP tar et argument som er en rask for det menneskelige, og dens formål i livet er å lese et tekstlinje at han eller hun typer i. Og så den lagrer det tekst i variabelen n. Og nå kan jeg ønsker å gjøre noe som jeg gjorde uker siden, på samme uke en av klassen. Dersom n er større enn null, så skal jeg å låne som syntaks vi nettopp så, print def, plukket du et positivt tall, backslash n. Annet hvis n er lik lik null, jeg er kommer til å gå videre og si, print def, du plukket null backslash n. Else, saken her bør selvsagt, print def, du plukket et negativt tall. Og vi kan sikkert gjennomføre logikken i denne saken i en haug med forskjellige måter, men poenget her er at syntaktisk, knapt noe er nytt. Det er bare dollartegn og en ny funksjon og lese linje. Men fundamentalt, hva som er nytt nå er jeg tolke dette. Jeg passerer det som input til et annet program. Så hvis jeg ønsker å kjøre dette, hvis Jeg gjorde ikke gjøre noen feil, Jeg kommer til å kjøre PHP, av forhold en prikk PHP, Enter, Jeg kommer til å skrive inn nummeret 50, og la oss anta for nå det fungerer. Fordi logikk er samme tingene som i uke én. Greit, så det er ganske uimponerende, ikke sant? Vi kan gjøre dette i noen antall språk. La oss gjøre noe måte kraftigere. La oss ferdig problem satt fem. Så jeg kommer til å gå videre og gjøre dette. Jeg kommer til å lage en fil kalt ordboken dot PHP, og tilbøyelig som du kan være å rykke ned masse notater, notatene vil bare hjelpe deg hvis du har lov å implementere problemer satt fem i PHP. Men vi får se hvor raskt nå vi kan implementere det samme problemet sett. Så i ordboken dot PHP, jeg kommer å anta at det allerede en fil i verden som heter stavekontroll. Og ja, jeg gjorde dette på forhånd, og vi vil ikke gå gjennom denne linjen for linje, men hvis du er nysgjerrig senere og virkelig ønsker å vikle hjernen din rundt Forskjellene mellom c og PHP, bokstavelig sammenligne denne filen, stavekontroll, fra dagens kildekode at vi skal legge inn senere i dag, mot p sett five stavekontroll dot c at vi gir deg, og det er nesten samme linje for linje. Det er noen flere dollartegn. Et par funksjoner er litt annerledes. Men det er en fin måte sortering av å se hvordan du oversette ett språk til et annet. Og det er nesten identisk linje for linje. Men jeg kommer til å anta at det eksisterer, og hva jeg skal gjøre her er å prøve å blåse tankene ved reimplementing helheten av problemet satt fem måte raskere enn du har gjort så langt. Så for eksempel, kommer jeg til å først erklære en global variabel kalt størrelse, og sette den lik null. Nå det er ikke mye sparing. Odds er du implementert størrelse ganske mye det samme, eller hint hint, vil i kveld eller i morgen, bare å bruke en global variabel kalt størrelse, og sette den lik null. Det er ikke en spesielt utrolig spoiler. Så hva var dine data strukturer valg, de av dere som har dykket i og lese spec, hva datastrukturer har de fleste av dere har brukt? En hash table eller prøve, kanskje noen varianter av disse. Så implementere en hash table minst, er slag av en masse linjer med kode, ikke sant? Og ikke alle av dem kan være funksjonell på dette punktet i uken, men det er fint. Fordi i PHP, hvis jeg ønsker en hash table, gjort. Høyre? Slik at variabel som jeg har bare erklært er åpenbart kalt dollartegn bord, per innledningen før. Men jeg egentlig bare vil, på slutten av dagen, en matrise. Men ikke en numerisk indeksert array, fordi det er som uke to ting, når vi snakket om arrays. Jeg vil ha en hash table. Men en hash table er virkelig bare en konkret måte å si: du vil ha en assosiativ array. Du ønsker å være i stand til å knytte taster med verdier. Taster med verdier. Hva er en ordbok, egentlig? Vel det er en hel haug med nøkler. Ord som eple, pære og banan, og alle disse engelske ord at vi hånd du. Og de verdiene som du er effektivt sette inn i ordlisten er enten sant, eller fravær, falske. Med andre ord er du setter inn en hel haug av viktige verdi-par, eple, sant, pære, sant, banan, sant. Slik at når du henter eller se opp at data i hash table med sjekken funksjon, er du enten å få tilbake et svar, ja, jeg fant det i min kompleks hash table, eller nei, det er ikke der, så du returnerer false. Så for å gjøre det, er alt jeg trenger data struktur som jeg foreslått før. Jeg trenger bare å være i stand å assosiere ord som, sitat unquote, symbol, med en verdi som, sant. Så det er min hash table. La oss faktisk bruker det. Så det er noen funksjoner Jeg trenger å implementere. Jeg kommer til å gå videre og bite av en funksjon som heter størrelse. Det tar ingen argumenter. Jeg trenger ikke å bry deg med ordet, ugyldig i PHP. Jeg bare kommer til å returnere størrelse. Og som en digresjon, har PHP dette minorly irriterende detalj, der hvis noe er global, må du fortelle funksjon der du bruker det, hei, dette er en global variabel. Så, mindre dumhet, men du nødt til å gjøre det likevel. Så hva med last? Jeg kommer til å implementere en funksjon som heter last som tar i navnet til en ordbok, akkurat som i oppgavesettet fem. Og før jeg går videre, Legg merke til at jeg ikke har vært å skrive helt de samme tingene. Hva er åpenbart annerledes i PHP om hvordan du deklarerer en funksjon versus C? Yeah. PUBLIKUM: [uhørbart] SPEAKER 1: Nei returtype. Og ja, det er tilfelle, PHP i den utstrekning det er løst skrevet, er også litt slurvete i den forstand. Du trenger ikke spesifisere så programmerer hva denne funksjonen returnerer. Du må faktisk se på koden for å finne ut av. Eller lese kommentarene eller dokumentasjonen. Så plusser og minuser av slike beslutninger. Men jeg har å si stikkordet, funksjon. Når og vi lærer Java i et par uker vi kommer til å se det samme igjen, men det er den samme ideen. Navnet på funksjon, dens argument eller argumenter eller mangelen på dem, og nå her er gjennomføringen. Så jeg kommer til å kutte noen hjørner bare å være dramatisk for bare et øyeblikk. Men jeg kommer til å gå foran og si dette. Dette er hvordan jeg kan laste en fil inn i en matrise. Det er en funksjon i PHP kalte fil. Du lever det navnet på en fil. Det hender du tilbake en matrise, inne som er hver linje fra filen. Fra null, en, på opptil til n minus 1 linjer. Det er det, ikke sant? Det er ingen f lese. Det er ingen f get s. Det er ingen prosent s. Det finnes ingen hodepine. Det er ingen feof. Alt av at ting som du har vært bryting kanskje, med p satt fire og fem, går bort. Så jeg bare lese disse linjene inn filen, og så vet du hva? Hvis jeg ønsker å iterere over disse ordene, Jeg kan gjøre, for hver linje med linjen. Husk at dette var slags en smart måte itera over en matrise, indeks av indeksen, og på hver iterasjon kall gjeldende linje, dollartegn linje. Og akkurat her jeg kommer til å gå og si tabellen, brakett, linje, blir sant. Med andre ord, dette er hvordan jeg sette inn i min hash table i PHP. Jeg sier dollartegn tabellen, som er min assosiativ array som var tom per linje med kode opp ovenfor. Jeg deretter indeksen inn det ikke, ved bruk av et nummer, men bokstavelig talt bruker søkeord som jeg bryr meg om. Kanskje det er eple eller pære eller banan eller hva, men spesielt jeg indeksering inn i det som jeg foreslo tidligere. Jeg tar navnet mitt assosiativ array, og da jeg bruke quote unquote i hakeparenteser med en streng, i stedet for en faktisk nummer. Og så det er det. Lasten funksjonen er ferdig. Når det sløyfe gjentas, har jeg satt alt inn i hash table. Nå liten disclaimer, det er en par ting jeg trenger å fikse. Og den versjonen jeg skal legge inn online vil ha alle nyansene, men det er stort sett bare kommer til å være noen feilsjekking og noen mindre tilpasninger. Men det er faktisk den kjerne av det. Hvis jeg nå ønsker å implementere funksjonen kalles sjekk, som forventer en ord som sitt argument, hvordan kan jeg gå om du gjør det? Vel, jeg bare kommer til å si, hvis innsiden av mitt bord, i stedet ord, om er angitt. Så hvis det er-- faktisk, vet du hva? Jeg kommer til å gjøre det i litt av pseudokode. Men ideen er den samme. Hvis det er lik sant, returnere true. Greit. Else-- du kan slags se hvor dette er going-- å returnere false. Ferdig. Sjekk er gjort. Ganske fin, ikke sant? Og så hva er dette egentlig vil? Og dette også, jeg kuttet noen hjørner. Se på den versjonen online for alle de små nyanser. Men det er hovedinnholdet i det. Index inn assosiativ array, a.k.a. Hash table, se om det er en verdi der, hvis det er satt til sann, og hvis så, return true. Så vi har whittled alle av kompleksitet. Så snilt av tankene blåser, ikke sant? Jeg vil ikke bry sluttplasseringen det med losse, fordi i fact-- oh, vet du hva? Ja, la oss avslutte den med losse. Losse i en hash tabell kan se som funksjon losse, tilbake. OK så det er losse. Fordi det er ingenting å losse, ikke sant? Det er ingen malloc. Jeg visste ikke eksplisitt be operativsystem for noe. Jeg har nettopp begynt å bruke variabler. Og så dette også er en manifestasjon av funksjonene til høyere nivå språk. Så igjen, det meste av dette begrepet vi har vært å gjøre her nede med C. Super lavt nivå. Du kan se datamaskinens minne. Du kan røre noe du vil i datamaskinens RAM, for bedre eller verre. Opp her, vi skal å gi opp den makten. Men herregud, se hvordan mye mindre kode jeg skrev. Faktisk hvis jeg ikke snakket og snakker over min skrive, vi ville ha blitt gjort med dette eksempelet for fem minutter siden. Så hva er prisen som blir betalt? Vel la oss ta en titt. La oss ta en titt. Jeg kommer til å gå videre og kjøre CS50. La meg først gå inn dagens eksempler der Jeg har tekster katalogen som før. Jeg kommer til å kjøre den løsningen som den kommer med oppgavesettet five kalt stavekontrollen, som er i CS50 konto. Og jeg kommer til å kjøre den på noe stor som King James Bible, bare slik at vi virkelig sette stabs løsninger til test. Nå noen ganger internett er en litt tregere, litt raskere, kan ta en stund å rulle. Men det tok totalt .56 sekunder å stave sjekke King James Bibelen bruker de ansatte løsning. Så ganske bra. Yours kan være mye tregere, og det er helt greit. Men det er riktig her. Så det er de ansatte løsning. Hvis jeg går inn og rydde opp i PHP versjon. Og jeg kommer til å gjøre litt som baking showet ting. Vi kommer til å ta koden jeg skrev tidligere, så det er helt riktig. Fordi koden jeg skrev ikke kommer for å være helt korrekt nettopp nå. Men hvis jeg kjører PHP versjon, hva har jeg å gi opp i dag? Tok meg fem minutter å implementere p satt fem, hevder jeg. Hvilken pris har jeg betalt? Yeah. PUBLIKUM: Speed. SPEAKER 1: Speed. Hva mener du? PUBLIKUM: Det kommer til å ta lengre tid. SPEAKER 1: All right. La oss se. Det kommer til å ta lengre tid, ikke å skrive, men å kjøre den. Yeah. Så la oss prøve dette. Så her kommer jeg til å gå videre og gjøre PHP av stavekontrollen, og fordi filens heter stavekontroll. Så jeg ikke kjører ordbok, husker, Jeg kjører programmet heter stavekontroll. Jeg kommer til å passere i samme fil, King James femte. Det flyr forbi. Dette kan bare være internett hastighet, så ikke lese for mye inn i det. Men det føles lenger sikkert. 1,26 sekunder. Nå det er fortsatt ganske jævla fort, ikke sant? Og den eneste grunnen til at føltes som mer som tre, eller fire eller fem sekunder, er bare fordi at Internett var å være treg. Datamaskinen tidsbruk var 1,26 sekunder, versus jeg tror 0,56. Så mer enn dobbelt så sakte. Nå det er fortsatt ganske darn fort, men det er en manifestasjon av, ja, at eksakt pris. Fordi vi tolke i koden linje for linje, og at programmet PHP leser min kode øverst til nederst, venstre til høyre, det har å gjøre mer tenkning. Den har til slags konvertere det inne i seg selv til den tilsvarende maskin kode på fly, så å si, Selv om mekanikken er litt annerledes. I stedet for bare å fôre til Intel CPU rå nuller og enere at den forstår innfødt. Så absolutt, hendene ned, Vi har betalt en pris. Og koden er skrevet i et språk som PHP har en tendens til å være tregere. Men min gud. Så nå når jeg stavekontroll min fil, bruker jeg en ekstra 0,7 eller så sekunder vs 20 timer å gjennomføre en raskere stavekontroll, ikke sant? Det er litt av en trade off. Og hvis du akkurat har begynt p satt fem, kan ikke være 20 timer. Kan være langt færre enn det. Men det er en trade off, for real. Og hvis du kjører kode på virkelig store datasett, eller på enda eldre maskinvare, slike forskjeller kan sikkert legge opp. Eventuelle spørsmål så langt? Yeah. PUBLIKUM: [uhørbart] SPEAKER 1: Beklager, kan du si det en gang til? PUBLIKUM: [uhørbart] SPEAKER 1: Du gir opp tid. Vel, så ja. Du sparer tid ved ikke å måtte kompilere den, hvis det er det du spør. Og ja, i CS50, de fleste av programmene, selv om de kan ta en stund å skrive, de er relativt kort. Par dusin, noen hundre linjer med kode, og så de kompilere ganske raskt. Men når du begynner skrive større programmer, som om du er Microsoft eller du er Google og skriver virkelig store programmer i C, eller C ++, eller lignende kompilert språk, kan ta mange sekunder, eller til og med minutter eller mer til kompilere millioner av linjer med kode. Og der også, som Forskjellen kommer til å legge opp. Og faktisk, når vi Overgangen i dag, samme dag i dag, til web-programmering ved hjelp av PHP, er du kommer til å finne det bare så mye mer behagelige å skrive kode når du ikke trenger å gjøre disse dumme trinn som endring i terminal vindu, type make hallo, re kjøre den, legger du i vinduet. Bare så mange dumme mekaniske trinn som bare komme i veien for å gjøre det interessant, morsomt arbeid. Og faktisk vi kaste det bort med PHP. Og vi kan samhandle med den raskere. Yeah. PUBLIKUM: [uhørbart] SPEAKER 1: Jada. Kan jeg avklare hva det betyr tolkes? Når du kompilerer et språk som C, det går ned som vi sa til maskin kode, nuller og enere. Og Intel besluttet år siden at visse mønstre av nuller og enere representere tillegg eller subtraksjon, eller skrive ut eller andre grunnleggende operasjoner. I en verden av et tolket språk som PHP eller Javascript, eller Python, eller Ruby, eller bunter av andre, i stedet noen har skrevet en interpreter-- i dette tilfellet det er også kalt PHP, identisk med navn på language-- som i hovedsak har en stor sløyfe i det som gjentar i løpet av alle linjer med kode at jeg mate den som input, som hallo dot PHP, eller ordbok dot PHP. Og så kan du tenke på deres store sløyfe som å ha en masse forhold. Og disse betingelsene si, hvis human har skrevet søkeordet for, begynne å gjøre hans eller hennes koden igjen og igjen. Eller hvis mennesket har skrevet linje med kode, hvis, bare utføre sin neste linje betinget. Så det er virkelig som å tolke det i en human måte, linje ved ledning, og som bare tar tid. Det tar overhead. Og så det er en price-- god question-- vi betaler. Så la oss gjøre en annen demo som er litt mer dramatisk. Det er, vil jeg si, en omtrentlig dette på en 90% sannsynlighet for å mislykkes forferdelig, men du vil bli overrasket med 10% sannsynlighet. Så hvert år prøver vi å gjøre dette, hvor vi prøver å skrive et program som går gjennom Problemet satt null, for som du har innsendte dine telefonnumre og en mye annen demografisk informasjon, og vi programma sende deg en tekstmelding. Og så alles telefon begynner å pipe eller vibrerer, og det er bare helt fantastisk, fordi vel, se på hva datamaskiner kan gjøre. Dette fungerer sjelden korrekt det virker, i stor grad fordi jeg vanligvis blir svartelistet av Gmail eller en annen tjeneste for faktisk prøver å gjøre dette på skalaen. Men morsomme er også, siden vi har ikke alle her i dag, Fun Fact siste gang vi prøvde dette for to år siden, Jeg tror jeg skrev et program som satt i en sløyfe itera i løpet av alle elevene i klassen, og hver av dem en tekstmelding, og det sa noe sånt som: hvorfor er du ikke på forelesning? Kjærlighet, CS50 bot. Du aner ikke hvor mange unnskyld og slags smertefulle e-poster Jeg har fått svar fra n minus 100 personer som ikke var her den dagen. Og enda morsommere, mer skammelig story-- du vet, la oss sette det der ute. Det er allerede på video for noen år tilbake. Så vil du snart se meg skrive en for loop, der det er veldig lett å skrive en bug i at for løkke, slik at den første gang gjennom løkken, du sende en tekstmelding. Den andre gangen gjennom løkken jeg burde ha sendt enda en tekstmelding, og deretter enda en tekst budskap, og en til. Men det viser seg hvis du gjør en skrivefeil når du programmerer, noen ganger kan skrive programmer som sender én tekstmelding, så to tekstmeldinger, deretter tre tekstmeldinger til alle hvem har allerede mottatt en tekstmelding. Og som du vet, gjør noe, pluss noe, pluss noe, pluss noe, er stor O for mye tekstmeldinger, eller n squared, eller på $ 0,10 en tekstmelding, $ 20.000. Heldigvis traff jeg Ctrl-C før det som skjedde, men jeg skylder minst én av dine forgjengere $ 20 for 200 noen merkelige tekstmeldinger som, ikke bare gikk til sin telefon, men også det var som en eldre flip telefon slik at den vil skyves ut av sin minne hver annen personlig tekst budskapet han hadde faktisk fått. Så vi har ett mål i dag, for ikke å gjøre det. Kanskje slå på flymodus. Greit. Så la oss gå inn i en programmet her callled-- at jeg vil kalle teksten dot PHP. Og på forhånd, jeg har to filer her. Jeg gjorde en fil for bare stab, som fikk alle ansatte er info, alle navnene fra kursets hjemmeside. Og så for nå er jeg bare sette noen falske tall 555-1212. Så disse vil faktisk ikke gå noen steder. Men legg merke til innsiden av dette CSV-fil, som vi snakket om en kort stund før i sammenheng med filen IO. Hva er en CSV-fil? Kommaseparert variabler. Og dette er typen som en veldig lette database, hvis du vil. Det er en slags form for fire kolonner i denne filen, og det rufsete, men komma hovedsak representerer kolonnene i filen. Den første kolonnen er TF eller CA navn. Andre kolonnen er deres etternavn. Tredje kolonne er telefonnummeret sitt. Og fjerde kolonnen tilsynelatende er-- fjerde kolonnen er tydeligvis hva? OK, så det er karrieren. Så Verizon eller Sprint, eller hva ikke. Og hvis jeg misspoke tidligere, CSV. Kommaseparert verdier er CSV her. Så hva kan jeg gjøre med dette? Vel, dette er bare en stor tekstfil, og det er litt lang, ikke sant? Liker du dette kommer til å være litt irriterende. Og det viser seg imidlertid at hvis jeg ønsker å sende en tekstmelding til, la oss sier Alex her. La meg gå inn i nettleseren min og gå ut av fullskjermmodus bare så jeg kan veksle frem og tilbake. Det viser seg, la oss se, hvis jeg går i her, og logg inn Gmail, all right. Ikke se på denne delen. Bare jeg får se. selvfølgelig livestream kan fortsatt se hva jeg gjør. Greit. Så her er bare Gmail med John Harvard konto. Så hvis jeg ønsker å sende en tekstmelding til Alex, Jeg kan selvfølgelig skrive en melding. Og det viser seg, og jeg har testet den med Alex før her, slik at du kan legge en viss domene navngi til folks telefonnumre, fordi det eksisterer i verden ting kalt SMS til e-post-gatewayer. Som er en fancy måte å si alt av oss som har mobiltelefoner som har telefonnumre, selvfølgelig, det er trolig for din operatør, en viss suffiks ut på Vtext.com for Verizon tekstmelding dot com, som du kan legge til din egen personlige telefonnummer, og deretter du eller venner, eller foreldrene dine kan tekst du på det aktuelle adressen. Og Verizon har en server, en e-post server, som ved mottak av denne e-posten, ser på den numeriske delen, og deretter bruker uansett spesiell industri magi de har til å faktisk sende det ut over eteren til din bestemt celle telefon. Nå er dette fint fordi jeg ikke virkelig vet hvordan du sender en tekstmelding eller å skrive kode ennå for min mobiltelefon, og du kan gjøre akkurat det for et avsluttende prosjekt, men for nå er alt Jeg har er min laptop her. Så jeg ønsker å iterere over at CSV fil, linje, linje, linje, linje, grip hver av de ansatte telefonnumre, og deres transportør og auto, sette sammen, det vil si, koble telefonen nummer med passende domenenavn og så sende en e-post. Så det er mange trinn. Og lykke å gjøre det i C. Det er et mareritt av en situasjon å åpne en fil, for å lese den linje, for linje for linje, som du ser, eller kan snart se Problemet med satt fem, hvis ikke Problemet satt fire, og deretter å dynamisk sette sammen to strenger sammen, fordi i C, å ta to strenger og kombinere dem, hva gjør du minimalt trenger å gjøre mest sannsynlig? Du må erklære mer minne, ikke sant? Og spør, malloc, kan jeg ha mer minne? Så jeg kan sette halvparten av dette her, halvparten av dette her. Det er bare så mange trinn. Og ved det punktet du har mistet interesse i den dumme lille demo hvor du gjør alles telefon pip. La oss gjøre denne typen PHP stil, hvor vi bare begynne å bruke mer av det kjøkkenbenken. Og ideene er fundamentalt den samme, men vi trenger ikke å bekymre deg for mye om at lavere nivå. Så la oss se hvordan jeg kan gå om du gjør dette. Og bare slik at jeg ikke gjenta tidligere feil, Jeg har skrevet noen notater for meg selv her. Og la oss se om jeg kan gå oss gjennom noen av de grunnleggende trinnene, og deretter for tiden skyld vi vil kanskje kutte noen hjørner i slutten. Jeg kommer til å gå videre og gjøre åpent brakett PHP å starte denne filen. Og jeg kommer til å gå videre og gjøre dette. Fil håndtak, som du vil snart se, faktisk kaller en funksjon kalt f åpen. Og husk dette åpner en fil. Og sitatet, unquote, r betyr hva, igjen? Bare åpne den for lese. Nå i p sett for, gjorde du dette. Og håndtere kan være hva som helst, fu, bar, bas, eventuell variabel navn. Men generelt en datamaskin vitenskapsmann vil kalle en åpen fil, noe som gir deg en fil håndtak, noe å holde på så å si. Jeg bare kommer til å gjøre noen feilsjekking. Så hvis håndtaket er falsk, akkurat som i C, kommer jeg til å gjøre noe sånt, kunne ikke åpne filen, backslash n. Og så skal jeg bare å gå videre og avslutte. Og det viser seg, i PHP, Jeg er ikke inne i en funksjon. Det er ingen hovedfunksjon her. Slik at jeg ikke kommer tilbake, per se. Jeg avslutte. Som er egentlig det samme. Og jeg avslutter med ett y sannsynligvis. Ett betyr bare en feil av noe slag. Det er ikke-null, så det er en feil. All right, så hvis jeg er her nede nå i mitt program har jeg åpnet filen. Jeg kommer til å gå foran og erklære en rekke kalt adresser, og i C ville jeg vite det størrelsen på matrisen på forhånd, ikke sant? Eller jeg trenger å erklære dette er en peker, og deretter bruke malloc. Og så hver gang jeg leser gjennom en annen rad i filen, Jeg kommer til å trenge å malloc mer minne, malloc mer minne. Det er en smerte i nakken. Og heldigvis, PHP og Ruby, og Python, og Javascript, de vil vokse dine arrays for deg automatisk. Ingen flere malloc. Ingen flere minnehåndtering. Datamaskinen tar seg av det. Men prisen du betaler. Det er litt tregere. Og for et program som dette Vi kommer ikke til å legge merke til. Vi kommer til å sende 100 tekstmeldinger. For eksempel ikke kommer til å føle det. IT egentlig bare begynner å rolle språket ditt valg når dine data eller programmer bli virkelig, virkelig betydelig, slik det vil være tilfelle mer så med vår web baserte ting. Men for nå la oss videre. Mens det viser seg at det er en funksjon i C kalles f få CSV. File få CSV, tar som en fil håndtak som sitt argument, og det fortsetter så, rad, etter rad for rad, for å lese inn en rad. Så det er bare leser en linje av tekst fra filen. Men hva er fint om denne funksjonen, det ikke bare gi meg en tekstlinje. Det ser ut for disse komma, og analyserer linjen. Og for å analysere linjen betyr å splitte det på visse verdier i denne sammenheng. Med andre ord, dollartegn rad er en variabel som er kommer til å gi meg en haug med indekser. Dette kommer til å være det Første kolonne i min CSV. Dette kommer til å bli den andre kolonne, dette kommer til å bli den tredje, og dette kommer til å bli den fjerde. Fordi husker, og Excel den ikke samarbeide sist gang vi gjorde dette, men hvis jeg laster ned ansatte dot CSV. Whoops, ikke gi nytt navn. Hvis jeg laster ned ansatte dot CSV, og forsøk å åpne det, Jeg har allerede registered-- oh jeg ikke oppdaterer Excel siden sist. Du vil se at i staben dot CSV, jeg har fire kolonner. Så når jeg leser i første rad for Abby her, sign rad dollar 0 er Abby, dollartegn rad én er Lyons, sign rad dollar to er nummeret hennes, og deretter hennes telefonens operatør. Så det er alt. Og det er fint, fordi jeg trenger ikke å nå finne ut hvor alle disse komma faktisk er. Så jeg kommer til å gå videre og gjøre dette, gitt at definisjonen, Jeg kommer til å si at hun heter i rad brakett null, som lovet. Og jeg kommer til å grab-- og faktisk, vet du hva? Jeg kommer ikke til å bekymre seg sitt navn, i dette tilfellet. Jeg kommer til å holde det enklere. Jeg kommer til å gjøre henne nummeret er i rad brakett to, tror jeg. Og hennes carrier var der? Rad tre, en over. Så ikke noe nytt der. Det er bare null indeksering i en matrise. Og nå, jeg kommer til å gjøre følgende. Dersom transportøren lik lik AT & T-- Jeg skal bare ha en loop-- Jeg ønsker å opprette en e-post adresse som ser slik ut. Det kommer til å være 617-555-1212 på, hva er det, text.ATT.net, er det jeg ønsker å gjøre. Så hvordan gjør jeg dette? Jeg kommer til å gjøre følgende. Hennes adresse kommer til å være hennes nummer, og nå, la meg gå videre og gjøre dette. Dette er noen funky syntaks. Jeg kunne gjøre prosent s trick, men jeg kan faktisk bare gjøre dette. Så dette er et PHP ting, men la oss vurdere hva jeg gjør. Dollar signere adresse på venstre, bare en variabel. Gi meg en variabel. Jeg trenger ikke å spesifisere type. PHP vil finne det ut. På høyre side, hva er datatype av det hele på høyre side? Ser ut som en streng, fordi det er dobbel siterer helt til venstre og helt til høyre. Nå er det noen funky ny syntaks her. Det er klammeparentes, og dollartegn nummeret. Men ta en gjette hva er det syntaks trolig fortelle PHP å gjøre for meg? Yeah. Bare sette verdien der. Så ingen prosent s. Vi kunne bruke print f, eller s print f eller noe sånt som det, men PHP og mye høyere nivå språk, du kommer til å se at du kan gjøre det samme funksjonelt, kanskje seks forskjellige måter. Og så det begynner å bli et spørsmål om design eller stil. Så dette er bare en kryptisk jakt måte si, gi meg en e-postadresse, men plug-in nummeret i mellom disse klammeparentes. Og klammeparentes vil ikke ender opp i den endelige adressen. Nå kan vi hoppe over noen av disse linjene for tiden skyld. Så hvis en bærer lik lik verHorizon-- Uff, Verizon-- jeg ønsker å gjøre noe svært lik, hvor adressen blir, sitat, unquote, nummer på text.ATT.net. Og så kan jeg gjøre det samme type ting for resten av bærerne. Men jeg vil bare gjøre prikk, prikk, prikk for nå. Og nå la oss anta at Jeg vil legge til array, presse. Jeg ønsker å legge til array, kalt adresser. Denne adressen, dette er hvordan du legge noe til en array i PHP. Du trenger ikke å gjøre malloc. Du trenger ikke å endre størrelsen på tabellen. Du bare si array, push. Hva ønsker du å push-- hva matrise ønsker du å presse noe på? Adresser. Hva du ønsker å presse på adresser? Adresse. Og faktisk, hvis du virkelig ønsker å være flink, noen syntaktisk sukker for dette, så å si, som bare betyr at hvordan kan du gjøre dette i penere måte, ville være å gjøre dette. Som også har effekten av å vokse den adresser matrise av størrelse ett, og deretter plop at ytterligere e-postadresse i det. Yeah. PUBLIKUM: [uhørbart] SPEAKER 1: En skrivefeil på annet if-- oh, carrier. Det er greit. Det vil heller ikke liker min manglende evne til gjennomføre en del av dette programmet senere. Men takk for fanger. One more bug. Takk. Vi vil at dette skal være Vtext.com. Ja. Greit. Så hvor kommer denne forlate oss? Vi har skrevet koden for å åpne filen. Vi har en løkke for å iterere over radene i filen. Vi har kode som legger til min array, en om gangen, i riktig formatert e-postadresse. Så alt som virkelig gjenstår er å sende en e-post til hver av disse menneskene. Så jeg har gått foran og klargjøring meg selv som følger. Hva jeg skal gjøre her er-- og la oss gå videre og hoppe til noen faktiske koden, som ser ut som dette. Så her er det pre-bakt versjonen jeg skrev tidligere. Og legg merke til jeg er ferdig implementere Sprint. Jeg er ferdig å implementere T-Mobile. Jeg er ferdig å implementere Virgin Mobile. Og jeg vil be om unnskyldning på forhånd. Det er et par operatører som noen elever i klassen har at jeg ikke bry opplisting i hvis tilstanden her. Så ikke alle tekstene vil gå ut. Men la oss se hva annet jeg trenger å gjøre. Jeg lukker filen, bare som i p satt fire. Og dette er nytt syntaks. Og vi får se litt bit av denne over tid, spesielt med p sette sju og åtte. Men dette er syntaksen for å skape en spesiell type struktur. Det viser seg at det er et bibliotek som kommer med PHP, kalt PHP mailer. Dens formål i livet er å programma sende e-post. Det er kode noen andre skrev at gjør det lettere for oss å sende e-post, slik at vi ikke trenger å holde går frem og tilbake til Gmail, og lime inn i folks e-postadresser. Det er en hel haug med linjer her som ærlig, jeg bare slags kopiert og limt fra dokumentasjonen. Og faktisk, hvis du er nysgjerrig, forlot jeg alle av nettadressene av dokumentasjonen i koden som vi vil legge ut senere. Og legg merke til at blant de tingene jeg gjør er, jeg sier dette biblioteket, bruke Gmail server, ikke sant? SMTP vi snakket kort om når vi var på Yale om å være enkel mail overføringsprotokoll. Det er den protokollen som servere som brukes til å sende e-post, og that's-- Gmail har en av disse. En port er dette TCP-portnummeret. Det er greit hvis du har ikke sett 587 før. Bare vet at fra dokumentasjonen. Her er mitt brukernavn. Jeg kommer til å bruke CF50 bot. Og i et øyeblikk, jeg bare kommer til å skriver i bot faktiske passord. Og deretter ned her, merke hva som gjenstår. Jeg satt min fra adresse å bli bot på CS50.net. Jeg tror jeg vil ikke angre på å sende en tekstmelding til 800 mennesker som sier, savner deg, elsker CS50 bot, kanskje for de som ikke kunne gjøre det i dag. Og så i linje 76, hva gjør jeg? Denne typen ser ut som C. Så for jeg lik 0, n equals-- nå teller er nytt. Det viser seg at hvis du ønsker å få hvor mange ting i en matrise, du trenger ikke å huske det lenger. Du kan bare spørre en Funksjonen kalles teller, og det vil fortelle deg hvor mange adresser er i denne matrisen. Og så kommer jeg til å legge adressen til e-posten. Og jeg vet dette fra Bruke dokumentasjonen. Det er en add-adresse funksjon. Og nå merker det er en del av syntaksen. Vi har sett dette før i C. Ligner i ånden. Du kan tenke på dollartegn post som en variabel, som det er. Men det er en struct innsiden av som ikke bare egenskaper, variabler hvis du vil. Men det viser seg at i PHP, som er et objektorientert programmerings språk, som Java hvis du tok APCS. Dollartegn mail, hvis du ønsker to-- det har også fungerer innsiden av den, eller metoder. Så dette er å si at spesiell PHP mailer bibliotek, hvis jeg har en variabel av denne, hvis jeg vil kalle en funksjon som kommer med det biblioteket, for dagens formål, bare vet du bruke pilen notasjon. Det er ingen dot notasjon. Det er bare på pilen. Men det er ikke en peker. Det er bare lånt fra C sin syntaks. Så ring legge adressen innsiden av dette biblioteket formål eller variabel. Greit. Dette er den magiske linjen. Det er hvordan jeg sender en e-post. Det er det samme som å åpne opp Gmail, skrive det ut, og trykket send. Men det kommer til å i stedet sende en e-post til denne adressen, med denne kroppen, fra CS50 bot. Og nå nøkkelen linje. Denne linjen ble fraværende i som 2 011 når jeg tenker sist jeg prøvde dette. Den linjen der, selvfølgelig, klarner adressene. Så logisk, hvis jeg ikke fjerne adresse etter hver iterasjon, først e-post eller tekstmelding går til Alice, den andre går til Alice og Bob, den tredje går til Alice og Bob og Charlie, dermed svært kostbare feil Jeg gjorde det året. Så la oss se. Er det noen spørsmål før vi sender dere alle en tekst Meldingen med 10 prosent sannsynlighet? Noen spørsmål? Greit. La oss meg gå inn her og endring passordet til hva som bør fungere, vil trolig bli svartelistet av Gmail. Så de kan ikke alle gå ut, siden de sannsynligvis liker ikke oss å sende 800 e-poster i en sløyfe for alle på en gang. Siden det ikke er særlig menneskelig atferd. Åh, jeg kommer til å endre en annen ting. Opp på toppen, kommer jeg til å sent-- endre filen til studenter dot CSV. Og jeg vil ikke åpne denne, men dette er en identisk CSV-fil med ikke 100 ansatte, men 800 studenter, bare fra Harvard, fordi Yale har oktober fordypningen denne uken. Og det virker som en slags dust ting å gjøre til tekst alle av dem om hvorfor de er ikke i klassen på ferie. Det er greit. Bare Harvard studenter i dag inne i den filen. Og nå la oss gå tilbake til min terminal-vinduet. Jeg er litt nervøs. OK, så nå kommer jeg til å gå inn i katalog, og PHP tekst dot PHP. Hva med en modig frivillig? Så jeg vil ikke at dette på meg. OK, kom opp. Hva er navnet ditt? MAYA: Maya. SPEAKER 1: Maya. Kom opp, Maya. Greit. La oss se om dette fungerer. Jeg setter min egen e-postadresse i file-- mitt eget telefonnummer i filen, slik at forhåpentligvis vil jeg få en også. Hyggelig å møte deg. MAYA: Likeså. SPEAKER 1: Så alt du trenger å gjøre er trykk enter for å sende 800 tekstmeldinger, hvis jeg ikke skru opp. Fin. Kan ta en stund, statistisk, før vi kommer til en e address-- en tekstmelding som er i rommet akkurat nå. La oss dvele og se. PUBLIKUM: [HYLE] SPEAKER 1: Å, ja. PUBLIKUM: Å, fikser. SPEAKER 1: For looper are-- dette er ikke treg på grunn av PHP. Dette er treg fordi Gmail er å strupe oss og ikke la oss sende mer enn som en e-post per sekund. Hva som helst? Dette var en vanskelig ting for meg å teste på hjem med bare meg og min en telefon, så. Er det forhåpentligvis fra bot? Ja? Nei? Si ja. Nei? Det er fra en venn? Pinlig. OK. Ganske sikker på at det fungerer selv. UH oh. De black-- oh, vent litt. Åh, vet du hva? Et øyeblikk. Bare Maya og I-- Mia, var det? MAYA: Maya. SPEAKER 1: Maya, kommer til å Vet du hva jeg gjorde galt her. Oh, vent litt. Jeg tror jeg bare sendte 100 tekstmeldinger til 555-1212. Vent litt. Jeg kan ikke vinne noe i år. OK. Maya? Fikse det i post produksjon. For faen! Følgende fra adressen. OK, stå ved. Unnskyld. Det er smertefullt hvert år. OK, det ene øyeblikket. Dette er bra. Jeg i stedet kommer til å gjøre dette. Print adresse. OK, stå ved. Skriv ut adresser, brakett i. Ja, jeg liker det. Dollar sign-- OK jeg skal forklare hva jeg er gjør i et øyeblikk, etter at jeg har kjørt dette. Hvert år. OK, here we go. Jeg har just-- og jeg ønsker ikke vise alles telefonnummer, men Maya kan bekrefte med et nikk av hodet, at hun ser alles telefonnummer i klassen at jeg kommer til å kopiere inn et program som heter Gmail. Og hvis du er i Gmail, hva vi ønsker å si? Savner deg. Love-- det er ikke fra meg. Jeg har ikke engang truffet sende enda. Så la oss gå videre og gjøre dette, hvis jeg kan zoome inn. OK. Så jeg bruker et program kalt Gmail nå. Hvis Maya, vil du liker å klikk Send, vi vil simulere hva som koden skal ha gjort. Hva som helst? [PIPELYDER] PUBLIKUM: Jepp. SPEAKER 1: Ja? Frelse? PUBLIKUM: Jepp. SPEAKER 1: Miss deg. Og jeg kommer til å sende ut resten. Jeg sendte ut halvparten fordi jeg ikke tror Gmail ville la dem gå gjennom. Så bare husk at i dag er dagen at du har lært at jeg kan bruke Gmail. Det var forferdelig. En stor applaus til Maya. Takk. Greit, det. hva [PIPELYDER] Vi fikk noen piper, ja? Greit. Nå kommer jeg til å få 700 virkelig ulykkelige e-poster fra klassekamerater. Så minst vil vi se om det var verdt det. Så hva gikk galt? Jeg skal finne ut hva som gikk feil i ettertid, men bare se hvor enkelt det var å gjøre det i PHP. Så hva kan vi egentlig gjøre nå som vi har denne ekspressivitet av PHP. Det var-- det var fryktelig. Greit. Så det var det som skulle ha gått ut. Dette ble meg å teste denne morgenen på min telefon, selve skjermdump av telefonen min. Men nå la oss vurdere hvorfor vi faktisk introdusere alt dette ting i første omgang. Så målet er ikke å skrive disse programmene som er skrevet på kommandolinjen, ikke sant? Så jeg skrev en enkel hei program, skrev jeg et lite program som gjør conditionals, og brukt en leselinje og så videre. Og i teorien, jeg bare skrev et program som sendes ut 800 tekstmeldinger, gi eller ta 800. Og at programmet var alt fortsatt kjøre på kommandolinjen. Og det er selvfølgelig ikke på nettet, ikke sant? Målet nå er å begynne å bruke det jeg hevder er en enklere å bruke språk, daresay en mer kraftig språk i form av funksjonene som kommer med det, for å starte skrive kode som genererer nettsider. Så forrige gang, og i forrige uke, vi snakket om HTTP og HTML. Og hva er fint om HTML er at det er bare ren tekst. Og teksten er sikkert noe som du kan skrive ut ved bokstavelig talt å ringe print f-funksjonen eller utskriftsfunksjonen. Og ja, det er hva PHP er nå kommer til å tillate oss å gjøre. Så blant eksemplene vi ha i dagens kildekode, I tillegg til noen av koden at jeg satt oppe en stund siden, vi har programmer som dette for eksempel. Froshims, eller Freshman Utført Sport, var faktisk en av de første extracurriculars Jeg ble involvert med år siden. Og min samboer og jeg, med noen andre barn på campus, brukes til å kjøre froshims program. Jeg får mine tekstmeldinger nå. Nå så vi, tilbake i dag, så dette var 1 996 eller så, det var en Internett, men det var ingen process-- det var ingen nettsted for froshims. Og så hvis du ønsker å melde deg på fotball eller volleyball eller hva, du ville fylle ut denne tingen kalles et stykke papir, og du ville gå over Harvard verksted, og du ville skyve det inn i post sporet av Proctor, som var i Wigglesworth, en av sovesalene. Og dette var du registrert. Og han eller hun ville da komponere en e-post til deg manuelt, mye som jeg bare gjorde her med Maya, og så ville du bli bekreftet som har vært registrert. Så dette var som lav hengende frukt, så å si. Det var litt dumt at vi brukte papir for dette. Jeg ville ha oss til å kunne å bare gå på en nettside, eller har de freshmen gå på en nettside, registrere for idrett, og bare automatisere mye av dette ting ved å sette deres navn og e-post og så videre inn i en database. Og faktisk, den aller første versjonen på nettsiden, ved hjelp av super stygg HTML, kan ha sett noe som dette. Det var faktisk ironisk nok mer pinlig ute enn dette tilbake da. Men jeg brukte et programmeringsspråk. Ikke PHP, men heller kalt Perl, som er en eldre språk, men veldig like i ånden. Og jeg bare helt lært det for meg selv. Og det tok meg en stund å finne ut av det, spør mange spørsmål av venner. Men ideene der var nøyaktig de samme. Fordi hva PHP er egentlig designet for er ikke kommandolinjen stuff vi bare spilte med, men for web-programmering. Det er virkelig bundet i sin funksjon satt til nettet, som følger. Dette er froshims. Og hvis jeg ønsket å registrere seg i denne formen, dette er ganske stygg, sikkert, men la meg gå videre og være en mindre komfortabel student, og hva sport for Matthews, Klikk på Register. Hva jeg ønsker å være i stand til å gjøre er sende inn informasjon fra et skjema, ikke til Googles server som vi gjorde sist gang, helt juks ved hjelp av sin backend, jeg ønsker å implementere min egen backend-kode. Hvilket betyr skrive PHP kode som bor på en URL at skjemadata kan sendes til. Og deretter koden din, skrevet i PHP på serveren, Deretter kan du svare på det brukerundersøkelser. Som hans eller hennes navn, eller komfort nivå, eller dorm, og deretter gjøre noe med det. I dette tilfellet, jeg bare idiotisk skrevet det ut som tekst, som ikke er alt som pen. Men du kan sikkert Tenk, hvis du vet HTML, og du vil snart vite hvordan å generere HTML med print f, og print, og lignende funksjoner, kan du sikkert generere en penere nettside som sier: Hei David, du er nå registrert. Du er en mindre behagelig student fra Matthews, ikke sant? Du kan bare bruke en hel haug av% ses, eller klammeparentes og dollartegn notasjon Jeg brukte en stund siden, til genererer tekst som er mer brukervennlig enn dette. Så la oss ta en titt på denne filen. Froshim null dot PHP ser slik ut. Når jeg laster CS50 IDE, froshim null ser slik ut. Dette er froshim null dot PHP. Og hva legger du merke til om denne filen? PUBLIKUM: [uhørbart] SPEAKER 1: Sorry, litt høyere? PUBLIKUM: [uhørbart] Det er alt i HTML. Og faktisk er det, fordi hva er interessant om PHP er at den er designet å være, for bedre eller verre, blandet med HTML-kode. Og i virkeligheten, selv om denne fil, froshim null dot PHP, har en PHP kommentar på toppen av det, det er alt bare HTML. Men derimot, hvis jeg åpner opp, la oss si, registrere null dot PHP, som bare har en stor kommentar på toppen. Dette ser også nesten utelukkende som HTML, med unntak for hva? Line, hva, 21 ser litt rart. Men merker jeg går inn PHP-modus med åpen brakett spørsmålstegn PHP. Så jeg har fått noen ting. Og deretter ved slutten av denne linje nesten jeg har, spørsmålstegn PHP. Og dette er hva jeg mener med intermingled. Du kan skrive HTML som du nettopp vil at serveren skal spytte ut. Men hvis du ønsker å gjøre noe dynamisk stykke ut på siden, som setter navnet mitt eller dorm eller komfort nivå, Jeg kan bruke en funksjon som print r, som er skrive ut rekursiv, noe som betyr bare skrive ut denne variabelen, formatering det slik du vil. Det er egentlig ikke for menneskelige formål, det er bare for debugging eller diagnostiske formål. Så det er hvordan jeg gjorde det. Hvis jeg i stedet gå froshims to prikk PHP, merker at virkningen av dette skjemaet er ikke registrert null dot PHP som old-- den forrige faktisk var. Men det er registrert to prikk PHP. Så la oss se på hvordan dette oppfører seg litt annerledes. Hvis jeg går inn i versjon to. Hvis her, hvis jeg registrere som David, mindre komfortabel, fra dorm av Mathews, registrere. Så denne gangen det er sagt, du er registrert, ikke egentlig. La oss se hva jeg gjorde her. Hvis jeg ser på register to prikk PHP, har dette noen flere PHP-kode. Det er litt renere, selv om det fortsatt brytes litt lenge på denne linjen. Legg merke til her. Jeg skrive ut min HTML-kode, hodet mitt tag, min tittel tag, hodet, kroppen. Og så begynner jeg å si ting som angir PHP-modus. Og så den koden, åpen brakett PHP-- spørsmålstegn PHP sier: hei, server, execute-- tolke følgende ting som PHP til du ser slutten tag. Og selv om du kanskje ikke kjenner noen annet PHP enn du har sett så langt, du kan slags lese det ganske intuitivt. Hvis navn er tom, eller komfort er tom, eller dorm er tom, hva gjør jeg? Hva skal jeg si til brukeren? Du må oppgi navn, komfort, og dorm, og så videre. Else, jeg sier du er registrert, vel egentlig ikke. Og jeg sier ikke egentlig fordi det er ingen database. Jeg gjør ikke noe med dataene. Jeg bare kaster den bort for demonstrasjonsformål. Nå har jeg slags skimped løpet linje 22. Det er mer syntaks der, men dollartegn underst innlegget er like interessant. Og dette er hva som er fint om PHP. I PHP, har du det som kalles noen super globale variabler. De er liksom enda mer viktigere enn globale variabler. Og disse, all kapitalisert som sådan, kommer med PHP. Så hvis du har en server som har en webserver installert, som Apache, og du installerer språk støtte for PHP, plutselig du kan begynne å bruke disse super globale variabler i koden din. Og hva er fint om PHP er at hvis du bare skrive en fil som ender i dot PHP, satte den på en web server, og deretter sende inn et skjema til det via den handlingen tag og en form tag, den handlingen attributt i skjemaet tag, PHP og web helt finner ut hvordan de skal gripe alle de viktige verdi par ut av URL som spørsmålet mark q lik katter, det vil finne ut hvordan du q og katter. Hvis du sender et bilde, eller et brukernavn, eller et passord til å like Facebook, PHP vil finne ut for deg hvor alle disse dataene er. Og det vil bare hånden du en assosiativ array kalt dollartegn strek post, eller dollartegn underst får, avhengig av om du er bruker få eller legg innleveringer. Og det vil bare hånd du en super global variabel, slik at hvis du ønsker å få på navnet at brukeren sendes via denne nettsiden form, du bokstavelig talt bare si navnet av super global variabel, sitat, unquote, navn. Og sitat, unquote komfort, og sitat, unquote dorm. Og vi kommer til å være i stand til å gjøre dette og mye mer med PHP. Og selv om dette var en virvelvind blikk på det, vi vil dykke i mye mer neste uke. Vi vil innføre en database slik at du faktisk kommer til å begynne å implementere din egen e-handel based-- som nettsted i bare en ukes tid. Så vi får se deg neste gang, og håper du fikk tekstmeldinger. Ha det. [MUSIC SPILLE] [Døråpningen] SPEAKER 2: Hei. SPEAKER 3: Hva skjer? SPEAKER 2: Hva er det du gjør? SPEAKER 3: Arbeide på et problem sett. SPEAKER 2: Nice. High five. [HIGH FIVE] Hva are-- uh, hva gjør du her? SPEAKER 3: Just hanging out. Kom akkurat tilbake fra gym. Jeg kunne ikke hjelpe, men legge merke til når vi høy fived, at du har ganske grove hender. Går du til gym? SPEAKER 2: Nei. Nei. SPEAKER 3: Dude, du ser ganske stor. Som er dårlig, fordi alle vet 8-ball er den store mannen på campus. High five. SPEAKER 2: Eh, nei. Nei, jeg tror jeg er bra. Jeg tror jeg er bra.