>> [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]