>> [MUSIK SPELA]
>> TALARE 1: Detta är CS50 och detta är slutet av veckan sju.
Idag är kanske där vi verkligen lära dig språk.
Vi introducerade i det förflutna par veckor HTML och CSS, varken som
är programmeringsspråk.
Och faktiskt, även om vi inte titta på nästan alla av taggarna
som HTML kommer med och nästan alla av de egenskaper som CSS kommer med,
det är typ det för HTML och CSS.
Vi ska bara allmänt börja förutsatt att du
förstå de allmänna idéer taggar och attribut,
och sidor som skickas från klient till server.
>> För i dag börjar vi titta på annat programmeringsspråk, PHP.
Vi kommer att göra detta supersnabb.
Vi kommer inte att lära dig PHP per se, mycket som vi inte strävar efter att lära dig
C, i sig, utan snarare programmering.
Och faktiskt, en av de mål för denna kurs
är inte att lära dig C, eller HTML eller CSS, eller PHP,
eller valfritt antal andra modeord eller akronymer,
utan snarare datavetenskap och hur man programmerar i grunden.
Och faktiskt, i dag börjar vi ta dessa stödhjulen utanför alla
ytterligare genom att flyga genom en språk som kallas PHP, enligt följande.
>> Här är vad detta språk ser ut.
Det visar sig att det inte finns något behov av en huvudfunktion i ett program skrivet
på ett språk som heter PHP.
Så det redan låter lite enklare än C, som vi är bekant.
Det visar sig att om du vill deklarera en variabel,
du gör det nästan identiskt med C. Men Det är helt klart en skillnad här
när jag deklarera en sträng, eller kanske två skillnader.
Vad ser annorlunda ut?
>> PUBLIK: Den dollartecken.
>> TALARE 1: Ja, det finns dollar underteckna, som vi aldrig har sett förut.
Och vad som saknas?
Yeah?
>> PUBLIK: [OHÖRBAR]
>> TALARE 1: Ja, det finns ingen datatyp.
Så visar det sig att PHP är vad vi ringa ett löst skrivit språk, där
C starkt skrivit.
Löst skrivit betyder bara att Det finns olika datatyper,
det finns strängar, och ints, och flyter.
Men datorn siffror ut det.
Du människo programmerare behöver inte räkna ut.
Så allt du behöver göra att deklarera en variabel är
dollartecken, namnet på din variabel och sedan, till exempel,
citationstecken unquote, hallå världen.
>> Ja detta är vad en villkor ser ut i PHP.
Eventuella skillnader?
Nej.
Så visar det sig dessa är identiska.
Och du kan ha färre filialer eller flera grenar,
men syntaxen varv ut exakt samma.
Booleska uttryck kan beställas tillsammans.
Booleska uttryck kan anded tillsammans.
Du har fortfarande växlar.
Även om du inte har använt dessa, dessa existerar i C
och de är funktionellt motsvarighet i PHP.
>> Och i själva verket i PHP de är lite mer kraftfull.
I C, kan du bara jämföra vissa datatyper som Ints och tecken,
medan i PHP kan du faktiskt jämföra fullständig flygga strängar utan att
att oroa pekare och liknande.
Så här är en for-loop.
Detta är bara pseudokod kod, om ni så vill.
Men strukturellt är det identiskt med C.
>> Här är en while-slinga, pseudo therefore-- identisk till C.
Här är en gör när loop-- identiska.
Och så det finns typ av detta mönster här, varigenom
det finns några andra syntaktiskt funktioner vi verkligen kommer att se.
I själva verket, här är en trevlig sätt i PHP där,
Om du vill iterera över en matris, och du
inte vill hoppa genom mentala och syntaktiska hoops att ha
int i lika med 0, i mindre än n, i plus plus-- som
är bara en massa irriterande syntax.
Du kan säga lite mer fluidmässigt för varje nummer
som nummer, var i detta fall dollar underteckna nummer, jag antar,
är som en array med namnet siffror.
Och då jag antar nummer, singular, kommer att vara en variabel.
>> Och vad PHP kommer att göra för mig som jag upprepa över denna slinga är, på varje iteration,
det kommer uppdatera varierande antal till vara te elementet i antal, plural.
Så det bara hanterar allt detta för mig.
Inga hakparenteser, nej dollartecken, inga semikolon.
Det är bara lite enklare.
Tja, om du vill ha en array, visar det sig att du
kan göra något ganska lik C. Syntaxen är lite annorlunda.
Men här är en array med namnet dollar tecknat nummer.
Och jag använder, i PHP, fyrkant konsoler, visar det sig.
Och vi kommer att se dessa igen i JavaScript-- ännu ett annat språk.
Jag använder bara klammer notation att ha en kommaseparerad lista
av heltal, i det här fallet.
Men det ger mig en array.
>> Men ännu mer kraftfull i PHP, Vi har också vad är i allmänhet
kallas associativa arrayer.
Och en hel del språk har dessa också.
Men saken C arrayer är att indexen
för en array, det som du användning i hakparenteser via vilken
du tillgång till delar, måste vara det?
>> PUBLIK: [OHÖRBAR]
>> TALARE 1: De måste vara nummer eller heltal, särskilt från noll på upp.
Tja, i PHP, och visar det påpekar i andra språk,
du kan börja ha index som inte är numeriska.
Men de är faktiskt ord eller fraser, så att i stället för
försöka komma ihåg var något är, eller lagras i en variabel i,
du kan faktiskt använda ett ord och säga that-- du kan säga ett ord som här.
>> Så dollartecken citat är namnet på en variabel här.
Detta är något funky syntax det är att associera två nyckelvärde
par för denna variabel.
Närmare bestämt är detta ger mig en uppsättning som är av längd 2.
Men index är inte 0 och 1.
Indexen är citat unquote symbol och citerar unquote pris.
Och värdena för dessa index, respektive, är FB för Facebook
och $ 79,53, när jag sist kontrolleras ett pris för detta.
>> Vad betyder det?
Tja, betyder det att i stället för att skriva kod
så här, där jag brukade göra något som dollar sign-- eller snarare, i C
Jag skulle inte ens ha ett dollartecken.
Jag skulle göra något som citat och sedan
Jag skulle göra fäste i för att komma åt vissa godtyckligt numeriskt indexvärde.
Från och med idag i PHP, om du vill komma åt ett visst värde,
vi sorts mer semantisk uttrycksfullhet.
Bara ett fint sätt att säga att vi kan bara kalla saker vad de är.
>> Och om du vill få på något symbol,
nu du bokstavligen göra citera unquote symbolen
inom hakparenteser i stället för enbart tal.
Så det är en trevlig bekvämlighet.
Och det blir liksom det för nu.
Det finns knippen av andra funktioner i PHP.
Och faktiskt, kommer med PHP den ökända diskbänken.
Dussintals, hundratals funktioner kommer med PHP-- så många fler än kom med C.
>> Och det är inte avsett att väldiga utan snarare hjälpa
du inser att vi inte längre behöver skriva kod
det är typ av här nere konceptuellt.
Nu kan vi bara börja dra nytta av mycket mer avancerade funktioner
att språk som PHP har.
Så vi behöver inte oroa sig för flytta runt saker i minnet.
Vi behöver inte oroa sig för malloc och alla dessa lägre nivå,
kraftfulla detaljer som du kommer att brottas med, om inte kämpa med, pset5,
men du kan börja snart tar för givet.
>> I själva verket, låt oss skriva ett super enkelt program i PHP, enligt följande.
Jag kommer att gå head i CS50 IDE här, och vad jag ska göra
är att skapa en ny fil, som mycket enkelt kommer att kallas hello punkt PHP.
Så istället för dot c, är det kommer att kallas dot PHP.
Och sedan i den här filen, Jag kan börja skriva.
Men det visar sig att en sak jag måste veta
är att varje PHP-fil i allmänhet behöver att börja med någon speciell syntax.
I samma anda som HTML, men återigen, PHP är ett programmeringsspråk, inte
ett märkningsspråk.
>> Så varje fil, och det är typ dumma tittar jag ska erkänna.
Öppna konsol, frågetecken, PHP.
Och det är bara språkets sätt att säga,
Hej, här kommer dator någon kod skriven på ett språk som kallas PHP.
Och sedan i slutet av filen, du slags typ av motsatsen.
Du behöver inte skriva PHP igen, du bara göra frågetecken, vinkelparentes.
Och sedan allt du sätta in av dessa två taggar, så att säga,
kommer att bli, eller borde vara, PHP-kod.
>> Så låt oss göra något super enkelt.
Jag kommer att gå vidare och göra print def, hello world, bakstreck n, spara.
Och nu på min prompt, jag ska gör, hello-- nej, jag ska göra,
prick snedstreck Hej.
Nej, pricka snedstreck, hm.
Så något är annorlunda.
Och faktiskt, det är en viktig skillnad mellan PHP och språk som C. C
var en så kallad samman språk.
Vad betydde det för C som skall sammanställas?
Vad var innebörden?
Yeah.
>> PUBLIK: Skrev den i maskinkod så det kan köras av datorn.
>> TALARE 1: Exakt.
Vi måste först omvandla den till s.k. maskinkod nollor och ettor,
innan det faktiskt blir körbar och förstås av datorn.
Av Intel inuti.
Av CPU inuti datorn.
PHP, däremot, är vad som kallas ett tolkat språk, vilket
innebär att du inte kompilera det i ettor och nollor, maskinkod,
du istället lämna det som källkod.
Och du istället skicka den som indata till ett program, en tolk
att någon annan skrev år sedan som förstår det
rad för rad, tecken för tecken.
Så med andra ord, människor där ute skrev
ett program som kommer att se på din kod rad för rad,
och räkna ut vad datorn ska göra,
utan att konvertera den direkt till nollor och ettor.
>> Så om det ser en for-loop, Detta så kallade tolk
kommer att se ut, okej, skulle jag göra något igen och igen och igen.
Vad ska jag göra?
Låt mig titta på nästa rad.
Och det verkligen tolkar det rad för rad.
Så för att verkställa det, jag använder inte göra.
Jag använder inte punkt snedstreck i detta fall.
Jag stället gör PHP, som är namnet på ett program, alias
En tolk, det är förinstallerad i CS50 IDE,
och nu behöver jag för att passera en kommandoraden argument, som
är helt enkelt namnet på fil som jag vill tolka.
Eller mer i förbigående, att jag vill köra.
Och om jag slog Enter, där har vi det.
Hej världen.
Nu visar det sig att jag begagnade utskrifts def medvetet
att överbrygga oss från C till PHP.
De flesta PHP programmerare, som du ser, inte ens bry med hjälp av utskrifts def.
De använder bara en funktion som kallas tryck, som C inte har.
Och så om jag kör det nu, det faktiskt beter sig funktionellt densamma.
Jag kan inte använda procent s och procent i och så vidare,
men det finns andra sätt i PHP att göra det.
Men detta är bara säga att syntaktiskt,
annat än några konstiga saker upp topp, och några konstiga tecken ner
nedtill, begreppen nu av programmering i detta andra språk
kommer att vara exakt samma.
>> I själva verket, låt oss göra ett annat exempel.
Så jag kommer att gå vidare och stäng denna fil.
Låt mig att skapa en annan som Jag ringer villkor 1 dot PHP.
Så ingen noll, eftersom vad jag gjorde var jag tittade tillbaka några veckor sedan,
Vi hade en fil som heter villkoren 1 dot C. Och vad
Jag gjorde omvandlades det i min huvud, och här på papper,
och snart på kursens webbplats, rad för rad i PHP.
>> Så i C-versionen, vi gjorde något som sträng s får hämta sträng.
Så det är lite annorlunda att göra det i PHP.
Istället, jag ska bara att göra, eller rättare sagt, jag
kunde ha gjort int n får få int, i detta exempel tidigare.
Så i stället för att jag kommer att göra n blir läst linje, skulle jag vilja ett heltal,
snälla.
Så det här är bara min prompt.
Och så visar det sig, och Jag skulle bara veta detta
från att ha läst eller sett funktionen före, läs linjer funktion i PHP
tar ett argument som är ett snabbt för människan, och dess syfte i livet
är att läsa en textrad att han eller hon skriver in.
Och då är det butiker som text i variabeln n.
>> Och nu kanske jag vill göra något som jag gjorde veckor sedan, i likhet med vecka
en av klassen.
Om n är större än noll, då, jag kommer
att låna att syntax vi såg bara, utskrifts def, plockade du ett positivt tal,
snedstreck n.
Else if n är lika med är lika med noll, jag kommer att gå vidare och säga, skriva ut def,
du plockat noll bakstreck n.
Annars fallet här bör naturligtvis, tryck def,
du plockat ett negativt tal.
>> Och vi kan säkert genomföra logiken i denna sak
i en massa olika sätt, men poängen här
är att syntaktiskt, knappt något som är nytt.
Det är bara dollartecken och en ny funktion och läsa linje.
Men i grund och botten, vad som är nytt nu är jag tolkar detta.
Jag passerar den som ingående till ett annat program.
Så om jag vill köra detta, om Jag ville inte göra några misstag,
Jag kommer att köra PHP, av villkoren 1 dot PHP, Enter,
Jag kommer att skriva in numret 50, och låt oss anta nu fungerar det.
Eftersom logiken är samma saker som vecka ett.
>> Okej, så det är ganska underwhelming, eller hur?
Vi kunde göra detta i någon antal språk.
Låt oss göra något sätt mer kraftfull.
Låt oss avsluta problembild fem.
Så jag kommer att gå vidare och göra det.
Jag kommer att skapa en fil kallas lexikon dot PHP,
och lutar som du kan vara att förvränga ned massor av anteckningar,
tonerna kommer bara att hjälpa dig om du får
att genomföra problem ställa fem i PHP.
Men vi får se hur snabbt nu vi kan genomföra samma problem set.
>> Så i ordboken prick PHP, kommer jag att anta att det redan finns
en fil i världen kallas stava.
Och faktiskt, jag gjorde detta i förväg, och vi kommer inte att gå igenom denna linje
för rad, men om du är nyfikna senare och verkligen vill
att linda ditt sinne kring skillnader mellan c och PHP,
bokstavligen jämföra den här filen, stavnings, från dagens källkod
att vi kommer lägga senare idag, mot p-set
fem speller dot c som vi ger dig, och det är nästan samma rad för rad.
Det finns några fler dollartecken.
Ett par funktioner lite annorlunda.
Men det är ett trevligt sätt av slags se hur
du översätter ett språk till ett annat.
Och det är nästan identisk rad för rad.
Men jag kommer att anta att existerar, och vad jag ska göra här
är att försöka blåsa sinne genom reimplementing
helheten av problemet set fem sätt snabbare än du har gjort hittills.
Så till exempel, jag ska först deklarera en global variabel som kallas storlek,
och ställ in den lika med noll.
Nu det är inte mycket besparingar.
Odds är du förs storlek ungefär densamma,
eller tips ledtråd, kommer ikväll eller i morgon, bara använda en global variabel som heter
storlek, och ställer in det lika med noll.
Det är inte en särskilt fantastiska spoiler.
>> Så vad var dina data strukturer av val, de av er som har dök i
och läsa spec, vilka datastrukturer har de flesta av er har använt?
En hashtabell eller prova, kanske vissa varianter därav.
Så genomföra en hashtabell åtminstone, är lite av en massa rader kod,
höger?
Och inte alla av dem kan vara funktionella vid denna punkt i veckan,
men det är bra.
För i PHP, om jag vill ha en hashtabell, gjort.
Höger?
Så att variabel som jag har just förklarat är naturligtvis
kallas dollartecken bord, per introduktionen innan.
>> Men jag vill egentligen bara på slutet av dagen, en array.
Men inte ett numeriskt indexerad array, eftersom det är som vecka två
grejer, när vi talade om matriser.
Jag vill ha en hash-tabell.
Men en hashtabell är verkligen bara ett konkret sätt att säga,
du vill ha en associativ array.
Du vill kunna associera nycklar med värden.
Nycklar med värden.
Vad är ett lexikon, egentligen?
Jo det finns en hel nyckelknippa.
Ord som äpple, päron och bananer, och alla dessa engelska ord
att vi lämnar dig.
>> Och de värden som du är effektivt införande i din ordlista
är antingen sant eller frånvaron, falskt.
Med andra ord du sätter en hel massa nyckelpar värde,
äpple, sant, päron, sant, banan, sant.
Så att när du hämtar eller titta upp dessa data i hashtabellen
med funktionskontrollen, du är antingen få tillbaka ett svar,
Ja, jag hittade den i min komplexa hash tabellen, eller nej, det är inte där,
så du return false.
>> Så för att göra det, är allt jag behöver data struktur som jag föreslog tidigare.
Jag behöver bara kunna att associera ord
som, citationstecken unquote, symbol, med ett värde som, true.
Så det är min hash bord.
Låt oss faktiskt använda den.
Så det finns ett par funktioner Jag behöver för att genomföra.
Jag kommer att gå vidare och bita utanför en funktion kallad storlek.
Det tar inga argument.
Jag behöver inte bry sig om ordet, tomrum, i PHP.
Jag bara kommer att återvända storlek.
>> Och som en sidoreplik, har PHP detta minorly irriterande detalj,
där om något är global, måste du berätta den funktion som du använder
det, hey, det är en global variabel.
Så, mindre dumhet, men du måste göra det ändå.
>> Så hur belastning?
Jag kommer att genomföra en funktion som kallas last
som tar i namn av ett lexikon, precis som i problembild fem.
Och innan jag fortsätter, märker att jag har inte
varit att skriva riktigt samma saker.
Vad är uppenbarligen annorlunda i PHP om hur du deklarerar en funktion kontra C?
Yeah.
PUBLIK: [OHÖRBAR]
TALARE 1: Ingen returtyp.
Och faktiskt, det är fallet, PHP i den mån det är löst skrivit,
är också lite slarvigt i den meningen.
Du behöver inte ange som programmeraren Vad den här funktionen returnerar.
Du skulle behöva faktiskt ser på koden för att ta reda.
Eller läsa kommentarer eller dokumentation.
Så plus och minus av dessa typer av beslut.
Men jag måste säga nyckelordet, funktion.
Och när vi lär oss JavaScript i ett par veckor
vi kommer att se samma sak igen, men det är samma idé.
Namnet på funktionen, dess argument eller argument eller brist på sådan, och nu
här är genomförandet.
>> Så jag ska klippa vissa hörn bara att vara dramatisk för bara ett ögonblick.
Men jag ska gå vidare och säga detta.
Detta är hur jag kan ladda en fil i en matris.
Det finns en funktion i PHP som kallas fil.
Du lämnar det namnet på en fil.
Det räcker dig tillbaka en array, insida vars varje rad från filen.
Från noll, en, på upp till n minus 1 linjer.
Det är det, eller hur?
Det finns ingen f läsa.
Det finns ingen f get s.
Det finns inget procent s.
Det finns ingen huvudvärk.
Det finns ingen feof.
Allt det där som du har brottats kanske,
med p set fyra och fem, försvinner.
>> Så jag läste dessa linjer till filen, och då vet du vad?
Om jag vill iterera över dessa ord, Jag kan göra, för varje linjer som linje.
Kom ihåg att detta var typ av en smart sätt av iteration över en array, index
av index, och på varje iteration samtal den nuvarande raden, dollartecken linje.
Och just här jag ska gå och säger bord, fäste, linje, blir sann.
>> Med andra ord, det är hur jag infoga i min hash tabellen i PHP.
Jag säger dollartecken bord, som är min associativ array som var
tom per kodraden ovanför.
Jag sedan index till det inte, användning av ett antal,
men bokstavligen använder sökord som jag bryr mig om.
Kanske är det äpple eller päron eller banan eller vad som helst,
men specifikt jag indexerar i det som jag föreslog tidigare.
Jag tar namnet på min associativ array, och sedan jag
använda citat unquote i hakparenteser med ett snöre,
i stället för en faktisk nummer.
>> Och så är det.
Last Funktionen är klar.
När denna slinga itererar, har jag lagt allt i hashtabellen.
Nu liten disclaimer, det finns en par saker som jag behöver för att fixa.
Och den version jag kommer lägga upp på nätet kommer att ha alla nyanser,
men det är oftast bara kommer att bli en del felkontroll och några mindre tweaks.
Men det är verkligen kontentan av det.
Om jag vill nu genomföra funktionen som kallas
kontrollera, som räknar med en ord som dess argument,
Hur kan jag gå om att göra det?
Tja, jag bara kommer att säga, om insidan av mitt bord, på plats ord,
om är inställd.
Så om det är-- faktiskt, vet du vad?
Jag kommer att göra det i en bit av pseudokod.
Men idén är densamma.
Om det är lika sant, return true.
Okej.
Else-- du typ av kan se var detta going-- att returnera false.
Klar.
Kontrollen görs.
>> Ganska trevligt, eller hur?
Så vad är det egentligen komma?
Och även detta, skär jag några hörn.
Titta på version på nätet för alla de små nyanser.
Men det är kontentan av det.
Index i din associativ array, alias
Hashtabell, se om det finns ett värde där, om den är inställd på true, och i så fall
return true.
Så vi har reducerats alla av komplexitet.
Så typ av sinne blåser, eller hur?
Jag kommer inte bry avslutar det med lasta, eftersom fact-- åh, vet du vad?
Ja, låt oss avsluta det med avlastnings.
>> Lasta i en hashtabell kan se som funktion lasta tillbaka.
OK så det är lasta.
Eftersom det finns inget att lasta, eller hur?
Det finns ingen malloc.
Jag har inte uttryckligen be operativsystem för någonting.
Jag har precis börjat med hjälp av variabler.
Och så detta är också ett uttryck för funktioner språk högre nivå.
Så återigen, de flesta av denna term Vi har arbetat här nere
med C. Super låg nivå.
Du kan se datorns minne.
Du kan röra någonting du vill ha i din dators RAM-minne,
på gott och ont.
>> Här uppe, kommer vi att ge upp den makt.
Men min gud, ser hur mycket mindre kod jag skrev.
I själva verket om jag inte talade och talar över min maskinskrivning,
vi skulle ha gjorts med detta exempel fem minuter sedan.
Så vad är det pris som betalas?
Nåväl låt oss ta en titt.
Låt oss ta en titt.
Jag kommer att gå vidare och köra CS50.
Låt mig först gå in dagens exempel där
Jag har texter katalog som tidigare.
Jag kommer att köra den lösning som det kommer med problem set fem kallas
stava, som är i CS50: s konto.
>> Och jag kommer att köra det på något stora som King James Bible,
bara så att vi verkligen sätter personallösningar på prov.
Nu ibland Internet är en lite långsammare, lite snabbare,
kan ta ett tag att rulla.
Men det tog totalt .56 sekunder att stava kontrollera King James
Bible använder personalen lösningen.
Så ganska bra.
Din kan vara mycket långsammare, och det är helt bra.
Men det är korrekt här.
Så det är personalen lösningen.
Om jag går in och städa upp PHP-version.
Och jag kommer att göra lite som bakning show sak.
Vi kommer att ta koden jag skrev tidigare, så det är helt rätt.
Eftersom koden jag skrev inte kommer att vara helt korrekt nyss.
Men om jag kör PHP-version, vad har jag att ge dig idag?
Tog mig fem minuter till genomföra p set fem, jag påstår.
Vilket pris har jag betalt?
Yeah.
>> PUBLIK: Hastighet.
TALARE 1: Hastighet.
Vad menar du?
>> PUBLIK: Det kommer att ta längre tid.
>> TALARE 1: Okej.
Låt oss se.
Det kommer att ta längre tid, inte att skriva, men att köra den.
Yeah.
Så låt oss prova det här.
Så här jag ska gå vidare och göra PHP av stava, och eftersom filens
kallad stavnings.
Så jag inte kör ordbok, återkallelse,
Jag kör program som heter stava.
Jag kommer att passera på samma fil, King James den femte.
Det flyger förbi.
Detta kan bara vara internethastigheten, så att inte läsa in för mycket i det.
Men det känns längre säker.
1.26 sekunder.
>> Nu är fortfarande ganska jävla fort, eller hur?
Och den enda anledningen som kändes som mer som tre eller fyra, eller fem
sekunder, det är bara för att Internet var som långsam.
Datorn tid var 1,26 sekunder, jämfört jag tror 0,56.
Så mer än dubbelt så långsam.
Nu är fortfarande ganska snabbt, men det är en manifestation
av, ja, det exakta priset.
>> Eftersom vi tolkar i koden rad för rad,
och det programmet PHP läser min kod uppifrån och ned, från vänster till höger,
det har att göra mer tänkande.
Det måste slags konvertera det inne i sig
till motsvarande maskin kod i farten, så att säga,
även om mekaniken är lite annorlunda.
Istället för att bara matning till Intel CPU rå nollor och ettor
att det förstår inbyggt.
>> Så absolut, händer ned vi har betalat ett pris.
Och kod skriven på ett språk som PHP tenderar att vara långsammare.
Men min gud.
Så nu när jag stavnings kolla min fil, jag tillbringar en extra 0,7
eller så sekunder vs 20 timmar för att genomföra en snabbare stavningskontroll, eller hur?
Det är lite av en kompromiss.
Och om du just har börjat p set fem, kanske inte 20 timmar.
Kan vara mycket färre än så.
Men det är en avvägning, på riktigt.
Och om du kör kod på riktigt stora dataset, eller ännu äldre hårdvara,
dessa typer av skillnader kan verkligen lägga upp.
>> Eventuella frågor hittills?
Yeah.
>> PUBLIK: [OHÖRBAR]
TALARE 1: Tyvärr, kan du säger det en gång till?
PUBLIK: [OHÖRBAR]
TALARE 1: Du ger upp tid.
Tja, så ja.
Du sparar tid genom inte behöva kompilera den,
om det är vad du frågar.
Och faktiskt, i CS50, de flesta av programmen,
även om de kan ta ett tag att skriva, de är relativt kort.
Några dussin, några hundra rader kod, och så de sammanställa ganska snabbt.
Men när du börjar skriver större program,
som om du är Microsoft eller om du är Google och skriva riktigt stora program
i C eller C ++, eller på liknande sätt samman språk, kan ta många sekunder,
eller till och med minuter eller längre för att sammanställa miljontals rader kod.
Och det också att Skillnaden kommer att lägga upp.
>> Och faktiskt, när vi övergång i dag, samma dag
idag, till webbprogrammering med PHP, du är
kommer att hitta det bara så mycket mer lustfyllt att skriva kod
när du inte behöver göra dessa dumma steg som förändring till din terminal
fönster, typ gör hej, re köra den, ladda fönstret.
Bara så många dumma mekaniska steg som
bara komma i vägen för att göra intressant, roligt arbete.
Och faktiskt kastar vi bort det med PHP.
Och vi kan interagera med det snabbare.
Yeah.
PUBLIK: [OHÖRBAR]
TALARE 1: Visst.
Kan jag klargöra vad det organ tolkas?
När du kompilerar ett språk som C, går det ner
som vi sagt att bearbeta kod, nollor och ettor.
Och Intel beslutade år sedan som vissa mönster av ettor och nollor
representera tillägg eller subtraktion, eller skriva ut, eller andra grundläggande funktioner.
I en värld av ett tolkat språk som PHP, eller JavaScript, eller Python,
eller Ruby, eller knippen av andra, i stället någon
har skrivit ett interpreter-- i detta fall,
det också kallas PHP, identisk med den namnet på den language-- som i huvudsak
har en stor slinga i det som upprepar över alla rader i koden
att jag mata den som indata, som hello dot PHP, eller ordbok prick PHP.
>> Och då kan du tänka på deras stora slinga som har en hel del villkor.
Och dessa villkor säger, om människa har skrivit sökord för,
börja göra hans eller hennes koden igen och igen.
Eller om den humana har skrivit kodrad,
om, endast exekvera sina nästa rad villkorligt.
Så det är verkligen som att tolka det i en mänsklig mening, rad
rad, och som bara tar tid.
Det tar ovanför.
Och så det är en price-- bra question-- vi betalar.
Så låt oss göra en annan demo som är lite mer dramatisk.
Det finns, skulle jag säga, en ungefärlig detta på en 90% sannolikhet för att misslyckas fruktansvärt,
men du kommer att bli förvånad med 10% sannolikhet.
Så varje år försöker vi att göra detta, där vi
försök att skriva ett program som går igenom problem set noll, som du har
inlämnade ditt telefonnummer och en mycket annan demografisk information
och vi programmässigt skicka ett textmeddelande.
Och sedan allas telefon börjar pipa eller vibrera,
och det är bara fantastiskt, eftersom Tja, titta på vad datorer kan göra.
>> Detta fungerar sällan korrekt det verkar, till stor del
eftersom jag vanligtvis få svartlistad av Gmail eller någon annan tjänst
för att faktiskt försöker göra detta på skalan.
Men rolig sak är också, eftersom vi har inte alla här i dag,
kul faktum förra gången vi försökte detta två år sedan,
Jag tror att jag skrev ett program som satt i en slinga iteration
över alla elever i klassen, och var och en av dem ett textmeddelande,
och det sa något i stil, Varför är du inte i föreläsning?
Kärlek, CS50 bot.
>> Du har ingen aning om hur många ursäkt och typ av smärtsamma e-post
Jag har fått ett svar från n minus 100 personer som inte var här
den dagen.
Och även mer rolig, mer skam story-- du vet, låt oss uttrycka det ute.
Det är redan på video ett par år tillbaka.
Så du kommer snart att se mig skriva en for-loop, varvid
det är mycket lätt att skriva en bugg i det for-slingan, så att det första gången
genom öglan, du skicka ett textmeddelande.
>> Den andra gången genom slingan jag borde ha skickat en mer textmeddelande,
och sedan en text meddelande, och en till.
Men det visar sig om du gör ett stavfel vid programmering, ibland
kan skriva program som skickar en textmeddelande, sedan två textmeddelanden,
sedan tre textmeddelanden till alla som är redan fått ett textmeddelande.
Och som ni vet, göra något, plus något, plus något,
plus något är stort O för ett parti textmeddelanden, eller n kvadrat,
eller $ 0,10 ett textmeddelande, $ 20.000.
>> Tack och lov jag slog Ctrl-C innan hände, men jag var skyldig åtminstone en
av era föregångare $ 20 för 200 några udda textmeddelanden som,
inte bara gick till sin telefon, men också det var en äldre flip-telefon
så känns det skjuts ut ur hans minne varannan personlig text
meddelande han hade faktiskt fått.
Så vi har ett mål idag, att inte göra det.
Kanske slå på flygplansläge.
Okej.
Så låt oss gå in i en programmet här callled--
att jag kommer att kalla text dot PHP.
Och i förväg, jag har två filer här.
Jag gjorde en fil för bara personal, har som fick alla personalens info, alla namn
från kursens hemsida.
Och då nu jag bara sätta några falska nummer 555-1212.
Så dessa skulle faktiskt inte gå någonstans.
Men märker insidan av denna CSV-fil, som vi talade om en kort stund innan
i samband med filen IO.
>> Vad är en CSV-fil?
Kommaseparerade variabler.
Och det är ungefär som en mycket lätt databas, om ni så vill.
Det finns en slags typ av fyra kolumner i den här filen, och det taggiga,
men kommatecken väsentligen representera kolumner i filen.
Den första kolumnen är TF eller CA: s namn.
Andra kolumnen är deras efternamn.
Tredje kolumnen är deras telefonnummer.
Och fjärde kolumnen tydligen är-- fjärde kolumnen är tydligen vad?
OK, så det är deras bärare.
Så Verizon eller Sprint, eller vad inte.
Och om jag misspoke tidigare, CSV.
Kommaseparerade värden är CSV här.
>> Så vad kan jag göra med detta?
Ja detta är bara en stor textfil, och det är ganska länge, eller hur?
Gillar du kommer att vara typ av irriterande.
Och det visar sig dock att om jag vill skicka ett textmeddelande till, låt oss
säga Alex här.
Låt mig gå in i min webbläsare och avsluta fullskärmsläge
bara så att jag kan växla fram och tillbaka.
Det visar sig, låt oss se om jag går i här, och logga in på Gmail, okej.
Titta inte på denna del.
Bara jag får se.
naturligtvis Live kan fortfarande se vad jag gör.
Okej.
>> Så här är bara Gmail med John Harvard konto.
Så om jag vill skicka en textmeddelande till Alex,
Jag kan givetvis komponera ett meddelande.
Och det visar sig, och jag har testat det med Alex tidigare här,
så att du kan lägga till en viss domän namn till folks telefonnummer,
eftersom det finns i världen saker kallade SMS till e-post gateways.
Vilket är ett fint sätt att säga alla av oss som har mobiltelefoner som
har telefonnummer, naturligtvis, det antagligen för din operatör,
en viss suffix liknande vid Vtext.com för Verizon textmeddelande
dot com, som du kan lägga till din egen personliga telefonnummer, och sedan
dig eller vänner, eller dina föräldrar kan texten du på just adress.
>> Och Verizon har en server, en e- server, att vid mottagandet av detta e-post,
ser på det numeriska delen och sedan använder vad speciell industri magiska
de måste faktiskt skicka ut det över etern till just din cell
telefon.
Nu är trevligt eftersom jag inte verkligen vet hur man skickar ett textmeddelande
eller att skriva kod ännu för min mobiltelefon,
och du kan göra just detta för ett slutprojekt, men nu alla
Jag har min laptop här.
Så jag vill iterera över den CSV fil, linje, rad, rad, rad,
ta vart och ett av personalens telefonnummer, och deras bärare och programmatiskt,
sammanfoga, det vill säga ansluta telefonen nummer med lämpligt domännamn
och sedan skicka ett e-postmeddelande.
>> Så det är en hel del åtgärder.
Och lycka till att göra det i C. Det är en mardröm av en situation
att öppna en fil, att läsa det linje, rad, rad, som ni
ser eller kan snart se med problem set fem, om inte
problem set fyra, och sedan att dynamiskt sammanlänka
två strängar tillsammans, eftersom i C, att ta två strängar och kombinera dem,
vad gör du minimalt behöver göra mest troligt?
Du måste deklarera mer minne, eller hur?
Och fråga, malloc, kan jag få mer minne?
Så jag kan sätta hälften av detta här, halv av denna här.
Det är bara så många steg.
Och genom den punkt där du har förlorat intresse för dumma lilla demo
där du gör allas telefon pip.
Låt oss göra denna typ av PHP stil, där vi bara
börja använda mer av den diskbänk.
>> Och idéer är i grunden densamma,
men vi behöver inte oroa sig alltför mycket om den lägre nivån.
Så låt oss se hur jag kan gå om att göra detta.
Och bara så att jag inte upprepa tidigare misstag,
Jag har skrivit några anteckningar för mig själv här.
Och låt oss se om jag kan gå oss genom några av de grundläggande stegen,
och sedan för tiden skull vi ska kanske klippa vissa hörn i slutet.
Jag kommer att gå vidare och göra öppna fäste PHP att starta den här filen.
Och jag kommer att gå vidare och göra det.
Fil handtag, som du kommer snart se, faktiskt
anropar en funktion som kallas f öppen.
Och kom ihåg detta öppnar en fil.
Och citatet, unquote, r menar vad igen?
Bara öppna den för läsning.
Nu i p set för, du gjorde det här.
Och hantera kan vara vad som helst, fu, bar, bas, något variabelnamn.
Men i allmänhet en dator vetenskapsman skulle kalla en öppen fil,
vilket ger dig en fil handtag, något att hålla fast så att säga.
Jag kommer bara att göra viss felkontroll.
Så om handtaget är falskt, precis som i C, kommer jag att göra något liknande,
kunde inte öppna filen, bakstreck n.
Och då jag bara gå att gå vidare och avsluta.
Och det visar sig, i PHP, Jag är inte inne i en funktion.
Det finns ingen huvuduppgift här.
Så jag inte tillbaka i sig.
Jag avsluta.
Vilket är i stort sett samma sak.
Och jag lämnar med en y förmodligen.
Ett sätt bara ett fel av något slag.
Det är icke-noll, så det är ett fel.
>> Okej, så om jag här nere nu i mitt program har jag öppnade filen.
Jag kommer att gå vidare och förklara en array med namnet adresser,
och C skulle jag måste känna till storleken på matrisen i förväg, eller hur?
Eller jag skulle behöva deklarera detta är en pekare, och sedan använda malloc.
Och sedan varje gång jag läser genom en annan rad i filen,
Jag kommer att behöva malloc mer minne, malloc mer minne.
Det är en smärta i nacken.
Och tack och lov, PHP och Ruby, och Python och JavaScript, de
kommer att växa dina arrayer åt dig automatiskt.
Inga fler malloc.
Inga fler minneshantering.
Datorn tar hand om det.
Men det pris du betalar.
Det är en lite långsammare.
Och för ett program som detta Vi kommer inte att märka.
Vi kommer att skicka 100 textmeddelanden.
Till exempel kommer inte att känna det.
IT egentligen bara börjar materia ditt språk val
när dina data eller dina program bli riktigt, riktigt betydande,
som kommer att vara fallet mer med vår webbaserade grejer.
>> Men nu ska vi gå framåt.
Även om det visar sig att det finns en funktion i C kallas f få CSV.
Fil får CSV, tar det en fil handtag som dess argument,
och det fortsätter sedan, rad, med rad, för rad, att läsa i rad.
Så det bara läser en linje text från filen.
Men vad är trevligt om denna funktion, det inte bara lämna mig en textrad.
Det ser ut för dessa kommatecken och tolkar linjen.
Och för att tolka raden betyder att dela det på vissa värden i det här sammanhanget.
>> Med andra ord, dollartecken rad är en variabel som är
kommer att ge mig en massa index.
Detta kommer att vara första kolumnen i min CSV.
Detta kommer att bli den andra kolumn, kommer detta att bli den tredje,
och detta kommer att bli den fjärde.
Eftersom återkallande och Excel inte samarbeta sista gången vi gjorde detta,
men om jag hämta personal dot CSV.
Hoppsan, inte byta namn på.
Om jag hämta personal dot CSV, och försöka öppna det,
Jag har redan registered-- åh jag inte uppdatera Excel sedan sist.
Du ser att personal dot CSV, jag har fyra kolumner.
Så när jag läste i första raden för Abby här,
dollartecken rad 0 är Abby, dollartecken rad en är Lyons,
dollartecken rad två är hennes nummer, och sedan hennes telefon transportör.
>> Så det är allt.
Och det är trevligt, eftersom jag behöver inte nu räkna ut
där alla dessa kommatecken egentligen är.
Så jag kommer att gå vidare och gör det, med tanke på att definitionen,
Jag kommer att säga att hennes namn är i rad konsol noll, som utlovat.
Och jag kommer att grab-- och faktiskt, vet du vad?
Jag tänker inte oroa sig hennes namn, i det här fallet.
Jag kommer att hålla det enklare.
Jag kommer att göra sitt nummer är i rad fäste två, tror jag.
Och hennes bärare var där?
Rad tre, en över.
Så inget nytt där.
Det är bara noll indexering i en matris.
>> Och nu, jag kommer att göra följande.
Om transportören är lika lika AT & T-- Jag kommer bara att ha en loop--
Jag vill skapa ett e-postmeddelande adress som ser ut så här.
Det kommer att bli 617-555-1212 på, vad är det, text.ATT.net,
är vad jag vill göra.
Så hur gör jag detta?
Jag kommer att göra följande.
Hennes adress kommer att bli hennes nummer, och nu, låt mig gå vidare och göra det.
Detta är några skraj syntax.
Jag kunde göra procent s trick, men jag kan faktiskt bara göra detta.
>> Så det här är en PHP sak, men låt oss fundera på vad jag gör.
Dollar underteckna adressen på vänster, bara en variabel.
Ge mig en variabel.
Jag behöver inte ange vilken typ.
PHP kommer att räkna ut det.
På höger sida, vad datatyp
av det hela på höger sida?
Ser ut som en sträng, eftersom det finns dubbel
citerar längst till vänster och längst till höger.
Nu finns det vissa funky ny syntax här.
Det finns klammerparenteserna, och dollartecken nummer.
Men ta en gissa vad är det syntax förmodligen berättar PHP att göra för mig?
Yeah.
Bara in värdet där.
Så ingen procent s.
Vi skulle kunna använda utskrifts f, eller s utskrifts f eller något liknande,
men PHP och en hel del språk högre nivå,
du kommer att se att du kan göra samma sak funktionellt, kanske
sex olika sätt.
Och så det börjar bli en fråga om design eller stil.
Så det här är bara ett kryptiskt sätt ser att säga, ge mig en e-postadress,
men plug-in numret i mellan dessa klammerparenteserna.
Och klammerparenteserna kommer inte hamna i den slutliga adressen.
>> Nu kan vi hoppa över en del av dessa linjer för tiden skull.
Så om en bärare lika lika verHorizon-- hoppsan,
Verizon-- jag vill göra något mycket lika, när adressen blir,
citationstecken, unquote, antal på text.ATT.net.
Och då kan jag göra samma typ av sak för resten av bärarna.
Men jag ska bara göra prick, pricka, punkt för nu.
Och nu ska vi anta att Jag vill lägga till array, tryck.
Jag vill lägga till matris, som kallas adresser.
>> Denna adress, det är hur du lägga till något till en rad i PHP.
Du behöver inte göra malloc.
Du behöver inte ändra storlek på matrisen.
Du säger bara array, push.
Vad vill du push-- vad array vill du driva något på?
Adresser.
Vad du vill driva på adresser?
Adress.
Och i själva verket om du verkligen vill vara smart,
några syntaktisk socker för detta, så att säga,
vilket betyder bara hur kan du göra detta i det snyggare sätt skulle vara att göra detta.
Som har för effekten av att odla adresserna arrayen genom storlek ett,
och sedan plopp att ytterligare e-postadress i det.
Yeah.
>> PUBLIK: [OHÖRBAR]
>> TALARE 1: En stavfel på annars if-- oh, bärare.
Det är ok.
Det är också inte kommer att gilla min underlåtenhet att genomföra en del av detta program
senare.
Men tack för att fånga.
Ytterligare en bugg.
Tack.
Vi vill att detta skall vara Vtext.com.
Ja.
Okej.
Så varifrån kommer denna lämna oss?
Vi har skrivit koden för att öppna filen.
Vi har en slinga för att iterera över raderna i filen.
Vi har kod som lägger till min matris, ett åt gången, då den korrekt
formaterad e-postadress.
Så allt som verkligen återstår är att skicka e-post till var och en av dessa människor.
>> Så jag har gått vidare och readied mig på följande sätt.
Vad jag ska göra här är-- och låt oss gå vidare och hoppa till några faktiska koden,
som ser ut så här.
Så här är det pre-bakade version jag skrev tidigare.
Och märker jag slutade genomförande Sprint.
Jag slutade att genomföra T-Mobile.
Jag slutade att genomföra Virgin Mobile.
Och jag kommer att be om ursäkt i förväg.
Det finns några bärare som vissa elever i klassen har
att jag inte brydde sig räkna i om tillståndet här.
Så inte alla texterna kommer att gå ut.
Men låt oss se vad jag behöver göra.
Jag stänger filen, bara som i p set fyra.
>> Och detta är ny syntax.
Och vi kommer att se en liten bit av denna med tiden,
särskilt med p set sju och åtta.
Men detta är syntax för att skapa en speciell typ av struktur.
Det visar sig att det finns ett bibliotek som levereras med PHP, som kallas PHP mailer.
Dess syfte i livet är att programmatiskt skicka e-post.
Det är kod någon annan skrev att gör det lättare för oss att skicka e-post,
så att vi inte behöver hålla gå fram och tillbaka till Gmail,
och klistra in i folks e-postadresser.
Det finns en hel massa rader här som ärligt, jag bara typ av kopierade
och klistras in från dokumentationen.
Och faktiskt, om du är nyfiken, jag lämnade alla
av webbadresserna i dokumentationen i koden som vi kommer lägga senare.
Och märker att bland de saker jag gör
är, jag säger detta bibliotek, använda Gmails server, eller hur?
SMTP talade vi kort om när vi var vid Yale om att vara enkel post
överföringsprotokoll.
Det är det protokoll som servrar som används för att skicka e-post,
och that's-- Gmail har en av dem.
En port är detta TCP-portnumret.
Det är bra om du har inte sett 587 förut.
Bara vet att från dokumentationen.
Här är mitt användarnamn.
Jag kommer att använda CF50 bot.
Och i ett ögonblick, jag kommer bara att Skriv in bot faktiska lösenord.
Och sedan ner här, märker vad som återstår.
>> Jag sätter min från adress som skall bot på CS50.net.
Jag tror att jag inte kommer att ångra att skicka en textmeddelande till 800 personer som
säger, saknar dig, kärlek CS50 bot, kanske för dem som inte kunde göra det i dag.
Och sedan i ledningen 76, vad ska jag göra?
Denna typ av ser ut som C. Så för i är lika med 0, n equals-- nu räkna är ny.
Det visar sig att om du vill få antalet saker i en matris,
du behöver inte komma ihåg det längre.
Du kan bara ställa en Funktionen kallas räkna,
och det kommer att berätta hur många adresser är i den arrayen.
>> Och sedan kommer jag att lägga adressen till e-postmeddelandet.
Och jag vet detta från med hjälp av dokumentationen.
Det finns ett tillägg adressfunktion.
Och nu märker det är en bit av syntax.
Vi har sett det här förut i C. Liknande i anden.
Du kan tänka på dollartecken post som en variabel, vilket det är.
Men det är en struct insida som inte bara fastigheter,
variabler om du kommer.
Men det visar sig att i PHP, som är ett objektorienterat programmeringsspråk
språk, som Java om du tog APC.
>> Dollartecken post, om du vill att-- det har också funktioner inne i det,
eller metoder.
Så detta är att säga att särskild PHP mailer
bibliotek, om jag har en variabel därav, om jag vill kalla en funktion som
kommer med det biblioteket, för dagens ändamål,
bara vet du använder pilen notation.
Det finns ingen punktnotation.
Det är bara på pilen.
Men det är inte en pekare.
Det är bara lånat från C: s syntax.
Så kallar till adress insida detta bibliotekets objekt eller variabel.
>> Okej.
Detta är den magiska linjen.
Det är hur jag skicka ett mail.
Det motsvarar att öppna Gmail, skriva ut, och slå skicka.
Men det kommer att i stället skicka en e-post till den här adressen med detta organ,
från CS50 bot.
Och nu nyckel linje.
Denna linje var frånvarande i likhet med 2011 när jag tänker jag senast försökte detta.
Den linjen där, naturligtvis, rensar adresserna.
Så logiskt, om jag inte rensa adress
efter varje iteration, varvid den första e-post eller textmeddelande går till Alice,
den andra går till Alice och Bob, den tredje
går till Alice och Bob och Charlie, därmed mycket dyra misstag
Jag gjorde det året.
>> Så låt oss se.
Finns det några frågor innan vi skickar er alla en text
meddelande med 10 procents sannolikhet?
Några frågor?
Okej.
Låt mig gå in här och förändring lösenordet till vad som borde fungera,
kommer sannolikt att få svartlistad av Gmail.
Så de kanske inte alla gå ut, eftersom de förmodligen
inte att vi skickar 800 e-postmeddelanden i en for-slinga på en gång.
Eftersom det är inte särskilt mänskligt beteende.
>> Åh, jag kommer att ändra en annan sak.
Upp på toppen, jag ska sent-- ändra filen till studenter dot CSV.
Och jag kommer inte att öppna den här, men detta är en identisk CSV-fil med inte 100 anställda,
men 800 studenter, bara från Harvard, eftersom Yale
har oktober fördjupning i veckan.
Och det verkar som typ av en jerk sak att göra till text dem om varför
de är inte i klassen på semester.
Det är ok.
Just Harvard studenter idag inne i den filen.
Och nu ska vi gå tillbaka till min terminalfönster.
Jag är lite nervös.
>> OK så nu ska jag gå in i katalog, och PHP textpunkt PHP.
Vad sägs om en modig volontär?
Så jag vill inte detta på mig.
OK, kom upp.
Vad heter du?
MAYA: Maya.
TALARE 1: Maya.
Kom upp, Maya.
Okej.
Låt oss se om det fungerar.
Jag lägger min egen e-postadress i file-- mitt eget telefonnummer i filen,
så som förhoppningsvis får jag en också.
Trevligt att träffas.
MAYA: Likaså.
TALARE 1: Så allt du behöver göra är tryck Enter för att skicka 800 textmeddelanden,
om jag inte skruva upp.
Fin.
Kan ta ett tag, statistiskt, tills vi kommer till ett e-post address--
ett textmeddelande som är i rummet just nu.
Låt oss dröja kvar och se.
>> PUBLIK: [Whistling]
>> TALARE 1: Oh, ja.
>> Målgrupp: Åh, gotcha.
>> TALARE 1: För loopar är-- detta är inte långsam på grund av PHP.
Detta är långsam eftersom Gmail är stryper oss och inte
låter oss skicka mer än som ett e-post per sekund.
Något?
Detta var en svår sak för mig att testa på hem med bara mig och min en telefon, så.
Är det förhoppningsvis från bot?
Ja?
Nej?
Säg ja.
Nej?
Det är från en vän?
Awkward.
OK.
Ganska säker på att det fungerar ändå.
Hoppsan.
De black-- oh, vänta en minut.
Åh, vet du vad?
Ett ögonblick tack.
Endast Maya och Jag-- Mia, var det?
MAYA: Maya.
TALARE 1: Maya, kommer att Vet du vad jag gjorde fel här.
Åh, vänta en minut.
Jag tror jag skickade bara 100 textmeddelanden till 555-1212.
Stand by.
Jag kan inte vinna något år.
OK.
Maya?
Fixa det i efterproduktionen.
Helvete!
Efter från adressen.
OK, stand by.
Förlåt.
Det är smärtsamt varje år.
OK, ett ögonblick.
Detta är bra.
Jag stället kommer att göra detta.
Skriv adress.
OK, stand by.
Skriv ut adresser, fäste i.
Ja, jag gillar det.
Dollar sign-- OK jag ska förklara vad jag gör i ett ögonblick, efter att jag har kört det här.
Varje år.
OK, nu kör vi.
Jag har bara-- och jag vill inte att visa allas telefonnummer,
men Maya kan bekräfta med en nick av huvudet,
att hon ser allas telefonnummer i klassen
att jag kommer att kopiera in ett program som heter Gmail.
Och om i Gmail, vad vill vi säga?
Saknar dig.
Love-- det är inte från mig.
Jag har inte ens slå skicka ännu.
Så låt oss gå vidare och göra detta, om jag kan zooma in.
OK.
Så jag använder ett program som heter Gmail nu.
Om Maya, skulle du vilja klicka på knappen Skicka
kommer vi att simulera vad som kod borde ha gjort.
>> Något?
>> [PIP]
>> PUBLIK: Japp.
>> TALARE 1: Ja?
Frälsning?
>> PUBLIK: Japp.
TALARE 1: Saknar dig.
Och jag kommer att skicka ut resten.
Jag skickade ut hälften eftersom jag inte tror Gmail skulle låta dem gå igenom.
Så kom ihåg, idag är dagen att du lärde mig att jag kan använda Gmail.
Det var skrämmande.
En stor applåd till Maya.
Tack.
Okej, så.
va
>> [PIP]
>> Vi fick några pip, ja?
Okej.
Nu ska jag få 700 verkligen olyckliga e-post tillbaka från klasskamrater.
Så åtminstone vi får se om det var värt det.
Så vad som gick fel?
Jag ska räkna ut vad som gick fel i efterhand,
men titta bara hur lätt det var att göra det i PHP.
Så vad kan vi faktiskt göra nu Vi har denna uttrycksfullhet av PHP.
Det was-- som var hemskt.
Okej.
Så det var vad som borde ha gått ut.
Detta var mig testa i morse på min telefon, faktiska skärmdump av min telefon.
>> Men nu ska vi fundera över varför vi faktiskt införa
allt det här i första hand.
Så målet är att inte skriver dessa program som
skrivs på kommandoraden, eller hur?
Så jag skrev en enkel hello program, skrev jag
ett litet program som gör villkors, och använde en läs linje och så vidare.
Och i teorin, jag skrev bara ett program som sänds ut
800 textmeddelanden, ge eller ta 800.
Och det programmet var alla fortfarande kör på kommandoraden.
Och det är naturligtvis inte på webben, eller hur?
Målet är nu att börja använda vad jag påstår är en enklare att använda
språket, daresay en mer kraftfullt språk i termer
av de funktioner som komma med det, att starta
skriva kod som genererar webbsidor.
>> Så förra gången och i förra veckan, Vi pratade om HTTP och HTML.
Och vad är trevligt om HTML är att det är bara ren text.
Och text är säkert något som du kan
ut genom att bokstavligen ringa print f funktion, eller utskriftsfunktionen.
Och faktiskt, det är vad PHP är nu kommer att tillåta oss att göra.
Så bland de exempel vi har i dagens källkod,
förutom några av koden att jag satte upp det för en stund sedan,
Vi har program som detta till exempel.
Froshims eller Freshman Intramural Sport, var faktiskt
ett av de första extracurriculars Jag fick med år sedan.
Och min rumskompis och jag, med vissa andra barnen på campus,
används för att köra froshims programmet.
Jag får mina textmeddelanden nu.
>> Nu så vi tillbaka i dag, så detta var 1996 eller så, det var en internet,
men det fanns ingen process-- där var ingen webbplats för froshims.
Och så om du ville registrera dig för fotboll eller volleyboll eller vad som helst,
du skulle fylla ut denna sak kallas en bit papper,
och du skulle gå över Harvard gård, och du skulle dra det
in brevinkastet av Proctor, som var i Wigglesworth, en av campingplatser.
Och detta var du registrerat.
Och han eller hon skulle då komponera ett mail till dig
manuellt, ungefär som jag bara gjorde här med Maya,
och då skulle du bekräftas ha varit registrerade.
>> Så det här var som låg hängande frukt, så att säga.
Det var typ av dum att vi använder papper för detta.
Jag ville att vi skulle kunna att bara gå på en webbplats,
eller har freshmen gå på en webbplats, registrera för sport,
och bara automatisera en hel del av det här genom att sätta sina namn och e-post
och så vidare i en databas.
Och i själva verket den allra första versionen av webbplatsen, med hjälp av super ful HTML,
kan ha sett ut ungefär så här.
Det var faktiskt, ironiskt nog, mer pinsamt ut än detta tillbaka
då.
Men jag använde ett programmeringsspråk.
Inte PHP, utan snarare kallas Perl, som är en äldre språk,
men mycket i samma anda.
Och jag bara helt lärde det till mig själv.
Och det tog mig ett tag att räkna ut, frågar massor av frågor av vänner.
Men idéerna där var exakt desamma.
För vad PHP verkligen design finns inte kommandoraden grejer
vi spelade bara med, men för webbprogrammering.
>> Det är verkligen bundna i dess funktion inställd på banan, på följande sätt.
Detta är froshims.
Och om jag ville registrera i denna form,
Detta är ganska ful, förvisso, men låt mig gå vidare
och vara en mindre bekväm student, och vad idrott för Matthews,
klickar du på Registrera.
Vad jag vill kunna göra är lämna uppgifter från ett formulär,
inte Googles server som vi gjorde förra gången, helt
fusk genom att använda sin backend, jag vill genomföra min egen backend kod.
Vilket betyder skriv PHP kod som bor på en URL
att formulärdata kan lämnas till.
>> Och sedan din kod, skriven i PHP på en server,
kan då svara på den användaren input.
Liksom hans eller hennes namn, eller komfort nivå, eller studentrum, och sedan göra något med det.
I det här fallet, jag bara dumt skrivs ut
som text, vilket inte är så söt.
Men du kan säkert föreställa sig, om du vet HTML,
och du kommer snart att veta hur man skapar HTML med tryck f, och skriva ut,
och liknande funktioner, kan du säkert generera en vackrare webbsida som säger,
hey David, du är nu registrerad.
Du är en mindre bekväm student från Matthews, eller hur?
>> Du kan bara använda en hel massa% ses, eller klammerparenteserna och dollartecken
notation Jag använde en stund sedan, generera text som är mer användarvänliga
än detta.
Så låt oss ta en titt på denna fil.
Froshim noll dot PHP ser ut så här.
När jag laddar CS50 IDE, froshim nolla ser ut så här.
Detta är froshim noll prick PHP.
Och vad gör du märker om den här filen?
>> PUBLIK: [OHÖRBAR]
TALARE 1: Ledsen, lite högre?
PUBLIK: [OHÖRBAR] Det handlar i HTML.
Och i själva verket är det, eftersom vad som är intressant om PHP
är att den är konstruerad att vara, för bättre
eller värre, blandade med HTML-kod.
Och faktiskt, även om detta fil, froshim noll prick PHP,
har en PHP kommentar på toppen av det, det är allt bara HTML.
Men däremot om jag öppnar upp, låt oss säg, registrera noll dot PHP, som
bara har en stor kommentar på toppen.
Det här ser nästan alldeles för som HTML, med undantag för vad?
Line, vad, 21 ser lite konstig.
>> Men märker jag in PHP-läge med öppen fäste frågetecken PHP.
Sen har jag en del saker.
Och sedan vid slutet av den linjen nästan har jag, frågetecken PHP.
Och detta är vad jag menar med blandade.
Du kan skriva HTML som du bara vill att servern ska spotta ut.
Men om du vill göra något dynamisk halvvägs genom sida,
som sätter mitt namn eller dorm eller komfort nivå,
Jag kan använda en funktion som tryck r, som är
ut rekursiv, vilket betyder bara skriva ut denna variabel, formatera det
hur du vill.
Det är verkligen inte för mänskliga syften, det är bara
för felsökning eller diagnostiska ändamål.
Så det är hur jag gjorde det.
>> Om jag istället gå froshims två dot PHP, märker att effekten av detta formulär
är inte registrerad noll dot PHP som old-- den tidigare var faktiskt.
Men det är registrerat två dot PHP.
Så låt oss titta på hur detta beter sig lite annorlunda.
Om jag går in version två.
Om här, om jag registrera sig som David, mindre bekväm, från studentrummet av Mathews,
registrera.
Så den här gången det sagt, du registreras, inte riktigt.
Låt oss se vad jag gjorde här.
Om jag tittar på registret två dot PHP, har detta lite mer PHP-kod.
Det är en lite renare, även om det fortfarande sveper lite länge på denna linje.
Lägg märke till här.
Jag skriva ut min HTML-tagg, mitt huvud tag, min rubriktaggen, huvudet, kroppen.
>> Och då jag börjar säga saker som anger PHP läge.
Och så den taggen, öppna fäste PHP-- frågetecken PHP säger,
hey, server, execute-- tolka Följande saker som PHP
tills du ser sluttagg.
Och även om du kanske inte vet något andra PHP än du har sett hittills,
du kan typ av läsa det ganska intuitivt.
Om namnet är tom, eller komfort är tom, eller studentrummet är tomt, vad ska jag göra?
Vad ska jag säga till användaren?
Du måste ange ditt namn, komfort, och studentrummet, och så vidare.
Annars, jag säger att du är registrerade, väl inte riktigt.
>> Och jag säger inte riktigt eftersom det inte finns någon databas.
Jag tänker inte göra någonting med data.
Jag bara kasta bort i demonstrationssyfte.
Nu har jag typ av snävt över linjen 22.
Det finns mer syntax där, men dollartecken
streck inlägg är ganska intressant.
Och detta är vad är trevligt om PHP.
I PHP, har du vad som kallas några super globala variabler.
De är typ av ännu mer viktigare än globala variabler.
Och dessa, alla aktiverade som sådan, kom med PHP.
Så om du har en server som har en webbserver installerad, som Apache,
och du installerar språk stöd för PHP, helt plötsligt du
kan börja använda dessa super globala variabler i koden.
>> Och vad är trevligt om PHP är att om du bara
skriva en fil som slutar i prick PHP, satte den på en webbserver,
och sedan skicka ett formulär för det via denna åtgärd taggen och ett formulär etikett,
att åtgärder attribut i formulär tag, PHP och webben
helt räknar ut hur att ta alla dessa nyckelpar värde ut
av URL som ifråga märke q lika katter,
det kommer att räkna ut hur man q och katter.
Om du skickar ett foto eller ett användarnamn, eller ett lösenord för att vilja Facebook,
PHP kommer att räkna ut för dig där alla dessa data är.
Och det kommer bara lämna du en associativ array
kallas dollartecken streck post, eller dollartecken streck få,
beroende på om du är med hjälp av GET eller POST inlagor.
Och det kommer bara lämna dig en super global variabel,
så att om du vill komma åt namnet att användaren in via den webbsidan
formulär, du bokstavligen bara säga namnet av super globala variabeln, citationstecken,
unquote, namn.
Och citationstecken, unquote komfort, och citerar, unquote sovsal.
Och vi kommer att kunna göra detta och så mycket mer med PHP.
Och även om det var en virvelvind blick på det,
vi ska dyka mycket mer nästa vecka.
Vi ska presentera en databas så att du faktiskt
kommer att börja genomföra din egen e-handel based--
som hemsida på bara en veckas tid.
Så vi ser du nästa gång, och hoppas att ni fick textmeddelanden.
Bye.
>> [MUSIK SPELA]
>> [DÖRRÖPPNING]
>> TALARE 2: Hej.
TALARE 3: Vad händer?
TALARE 2: Vad gör du?
TALARE 3: Arbeta på ett problem set.
TALARE 2: Nice.
High five.
>> [HIGH FIVE]
>> Vad är-- uh, vad gör du här?
TALARE 3: Bara umgås.
Precis kommit tillbaka från gymmet.
Jag kunde inte låta bli märker när vi hög fived,
att du har ganska grov händer.
Vill du gå till gymmet?
>> TALARE 2: Nej.
Nej.
>> TALARE 3: Dude, du ser ganska stor.
Som är dåligt, eftersom alla vet 8-ball är den stora mannen på campus.
High five.
>> TALARE 2: Öh, nej.
Nej, jag tror jag är bra.
Jag tror jag är bra.