>> [MUSIC SPILLE]
>> DAVID J. MALAN: All right.
Dette er CS50.
Dette er starten på uke åtte.
Og du husker kanskje at vi slapp siste gang å se på et nytt språk
helt.
Faktisk, en som er ganske lett og det er ikke engang
et programmeringsspråk.
Det er et kodespråk som lar oss faktisk strukturere og gjøre nettsider.
Og når du noe annet i forbindelse med dette--
eller du snart vil dersom du ikke har allerede.
Vi kommer til å bruke Cascading Style Sheets, eller CSS, som
er en annen type språk med egenskaper og verdier
som kommer til å la oss gjøre Ting som endrer farge
og endre posisjon og slike tweaks.
Men i dag og framover, begynner vi å fokusere på mer kraftfulle språk,
Selve programmeringsspråk som PHP.
>> Så PHP har eksistert i noen tid.
Og som du ser, det designet primært
tidlig for faktiske bruk innen webutvikling
og faktisk genererer nettsider.
Så hva slags funksjoner gjør et språk
trenger for å lage web sider dynamisk med det?
>> Med andre ord, hvis du vil generere Innholdet dynamically-- som Facebooks
Nyhetsfeed, som skifter hele tiden, eller direktemeldinger som dukker opp fra tid
å tid-- som hva er den viktig del av funksjonaliteten
du trenger i et programmeringsspråk som ville la deg dynamisk
skrive ut ny informasjon til skjermen?
>> STUDENT: Code.
DAVID J. MALAN: Code.
OK.
Vi vil ta det.
Litt mer presis.
Jeg mener, vi kunne gjøre dette med C, ærlig.
Det ville være en smerte i nakken.
Men-- er dette engasjementet?
>> STUDENT: Yeah.
Variabler, kanskje?
DAVID J. MALAN: Variabler.
OK, sikkert.
Variabler kan sikkert hjelpe oss ut.
Og selv noe enklere.
Vi brukte det i den aller første program for den aller første dagen
når vi faktisk sa "hello world".
>> STUDENT: Print.
>> DAVID J. MALAN: Print, ikke sant?
Print, eller printf i verden av C. Så hele denne tiden,
vi har hatt på vår disposisjon en language-- C,
i particular-- og selv Scratch for den saks skyld at
kan generere strenger av tekst.
>> Vel, hvis HTML, som vi så i forrige uke, er bare en hel haug med strenger av tekst
riktignok med åpne braketter og lukket braketter og en slags rim
og årsaken bak det, vel da kunne vi virkelig
begynne å generere websider enten manuelt ved å skrive dem ut i gedit
eller i Microsoft Word, for at matter-- vi trenger bare en tekst editor.
>> Eller vi kunne skrive kode, til ditt forslag
tidligere, ville det gi oss dynamisk generere HTML,
og det er det vi skal å begynne å gjøre med PHP
og til slutt selv sammen med en språk kalt Javascript,
er å bruke ett språk til å generere en annen.
Og ja, dette er hva Facebook og mange, mange andre nettsteder
gjøre for å faktisk dynamisk vise ny informasjon til deg.
>> Så la oss begynne med dette-- en kryptisk ser linje, men en
det er faktisk ganske kraftig.
Så langt har vi brukt C, som er et kompilert språk.
Og bare en rask recap-- en kompilert språket har det karakteristiske?
Du er nødt til å kompilere det, men hva betyr det?
Yeah?
>> STUDENT: Det må være montert til maskinkode.
>> DAVID J. MALAN: OK.
Det må monteres til maskinkode.
Så du tar kildekoden, som er slags engelsk-aktig.
Du konvertere det til noe lavere nivå,
som til slutt kalt objekt code-- 0 og 1-ere.
Og det er disse 0 og 1-ere som en CPU, som de laget av Intel,
faktisk forstår.
>> Nå, PHP og Python og Ruby, og Java og bunter av andre
språk er ikke kompilert språk, men tolket språk,
som betyr at du bare skriver dem og deretter du trenger ikke gjøre dem om til 0 og 1-ere.
Du stedet bare gi deretter som innspill til andres program,
kalt tolk.
Og vedkommende har Programmet har blitt utviklet
å forstå hva hver og hvert symbol i Python eller PHP
eller Ruby eller hvilket som helst antall andre språk betyr.
>> Og så alt vi trenger er noe sånt som dette.
Så faktisk, jeg kommer til å gå over til apparatet
her, bare i noen gammelt vindu, og vi er
kommer til å gå videre og åpne en fil som heter, sier, hallo.
Nå tidligere, jeg kunne ha spart dette selv med en filtype,
men jeg kommer til å gjøre noe enda enklere her.
Jeg kommer til å gå videre og begynne denne filen med denne kryptiske syntaks.
Så "bruker, bin, env, for miljø, php. "
>> Dette er rett og slett en linje med kode som er kommer til å fortelle min operativsystem,
gå finne i din lokale miljøet uansett hva det er,
uansett hvor PHP er-- det interpreter-- og gå videre og bruke som tolk
å tolke følgende kode.
Nå er denne typen en stygg funksjon i PHP.
Men i dette språket, noe gang du skriver PHP-kode,
du må ha en av disse stygge PHP-koder demarcating begynnelsen
av code-- <? php.
>> Men under her, kan jeg nå gjøre noe ganske enkelt, som printf hallo komma
verden backslash n tett sitat, sluttparentes.
Og så bare for godt tiltaket, jeg kommer
å gå videre og tett min php tag over her
slik at alt ser ut pent ganske trykket.
>> Og så snart jeg klikker på Lagre, gedit er faktisk smart nok
å se på det aller første linje og skjønner, oh, du skriver PHP-kode.
La meg syntaks høydepunkt det med fargene
her, slik at det står ut litt mer.
Men nå kommer jeg til å gå ned til min terminal-vinduet.
Jeg skal zoome inn.
>> Dette programmet ble kalt "hallo", så jeg kommer til å gjøre dot slash hallo,
men tilgang nektet.
Og bash.
Vi har faktisk hørt om det ting et par uker siden
i sammenheng med Shellshock, en av disse feilene.
>> Men tillatelse nektet vi har sett før, kanskje i en annen sammenheng.
Er det noen som husker hvordan du kan fikse noe
hvor tillatelse nektes som dette?
Hva er kommandoen, minst?
>> STUDENT: Chmod.
DAVID J. MALAN: Ja, chmod, for å forandre modusen for en fil.
Og du får alle mer vant til å Dette neste uke med en etterfølgende problem
innstilt.
Men for nå, kommer jeg til å endre modusen ikke å være lesbar,
men å gi alle executeability privilegier, evnen
å kjøre denne filen.
Og jeg kommer til å tildele som til filen hallo.
>> Hvis jeg nå gjøre dot slash hallo inn, du se, faktisk, mitt program, hallo verden.
Og hva trinnet gjorde jeg klart hoppe helt?
Kompilering.
Så jeg bare kjørte dette programmet ganske enkelt.
>> Og det viser seg at du kan gjøre dette med en masse syntaks som minner om C.
La meg gå inn til dagens kode, som jeg satt inn i min vhost katalog
her, for ekte grunner vi vil komme tilbake til.
Og jeg kommer til å gå inn i, la oss si, forhold 1.
>> Og du vil se her, først og fremst en hel haug med kommentarer.
Men dette er faktisk en re-etablering i PHP
av et program vi gjorde i uken en som heter forhold 1.c
hvor hensikten i livet av dette programmet
er tilsynelatende å spørre brukeren for et heltall
og deretter gjøre noen fluffy analyse på det der
du si om det er positivt eller negative eller lik null.
Og jeg tar dette bare opp fordi, bortsett fra kanskje en liten detalj,
det er umulig å skille så langt fra C.
>> Hva er en karakteristikk her at kanskje hopper ut
på deg som en litt annerledes?
Kanskje to ting.
Yeah?
>> STUDENT: Dollar sign n?
>> DAVID J. MALAN: Yeah.
Så dollartegn n er til stede.
Og dollartegn, som vi får se, kommer
å være en fix til begynnelsen til alle variabler i PHP.
Det er både godt og dårlig-- god i at det er liksom opplagt hva som er
en variabel, dårlig i at det er enda en ting å skrive.
Og det er en annen ting vi ikke har helt
sett, minst av denne stavemåten. ja?
>> STUDENT: Readline.
>> DAVID J. MALAN: Readline.
Readline fikk vi ikke se, per se, i C, selv om det eksisterer noe
lignende, men vi har brukt getstring, og dette er dens motstykke.
Så hvis jeg går inn i dette katalogen, som skjer for å være,
som jeg vil forklare i litt i min vhost katalog og min kilde En katalog,
og jeg går videre og gjøre dot slash conditions-- whoops-- dot slash
forhold 1, vil du se igjen, samme issue-- tilgang nektet.
>> Så la meg zoome inn og gjøre chmod et pluss x på forholdene, dot slash forhold.
Jeg vil gjerne ha et heltall, please, 50.
Og vi kunne spille dette spill hele dagen lang.
Det kommer til å oppføre seg nøyaktig som det gjorde i uke en.
>> OK så ikke så forskjellig, bortsett fra ikke bare at liten bit av syntaks,
men på toppen, jeg igjen hadde denne linjen som
tillot meg å lage noe som ser ut som en C-program som heter hallo,
kalt forhold 1.
Men det er ikke 0-tallet og de Jeg utfører direkte.
Det er i stedet å kjøre denne tolk hvis navn
skjer for å være identisk med det språk.
Programmet kalles PHP, og min kode under linjen man er gått inn i den.
>> Vi kan gjøre en annen ganske enkel eksempel minner om noe
vi gjorde uker siden.
Igjen, dette er en slags vilkårlig mengde koder
som tilsynelatende gjør hva når du kjører den?
Hva er dette kommer til å skrive ut, formodentlig?
>> Så i utgangspunktet på linje 16, er det kommer til å si x er nå 2, sannsynligvis.
% D er den samme som for $ i printf.
Så da er det cubing, prikk, prikk, prikk, i linje 17.
Og deretter linje 18 vises å kalle en funksjon Cubed.
Og hvor er Cubed definert?
>> Vel, det ser ut som på linje 25, så det er ikke så forskjellig.
Jeg har fått noen kommentarer ovenfor det, men for det meste,
det er en ganske grei porting eller konvertering
fra C-program til PHP versjon.
Men det er nå et par forskjeller som kanskje burde hoppe ut.
Hva annet er annerledes om hvordan du kanskje skrive denne samme programmet i C?
>> STUDENT: [uhørbart].
>> DAVID J. MALAN: Det er ingen prototype opp toppen.
Så PHP-- og ærlig, en Mange moderne languages--
er mye smartere og mer nyttig enn C-kompilatorer i at du
kan sette funksjonen her oppe, du kan sette en funksjon her nede,
og tolken kommer å gjøre deg til fordel for lesing
hele filen før den bestemmer at noen funksjon finnes ikke.
Så fine forbedringer år senere.
Men det er også noe annet annerledes eller fraværende her.
Yeah?
>> STUDENT: [uhørbart].
DAVID J. MALAN: Vi trenger ikke å erklære hvilke typer variabler,
så vi får se før lenge at det er forskjellige typer i PHP,
men du trenger ikke å angi dem, som også er både gode og dårlige.
Og det er en annen ting som mangler.
>> STUDENT: Det er ingen biblioteker.
>> DAVID J. MALAN: Det er ingen biblioteker.
OK, så det er fint.
Vi får mye mer ut av boksen.
Så det er faktisk mye mer ting enn jeg trodde var annerledes.
Hva med måten i ryggen?
Hva er det?
Si det en gang til?
>> STUDENT: Pointer.
>> DAVID J. MALAN: Ingen pekere.
OK, i det minste i dette eksempel, no.
Det er rettferdig.
Så det er ikke pekere i PHP faktisk generelt.
Det er noe som kalles referanser, men vi vil ikke bruke for mye tid der.
Og hva annet?
>> STUDENT: Main.
DAVID J. MALAN: Main.
Så dette var biggie Jeg tenkte på.
Legg merke til det er ingen hovedinngangspunkt.
Du bare begynner å skrive koden din.
Og dette er faktisk kommer til å være en fordel
når vi overgangen øyeblikk for å faktisk bruker
denne samme språk for web-baserte programmering, som vi
ønsker ikke å ha bare ett inngangspunkt.
Vi ønsker kanskje å ha en haug med URLer, en haug med forskjellige filer
alle tar i brukerundersøkelser og produsere utgang.
>> Men her er det svært nedslående eksempel som jeg lovet forrige gang,
nemlig i denne mappen her, feilstavinger.
Så i denne filen stavekontrollen, som vi vil ikke bruke for mye tid på, er det
i det vesentlige en porting-- P-O-R-T. Det er bare ordet gitt da, sier,
du konvertere fra ett språk til et annet manuelt vanligvis.
>> Dette er en porting av PC versjon av stavekontrollen fra PSet 5.
Og jeg egentlig prøvde å konvertere den linje for linje så tett som jeg kan.
Så hvis du liker denne typen ting, det faktisk er verdt på et tidspunkt
trekke dem opp side ved begge side og se hva som er det samme
og hva er annerledes.
Men de er ganske darn lignende.
Hvis du husker hva Speller selv så ut,
selv om du ikke gjorde må endre denne filen,
det er ganske lik strukturelt med bare et par
endringer her og der.
>> Så dette er bare for å si at det er ganske grei å konvertere stavekontroll
fra C til PHP.
Men i ordboken, er det noe enda mer overbevisende.
La meg gå videre og skape min egen dictionary.php fil.
Så litt annerledes ved at vi kaller det .php i stedet for .c.
Fordi dette er en PHP-fil, jeg do-- litt annoyingly-- har
å starte fil med en php tag sånn.
Og jeg kommer til å gå videre og definere noen funksjoner.
Funksjon kalt sjekk, som er kommer til å ta i et ord som før.
Men dette argumentet er kommer til å ha en dollar
signere fordi vi, igjen, ved hjelp av PHP.
En annen funksjon fra dictionary.c var load
og det tok i navnet til en ordbok, slik at jeg får den funksjonen klar til å gå.
>> En annen i dictionary.c var hva?
Størrelse var en av de hyggeligste, på hvert fall hvis du holdt noen variable rundt.
slik størrelse har bare for å returnere en variabel.
Og så var det losse.
>> Så var det disse fire funksjoner i oppgavesettet 5
at du trengte å gjennomføre med noen datastruktur eller strukturer.
Så jeg lovet at i PHP, kan vi erklære
en nøkkeltabell, for eksempel, alt som lettere.
Faktisk, hvis jeg vil ha en hash table, Jeg bare kommer til å gå sånn
og det er min hash table.
Og det er notatet, nedslående, at vi slapp på forrige gang.
Og vet du hva, hvis jeg ville en variabel for størrelse, vel,
dette er ikke alt så forskjellig fra C,
men jeg kommer til å gå videre og gjøre det.
Og merker ingen datatype.
Og jeg skal gå tilbake senere og faktisk legge til noen kommentarer her.
Men hva med last?
>> Hvis dollartegn ordbok er navnet på filen min
og jeg faktisk ønsker å laste ord i denne tabellen nå,
Jeg kan faktisk gjøre noe ganske enkel.
One-- og dette er minorly annoying-- i PHP,
du må spesifisere inne av en funksjon hvis du
ønsker å få tilgang til noen global variable som er definert utenfor.
>> Men det er ikke spesielt interessant akkurat nå.
Hva er mer interessant er dette for hver konstruere at jeg nevnte forrige gang.
Og det viser seg at PHP har en funksjon heter filen hvis formål i livet
er å åpne en fil og lese i alle sine linjer inn i en matrise
og levere dem tilbake til.
>> Som er å si at jeg kan gjøre ordbok så som nå effektivt når jeg ringer fil,
dette kommer til å gi meg tilbake en rekke ord fra filen.
Det er ikke alt som godt.
Det er fortsatt kommer til å være en linje av ord, noe lineær.
Men jeg kan gå videre og iterere over hver av disse ordene ved hjelp
at syntaks vi så kort sist.
Og du vil se det mer i den kommende PSet.
>> Men nå har jeg en sløyfe itera over hver ord i ordlisten.
Og på hver iterasjon, husker jeg ringer det aktuelle ordet "ord".
Og alt det kommer til å ta for å la et ord i ordlisten er
kommer til å være ordet gjetning "true".
Det er min insert funksjon.
Det er min last funksjon for min ordbok.
Nå er det litt av en utro fordi, vet du hva, det er faktisk
backslash n er i slutten av ordene at jeg burde bli kvitt,
men det er ikke et problem fordi PHP har en funksjon som heter hogge som bokstavelig talt
koteletter off ett tegn på helt til slutt.
Så ikke noe problem der.
Vi har gått foran og faktisk forkortet det til nettopp dette.
Og nå har jeg bør nok holde styr av størrelse, så la oss i det minste gjøre dette--
størrelse ++.
Jeg kan gjøre det som før.
Og så dette er trolig kommer til å fungere helt fint, så det er return true.
Ferdig.
PSet 5.
>> [Latter]
>> DAVID J. MALAN: OK.
Vi kommer til å gjøre det igjen med neste PSet, også.
Så hva med størrelse?
Vel, dette forhåpentligvis er i ferd med som du ville forvente forrige gang,
selv om jeg må gjøre denne dumme global ting.
Det er bare en gjenstand fra utforming språkets.
>> Men sjekk er litt mer interessant.
Så hvis jeg passerte i dollar signere ord, jeg først
ønsker å ha tilgang til at global variabel tabellen.
Og nå hvis jeg vil sjekke om et ord er der,
Jeg kan bare si om det er sant at følgende er satt i tabellen,
deretter gå videre og retur true; annet, return false.
Ferdig.
Den andre halvparten av PSet 5.
>> All right, så igjen, jeg er kutte noen hjørner.
I rettferdighet, burde jeg sannsynligvis tilbringe noen flere sekunder
på denne implementeringen.
Og jeg sannsynligvis ikke skal spotte alle timer du satt på PSet så mye.
Så strtolower er en funksjon.
Noe lignende existentialist i C, i det minste for tegn,
men PHP fikk en hel streng versjon.
>> Det kommer til å tvinge alt til små bokstaver, som noen av dere
kunne ha gjort for å canonicalize hva du var å sette i ordboken.
Og nå kan du gjøre dette i C, også.
Dette har ingenting å gjøre med PHP.
>> Men helst du har en boolsk tilstand,
som noe på linje 10 er det, som bare
kommer til å vurdere å true eller falske, og hvis annet klart
returnerer sant eller usant, jeg kunne rett og slett virkelig gjøre dette mer sexy
og bare gjøre noe som dette.
Slik at det er min sjekk funksjon.
Høyre, hvis boolsk returnerer en sann eller falsk,
la oss bare returnere den med en gang.
>> Og det er et par andre tweaks Jeg kunne gjøre her og der.
Load-- losse, forresten, det er gjort.
Ingenting å gjøre der.
Siden hele minnet i PHP og mange andre språk
er faktisk klart for deg.
Så mens i C, så du har lært smertelig,
noe du malloc eller calloc eller realloc, må du frigjøre deg selv.
Alt du fopen, må du fclose, slik at ressursene blir til slutt frigjort
og verktøy som Valgrind ikke merke til og ikke klage,
som er en god ting å kjøre på dem.
>> Men sikkert, det må være noen fangst, ikke sant?
Ellers, vi slags bortkastet en hel haug med uker.
Så det er en rekke grunner hvorfor vi liksom ta denne banen,
men det er en trade-off.
Høyre har dette vært tema.
>> Så hva kanskje en trade-off her beveger seg, fra C til PHP?
Føles som alle seier så langt annet enn litt av stygghet her eller der.
Yeah.
Hva er det?
>> STUDENT: [uhørbart] minne.
DAVID J. MALAN: Speed.
OK.
Vel, var min hastighet ganske fort.
Høyre?
Men hastigheten på utførelsen av programmet?
OK, så det er en rettferdig punkt.
>> Så som det ville skje, jeg på forhånd cued opp både min prøve løsningen, den ene
Jeg hadde på det store brettet var en prøve-basert løsning,
og jeg har det i denne katalogen her.
Så jeg i et øyeblikk, kan jeg gå videre og kjøre dette på King James Bible,
trykket Enter.
Og dette er forhåpentligvis korrekt gjennomføring på slutten,
gir meg tid totalt av 0,38 sekunder for at
en noe vilkårlig eksempel.
>> Og hvis jeg nå går inn i dette andre terminalvindu
her hvor jeg først åpnet gedit, la meg gå inn i dagens code-- som igjen,
er i denne katalogen her-- og la meg gå videre og kjøre stavekontroll.
Så bare for å være klar, dette er PHP versjon.
Jeg bare viser toppen av det her.
>> Så hvis jeg gjør stavekontroll av tilde CS50 PSet fem tekster, King James, skriv.
Det er fortsatt raskere enn skriving den i C, men den totale tiden
er, varsel, 0,93, mens min C-basert implementering var 0,38.
Så det er en ikke-triviell forskjell.
>> Og dette er bare på én fil.
Hvis du skulle kjøre de to programmer versus den store bord
og har en hel haug med innganger testet, ville dette sikkert legge opp.
Og hvis vi hadde enda større datasett, også dette ville legge opp enda mer.
Så ja, betaler noen pris av hastighet virkelig er tilfelle.
Hva annet?
Yeah?
>> STUDENT: Mengde RAM bruk.
>> DAVID J. MALAN: Mengde RAM bruk.
Så jeg ga ikke ett sekund tenkte når du skriver denne PHP
versjon som til hvor mye minnet jeg var bruker.
Jeg er helt utsette det til PHP seg selv og den som skrev det programmet.
Og det kan være OK, men hvis jeg faktisk virkelig
bryr seg om å klemme så mye ytelse ut av mitt program eller ut av min nettside
eller ut av hva verktøyet Jeg bygger, kanskje
PHP, faktisk, er ikke riktig språk.
>> Og faktisk, det er derfor, for eksempel, mange web servers--
selve programmene som tjene opp web content--
er ikke skrevet i PHP eller i Python eller Ruby.
De er skrevet, som vil du nå gjøre med PSet 6,
i C, slik at du kan presse hver bit av ytelse ut av det
og virkelig utøve finkornet kontroll over hva som er
skjer under hette og ikke bare ta det
for gitt noen høyere nivå-datastrukturen.
>> Tenk, tross alt, hvem i PHP implementert
at oppfatningen av en hash table-- det er faktisk mer
korrekt kalt en assosiativ array-- gjør han eller hun har noen anelse om hva slags
innganger du kommer til å være sette inn i strukturen?
Så åpenbart ikke, ikke sant?
Det er et generisk verktøy i verktøykasse som er
gitt til alle som ønsker å bruke den, og så sikkert det
ikke kan optimaliseres til slutt for nøyaktig hva du ønsker å gjøre.
>> Så trade-offs-- utviklingstid kanskje forskjellig, ytelse kan variere,
kompleksitet eller minnebruk kan være annerledes.
Og så hva du finner økende grad er at det er
kommer til å være annerledes verktøy for handelen.
Og faktisk for en super flertall av folks endelige prosjekter i denne klassen,
tro det eller ei, er C ikke kommer å være et riktig språk som skal brukes.
>> Og faktisk, en av gatekjøkken slutt for noen klasse som dette
er å få deg å tenke på, vel, hva skal du trekke av
hyllen når du vil å løse noen problem.
Og ja, vi vil krysse denne broen enda mer som vi ser på flere språk
også utover i dag.
>> Så la oss overgang nå kanskje en kjent sammenheng
for å bruke et språk som PHP.
Det er noe vanlig å bruke på kommandolinjen, skriver skript
som jeg gjorde, men det er mye, mye mer vanlig.
Og det var ment å bli brukt i form av filer som vanligvis ender
i .php-- men det er ikke en prerequisite--
som selv genererer webinnhold.
>> Så la meg gå videre og åpne noen eksemplene jeg forberedt på forhånd.
Og disse er faktisk slags sant historier i at en av de første tingene
Jeg noensinne gjorde meg selv etter endt CS50 og kanskje, tror jeg,
CS51 år siden er min romkamerat og jeg prøvde å hjelpe
å kjøre freshman utført sportsprogram, som på den tiden,
hadde freshman registrerer for ulike sport ved å fylle ut et stykke papir,
som det ble kalt, gang over tunet til Wigglesworth,
og slippe det i noen Proctor dør drop.
Og så han eller hun ville gå gjennom dem og deretter faktisk email oss manuelt
at vi var registrert for noen sport.
>> Så klart, en mulighet for forbedring.
I disse dager, kan du slå til akkurat Google Forms, men tilbake i dag,
vi måtte faktisk nå for-- dette var ikke engang så lenge ago-- nå
for et programmerings språk som ikke var PHP.
På den tiden var det noe som heter Perl,
som har gått ut av moten siden.
Men ideen er den samme.
>> Og jeg egentlig satte meg ned for å prøve til porten går Perl-versjoner til PHP,
men i fullstendig ansvarsfraskrivelse, ikke gi noen trodde til estetikk ennå.
Så her er en nettside.
Dette er en fil.
Hvis jeg zoomer inn, dens tilsynelatende kalt froshim0.php
bare fordi det er vår første eksempel i denne serien.
Og legg merke til at den har det som synes å være en svært stygg HTML-skjema,
men en form er interessant fordi det tillater
meg å gi brukerundersøkelser til nettleseren.
>> Nå sist gang da vi hadde en form, for å hvem vi avgir vår søkeparameter,
køen parameter som det ble kalt?
Så til Google, ikke sant?
Vi helt punted på ideen om gjør noe med den inngangen.
>> Men i dag, begynner vi å produsere utgang.
Og atferden jeg kommer til å se her i utgangspunktet er ganske trivielt.
David, jeg skal krysse av kjønn her, sier Matthews her.
Jeg vil ikke være kaptein.
Jeg kommer til å klikke Registeret.
Og legg merke til at nettadressen har endret til register 0.php,
og så er det denne stygge teksten her.
Jeg ga ingen tanke til formateringen av dette.
>> Men hva er interessant er at tre verdier ble tydeligvis gått i.
Dette er PHP slags tilsvarer printf--
vi får se hva det egentlig heter i en bit-- som bare skriver ut
hva man gått inn i den.
Så dette tyder på at denne form hadde i det minste tre felt til det,
og du så meg skrive dem inn.
Den ene var mitt navn, var en kjønn, en var sovesal.
Og kapteinen ikke engang blir sendt til serveren fordi jeg ikke sjekke det.
>> Så dette er å si tilsynelatende, når du sender ting på nettet,
ikke bare gjør URL noen ganger change-- noen ganger er det ikke.
Faktisk filnavnet endres, men hva er fraværende fra URL
at vi fikk se siste gang med Google.
Yeah?
>> STUDENT: Ingen søkestrengen
>> DAVID J. MALAN: Det er ingen søkestrengen.
Det er ingen spørsmålstegn noe.
Det er ingen spørsmålstegn q lik katter, som vi gjorde forrige gang.
Og det er absolutt ingen spørsmålstegn Navnet tilsvarer
David eller dorm lik Matthews, så der er at alle kommer?
>> Vel, la meg gå tilbake til gedit her og åpne opp den første av disse filene
i min vhost, lokale verten, offentlig katalogen her og gå inn froshim0.
Så det viser seg at nesten alt på denne siden er bare HTML.
Og dette kan være ukjente for deg, men det snart vil være mer så med PSet 6
og PSet 7 og PSet 8.
Men dette er bare en HTML-side.
>> Og det interessante ting synes å være over her.
En form tag hvis handling attributt har en verdi på 0 register.
Det er derfor når jeg sender inn dette, går den til den filen.
Men metoden er annerledes today-- innlegg.
Så det viser seg at det er minst to metoder på nettet som benyttes
å sende informasjon fra nettleser til serveren.
Get setter den i nettadressen.
Post setter det andre steder.
Og når og hvorfor du kanskje faktisk ønsker et nettsted
å bruke innlegget så i stedet av få, bare intuitivt?
Hvilken som helst nettside.
Hva slags data skal sendes bare ved slutning nå via post i motsetning
å få, hvis vi har sett de to forskjeller?
STUDENT: [uhørbart] sikre.
DAVID J. MALAN: Hvis du vil noe å være sikker.
Så du kan skrive inn et passord inn i en webside, et kredittkort
inn i en nettside ville slag av disse suboptimal
hvis leseren sette det Verdien på innsiden av nettadressen.
Hvorfor?
Du ser den, noe som ikke gjør det synes å være en så stor avtale,
men oddsen er du ganske ofte gå borte fra datamaskinen eller bruk av datamaskinen
laboratorier, og så noen andre, eller til og med en romkamerat
kan enkelt gå opp og se at privat informasjon.
Når du sender en e-post via nettet, har du sannsynligvis
ønsker ikke at data ending opp i URL også.
Og så det er en rekke grunner hvorfor vi ønsker kanskje å sette det her.
Og photos-- rett, kan jeg ikke engang helt forestill deg hvordan du ville ta en grafisk,
som en JPEG, og sette det inn i en URL.
Du kan gjøre det.
Det finnes måter å kode det, men det er bare ikke grei sånn.
>> Så registrer 0 er faktisk veldig uimponerende.
Alle sier det bokstavelig talt er dette.
Den skriver ut på innsiden av noen HTML tags følgende.
Jeg har en PHP kode her nestet inne i en pre tag.
"Pre" betyr bare pre-formatert tekst, mono linjeavstand, som en skrivemaskin.
>> Printr er en utskrift rekursiv funksjon.
Og så er det dette interessante her.
Og vi vil komme tilbake til dette fordi det finnes andre,
men dollartegn strek post synes å være
en variabel i PHP som noe du sender fra nettleseren til server
blir lagret for deg.
Og vi får se hvordan å få på denne informasjonen før lenge.
>> Men først, la oss gå tilbake til et litt annet eksempel.
Går inn register-- eller heller, froshims1.php,
som ser litt annerledes ut.
Jeg tok litt mer innsats med formatering,
selv om det er fortsatt ganske stygg.
Men jeg kommer til å gå videre og skriv inn "David" nå.
Male.
Vi skal sjekke "captain" denne gangen.
Vi vil gjøre Matthews.
Og registrer deg.
>> Og denne gangen står det, hm, egentlig ikke.
Greit, så hva registrera en?
La meg gå inn i åpent register en og-- hm.
Greit, så dette er interessant, og denne
er et springbrett nå mot mer interessante programmer.
>> Legg merke til toppen av denne filen har en PHP-koden samt noen kommentarer.
Og disse er, for nå, en distraksjon så la oss bare bli kvitt disse kommentarene
akkurat som de er i C. Og jeg hevder med denne mengde koder med en kommentar
at denne koden er validere innlevering.
>> Vel, det viser seg at variabler som dollartegn
strek innlegg er kalt super globals.
De er som disse spesielle globale variabler
som er like omni-dag tilgjengelig i programmet.
Og du kan bruke hakeparentes notasjon å indeksere inn i dem ikke med tallene
som 0, 1, 2, 3, men faktiske ord.
>> Så du kan tenke på dollartegn strek innlegget som en slags hash table
at du kunne passere en nøkkel inn i, et oppslag ord i mellom hakeparentesene,
og det kommer til å gi deg tilbake verdi som brukeren faktisk gis.
PHP har en funksjon heter tom at bare
sier ja eller nei, dette variabelen er tom eller ikke.
Vi har disse doble barer, noe som bare betyr eller, som i C.
>> Så i praksis, er denne linjen fire like si hvis brukeren ikke gi et navn
eller ikke gi et kjønn eller ikke gi en sovesal, gå videre og omdirigere ham
eller henne via denne linjen her.
Så dette er en litt kryptisk, men dette betyr bare bokstavelig talt
gå tilbake til dette stedet, så det punter brukeren
tilbake til uansett hvor han eller hun kom fra.
Men det er litt uelegant i at jeg hardkodet det.
>> Men hva om dette hvis tilstanden vurderer ikke å true?
Hva hvis brukeren ga meg sin eller hennes navn og dorm og kjønn?
At hvis tilstanden ikke er kommer til å vurdere å true,
så jeg ikke treffer avkjørsel i linje 7.
Så hva skjer?
Og dette er hva som er interessant om PHP.
>> Du kan slippe inn og ut av PHP-modus, så å si.
Hvis du vil ha litt kode for å utføre, du kan åpne og lukke et PHP tag
og sette kode der som jeg har gjort her.
Så snart du lukker PHP-koden, serveren
bare kommer til å spytte ut hva du putter der.
Og ja, dette var en del av den opprinnelige utformingen av PHP,
for bedre for verre, var dette commingling av kode og markup
språk.
Og vi vil se at dette svært raskt tilfaller inn i en rot.
Og så vi vil gjøre det bedre enn dette til slutt, men bare
legge merke til den enkle som jeg er faktisk i stand til å utføre en viss logikk.
>> Men fortsatt litt uimponerende.
La oss åpne opp versjon to av Frosh direktemeldinger, noe som
tilsynelatende underkaster seg register2.php.
Så denne filen som faktisk skjer å ser nesten den samme.
Jeg kommer til å gå til Frosh direktemeldinger to.
Men i Frosh direktemeldinger 2, la oss se hva som skjer.
>> David, klikk på knappen, så det heter; Matthews, ingen kaptein.
Registrere.
Du er registrert.
Ikke egentlig.
Å vente, vi bare gjorde som eksempel, gjorde vi ikke?
All right, stand by.
Vi vil gjøre de tre.
Helt klart noe handler om å skje med Gmail.
Vi vil komme dit.
>> Så Frosh direktemeldinger 3 ser slik ut.
Ikke annerledes.
Men når jeg gjør David, male, Matthews, og registrere, denne tredje og siste versjon
krav, ganske enkelt, du er registrerte egentlig.
Det er liksom uvesentlig.
Men jeg hevder med dette tredje og siste versjon
Jeg har nå gjenskapt nøyaktig hva min romkamerat og jeg bygget for Frosh direktemeldinger
program år siden.
Og det var enkelt.
Det var ingen database, ingen Excel-regneark.
Men enda viktigere, Det var ikke mer papir
fordi det vi gjorde med dette programmet var å faktisk email Proctor, som
var tidligere mottak disse tingene via skjemaer.
>> Og tilsynelatende vi har programmert dette i en slik måte at når noen registrerer,
John Harvard konto e-poster proctor-- eller i seg selv i dette tilfellet
John Harvard-- med følgende text-- "Denne personen bare registrert."
Navn er David, er kaptein blank; kjønn, mann; og dorm, Matthews.
>> Så hva skjedde der?
Vel, den aktuelle filen her er tilsynelatende register3.php.
Og hvis jeg åpner denne, vil du se både makt kode som dette
og også, for å være ærlig, den usikkerhet av et system som e-post.
Jeg har nettopp effektivt lot til være John Harvard på følgende måte.
>> Jeg har den åpne php tag opp toppen, som bare sier her kommer noen PHP-kode.
Her nede, viser seg at det er bibliotekene i PHP.
Du trenger bare ikke å Inkluder overskrift filer som mye.
Du får mer med kjøkkenbenken, så å si.
>> Men denne gangen i linje 4, gjør jeg ønsker å spesialbibliotek kalt
PHP mailer, som er noe du kan installere gratis i mange systemer.
Ned her jeg validere innlevering bare
ved å sjekke gjorde brukeren gi meg et navn, et kjønn og en sovesal.
Og hvis så, gå videre og instantiate en mailer.
>> Du kan tenke på dette som en linje med kode som bare tildeler.
Det er som malloc, men det er litt mer sexy
i at du nevner ikke bare malloc og noen generiske nummer.
Du sier gi meg en av disse, gi meg en ny en av disse.
>> Og hvis du har programmert i Java eller C ++ eller andre språk,
du kanskje har sett dette.
Men den korte av det, hvis ukjente, denne linjen
setter inn dollartegn post en spesiell struct kalt
et objekt som har innebygd e-post-funksjonalitet.
Og faktisk, merke og lignende syntaks.
>> Dette er ikke en peker, per se.
PHP bruker akkurat den samme syntaks.
Denne linjen sier bruk SMTP-- Simple Mail Transfer
Protocol, som er akkurat den protokoll som brukes til å sende e-post.
Dette er å spesifisere bruk Harvard SMTP-server, som
er et sted her på campus.
>> Dette sier hva TCP portnummer å snakke med,
og jeg bare funnet det ut ved å googling eller ved å spørre help desk.
Og da fordi Harvard bruker noen systemsikkerheten på mail server--
i det minste å kryptere trafikk mellom deg og det,
selv om alle kan sende til it-- Jeg kommer til å slå på TLS-protokollen
for å holde dette sikkert.
>> Men det er her ting bli litt skummelt.
Jeg kan bare vilkårlig si at jeg er jharvard,
og jeg kan bare vilkårlig e-post til meg selv her.
Og så kan jeg angi en lagt med denne linjen her.
>> Og dette ser bare stygg, men det er bare en haug med sammensetning.
Det viser seg at PHP har en super nyttig symbol, som noen språk, dot operatør,
som bare bokstavelig Setter sammen strengen etter at strengen etter streng,
og du trenger ikke å malloc eller figur ut den totale lengden av strengen.
Du bare gjør det.
Og faktisk, fordi jeg concatenating i alle disse tingene med disse prikkene,
det er derfor den e-posten jeg sendte så ut som det gjorde.
>> Og så til slutt her, jeg sender mail.
Så hvis dette er usant, Jeg bare kommer til å dø,
som er en funksjon som bare utskrifter til skjermen enkelte feilmeldingen.
Men det er i virkeligheten ringer av sendefunksjonen.
Ellers, hvis alt dette mislykkes, den omdirigerer meg tilbake hit.
>> Og hvorfor gjorde jeg ser at Jeg er registrert egentlig?
Vel, det skjedde akkurat her.
Så jeg tar dette opp for et par grunner.
>> En, er dette nøyaktig hvordan hvis du bygger noen nettside for et avsluttende prosjekt
eller for den virkelige verden, er dette hvordan du sender e-postpåminnelser
til dine kunder eller abonnenter.
Dette er hvordan du sender passord påminnelser.
Dette er hvordan du sender folk meldinger at de har en ny Facebook
Meldingen påvente eller noe sånt.
>> Men det taler også til det faktum at dette kunne
har vært veldig bra fra Davin eller noen andre.
Og jeg sier denne typen med et smil fordi jeg er
helt sikker på hva som skjer gjennom flere av deres sinn på dette punktet.
Men dette er en av de som gjør som jeg sier, ikke som jeg gjør slags ting,
fordi det er trivielt å smi e-poster som dette.
Men som du kanskje har sett eller lese i Crimson,
i det siste er det også ganske trivielt for folk
å spore dem tilbake til en viss opprinnelse.
Og spør meg litt tid, kanskje på CS50 lunsj, hvor jeg først
ble kjent svært tett nesten til ed bord mange år
siden da jeg oppdaget hvordan internett fungerte.
Så i noen case-- litt etter ed styret gjorde.
>> Slik at i alle tilfelle, er det en hel haug med super globals,
som de kalles her, hvorav den ene vi saw-- dollartegn strek innlegg.
Det er et motstykke heter get, som er der ting fra en URL
ender opp med å gå.
Og det er en hel haug med andre, også-- session og server og cookie.
Vi vil komme tilbake til cookie en annen gang,
men økt er slags kult fordi akkurat now-- inntil now--
alt vi har gjort med en nettleser er liksom statsløs, så å si.
Jeg kan klikke rundt, tilgang filer på serveren, noe
skjer på skjermen, men er forbindelsen lukkes.
Internet Explorer eller Firefox-ikonet slutter å spinne
og du bare se hva at nettsiden inneholder.
>> Så HTTP er statsløs i at når det er en forbindelse,
får noen data, det er det.
Ingen flere tilkobling, i motsetning til Skype, i motsetning til Facetime, i motsetning Gchat, som
opprettholder en konstant tilkobling til tjeneren.
Nettet er fundamentalt frakoblet, men vi vil
se før lenge hvordan Vi kan simulere ting
som Facebook chat og Gchat, som opprettholder en illusion--
eller faktisk gjøre opprettholde en konstant tilkobling ved hjelp
mer moderne teknologi.
>> Men hvis jeg går til, sier counter.php, Dette er et annet enkelt eksempel,
som vi skal se, som tenker i dag Jeg besøkte stedet null tid.
Men hvis jeg bare laste siden på nytt, det liksom vet at jeg var her før.
Hvis jeg laster igjen, det vet at jeg var her før.
Og igjen og igjen og igjen og igjen.
>> Så det er noen pluss-plussing skjer, men varsel
den lille tingen spinner aldri så kort opp toppen og deretter kobler ut,
så det er ikke som jeg har en konstant tilkobling til apparatet.
Vel, hvis jeg går inn counter.php, merke til hvor enkelt det er.
Jeg først kaller denne spesielle funksjon som vi snart
begynne å ta for gitt kalles session start.
Start en økt.
>> Og en økt heretter er bare kommer til å bli en bøtte, som en handle
kurven der du kan sette verdier og hva slags tillit som programmerer
at de kommer til å være her når at brukeren kommer back-- et sekund
senere, en time senere, enda et år senere, så lenge han eller hun ikke forsvinner
sine informasjonskapsler, som vi vil til slutt se.
Og nå har jeg bare en om tilstanden her.
Så hvis følgende nøkkel, kalles teller, er satt inni
av denne super global-- denne hash tabell, hvis du will-- kalt sesjon,
deretter gå videre og ta tak i verdi fra session-- tenke
på dette som et kjøpesenter cart-- og lagre det
i en midlertidig variabel kalt telleren.
>> Ellers, hvis denne verdien telleren var ikke satt i den såkalte handlekurv,
bare initialisere den til 0.
Til slutt, her nede, gå og sette tilbake inn i handlekurver eller økten
verdien av en teller.
Så det viser seg at dette spesiell beholder her--
som, igjen, er en av disse forbundet matriser, en matrise som du kan indeksere
inn ord i stedet for numbers-- vedvarer selv etter at brukeren går bort.
Igjen, vil jeg gå tilbake til siden nå.
Det har vært et minutt eller så.
Men det husker at jeg har vært her 19 ganger før.
Dette er mitt 20. besøk.
>> Og så dette kommer til å være nøkkelen til implementere hvilken som helst nettside som husker
at du er logget inn, at du setter noe bokstavelig i handlekurven
å kjøpe eller at du har noen antall meldinger som venter.
Hver gang du vil huske informasjon,
vi vil se at PHP, som flere andre språk,
gir oss med denne illusjonen av staten selv om, som du vil se i PSet 6,
som du gjør HTTP-forespørsler fra klient til server, det er det.
Når du kommer tilbake som respons, det er ingenting mer
kommer tilbake fra serveren som standard.
Men vi får se hvordan å omgå det.
>> Vel, la oss prøve å rydde opp litt.
Vi har sett noen ulike eksempler der.
Oh, og som en side, for de som er kjent eller ukjent,
av den grunn at den Frosh direktemeldinger eksempel gikk
fra å se virkelig stygg å slightly-- godt,
fortsatt ugly-- til svakt mindre stygg men fortsatt stygg
er fordi hvis vi ser på kildekoden her,
det viser seg at jeg har denne på toppen av filen.
>> Det viser seg at bootstrap er en av mange fritt tilgjengelige bibliotek der ute
som ikke eksisterer for programmeringsspråk alltid, men for CSS eller Java
eller HTML eller en rekke språk.
>> Og disse folkene her-- opprinnelig kom ut
av Twitter-- bare ha en hel haug med stiler.
Det er en massiv fil her at noen skrev,
eller noens skrev over tid som spesifiserer farger og formatering
og whatnot slik at jeg kan slags låne deres syntaks
og ikke trenger å finne ut hvordan å legge ut formen min.
Dette er også minified slik at en datamaskin kan
forstå det, men ikke nødvendigvis et menneske.
Så det er bare hvorfor stilisering det endret.
>> Men la oss nå gjøre det bedre i form av design,
fordi hvis vi holde nede denne veien for lenge,
koden vår kommer til å bli rotete og Messier.
Så la oss fokusere på disse eksemplene her.
Den siste for i dag.
>> Så her er en superenkel versjon 1.0 av CS50 hjemmeside.
Den har kun linker til forelesninger og pensum,
og den bruker som sorterte liste tag-- UL tag som vi brukte forrige gang.
Og hvis faktisk, hvis jeg åpne opp Vis sidekilde,
vil du se at dette er veldig, veldig enkel HTML.
Og i virkeligheten, selv om dette er en PHP-fil under panseret,
det er fortsatt bare spytter ut bare HTML for nå.
>> Så hvis jeg klikker på forelesninger, vi se dette skje.
Og hvis jeg klikker på uken null, ser vi dette.
Og hvis jeg klikker på Onsdag, ser vi dette.
Og dette tilsynelatende var PDF lysbildene fra den dagen.
Alt jeg har gjort er link med en ankerkoden til denne nettadressen her.
>> Så dette er bare for å si at dette er en ganske enkel versjon av CS50 hjemmeside.
La oss se hvordan det er implementert.
Hvis jeg går inn i mvc0 katalog, vi får se noen filer.
Den ene er en README, så hvis noe av dette er for rask,
du kan bare rote rundt mer bedagelig senere.
Og legg merke til her er en index.php fil.
Det viser seg at hvis du selv, det menneskelige,
spesifiserer ikke et endelig navn i en URL, webserveren vanligvis
infers noen standardnavn for deg.
En indeks dot noe er generelt standard.
>> Så det er derfor et øyeblikk siden da jeg besøkte denne nettadressen her,
noe filnavn, ingen fil forlengelse, ingen periode i nettadressen.
Det bare visste en eller annen magisk å lete etter index.php.
Det er bare en konvensjon.
Kan kalles noe.
>> Så hvis jeg nå går inn index.php, vil du se
at indeed-- la oss kvitte seg med kommentarene
her fordi det er egentlig noe interessant å it--
dette er bare hard kodet HTML.
Så det er konsekvent, skjønt, med min påstand
at du kan blande HTML og PHP.
Det er ingen faktiske programmering logikken her.
>> Og de andre filene er pen mye like uinteressant.
Det er bare hardkodet uke en her til uke én m og uke en w,
for mandag og onsdag.
Og så hvis jeg åpner opp uke null, merke til det er nesten identiske.
>> Og det er slag av en nøkkel takeaway.
Legg merke til hvor overflødige dette er.
Disse filene knapt endre, og ennå jeg trakk en av disse kopier / lim jobber
der jeg tok en file-- formodentlig i uke zero-- kopiert det
når uken kom rundt, og forskjøvet noen verdier.
Vi bør nok være i stand å gjøre det bedre enn dette.
>> Så la oss gå tilbake til MVC og går inn i en versjon.
Og legg merke til jeg har fått en få filer, fordi det
var felles for alle disse filene bare en øyeblikk ago-- hvis jeg går tilbake til versjon 0,
la oss gå tilbake til indeks, og bare postulate--
når jeg bli kvitt den comments-- hvilken del av denne siden
er antagelig i hver og en av filene mine?
Bare ring det ut.
Hvilke linjer er duplisert sannsynligvis på tvers av alle disse sidene?
Yeah?
>> STUDENT: [uhørbart].
>> DAVID J. MALAN: 1 til 9.
Ja, absolutt.
1 til 9, bortsett fra kanskje 8 endrer litt fordi CS50
blir forelesninger eller uke null eller noe.
Men nesten identiske.
Så alt dette er bare slags kopiert og limt inn.
Og det er et par andre linjer jeg kan tenke
av det er trolig identiske på tvers av alle filene.
>> STUDENT: 12 og 13.
DAVID J. MALAN: Yeah.
Jada, 12, 13, og 14 sannsynligvis, bare fordi den interessante ting
som skjer på linjene 11 og 10, så det ville virke.
Så la oss se på versjon 1, som forsøker å forbedre på dette.
I versjon 1 av denne MVC example-- vil vi forklare hva MVC midler i en moment--
hvis jeg går inn i indeksen, den slags ser litt forvirrende nå.
Det er ikke fullt så enkelt som før.
>> Men når du begynner å les den nøye, er det
ganske grei hva det gjør.
Tilsynelatende linje 1 og linje 8 har erstattet
alt av ting du bare identified-- men bare for godt mål,
Jeg forlot ULS det bare i tilfelle noen dager ikke har en liste over ting.
Og så krever er typen som pound inkludere i C. Den kopierer og limer
innholdet effektivt akkurat her i denne filen.
>> Så i header.php, som du kan slutte fra navnet sitt,
kommer til å være overskriften på siden.
Det er en slags foreldreløse her.
Den har bare den øverste til det, men det er ikke mer innhold nedenfor.
>> Og hvis jeg ser på bunnteksten i mellomtiden, som var den andre filen mentioned--
dette er enda mindre interessant, men igjen, det er vanlig å alt.
Så dette er bunnteksten.
Dette er overskriften.
Dette er filen som er endring, så hvorfor ikke
prøv å faktor ut alminnelighet med disse to linjene her?
>> Men vi kan rense dette opp litt videre.
Jeg kommer til å gå videre og åpne opp versjon to der
vi vil se at det er en ny fil, helpers.php.
Vi får se hva som er i et øyeblikk.
La oss gå til indeks, som inngangspunkt som før.
>> Og nå merker jeg krever helpers.php, ikke topp- eller bunnteksten.
Men hjelpere er typen som helpers.c og helpers.h fra PSet 2
eller PSet 3 lenge siden når du faktisk fant søke og finne for at PSet,
og du hadde alt av koden din for sortering og søke i en egen fil.
Det er det som skjer her.
>> Og nå linje 3 ser litt annerledes.
Og det er bare én linje.
For å gjøre dette enda mer klart, jeg kunne bare
gjør dette for å være stilren med alt annet vi har gjort.
Men det er egentlig ikke å endre funksjonaliteten.
Det er bare én linje av fast kode.
>> Angivelig, det er en funksjon et sted kalt gjengi header,
Og det er her ting bli ganske kraftig.
Legg merke til at innsiden av sine parentes er det andre stykke syntaks?
Det er nok litt vanskelig å si, men merke there's-- Jeg skal sette noen hvit
plass.
Det er hakeparenteser.
>> Og klammer vi så litt siden i sammenheng med assosiative matriser
som er, igjen, som hash tabeller.
Og hvis du tror nå til C, den rekkefølgen av argumenter i en funksjon
må alltid være den samme.
Du må huske hva bestille er-- x, y, z eller z, y, X-
og du må alltid gi dem i samme rekkefølge eller se dem opp
hvis du har glemt.
>> Men dette synes å være en smart måte av passerer en vilkårlig nøkkelverdi
parene der tittelen er navnet av et argument i dette tilfellet
og CS50 er dens verdi.
Og det faktum at jeg har disse hakeparenteser
her betyr at jeg kunne også passere i noe
som en uke er 1 eller 0 eller 2 eller 3.
Så vi har parameterisert denne funksjon på en slik måte
at det kan ta flere innganger, men for nå er det bare den ene.
>> Hvis jeg nå går inn helpers.php, merke til hva det gjør.
Dette er en liten bit av ny funksjonalitet,
men for nå bare ta på tro at dette er
syntaksen som du definere en funksjon i PHP.
Du bokstavelig talt si funksjon.
Du trenger ikke angi en avkastning skriver, og det er konsistent
med variabel detalj tidligere der du egentlig ikke sterkt skriver.
>> Dette angir bare som, som standard, dette
tar en assosiativ matrise som et argument.
Og vet du hva?
Hvis brukeren ikke består en i, antar en standardverdi.
>> Dette er en funksjon som C ikke har for oss, som er fint, for nå
data, selv om du ikke gi den noe,
kommer til å bli en matrise men en tom en.
Og som en side, ekstrakt bare gjør noe funky
hvor det tar alt av nøklene fra dette assosiativ array, alle de tingene
du kan sette i hakeparentes, og skaper variabler ut av dem
slik at vi kan til slutt ha tilgang til dem i footet.php og header.php.
Det er litt abstrakt, så la meg påpeke dette.
>> I index.php, merker at jeg er passerer i en nøkkelverdi par tittelen
med en verdi på CS50.
Hvis jeg nå ser på helpers.php, merker at RenderHeader
Utvinner at data som jeg har bestått i, og deretter krever header.php.
Det jeg har gjort er liksom en fattig mann implementeringen nå av følgende.
>> Hvis jeg åpner opp header.php, merke til at jeg har ikke lenger vanskelig
kodet ordet CS50 i denne header-fil.
Jeg har satt dette riktignok atrociously oppkalt funksjon, HTML spesialtegn,
der inne.
Men legg merke til hva jeg har gjort.
Jeg har åpent HTML.
Jeg da ha åpent hode og åpen tittel.
>> Og deretter på innsiden av tittel største åpne og nære koder, jeg har en bit av PHP-kode.
Og dette er en fin, men av syntaks, noe som betyr bare ekko ut.
Det betyr bokstavelig dette-- ekko following--
men dette er mer sexy å skrive.
Ekko ut tittelen som er blitt vedtatt i.
>> Men hva tror du HTML spesielt røye handler om,
spesielt hvis du har noen tidligere HTML-opplevelse?
Hvilke tegn kan være farlig å passere på en side
hvor du dynamisk generere websiden med kode som dette?
La meg gå til denne filen, versjon to, og se om jeg ikke kan indusere dette.
>> Versjon to er dette.
Og legg merke til alt er greit, fungerer bra.
Men sett at jeg går inn i index.php og Jeg presiserte at tittelen på siden min
er ikke CS50.
Den er åpen brakett script varsling hello world, nær enkelt sitat,
parentes, semikolon, åpen brakett, slash script.
>> Script, som vi vil slutt ser, er en tag
som du kan bruke til å bruke en annen programmeringsspråk kalt
Java innsiden av en web-side.
Og nå merker logikken her.
Her er en nøkkel kalt tittel.
Her er det er gal lenge verdien nå.
>> Men hvis jeg går til hjelperne side- eller rettere sagt, øverst på siden,
Jeg ringer denne funksjonen på den tittelen først.
Så hvis jeg nå laste denne siden, jeg se denne, som ser latterlig,
men det er trygt.
Det ser bare dumt.
>> Men sett i stedet Jeg hadde glemt dette.
Og merk mine ord, en nonzero nummer av dere vil glemme å gjøre dette
og du vil få noen flittige student eller venn kommer opp
til deg på CS50 rettferdig eller anonymt om natten poking rundt på nettstedet ditt
og i hovedsak injisere kode ukjent for deg inn på nettstedet ditt
en eller annen måte.
>> Fordi hvis jeg bare spytte ut tittelen her og tittel
det-- vel, hvis tittelen bokstavelig ser ut som dette og PHP
som et språk som kan spytte ut andre språk tekst,
Dette er bokstavelig talt går å erstatte dette merket med,
selvfølgelig, hva jeg satt andre steder.
>> Så hvis jeg nå gå her og oppdater etter løsne disse sikkerhetsmekanismer,
nå har jeg hallo verden her.
Nå det er ikke alle som stor av en avtale, men du kan gjøre noe
litt mer skadelig her, som det er
andre tags-- så vi får se når vi bruker mer tid i JavaScript-- som plassering
dot href blir, sitat, unquote, HTTP business.com, men det motsatte av det
fra den andre dagen.
Og nå kan du indusere en web side å faktisk gå umiddelbart
til denne nettsiden her.
>> Og faktisk, jeg ønsker ikke å selv gå til business.com
fordi jeg ikke ønsker å vite hva det er.
Men også dette vil utløse kode som skal injiseres inn i denne side.
Så dette er bare å si at selv om vi innføre super tidlig på noen
av disse mer komplekse strukturer, det er alle mot en slutt for å sørge
at koden kan ikke utnyttes.
>> Så nå en tredje versjon her.
Det begynner å bli en litt mer avansert.
Jeg gjorde egentlig ikke like-- anal side av meg
var å få litt irritert av faktum at jeg hadde en funksjon som heter
RenderHeader og RenderFooter som var nesten identiske.
Så det slo meg, hvorfor gjør ikke Jeg parameterize disse funksjonene
til bare en som heter gjengi, har det ta andre argumentet
som navnet på malen, det endelige å render-- enten topp- eller bunntekst?
Og så eventuelt, hvis jeg vil å passere i noen viktige verdi-par
som jeg gjør om tittelen for header, men ikke for bunnteksten,
Jeg kunne gjøre det.
>> Og så nå hvis jeg går inn helpers.php, det er litt mer komplisert.
Og jeg skal vinke hendene mine på detaljer, men det er bare én funksjon.
Så det er et skritt mot et bedre design.
>> Vi kan ta dette ett skritt videre.
Hvis jeg går inn i min fjerde versjon av denne, merker nå
at jeg gjør noe enda mer slags kryptisk.
Og jeg vet at dette er en masse for å absorbere på en gang,
men vi er bare snill med å rydde ting opp.
Nå er jeg sette mine hjelpere filen i en mappe som heter
includes-- bare en vilkårlig nevne hvor jeg ønsker å sette ting
at jeg ønsker å include-- og deretter resten av denne er den samme.
>> Men hvis jeg ser nå i gedit, merke til at jeg har fått kvitt
av alle de andre filene, og jeg har flyttet dem, for eksempel inn på her.
Og så maler, Jeg har denne her også.
Og så dette er alle nå mot et skritt ved hjelp av en mye bedre design mønster.
Og vi er veldig raskt kommer til å bevege seg bort
fra PHP standardfunksjonalitet, som vi startet her med,
der du bare blande PHP, og HTML, og CSS,
og du bare spytte det ut og du går om din vei.
Det kommer ikke til å være svært vedlikeholdsvennlig.
Akkurat som i C, begynte vi å bruke flere filer og flere funksjoner
og facto ting som ut.
Vi vil gjøre det samme her.
Og faktisk, i det femte og siste versjonen her, jeg gjorde en annen ting.
Du kan også bruke dot dot, som, igjen, er bare den overordnede katalogen.
For å være enda mer sikkerhetsbevisste, fordi hvis jeg ser på lytting
her for femte og siste versjon, varsel at jeg har en katalog her kalt
publikum, og deretter på samme nivå, så å si,
Jeg har fått inkluderer og maler og deretter som tekstfil readme.
>> Og grunnen til at jeg har strukturert det liker dette-- og så mange web
verter, spesielt de $ 5 måned de eller $ 10 i måneden enere,
hvis du noen gang har hatt en av disse services-- hva så mange av dem gjør
er de forventer bare at du skal dumpe alle av dine filer til en katalog,
som vi gjorde allerede med dette aller første eksempel.
>> Men så snart du begynner å bygge mer sofistikerte steder som bare lagrer
data du bryr deg om og filene du bryr seg om, faktisk organisere ting
riktig måte og med mer sikkerhet bevissthet i tankene kan
vi begynner å forsvare mot alle de venner
at du har enten i eller utsiden av denne klassen som,
så snart du begynner å lage programmer selv på nettet,
kommer til å begynne å plukke på deg og på dem.
>> Og så vil vi se slutt på dette designet.
Dette er bare et bilde som avbilder det følgende.
Vi kommer til å legge all vår programmering logikk i en eller flere filer,
og vi kommer til å bare starte kalle disse kontrollerne.
Det er der hjernen til våre nettsteder faktisk er.
Så skal vi til har utsikt, og utsikt
er så enkelt som bare separate files-- kalles maler, ofte.
De har akkurat den estetikk siden min,
hva jeg vil at siden skal se like-- fargene og oppsettet
og stillingene alle variablene.
>> Og så mer interessant at vi vil til slutt komme til
er modellen, som kommer til å være like ordet vi sleng på andre teknologier
at vi bringer inn i bilde, som faktiske databaser,
slik at når du vil for å lagre informasjon,
du trenger ikke bare å sende en e-post til Proctor eller til deg selv,
du faktisk lagre den i en database bruker et annet språk som kalles SQL.
Og så vi vil forlate her i dag og plukke opp med dette på onsdag
og introdusere databaser da.
>> [MUSIC SPILLE]