[Muziek] SPEAKER 1: Dit is CS50 en Dit is het einde van week zeven. Vandaag de dag is misschien wel waar we echt leer je talen. Introduceerden we in de afgelopen paar weken HTML en CSS, die geen van beide zijn programmeertalen. En inderdaad, ook al hebben we niet kijken naar bijna alle labels die HTML wordt geleverd met en bijna alle van de eigenschappen die CSS wordt geleverd met, dat is een soort van het voor HTML en CSS. We zullen gewoon in het algemeen beginnen de veronderstelling dat je inzicht in de algemene ideeën tags en attributen, en pagina's worden verzonden van klant tot server. Want vandaag gaan we kijken naar een andere programmeertaal, PHP. We gaan dit super snel te doen. We zijn niet van plan om je te leren PHP per se, net zoals we hebben niet de ambitie om je te leren C, per se, maar programmeren. Inderdaad, een van de goals voor deze cursus is niet om je te leren C, of HTML of CSS of PHP, of elk aantal andere buzz woorden of acroniemen, maar de computer science en hoe fundamenteel programmeren. En inderdaad, vandaag beginnen we te nemen die training wielen van alle verder door het vliegen door een taal genaamd PHP als volgt. Hier is wat deze taal eruit ziet. Het blijkt dat er geen behoefte een belangrijke functie in een programma geschreven in een taal genaamd PHP. Zodat al klinkt een beetje eenvoudiger dan C, waarmee we vertrouwd zijn. Het blijkt dat als je wil een variabele declareren, je doet het bijna identiek aan C. Maar Er is duidelijk een verschil is hier toen ik verklaar een string, of misschien twee verschillen. Wat ziet er anders uit? Publiek: De dollarteken. SPEAKER 1: Ja, er is dollar ondertekenen, die we nog nooit eerder hebben gezien. En wat ontbreekt? Ja? PUBLIEK: [onverstaanbaar] SPEAKER 1: Ja, er is geen data type. Het blijkt dus dat PHP is wat we bel een losjes getypeerde taal, waarbij C is sterk getypt. Losjes getypt betekent gewoon dat zijn er verschillende soorten gegevens, er zijn strings en integers en praalwagens. Maar de computer cijfers die uit. U het menselijk programmeur hoeft het niet te achterhalen. Dus alles wat je hoeft te doen te verklaren een variabele dollarteken, de naam van uw variabele en vervolgens bijvoorbeeld citaat unquote, hello wereld. Nou, dit is wat een toestand eruit ziet in PHP. Eventuele verschillen? Nee. Zo blijkt hier identiek. En je zou minder hebben takken of meer takken, maar de syntax bochten precies hetzelfde. Boolean expressies kan samen worden besteld. Boolean expressies kunnen samen worden ANDed. Je hebt nog steeds schakelaars. Zelfs als je niet hebt gebruikt Hiervan deze bestaan ​​in C en ze zijn functioneel equivalent in PHP. En in feite, in PHP zijn ze een beetje meer krachtig. In C, kunt u alleen vergelijken bepaalde data types zoals integers en tekens, terwijl in PHP kan je eigenlijk vergelijken volledige uitvliegen strings zonder zorgen te maken over pointers en dergelijke. Dus hier is een lus. Dit is slechts pseudocode code, als je wil. Maar het is structureel identiek aan C. Hier is een tijdje lus pseudocode therefore-- identiek C. Hier is een doe terwijl loop-- identiek. En dus er is een soort van Dit patroon hier, waarbij er zijn een paar andere syntactische features we inderdaad gaan zien. In feite, hier is een aardige manier in PHP, waarbij, als u wilt herhalen over een array, en je wil niet te springen door de mentale en syntactische hoepels van het hebben int i gelijk is aan 0, i minder dan n, ik plus plus-- die is gewoon een hoop vervelende syntax. U kunt een beetje meer zeggen fluïdumverbinding per nummers onder nummer, indien in casu dollarteken nummers, ik ga ervan uit, is als een array met de naam nummers. En dan ben ik ervan uitgaande dat nummer, enkelvoud, gaat een variabele. En wat PHP zal doen voor mij als ik herhalen Over deze lus op elke iteratie het gaat werken de variabele nummer zijn de i-element in aantallen, meervoud. Zodat het net behandelt dat allemaal voor mij. Geen vierkante haakjes, geen dollarteken, geen puntkomma's. Het is gewoon een beetje eenvoudiger. Nou, als je wilt dat een array, het blijkt dat je kan iets redelijk vergelijkbaar te doen C. De syntax is een beetje anders. Maar hier is een serie genaamd dollar ondertekend nummers. En ik gebruik, in PHP, vierkant beugels, zo blijkt. En we gaan om deze weer te zien in JavaScript-- nog een andere taal. Ik gebruik gewoon vierkant haakjesnotering een door komma's gescheiden lijst gehele getallen, in dit geval. Maar dat geeft me een array. Maar nog krachtiger in PHP, we hebben ook wat over het algemeen zogenaamde associatieve arrays. En veel talen zijn deze ook. Het ding over C arrays is dat de indexen voor een array, het ding dat je Gebruik vierkante haken via welke u toegang tot onderdelen, moeten wat zijn? PUBLIEK: [onverstaanbaar] SPEAKER 1: Ze moeten getallen of integers, in het bijzonder van nul up. Nou, in PHP, en het blijkt uit, in andere talen, kunt u beginnen te hebben indexen die niet numeriek zijn. Maar ze zijn eigenlijk woorden of uitdrukkingen, zodat in plaats van probeer te onthouden waar iets is, of opgeslagen in een variabele i, kunt u daadwerkelijk gebruik maken van een woord en zeggen: dat-- u kunt een woord als dit te zeggen. Dus dollarteken citaat is de de naam van een variabele hier. Dit is enigszins funky syntaxis dat is associëren twee belangrijke waarde paren voor deze variabele. Specifiek, dit geeft me een matrix die een lengte 2. Maar de indexen niet 0 en 1. De indexen zijn citaat unquote symbool en citeer unquote prijs. En de waarden van de indexen, respectievelijk, is FB voor Facebook en $ 79,53, toen ik voor het laatst gecontroleerd een prijs voor. Wat betekent dat? Nou, het betekent dat in plaats van het schrijven van code als dit, waar ik gebruikt om iets te doen zoals dollar sign-- of liever, in C Ik zou niet eens een dollarteken. Ik zou iets doen zoals offertes en vervolgens Ik zou beugel ik op een gegeven om te doen willekeurig numeriek geïndexeerde waarde. Vanaf vandaag in PHP, als je wil op een waarde te krijgen, hebben we een soort van meer semantische expressiviteit. Gewoon een mooie manier om te zeggen wat we kunnen enkel dingen noemen wat ze zijn. En als je wilt krijgen op iets symbool, nu je letterlijk doen citeren unquote symbool vierkante haken in plaats van slechts getal. Dus het is een leuke gemak. En dat is een soort van het voor nu. Er is trossen andere functies in PHP. En inderdaad, PHP wordt geleverd met de spreekwoordelijke aanrecht. Tientallen, honderden functies te komen met PHP-- zo veel meer dan kwam met C. En dat is niet de bedoeling om overweldigen maar helpen besef je dat we geen meer hebben om code te schrijven dat is een soort van hier beneden conceptueel. Nu kunnen we gewoon beginnen te profiteren van veel meer geavanceerde functies dat talen zoals PHP hebben. Zodat we niet zorgen te maken over bewegende dingen rond in het geheugen. We hebben geen zorgen te maken over malloc en al deze lagere niveau, krachtige details die u worstelen met, zo niet worstelen met, pset5, maar je kunt beginnen met het snel voor lief nemen. In feite, laten we schrijven een super eenvoudig programma in PHP als volgt. Ik ga naar het hoofd gaan in CS50 IDE hier, en wat ik ga doen is het creëren van een nieuw bestand, dat heel eenvoudig gaat hallo dot PHP genoemd te worden. Dus in plaats van punt c, het gaan heten dot PHP. En dan in dit bestand, Ik kan begint te typen. Maar het blijkt dat de een ding dat ik moet weten is dat een PHP-bestand in het algemeen, moet te beginnen met een aantal speciale syntax. Vergelijkbaar in de geest naar HTML, maar nogmaals, PHP is een programmeertaal, niet een opmaaktaal. Dus elk bestand, en het is een soort domme zoek ik zal toegeven. Open beugel vraagteken, PHP. En dat is gewoon de manier om te zeggen de taal van, hey, computer komt hier een code geschreven in een taal genaamd PHP. En dan aan het einde van het bestand, je soort soort van het tegenovergestelde. U hoeft niet opnieuw gewoon schrijven PHP, je do vraagteken, hoekijzer. En dan alles wat je binnen zetten Deze twee markeringen, zogezegd, zal zijn, of zou moeten zijn, PHP-code. Dus laten we iets super eenvoudig te doen. Ik ga om te gaan en doen afdrukken def, hello wereld, backslash n, te redden. En nu naar mijn prompt, ga ik doen, maken hello-- nee, ik ga doen, dot slash hallo. Nee, dot slash, hm. Dus er is iets anders. Inderdaad is dit een belangrijk verschil tussen PHP en talen zoals C. C een zogenaamde gecompileerde taal. Wat betekende voor C worden opgesteld? Wat was de implicatie? Ja. Publiek: schreef het in machine code dus het kan worden uitgevoerd door de computer. SPEAKER 1: Precies. We moeten eerst omzetten in zogenaamde machine code, nullen en enen, voordat het daadwerkelijk uitvoerbaar zal zijn en begrepen door de computer. Door Intel inside. Door de CPU binnenkant van de computer. PHP, daarentegen, is wat heet een geïnterpreteerde taal, die betekent dat je niet compileren in nullen en enen, machine code, u in plaats daarvan laat het als broncode. En je in plaats daarvan doorgeven als input een programma, een interpretator dat iemand anders geschreven jaar geleden dat het begrijpt lijn per lijn, karakter voor karakter. Met andere woorden, mensen daar schreef een programma dat eruit zal zien bij je code lijn per lijn, en erachter te komen wat de computer moet doen, zonder converteren direct naar nullen en enen. Dus als het ziet een lus, deze zogenaamde interpreter gaat worden als, al goed, zou ik iets te doen opnieuw en opnieuw en opnieuw. Wat moet ik doen? Laat me kijken naar de volgende regel. Laat me kijken naar de volgende regel. En het is echt interpreteert lijn per lijn. Dus om het uit te voeren, heb ik geen gebruik van maak. Ik weet niet dot slash gebruikt in dit geval. Ik in plaats daarvan doen PHP, die is de naam van een programma, alias Een tolk, dat is vooraf geïnstalleerd in CS50 IDE, en nu moet ik een pas command line argument, dat is simpelweg de naam van de bestand dat ik wil interpreteren. Of meer terloops, dat ik wil uitvoeren. En als ik druk op enter, daar hebben we het. Hallo Wereld. Nu blijkt dat ik gebruikte druk def doelbewust om ons te overbruggen van C naar PHP. De meeste PHP-programmeurs, zoals u zult zien, niet eens de moeite met afdruk def. Zij maken gebruik van slechts een functie genaamd print, die C niet hebben. En dus als ik eigenlijk herhaald dat nu, het gedraagt ​​functioneel hetzelfde. Ik kan geen gebruik maken van het percentage s en i procent enzovoort, maar er zijn andere manieren in PHP om dat te doen. Maar dit is alleen zeggen dat syntactisch, anders dan sommige rare dingen top, en wat rare personages neer onder de begrippen nu uit programmering in deze andere talen zullen precies hetzelfde. In feite, laten we een ander voorbeeld. Dus ik ga om verder te gaan en sluit het bestand. Laat me nog een te maken dat Ik voorwaarden 1 dot PHP noemen. Dus geen nul, want wat ik deed was keek ik weer een paar weken geleden, we een bestand genaamd gehad voorwaarden 1 punt C. En wat Ik wist werd het omgezet in mijn hoofd en hier op papier, en binnenkort op de cursus website, regel voor regel in PHP. Dus in de C-versie, hebben we iets zoals touwtje s krijgt krijgen string. Dus het is een beetje anders om dat te doen in PHP. In plaats daarvan, ik ben gewoon gaan te doen, of liever gezegd, ik zou hebben gedaan int n krijgt krijgen int, in het eerdere voorbeeld. Dus in plaats van dat ik ga n doen wordt gelezen lijn, zou ik graag een integer, alsjeblieft. Dus dit is gewoon mijn prompt. En zo blijkt, en Ik zou dit alleen weten uit gelezen of gezien de functie vóór, lees lijnen van de functie in PHP neemt een argument is dat een prompt het menselijke en het doel in het leven is om een ​​regel tekst te lezen dat hij of zij vormen in. En dan slaat dat Tekst in de variabele n. En nu wil ik misschien iets doen zoals ik deed weken geleden, op dezelfde week één van de klas. Als n groter is dan nul is, dan ga ik dat syntax we net zagen lenen, afdrukken def, je pakte een positief getal, backslash n. Anders als n gelijk is aan nul is, ben ik gaan om verder te gaan en te zeggen, print def, je geplukt nul backslash n. Anders het geval zou natuurlijk, print def, u een negatief getal geplukt. En we kunnen zeker implementeren de logica van dit ding in een bos van verschillende manieren, maar het punt hier is dat syntactisch, nauwelijks iets is nieuw. Het is gewoon de dollarteken en een nieuwe functie en lees lijn. Maar fundamenteel, wat is er nieuw nu is dat ik het interpreteren dit. Ik ben het passeren als input een ander programma. Dus als ik wil dit, uitvoeren als Ik maakte geen fouten te maken, Ik ga PHP draaien, van voorwaarden 1 dot PHP, Enter, Ik ga om te typen in het nummer 50, en laten we aannemen voor nu werkt het. Omdat de logica is het dezelfde dingen als een week. Oké, dus dat is mooi underwhelming, toch? We kunnen dit doen in een aantal talen. Laten we iets doen manier krachtiger. Laten we eindigen probleem stellen vijf. Dus ik ga om verder te gaan en doen dit. Ik ga naar een bestand te maken riep woordenboek dot PHP, en zoals je misschien geneigd zijn klauteren omlaag veel notities, De Notes zullen alleen helpen u als jij mag voor de uitvoering van de problemen van de vijf in PHP. Maar we zullen zien hoe snel we nu kan dat hetzelfde probleem set uit te voeren. Dus in woordenboek dot PHP, ga ik aannemen dat er al een bestand in de wereld genaamd speller. En inderdaad, ik heb dit van tevoren, en we zullen niet lopen door deze lijn door de lijn, maar als je nieuwsgierig later en echt willen om je geest te wikkelen rond de verschillen tussen c en PHP, letterlijk vergelijken dit bestand, speller, vanaf vandaag de broncode dat we later zullen plaatsen vandaag, tegen p set vijf speller dot c dat wij u, en het is bijna dezelfde regel voor regel. Er is wat meer dollartekens. Een paar functies een beetje anders. Maar het is een leuke manier van de soort te zien hoe je de ene taal naar de andere te vertalen. En het is bijna identiek lijn voor lijn. Maar ik ga ervan uit dat dat bestaat, en wat ik ga doen hier is proberen op te blazen je Mind van herimplementeren het geheel van het probleem van de vijf wijze sneller dan je tot nu toe doen. Dus bijvoorbeeld, ik ga eerst verklaren een globale variabele genaamd grootte, en stel deze gelijk aan nul. Nu dat is niet veel besparingen. Odds je geïmplementeerd grootte vrijwel hetzelfde, of hint hint, zal vanavond of morgen, alleen met behulp van een globale variabele genaamd grootte en instellen van het gelijk zijn aan nul. Dat is niet een bijzonder verbazingwekkende spoiler. Ja, wat waren je datastructuren van keuze, die van u die hebben gedoken en lees de spec, wat datastructuren hebben de meeste van jullie hebben gebruikt? Een hash tabel of proberen, misschien sommige varianten daarvan. Zodat de uitvoering van een hash-tabel op zijn minst, is een soort van een heleboel regels code, toch? En niet allemaal kunnen zijn functioneel op dit punt in de week, maar dat is prima. Omdat in PHP, als ik wil een hash-tabel, gedaan. Rechts? Zodat variabele die ik heb slechts verklaard is uiteraard riep dollarteken tafel, per invoering daarvoor. Maar ik wil gewoon bij het einde van de dag, een array. Maar niet numeriek geïndexeerd array, want dat is net als twee weken spul, toen we spraken over arrays. Ik wil een hash tabel. Maar een hash-tabel is echt slechts een concrete manier om te zeggen, U wilt een associatieve array. U wilt in staat zijn om associëren toetsen met waarden. Toetsen met waarden. Wat is een woordenboek, echt? Nou, het is een hele sleutelbos. Woorden zoals appel, peer, en banaan, en al deze woorden Engels dat wij overhandigen u. En de waarden die je effectief bent invoegen in uw woordenboek zijn ofwel waar, of het ontbreken, vals. Met andere woorden je invoegt een hele hoop van de belangrijkste waarde paren, appel, waar, peer, waar, banaan, waar. Zodat wanneer je op te halen of te kijken up die gegevens in uw hash table met uw check-functie, je bent ofwel om terug een antwoord, ja, ik vond het in mijn complex hash tafel, of nee, het is er niet, dus je return false. Dus om dat te doen, alles wat ik nodig heb is de gegevens structuur zoals ik eerder voorgesteld. Ik moet in staat zijn woorden associëren achtige, citaat unquote, symbool, met een waarde zoals, ware. Dus daar is mijn hash tafel. Laten we daadwerkelijk gebruiken. Dus er is een paar functies Ik moet implementeren. Ik ga om te gaan en te bijten off een functie genaamd grootte. Het neemt geen argumenten. Ik heb geen moeite met het woord, leegte, in PHP. Ik ga gewoon naar terug te keren grootte. En als een terzijde, PHP heeft Dit minorly vervelend detail, waar als er iets globaal, moet je vertel de functie die u gebruikt het, hey, dit is een globale variabele. Dus, kleine domheid, maar u moet het toch doen. Dus hoe zit het met de belasting? Ik ga uit te voeren een functie genaamd load dat neemt in de naam van een woordenboek, net als in het probleem van de vijf. En voordat ik verder, opmerken dat ik niet is het typen helemaal dezelfde dingen. Wat is duidelijk verschillend in PHP over hoe je een functie versus C verklaren? Ja. PUBLIEK: [onverstaanbaar] SPEAKER 1: Geen terugkeer type. En inderdaad, dat is het geval, PHP voor zover het is losjes getypt, is ook een beetje slordig in die zin. Je niet opgeven als de programmeur Wat deze functie geeft. Je zou hebben om daadwerkelijk te kijken naar de code om dat uit. Of lees de commentaren of de documentatie. Dus plussen en minnen van dit soort beslissingen. Maar ik moet zeggen het sleutelwoord, de functie. En wanneer we leren JavaScript in een paar weken we gaan om hetzelfde te zien weer, maar het is hetzelfde idee. De naam van de functie, haar betoog of argumenten of het ontbreken daarvan, en nu Hier is de implementatie. Dus ik ga sommige bochten gewoon knippen te zijn dramatisch voor slechts een moment. Maar ik ga om te gaan en te zeggen dit. Dit is hoe ik kan laden Een bestand in een array. Er is een functie in PHP genaamd bestand. Je geef het de naam van een bestand. Het overhandigt je terug een array, binnen waarvan elke regel van het bestand. Nul, één, op maximaal n minus 1 lijnen. Dat is het, toch? Er is geen f lezen. Er is geen f get s. Er is geen procent s. Er is geen hoofdpijn. Er is geen feof. Al dat gedoe met die je hebt worstelen misschien, met p set vier en vijf, gaat weg. Dus ik lees net die lijnen in het bestand, en dan weet je wat? Als ik wil herhalen over die woorden, Ik kan doen, voor elke lijnen lijn. Vergeet niet dat dit soort van een slimme manier om itereren over een array, index per index, en elke iteratie calling de huidige regel, dollarteken lijn. En hier ga ik om te gaan en zeggen tafel, beugel, lijn, krijgt waar. Met andere woorden, dit is hoe I invoegen in mijn hash tafel in PHP. Ik zeg dollarteken tafel, die mijn associatieve array die was lege per de regel code boven. Vervolgens heb ik index erin niet met een getal, maar letterlijk met de trefwoord dat ik zorg over. Misschien is het appel of peer of banaan of wat dan ook, maar specifiek ik indexeren erin Zoals ik al eerder voorgesteld. Ik neem de naam van mijn associatieve array, en dan heb ik citaat unquote gebruiken in de vierkante haken met een koord, in plaats van een getal. En dat is het. De belasting functie wordt gedaan. Zodra dat lus herhaalt, heb ik alles in de hash tabel. Nu kleine disclaimer, is er een paar dingen die ik moet oplossen. En de versie die ik online plaatsen zullen de nuances, maar het is meestal gewoon gaan voor sommigen foutcontrole en enkele kleine tweaks. Maar dat is inderdaad de kern van het. Als ik wil nu te implementeren de functie genaamd kijk, dat een verwacht woord als argument, hoe zou ik over dat doen? Nou, ik ga gewoon naar zeggen, als binnenkant van mijn tafel, op de locatie woord, indien wordt vastgesteld. Dus als er is-- eigenlijk, weet je wat? Ik ga het doen een beetje pseudocode. Maar het idee is hetzelfde. Als dat waar is gelijk, return true. Prima. Else-- je soort van kan zien waar Dit is going-- aan return false. Gedaan. Controle wordt gedaan. Erg mooi, toch? En dus wat is dit echt steeds bij? En dit ook, sneed ik sommige bochten. Kijk naar de online versie voor alle van de lichte nuances. Maar dat is de kern van het. Index in uw associatieve array, alias Hash tabel, zien of er een waarde daar, als het is ingesteld op true, en zo ja, return true. Dus we hebben teruggebracht alle complexiteit. Dus soort geest waait, toch? Ik zal niet de moeite af te maken met lossen, want in fact-- oh, weet je wat? Ja, laten we eindigen met lossen. Lossen in een hash-tabel zou kunnen kijken achtige functie lossen, terug te keren. OK dus dat is ontladen. Omdat er niets om te lossen, toch? Er is geen malloc. Ik heb niet expliciet vragen aan de besturingssysteem voor alles. Ik ben net begonnen met behulp van variabelen. En dus ook dit is een manifestatie van kenmerken van hoger niveau talen. Nogmaals, de meeste van deze term we hebben hier te maken naar beneden met C. Super laag niveau. U kunt het geheugen van de computer te zien. Je kunt alles wat je aanraakt wil in het RAM van uw computer, in voor-en tegenspoed. Hier, we gaan op te geven die macht. Maar mijn god, kijk eens hoe veel minder code die ik schreef. In feite als ik niet praten en praten over mijn typen, zouden hebben gedaan dit voorbeeld vijf minuten geleden. Dus wat is de prijs die wordt betaald? Nou laten we eens een kijkje nemen. Laten we kijken. Ik ga om te gaan en uit te voeren CS50. Laat me eerst in voorbeelden van vandaag waar Ik heb de teksten directory als voorheen. Ik ga naar de oplossing lopen dat het komt met een probleem van de vijf zogenaamde speller, die in rekening CS50's. En ik ga om het uit te voeren op iets groot als de King James Bijbel, gewoon zo dat we echt zet de medewerkers oplossingen op de proef. Nu soms het internet is een beetje langzamer, een beetje sneller, kan een tijdje duren om te scrollen. Maar het duurde een totaal van 0,56 seconden om spellingcontrole de King James Bijbel met het personeel oplossing. Dus vrij goed. Jouwe zou veel trager, en dat is helemaal prima. Maar het is juist hier. Dus dat is het personeel oplossing. Als ik naar binnen en het schoonmaken van de PHP-versie. En ik ga een beetje te doen zoals baksel toont ding. We gaan de code die ik schreef nemen eerder, dus het is volkomen juist. Omdat de code die ik schreef is niet van plan volkomen juist te zijn, juist nu. Maar als ik de PHP-versie, wat moet ik op te geven vandaag? Kostte me vijf minuten implementeren p vijf, ik beweer. Welke prijs heb ik betaald? Ja. Publiek: Snelheid. SPEAKER 1: Speed. Wat bedoel je? Publiek: Het zal langer duren. SPEAKER 1: Oké. Laten we kijken. Het zal langer duren, niet te schrijven, maar om het te draaien. Ja. Dus laten we proberen dit. Dus hier ga ik om verder te gaan en te doen PHP van de speller, en omdat het bestand genaamd speller. Dus ik ben niet het uitvoeren van de woordenboek, recall, Ik gebruik het programma genaamd speller. Ik ga nu in dezelfde bestand, King James de vijfde. Het vliegen door. Dit kon gewoon internet snelheid, dus niet te veel in de tekst. Maar het voelt langer zeker. 1.26 seconden. Nu is dat nog steeds vrij verdomd snel, toch? En de enige reden dat voelde als meer zoals drie of vier of vijf seconden, dat is gewoon omdat internet was traag. De computer tijd was 1,26 seconden, versus ik denk 0,56. Dus meer dan twee keer zo langzaam. Nu is dat nog steeds pretty darn snel, maar het is een manifestatie van, inderdaad, dat de exacte prijs. Omdat we interpreteren in de code lijn per lijn, en dat programma PHP is het lezen van mijn code van boven naar beneden, van links naar rechts, het moet meer denken te doen. Het moet soort zetten het binnen zichzelf de overeenkomstige machine code op de vlieg, om zo te zeggen, hoewel de mechanismen zijn een beetje anders. In plaats van alleen het voeden Intel CPU de ruwe nullen en enen dat het begrijpt native. Dus absoluut, handen naar beneden, hebben we een prijs betaald. En code geschreven in een taal zoals PHP heeft de neiging langzamer te zijn. Maar mijn god. Dus als ik nu mijn spellingcontrole bestand, breng ik een extra 0,7 of zo seconden versus 20 uur uit te voeren een snellere spellingcontrole, toch? Het is een soort van een afweging. En als je net begint p set van vijf, misschien niet 20 uur. Misschien veel minder dan dat. Maar het is een afweging, voor echt. En als je draait code op echt grote datasets, of zelfs op oudere hardware, dat soort verschillen kan zeker oplopen. Voor vragen tot nu toe? Ja. PUBLIEK: [onverstaanbaar] SPEAKER 1: Sorry, kan je zegt het eens te meer? PUBLIEK: [onverstaanbaar] SPEAKER 1: Je geeft up tijd. Nou, dus ja. U bespaart tijd door niet hebben om het te compileren, als dat is wat je vraagt. En inderdaad, in CS50, de meeste van de programma's, hoewel ze een tijdje kan duren om te schrijven, ze zijn relatief kort. Enkele tientallen, enkele honderden regels code, en zo samen te stellen dat ze vrij snel. Maar wanneer je begint het schrijven van grotere programma's, alsof je Microsoft bent of je bent Google en het schrijven van echt grote programma's in C of C ++, of soortgelijke gecompileerd talen, kunnen vele seconden duren, of zelfs minuten of langer compileren miljoenen regels code. En ook daar, dat verschil gaat om toe te voegen. En in feite, zodra we transitie vandaag, dezelfde dag vandaag, web programmering met behulp van PHP, je bent gaan om het te vinden net zo veel aangenamer om code te schrijven als je niet hoeft te doen die stomme stappen, zoals wijziging in uw terminal venster, het type make hello, re draaien, opnieuw het venster. Net zo veel domme mechanische stappen gewoon krijgen in de manier van doen het interessant, het plezier werk. En inderdaad gooien we die weg met PHP. En we kunnen communiceren daarmee sneller. Ja. PUBLIEK: [onverstaanbaar] SPEAKER 1: Zeker. Kan ik duidelijk maken wat het middelen worden uitgelegd? Wanneer u een taal te compileren zoals C, het gaat omlaag zoals we al zeiden de machine code, nullen en enen. En Intel besloot jaren geleden dat bepaalde patronen van enen en nullen Bovendien vertegenwoordigen of aftrekken, of afdrukken, of andere elementaire operaties. In de wereld van een geïnterpreteerde taal zoals PHP of JavaScript, of Python, of Ruby, of trossen anderen, in plaats van iemand heeft geschreven een interpreter-- in casu het is ook heet PHP, identiek aan de Naam van de language-- die in wezen heeft een grote lus in dat herhaalt over alle van de lijnen van de code dat ik voer het als input, zoals hello dot PHP of woordenboek dot PHP. En dan kun je denken aan hun grote lus als met veel condities. En daarop zeggen, als de mens is het sleutelwoord voor geschreven, beginnen met het doen van zijn of haar code opnieuw en opnieuw. Of als de mens heeft geschreven de lijn van de code, indien, maar voeren hun volgende regel voorwaardelijk. Dus het is echt zoals het interpreteren het in een menselijke betekenis, lijn door lijn, en die net kost tijd. Het duurt overhead. En dus dat is een prijs-- goede question-- we betalen. Dus laten we een andere demo dat is een beetje meer dramatisch. Er is, zou ik zeggen, een marge dit op een 90% kans van falende afschuwelijk, maar u zult versteld staan met 10% waarschijnlijkheid. Dus we elk jaar proberen om dit te doen, waarbij we probeer om een ​​programma dat doorloopt schrijven probleem set nul, waarvoor je hebt ingediend uw telefoonnummers en een Veel andere demografische gegevens, en we programmatisch stuur je een SMS-bericht. En dan iedereen telefoon begint te piepen of trillen, en het is gewoon geweldig, omdat goed, kijken naar wat computers kunnen doen. Dit werkt zelden correct schijnt, grotendeels omdat ik meestal krijgen de zwarte lijst door Gmail of een andere dienst voor het daadwerkelijk proberen om dit te doen op schaal. Maar grappige is ook, omdat we hoeft niet iedereen hier vandaag, fun feite de laatste keer dat we probeerde deze twee jaar geleden, Ik denk dat ik schreef een programma die zat in een lus iteratie over alle leerlingen in de klas, en elk van hen een tekstbericht, en het zei iets als, Waarom ben je niet in het college? Liefde, CS50 bot. Je hebt geen idee hoeveel verontschuldigend en een soort van pijnlijke emails Ik reactie van de ontvangen n minus 100 mensen die hier niet waren die dag. En nog grappiger, meer beschamend story-- je weet wel, laten we het daar. Het is al op video een paar jaar terug. Dus je zult me ​​snel zien schrijf een lus, waarbij het is heel gemakkelijk om een ​​bug in dat schrijven lus, zodanig dat de eerste door de lus, u stuur een SMS-bericht. De tweede keer door de lus I moet nog een SMS-bericht hebben gestuurd, en dan nog een tekst bericht, en nog een. Maar het blijkt dat als je een typefout maken bij het programmeren, je soms kunnen programma's die een te sturen schrijven SMS-bericht, dan twee sms-berichten, dan drie sms-berichten voor iedereen die een tekstbericht al heeft ontvangen. En zoals u weet, iets te doen, plus iets, plus iets, plus iets, is groot O van een heleboel tekstberichten, of n kwadraat, of $ 0,10 per sms-bericht, $ 20.000. Gelukkig raakte ik de Control-C voor die gebeurd, maar ik heb te danken ten minste één van voorgangers $ 20 voor het 200 aantal vreemde tekstberichten die, Niet alleen ging naar zijn telefoon, maar Ook het was als een oudere clamshell telefoon dus graag geduwd uit zijn geheugen elke andere persoonlijke tekst boodschap die hij had eigenlijk gekregen. Dus we hebben een doel vandaag, niet om dat te doen. Misschien schakelen vliegtuig-modus. Prima. Dus laten we gaan in een programma hier callled-- dat ik de tekst zal roepen dot PHP. En van tevoren, ik heb twee bestanden heb hier. Ik een bestand voor slechts personeel gemaakt, dat heeft al het personeel informatie, alle namen van de website van de cursus. En dan nu ik zojuist aantal nep nummers 555-1212. Dus deze zou eigenlijk niet overal naartoe te gaan. Maar let op de binnenkant van deze CSV-bestand, die hebben we gesproken over kort voordat in het kader van bestand IO. Wat is een CSV-bestand? Komma's gescheiden variabelen. En dit is net zoiets als een zeer lichtgewicht database als je wil. Er is een soort van een soort van vier kolommen in dit bestand, en er gekarteld, maar de komma in wezen kolommen in het bestand vertegenwoordigen. De eerste kolom is de TF of de naam van CA's. Tweede kolom is hun achternaam. Derde kolom is hun telefoonnummer. En vierde kolom blijkbaar is-- vierde kolom is blijkbaar wat? OK, dus het is hun carrier. Dus Verizon of Sprint, of wat niet. En als ik al eerder versprak, CSV. Komma's gescheiden waarden CSV hier. Dus wat kan ik doen met dit? Nou, dit is gewoon een grote tekstbestand en het is nogal lang, toch? Als dit gaat zijn soort vervelend. En het blijkt wel dat als ik wil een SMS-bericht naar, laten we sturen zegt Alex hier. Laat me gaan in mijn browser en verlaat de full screen mode gewoon zo kan ik heen en weer te schakelen. Het blijkt, laten we eens kijken, als ik ga in hier en inloggen op Gmail, oké. Kijk niet naar dit deel. Alleen krijg ik te zien. natuurlijk de livestream kan nog steeds zien wat ik doe. Prima. Dus hier is gewoon met Gmail Rekening John Harvard. Dus als ik wil een te sturen SMS-bericht naar Alex, Ik kan natuurlijk samenstellen van een bericht. En het blijkt, en ik heb getest met Alex voordat ik hier, dus je kunt een bepaald domein toevoegen naam om mensen telefoonnummers, want er bestaat in de wereld dingen geroepen SMS naar e-mail gateways. Dat is een mooie manier om alles te zeggen van ons die mobiele telefoons die hebben telefoonnummers, natuurlijk er waarschijnlijk voor uw provider, een bepaald achtervoegsel zoals bij Vtext.com voor Verizon tekstbericht dot com, die u kunt toevoegen aan uw eigen persoonlijk telefoonnummer en vervolgens u of vrienden, of je ouders kan tekst die u op dat adres. En Verizon heeft een server, een e-mail server, dat bij het ontvangen van deze e-mail, kijkt naar het numerieke gedeelte en dan gebruikt wat speciale magie industrie ze hebben om daadwerkelijk te sturen over de ether op uw specifieke cel telefoon. Nu is dit leuk omdat ik niet echt weet hoe je een SMS-bericht of code nog schrijven voor mijn mobiele telefoon, en je zou precies dat te doen voor een afstudeerproject, maar voor nu alle Ik heb mijn laptop hier. Dus ik wil herhalen over die CSV bestand, lijn, regel, regel, regel, grijpen elk van de telefoonnummers van het personeel, en hun vervoerder en programmatisch, samenvoegen, dat wil zeggen, sluit u de telefoon nummer met de juiste domeinnaam en stuur dan een e-mail. Dus dat is een veel trappen. En veel geluk om dat te doen in C. Het is een nachtmerrie van een situatie om een ​​bestand te openen, om het te lezen lijn per lijn door lijn, zoals u zien, of kan snel zien met Probleemverzameling vijf, zoniet probleem set vier, en dan dynamisch samenvoegen twee koorden elkaar, want in C, twee strings te nemen en ze te combineren, wat je doet minimaal moet waarschijnlijk doen? Je nodig hebt om meer geheugen te verklaren, toch? En vraag, malloc, kan ik meer geheugen? Dus ik kan de helft van deze zet Hier helft van dit hier. Het is gewoon zo veel stappen. En op dat moment je hebt verloren belangstelling voor de domme kleine demo waar je te maken ieders telefoon pieptoon. Laten we dit soort PHP stijl, waarbij we net beginnen met meer van dat aanrecht. En de ideeën zijn wezen hetzelfde, maar we hebben niet te maken veel over dat lagere niveau. Dus laten we zien hoe ik zou gaan over dit te doen. En gewoon zo dat ik niet herhaal fouten uit het verleden, Ik heb wat aantekeningen voor mezelf hier. En laten we eens kijken of ik ons ​​kan lopen door enkele van de fundamentele stappen, en dan omwille van de tijd van we zullen misschien gesneden sommige bochten op het einde. Ik ga om te gaan en te doen openen beugel PHP om dit bestand te starten. En ik ga om verder te gaan en dit te doen. File handvat, zoals u zult snel te zien, eigenlijk noemt een functie genaamd f geopend. En onthoud dit opent een bestand. En het citaat, unquote, r betekent wat, weer? Openen voor lezen. Nu in p set voor, u dit deed. En handvat kan van alles zijn, fu, bar, bas, een variabele naam. Maar over het algemeen een computer wetenschapper zou een open bestand noemen, waardoor u een file handle, houvast bij wijze van spreken. Ik ga gewoon doen sommige foutcontrole. Dus als het handvat is vals, net als in C, ga ik iets doen als: Kan bestand niet openen, backslash n. En dan ga ik gewoon om vooruit te gaan en af ​​te sluiten. En het blijkt, in PHP, Ik ben niet in een functie. Er is geen belangrijkste functie hier. Dus ik niet terug, per se. Ik verlaten. Die in wezen hetzelfde. En ik ben verlaten met één jaar waarschijnlijk. Eén betekent gewoon een fout van een soort. Het is niet nul, dus het is een fout. Oké, dus als ik ben hier beneden nu in mijn programma dat ik het bestand hebt geopend. Ik ga om te gaan en te verklaren een array genaamd adressen, en in C ik zou hebben om het te weten grootte van de matrix van tevoren, toch? Of ik nodig zou hebben om dit te verklaren is een pointer, en dan malloc. En dan elke keer als ik lees via een andere rij in het bestand, Ik ga nodig hebben om malloc meer geheugen, malloc meer geheugen. Dat is een pijn in de nek. En gelukkig, PHP en Ruby, en Python en JavaScript, zij zal uw arrays groeien automatisch voor u. Geen malloc. Geen memory management. De computer zorgt dat. Maar de prijs die je betaalt. Het is een beetje langzamer. En voor een programma als dit we gaan niet op te merken. We gaan 100 tekstberichten te verzenden. Bijvoorbeeld niet van plan om het te voelen. IT eigenlijk alleen begint te uit de taal van uw keuze wanneer uw gegevens of uw programma's krijgt echt, echt omvangrijke, zoals het geval zal meer zijn met onze web-based spul. Maar voor nu laten we streven naar vooruitgang. Hoewel het blijkt dat er een functie in C genaamd vh CSV. CSV bestand te krijgen, dat kost bestandsingang als argument, en het gaat dan, rij door rij voor rij, te lezen in een rij. Dus het is alleen leest een lijn tekst uit het bestand. Maar wat is leuk over deze functie het is niet alleen maar geef me een regel tekst. Het ziet er voor die komma's en analyseert de lijn. En om de lijn te ontleden middelen op te splitsen Op bepaalde waarden in deze context. Met andere woorden, dollarteken rij is een variabele die is gaat me een hoop indexen geven. Dit gaat het worden eerste kolom in mijn CSV. Dit gaat de seconde kolom, dit gaat om de derde te zijn, en dit gaat het vierde worden. Omdat recall, en Excel het niet werken de laatste keer dat we dit deden, maar als ik downloaden personeel dot CSV. Whoops, niet hernoemen. Als ik downloaden personeel dot CSV, en probeer te openen, Ik heb al registered-- oh ik niet bijgewerkt Excel sinds de laatste keer. Je zult zien dat het personeel dot CSV, ik heb vier kolommen. Dus toen ik las in de eerste rij voor Abby hier dollarteken rij 0 is Abby, dollarteken rij één is Lyons, dollarteken rij twee is haar nummer, en dan vervoerder haar telefoon. Dus dat is alles. En dat is mooi, want ik niet moet nu uitzoeken waar al die komma's eigenlijk zijn. Dus ik ga om verder te gaan en Dit doen, gezien het feit dat de definitie, Ik ga om te zeggen dat haar naam is in rij beugel nul, zoals beloofd. En ik ga grab-- en eigenlijk, weet je wat? Ik ben niet van plan te maken over haar naam, in dit geval. Ik ga het eenvoudiger te houden. Ik ga doen haar nummer is in rij beugel twee, denk ik. En haar carrier was, waar? Rij van drie, een over. Dus niets nieuws. Het is gewoon nul indexeren in een array. En nu ga ik het volgende doen. Indien de vervoerder is gelijk aan evenaart AT & T-- Ik ga gewoon naar een loop-- hebben Ik wil graag een email te creëren mailadres dat ziet er als volgt. Het gaat worden 617-555-1212 op, wat is het, text.ATT.net, is wat ik wil doen. Dus hoe kan ik dit doen? Ik ga naar het volgende doen. Haar adres zal haar nummer te zijn, en nu, laat me gaan en doen dit. Dit is een funky syntax. Ik kon het percentage s lukken, maar ik kan eigenlijk alleen maar doen. Dus dit is een PHP ding, maar laten we eens kijken wat ik doe. Dollars ondertekenen adres op links, maar een variabele. Geef me een variabele. Ik heb niet om het type te specificeren. PHP zal het uitzoeken. Aan de rechterkant, wat is het type data van dat hele ding op rechts? Ziet eruit als een string, omdat er dubbele citeert uiterst links en uiterst rechts. Nu is er een aantal funky nieuwe syntaxis hier. Er is de accolades, en de dollar teken nummer. Maar neem een ​​raden wat is dat syntaxis waarschijnlijk vertellen PHP te doen voor mij? Ja. Steek gewoon de waarde daar. Dus geen procent s. We kunnen printen f of s gebruiken afdruk f of iets dergelijks, maar PHP en een heleboel hoger niveau talen, zul je zien dat je kon hetzelfde doen functioneel, misschien zes verschillende manieren. En zo begint te worden een kwestie van design of stijl. Dus dit is gewoon een cryptische manier te kijken van te zeggen, geef me een e-mailadres, maar plug-in het nummer in Tussen deze accolades. En de accolades zal niet belanden in het eindadres. Nu kunnen we overslaan enkele van deze lijnen omwille van tijd is. Dus als een drager gelijk evenaart verHorizon-- whoops, Verizon-- Ik wil iets doen zeer vergelijkbaar, waarbij het adres wordt, citaat, unquote, nummer op text.ATT.net. En dan kan ik het zelfde soort doen ding voor de rest van de dragers. Maar ik zal gewoon puntje, puntje, puntje doen voor nu. En laten we nu eens aannemen dat Ik wil array toe te voegen, te duwen. Ik wil toevoegen aan de array genoemd adressen. Dit adres, dit is hoe je iets toevoegen aan een array in PHP. U hoeft niet te malloc doen. Je hoeft niet aan de array te wijzigen. Je gewoon zeggen array, push. Wat wil je wat scala push-- wil je iets op te duwen? Adressen. Wat u wilt duwen op adressen? Adres. En in feite, als je echt slim te zijn, sommige syntactische suiker hiervoor, zogezegd, die net betekent dat hoe kan je dit doen in het mooier manier zou zijn om dit te doen. Dit heeft ook tot gevolg groeiende de adressen array grootte één, en toen plop dat aanvullende e-mailadres in. Ja. PUBLIEK: [onverstaanbaar] SPEAKER 1: Een typo op de anders if-- oh, vervoerder. Dat is goed. Het zal ook niet van mijn gebrek aan de uitvoering van een deel van dit programma later. Maar bedankt voor het vangen. Nog een bug. Dankjewel. We willen dat dit Vtext.com zijn. Ja. Prima. Dus waar komt dit laat ons? We hebben de code om het bestand te openen geschreven. We hebben een lus te herhalen over de rijen in het bestand. We hebben code die toevoegt aan mijn array, een voor een, de juiste geformatteerde e-mailadres. Dus al die echt blijft is voor het verzenden een e-mail naar elk van deze mensen. Dus ik heb vooruit gegaan en klaargemaakt mezelf als volgt. Wat ik ga hier is-- doen en laten ga je gang en ga naar een aantal daadwerkelijke code, die eruit ziet als dit. Dus hier is de pre-gebakken versie die ik eerder schreef. En merk ik klaar uitvoering Sprint. Ik ben klaar met de uitvoering van T-Mobile. Ik ben klaar met de uitvoering van Virgin Mobile. En ik zal excuses op voorhand. Er is een aantal vervoerders die sommige studenten in de klas dat ik niet de moeite opsommen in de if conditie hier. Zo niet alle teksten gaat uit. Maar laten we eens kijken wat ik nog moet doen. Ik sluit het bestand, net zoals in p vier. En dit is de nieuwe syntaxis. En we zullen zien wat beetje van deze na verloop van tijd, vooral p zeven en acht. Maar dit is syntax voor het creëren een speciaal type structuur. Het blijkt er is een bibliotheek die komt met PHP, genaamd PHP mailer. Het doel in het leven is programmatisch e-mails versturen. Het is de code van iemand anders schreef dat maakt het makkelijker voor ons om e-mails te sturen, zodat we niet hoeven te houden heen en weer naar Gmail te gaan, en plakken in de mensen e-mailadressen. Er is een hele hoop van lijnen hier dat eerlijk gezegd, ik gewoon een soort van gekopieerde en geplakt uit de documentatie. En in feite, als je nieuwsgierig, ik alle links van de URL's van de documentatie in de code die we later posten. En merk op dat onder de dingen die ik doe is, ik zeg deze bibliotheek, Gebruik de server van Gmail, toch? SMTP spraken we kort over wanneer we waren aan de Yale over het feit dat eenvoudige mail transfer protocol. Het is het protocol dat servers gebruikt om e-mail, en that's-- Gmail heeft een van hen. Een poort, dit is de TCP-poort nummer. Het is prima als je nog niet eerder gezien 587. Weet alleen dat uit de documentatie. Hier is mijn gebruikersnaam. Ik ga naar de CF50 bot gebruiken. En in een moment, ik ben gewoon gaan Typ in het bot van de werkelijke wachtwoord. En dan naar beneden hier, let op wat blijft. Ik zet mijn adres uit worden omvergeworpen uur bij CS50.net. Ik denk dat ik er geen spijt van het verzenden van een tekstbericht naar 800 mensen die zegt, juffrouw u, liefde CS50 bot, misschien voor degenen die niet kon maken het vandaag nog. En vervolgens in de lijn 76, wat moet ik doen? Dit soort blikken zoals C. Dus voor i gelijk is aan 0, n equals-- nu telt is nieuw. Het blijkt dat als je wilt krijgen het aantal dingen in een array, je hoeft het niet te meer te herinneren. U kunt gewoon vragen een functie genaamd tellen, en het zal u vertellen hoeveel adressen in die array. En dan ga ik naar toe het adres van de e-mail. En ik weet dat dit uit met behulp van de documentatie. Er is een add-adres functie. En nu is er merken is een stuk van de syntaxis. We hebben dit eerder gezien in C. Soortgelijke in de geest. U kunt denken aan het dollarteken mail als een variabele, die het. Maar het is een structuur binnenin die niet alleen eigenschappen, variabelen als je wil. Maar het blijkt dat in PHP, die is een object georiënteerd programmeren taal, zoals Java als je nam APCS. Dollarteken mail, als je wilt to-- het heeft ook functies erin, of methoden. Dus dit wil zeggen dat speciale PHP mailer bibliotheek, als ik een variabele daarvan hebt, als ik wil een functie noemen komt met die bibliotheek, voor doeleinden van vandaag, gewoon weet dat je de pijl notatie gebruiken. Er is geen punt notatie. Het is gewoon de pijl. Maar dat is niet een pointer. Het is gewoon geleend van C's syntax. Dus bel toe adres binnenkant van object of variabele deze bibliotheek. Prima. Dit is de magische lijn. Dat is hoe ik een e-mail te sturen. Dat is het equivalent van de openstelling Gmail, het typen het uit, en slaan sturen. Maar het gaat om plaats stuur e-mail naar dit adres, met dit lichaam, van de CS50 bot. En nu de belangrijkste lijn. Deze lijn werd afwezig in zoals 2011 als ik denk dat ik voor het laatst geprobeerd dit. Die lijn is er, uiteraard, wist de adressen. Dus logisch, als ik weet het adres niet duidelijk Na elke iteratie de eerste e-mail of SMS-bericht gaat naar Alice, de tweede gaat naar Alice en Bob, de derde gaat naar Alice en Bob en Charlie, vandaar de zeer dure vergissing Ik dat jaar maakte. Dus laten we zien. Zijn er vragen voordat we sturen jullie allemaal een tekst bericht met 10 procent kans? Nog vragen? Prima. Laten me hier en verandering gaan het wachtwoord op wat zou moeten werken, zal waarschijnlijk krijgen de zwarte lijst van Gmail. Zodat ze misschien niet allemaal gaan out, omdat ze waarschijnlijk hou niet van het sturen van 800 e-mails in een lus in een keer. Want dat is niet in het bijzonder het menselijk gedrag. Oh, ik ga nog iets te veranderen. Op de top, ik ga sent-- veranderen het bestand naar studenten dot CSV. En ik zal niet deze te openen, maar dit is een identieke CSV-bestand niet 100 medewerkers, maar 800 studenten, net van Harvard, omdat Yale heeft oktober uitsparing deze week. En het lijkt alsof een soort van een eikel ding te doen om ze allemaal te tekst waarom ze zijn niet in de klas op vakantie. Dat is goed. Gewoon Harvard studenten Vandaag binnenkant van dat bestand. En laten we nu teruggaan mijn terminal venster. Ik ben een beetje nerveus. OK dus nu ga ik naar het te gaan directory, en PHP tekst dot PHP. Wat dacht je van een moedige vrijwilliger? Dus ik dit niet wilt op mij. Oké, kom op. Hoe heet je? MAYA: Maya. SPEAKER 1: Maya. Kom op, Maya. Prima. Laten we eens zien of dit werkt. Ik zet mijn eigen e-mailadres in file-- mijn eigen telefoonnummer in de file, zodat hopelijk zal ik een zo goed krijgen. Leuk je te ontmoeten. MAYA: Eveneens. SPEAKER 1: Dus alles wat je hoeft te doen is druk op enter tot 800 tekstberichten te sturen, als ik niet verpesten. Nice. Kan een tijdje duren, statistisch gezien, tot we bij een e-mail address-- een SMS-bericht dat is in de kamer nu. Laten we blijven hangen en te zien. PUBLIEK: [Whistling] SPEAKER 1: Oh, ja. PUBLIEK: Oh, gotcha. SPEAKER 1: Voor lussen zijn-- dit is niet traag omdat van PHP. Dit is traag omdat Gmail is ons smoren en niet laten ons meer te sturen dan zoals een e-mail per seconde. Iets? Dit was een moeilijk ding voor mij om te testen op huis met slechts mij en mijn ene telefoon, dus. Is dat hopelijk van het bot? Ja? Nee? Zeg ja. Nee? Het is van een vriend? Onhandig. OK. Vrij zeker dat het wel werkt. Oh Oh. Ze black-- oh, wacht even. Oh, weet je wat? Een ogenblik alstublieft. Alleen Maya en ik-- Mia, was het? MAYA: Maya. SPEAKER 1: Maya, gaan weet wat ik deed hier verkeerd. Oh, wacht even. Ik denk dat ik net stuurde 100 tekstberichten naar 555-1212. Stand-by. Ik kan elk jaar niet winnen. OK. Maya? Fix dat in post-productie. Dammit! Naar aanleiding van het adres. OK, stand-by. Sorry. Het is pijnlijk elk jaar. OK, het ene moment. Dit is goed. Ik ga in plaats om dit te doen. Print adres. OK, stand-by. Print adressen, steun ik. Ja, dat vind ik leuk. Dollar sign-- OK Ik zal uitleggen wat ik ben doen op een moment, nadat ik dit heb draaien. Elk jaar. Oké, hier gaan we. Ik heb gewoon-- en ik wil niet tot ieders telefoonnummer te tonen, maar Maya kan bevestigen met een knipoog van het hoofd, dat ze ziet iedereen telefoonnummer in de klasse dat ik ga kopiëren in een programma genaamd Gmail. En als in Gmail, wat willen we zeggen? Ik mis je. Liefde-- dat is niet van mij. Ik heb nog niet eens geraakt nog sturen. Dus laten we verder gaan en doen dit, als ik kan inzoomen. OK. Dus ik ben met behulp van een programma genaamd Gmail nu. Indien Maya, je zou willen klik op de knop Verzenden, we zullen simuleren wat dat code moeten doen. Iets? [PIEPTONEN] Publiek: Yep. SPEAKER 1: Ja? Redding? Publiek: Yep. SPEAKER 1: Miss you. En ik ga voor het verzenden van de rest. Ik stuurde de helft, omdat ik niet denk dat Gmail zou laten die gaan door. Dus vergeet niet, vandaag is de dag dat u geleerd dat ik Gmail kan gebruiken. Dat was afschuwelijk. Een groot applaus voor Maya. Dankjewel. Oké, dus. wat [PIEPTONEN] We kregen een paar piepjes, ja? Prima. Nu ga ik echt 700 ongelukkig e-mails terug van klasgenoten. Dus tenminste we zullen zien als dat was het waard. Dus wat er mis ging? Ik zal uitzoeken wat ging verkeerde na het feit, maar kijk maar eens hoe makkelijk het was om dat te doen in PHP. Dus wat kunnen we eigenlijk nu doen we hebben dit expressiviteit van PHP. Dat was-- dat was een verschrikkelijk. Prima. Dus dat was wat zou zijn gegaan. Dit werd mij het testen van deze ochtend op mijn telefoon, de werkelijke screenshot van mijn telefoon. Maar nu laten we eens kijken waarom we zijn eigenlijk introduceren allemaal van dit spul in de eerste plaats. Dus het doel is niet schrijf deze programma's die zijn geschreven op de opdrachtregel, toch? Dus schreef ik een eenvoudige hello programma, schreef ik een klein programma dat voorwaardelijke doet, en gebruikte een leeslijn enzovoort. En in theorie, ik schreef een programma dat uitgezonden 800 SMS-berichten, geven of te nemen 800. En dat programma was alles nog draaien op de opdrachtregel. En dat is natuurlijk niet het web, toch? Het doel is nu om te beginnen met wat ik beweren is een gemakkelijker te gebruiken taal, daresay een meer krachtige taal in termen van de functies die daarbij horen, te beginnen het schrijven van code die webpagina's genereert. Dus de laatste keer en de laatste week, hebben we gesproken over HTTP en HTML. En wat is leuk over HTML is dat het is gewoon pure tekst. En de tekst is zeker iets dat je kunt afdrukken door letterlijk het aanroepen van de afdruk f functie of de printfunctie. En inderdaad, dat is wat PHP is nu gaat om ons te doen. Dus onder de voorbeelden die we hebben de huidige broncode naast enkele van de code dat ik daar een moment geleden, We hebben programma's zoals dit bijvoorbeeld. Froshims of Freshman Intramurale Sport, was eigenlijk één van de eerste extracurriculars Ik raakte betrokken bij jaar geleden. En mijn kamergenoot en ik, met sommige andere kinderen op de campus, gebruikt om de froshims programma uit te voeren. Ik krijg nu mijn tekstberichten. Nu dus we, terug in de dag, dus dit was 1996 of zo, er was een internet, maar er was geen process-- er was geen website voor froshims. En dus als je wilde aanmelden voor voetbal of volleybal of wat dan ook, je zou vullen dit ding riep een stuk papier, en je zou lopen over Harvard werf, en je zou glijden in de brievenbus van de surveillant, die was in Wigglesworth, een van de slaapzalen. En dit was je geregistreerd. En hij of zij zou dan componeren een e-mail aan u handmatig, net als ik net deed hier met Maya, en dan zou je worden bevestigd als zijnde geregistreerd. Dus dit was zoals lage opknoping fruit, om zo te zeggen. Het was een beetje dom dat waren we met behulp van papier voor dit. Ik wilde dat we in staat zijn om gewoon te gaan op een website, of hebben de eerstejaars gaan op een website, registreren voor sport, en net te automatiseren veel van dit spul door de invoering van hun namen en e-mails enzovoort in een database. En inderdaad, de eerste versie van de website, met behulp van super lelijk HTML, zou kunnen gekeken hebben iets als dit. Het was eigenlijk, ironisch genoeg, meer gênant kijken dan dit terug dan. Maar ik gebruikte een programmeertaal. Niet PHP, maar eerder genoemd Perl, dat een oudere taal, maar zeer vergelijkbaar in de geest. En ik gewoon helemaal geleerd om mezelf. En het kostte me een tijdje om het te achterhalen, vragen veel vragen van vrienden. Maar de ideeën zijn er waren precies hetzelfde. Want wat PHP was echt ontworpen voor het is niet de opdrachtregel stuff we net gespeeld met, maar voor web programmeren. Het is echt vastgebonden in zijn functie ingesteld op het web, als volgt. Dit is froshims. En als ik wilde registreren in deze vorm, dit is heel lelijk, zeker, maar laat me doorgaan en een minder comfortabele student, en wat sport voor Matthews, klik Register. Wat ik wil kunnen doen is submit informatie van een formulier, niet met de server van Google, zoals we hebben de vorige keer, volledig bedriegen door hun backend, I wil mijn eigen backend code uit te voeren. Wat betekent schrijven PHP code die leeft op een URL die vorm gegevens kunnen worden ingediend. En dan uw code, geschreven in PHP op een server, kan dan reageren op die input van de gebruiker. Net als zijn of haar naam, of comfort niveau, of studentenhuis, en dan is er iets mee doen. In dit geval, ik heb net dom uitgeprint tekst, wat niet zo mooi. Maar je kon zeker stel je voor, als je weet HTML, en je zult snel weten hoe te genereren HTML met print f, en afdrukken, en vergelijkbare functies, kunt u zeker genereren een mooier webpagina die zegt: hey David, bent u nu geregistreerd. Je bent een minder comfortabel student van Matthews, toch? U kunt gewoon gebruik maken van een hele hoop% ses, of de accolades en dollarteken notatie gebruikte ik een moment geleden, om tekst die is gebruiksvriendelijker te genereren dan dit. Dus laten we een kijkje nemen op dit bestand. Froshim zero dot PHP ziet er zo uit. Toen ik herladen CS50 IDE, froshim nul ziet er zo uit. Dit is froshim nul dot PHP. En wat valt je dit bestand? PUBLIEK: [onverstaanbaar] SPEAKER 1: Sorry, een beetje harder? PUBLIEK: [onverstaanbaar] Het is allemaal in HTML. En in feite is, omdat wat interessant over PHP is dat het is gemaakt worden, betere of nog erger, vermengd met HTML-code. En inderdaad, ook al bestand, froshim nul dot PHP, heeft een PHP reactie op de top van het, het is allemaal gewoon HTML. Maar daarentegen, als ik open te stellen, laten we zeg, registreren nul punt PHP, die maar heeft een grote reactie op de top. Dit ziet er ook bijna volledig zoals HTML, behalve voor wat? Lijn, wat, 21 ziet er een beetje raar. Maar let ik het invoeren van PHP mode met open beugel vraagteken PHP. Dan heb ik nog wat spullen. En vervolgens aan het einde van die lijn bijna Ik heb, vraagteken PHP. En dit is wat ik bedoel met vermengde. U kunt HTML schrijven dat je gewoon wil de server uit te spuwen. Maar als je iets wilt doen dynamische halverwege de pagina, zoals steek mijn naam of dorm of comfort niveau, Ik kan een functie gebruiken zoals print r, dat is afdrukken recursieve, wat betekent gewoon print deze variabele, formatteren zoals u dat wilt. Het is echt niet voor menselijke doeleinden, het is gewoon voor het debuggen of diagnostische doeleinden. Dus dat is hoe ik dat deed. Als ik in plaats daarvan gaan froshims twee dot PHP, opmerken dat de werking van dit formulier is niet geregistreerd nul dot PHP als de old-- de vorige eigenlijk was. Maar het is ingeschreven twee dot PHP. Dus laten we eens kijken hoe dit gedraagt ​​zich een beetje anders. Als ik in versie twee. Als hier, als ik me inschrijven als David, minder comfortabel, van dorm van Mathews, registreren. Dus deze keer zei, je zijn geregistreerd, niet echt. Laten we eens kijken wat ik hier deed. Als ik kijk naar register twee dot PHP, heeft dit nog meer PHP-code. Het is een beetje schoner, maar het nog wraps een beetje lang op deze lijn. Let hier. Print ik mijn HTML-tag, mijn hoofd tag, mijn titel tag, het hoofd, het lichaam. En dan begin ik te zeggen dingen zoals voeren PHP-modus. En zodat tag open beugel PHP-- vraagteken PHP zegt: hey, server, execute-- interpreteren de volgende dingen als PHP totdat u het eind tag. En hoewel je misschien niet weet welke andere PHP dan je tot nu toe hebt gezien, u kunt soort lezen het vrij intuïtief. Als de naam is leeg, of comfort leeg, of dorm is leeg, wat moet ik doen? Wat zeg ik aan de gebruiker? U moet uw naam, comfort, en slaapzalen, enzovoort. Anders, zeg ik u bent geregistreerd, nou niet echt. En ik zeg niet echt want er is geen database. Ik heb niets met de gegevens doet. Ik ben gewoon het weg te gooien voor demonstratiedoeleinden. Nu ben soort beknibbeld op lijn 22. Er is meer syntax daar, maar dollarteken onderstrepen post is soort interessant. En dit is wat er leuk is PHP. In PHP, je hebt wat geroepen een paar super globale variabelen. Ze zijn soort van nog meer belangrijker dan de globale variabelen. En deze, alle geactiveerde als zodanig, kom met PHP. Dus als je een server die een webserver geïnstalleerd, zoals Apache, en je de taal te installeren ondersteuning voor PHP, ineens je kan beginnen met deze super globale variabelen in uw code. En wat is er leuk aan PHP is dat als je gewoon schrijft een bestand dat eindigt in dot PHP, zet het op een webserver, en dan moet je een formulier om het via die actie tag en een form tag, die actie attribuut in de form tag, PHP en het web helemaal uit hoe om te grijpen al die belangrijke waarde paren uit van de URL zoals vraag mark q gelijk aan katten, het zal uitzoeken hoe q en katten. Als u een foto of een gebruikersnaam in te dienen, of een wachtwoord als Facebook, PHP zal uitzoeken voor u wanneer alle data is. En het zal gewoon hand u een associatieve array riep dollarteken underscore post, of dollarteken underscore te krijgen, afhankelijk van of u bent met get of post inzendingen. En het zal u gewoon hand een super globale variabele, zodat als je wilt op de naam te krijgen dat de gebruiker via dat web ingediend formulier, je letterlijk alleen de naam te zeggen van de super globale variabele, citaat, unquote, naam. En citaat, unquote comfort, en citaat, unquote slaapzaal. En we zullen in staat zijn om te doen Dit en nog veel meer met PHP. En hoewel dit was een wervelwind blik op het, we duiken in veel meer volgende week. We zullen een database in te voeren zodat je eigenlijk bent gaat starten met de implementatie uw eigen e-handel based-- zoals website in slechts een week tijd. Dus zien we je de volgende keer, en hoop dat je de tekstberichten. Doei. [Muziek] [DEUR OPENING] Luidspreker 2: Hey. SPEAKER 3: What's up? Luidspreker 2: Wat doe je? SPEAKER 3: Werken aan een probleem set. Luidspreker 2: Nice. High five. [HIGH FIVE] Wat zijn-- uh, wat doe jij hier? SPEAKER 3: Gewoon opknoping uit. Net terug van de sportschool. Ik kon het niet helpen, maar opvalt als we high-fived, dat u vrij ruw handen. Ga je naar de sportschool? Luidspreker 2: No. Nee. SPEAKER 3: Dude, je ziet er behoorlijk groot. Dat is slecht, omdat iedereen weet 8-ball is de grote man op de campus. High five. Luidspreker 2: Uh, nee. Nee, ik denk dat ik ben goed. Ik denk dat ik ben goed.