[Muziek] 

DAVID J. MALAN: Oké. Dit is CS50. Dit is het begin van week acht. En u herinnert zich misschien dat we gebleven laatste keer op zoek naar een nieuwe taal helemaal. In feite, een die vrij lichtgewicht en het is niet eens een programmeertaal. Het is een opmaaktaal die ons laat daadwerkelijk structureren en maken van webpagina's. En als je iets anders in combinatie met dit-- of binnenkort zal, indien je nog niet hebt. We gaan Cascading gebruiken Style Sheets of CSS, welke is een ander soort taal met eigenschappen en waarden dat gaat ons te laten doen dingen willen veranderen van de kleur en verander de positie en dit soort tweaks. Maar vandaag en verder, beginnen we te focus op krachtiger talen, werkelijke programmeertalen zoals PHP. 

Dus PHP is al enige tijd. En zoals u zult zien, het werd in eerste instantie ontworpen vroeg voor daadwerkelijke gebruiken in web development en eigenlijk het genereren van webpagina's. Dus wat voor soort functies doet een taal nodig hebben om web maken pagina's dynamisch met het? 

Met andere woorden, als u wilt genereren inhoud dynamically-- zoals Facebook's Newsfeed, die voortdurend verandert, of chatberichten die opduiken uit de tijd om tijd-- zoals wat is het belangrijk stuk van de functionaliteit je nodig hebt in een programmeertaal dat zou je dynamisch laten afdrukken nieuwe informatie aan het scherm? 

STUDENT: Code. DAVID J. MALAN: Code. OK. We nemen dat. Een beetje nauwkeuriger. Ik bedoel, we konden doen dit met C, eerlijk gezegd. Het zou een pijn in de nek. Maar-- is dit engagement? 

STUDENT: Ja. Variabelen, misschien? DAVID J. MALAN: Variabelen. OK, zeker. Variabelen kunnen zeker helpen ons uit. En zelfs iets eenvoudiger. We gebruikten het in de eerste programma van de eerste dag toen we eigenlijk zei "hallo wereld". 

STUDENT: Print. 

DAVID J. MALAN: Print, toch? Print of printf in de wereld van C. Dus al die tijd, we bij hebben gehad onze beschikking over een language-- C, in particular-- en zelfs Scratch dat betreft dat kunnen strings van tekst te genereren. 

Nou, als HTML, zoals we zagen vorige week, is gewoon een hele hoop van de snaren van de tekst zij het met open beugels en gesloten beugels en een soort van rijm en reden achter de rug, nou dan kunnen we echt beginnen met het genereren van webpagina's ofwel handmatig door te typen ze in gedit of in Microsoft Word, voor dat matter-- we hoeven alleen maar een tekstverwerker. 

Of we kunnen de code te schrijven, uw suggestie eerder, dat zou ons laten dynamisch genereren van HTML, en dat is wat we gaan te gaan doen met PHP en uiteindelijk zelfs een taal genaamd JavaScript, is gebruik maken van een taal naar de andere te genereren. En inderdaad, dit is wat Facebook en vele, vele andere sites doen om daadwerkelijk dynamisch weer nieuwe informatie voor je. 

Dus laten we beginnen met dit-- een cryptisch op zoek lijn, maar één dat is eigenlijk vrij krachtig. Tot nu toe, hebben we met behulp van C, dat is een gecompileerde taal. En gewoon een snelle recap-- een gecompileerde taal heeft wat karakteristiek? Je moet uiteraard te compileren het, maar wat betekent dat? Yeah? 

STUDENT: Het moet geassembleerd in machinecode. 

DAVID J. MALAN: OK. Het moet worden geassembleerd in machine code. Zodat u uw broncode te nemen, dat is een soort van het Engels-achtige. Je zet dat om iets lager niveau, die uiteindelijk genoemd object code-- 0's en 1's. En het is de 0 en 1 dat een CPU, zoals die door Intel, echt begrijpen. 

Nu, PHP en Python en Ruby en JavaScript en trossen van andere talen worden niet gecompileerd talen maar geïnterpreteerde talen, wat betekent dat je gewoon typt ze en dan je hoeft ze niet om te zetten in 0's en 1's. Je plaats leveren alleen dan als input voor het programma van iemand anders, riep een tolk. En van die persoon programma is ontworpen om te begrijpen wat elk en elk symbool in Python of PHP of Ruby of een aantal andere talen betekent. 

En dus alles wat we nodig hebben is iets als dit. Dus in feite, ik ga naar ga naar het toestel hier, maar in elk oude venster, en we zijn ga je gang en geopend gaan een bestand genaamd, zeggen hallo. Nu eerder, ik had kunnen redden dit zelfs met een bestandsextensie, maar ik ga doen iets wat hier nog eenvoudiger. Ik ga om te gaan en te beginnen dit bestand met deze cryptische syntax. Dus "gebruiker, bin, env, voor milieu, php. " 

Dit is gewoon een regel code die ga mijn besturingssysteem te vertellen, gaan zoeken in uw lokale milieu wat dat ook is, waar PHP is-- de interpreter-- en ga je gang en gebruik dat tolk om de volgende code te interpreteren. Nu, dit is een soort van een lelijke eigenschap van PHP. Maar in deze taal eventuele keer je schrijft PHP code, je nodig hebt om een ​​van deze lelijke hebben PHP-tags afbakenen van het begin van uw code-- <? php. 

Maar hieronder hier, ik kan nu iets doen heel simpel, zoals printf hallo komma wereld backslash n dicht citaat, haakje sluiten. En dan gewoon voor een goede maatregel, ik ga om vooruit en dicht gaan mijn php tag over hier zodat alles looks mooi mooi afgedrukt. 

En zodra ik klik op Opslaan, gedit is eigenlijk slim genoeg om te kijken naar die eerste lijn en realiseren, oh, je bent het schrijven van PHP code. Laat me syntax highlight met de kleuren hier zodat deze rechtop staat een beetje meer. Maar nu ga ik om te gaan naar mijn terminal venster. Ik zal in te zoomen. 

Dit programma heette "hallo" dus ik ga naar dot slash doen hallo, maar ontkende toestemming. En bash. We eigenlijk gehoord van dat ding een paar weken geleden in het kader van Shellshock, een van deze insecten. 

Maar ontkende toestemming die we hebben gezien vóór, misschien in een andere context. Heeft iemand herinneren hoe u misschien iets te repareren waarbij toestemming wordt geweigerd als dit? Wat is de opdracht, althans? 

STUDENT: Chmod. DAVID J. MALAN: Ja, chmod, voor het veranderen van de modus van een bestand. En je krijgt des te meer gebruikt om deze volgende week met een volgend probleem set. Maar voor nu, ik ga veranderen de modus niet om leesbaar te zijn, maar om iedereen executeability geven privileges, de mogelijkheid om dit bestand uit te voeren. En ik ga toewijzen dat het bestand hallo. 

Als ik nu dot slash hallo invoeren, moet u zien, in feite, mijn programma, hallo wereld. En wat stap deed ik duidelijk helemaal overslaan? Compileren. Dus ik liep gewoon dit programma heel eenvoudig. 

En het blijkt dat je kunt dit doen met veel syntax doet denken aan C. Laat me gaan in op de huidige code, die ik in mijn vhost directory hier, voor de echte redenen we komen zeker terug te komen. En ik ga in te gaan, laten we zeggen, de voorwaarden 1. 

En je zult zien hier, eerste en vooral, een hele hoop reacties. Maar dit is eigenlijk een re-creatie in PHP van een programma dat we in week een zogenaamde voorwaarden 1.c wanneer het doel leven van dit programma is blijkbaar te vragen de gebruiker een integer en dan doen sommige pluizige analyse op waarbij je zegt als het positief of negatief of nul is. En ik breng dit alleen maar omdat, behalve misschien een klein detail, het onderscheiden zo ver van C. 

Wat is het een karakteristieke hier dat misschien springt uit op je af als een beetje anders? Misschien twee dingen. Yeah? 

STUDENT: Dollar teken n? 

DAVID J. MALAN: Yeah. Dus dollarteken n is aanwezig. En dollartekens, als we zullen zien, gaan om een ​​fix aan het begin te zijn van een variabele in PHP. Het is zowel goed als bad-- goed in dat is het soort van duidelijk wat er een variabele slecht dat het nog een ander ding om te typen. En er is een andere ding hebben we niet helemaal gezien, althans door deze spelling. ja? 

STUDENT: Readline. 

DAVID J. MALAN: Readline. Readline zagen we niet per se in C, hoewel er iets bestaat vergelijkbaar, maar we hebben gebruikt getString, en dit is zijn tegenhanger. Dus als ik in dit directory, dat gebeurt te zijn, zoals ik zal uitleggen in een beetje in mijn vhost directory en mijn bron Een directory, en ik ga je gang en doe dot slash conditions-- whoops-- dot slash voorwaarden 1, zie je, opnieuw, dezelfde Issue-- toestemming geweigerd. 

Dus laat me in te zoomen en doe chmod een plus x op de voorwaarden, dot slash voorwaarden. Ik wil graag een geheel getal, dan kunt u, 50. En we konden deze spelen spel de hele dag lang. Het gaat om precies te gedragen zoals zij heeft gedaan in week één. 

OK dus niet veel anders, behalve niet alleen dat kleine beetje van syntax, maar boven, opnieuw I had deze lijn die stond me toe om iets te creëren dat ziet eruit als een C-programma genaamd hallo, noemde voorwaarden 1. Maar het is niet 0 is en enen Ik ben direct uitvoeren. Het is deze plaats loopt tolk wiens naam gebeurt identiek aan de taal te zijn. Het programma heet PHP, en mijn code lijn hieronder een wordt doorgegeven in. 

We kunnen nog een vrij eenvoudig te doen bijvoorbeeld denken aan iets we deden weken geleden. Nogmaals, dit is een soort willekeurige stuk code dat blijkbaar wat als je het uit te voeren? Wat is dit het ter perse gaan, vermoedelijk? 

Dus in eerste instantie op lijn 16, het is gaan zeggen x is nu 2, waarschijnlijk. % D is gelijk aan $ i voor printf. Dus dan is het Cubing, dot, dot, dot, in lijn 17. En dan lijn 18 verschijnt een functie Cubed noemen. En waar is Cubed gedefinieerd? 

Nou, het lijkt erop dat in de lijn 25, dus dat is niet zo heel verschillend. Ik heb boven nog wat opmerkingen , maar voor het grootste deel, het is een vrij eenvoudig porting of conversie van het C programma de PHP versie. Maar er zijn nu een paar verschillen die misschien moeten springen. Wat is er anders aan de manier waarop u zou dit hetzelfde programma in C schrijven? 

STUDENT: [onverstaanbaar]. 

DAVID J. MALAN: Er is geen prototype up top. Dus PHP-- en eerlijk gezegd, een veel moderne languages-- zijn een stuk slimmer en behulpzaam dan C-compilers in dat u kan de functie hier opgemaakt, U kunt een functie neer zetten hier, en de tolk gaat om u te doen ten gunste van het lezen het hele bestand voordat hij een besluit dat een functie niet bestaat. Zo leuk verbeteringen jaar later. Maar er is ook iets anders anders of afwezig hier. Yeah? 

STUDENT: [onverstaanbaar]. DAVID J. MALAN: We hoeven niet te verklaren typen variabelen, dus we zullen het duurde niet lang, dat zien Er zijn verschillende types in PHP, maar je hoeft niet om ze op te geven, die ook is zowel goed als slecht. En er is nog iets ontbreekt. 

STUDENT: Er is geen bibliotheken. 

DAVID J. MALAN: Er is geen bibliotheken. OK, dus dat is mooi. We krijgen veel meer uit de doos. Dus er is eigenlijk nog veel meer dingen dan ik dacht waren anders. Wat dacht je weg in terug? Wat is dat? Zeg het eens? 

STUDENT: Pointer. 

DAVID J. MALAN: geen pointers. OK, althans in dit voorbeeld, geen. Dat is eerlijk. Er zijn dus geen aanwijzingen in PHP eigenlijk in het algemeen. Er zijn iets genaamd referenties, maar we zullen niet te veel tijd door te brengen. En wat nog meer? 

STUDENT: Main. DAVID J. MALAN: Main. Dus dit was de biggie Ik dacht aan. Merk op dat er geen belangrijkste toegangspoort. Je begint gewoon het schrijven van uw code. En dit is eigenlijk zal voordelig zijn wanneer we overgang kort om daadwerkelijk gebruik deze zelfde taal voor web-based programmering, waarvoor wij niet wilt maar een entry point hebben. We zouden willen een heleboel hebben URL's, een bos van verschillende bestanden alle te nemen in input van de gebruiker en het produceren van output. 

Maar hier is het zeer ontmoedigend Bijvoorbeeld dat ik beloofd heb de vorige keer, namelijk in deze map hier, spelfouten. Dus in dit bestand speller, die we zal niet te veel tijd op, er is wezen een porting-- P-O-R-T. Het is gewoon het woord gegeven wanneer, laten we zeggen, het converteren van de ene taal ander handmatig gewoonlijk. 

Dit is een porten van PC versie van speller uit PSET 5. En ik voornamelijk geprobeerd om te zetten het regel voor regel zo goed als ik kan. Dus als je van dit soort dingen, het eigenlijk waard is op een bepaald punt ze allebei aan kant door te trekken kant en zien wat is het zelfde en wat is er anders. Maar ze zijn pretty darn vergelijkbaar. Als je nog wat speller ook leek, ook al heb je dat niet deden hebben om dit bestand te wijzigen, het is vrij gelijkaardig structureel met slechts een paar van veranderingen hier en daar. 

Dus dit is alleen maar om te zeggen dat het is vrij eenvoudig te speller zetten van C naar PHP. Maar in woordenboek, er is iets wat zelfs nog dringender. Laat me ga je gang en maak mijn eigen dictionary.php bestand. Dus iets anders in dat we noemen het .php in plaats van .c. Want dit is een PHP-bestand, ik doen-- iets annoyingly-- hebben om het bestand mee te beginnen een php tag als dat. En ik ga om verder te gaan en definieer een paar functies. Functie genaamd controle, wat gaan nemen in een woord als voorheen. Maar dit argument gaan om een ​​dollar hebben tekenen omdat we, nogmaals, met behulp van PHP. Een andere functie van dictionary.c was load en het nam in de naam van een woordenboek, dus ik zal die functie klaar om te gaan krijgen. 

Een ander in dictionary.c was wat? Maat was een van de mooiste die, op Tenminste als je een aantal variabele rond gehouden. dus de grootte heeft om er maar een variabel rendement. En dan was er nog uitladen. 

Zo waren er deze vier functies in probleem set 5 dat u voor de uitvoering met sommige data structuur of structuren. Dus ik beloofde dat in PHP, kunnen we verklaren een hash tabel, bijvoorbeeld, dat alles makkelijker. In feite, als ik wil dat een hash table, Ik ga gewoon om te gaan als dat en daar is mijn hash table. En dat is de nota, ontmoedigend, dat we gebleven waren op de vorige keer. En weet je wat, als ik wilde een variabele voor grootte, goed, dit is nog niet alles dat verschilt van C, maar ik ga om verder te gaan en dat te doen. En merk geen datatype. En ik kom later terug te gaan en eigenlijk hier nog wat opmerkingen. Maar hoe zit het met de belasting? 

Als dollarteken woordenboek is de naam van mijn dossier en ik eigenlijk wilt laden woorden in deze tabel nu, Ik kan eigenlijk doen iets vrij eenvoudig. Een-- en dit is minorly annoying-- in PHP, je moet naar binnen te specificeren van een functie als u wilt u toegang tot bepaalde globale variabele die buiten is gedefinieerd. 

Maar dat is niet bijzonder nu interessant. Wat interessanter is dit voor elk construeren die ik noemde vorige keer. En het blijkt dat PHP heeft een functie genaamd bestand waarvan het doel in het leven is om een ​​bestand te openen en te lezen in al zijn lijnen in een array en mee teruggeven. 

Dat wil zeggen dat ik kan woordenboek doen dat nu effectief als ik bel file, dit gaat om me terug te geven een reeks van woorden uit het bestand. Het is niet allemaal zo goed. Het is nog steeds gaat om een ​​lijn te zijn woorden, iets lineair. Maar ik kan verder gaan en herhalen meer dan elk van deze woorden met behulp van dat syntax zagen we kort de vorige keer. En je zult het zien meer in de komende PSET. 

Maar nu heb ik een lus iteratie meer dan elk woord in het woordenboek. En op elke iteratie, herinner ik ben bellen naar het huidige woord "woord." En alles wat het gaat nemen om legde een woord in het woordenboek is gaat woord gok "waar is." Dat is mijn insert functie. Dat is mijn load-functie voor mijn woordenboek. Nu is het een beetje een cheat, omdat, weet je wat, er is eigenlijk backslash n bij het einde van de woorden dat ik waarschijnlijk zou moeten ontdoen van, maar dat is geen probleem omdat PHP heeft een functie genaamd Chop die letterlijk hakt één personage helemaal aan het eind. Dus geen probleem. We hebben je gang en eigenlijk gegaan verkort, dat om alleen deze. En nu moet ik waarschijnlijk bijhouden van grootte, dus laten we dit-- tenminste doen grootte ++. Ik kan dat doen als voorheen. En dan is dit waarschijnlijk gaat om werken prima, zodat de return true. Gedaan. PSET 5. 

[Lachen] 

DAVID J. MALAN: OK. We gaan dat opnieuw doen met de volgende PSET, ook. Dus hoe zit het met de grootte? Nou, dit hopelijk is ongeveer als je de vorige keer zou verwachten, hoewel ik moet doen dit stomme wereldwijde ding. Het is gewoon een artefact uit ontwerp van de taal. 

Maar check is een beetje meer interessant. Dus als ik aangenomen in dollar eerst aanmelden woord, ik toegang wilt hebben dat globale variabele tafel. En nu als ik wil controleren of een woord is er, Ik kan alleen maar zeggen dat als het waar is dat Het volgende is in de tabel, dan ga je gang en rendement waar; anders, return false. Gedaan. De andere helft van PSET 5. 

Oké, dus nogmaals, ik ben snijden van een paar bochten. In alle eerlijkheid, zou ik waarschijnlijk besteden een paar seconden op deze implementatie. En ik waarschijnlijk niet zou bespotten alle uren die u op de PSET zo veel. Dus strtolower is een functie. Iets dergelijks existentialist in C, althans voor tekens, maar PHP's kreeg een hele reeks versie. 

Dat zal alles te forceren naar kleine letters, die een aantal van jullie zou hebben gedaan om wat canonicalize je zet in je woordenboek. En nu kunt u dit ook doen in C,. Dit heeft niets te maken met PHP. 

Maar elke keer dat je hebt een Booleaanse staat, als iets on-line 10 daar, dat alleen gaan evalueren om waar of vals, en je als anders duidelijk is terug te keren waar of onwaar, ik kon gewoon echt maken dit sexier en net zoiets als dit te doen. Dus dat daar is mijn check functie. Rechts, indien de Boolean retourneert een echte of een valse, laten we gewoon terug het meteen. 

En er is nog een paar andere tweaks Ik kon hier en daar te maken. Load-- lossen, door de manier, dat is gebeurd. Niets te doen. Aangezien alle van de geheugen PHP en vele andere talen is eigenlijk voor u beheerd. Dus terwijl in C, als je pijnlijk hebt geleerd, alles wat je malloc of calloc of realloc, je hebt om jezelf te bevrijden. Alles wat je fopen, je moet fclose, zodat de middelen uiteindelijk worden bevrijd en tools zoals Valgrind niet opmerken en niet klagen, dat is een goede zaak om te draaien op hen. 

Maar zeker, er moet zijn enkele vangst, toch? Anders, we soort verspild een hele hoop weken. Dus er is een aantal redenen Daarom hebben we een soort van nemen dit traject, maar er is een trade-off. Rechts, dit is thematische geweest. 

Dus wat zou een trade-off hier bewegen, van C naar PHP? Voelt als alles winnen tot nu toe anders dan een beetje lelijkheid hier of daar. Yeah. Wat is dat? 

STUDENT: [onverstaanbaar] geheugen. DAVID J. MALAN: Speed. OK. Nou, mijn snelheid was behoorlijk snel. Right? Maar de snelheid van uitvoering van het programma? OK, dus dat is een terechte opmerking. 

Zo zou gebeuren, ik vooraf cued up zowel mijn try-oplossing, de ene Ik had op het grote bord was een try-gebaseerde oplossing, en ik heb dat in deze map hier. Dus ik in een moment, ik kan gaan en lopen deze op de King James Bijbel, raken van Enter. En dit is hopelijk correcte implementatie op het einde, geeft me de tijd in totaal van 0,38 seconden voor dat een enigszins willekeurig voorbeeld. 

En als ik nu in deze tweede terminal venster hier, waar ik voor het eerst opende gedit, laat ik ga in code-- van vandaag, weer die, is in deze directory hier-- en laat me ga je gang en lopen speller. Dus gewoon om duidelijk te zijn, dit is de PHP versie. Ik ben gewoon met de top van het hier. 

Dus als ik speller van tilde CS50 doen PSET 5 teksten, King James, in te voeren. Het is nog steeds sneller dan het schrijven in C, maar de totale tijd is, bericht, 0,93, terwijl mijn C-gebaseerde implementatie 0,38. Dus het is een niet-triviale verschil. 

En dit is slechts één bestand. Als je om de twee lopen programma's ten opzichte van de grote raad en hebben een hele hoop van inputs getest, zou dit zeker optellen. En als we hadden zelfs grotere datasets deze ook zouden des te voegen. Dus ja, het betalen van enige prijs snelheid is inderdaad het geval. Wat anders? Yeah? 

STUDENT: Hoeveelheid RAM gebruik. 

DAVID J. MALAN: Hoeveelheid RAM gebruik. Dus heb ik niet één seconde geven dacht bij het schrijven van dit PHP versie hoeveel geheugen was ik met behulp van. Ik ben het helemaal uitstellen dat aan PHP zelf en wie schreef dat programma. En dat zou kunnen zijn OK, maar als ik eigenlijk echt zorg over knijpen zoveel prestaties uit mijn programma of uit mijn website of uit welk instrument Ik bouw, misschien PHP, inderdaad, is niet de juiste taal. 

En in feite, dat is de reden waarom, voor Bijvoorbeeld, veel web servers-- het eigenlijke programma dat serveren web content-- zijn niet in PHP geschreven of in Python of Ruby. Ze zijn geschreven, zoals zult u nu doen met PSET 6, in C, zodat u kunt knijpen elke bit van prestaties uit het en echt oefenen fijnkorrelig controle over wat er gaande onder de motorkap en neem het niet alleen vanzelfsprekend een hogere level datastructuur. 

Overweeg, immers, wie in PHP geïmplementeerd dat idee van een hash table-- het is eigenlijk meer behoorlijk genoemd een associatieve array-- doet hij of zij enig idee wat voor soort van inputs je gaat worden het in de structuur? Dus natuurlijk niet, toch? Het is een generiek instrument in de toolkit is dat verstrekt aan iedereen die wil om het te gebruiken, en dus zeker het kan uiteindelijk niet worden geoptimaliseerd voor precies wat je wilt doen. 

Dus trade-offs-- ontwikkeltijd zou verschillen, de prestaties kunnen verschillen, complexiteit of geheugengebruik kan verschillen. En dus wat je zult vinden steeds is dat er ga anders zijn gereedschap voor de handel. En in feite voor een super meerderheid mensen afstudeerprojecten in deze klasse, geloof het of niet, is C niet van plan de juiste taal te gebruiken. 

En in feite een van de afhaalrestaurants uiteindelijk voor een klasse als deze is om je aan het denken over, nou ja, wat moet je trekken uit de plank wanneer je wilt om een ​​probleem op te lossen. En inderdaad, zullen we deze brug nog meer als we kijken naar meer talen zelfs verder dan vandaag. 

Dus laten we nu de overgang naar misschien een meer vertrouwde context voor het gebruik van een taal als PHP. Het is nogal gebruikelijk om gebruik te de command line, het schrijven van scripts zoals ik deed, maar het is veel, veel vaker voorkomt. En was bestemd in de vorm van bestanden die meestal eindigen in .php-- maar dat is niet een prerequisite-- die zichzelf genereren web content. 

Dus laat me ga je gang en open een paar voorbeelden die ik van tevoren voorbereid. En dit zijn eigenlijk een soort van echte verhalen in dat één van de eerste dingen Ik ooit heb mezelf na het beëindigen CS50 en misschien, denk ik, CS51 jaar geleden is mijn kamergenoot en ik hielpen om de eerstejaars intramurale draaien sportprogramma, die op het tijdstip, had eerstejaars inschrijven voor diverse sport door het invullen van een stuk papier, zoals het genoemd werd, wandelen over het erf naar Wigglesworth, en neer te zetten in een aantal Proctor's deur neerzetten. En dan zou hij of zij door te gaan en ze vervolgens daadwerkelijk handmatig mail ons dat we werden geregistreerd voor enkele sport. 

Zo duidelijk, een kans voor verbetering. Deze dagen, zou u zich wenden tot net Google Forms, maar terug in de dag, we moesten eigenlijk voor-- dit te bereiken was niet eens zo lang ago-- bereiken voor een uitvergroting taal die niet werd PHP. Op het moment, het was iets genaamd Perl, die sindsdien verdwenen uit de mode. Maar het idee is hetzelfde. 

En ik wezen ging zitten om te proberen naar de haven gaat Perl versies naar PHP, maar in de volledige disclaimer, gaf niet elke gedachte aan de esthetiek gewoon nog niet. Dus hier is een webpagina. Dit is een bestand. Als ik opnieuw in, zijn blijkbaar genaamd froshim0.php gewoon omdat het onze eerste Bijvoorbeeld in deze serie. En merk op dat het wat lijkt een zeer lelijk HTML vorm, maar een vorm is interessant omdat hierdoor mij om input van de gebruiker te verstrekken aan de browser. 

Nu de vorige keer toen we een formulier, om wie hebben we onze queryparameter indienen, de parameter wachtrij zoals het genoemd werd? Dus om Google, toch? Wij zijn helemaal punted op het idee van alles met die ingang doen. 

Maar vandaag beginnen we produceren output. En het gedrag ik ga om te zien hier in eerste instantie is vrij triviaal. David, ik zal afvinken geslacht hier, zeggen Matthews hier. Ik zal niet captain zijn. Ik ga klik op Registreren. En merk op dat de URL heeft veranderd in register-0.php, en dan is er nog dit lelijke tekst hier. Ik gaf geen aandacht aan de opmaak van. 

Maar wat interessant is, is dat de drie waarden waren blijkbaar doorgegeven in. Dit is PHP soort equivalent aan printf-- we zullen zien wat het echt heet in een bit-- die net afgedrukt wat je over in het. Zodat suggereert dat deze formule had ten minste drie gebieden aan, en je zag me ze intypen. Een van hen was mijn naam, een was geslacht, één was slaapzaal. En kapitein wist niet eens krijgen naar de server omdat ik controleer het niet. 

Dus dit is blijkbaar zeggen, wanneer je dingen in te dienen op het web, niet alleen het URL soms change-- soms ook niet. In feite, de bestandsnaam veranderd, maar wat afwezig in de URL is dat zagen we vorige keer met Google. Yeah? 

STUDENT: Geen query string 

DAVID J. MALAN: Er is geen query string. Er is geen vraagteken iets. Er is geen vraagteken q gelijk aan katten, omdat we de vorige keer deed. En er is zeker geen vraagteken naam is gelijk aan David of dorm gelijk Matthews, dus waar is dat allemaal? 

Nou, laat me terug naar gedit gaan hier en het openstellen van de eerste van deze bestanden in mijn vhost, lokale host, openbaar directory hier en ga in froshim0. Dus het blijkt dat bijna alle van deze pagina is gewoon HTML. En dit kan onbekend voor je zijn, maar het zal binnenkort meer dus met PSET 6 en PSET 7 en PSET 8. Maar dit is slechts een HTML-pagina. 

En het interessante spul lijkt hier te zijn. Een vorm tag wiens optreden attribuut heeft een waarde van register 0. Dat is waarom, toen ik in te dienen dit gaat dat bestand. Maar methode is anders today-- bericht. Dus het blijkt dat er is op zijn minst twee manieren op het web gebruikte om informatie te sturen van browser tot server. Get zet het in de URL. Post zet het elders. En wanneer en waarom zou je eigenlijk willen een website te gebruiken na dan in plaats van krijgen, gewoon intuïtief? Elke website. Wat voor soort gegevens gewoon moeten worden doorgegeven door gevolgtrekking nu per post, in tegenstelling te krijgen, als we hebben gezien de twee verschillen? STUDENT: [onverstaanbaar] beveiligen. DAVID J. MALAN: Als je wilt iets om veilig te zijn. Dus je zou een wachtwoord in te voeren in een website, een credit card in een website zou soort van deze suboptimale indien de browser zetten dat waarde binnenkant van de URL. Waarom? Je ziet het, die dat niet doet lijken zo'n big deal te zijn, maar kansen zijn je behoorlijk vaak lopen uit de buurt van uw computer of het gebruik computer labs, en zo iemand anders of zelfs een kamergenoot konden gemakkelijk te voet naar omhoog en ziet die prive-informatie. Wanneer u een e-mail via het web, heb je waarschijnlijk niet wilt dat de gegevens tot en in de URL ook. En dus is er een aantal redenen waarom zouden we willen het hier te zetten. En photos-- rechts, ik kan niet eens behoorlijk voorstellen hoe u een afbeelding zou nemen, als een JPEG, en zet het in een URL. Je zou het kunnen doen. Er zijn manieren coderen, maar het is net niet eenvoudig als dat. 

Registreer dus 0 is eigenlijk zeer underwhelming. Al het zegt letterlijk is dit. Het drukt de binnenkant van sommige HTML-tags het volgende. Ik heb een PHP-tag hier genest binnenkant van een pre-tag. "Pre" betekent gewoon pre-opgemaakte tekst, mono-spaced, zoals een typemachine. 

Printr is een print recursieve functie. En dan is er dit interessante hier. En we zullen hierop terugkomen omdat er andere, maar dollarteken underscore achteraf blijkt te zijn een variabele in PHP waarin alles u van browser naar server wordt voor u opgeslagen. En we zullen zien hoe je op te krijgen dat de informatie voor lang. 

Maar laten we eerst eens teruggaan naar een iets ander voorbeeld. Going in register-- of eerder, froshims1.php, die ziet er een beetje anders. Ik nam een ​​beetje meer inspanning met opmaak, ook al is het nog steeds vrij lelijk. Maar ik ga om verder te gaan en type in "David" nu. Male. We zullen "captain" deze tijd te controleren. We doen Matthews. En te registreren. 

En deze keer zegt, hm, niet echt. Oké, dus wat is registreren 1? Laat me gaan in open register 1 en-- hm. Oké, dus dit is interessant en dit is een opstapje nu in de richting van meer interessante programma's. 

Let op de top van dit bestand heeft een PHP tag evenals een aantal opmerkingen. En dit zijn, voor nu, een afleiding dus laten we gewoon ontdoen van deze opmerkingen net alsof ze in C. En ik beweer met dit stuk code met een reactie dat deze code is valideren van de inzending. 

Nou, het blijkt dat variabelen als dollarteken underscore bericht zijn genaamd super globals. Ze zijn als deze speciale globale variabelen dat zijn slechts omni-moment beschikbaar zijn binnen uw programma. En u kunt vierkante haakjesnotering gebruiken te indexeren in hen niet met cijfers zoals 0, 1, 2, 3, maar de werkelijke woorden. 

Zo kunt u denken aan het dollarteken underscore functie als een soort van een hash table dat je een sleutel in een lookup kon overgaan woord in-tussen de vierkante haken, en het gaat om je terug het geven waarde die de gebruiker daadwerkelijk verstrekt. PHP een functie genaamd lege dat net zegt ja of nee, dit variabele leeg is of niet. We hebben deze dubbele verticale lijn, die net betekent of, zoals in C. 

Dus in feite, deze lijn 4 is gewoon zeggen als de gebruiker een naam niet gaf of heeft een gender niet geven of niet geven een slaapzaal, ga je gang en redirect hem of haar via deze lijn hier. Dus dit is een beetje cryptisch, maar dit betekent gewoon letterlijk ga terug naar deze plaats, dus het punters de gebruiker terug naar de plaats waar hij of zij vandaan kwam. Maar het is een beetje inelegant dat ik hard gecodeerd is. 

Maar wat als dit als voorwaarde niet beoordelen naar waar? Wat als de gebruiker gaf me zijn of haar naam en slaapzaal en geslacht? Dat als voorwaarde is niet gaan evalueren om waar, zodat ik niet de afslag in lijn 7 getroffen. Dus wat gebeurt er? En dit is wat er interessante over PHP. 

Je kan dalen in en uit van PHP-modus, om zo te zeggen. Als u wilt een stukje code uit te voeren, u kunt openen en sluiten van een PHP-tag en zet de code er als ik hier heb gedaan. Zodra je dicht de PHP-tag, de server is gewoon te spugen wat je daar te zetten. En inderdaad, dit was onderdeel van het oorspronkelijke ontwerp van PHP, voor beter slechter was vermenging van de code en markup taal. En we zullen zien dat dit zeer snel vervult, in een puinhoop. En dus zullen we het beter doen dan dit uiteindelijk, maar gewoon merkt het gemak waarmee ik ben daadwerkelijk in staat om wat logica te voeren. 

Maar nog steeds een beetje underwhelming. Laten we openstellen versie twee van Frosh IM, die blijkbaar onderwerpt aan register2.php. Dus dit bestand is eigenlijk gaat bijna hetzelfde uitzien. Ik ga om te gaan naar Frosh IM 2. Maar in Frosh IMs 2, laten we eens kijken wat er gebeurt. 

David, klikt u op de radio button, als het heet; Matthews, geen kapitein. Registreer. Je bent ingeschreven. Niet echt. Oh wacht, we deden gewoon dat voorbeeld, niet wij? Oké, stand by. We zullen de drie doen. Het is duidelijk dat er iets over gebeuren met Gmail. We komen er wel. 

Dus Frosh IMs 3 ziet er als volgt uit. Niet anders. Maar als ik dat doe David, mannelijke, Matthews, en registreren, dit derde en laatste versie aanspraken, heel eenvoudig, u zijn echt geregistreerd. Dat is een soort van immateriële. Maar ik beweer met dit derde en laatste versie Ik heb nu opnieuw precies wat mijn kamergenoot en ik gebouwd voor de Frosh IM programma jaar geleden. En het was eenvoudig. Er was geen database geen Excel-spreadsheet. Maar wat nog belangrijker is, er was geen papier meer want wat we hebben gedaan met dit programma was om daadwerkelijk e-mail de surveillant, die was eerder ontvangen deze dingen via formulieren. 

En blijkbaar hebben we deze geprogrammeerd in zodanig dat wanneer iemand registreert, John Harvard's rekening emails de proctor-- of zich in dit geval, John Harvard-- met de volgende text-- "Deze persoon net geregistreerd." Naam is David, de kapitein is leeg; geslacht, man; en dorm, Matthews. 

Dus wat is er gebeurd? Nou, het bestand in kwestie hier blijkbaar register3.php. En als ik dit te openen, ziet u zowel de kracht van de code als volgt en ook, eerlijk gezegd, de onveiligheid van een systeem als e-mail. Ik heb net effectief deed alsof zijn John Harvard op de volgende manier. 

Ik heb de open php tag up top, die zegt alleen hier komt een aantal PHP-code. Hierna, blijkt dat er zijn bibliotheken in PHP. Je gewoon niet hoeft te onder andere header files zo veel. Je krijgt meer met de gootsteen, om zo te zeggen. 

Maar deze keer in lijn 4, ik doe willen speciale bibliotheek genaamd PHP mailer, dat is iets wat je kan gratis installeren op vele systemen. Hierna ben ik valideren de indiening gewoon door het controleren heeft de gebruiker nodig me een naam, een geslacht, en een slaapzaal. En zo ja, ga je gang en instantiëren een mailer. 

U kunt denken aan dit als een regel code die net toewijst. Het is net als malloc, maar het is een beetje sexier in dat je gewoon zwijgen niet malloc en een aantal generieke nummer. U zegt geef me een van deze, geef me een nieuw exemplaar van deze. 

En als je hebt geprogrammeerd in Java of C ++ of andere talen, je zou hebben gezien dit. Maar de korte daarvan, indien onbekende, deze lijn zet in dollarteken mail een speciale structuur genoemd een object dat is ingebouwd in email functionaliteit. En inderdaad, merken en soortgelijke syntax. 

Dit is niet een pointer, per se. PHP maakt gebruik van precies dezelfde syntax. Deze lijn is te zeggen gebruik SMTP-- Simple Mail Transfer Protocol, dat is gewoon de protocol dat wordt gebruikt om e-mail te sturen. Dit specificeert gebruik Harvard's SMTP-server, die is ergens hier op de campus. 

Dit zegt wat TCP poortnummer om mee te praten, en ik bedacht dat uit door googlen of door het stellen van de helpdesk. En dan, omdat Harvard gebruikt enkele beveiliging van het systeem op de e-mail server-- althans versleutelen het verkeer tussen u en het, hoewel iedereen kan sturen naar het-- Ik ga voor het inschakelen van het TLS-protocol voor het houden van deze veilig. 

Maar dit is waar de dingen een beetje eng. Ik kan het gewoon willekeurig zeggen dat ik jharvard, En ik kan gewoon willekeurig e-mail me hier. En dan kan ik een specificeren onderwerp met deze lijn hier. 

En dit ziet er gewoon lelijk, maar het is gewoon een stel aaneenschakeling. Blijkt dat PHP heeft een super handig symbool, zoals sommige talen, de dot-operator, die net letterlijk aaneengeschakeld snaar voor snaar voor snaar, en je hoeft niet te malloc of figuur de totale lengte van de snaar. Je doet het gewoon. En inderdaad, want ik ben het aaneenschakelen in al deze dingen met deze punten, dat is de reden waarom de e-mail ik zond keek zoals zij heeft gedaan. 

En dan tot slot hier, ik ben het verzenden van mail. Dus als dit onjuist is, Ik ga gewoon om te sterven, die een functie enkel afdrukken om het scherm enkele foutmelding. Maar het is in feite het aanroepen van de send-functie. Anders, als dit alles niet lukt, leidt het automatisch me hier terug. 

En waarom heb ik dat Ik ben echt geregistreerd? Nou, het is gebeurd hier. Dus ik breng dit voor een paar redenen. 

One, dit is precies hoe als je bouwen sommige website voor een afstudeerproject of voor de echte wereld, is dit hoe je e-mail herinneringen te sturen aan uw klanten of uw abonnees. Dit is hoe je een wachtwoord herinneringen te versturen. Dit is hoe je mensen berichten sturen dat zij een nieuwe Facebook bericht in afwachting of iets dergelijks. 

Maar het spreekt ook tot het feit dat deze kan hebben zeer goed uit geweest Davin of iemand anders. En ik zeg dit soort met een glimlach, want ik ben helemaal zeker wat er aan de hand door middel van een aantal van uw gedachten op dit punt. Maar dit is een van die doen zoals ik zeg, niet wat ik doe voor soort dingen, omdat het triviaal om smeden e-mails als deze. Maar zoals je misschien gezien hebt of lees in de Crimson, van laat het is ook vrij triviaal voor mensen om ze terug om wat herkomst te traceren. En vraag me wat tijd, misschien bij CS50 lunch, hoe ik voor het eerst werd zeer nauw kennen bijna tot aan de ed board vele jaren geleden, toen ik ontdekte hoe het internet werkt. Dus in ieder case-- lichtjes na de red board deed. 

Dus in elk geval is er een hele hoop super globals, zoals ze hier genoemd, waarvan we saw-- dollarteken underscore bericht. Er is een tegenhanger genaamd get, dat is waar de spullen van een URL eindigt gaan. En er is een hele hoop anderen, too-- sessie en server en koekje. We zullen terug te komen koekje een andere keer, maar sessie is wel cool omdat rechts now-- tot now-- alles wat we hebben gedaan met een webbrowser is een soort van staatlozen, bij wijze van spreken. Ik kan klikken rond, toegang bestanden op de server, wat gebeurt op het scherm, maar vervolgens de verbinding sluit. De Internet Explorer of de Firefox-icoon stopt spinnen en je gewoon zien wat die webpagina bevat. 

Dus HTTP staatloos is in dat wanneer het een verbinding, krijgt een aantal gegevens, dat is het. Geen verbinding, in tegenstelling tot Skype, in tegenstelling tot Facetime, in tegenstelling tot Gchat, die zorgt voor een constante verbinding met de server. Het web is fundamenteel losgekoppeld, hoewel we zie het duurde niet lang hoe kunnen we dingen simuleren zoals Facebook Chat en Gchat, die de illusion-- behouden of eigenlijk doen handhaven van een constante verbinding met behulp van meer moderne technologie. 

Maar als ik naar, zeg, counter.php, Dit is een eenvoudig voorbeeld, zoals we zullen zien, die op dat moment denkt Ik bezocht de site nul keer. Maar als ik gewoon de pagina geladen is, een of andere manier weet ik was hier al eerder. Als ik herladen nogmaals, het weet dat ik hier eerder was. En opnieuw en opnieuw en opnieuw en opnieuw. 

Dus er is een aantal plus-plussing gaande, maar kennisgeving het kleine ding draait ooit zo kort up top en dan verbreekt, dus het is niet alsof ik heb een constante verbinding met mijn toestel. Nou, als ik in counter.php, merken hoe eenvoudig het is. Ik noem eerst deze speciale functie die we zullen snel beginnen met het nemen voor lief genaamd sessie start. Start een sessie. 

En een sessie voortaan slechts naar een emmer, zoals een winkelcentrum kar waarin je kunt waarden zetten en soort van vertrouwen als programmeur dat ze gaan om hier te zijn wanneer die gebruiker komt Terug-- een tweede later, een uur later, nog een jaar later, zolang hij of zij doet niet duidelijk hun cookies, zoals we uiteindelijk zullen zien. En nu heb ik gewoon een als voorwaarde hier. Dus als de volgende sleutel, genaamd teller, is ingesteld binnen van deze super global-- deze hash tafel, als je geroepen sessie will--, dan ga je gang en pak de waarde van de session-- think dit als shopping cart-- en op te slaan in een tijdelijke variabele genaamd teller. 

Anders, als die waarde teller was niet in de zogenaamde shopping cart, gewoon initialiseren op 0. Tot slot, hier beneden, ga en terug in de winkelwagentjes of de sessie de waarde van de teller +1. Zo blijkt het dat deze speciale container hier-- die, wederom, een van deze geassocieerde arrays, een serie die je kan indexeren in woorden in plaats van numbers-- blijft bestaan, zelfs nadat de gebruiker weggaat. Nogmaals, ik kom terug naar de pagina nu gaan. Het is al een minuut of zo. Maar het herinnert zich dat ik heb 19 keer eerder hier geweest. Dit is mijn 20e bezoek. 

En zo gaat dit de sleutel tot zijn de uitvoering van alle website die onthoudt dat je bent ingelogd, dat je iets letterlijk in uw winkelwagen te kopen of dat u een aantal aantal berichten in behandeling. Wanneer je maar wilt herinneren informatie, we zullen zien dat PHP, zoals verschillende andere talen, biedt ons deze illusie van de staat ook al, zoals u zult zien in PSET 6, als je het maken van HTTP-verzoeken van client naar server, dat is het. Zodra je terug dat reactie, er is niets meer komt terug van de server standaard. Maar we zullen zien hoe te werken rond dat. 

Welnu, laten we proberen om dit opruimen een beetje. We hebben een paar gezien verschillende voorbeelden daar. Oh, en als een terzijde, voor die bekende of onbekende, de reden dat de Frosh IMs voorbeeld ging uit te kijken echt lelijk om goed slightly--, nog ugly-- tot licht minder lelijk hoewel nog steeds lelijk Want als we kijken hier bij de broncode, het blijkt dat ik dit helemaal aan het begin van het bestand. 

Blijkt dat bootstrap is een van de vele vrij beschikbare bibliotheken die er zijn die niet aanwezig voor programmeertalen altijd, maar voor CSS of JavaScript of HTML of een aantal talen. 

En deze mensen hier-- kwam oorspronkelijk uit van Twitter-- gewoon een hele hoop stijlen. Het is een enorme file hier dat iemand schreef, of iemand schreef, over de tijd dat specificeert kleuren en opmaak en wat al niet, zodat ik kan soort lenen hun syntaxis en niet te achterhalen hoe de lay-out van mijn vorm. Dit wordt ook minified zodat een computer kan begrijp het maar niet noodzakelijkerwijs een mens. Dus dat is precies de reden waarom de stilering er veranderd. 

Maar laten we nu beter doen in termen van design, want als we blijven liggen deze weg te lang, onze code gaat krijgen rommelig en Messier. Dus laten we focussen op deze voorbeelden hier. De laatste voor vandaag. 

Dus hier is een super eenvoudige versie 1.0 van de website van CS50's. Het heeft alleen links naar lezingen en syllabus, en het is met behulp van die ongeordende lijst tag-- de UL tag die we gebruikten de vorige keer. En indien in feite, als ik openstellen View Page Source, je zult zien dat dit echt, echt simpel HTML. En in feite, hoewel dit een PHP-bestand onder de motorkap, het is nog steeds gewoon spugen alleen HTML voor nu. 

Dus als ik klik op Lezingen, we zien gebeuren. En als ik klik op de week nul is, zien we dit. En als ik klik op Woensdag zien we dit. En dit blijkbaar was de PDF van de dia's van die dag. Alles wat ik heb gedaan is koppeling met een anchor tag om deze URL hier. 

Dus dit is alleen maar om te zeggen dat dit een mooie eenvoudige versie van de website van CS50's. Laten we eens kijken hoe het is uitgevoerd. Als ik in de mvc0 directory, we zien wel een paar bestanden. Een daarvan is een README, dus als sommige hiervan is te snel, je kunt gewoon rond te snuffelen meer ontspannen later. En let op hier is een index.php bestand. Het blijkt dat als je jezelf, de mens, niet een definitieve naam niet opgeeft in een URL, de webserver meestal afleidt sommige standaardnaam voor u. Een index dot iets is over het algemeen de standaard. 

Dus dat is de reden waarom een ​​moment geleden toen ik deze URL hier, geen bestandsnaam, geen file verlenging, geen periode in de URL. Hij wist precies op magische om te zoeken naar index.php. Het is gewoon een conventie. Alles onder de noemer. 

Dus als ik nu in index.php, zie je dat, indeed-- laten zich te ontdoen van de opmerkingen hier, want er is echt niets interessants te het-- dit is gewoon hard gecodeerd HTML. Dus dat is consistent, hoewel, met mijn claim dat je kunt vermengen HTML en PHP. Er is geen werkelijke programmeerlogica in hier. 

En de andere bestanden zijn vrij veel net zo oninteressant. Het is gewoon hard-coded week één hier tot week één m en week een w, voor maandag en woensdag. En als ik dan openstellen week nul, merkt het is bijna identiek. 

En dat is een soort van een sleutel mee te nemen. Merk op hoe overbodig is. Deze bestanden nauwelijks veranderen, en toch heb ik trok een van deze copy / paste banen waar ik nam een ​​file-- vermoedelijk in week zero-- het gekopieerde toen week één kwam rond, en getweaked een paar waarden. Waarschijnlijk moeten we in staat zijn beter dan dit. 

Dus laten we gaan terug naar mvc en ga in één versie. En zie ik heb een gekregen paar bestanden, want wat was die voor al deze bestanden slechts Momenteel ago-- als ik terug naar versie 0, Laten we terug gaan in de index, en gewoon postulate-- zodra ik te ontdoen van de comments-- welk deel van deze pagina is vermoedelijk in een ieder van mijn bestanden? Noem het maar uit. Welke lijnen worden gedupliceerd waarschijnlijk in al deze pagina's? Yeah? 

STUDENT: [onverstaanbaar]. 

DAVID J. MALAN: 1 tot en met 9. Ja, absoluut. 1 tot 9, behalve misschien 8 verandert een klein beetje omdat CS50 wordt lezingen of week nul of iets. Maar vrijwel identiek. Dus al dit spul is gewoon soort gekopieerd en geplakt. En er is een paar andere lijnen die ik kan bedenken van dat zijn waarschijnlijk identiek over alle bestanden. 

STUDENT: 12 en 13. DAVID J. MALAN: Yeah. Tuurlijk, 12, 13, en 14 waarschijnlijk, gewoon omdat het interessant spul gebeurt op de lijnen 11 en 10, zo lijkt het. Dus laten we eens kijken naar versie 1, dat probeert om dit te verbeteren. In versie 1 van deze MVC example-- zullen we uitleggen wat mvc middel in een moment-- als ik ga in index, het soort ziet er een beetje verwarrend nu. Het is niet zo eenvoudig als voorheen. 

Maar als je eenmaal begint te lees het aandachtig, het is vrij eenvoudig wat het doet. Blijkbaar lijn 1 en lijn 8 hebben vervangen alle van de spullen die je gewoon identified-- hoewel slechts voor een goede maatregel, Ik verliet de UGT er voor het geval dat sommige dagen niet over een lijst van dingen. En dit vereist is een soort pond onder meer in C. Het kopieert en plakt de inhoud effectief hier in dit bestand. 

Dus in header.php, zoals u kunnen afleiden uit de naam, zal de kop van de pagina zijn. Het is hier soort weeskinderen. Het heeft slechts de top, maar er is geen inhoud meer hieronder. 

En als ik kijk naar voettekst ondertussen, die het andere bestand was mentioned-- dit is nog minder interessant, maar nogmaals, het is gebruikelijk om alles. Dus dit is de voettekst. Dit is de header. Dit is het bestand dat is het veranderen, dus waarom niet proberen om factor uit de gemeenschappelijkheid met deze twee lijnen hier? 

Maar we kunnen deze reinigen een beetje verder. Ik ga om te gaan en openstellen versie twee waar we zullen zien dat er een nieuw bestand, helpers.php. We zullen zien wat dat is in een moment. Laten we gaan naar de index, zoals de toegangspunt als voorheen. 

En nu merk ik nodig helpers.php, geen kop- of voettekst. Maar helpers is een soort helpers.c en helpers.h uit PSET 2 of PSET 3 lang geleden, toen je eigenlijk heeft gezocht en gevonden in dat PSET, en je moest al je code voor het sorteren en het zoeken in een apart bestand. Dat is wat er aan de hand hier. 

En nu lijn 3 ziet er een beetje anders uit. En het is gewoon een regel. Om dit nog meer te maken duidelijk, ik kon gewoon doen dit om stilistisch consequent zijn met alles wat we hebben gedaan. Maar dat is niet echt het veranderen van de functionaliteit. Het is gewoon een regel van de echte code. 

Blijkbaar is er een functie ergens genoemd maken header, en dit is waar de dingen behoorlijk krachtig. Merk op dat de binnenkant van haar haakjes is wat ander stuk van syntax? Het is waarschijnlijk een beetje moeilijk om te zeggen, maar merken there's-- ik wat witte kom zetten ruimte. Er is tussen vierkante haken. 

En vierkante haken we een beetje geleden zag in de context van associatieve arrays, die, wederom, zoals hash tabellen. En als je nu denkt aan C, de volgorde van argumenten in een functie moet altijd hetzelfde zijn. Je moet niet vergeten wat de bestellen is-- x, y, z of z, y, x-- en je moet ze altijd in dezelfde volgorde of zoek ze op als je bent vergeten. 

Maar dit lijkt een slimme manier te zijn van het passeren van een willekeurige sleutel waarde paren waarbij de titel is de naam van een argument in dit geval en CS50 is de waarde ervan. En het feit dat ik heb deze haken betekent hier dat ik kon ook doorgeven in iets zoals een week is 1 of 0 of 2 of 3. Dus hebben we geparametriseerd deze functie zodanig dat het meerdere ingangen kunnen nemen, maar voor nu is het gewoon de ene. 

Als ik nu in helpers.php, merkt wat het doet. Dit is een beetje van nieuwe functionaliteit, maar voor nu gewoon op het geloof dat dit de syntax waarmee je definieer een functie in PHP. Je zegt letterlijk functie. U hoeft niet een terugkeer vermeld typt, en dat is consequent met de variabele detail eerder waar je niet echt sterk te typen. 

Dit specificeert gewoon dat, door gebrek, deze neemt een associatieve matrix als argument. En weet je wat? Als de gebruiker niet voorbij één in, neem een ​​standaardwaarde. 

Dit is een functie die C niet hebben voor ons, dat is leuk, want nu data, zelfs als u geef het niet om het even wat, gaat om een ​​te zijn serie maar een lege. En als een terzijde, extract gewoon iets funky doet waar het neemt alle van de sleutels van deze associatieve array, alle dingen je kon in vierkante haakjes gezet, en creëert variabelen uit hen zodat we uiteindelijk kunnen hebben toegang om ze in footet.php en header.php. Dat is een beetje abstract, dus laat me hierop wijzen. 

In index.php, merk dat ik ben passeren in een belangrijke waarde paar van titel met een waarde van CS50. Als ik nu kijk naar helpers.php, merken dat RenderHeader is het extraheren van de gegevens die ik voorbij in, en dan die header.php. Wat ik heb gedaan is een soort van een arme man implementatie nu van het volgende. 

Als ik openstellen header.php, mede dat ik heb niet meer moeilijk gecodeerd het woord CS50 in deze header file. Ik heb dit zette weliswaar gruwelijk benoemde functie, HTML speciale tekens, in daar. Maar let op wat ik heb gedaan. Ik heb geopend HTML. Ik heb dan open hoofd en een open titel. 

En dan de binnenkant van de titel open en dicht-tags, ik heb een beetje PHP-code. En dit is een mooi maar van syntax, hetgeen betekent gewoon echo uit. Het betekent letterlijk dit-- echo de following-- maar dit is sexier om te schrijven. Echo uit de titel dat is al gepasseerd in. 

Maar wat denk je HTML speciale char is alles over, vooral als u sommige eerdere HTML-ervaring? Welke personages zou kunnen zijn gevaarlijk in overgaan naar een pagina waar je bent dynamisch genereren de webpagina met code als deze? Laat me gaan naar dit bestand, versie twee, en kijken of ik niet dit kan induceren. 

Versie twee is dit. En merk op alles is prima, goed werkt. Maar stel dat ik in index.php en Ik vermeld dat de titel van mijn pagina is niet CS50. Het is geopend beugel script alert hallo wereld, dicht enkel aanhalingsteken, haakje sluiten, puntkomma, haakje openen, slash script. 

Script, zoals we zullen uiteindelijk zien, is een tag die u kunt gebruiken om het gebruik van een andere programmeertaal JavaScript binnenkant van een webpagina. En let nu op de logica hier. Hier is een sleutel genaamd titel. Hier is het is gek lang waarde nu. 

Maar als ik naar de helpers pagina- of liever gezegd, het voorblad, Ik ben het oproepen van deze functie op die titel als eerste. Dus als ik nu de pagina verversen, I zie dit, dat belachelijk uitziet, maar het is veilig. Het ziet er gewoon dom. 

Maar stel dat in plaats Ik had dit vergeten. En let op mijn woorden, een niet-nul getal van u zal vergeten om dit te doen en je krijgt een aantal nijvere student of vriend op komst om u op de CS50 beurs of anoniem 's nachts rondneuzen op uw website en in wezen het injecteren van code u niet weet dat in uw site een of andere manier. 

Want als ik gewoon spuug uit de titel hier en titel er-- goed, als titel letterlijk ziet er zo uit en PHP als een taal die kan spugen uit andere talen tekst, Dit gaat letterlijk om deze tag te vervangen door, natuurlijk, wat ik elders. 

Dus als ik nu ga hier en herladen na het ongedaan maken van de veiligheid mechanismen, nu heb ik hallo wereld hier. Nu is dat niet zo groot van een omgaan, maar je kon iets doen een beetje meer kwaadaardige hier, alsof er andere tags-- zoals we zullen zien als we besteden meer tijd in JavaScript-- als locatie dot href krijgt, citaat, unquote, HTTP business.com, maar het tegenovergestelde van dat van de andere dag. En nu kunt u een web induceren pagina om daadwerkelijk meteen gaan naar deze webpagina hier. 

En eigenlijk, ik wil niet om zelfs naar business.com omdat ik niet wil om te weten wat dat is. Maar dit zal ook van code om te worden geïnjecteerd in deze pagina. Dus dit is slechts zeggen dat hoewel introduceren we super vroeg op sommige Deze meer complexe structuren, het is allemaal in de richting van een einde van ervoor te zorgen dat uw code is niet misbruikt. 

Dus nu een derde versie hier. Het wordt een beetje aantrekkelijker. Ik heb niet echt like-- de anale kant van mij was een beetje geïrriteerd door de feit dat ik had een functie genaamd RenderHeader en RenderFooter dat bijna identiek. Dus bedacht ik me, waarom niet Ik parametriseren deze functies in slechts één genoemd te maken, hebben het tot een tweede argument te nemen zoals de naam van het sjabloon, de uiteindelijke om ofwel kop- of voettekst render--? En dan naar keuze, als ik wil door te geven in een aantal belangrijke waarde-paren zoals ik doe voor de titel voor de header, maar niet voor de voettekst, Ik kon dat doen. 

En dus nu als ik ga in helpers.php, het is een beetje ingewikkelder. En ik zal mijn handen zwaaien naar de details, maar het is gewoon een functie. Dus dat is een stap in de richting van een beter ontwerp. 

We kunnen nog een stap verder te brengen. Als ik in mijn vierde versie van deze, merk nu dat ik iets te doen nog meer soort cryptisch. En ik weet dat dit een veel tegelijk absorberen, maar we zijn gewoon een soort van het schoonmaken van dingen. Nu ben ik het zetten van mijn helpers bestand in een map met de naam includes-- gewoon een willekeurige te noemen waar ik wil spullen dat wil ik include-- en vervolgens de rest is hetzelfde. 

Maar als ik kijk nu in gedit, mede dat ik ontdoen heb gekregen van al die andere bestanden en ik heb verhuisden ze, bijvoorbeeld, in hier. En vervolgens in de sjablonen, Ik heb dit ook hier. En dus is dit nu allemaal in de richting van een stap van het gebruik van een veel beter ontwerp patroon. En we zijn zeer snel van plan om weg te gaan van PHP's standaard functionaliteit, die we hier begonnen met, waar je gewoon vermengen PHP, en uw HTML en CSS, en je gewoon spuug het uit en ga je over je weg. Het gaat niet erg onderhoudbaar te zijn. Net als in C, zijn we begonnen met behulp van meerdere bestanden en meerdere functies en factoring dingen die eruit. We zullen hier hetzelfde te doen. En in feite, in de vijfde en laatste versie hier, ik heb een ander ding. U kunt zelfs gebruik maken van dot dot, die, weer, is gewoon de bovenliggende directory. Om nog meer zekerheid bewust te zijn, want als ik kijk naar de luisterpositie hier voor de vijfde en laatste versie, bericht dat heb ik één directory hier genoemd publiek, en dan op de hetzelfde niveau als het ware, Ik heb omvat en templates en dan die tekst bestand readme. 

En de reden dat ik heb opgebouwd het dit-- en zo veel web graag hosts, vooral die $ 5 per maand degenen of $ 10 maand degenen, als je ooit een van deze hebt gehad services-- wat zo velen van hen doen is ze gewoon verwachten dat je alles te dumpen van uw bestanden in een directory, als we wisten al met dit eerste voorbeeld. 

Maar zodra je begint het bouwen van meer verfijnde sites die net slaan gegevens die u belangrijk vindt en bestanden die u zorg over, eigenlijk dingen te organiseren correct en met meer zekerheid bewustzijn in het achterhoofd kan we beginnen te verdedigen tegen alle vrienden dat je ofwel in of buiten deze klasse die Zodra u begint met het maken van zelf programma's op het web, gaan beginnen met het plukken op jou en op hen. 

En dus zullen we kijken uiteindelijk op dit ontwerp. Dit is gewoon een plaatje dat toont het volgende. We gaan al zetten onze programmeren logische één of meer bestanden, en we gaan gewoon beginnen roepen deze controllers. Het is waar de hersenen van onze websites eigenlijk zijn. Dan gaan we naar hebben uitzicht, en het uitzicht zijn zo simpel als gewoon apart files-- genaamd sjablonen, vaak. Ze hoeven alleen maar de esthetiek van mijn pagina, wat ik wil op deze pagina te kijken like-- de kleuren en de lay-out en de posities van alle variabelen. 

En dan interessanter dat we uiteindelijk zullen krijgen om is het model, die gaat gewoon het woord dat we klap op andere technologieën wij brengen in de beeld, zoals werkelijke databases, zodat wanneer je wilt om informatie op te slaan, je niet zomaar een email sturen om uw Proctor of aan jezelf, u daadwerkelijk op te slaan in een database een andere taal bekend als SQL. En dus zullen we hier vandaag verlaten en pick-up met dit op woensdag en de invoering van databases dan. 

[Muziek]