[Musik spiller] SPEAKER 1: Dette er CS50 og dette er slutningen af ​​uge syv. I dag er måske hvor vi virkelig lære dig sprog. Vi introducerede i de sidste par uger HTML og CSS, hvoraf ingen er programmeringssprog. Og ja, selvom vi ikke gjorde se næsten alle mærkerne at HTML leveres med og næsten alle af de egenskaber, som CSS kommer med, der er slags det til HTML og CSS. Vi vil bare generelt begynde forudsat at du forstå de generelle ideer af tags og attributter, og sider bliver sendt fra klient til server. Fordi vi i dag begynder at se på andet programmeringssprog, PHP. Vi kommer til at gøre det super hurtigt. Vi kommer ikke til at lære dig PHP i sig selv, meget gerne vi ikke stræber efter at lære dig C, per se, men snarere programmering. Og ja, en af ​​de mål for dette kursus er ikke at lære dig C, eller HTML eller CSS eller PHP, eller en række andre buzz ord eller akronymer, men derimod datalogi og hvordan man programmerer fundamentalt. Og ja, vi i dag begynder at tage disse uddannelse hjul fra alle yderligere ved at flyve gennem en sprog kaldes PHP, som følger. Her er hvad dette sprog ser ud. Det viser sig, at der ikke er behov for en hovedfunktion i et program skrevet på et sprog kaldet PHP. Så det allerede lyder lidt enklere end C, som vi kender. Det viser sig, at hvis man ønsker at erklære en variabel, du gør det næsten identisk med C. Men Der er helt klart en forskel her når jeg erklærer en streng, eller måske to forskelle. Hvad ser anderledes ud? PUBLIKUM: Dollaren tegn. SPEAKER 1: Ja, der er dollar underskrive, som vi aldrig har set før. Og hvad der mangler? Ja? PUBLIKUM: [uhørligt] SPEAKER 1: Ja, der er ingen datatype. Så det viser sig, at PHP er, hvad vi kalder en løst skrevet sprog, hvor C er stærkt skrevet. Løst indtastet betyder blot, at der findes forskellige typer af data, Der er strenge, og ints, og flåd. Men computer tallene ud af det. Du mennesket programmør behøver ikke at regne det ud. Så alt hvad du skal gøre at erklære en variabel er dollartegn, navnet på din variabel, og derefter, for eksempel, citat Citat slut, hej verden. Nå det er hvad en tilstand ser ud i PHP. Eventuelle forskelle? Nej. Så det viser sig disse er identiske. Og du har måske færre filialer eller flere grene, men de syntaks sving ud nøjagtig det samme. Booleske udtryk kan bestilles sammen. Booleske udtryk kan anded sammen. Du har stadig kontakter. Selv hvis du ikke har brugt disse, har disse findes i C og de er funktionelt tilsvarende i PHP. Og i virkeligheden, i PHP de er lidt mere kraftfuld. I C, kan du kun sammenligne sikker datatyper som ints og chars, mens der i PHP kan du faktisk sammenligne fuld fledge strenge uden at have at bekymre sig om pointere og lignende. Så her er en for-løkke. Dette er blot pseudokode kode, hvis du vil. Men det er strukturelt identisk med C. Her er en while-løkke, pseudokode therefore-- identisk med C. Her er en gør samtidig loop-- identiske. Og så der er slags dette mønster her hvorved der er et par andre syntaktisk funktioner vi faktisk kommer til at se. I virkeligheden her er der en dejlig måde i PHP hvorved hvis du ønsker at gentage i et array, og du ønsker ikke at springe gennem mentale og syntaktiske hoops for at have int jeg lig 0, jeg mindre end n, jeg plus plus-- som er bare en masse irriterende syntaks. Du kan sige lidt mere fluidmæssigt for hver numre som nummer, hvor i dette tilfælde dollartegn numre, jeg antager, er som et array kaldet numre. Og så er jeg går nummer, ental, vil være en variabel. Og hvad PHP vil gøre for mig som jeg gentage i denne løkke er på hver iteration, det vil opdatere den variable nummer til være den i'te element i tal, plural. Så det bare håndterer alt dette for mig. Ingen kantede parenteser, ingen dollar tegn, ingen semikolon. Det er bare lidt enklere. Tja, hvis du ønsker en array, viser det sig, du kan gøre noget temmelig ligner C. Syntaksen er lidt anderledes. Men her er et array kaldet dollar underskrevet numre. Og jeg bruger, i PHP, firkantet parenteser, viser det sig. Og vi kommer til at se disse igen i JavaScript-- endnu et sprog. Jeg bare bruge firkantede beslag notation at have en kommasepareret liste af hele tal, i dette tilfælde. Men det giver mig et array. Men endnu mere kraftfuld i PHP, vi har også, hvad er generelt kaldes associative arrays. Og en masse sprog har disse samt. De ting om C arrays er, at indekserne til et array, den ting, som du brug i kantede parenteser via hvilke du få adgang til elementer, skal være hvad? PUBLIKUM: [uhørligt] SPEAKER 1: De skal være tal eller heltal, specifikt fra nul på op. Tja, i PHP, og, viser det sig ud på andre sprog, du kan begynde at have indekser, der ikke er numerisk. Men de er faktisk ord eller sætninger, således at i stedet for forsøge at huske, hvor noget er, eller gemmes i en variabel i, du kan faktisk bruge et ord og sige at-- du kan sige et ord som dette. Så dollartegn citat er den navnet på en variabel her. Dette er noget funky syntaks det er at knytte to centrale værdi par for denne variabel. Konkret er dette giver mig en matrix, der er af længde 2. Men indekser er ikke 0 og 1. Indeksene er quote citat slut symbol og citerer citat slut pris. Og værdierne af disse indekser, henholdsvis er FB for Facebook og $ 79,53, da jeg sidst kontrolleres en pris for dette. Hvad betyder det? Tja, det betyder, at i stedet for at skrive kode som dette, hvor jeg plejede at gøre noget ligesom dollar sign-- eller rettere, i C Jeg ville ikke engang have et dollartegn. Jeg ville gøre noget ligesom citater og derefter Jeg ville gøre beslag jeg at få på nogle vilkårligt numerisk indekseret værdi. Fra i dag i PHP, hvis du ønsker at komme på en vis værdi, vi slags har mere semantisk udtryksfuldhed. Bare en fancy måde at sige, vi kan bare kalde tingene, hvad de er. Og hvis du ønsker at få på noget symbol, nu du bogstaveligt talt gøre citere citat slut symbol i skarp parentes i stedet for en simpel nummer. Så det er en nice bekvemmelighed. Og det er slags det for nu. Der er klaser af andre funktioner i PHP. Og ja, PHP kommer med den legendariske køkkenvask. Snesevis, hundredvis af funktioner kommer med PHP-- så mange flere end kom med C. Og det er ikke beregnet til at overvælde men snarere hjælpe du indser, at vi ikke længere behøver at skrive kode det er slags hernede konceptuelt. Nu kan vi bare begynde at drage fordel af langt mere avancerede funktioner at sprog som PHP har. Så vi behøver ikke at bekymre dig om flytte tingene rundt i hukommelsen. Vi behøver ikke at bekymre sig om malloc og alle disse lavere niveau, kraftfulde detaljer, som du vil kæmpe med, hvis ikke kæmpe med, pset5, men du kan begynde at snart tager for givet. Faktisk, lad os skrive en super simpelt program i PHP, som følger. Jeg har tænkt mig at gå hovedet ind CS50 IDE her, og hvad jeg har tænkt mig at gøre er at oprette en ny fil, der meget enkelt vil blive kaldt hej dot PHP. Så i stedet for dot c, er det kommer til at hedde prik PHP. Og så i denne fil, Jeg kan begynde at skrive. Men det viser sig, at én ting, jeg er nødt til at vide, er, at enhver PHP-fil generelt behov at starte med nogle særlige syntaks. Samme ånd til HTML, men igen, PHP er et programmeringssprog, ikke et kodesprog. Så hver fil, og det er slags af dumme leder jeg vil indrømme. Open beslag, spørgsmålstegn, PHP. Og det er netop den sprogs måde at sige, hey, computer her kommer noget kode skrevet i et sprog, der kaldes PHP. Og så til allersidst af din fil, du gør slags slags det modsatte. Du behøver ikke skrive PHP igen, skal du bare gør spørgsmålstegn, vinkel beslag. Og derefter noget du lægger inde af disse to tags, så at sige, vil være, eller bør være, PHP-kode. Så lad os gøre noget super enkel. Jeg har tænkt mig at gå videre og gøre print def, hej verden, backslash n, gemme. Og nu på min prompt, vil jeg gør, gør hello-- nej, jeg har tænkt mig at gøre, dot skråstreg hej. Nej, dot skråstreg, hm. Så noget er anderledes. Og ja, det er en afgørende forskel mellem PHP og sprog som C. C var en såkaldt kompileret sprog. Hvad betød det for C, der skal udarbejdes? Hvad var konsekvenserne? Ja. PUBLIKUM: Skrev det til maskinkode så det kunne køres af computeren. SPEAKER 1: Præcis. Vi er nødt til først konvertere det til såkaldte maskine kode, nuller og ettaller, før det rent faktisk vil være eksekverbare og forstås af computeren. Af Intel indeni. Af CPU indersiden af ​​computeren. PHP, derimod, er det, der hedder et fortolket sprog, som betyder, at du ikke kompilere det ind nuller og ettaller, maskinkode, du i stedet lade det være som kildekode. Og du i stedet give det som input til et program, en tolk at en anden skrev år siden, der forstår det linje for linje, tegn for tegn. Så med andre ord, mennesker derude skrev et program, der vil se på din kode linje for linje, og regne ud, hvad computeren skal gøre, uden at konvertere direkte til nuller og ettaller. Så hvis det ser en for-løkke, denne såkaldte fortolker kommer til at være ligesom, okay, jeg skulle gøre noget igen og igen og igen. Hvad burde jeg gøre? Lad mig se på den næste linje. Lad mig se på den næste linje. Og det virkelig fortolker det linje for linje. Så for at udføre det, jeg ikke bruge make. Jeg bruger ikke dot skråstreg i dette tilfælde. I stedet gør PHP, som er navnet på et program, alias En tolk, der er præ-installeret i CS50 IDE, og nu har jeg brug for at passere en kommandolinje argument, som er ganske enkelt navnet på den fil, at jeg ønsker at fortolke. Eller mere henkastet, at jeg vil køre. Og hvis jeg ramte Enter, der har vi det. Hej Verden. Nu viser det sig, at jeg Brugte print def bevidst at bygge bro os fra C til PHP. De fleste PHP programmører, som du vil se, ikke engang gider at bruge print def. De bare bruge en funktion kaldet print, som C ikke havde. Og så hvis jeg køres igen det nu, det faktisk opfører funktionelt det samme. Jeg kan ikke bruge procent s og procent i og så videre, men der er andre måder i PHP at gøre det på. Men dette er kun til sige, at syntaktisk, andre end nogle underlige ting op toppen, og nogle underlige tegn ned i bunden, begreberne nu af programmering i dette andet sprog kommer til at være præcis den samme. Faktisk lad os gøre et andet eksempel. Så jeg har tænkt mig at gå videre og luk denne fil. Lad mig lave en anden, der Jeg ringer vilkår 1 prik PHP. Så ingen nul, fordi det, jeg gjorde var jeg kiggede tilbage et par uger siden, vi havde en fil kaldet vilkår 1 prik C. Og hvad Jeg blev konverteret det i min hoved, og her på papiret, og snart på kursets hjemmeside, linje for linje i PHP. Så i C-version, vi gjorde noget Ligesom strengen s får få strengen. Så det er lidt anderledes at gøre det i PHP. I stedet, jeg bare at gøre, eller rettere, jeg kunne have gjort int n får få int, i dette eksempel tidligere. Så i stedet for det, vil jeg gøre n bliver læst linje, vil jeg gerne et heltal, be om. Så dette er bare min prompt. Og så viser det sig, og Jeg vil kun vide dette fra at have læst eller set den funktion før, læse linjer af funktion i PHP tager et argument, der er en prompt for mennesket, og dens formål i livet er at læse en tekstlinie at han eller hun typer i. Og så er det gemmer der tekst i den variable n. Og nu jeg måske ønsker at gøre noget ligesom jeg gjorde uger siden, på samme uge en af ​​klassen. Hvis n er større end nul, så jeg har tænkt mig at låne, at syntaks vi lige set, print def, du valgte et positivt tal, backslash n. Andet, hvis n er lig med nul, er jeg kommer til at gå videre og sige, udskrive def, du valgte nul backslash n. Else, sagen her bør naturligvis være, udskrive def, du valgte et negativt tal. Og vi kan helt sikkert gennemføre logikken i denne ting i en masse forskellige måder, men pointen her er, at syntaktisk, næppe noget er nyt. Det er bare dollar tegn og en ny funktion og læse linje. Men fundamentalt, hvad der er nyt nu er jeg fortolke dette. Jeg passerer det som input til et andet program. Så hvis jeg ønsker at køre dette, hvis Jeg har ikke nogen fejl, Jeg har tænkt mig at køre PHP, af vilkår 1 dot PHP, Enter, Jeg har tænkt mig at skrive i antallet 50, og lad os antage, for nu det fungerer. Fordi logikken er samme ting som uge et. Okay, så det er temmelig underwhelming, ikke? Vi kunne gøre dette i en hvilken som helst antal sprog. Lad os gøre noget måde mere kraftfuld. Lad os færdig problem sæt fem. Så jeg har tænkt mig at gå videre og gøre dette. Jeg har tænkt mig at oprette en fil kaldes ordbog dot PHP, og med en hældning, som du kan være at klatre ned masser af noter, noterne vil kun hjælpe dig, hvis du er tilladt at gennemføre problemer sætte fem i PHP. Men vi vil se, hvor hurtigt vi nu kan gennemføre denne samme problem sæt. Så i ordbogen dot PHP, vil jeg at antage, at der allerede er en fil i verden kaldet stave. Og ja, jeg gjorde det i forvejen, og vi vil ikke gå gennem denne linje for linje, men hvis du er nysgerrig senere og virkelig ønsker til wrap dit sind omkring forskelle mellem C og PHP, bogstaveligt sammenligne denne fil, Speller fra dagens kildekode at vi vil sende senere dag, mod p sæt fem speller dot c, at vi giver dig, og det er næsten den samme linje for linje. Der er nogle flere dollartegn. Et par funktioner er lidt anderledes. Men det er en dejlig måde af slags se, hvordan du oversætte et sprog til et andet. Og det er næsten identisk linje for linje. Men jeg har tænkt mig at antage, at der eksisterer, og hvad jeg har tænkt mig at gøre her er at forsøge at blæse dit imod ved reimplementing helhed af problemet sæt fem måde hurtigere end du har gjort hidtil. Så for eksempel, vil jeg først erklære en global variabel kaldet størrelse, og sæt den lig med nul. Nu det er ikke meget besparelser. Odds er du implementeret størrelse stort set den samme, eller hint hint, vil i aften eller i morgen, blot ved hjælp af en global variabel kaldet størrelse og sætte den lig med nul. Det er ikke en særlig fantastiske spoiler. Så hvad var dine data strukturer valg, de af jer, der har dykket i og læs spec, hvad datastrukturer har de fleste af jer har brugt? En hash tabel eller prøv, måske nogle varianter deraf. Så gennemføre en hash tabel mindst, er lidt af en masse linjer kode, højre? Og ikke alle af dem kan være funktionelt på dette tidspunkt på ugen, men det er fint. Fordi i PHP, hvis jeg ønsker en hash tabel, gjort. Højre? Så variabel, jeg har netop erklæret er naturligvis kaldet dollar tegn bord, pr indførelsen før. Men jeg virkelig bare vil have, på I slutningen af ​​dagen, et array. Men ikke en numerisk indekseret array, fordi det er ligesom uge to kram, da vi talte om arrays. Jeg vil have en hash tabel. Men en hash tabel er virkelig bare en konkret måde at sige, du ønsker en associativt array. Du vil være i stand til at associerede nøgler med værdier. Nøgler med værdier. Hvad er en ordbog, virkelig? Jamen det er en hel masse af nøgler. Ord som æble, pære, og banan, og alle disse engelske ord at vi hånd du. Og de værdier, som du er effektivt indsættelse i din ordbog er enten sand eller manglende, falske. Med andre ord, du indsætter en hel masse vigtige værdi par, æble, sand, pære, sandt, banan, sandt. Så når du hente eller se op, at data i dit hash tabel med din check-funktion, er du enten at komme tilbage et svar, ja, jeg fandt det i min komplekse hash tabel, eller nej, det er ikke der, så du vender tilbage falsk. Så for at gøre det, jeg har brug for er de data, struktur som jeg foreslog før. Jeg har bare brug for at være i stand at knytte ord lignende, citat Citat slut, symbol, med en værdi lignende, sandt. Så der er min hash tabellen. Lad os rent faktisk bruger det. Så der er et par funktioner Jeg har brug for at gennemføre. Jeg har tænkt mig at gå videre og bide fra en funktion kaldet størrelse. Det tager ingen argumenter. Jeg behøver ikke at bekymre ordet, ugyldig, i PHP. Jeg vil blot vende tilbage størrelse. Og som en sidebemærkning, PHP har dette minorly irriterende detaljer, hvor, hvis noget er global, er du nødt til at fortælle den funktion, hvor du bruger det, hey, det er en global variabel. Så mindre dumhed, men du nødt til at gøre det alligevel. Så hvad med belastning? Jeg har tænkt mig at gennemføre en funktion kaldet belastning der tager i navnet på en ordbog, ligesom i problemet sæt fem. Og før jeg går videre, bemærke, at jeg ikke har været at skrive helt de samme ting. Hvad er naturligvis anderledes i PHP om hvordan du erklærer en funktion versus C? Ja. PUBLIKUM: [uhørligt] SPEAKER 1: Ingen retur type. Og ja, det er tilfældet, PHP for så vidt det er løst skrevet, er også lidt sjusket i den forstand. Du behøver ikke angive som programmøren hvad denne funktion returnerer. Du ville have til rent faktisk at se på koden for at finde ud af. Eller læse kommentarer eller dokumentationen. Så plusser og minusser af disse former for beslutninger. Men jeg behøver at sige nøgleordet, funktion. Og når vi lærer JavaScript i et par uger vi kommer til at se de samme ting igen, men det er den samme idé. Navnet på den funktion, dens argumentation eller argumenter eller mangel på samme, og nu her er implementeringen. Så jeg har tænkt mig at skære nogle hjørner bare at være dramatisk for blot et øjeblik. Men jeg har tænkt mig at gå videre og sige dette. Dette er, hvordan jeg kan indlæse en fil i et array. Der er en funktion i PHP kaldet fil. Du aflevere det navnet på en fil. Det hænder du tilbage et array, indvendig af hvilket er hver linje fra filen. Fra nul, en, på op til n minus 1 linjer. Det er det, ikke? Der er ingen f læse. Der er ingen f get s. Der er ingen procent s. Der er ingen hovedpine. Der er ingen feof. Alt dette ting med, som du har kæmpet måske med p sæt fire og fem, går væk. Så jeg har lige læst disse linjer i filen, og så ved du hvad? Hvis jeg ønsker at gentage over disse ord, Jeg kan gøre, for hver linjer som linje. Husk, at dette var sådan en klog måde iteration over en matrix, indeks ved indeks, og på hver iteration kald den aktuelle linje, dollartegn linje. Og lige her jeg har tænkt mig at gå og siger bord, beslag, line, bliver sandt. Med andre ord, det er sådan jeg indsætte i min hash tabellen i PHP. Jeg siger dollartegn tabel, som er min associative array, der var tomme pr linje kode op over. Jeg derefter indekset i det ikke ved hjælp af en række, men bogstaveligt hjælp af søgeord, som jeg holder af. Måske er det æble eller pære eller banan eller hvad, men specifikt jeg indeksering ind i det ligesom jeg foreslog tidligere. Jeg tager navnet på min associative array, og så er jeg bruge quote citat slut i kantede parenteser med en snor, i stedet for en faktiske antal. Og så det er det. Belastningen funktionen er færdig. Når denne løkke gentager, har jeg lagt alt i hash tabellen. Nu lille ansvarsfraskrivelse, der er en par ting, jeg behøver at løse. Og den version jeg vil bogføre online vil have alle nuancerne, men det er for det meste bare at være nogle fejlkontrol og nogle mindre tweaks. Men det er faktisk kernen i det. Hvis jeg nu ønsker at gennemføre funktionen kaldes check, der forventer en ord som sit argument, hvordan kan jeg gå om at gøre det? Nå, jeg bare vil sige, hvis indersiden af ​​min tabel, ved placering ord, hvis indstilles. Så hvis der is-- faktisk, ved du hvad? Jeg har tænkt mig at gøre det i lidt af pseudokode. Men ideen er den samme. Hvis der er lig med sand, returnere sandt. Okay. Else-- du kan slags se, hvor dette going-- at returnere false. Færdig. Check er gjort. Pretty nice, right? Og så hvad er det egentlig at komme på? Og også dette, jeg skære nogle hjørner. Kig på den version online for alle de små nuancer. Men det er kernen i det. Indeks ind i din associative array, alias Hash tabel, se om der er en værdi der, hvis det er sat til true, og hvis ja, returnere sandt. Så vi har skåret ned alle kompleksitet. Så slags sind blæser, ikke? Jeg vil ikke gider efterbehandling det med unload, fordi i fact-- åh, ved du hvad? Ja, lad os slutte det med losse. Losse i en hash tabel kan se Ligesom funktion losse, vende tilbage. OK, så det er losse. Fordi der ikke er noget at losse, ikke? Der er ingen malloc. Jeg har ikke udtrykkeligt spørge styresystem til noget. Jeg er lige begyndt at bruge variabler. Og så dette er også en manifestation af funktioner i højere sprog niveau. Så igen, det meste af denne valgperiode vi har været der beskæftiger sig hernede med C. Super lavt niveau. Du kan se computerens hukommelse. Du kan trykke på noget, du ønsker i computerens RAM, for bedre eller værre. Heroppe, vi kommer til at opgive denne magt. Men min Gud, se hvordan meget mindre kode jeg skrev. I virkeligheden, hvis jeg ikke talte og tale over min skrive, vi ville have været gjort med dette eksempel for fem minutter siden. Så hvad er den pris bliver betalt? Jamen så lad os tage et kig. Lad os tage et kig. Jeg har tænkt mig at gå videre og køre CS50. Lad mig først gå ind nutidens eksempler, hvor Jeg har den tekster mappe som før. Jeg har tænkt mig at køre den løsning, det kommer med problemet sæt fem kaldet Speller, som er i CS50 konto. Og jeg har tænkt mig at køre det på noget store ligesom King James Bible, bare så vi virkelig sætte personalets løsninger på prøve. Nu nogle gange internettet er en lidt langsommere, lidt hurtigere, kan tage et stykke tid at rulle. Men det tog i alt .56 sekunder at stave tjekke King James Bibel hjælp af personalet opløsning. Så temmelig godt. Med venlig kan være meget langsommere, og det er helt fint. Men det er korrekt her. Så det er de ansatte løsning. Hvis jeg går ind og rydde op i PHP-version. Og jeg har tænkt mig at gøre lidt ligesom bagning show ting. Vi kommer til at tage den kode jeg skrev tidligere, så det er helt korrekt. Fordi koden jeg skrev ikke vil at være helt korrekt lige nu. Men hvis jeg kører PHP-version, hvad skal jeg give dig i dag? Tog mig fem minutter til at gennemføre p sæt fem, hævder jeg. Hvilken pris har jeg betalt? Ja. PUBLIKUM: Hastighed. SPEAKER 1: Hastighed. Hvad mener du? PUBLIKUM: Det kommer til at tage længere tid. SPEAKER 1: Okay. Lad os se. Det kommer til at tage længere tid, ikke at skrive, men at køre den. Ja. Så lad os prøve dette. Så her jeg har tænkt mig at gå videre og gøre PHP for speller, og fordi filens kaldet stave. Så jeg ikke kører ordbog, tilbagekaldelse, Jeg kører det program kaldet stave. Jeg har tænkt mig at passere i den samme fil, Kong James den femte. Det flyvende forbi. Det kunne bare være internet hastighed, så du skal ikke læse for meget ind i det. Men det føles længere sikker. 1.26 sekunder. Se, det er stadig temmelig sgu hurtigt, ikke? Og den eneste grund til, at følte mere som tre eller fire, eller fem sekunder, det er bare fordi Internettet var at være langsom. Computeren tid brugt var 1,26 sekunder, versus jeg tror 0,56. Så mere end dobbelt så langsom. Nu, er stadig temmelig darn hurtigt, men det er en manifestation af, ja, det nøjagtige pris. Fordi vi fortolker i koden linje for linje, og at programmet PHP læser min kode top til bund, venstre til højre, det har at gøre mere tænkning. Det har at slags konvertere det inde i sig selv til den tilsvarende maskine kode på flue, så at sige, selv om mekanikken er en smule anderledes. I stedet for blot at tilføre til Intel CPU de rå nuller og ettaller at den forstår indbygget. Så absolut, hænder ned, vi har betalt en pris. Og kode skrevet i et sprog som PHP tendens til at være langsommere. Men min gud. Så nu når jeg stave tjekke min fil, jeg tilbringe en ekstra 0,7 sekunder eller deromkring vs 20 timer at gennemføre en hurtigere stavekontrol, ikke? Det er lidt en afvejning. Og hvis du lige er startet p indstille fem, måske ikke være 20 timer. Kan være langt færre end det. Men det er en afvejning, for alvor. Og hvis du kører kode på virkelig store datasæt, eller på endnu ældre hardware, den slags forskelle kan helt sikkert tilføje op. Eventuelle spørgsmål hidtil? Ja. PUBLIKUM: [uhørligt] SPEAKER 1: Beklager, kan du siger det en gang mere? PUBLIKUM: [uhørligt] SPEAKER 1: Du giver op tid. Nå, så ja. Du sparer tid ved ikke at skulle kompilere det, hvis det er det du spørger. Og ja, i CS50, de fleste af de programmer, selv om de kan tage et stykke at skrive, de er relativt kort. Kun få dusin, få hundrede linjer kode, og så de kompilere temmelig hurtigt. Men når du starter skrive større programmer, ligesom hvis du er Microsoft eller du er Google og skriver virkelig store programmer i C eller C ++, eller på lignende måde kompileret sprog, kunne tage mange sekunder, eller endda minutter eller længere at kompilere millioner af linjer kode. Og der også, at Forskellen vil tilføje op. Og i virkeligheden, når vi overgang i dag, samme dag i dag, til webprogrammering ved hjælp af PHP, er du vil finde det lige så meget mere behageligt at skrive kode når du ikke behøver at gøre disse dumme trin som ændring af din terminal vindue, type make hej, re køre den, genindlæse vinduet. Bare så mange dumme mekaniske trin, bare komme i vejen for at gøre det interessante, det sjove arbejde. Og faktisk vi smider det væk med PHP. Og vi kan interagere med den hurtigere. Ja. PUBLIKUM: [uhørligt] SPEAKER 1: Sure. Kan jeg præcisere, hvad det midler skal fortolkes? Når du kompilerer et sprog som C, det går ned som vi sagde til maskine kode, nuller og ettaller. Og Intel besluttede år siden, at visse mønstre af nuller og ettaller repræsenterer addition eller subtraktion, eller udskrive eller andre basale operationer. I verden af ​​et fortolket sprog som PHP eller JavaScript, eller Python, eller Ruby eller klaser af andre, i stedet en har skrevet en interpreter-- i denne sag, det er også kaldet PHP, identisk med den navn på language-- der hovedsagelig har en stor sløjfe i den, som gentager over alle de linjer i koden at jeg fodrer det som input, ligesom goddag dot PHP, eller ordbog prik PHP. Og så kan du tænke på deres store loop som havende en masse betingelser. Og disse betingelser sige, hvis menneske har skrevet nøgleordet for, begynde at gøre hans eller hendes kode igen og igen. Eller hvis menneske har skrevet linje kode, hvis kun udføre deres næste linje betinget. Så det er virkelig ligesom tolkning det i en human forstand, linie for linje, og at netop tager tid. Det tager overhead. Og så det er en price-- god question-- vi betaler. Så lad os gøre en anden demo der er lidt mere dramatisk. Der er, vil jeg sige, en ballpark dette på sandsynlighed 90% for ikke grueligt, men du vil blive overrasket med 10% sandsynlighed. Så hvert år forsøger vi at gøre dette, hvorved vi forsøger at skrive et program der går gennem Problemet sæt nul, som du har indsendt dine telefonnumre og en masse andre demografiske informationer, og vi programmatisk sende dig en sms. Og så alles telefon begynder at bippe eller vibrere, og det er bare fantastisk, fordi godt, se på, hvad computere kan gøre. Dette virker sjældent korrekt det forekommer, for en stor del fordi jeg typisk få sortlistet af Gmail eller en anden tjeneste for rent faktisk at forsøge at gøre dette på skalaen. Men sjove ting er også, da vi har ikke alle her i dag, sjov kendsgerning sidste gang vi prøvet dette for to år siden, Jeg tror, ​​jeg skrev et program som sad i en løkke iteration over alle elever i klassen, og hver af dem en sms, og det sagde noget lignende, hvorfor er du ikke i forelæsning? Kærlighed, CS50 bot. Du har ingen idé om, hvor mange undskyldende og sortering af smertefulde emails Jeg har modtaget svar fra n minus 100 personer, som ikke var her den dag. Og endnu sjovere, mere beskæmmende story-- du ved, lad os sætte det derude. Det er allerede på video for et par år tilbage. Så du vil snart se mig skrive en for-løkke, hvor det er meget nemt at skrive en fejl i den for-løkke, således at den første gang gennem løkken, du sende en SMS-besked. Anden gang gennem løkken I burde have sendt endnu en SMS-besked, og derefter en mere tekst besked, og en mere. Men det viser sig, hvis du laver en tastefejl ved programmering, man nogle gange kan skrive programmer, der sender en sms, så to SMS-beskeder, derefter tre sms'er til alle hvem der allerede har modtaget en tekstmeddelelse. Og som du ved, at gøre noget, plus noget, plus noget, plus noget, er stort O af et parti af SMS-beskeder, eller n kvadreret, eller $ 0,10 en sms, $ 20.000. Heldigvis jeg ramte Ctrl-C, før det skete, men jeg skylder mindst én af dine forgængere $ 20 for 200 nogle ulige tekstbeskeder,, ikke kun gik til sin telefon, men det var også ligesom en ældre flip telefon så det vil skubbet ud af sin hukommelse hver anden personlig tekst budskab, han havde faktisk fået. Så vi har ét mål i dag, ikke at gøre det. Måske aktivere flytilstand. Okay. Så lad os gå ind i en program her callled-- at jeg vil kalde tekst dot PHP. Og i forvejen, har jeg fået to filer her. Jeg lavede en fil til bare personale, er der fik alle ansatte info, alle navne fra kurset hjemmeside. Og så for nu jeg bare sætte nogle falske numre 555-1212. Så disse ikke ville faktisk gå nogen steder. Men mærke indersiden af ​​denne CSV-fil, som vi talte om kort før i forbindelse med filen IO. Hvad er en CSV-fil? Komma adskilte variabler. Og det er lidt ligesom en meget letvægts database, hvis du vil. Der er slags slags fire kolonner i denne fil, og der takkede, men de kommaer væsentlige repræsentere kolonner i filen. Den første kolonne er TF eller CA navn. Anden kolonne er deres efternavn. Tredje kolonne er deres telefonnummer. Og fjerde kolonne tilsyneladende is-- fjerde kolonne er hvad tilsyneladende? OK, så det er deres luftfartsselskab. Så Verizon eller Sprint, eller hvad ikke. Og hvis jeg misspoke tidligere, CSV. Kommaseparerede værdier er CSV her. Så hvad kan jeg gøre med dette? Jamen det er bare en stor tekstfil, og det er lidt længe, ​​ikke? Ligesom dette vil være slags irriterende. Og det viser sig, selv om, at hvis jeg vil sende en tekstmeddelelse til, lad os siger Alex her. Lad mig gå ind i min browser og gå ud af fuld skærm bare så jeg kan skifte frem og tilbage. Det viser sig, lad os se, hvis jeg går i her, og log ind på Gmail, okay. Må ikke se på denne del. Bare jeg får at se. selvfølgelig Livestream kan stadig se, hvad jeg laver. Okay. Så her er bare Gmail med John Harvard konto. Så hvis jeg vil sende en tekstbesked til Alex, Jeg kan selvfølgelig skrive en meddelelse. Og det viser sig, og jeg har testet det med Alex før her, så du kan tilføje en vis domæne navn til folks telefonnumre, fordi der eksisterer i verden ting kaldet sms til e-mail gateways. Hvilket er en fancy måde at sige alle af os, der har mobiltelefoner, har telefonnumre, selvfølgelig, der formentlig er for din luftfartsselskab, en vis suffiks ligesom Vtext.com for Verizon tekstbesked dot com, som du kan føje til din egen personlige telefonnummer, og derefter du eller venner, eller dine forældre kan tekst dig på det pågældende adresse. Og Verizon har en server, en e-mail server, der ved modtagelse af denne e-mail, ser på det numeriske del og derefter bruger uanset særlige industri magi de har faktisk sende det over æteren til din bestemt celle telefon. Nu er dette er rart, fordi jeg ikke virkelig vide, hvordan du sender en tekstmeddelelse eller til at skrive kode endnu til min mobiltelefon, og du kan gøre præcis det for et afsluttende projekt, men for nu alle Jeg har, er min bærbare her. Så jeg vil gerne gentage over, at CSV fil, line, linje, linje, linje, grab hver af medarbejdernes telefonnumre, og deres luftfartsselskab og programmeringsmæssigt, sammenkæde, dvs. slutte telefonen nummer med passende domænenavn og derefter sende en e-mail. Så det er en masse trin. Og held og lykke at gøre det i C. Det er et mareridt af en situation at åbne en fil, for at læse den line, for linje, linje, som du ser, eller kan snart se med problemet sæt fem, hvis ikke Problemet sæt fire, og derefter til dynamisk sammenkæde to strenge sammen, for i C, at tage to strenge og kombinere dem, hvad gør du minimalt nødt til at gøre mest sandsynligt? Du er nødt til at erklære mere hukommelse, right? Og spørg, malloc, kan jeg have mere hukommelse? Så jeg kan sætte halvdelen af ​​denne her, halvdelen af ​​det her. Det er bare så mange trin. Og ved det punkt, du har mistet interesse i den dumme lille demo hvor du gør alles telefon bip. Lad os gøre denne form for PHP stil, hvor vi bare begynde at bruge mere af det køkkenvask. Og ideer er grundlæggende de samme, men vi behøver ikke at bekymre dig for meget om det lavere niveau. Så lad os se, hvordan jeg kunne gå om at gøre dette. Og bare så jeg ikke gentage tidligere fejltagelser, Jeg har skrevet nogle noter for mig selv her. Og lad os se om jeg kan gå os gennem nogle af de fundamentale trin, og derefter i gang skyld vi får måske skære nogle hjørner i sidste ende. Jeg har tænkt mig at gå videre og gøre åben beslag PHP til at starte denne fil. Og jeg har tænkt mig at gå videre og gøre dette. Fil håndtag, som du vil snart se, faktisk kalder en funktion kaldet f åben. Og husk dette åbner en fil. Og citatet, citat slut, R betyder hvad, igen? Bare åbne den for læsning. Nu i p sæt til, du gjorde det. Og håndtag kunne være noget, fu, bar, bas, enhver variabelnavn. Men generelt en computer videnskabsmand ville kalde en åben fil, giver dig en fil håndtag, noget at holde på så at sige. Jeg skal bare gøre nogle fejlkontrol. Så hvis håndtaget er falsk, ligesom i C, vil jeg gøre noget lignende, kunne ikke åbne filen, backslash n. Og så jeg bare at gå videre og afslutte. Og det viser sig, i PHP, Jeg er ikke inde i en funktion. Der er ingen vigtigste funktion her. Så jeg ikke vender tilbage, per se. Jeg afslutte. Som i det væsentlige det samme. Og jeg afslutter med en y sandsynligvis. Én betyder bare en fejl af en slags. Det er ikke-nul, så det er en fejl. Okay, så hvis jeg er hernede nu i mit program, jeg har åbnet filen. Jeg har tænkt mig at gå videre og erklære et array kaldet adresser, og i C ville jeg nødt til at kende størrelsen af ​​array i forvejen, right? Eller jeg skulle erklære dette er en pointer, og derefter bruge malloc. Og så hver gang jeg læser gennem en anden række i filen, Jeg har tænkt mig at brug for at malloc mere hukommelse, malloc mere hukommelse. Det er en smerte i nakken. Og heldigvis, PHP og Ruby, og Python, og JavaScript, de vil vokse dine arrays for dig automatisk. Ikke mere malloc. Ikke mere hukommelse ledelse. Computeren tager sig af det. Men den pris, du betaler. Det er lidt langsommere. Og for et program som dette Vi kommer ikke til at lægge mærke til. Vi kommer til at sende 100 SMS-beskeder. For eksempel ikke kommer til at føle det. Det er virkelig kun begynder at ligegyldigt dit sprog valg når dine data eller dine programmer få virkelig, virkelig anselig, som det vil være tilfældet mere med vores webbaserede stuff. Men for nu lad os gå videre. Selv om det viser sig, at der er en funktion i C kaldes f få CSV. Fil få CSV, der tager en fil håndtag som sit argument, og det fortsætter derefter, række, som række ved række, at læse i en række. Så det læser blot en linje af tekst fra filen. Men hvad er rart om denne funktion, det ikke bare give mig en tekstlinje. Det ser for disse kommaer, og parser linjen. Og at parse linjen betyder at opdele det på visse værdier i denne sammenhæng. Med andre ord, dollartegn række er en variabel, der er kommer til at give mig en masse indekser. Dette vil være det første kolonne i min CSV. Dette vil være den anden kolonne, dette vil være den tredje, og dette vil være den fjerde. Fordi tilbagekaldelse, og Excel det ikke samarbejder sidste gang vi gjorde dette, men hvis jeg downloader personale dot CSV. Hovsa, ikke omdøbe. Hvis jeg downloader personale dot CSV, og prøv at åbne den, Jeg har allerede registered-- åh jeg ikke opdatere Excel siden sidste gang. Du vil se, at i personale dot CSV, jeg har fire kolonner. Så da jeg læste i første række til Abby her, dollartegn række 0 er Abby, dollar tegn rækken man er Lyons, dollartegn række to er hendes nummer, og derefter hendes telefonens luftfartsselskab. Så det er alt. Og det er rart, fordi jeg behøver ikke at nu finde ud hvor alle disse kommaer rent faktisk er. Så jeg har tænkt mig at gå videre og gøre dette, eftersom definition, Jeg har tænkt mig at sige, at hendes navn er i række beslag nul, som lovet. Og jeg har tænkt mig at grab-- og faktisk, ved du hvad? Jeg har ikke tænkt mig at bekymre sig om hendes navn, i dette tilfælde. Jeg har tænkt mig at holde det enklere. Jeg har tænkt mig at gøre hendes nummer er i række beslag to, tror jeg. Og hendes luftfartsselskab var i hvor? Række tre, den ene over. Så intet nyt der. Det er bare nul indeksering i et array. Og nu, jeg har tænkt mig at gøre følgende. Hvis luftfartsselskabet lig lig AT & T-- Jeg skal bare have en loop-- Jeg ønsker at skabe en e-mail adresse, der ser sådan ud. Det kommer til at være 617-555-1212 på, hvad er det, text.ATT.net, er, hvad jeg ønsker at gøre. Så hvordan gør jeg det? Jeg har tænkt mig at gøre følgende. Hendes adresse bliver hendes nummer, og nu, lad mig gå videre og gøre dette. Dette er nogle funky syntaks. Jeg kunne gøre procenten s trick, men jeg kan faktisk bare gøre dette. Så dette er en PHP ting, men lad os overveje, hvad jeg laver. Dollars underskriver adresse på til venstre, bare en variabel. Giv mig en variabel. Jeg behøver ikke at angive typen. PHP vil finde ud af det. På højre side, hvad er datatype af denne hele på højre side? Ligner en streng, fordi der er dobbelt citerer længst til venstre og længst til højre. Nu er der nogle funky nyt syntaks her. Der er de krøllede parenteser, og dollar tegn nummer. Men tage en gætte, hvad er, at syntaks sandsynligvis fortæller PHP til at gøre for mig? Ja. Bare indsæt værdien der. Så ingen procent s. Vi kunne bruge print f eller s print f eller noget lignende, men PHP og en masse højere sprog niveau, du kommer til at se, at du kunne gøre det samme funktionelt, måske seks forskellige måder. Og så begynder det at blive et spørgsmål om design eller stil. Så dette er bare en kryptisk leder vej at sige, giv mig en e-mail-adresse, men plug-in nummeret i mellem disse krøllede parenteser. Og de krøllede parenteser vil ikke ender i den endelige adresse. Nu kan vi springe over nogle af disse linjer til tiden skyld. Så hvis et luftfartsselskab er lig lig verHorizon-- hovsa, Verizon-- jeg ønsker at gøre noget meget ens, når adressen bliver, tilbud, citat slut, nummer på text.ATT.net. Og så kan jeg gøre det samme slags ting for resten af ​​bærerne. Men jeg vil bare gøre dot, dot, dot for nu. Og lad os nu antage, at Jeg ønsker at tilføje array, skubbe. Jeg ønsker at tilføje til den matrix, kaldet adresser. Denne adresse, det er hvordan du tilføje noget til et array i PHP. Du behøver ikke at gøre malloc. Du behøver ikke at ændre størrelsen på array. Du skal bare sige array, push. Hvad ønsker du at push-- hvad matrix ønsker du at skubbe noget ind? Adresser. Hvad du ønsker at skubbe på adresser? Adresse. Og i virkeligheden, hvis du virkelig ønsker at være klog, nogle syntaktiske sukker for dette, så at sige, hvilket betyder bare, hvordan kan du gøre dette i den pænere måde, ville være at gøre dette. Også dette har den virkning at vokse den adresser array ved størrelse én, og derefter plop at yderligere e-mail-adresse ind i det. Ja. PUBLIKUM: [uhørligt] SPEAKER 1: En tastefejl på ellers if-- åh, luftfartsselskab. Det er ok. Det vil heller ikke lide min manglende gennemføre en del af dette program senere. Men tak for at fange. Endnu bug. Tak. Vi ønsker, at dette at være Vtext.com. Ja. Okay. Så hvor efterlader det os? Vi har skrevet koden til at åbne filen. Vi har en løkke for at skifte over rækkerne i filen. Vi har kode, der tilføjer til min array, en ad gangen, i korrekt formateret e-mail-adresse. Så alt, hvad der virkelig mangler, er at sende en e-mail til hver af disse mennesker. Så jeg har gået videre og borgerrettighedsprogram mig selv som følger. Hvad jeg har tænkt mig at gøre her is-- og lad os gå videre og springe til nogle konkrete kode, som ser sådan ud. Så her er det forbagte version, jeg skrev tidligere. Og mærke jeg færdig gennemførelse af Sprint. Jeg færdig med at gennemføre T-Mobile. Jeg blev færdig gennemføre Virgin Mobile. Og jeg vil undskylde på forhånd. Der er et par luftfartsselskaber, nogle elever i klassen har at jeg ikke gider at opremse i hvis betingelse her. Så ikke alle tekster vil gå ud. Men lad os se, hvad jeg ellers skal gøre. Jeg lukker filen, bare ligesom i p sæt fire. Og dette er nyt syntaks. Og vi vil se lidt bit af denne over tid, især med p sæt syv og otte. Men det er syntaks for at skabe en særlig form for struktur. Det viser sig, at der er et bibliotek, der kommer med PHP, kaldet PHP mailer. Dens formål i livet er at programmatisk sende e-mails. Det er kode en anden skrev, at gør det lettere for os at sende e-mails, så vi ikke behøver at holde gå frem og tilbage til Gmail, og indsætte i folks e-mailadresser. Der er en hel masse af linjer her der ærligt, jeg bare slags kopieret og indsættes fra dokumentationen. Og i virkeligheden, hvis du er nysgerrig, jeg forlod alle af webadresser på dokumentationen i koden, som vi vil sende senere. Og læg mærke til, at der blandt de ting, jeg gør er, jeg siger dette bibliotek, bruge Gmails server, ikke? SMTP talte vi kort om, når vi var på Yale om at være enkel post transfer protocol. Det er den protokol, servere, der bruges til at sende e-mail, og that's-- Gmail har en af ​​dem. En port, er TCP portnummer. Det er fint, hvis du ikke har set 587 før. Bare vide, at fra dokumentationen. Her er mit brugernavn. Jeg har tænkt mig at bruge CF50 bot. Og i et øjeblik, jeg bare gå til skrive i bot faktiske adgangskode. Og derefter ned her, mærke hvad der er tilbage. Jeg satte min fra adressen skal bot på CS50.net. Jeg tror, ​​jeg vil ikke fortryde at sende en tekstbesked til 800 personer, der siger, savner dig, elsker CS50 bot, måske for dem, der ikke kunne gøre det i dag. Og derefter i linje 76, hvad skal jeg gøre? Denne form for ligner C. Så for jeg lig 0, n equals-- nu tæller er nyt. Det viser sig, at hvis du ønsker at få antallet af ting i et array, du behøver ikke at huske det længere. Du kan bare bede en funktion kaldet optælling, og det vil fortælle dig, hvor mange adresser er i den opstilling. Og så jeg har tænkt mig at tilføje adressen til e-mail. Og jeg ved dette fra Brug af dokumentationen. Der er en add-adresse funktion. Og nu mærke til der er et stykke af syntaks. Vi har set det før i C. Lignende i ånden. Du kan tænke på dollartegn mail som en variabel, som det er. Men det er en struct indersiden af der er ikke kun egenskaber, variabler hvis du vil. Men det viser sig, at i PHP, hvor er en objektorienteret programmering sprog, ligesom Java hvis du tog APCS. Dollar tegn mail, hvis du ønsker at-- det har også funktioner inde i det, eller metoder. Så det vil sige, at særlige PHP mailer bibliotek, hvis jeg har en variabel deraf hvis jeg ønsker at kalde en funktion, kommer med det bibliotek, for nutidens formål, bare vide, du bruger pilen notation. Der er ingen dot notation. Det er bare pilen. Men det er ikke en pointer. Det er bare lånt fra C syntaks. Så ring tilføje adresse indersiden af denne bibliotekets objekt eller variabel. Okay. Det er den magiske linje. Det er sådan jeg sender en e-mail. Det er hvad der svarer til åbningen Gmail, skrive det ud, og rammer sende. Men det kommer til at i stedet sende en e-mail til denne adresse, med dette organ, fra CS50 bot. Og nu nøglen linje. Denne linje blev fraværende i ligesom 2011 når jeg tænker jeg sidst forsøgte dette. Denne linje er der naturligvis rydder adresserne. Så logisk, hvis jeg ikke rydde adresse efter hver iteration, den første e-mail eller sms går til Alice, den anden går til Alice og Bob, den tredje går til Alice og Bob og Charlie, dermed meget dyre fejl Jeg gjorde det år. Så lad os se. Er der nogen spørgsmål før vi sender jer alle en tekst besked med 10 procent sandsynlighed? Nogen spørgsmål? Okay. Lad os mig gå herind og forandring kodeordet til, hvad der skal arbejde, vil sandsynligvis blive blacklistet af Gmail. Så de måske ikke alle gå ud, idet de sandsynligvis kan ikke lide os at sende 800 emails i en for-løkke på én gang. Da det ikke er især menneskelig adfærd. Åh, jeg har tænkt mig at ændre en anden ting. Op i toppen, vil jeg sent-- ændre filen til studerende dot CSV. Og jeg vil ikke åbne det, men dette er en identisk CSV-fil med ikke 100 medarbejdere, men 800 studerende, bare fra Harvard, fordi Yale har oktober fordybning i denne uge. Og det ser ud som slags en jerk ting at gøre til tekst dem alle, hvorfor de er ikke i klassen på ferie. Det er ok. Just Harvard studerende i dag inde i den pågældende fil. Og lad os nu gå tilbage til min terminalvindue. Jeg er lidt nervøs. OK, så nu vil jeg gå ind i mappe, og PHP tekst dot PHP. Hvordan omkring en modig volontør? Så jeg vil ikke have det på mig. OK, kom op. Hvad er dit navn? MAYA: Maya. SPEAKER 1: Maya. Kom op, Maya. Okay. Lad os se, om det virker. Jeg sætter min egen e-mail-adresse i file-- mit eget telefonnummer i filen, så forhåbentlig jeg får en så godt. Dejligt at møde dig. MAYA: Ligeledes. SPEAKER 1: Så alt du skal gøre er hit Enter for at sende 800 SMS-beskeder, hvis jeg ikke skrue op. Nice. Kunne tage et stykke tid, statistisk, indtil vi kommer til en e-mail address-- en tekstbesked, der er i rummet lige nu. Lad os dvæle og se. PUBLIKUM: [HVISLER] SPEAKER 1: Åh, ja. PUBLIKUM: Åh, Gotcha. SPEAKER 1: For løkker are-- dette ikke langsomt på grund af PHP. Dette er langsom, fordi Gmail er kvæle os og ikke lade os sende mere end som en e-mail per sekund. Noget? Det var en hård ting for mig at teste på hjem med bare mig og min én telefon, så. Er det forhåbentlig fra bot? Ja? Nej? Sige ja. Nej? Det er fra en ven? Akavet. OK. Temmelig sikker på det fungerer dog. Uh oh. De black-- åh, vent et øjeblik. Åh, ved du hvad? Et øjeblik. Kun Maya og jeg-- Mia, var det? MAYA: Maya. SPEAKER 1: Maya, kommer til at ved, hvad jeg gjorde galt her. Åh, vent et øjeblik. Jeg tror, ​​jeg har lige sendt 100 tekstbeskeder til 555-1212. Stå ved. Jeg kan ikke vinde noget år. OK. Maya? Fix det i post produktion. Dammit! Efter fra adressen. OK, stå ved. Undskyld. Det er smertefuldt hvert år. OK, det ene øjeblik. Det er godt. Jeg stedet kommer til at gøre dette. Udskriv adresse. OK, stå ved. Print adresser, beslag I. Ja, jeg kan lide det. Dollar sign-- OK jeg vil forklare, hvad jeg er gør i et øjeblik, efter at jeg har kørt dette. Hvert år. OK, her går vi. Jeg har bare--, og jeg ønsker ikke at vise alles telefonnummer, men Maya kan bekræfte med et nik af hovedet, at hun ser alles telefonnummer i klassen at jeg har tænkt mig at kopiere ind et program kaldet Gmail. Og hvis i Gmail, hvad gør vi ønsker at sige? Jeg savner dig. Love-- det er ikke fra mig. Jeg har ikke engang ramt sende endnu. Så lad os gå videre og gøre dette, hvis jeg kan zoome ind. OK. Så jeg bruger et program kaldet Gmail nu. Hvis Maya, du gerne vil klik på knappen Send, Vi vil simulere, hvad det kode burde have gjort. Noget? [BIP] PUBLIKUM: Yep. SPEAKER 1: Ja? Frelse? PUBLIKUM: Yep. SPEAKER 1: Savner dig. Og jeg har tænkt mig at sende resten. Jeg sendte halvdelen, fordi jeg ikke tror Gmail ville lade dem gå igennem. Så bare husk, i dag er den dag, at du har lært, at jeg kan bruge Gmail. Det var gruopvækkende. En stor applaus til Maya. Tak. Okay, så. hvad [BIP] Vi fik et par bip, ja? Okay. Nu vil jeg få 700 virkelig ulykkelige e-mails tilbage fra klassekammerater. Så i det mindste, vi vil se hvis det var det værd. Så hvad der gik galt? Jeg vil finde ud af, hvad der gik forkert efter den kendsgerning, men bare se, hvor nemt det var at gøre det i PHP. Så hvad kan vi rent faktisk gør nu, at vi har denne udtryksfuldhed af PHP. Det was--, der var forfærdelig. Okay. Så det var hvad der skulle have gået ud. Dette blev mig teste i morges på min telefon, faktisk screenshot af min telefon. Men lad os nu overveje, hvorfor vi faktisk indføre alle disse ting i første omgang. Så målet er ikke at skrive disse programmer, skrives på kommandolinjen, ikke? Så jeg skrev en simpel hej program, jeg skrev et lille program, der gør betingede, og brugte en læselinie og så videre. Og i teorien, jeg lige skrev et program, der sendes ud 800 SMS-beskeder, give eller tage 800. Og at programmet var alle stadig køre på kommandolinjen. Og det er naturligvis ikke på nettet, ikke? Målet er nu at begynde at bruge hvad jeg hævder er en nemmere at bruge sprog, kanske en mere kraftfulde sprog i form af de funktioner, kommer med det, til at starte skrive kode, der genererer websider. Så sidste gang, og i sidste uge, vi talte om HTTP og HTML. Og hvad er rart om HTML er, at det er bare ren tekst. Og teksten er helt sikkert noget, som du kan udskrive ved bogstaveligt at kalde print f-funktionen, eller print-funktionen. Og ja, det er hvad PHP er vil nu tillade os at gøre. Så blandt de eksempler, vi har i dagens kildekode, Ud over nogle af koden at jeg sætter op der for et øjeblik siden, Vi har programmer som dette f.eks. Froshims eller Russer Intramural Sport, var faktisk en af ​​de første extracurriculars Jeg blev involveret med år siden. Og min værelseskammerat og jeg, med nogle andre børn på campus, bruges til at køre froshims programmet. Jeg får mine tekstbeskeder nu. Nu så vi, tilbage i dag, så dette var 1996 eller deromkring, der var en internet, men der var ingen process-- der var ingen hjemmeside for froshims. Og så hvis du ønskede at tilmelde dig fodbold eller volleyball eller hvad, du ville udfylde denne ting kaldes et stykke papir, og du ville gå på tværs Harvard gård, og du ville skubbe det ind i brevsprækken af ​​proctor, der var i Wigglesworth, en af ​​sovesale. Og dette var du registreret. Og han eller hun ville derefter komponere en e-mail til dig manuelt, ligesom jeg lige gjorde her med Maya, og så ville du blive bekræftet at have været registreret. Så det var ligesom lav hængende frugt, så at sige. Det var slags dum, at vi brugte papir til dette. Jeg ville have os til at kunne bare gå på en hjemmeside, eller har de freshmen gå på en hjemmeside, registrere til sport, og bare automatisere en masse af det her ved at sætte deres navne og e-mails og så videre i en database. Og faktisk den allerførste udgave af hjemmesiden, ved hjælp af super grimme HTML, måske har set noget som dette. Det var faktisk ironisk nok mere pinligt ud end dette tilbage derefter. Men jeg brugte et programmeringssprog. Ikke PHP, men snarere kaldes Perl, som er en ældre sprog, men meget ens i ånd. Og jeg bare helt lærte det til mig selv. Og det tog mig et stykke tid at finde ud af, stille masser af spørgsmål af venner. Men ideerne der var nøjagtigt det samme. For hvad PHP var virkelig designet for er ikke kommandolinjen stuff vi bare legede med, men for webprogrammering. Det er virkelig bundet i sin funktion indstillet til nettet, som følger. Dette er froshims. Og hvis jeg ønskede at registrere i denne form, dette er helt grimme, sikkert, men lad mig gå videre og være en mindre behagelig elev, og hvad sport for Matthews, klik Register. Hvad jeg ønsker at være i stand til at gøre, er indsende oplysninger fra en formular, ikke til Googles server ligesom vi gjorde sidste gang, helt snyd ved hjælp af deres backend, jeg ønsker at gennemføre min egen backend kode. Hvilket betyder skrive PHP kode, som bor på en URL at formulardata kan forelægges. Og så din kode, skrevet i PHP på en server, kan så reagere på denne brugerinput. Ligesom hans eller hendes navn, eller komfort niveau, eller kollegieværelse, og derefter gøre noget med det. I dette tilfælde, jeg lige dumt printet det ud som tekst, hvilket ikke er alt, smuk. Men du kunne sikkert forestille sig, hvis du kender HTML, og du vil snart vide, hvordan til at generere HTML med print f, og print, og lignende funktioner, kan du helt sikkert generere en kønnere webside, der siger, hey David, du er nu registreret. Du er en mindre behagelig studerende fra Matthews, ikke? Du kan bare bruge en hel masse% ses, eller de krøllede parenteser og dollartegn notation jeg brugte for et øjeblik siden, at generere tekst, der er mere brugervenlig end dette. Så lad os tage et kig på denne ene fil. Froshim nul prik PHP ser sådan ud. Når jeg genindlæse CS50 IDE, froshim nul ser sådan ud. Dette er froshim nul dot PHP. Og hvad vil du bemærke om denne fil? PUBLIKUM: [uhørligt] SPEAKER 1: Beklager, lidt højere? PUBLIKUM: [uhørligt] Det er alt i HTML. Og faktisk er det, fordi hvad der er interessant om PHP er, at det er designet at være, for bedre eller værre, blandet med HTML-kode. Og i virkeligheden, selv om dette fil, froshim nul prik PHP, har en PHP kommentar i toppen af det, det hele er bare HTML. Men derimod hvis jeg åbner op, lad os siger, registrere nul prik PHP, som blot har en stor kommentar på toppen. Det ser alt for næsten udelukkende som HTML, med undtagelse af hvad? Line, hvad, 21 ser lidt underligt. Men opdager jeg ind PHP mode med åben beslag spørgsmålstegn PHP. Så jeg har fået nogle ting. Og derefter ved udgangen af ​​denne linje næsten jeg har, spørgsmålstegn PHP. Og det er det, jeg mener med blandet. Du kan skrive HTML, som du lige ønsker, at serveren til at spytte ud. Men hvis du ønsker at gøre noget dynamisk stykke inde på siden, ligesom indsætte mit navn eller dorm eller komfort niveau, Jeg kan bruge en funktion Ligesom print r, som er udskrive rekursive, hvilket betyder blot udskrive denne variabel, formatering det Men du ønsker. Det er virkelig ikke for menneskelige formål, det er bare til fejlfinding eller diagnostiske formål. Så det er hvordan jeg gjorde det. Hvis jeg i stedet gå froshims to dot PHP, bemærke, at virkningen af ​​denne formular er ikke registreret nul prik PHP som old-- den foregående faktisk var. Men det er registreret to prik PHP. Så lad os se på, hvordan denne ene opfører sig lidt anderledes. Hvis jeg går ind udgave to. Hvis her, hvis jeg registrere som David, mindre komfortable, fra kollegiet af Mathews, registrere. Så denne gang er det sagt, du er registreret, ikke rigtig. Lad os se, hvad jeg gjorde her. Hvis jeg ser på register to prik PHP, det har nogle mere PHP kode. Det er lidt renere, selvom det stadig wraps lidt længe på denne linje. Bemærk her. Jeg udskrive mit HTML-tag, mit hoved tag, min titel-tag, hovedet, kroppen. Og så vil jeg begynde at sige ting som du indtaste PHP tilstand. Og så tag, åbne beslag PHP-- spørgsmålstegn PHP siger, hey, server, execute-- fortolke følgende ting som PHP indtil du ser slutningen tag. Og selv om du måske ikke kender nogen andet PHP, end du har set hidtil, du kan slags læse det temmelig intuitivt. Hvis navnet er tom, eller komfort er tom, eller kollegieværelse er tom, hvad gør jeg? Hvad skal jeg sige til brugeren? Du skal angive dit navn, komfort og dorm, og så videre. Else, jeg siger, du er registreret, godt ikke rigtig. Og jeg siger ikke rigtig fordi der er ingen database. Jeg gør ikke noget med dataene. Jeg er bare at smide det væk til demonstration. Nu jeg slags skimped overlinie 22. Der er mere syntaks der, men dollartegn understrege indlæg er slags interessant. Og det er, hvad der er rart om PHP. I PHP, har du det, der kaldes et par super globale variable. De er en slags endnu mere vigtigere end globale variable. Og disse, alle kapitaliserede som sådan, kommer med PHP. Så hvis du har en server, der har en webserver installeret, som Apache, og du installerer sprog støtte til PHP, pludselig du kan begynde at bruge disse super globale variabler i din kode. Og hvad er rart om PHP er, at hvis du bare skrive en fil, der ender i dot PHP, sætte det på en webserver, og så skal du indsende en formular til det via denne handling tag og en form-tag, at indsatsen attribut i formular tag, PHP og web helt tal ud af at få fat i alle disse centrale værdipar ud af webadressen ligesom spørgsmålet mark q er lig med katte, det vil finde ud af at q og katte. Hvis du sender et foto eller et brugernavn, eller en adgangskode for at lide Facebook, PHP vil finde ud af for dig hvor alle disse data er. Og det vil bare hånd dig en associativt array kaldet dollartegn understregning indlæg, eller dollartegn underscore får, afhængigt af, om du er hjælp get eller post-indlæg. Og det vil bare hånd du en super global variabel, så hvis du ønsker at få på navnet at brugeren indsendes via at web formular, du bogstaveligt talt bare sige navnet af den super globale variable, tilbud, citat slut, navn. Og tilbud, citat slut komfort, og tilbud, citat slut kollegieværelse. Og vi vil være i stand til at gøre dette og meget mere med PHP. Og selv om dette var en hvirvelvind blik på det, vi vil dykke i meget mere i næste uge. Vi vil indføre en database så du er faktisk kommer til at begynde at gennemføre din egen e-handel based-- ligesom hjemmeside på bare en uges tid. Så vi vil se dig næste gang, og håber du fik de SMS-beskeder. Farvel. [Musik spiller] [DØR ÅBNING] SPEAKER 2: Hey. SPEAKER 3: Hvad sker der? SPEAKER 2: Hvad laver du? SPEAKER 3: Arbejde på et problem sæt. SPEAKER 2: Nice. High five. [HIGH FIVE] Hvad are-- uh, hvad laver du her? SPEAKER 3: Bare hænge ud. Lige kommet tilbage fra gymnastiksalen. Jeg kunne ikke lade være mærke, når vi high-fived, at du har temmelig ru hænder. Har du gå til gymnastik? SPEAKER 2: Nej. Nej. SPEAKER 3: Dude, du ser temmelig store. Hvilket er dårligt, fordi alle ved, 8-ball er den store mand på campus. High five. SPEAKER 2: Øh, nej. Nej, jeg tror jeg er god. Jeg tror, ​​jeg er god.