>> [Musikken afspilles]
>> DAVID J. MALAN: Okay.
Dette er CS50.
Dette er starten på uge otte.
Og du husker måske, at vi slap sidste gang at kigge på et nyt sprog
helt.
I virkeligheden, en, der er forholdsvis let og det er ikke engang
et programmeringssprog.
Det er et kodesprog, der lader os faktisk strukturere og gøre websider.
Og når du noget andet sammenholdt med denne--
eller du snart vil, hvis du ikke allerede har.
Vi kommer til at bruge Cascading Style Sheets, eller CSS, som
er en anden type sprog med egenskaber og værdier
det kommer til at lade os gøre tingene gerne ændre farven
og ændre placeringen og disse former for tweaks.
Men i dag og fremefter, vi begynder at fokusere på mere kraftfulde sprog,
faktiske programmeringssprog som PHP.
>> Så PHP har eksisteret i nogen tid.
Og som du kan se, det designet primært
tidligt for faktiske bruge i webudvikling
og faktisk genererer websider.
Så hvad slags funktioner gør et sprog
behov for at gøre web sider dynamisk med det?
>> Med andre ord, hvis du ønsker at generere indhold dynamically-- ligesom Facebooks
Nyhedsfeed, som ændrer sig hele tiden, eller chatbeskeder, der dukker op fra tid
at time-- ligesom hvad er central del af funktionalitet
du behøver i et programmeringssprog der ville lade dig dynamisk
udskrive nye oplysninger til skærmen?
>> STUDENT: Kode.
DAVID J. MALAN: Kode.
OK.
Vi vil tage det.
Lidt mere præcis.
Jeg mener, vi kunne gøre dette med C, helt ærligt.
Det ville være en smerte i nakken.
Men-- er dette engagement?
>> STUDENT: Ja.
Variabler, måske?
DAVID J. MALAN: Variable.
OK, helt sikkert.
Variabler kan helt sikkert hjælpe os ud.
Og endda noget enklere.
Vi brugte det i den allerførste program af den allerførste dag
når vi rent faktisk sagde "Hej verden".
>> STUDENT: Udskriv.
>> DAVID J. MALAN: Print, right?
Print eller printf i verden af ​​C. Så al den tid,
vi har haft på vores rådighed en language-- C,
i particular-- og endda Scratch for den sags skyld
kan generere tekststrenge.
>> Tja, hvis HTML, som vi så i sidste uge, er bare en hel masse tekststrenge
omend med åbne konsoller og lukket beslag og en slags rim
og årsagen til det, ja så kunne vi virkelig
begynde at generere websider enten manuelt ved at skrive dem ud i gedit
eller i Microsoft Word, for det matter-- vi bare brug for en tekst editor.
>> Eller vi kunne skrive kode, til dit forslag
tidligere, vil, lad os dynamisk generere HTML,
og det er, hvad vi vil at begynde at gøre med PHP
og i sidste ende selv med en sprog kaldet JavaScript,
er at bruge et sprog til at generere en anden.
Og ja, det er, hvad Facebook og mange, mange andre steder
gør faktisk dynamisk vise nye oplysninger til dig.
>> Så lad os begynde med denne-- a kryptisk leder linje, men en
det er faktisk temmelig stærk.
Hidtil har vi været ved hjælp af C, som er en kompileret sprog.
Og kun en hurtig recap-- en kompileret sprog har hvad karakteristisk?
Du selvfølgelig nødt til at kompilere det, men hvad betyder det?
Ja?
>> STUDENT: Det skal være samles til maskinkode.
>> DAVID J. MALAN: OK.
Det skal samles til maskinkode.
Så du tager din kildekode, som er en slags engelsk-lignende.
Du konvertere det til noget lavere niveau,
som i sidste instans kaldes objekt code-- 0'er og 1'er.
Og det er disse 0'er og 1-taller, der en CPU, ligesom dem fra Intel,
faktisk forstår.
>> Nu, PHP og Python og Ruby og JavaScript og klaser af andre
sprog er ikke kompileret sprog, men fortolket sprog,
hvilket betyder, at du bare skrive dem og derefter du behøver ikke gøre dem til 0'er og 1'er.
Man i stedet bare give derefter som input til en andens program,
kaldet en tolk.
Og denne persons Programmet er udformet
at forstå, hvad hver hver symbol i Python eller PHP
eller Ruby eller en række andre sprog betyder.
>> Og så alt hvad vi behøver er noget som dette.
Så i virkeligheden, vil jeg gå over til apparatet
her, bare i en hvilken som helst gamle vindue, og vi er
kommer til at gå videre og åbne en fil kaldet, siger hej.
Nu tidligere, jeg kunne have reddet dette selv med en filtype,
men jeg har tænkt mig at gøre noget endnu enklere her.
Jeg har tænkt mig at gå videre og begynde denne fil med dette kryptiske syntaks.
Så "bruger, bin, ENV, for miljø, php. "
>> Dette er blot en linje kode, der er vil fortælle mit operativsystem,
gå finde i din lokale miljø uanset hvad det er,
uanset hvor PHP is-- den interpreter-- og gå videre og bruge den tolk
at fortolke følgende kode.
Nu, dette er slags en grim funktion af PHP.
Men i dette sprog enhver gang du skriver PHP kode,
du nødt til at have en af ​​disse grimme PHP tags afgrænser begyndelsen
af din code-- <? php.
>> Men under her, kan jeg nu gøre noget ganske enkel, ligesom printf hello komma
verden backslash n tæt citat tæt parentes.
Og så bare for god foranstaltning, jeg har tænkt mig
at gå videre og tæt min php tag herovre
så alt ser pænt temmelig udskrives.
>> Og så snart jeg klikker på Gem, gedit er faktisk smart nok
se på det allerførste linje og indse, åh, du skriver PHP-kode.
Lad mig syntaksfremhævningen det med farverne
her, så det står ud af lidt mere.
Men nu har jeg tænkt mig at gå ned til min terminal vindue.
Jeg vil zoome ind.
>> Dette program blev kaldt "Hej," så jeg har tænkt mig at gøre dot skråstreg hej,
men tilladelse nægtet.
Og bash.
Vi faktisk hørt om det ting et par uger siden
i forbindelse med Shellshock, en af ​​disse fejl.
>> Men Tilladelse nægtet vi har set før, måske i en anden sammenhæng.
Er der nogen huske, hvordan du måske reparere noget
hvor tilladelse nægtes som denne?
Hvad er kommandoen, i det mindste?
>> STUDENT: Chmod.
DAVID J. MALAN: Ja, chmod, til at ændre tilstanden af ​​en fil.
Og du vil få alle de mere bruges til denne næste uge med et efterfølgende problem
indstillet.
Men for nu, jeg kommer til at ændre tilstanden ikke at kunne læses,
men at give alle executeability privilegier, evnen
at køre denne fil.
Og jeg har tænkt mig at tildele at til filen hej.
>> Hvis jeg nu gøre dot skråstreg hej indtaste, du se, i virkeligheden, mit program, hello verden.
Og hvad skridt gjorde jeg tydeligt springe helt?
Kompilering.
Så jeg løb bare dette program ganske enkelt.
>> Og det viser sig, du kan gøre dette med en masse syntaks minder om C.
Lad mig gå ind til dagens kode, som jeg sætter ind i min vhost bibliotek
her, for rigtige grunde vi vil komme tilbage til.
Og jeg har tænkt mig at gå ind i, lad os sige, betingelser 1.
>> Og du vil se her, først og fremmest en hel masse kommentarer.
Men det er faktisk en genskabelse i PHP
af et program, vi gjorde i uge ét kaldet betingelser 1.c
hvor formålet i liv af dette program
er tilsyneladende at spørge brugeren for et heltal
og derefter gøre nogle fluffy analyse på det, hvorved
du sige, hvis det er positivt eller negativ eller lig med nul.
Og jeg bringer det kun op, fordi, bortset fra måske en lille detalje,
det er ikke til at skelne så langt fra C.
>> Hvad er en egenskab her, at måske springer ud
på dig som en lidt anderledes?
Måske to ting.
Ja?
>> STUDENT: Dollar sign n?
>> DAVID J. MALAN: Ja.
Så dollartegn n er til stede.
Og dollartegn, som vi vil se, går
at være en rettelse til begyndelsen af enhver variabel i PHP.
Det er både godt og bad-- gode i at det er en slags indlysende, hvad der er
en variabel, dårlig, at det er endnu en ting at skrive.
Og der er en anden ting, vi ikke har helt
set, i det mindste ved dette stavning. Ja?
>> STUDENT: Readline.
>> DAVID J. MALAN: Readline.
Readline vi ikke se sig selv i C, selv om der findes noget
lignende, men vi har brugt getString, og dette er dens modstykke.
Så hvis jeg går ind i denne mappen, som sker for at være,
som jeg vil forklare i en smule i min vhost mappe og min kilde En mappe,
og jeg gå videre og gøre dot skråstreg conditions-- whoops-- dot skråstreg
Betingelser 1, vil du se, igen, samme issue-- tilladelse nægtet.
>> Så lad mig zoome ind og gøre chmod et plus x på betingelser, dot skråstreg betingelser.
Jeg vil gerne have et heltal, please, 50.
Og vi kunne spille dette spil hele dagen lang.
Det kommer til at opføre sig præcis som den gjorde i uge et.
>> OK, så ikke så forskellig, undtagen ikke bare, at lille smule syntaks,
men foroven, jeg igen havde denne linje som
tillod mig at skabe noget, ligner et C-program kaldet hej,
kaldet forhold 1.
Men det er ikke 0'er og dem Jeg fuldbyrdende direkte.
Det er i stedet kører dette tolk, hvis navn
sker for at være identisk med sproget.
Programmet hedder PHP, og min kode under linje man er ved at blive ført ind i det.
>> Vi kan gøre en anden forholdsvis enkel eksempel minder om noget
vi gjorde uger siden.
Igen, dette er en slags vilkårlig luns af kode
der tilsyneladende gør hvad, når du kører det?
Hvad er det kommer til at udskrive, formentlig?
>> Så i første omgang på linie 16, er det vil sige x er nu 2, sandsynligvis.
% D er den samme som $ i for printf.
Så er det cubing, prik, prik, prik, på linje 17.
Og derefter linje 18 vises at kalde en funktion Cubed.
Og hvor er Cubed defineres?
>> Tja, det ligner i linje 25, så det er ikke så forskellig.
Jeg har fået nogle kommentarer ovenfor det, men for det meste,
det er en forholdsvis ligetil portering eller omstilling
fra C-programmet for PHP version.
Men der er nu et par forskelle, der måske skulle springe ud.
Hvad er anderledes ved, hvordan du kunne skrive samme program i C?
>> STUDENT: [uhørligt].
>> DAVID J. MALAN: Der er ingen prototype op øverst.
Så PHP-- og helt ærligt, en masse moderne languages--
er en meget smartere og mere nyttigt end C compilere, i, at du
kan sætte funktionen op her, du kan sætte en funktion hernede,
og tolken går til at gøre dig den tjeneste at læse
hele filen før den beslutter at en funktion ikke eksisterer.
Så rart forbedringer år senere.
Men der er også noget andet anderledes eller fraværende her.
Ja?
>> STUDENT: [uhørligt].
DAVID J. MALAN: Vi behøver ikke at erklære de typer af variabler,
så vi vil se inden længe at Der er forskellige typer i PHP,
men du behøver ikke at angive dem, som også er både gode og dårlige.
Og der er en anden ting mangler.
>> STUDENT: Der er ingen biblioteker.
>> DAVID J. MALAN: Der er ingen biblioteker.
OK, så det er rart.
Vi får meget mere ud af kassen.
Så der er faktisk en hel del mere ting, end jeg troede var anderledes.
Hvordan omkring måde tilbage?
Hvad er det?
Sig det en gang mere?
>> STUDENT: Pointer.
>> DAVID J. MALAN: Ingen pointers.
OK, i det mindste i dette eksempel nr.
Det er fair.
Så der er ikke pointers i PHP faktisk i almindelighed.
Der er noget, der hedder referencer, men vi vil ikke bruge for meget tid der.
Og hvad ellers?
>> STUDENT: Main.
DAVID J. MALAN: Main.
Så dette var biggie Jeg tænkte på.
Læg mærke til der er ingen vigtigste indgang.
Du skal blot begynde at skrive din kode.
Og det er faktisk vil være fordelagtig
når vi overgangen momentant til rent faktisk at bruge
dette samme sprog til web-baserede programmering, som vi
ikke ønsker at have bare én indgang.
Vi vil måske gerne have en flok Webadresser, en masse forskellige filer
alle tager i brugerens input og producerer output.
>> Men her er meget skidt eksempel, som jeg lovede sidste gang,
nemlig i denne mappe her, stavefejl.
Så i denne fil speller, som vi vil ikke bruge for meget tid på, er der
væsentlige en porting-- P-O-R-T. Det er bare ord gives, når, siger,
du konvertere fra et sprog til en anden manuelt normalt.
>> Dette er en overførsel af PC version af speller fra pset 5.
Og jeg hovedsagelig forsøgt at konvertere det linie for linie så tæt som jeg kan.
Så hvis du kan lide denne slags ting, det faktisk er værd på et tidspunkt
trække dem begge op ved siden af side og se, hvad der er det samme
og hvad der er anderledes.
Men de er temmelig darn ens.
Hvis du kan huske hvad speller selv lignede,
selvom du ikke gjorde nødt til at ændre denne fil,
det er temmelig ens strukturelt med blot et par
ændringer her og der.
>> Så dette er kun at sige, at det er temmelig ligetil at konvertere speller
fra C til PHP.
Men i ordbogen, er der noget endnu mere overbevisende.
Lad mig gå videre og skabe min egen dictionary.php fil.
Så lidt anderledes i det vi vil kalde det .php i stedet for .c.
Da dette er en PHP-fil, jeg do-- lidt annoyingly-- have
at starte filen med en php-tag som.
Og jeg har tænkt mig at gå videre og definere et par funktioner.
Funktion kaldet check, der er kommer til at tage i et ord som før.
Men dette argument er vil have en dollar
underskrive, fordi vi, igen, ved hjælp af PHP.
En anden funktion fra dictionary.c var belastning
og det tog i navnet på en ordbog, så jeg får denne funktion klar til at gå.
>> En anden i dictionary.c var hvad?
Størrelse var en af ​​de bedste dem på hvert fald hvis man holdt nogle variable rundt.
så størrelse bare har at returnere en variabel.
Og så var der unload.
>> Så der var disse fire funktioner i problem sæt 5
at du havde brug for at gennemføre med nogle datastruktur eller strukturer.
Så jeg lovede, at i PHP, kan vi erklære
en hash tabel, for eksempel, alt dette lettere.
I virkeligheden, hvis jeg vil have en hash tabel, Jeg bare kommer til at gå som det
og der er min hash tabellen.
Og det er den tone, nedslående, at vi slap sidste gang.
Og ved du hvad, hvis jeg ønskede en variabel for størrelse, godt,
denne ene ikke er alle så forskellige fra C,
men jeg har tænkt mig at gå videre og gøre det.
Og bemærk ingen datatype.
Og jeg vil gå tilbage senere og faktisk tilføje nogle kommentarer her.
Men hvad med belastning?
>> Hvis dollartegn ordbog er navnet på min fil
og jeg faktisk ønsker at indlæse ord til denne tabel nu,
Jeg kan faktisk gøre noget forholdsvis enkel.
En-- og dette er minorly annoying-- i PHP,
du nødt til at specificere inde af en funktion, hvis du
ønsker at få adgang til nogle globale variabel, der er defineret uden.
>> Men det er ikke særlig interessant lige nu.
Hvad er mere interessant er det for hver konstruere, som jeg nævnte sidste gang.
Og det viser sig, at PHP har en funktion kaldet fil, hvis formål i livet
er at åbne en fil og læse i alle sine linjer i et array
og udlevere dem tilbage til.
>> Hvilket vil sige, at jeg kan gøre ordbogen så at nu effektivt, når jeg kalder filen,
dette vil give mig tilbage en vifte af ord fra filen.
Det er ikke alt, god.
Det er stadig kommer til at være en linje af ord, noget lineær.
Men jeg kan gå videre og gentage over hver af disse ord ved hjælp af
at syntaks vi så kortvarigt sidste gang.
Og du vil se det mere i den kommende pset.
>> Men nu har jeg en løkke iteration over hvert ord i ordbogen.
Og på hver iteration, husker jeg kalde det aktuelle ord "ord".
Og alt det kommer til at tage til sætte et ord i ordbogen er
kommer til at være ord gæt "sandt".
Det er min insert funktion.
Det er min belastning funktion for min ordbog.
Nu er det lidt af en snyde, fordi ved du hvad, der er faktisk
backslash n er i slutningen af ​​ordene at jeg nok skulle slippe af med,
men det er ikke et problem, fordi PHP har en funktion kaldet chop, som bogstaveligt
hugger et tegn på den bitre ende.
Så ikke noget problem der.
Vi har gået videre og faktisk afkortet til netop dette.
Og nu skal jeg nok holde styr af størrelse, så lad os i det mindste gøre denne--
størrelse ++.
Jeg kan gøre det som før.
Og så er dette sandsynligvis vil fungere fint, så det er returnere sandt.
Udført.
Pset 5.
>> [Latter]
>> DAVID J. MALAN: OK.
Vi vil gøre det igen med den næste pset, også.
Så hvad med størrelse?
Nå, det ene forhåbentlig handler om som du ville forvente sidste gang,
selv om jeg er nødt til at gøre denne dumme global ting.
Det er bare et artefakt fra sproget design.
>> Men check er en smule mere interessant.
Så hvis jeg bestået i dollar underskrive ord, jeg først
ønsker at have adgang til at den globale variabel tabel.
Og nu, hvis jeg ønsker at kontrollere, om et ord er der,
Jeg kan blot sige, hvis det er sandt, at Følgende er angivet i tabellen,
derefter gå videre og retur sandt; andet, return false.
Udført.
Den anden halvdel af pset 5.
>> Okay, så igen, jeg er skære et par hjørner.
Retfærdigvis jeg bør formentlig bruge et par sekunder
om gennemførelsen heraf.
Og jeg burde nok ikke håne alle timer du lægger på pset så meget.
Så strtolower er en funktion.
Noget lignende eksistentialistiske i C, i det mindste for tegn,
men PHP har fået en hel streng version.
>> Det kommer til at tvinge alt til små bogstaver, som nogle af jer
kunne have gjort for at canonicalize hvad du lagde i din ordbog.
Og nu kan du gøre dette i C, også.
Dette har intet at gøre med PHP.
>> Men enhver tid du har en boolesk tilstand,
som noget på linje 10 er der, som kun
kommer til at vurdere, sand eller falsk, og din hvis ellers tydeligt
returnerer sandt eller falsk, kunne jeg simpelthen virkelig gøre dette sexet
og bare gøre noget som dette.
Så der er min check funktion.
Højre, hvis den Boolske returnerer en sand eller falsk,
lad os bare returnere det straks.
>> Og der er et par andre tweaks Jeg kunne gøre her og der.
Load-- losse, ved den måde, det er gjort.
Intet at gøre der.
Da alle hukommelsen i PHP og mange andre sprog
er faktisk lykkedes for dig.
Så mens det i C, som du har lært smerteligt,
noget du malloc eller calloc eller realloc, er du nødt til at befri dig selv.
Alt hvad du fopen, er du nødt til at fclose, således at ressourcerne i sidste ende er befriet
og værktøjer som Valgrind ikke lægge mærke til og ikke klage,
hvilket er en god ting at køre på dem.
>> Men sikkert, skal der være nogle fangst, right?
Ellers vi slags brændt en hel masse uger.
Så der er en række årsager hvorfor vi slags tage denne bane,
men der er et trade-off.
Right, har dette været tematisk.
>> Så hvad kan en trade-off her bevæger sig fra C til PHP?
Føles som alle vinder hidtil, bortset en smule grimhed her eller der.
Ja.
Hvad er det?
>> STUDENT: [uhørligt] hukommelse.
DAVID J. MALAN: Speed.
OK.
Nå, min hastighed var temmelig hurtigt.
Right?
Men hurtighed i udførelsen af ​​dette program?
OK, så det er en retfærdig punkt.
>> Så som det ville ske, jeg på forhånd cued op både min prøve løsning, den ene
Jeg havde på det store bord var en try-baseret løsning,
og jeg har det i denne mappe her.
Så jeg i et øjeblik, kan jeg gå videre og køre dette på King James Bible,
trykke Enter.
Og det er forhåbentlig korrekt implementering i slutningen,
giver mig tid i alt 0,38 sekunder for at
en noget arbitrær eksempel.
>> Og hvis jeg nu går ind i dette anden terminal vindue
her, hvor jeg første gang åbnede gedit, lad mig gå ind i dagens code-- som igen,
er i denne mappe her-- og lad mig gå videre og køre stavekontrol.
Så bare for at være klar, dette er PHP version.
Jeg er bare viser toppen af ​​det her.
>> Så hvis jeg gør speller af tilde CS50 Pset 5 tekster, King James, indtast.
Det er stadig hurtigere end at skrive det i C, men den samlede tid
er, varsel, 0,93, mens min C-baseret implementering var 0,38.
Så det er en ikke-triviel forskel.
>> Og dette er blot på én fil.
Hvis du skulle køre to programmer versus den store bord
og har en hel bunke af inputs testet, ville dette sikkert tilføje op.
Og hvis vi havde endda større datasæt, dette ville også tilføje op desto mere.
Så ja, betaler nogle pris af hastighed er tilfældet.
Hvad ellers?
Ja?
>> STUDENT: mængden af ​​ram brug.
>> DAVID J. MALAN: mængden af ​​ram brug.
Så jeg gav ikke en sekund mente, når du skriver denne PHP
udgave, hvor meget hukommelse var jeg bruger.
Jeg helt udskyde det til PHP selv og hvem skrev det pågældende program.
Og det kan være OK, men hvis jeg faktisk virkelig
bekymre sig om at klemme så meget ydeevne ud af mit program eller ud af min hjemmeside
eller ud af hvad værktøj Jeg bygger, måske
PHP, ja, er ikke det rigtige sprog.
>> Og i virkeligheden, det er derfor, for Eksempelvis mange web servers--
de faktiske programmer, tjene op web content--
er ikke skrevet i PHP eller i Python eller Ruby.
De er skrevet, ligesom du nu gøre med pset 6,
i C, så du kan klemme hver en bid af ydelse ud af det
og virkelig udøve finkornet kontrol over, hvad der er
foregår under hætte og ikke bare tage det
for givet nogle højere niveau datastruktur.
>> Overveje, trods alt, hvem i PHP implementeret
at begrebet en hash table-- det er faktisk mere
korrekt kaldes en associativ array-- gør han eller hun har nogen idé om, hvad slags
af indgange, du vil være sætte ind i strukturen?
Så naturligvis ikke, right?
Det er et generisk værktøj i værktøjskassen, der er
forudsat at alle, der ønsker at bruge det, og så bliver det helt sikkert
ikke kan optimeres i sidste ende for præcis, hvad du ønsker at gøre.
>> Så trade-offs-- udvikling tid måske forskellige, ydeevne kan variere,
kompleksitet eller hukommelsesforbrug kan variere.
Og så hvad du vil finde stadig er, at der er
vil være forskellige værktøjer til handel.
Og i virkeligheden for en super flertal af folks endelige projekt i denne klasse,
tro det eller ej, er C vil ikke at være det rigtige sprog til at bruge.
>> Og i virkeligheden, en af ​​grillbarer i sidste ende for enhver klasse som denne
er at få dig til at tænke over, godt, hvad skal du trække ud
hylden, når du vil at løse et problem.
Og ja, vi vil krydse denne bro endnu mere som vi ser på flere sprog
selv ud i dag.
>> Så lad os overgang nu måske en mere velkendt sammenhæng
til anvendelse af en som PHP.
Det er lidt almindeligt at bruge på kommandolinjen, skrive scripts
som jeg gjorde, men det er meget, meget mere udbredt.
Og det blev bestemt til at anvendes i form af filer, der typisk ender
i .php-- men det er ikke en prerequisite--
at selv generere webindhold.
>> Så lad mig gå videre og åbne et par eksempler, jeg forberedt på forhånd.
Og disse er faktisk slags sand historier i, at en af ​​de første ting
Jeg nogensinde har gjort mig efter endt CS50 og måske, tror jeg,
CS51 år siden, er min værelseskammerat og jeg hjalp
at køre freshman murene sports program, som på det tidspunkt,
havde freshman tilmelding til diverse sport ved at udfylde et stykke papir,
som det blev kaldt, walking over gården til Wigglesworth,
og slippe det i nogle Proctor dør drop.
Og så ville han eller hun gå igennem dem og derefter faktisk email os manuelt
at vi blev registreret for nogle sport.
>> Så klart en mulighed til forbedring.
Disse dage, kan du henvende sig til blot Google-formularer, men tilbage i dag,
vi havde faktisk nå for-- dette var ikke selv så længe ago-- nå
for en programmering sprog, der ikke var PHP.
På det tidspunkt var det noget, der hedder Perl,
som er gået ud af mode siden.
Men idéen er den samme.
>> Og jeg hovedsagelig sad til prøve til havn går Perl-versioner til PHP,
men i fuld ansvarsfraskrivelse, ikke gav nogen tanker om æstetik endnu.
Så her er en webside.
Dette er en fil.
Hvis jeg zoomer ind, dens tilsyneladende kaldet froshim0.php
bare fordi det er vores første eksempel i denne serie.
Og bemærk, at det har hvad der vises at være en meget grim HTML-formular,
men en form er interessant fordi det giver
mig til at give brugeren input til browseren.
>> Nu sidste gang, da vi havde en form for hvem vi indsende vores forespørgselsparameter,
køen parameter, som det blev kaldt?
Så til Google, right?
Vi helt punted på idéen om gør noget med det input.
>> Men i dag, vi begynde at producere output.
Og den adfærd, jeg har tænkt mig at se her i første omgang er temmelig triviel.
David, jeg vil kontrollere off køn her, siger Matthews her.
Jeg vil ikke være kaptajn.
Jeg har tænkt mig at klikke på Register.
Og bemærk, at webadressen har ændret til registrere-0.php,
og så er der denne grimme tekst her.
Jeg gav ingen tanke til formateringen af ​​dette.
>> Men hvad er interessant, er, at tre værdier blev tilsyneladende vedtaget i.
Dette er PHP slags svarende til printf--
Vi vil se, hvad det virkelig hedder i en bit-- der bare udskriver
hvad du bestået i den.
Så dette tyder på, at denne form havde mindst tre områder til det,
og du så mig skrive dem i.
Den ene var mit navn, en var køn, den ene var sovesal.
Og kaptajn engang ikke bliver sendt til serveren fordi jeg ikke kontrollere det.
>> Så det vil sige tilsyneladende, når du sender ting på nettet,
ikke alene webadressen undertiden change-- nogle gange er det ikke.
Faktisk ændret filnavn men hvad er fraværende fra webadressen
at vi kunne se sidste gang med Google.
Ja?
>> STUDENT: Ingen søgestrengen
>> DAVID J. MALAN: Der er ingen søgestrengen.
Der er ingen spørgsmålstegn noget.
Der er ingen spørgsmålstegn q lig katte, som vi gjorde sidste gang.
Og der er bestemt ingen spørgsmålstegn navn lig
David eller kollegieværelset lig Matthews, så hvor er, at alt går?
>> Nå, lad mig gå tilbage til gedit her og åbne op for den første af disse filer
i min vhost, lokal vært, offentlig biblioteket her og gå ind froshim0.
Så det viser sig, at næsten alt på denne side er blot HTML.
Og dette kan være uvant for dig, men det snart vil være mere så med pset 6
og pset 7 og pset 8.
Men dette er blot en HTML-side.
>> Og det interessante ting synes at være herovre.
En form tag, hvis handling attribut har en værdi af register 0.
Det er derfor, når jeg indsender dette, går til den pågældende fil.
Men metoden er forskellig today-- stolpe.
Så det viser sig der er mindst to metoder på nettet, der anvendes
til at sende oplysninger fra browser til serveren.
Få sætter det i webadressen.
Indlæg udtrykker det andetsteds.
Og hvornår og hvorfor du måske faktisk ønsker en hjemmeside
At bruge så i stedet af får, bare intuitivt?
Enhver hjemmeside.
Hvilken slags oplysninger bør videregives bare ved følgeslutning nu via posten i modsætning
at få, hvis vi har set de to forskelle?
STUDENT: [uhørligt] sikker.
DAVID J. MALAN: Hvis du vil noget at være sikker.
Så du kan skrive en adgangskode ind i en hjemmeside, et kreditkort
ind i en hjemmeside ville art af disse suboptimal
hvis browseren sætte det værdi inde i webadressen.
Hvorfor?
Du ser det, som ikke synes at være sådan en big deal,
men odds er du temmelig ofte gå væk fra din computer eller bruge computer
labs, og så nogen anden eller endda en roommate
kunne nemt gå op og se at private oplysninger.
Når du sender en e-mail via internettet, har du sandsynligvis
ønsker ikke, at data slutning op i URL'en så godt.
Og så er der en række årsager hvorfor vi måske ønsker at sætte det her.
Og photos-- ret, kan jeg ikke engang helt forestille sig, hvordan du ville tage en grafisk,
ligesom en JPEG, og sætte det ind i en URL.
Du kunne gøre det.
Der er måder, der koder for det, men det er bare ikke så ligetil som.
>> Så tilmeld 0 er faktisk meget underwhelming.
Alt det siger bogstaveligt er dette.
Den udskriver ud inde i nogle HTML tags følgende.
Jeg har fået en PHP tag her indlejret i en på forhånd tag.
"Pre" bare betyder pre-formateret tekst, mono-afstand, ligesom en skrivemaskine.
>> Printr er en udskrift rekursiv funktion.
Og så er der dette interessant ting her.
Og vi vil komme tilbage til dette fordi der er andre,
men dollartegn understregning stilling synes at være
en variabel i PHP, hvor noget du sender fra browser til server
bliver gemt for dig.
Og vi vil se, hvordan man kommer på at information inden længe.
>> Men først, lad os gå tilbage til en lidt anderledes eksempel.
Gå ind register-- eller snarere froshims1.php,
som ser lidt anderledes.
Jeg tog lidt mere indsats med formatering,
selvom det er stadig temmelig grim.
Men jeg har tænkt mig at gå videre og skriv "David" nu.
Male.
Vi vil kontrollere "kaptajn" denne gang.
Vi vil gøre Matthews.
Og registrere.
>> Og denne gang står, hm, ikke rigtig.
Okay, så hvad er registrere 1?
Lad mig gå ind i åben register 1 og-- hm.
Okay, så dette er interessant, og det
er et springbræt nu mod mere interessante programmer.
>> Læg mærke til toppen af ​​denne fil har et PHP tag samt nogle bemærkninger.
Og disse er, for nu, en distraktion så lad os bare slippe af med disse bemærkninger
ligesom de er i C. Og jeg påstå med denne luns af kode med en kommentar
at denne kode er validering indsendelse.
>> Tja, det viser sig, at variabler som dollartegn
understregning indlæg er kaldet Super Globals.
De er ligesom disse særlige globale variable
der er bare omni-øjeblikket rådighed inden for dit program.
Og du kan bruge firkantede beslag notation til indeks i dem ikke bruge tal
som 0, 1, 2, 3, men faktiske ord.
>> Så du kan tænke på dollartegn understregning post som en slags hash tabel
at du kunne passere en nøgle i et opslag ord i-mellem de kantede parenteser,
og det kommer til at give dig tilbage værdi, som brugeren faktisk leveres.
PHP har en funktion kaldet tom, der bare
siger ja eller nej, dette variabel er tom eller ikke.
Vi har disse dobbelte stænger, hvilket betyder blot eller lignende i C.
>> Så i realiteten denne linje 4 er bare siger, hvis brugeren ikke give et navn
eller gav ikke et køn eller ikke give et kollegieværelse, gå videre og omdirigere ham
eller hende via denne linje her.
Så dette er en lille kryptisk, men dette betyder bare bogstaveligt
gå tilbage til dette sted, så det punts brugeren
tilbage til, hvor han eller hun kom fra.
Men det er lidt uelegant i, at jeg hårdt kodet det.
>> Men hvad nu, hvis dette, hvis tilstand vurderer ikke at sandt?
Hvad hvis brugeren gav mig hans eller hendes navn og dorm og køn?
At hvis tilstand er ikke kommer til at evaluere til sand,
så jeg ikke ramte exit i linje 7.
Så hvad sker der?
Og dette er, hvad der er interessant om PHP.
>> Du kan droppe ind og ud af PHP mode, så at sige.
Hvis du vil have noget kode til at udføre, du kan åbne og lukke en PHP tag
og sætte kode der ligesom jeg har gjort her.
Så snart du lukker PHP tag, serveren
er bare at spytte ud uanset hvad du lægger der.
Og ja, det var en del af den oprindelige udformning af PHP,
for bedre for værre, var dette sammenblanding af kode og markup
sprog.
Og vi vil se, at denne meget hurtigt uddelegerer ind i en rod.
Og så vil vi gøre det bedre end dette i sidste ende, men blot
bemærke den lethed, hvormed jeg faktisk er i stand til at udføre en vis logik.
>> Men stadig en smule underwhelming.
Lad os åbne op udgave to af Frosh IMS som
tilsyneladende underkaster sig register2.php.
Så denne fil er faktisk går at se næsten den samme.
Jeg har tænkt mig at gå til Frosh IM 2.
Men i Frosh IM'er 2, lad os se hvad der sker.
>> David, skal du klikke på alternativknappen, som det hedder; Matthews, ingen anfører.
Registrer.
Du er registreret.
Ikke rigtig.
Åh vent, vi lige gjorde dette eksempel, gjorde vi ikke?
Okay, stå ved.
Vi vil gøre de tre.
Klart noget handler om skal ske med Gmail.
Vi får der.
>> Så Frosh IM 3 ligner dette.
Ikke anderledes.
Men når jeg gør David, mandlig, Matthews, og registrere denne tredje og sidste udgave
krav, ganske enkelt, du er registreret virkelig.
Det er slags uvæsentlige.
Men jeg hævder med dette tredje og endelige version
Jeg har nu genskabt præcis, hvad min værelseskammerat og jeg bygget til Frosh infrastrukturforvaltere
program år siden.
Og det var enkel.
Der var ingen database, ingen Excel-regneark.
Men endnu vigtigere, der var ikke mere papir
fordi det, vi gjorde med dette program var faktisk maile Proctor, som
var tidligere modtager disse ting via former.
>> Og tilsyneladende vi har programmeret dette i sådan måde, at når nogen registrerer,
John Harvards konto emails proctor-- eller selv i dette tilfælde,
John Harvard-- med følgende text-- "Denne person blot registreret."
Navn er David, kaptajn er tomt; køn, mand; og kollegiet, Matthews.
>> Så hvad skete der?
Nå, den pågældende fil her er tilsyneladende register3.php.
Og hvis jeg åbner denne, vil du se både magt kode som denne
og også helt ærligt, den usikkerhed af et system som e-mail.
Jeg har netop effektivt foregivet at være John Harvard på følgende måde.
>> Jeg har den åbne php tag op øverst, som bare siger her kommer nogle PHP-kode.
Hernede, vender derude er biblioteker i PHP.
Du skal bare ikke behøver at omfatter header filer så meget.
Du får mere med køkkenvask, så at sige.
>> Men denne gang i linje 4, det gør jeg ønsker at fagbibliotek kaldet
PHP mailer, hvilket er noget du kan installere gratis i mange systemer.
Hernede jeg validere indsendelse bare
ved at kontrollere har brugeren giver mig et navn, et køn og en sovesal.
Og hvis ja, gå videre og instantiere en mailer.
>> Du kan tænke på dette som værende en linje kode, der bare tildeler.
Det er ligesom malloc, men det er lidt mere sexet
i, at du ikke nævne allokere og nogle generiske nummer.
Du siger at give mig en af ​​disse, give mig en ny en af ​​disse.
>> Og hvis du har programmeret i Java eller C ++ eller andre sprog,
du måske har set dette.
Men den korte af det, hvis uvant, denne linje
sætter dollartegn mail en særlig struct kaldet
et objekt, der har indbygget e-mail-funktionalitet.
Og i virkeligheden, mærke og lignende syntaks.
>> Dette er ikke en pointer, per se.
PHP bare bruger samme syntaks.
Denne linje siger brug SMTP-- Simple Mail Transfer
Protokollen, som er lige protokol, der bruges til at sende e-mail.
Dette er angivelse brug Harvard SMTP-server, som
er et eller andet sted her på campus.
>> Det er at sige, hvad TCP portnummer til at tale med,
og jeg bare var der ud af googling eller ved at spørge helpdesk.
Og så fordi Harvard bruger nogle systemets sikkerhed på mail server--
mindst at kryptere trafik mellem dig og det,
selvom alle kan sende til it-- Jeg har tænkt mig at tænde TLS protokollen
for at holde denne sikker.
>> Men dette er, hvor tingene få en smule skræmmende.
Jeg kan bare vilkårligt sige, at jeg jharvard,
og jeg kan bare vilkårligt email mig her.
Og så kan jeg angive en individ med denne linje her.
>> Og det ser bare grimt, men det er bare en masse sammenkædning.
Slår ud PHP har en super brugbart symbol, ligesom nogle sprog, dot operatør,
som netop bogstaveligt sammenkæder streng efter streng efter streng,
og du behøver ikke at malloc eller figur den totale længde af strengen.
Du skal bare gøre det.
Og ja, fordi jeg sammenkæde i alle disse ting med disse prikker,
det er grunden til email jeg sendt så ud som det gjorde.
>> Og så til sidst her, jeg sender mail.
Så hvis dette er falsk, Jeg skal bare dø,
som er en funktion, der kun udskriver til skærmen nogle fejlmeddelelse.
Men det er i virkeligheden, kalder funktionen Send.
Ellers, hvis alt dette mislykkes, det omdirigerer mig tilbage her.
>> Og hvorfor gjorde jeg se, at Jeg er registreret egentlig?
Tja, det skete lige her.
Så jeg bringe dette op til et par grunde.
>> One, det er præcis hvordan, hvis du bygger nogle hjemmeside for et afsluttende projekt
eller til den virkelige verden, er dette hvordan du sender e-mail påmindelser
til dine kunder eller dine abonnenter.
Dette er, hvordan du sender password påmindelser.
Dette er, hvordan du sende folk beskeder at de har en ny Facebook
besked verserende eller noget lignende.
>> Men det er også taler til det faktum, at dette kunne
har været meget godt fra Davin eller nogen anden.
Og jeg siger den slags med et smil, fordi jeg er
helt sikker på, hvad der foregår gennem flere af dine tanker på dette punkt.
Men dette er en af ​​dem, gør som jeg siger, ikke som jeg gør slags ting,
fordi det er trivielt at smede emails som denne.
Men som du måske har set eller læse i Crimson,
af sent det er også temmelig trivielle for mennesker
at spore dem tilbage til nogle oprindelse.
Og spørg mig lidt tid, måske ved CS50 frokost, hvor jeg først
fik kendskab meget nøje næsten til ed board mange år
siden, da jeg opdagede hvordan internettet arbejdede.
Så i enhver case-- lidt efter ed bestyrelse gjorde.
>> Det under alle omstændigheder, er der en hel masse super globals,
som de kaldes her, hvoraf den ene vi saw-- dollartegn understregning indlæg.
Der er et modstykke kaldet get, som er hvor ting fra en URL
ender med at gå.
Og der er en hel masse andre, too-- session og server og cookie.
Vi vil komme tilbage til cookie en anden gang,
men session er lidt cool fordi lige nu-- indtil nu--
alt, hvad vi har gjort med en webbrowser er sortering af statsløse, så at sige.
Jeg kan klikke rundt, adgang filer på serveren, noget
der sker på skærmen, men derefter forbindelsen lukkes.
Internet Explorer eller Firefox-ikon stopper spinding
og du bare se, hvad denne webside indeholder.
>> Så HTTP er statsløs i at når det gør en forbindelse,
får nogle data, der er det.
Ikke mere tilslutning, i modsætning til Skype, modsætning Facetime modsætning Gchat, som
opretholder en konstant forbindelse til serveren.
Den web er fundamentalt afbrudt, selv om vi
se inden længe hvordan vi kan simulere ting
som Facebook chat og Gchat, som opretholder en illusion--
eller rent faktisk gør opretholde en konstant forbindelse ved hjælp af
mere moderne teknologi.
>> Men hvis jeg går til, siger, counter.php, dette er en anden simpel eksempel
som vi skal se, der i øjeblikket tænker Jeg besøgte stedet tiden nul.
Men hvis jeg bare genindlæse siden, det på en måde kender jeg var her før.
Hvis jeg opdateres igen, kender jeg var her før.
Og igen og igen og igen og igen.
>> Så der er nogle plus-plussing foregår, men varsel
den lille ting spins nogensinde så kortvarigt op toppen og derefter afbryder,
så det er ikke ligesom jeg har en konstant forbindelse til min apparatet.
Tja, hvis jeg går ind i counter.php, mærke til, hvor nemt det er.
Jeg først kalde denne særlige funktion, som vi vil snart
begynder at tage for givet kaldet starte session.
Start en session.
>> Og en session fremover er bare vil være en spand, ligesom et indkøbscenter
vogn, hvor du kan sætte værdier og art tillid som programmør
at de kommer til at være her, når at brugeren kommer tilbage-- en anden
senere, en time senere, selv et år senere, så længe han eller hun ikke klar
deres cookies, som vi i sidste ende vil se.
Og nu skal jeg bare have en hvis betingelse her.
Så hvis følgende nøgle, kaldet tæller, er sat inde
af denne super global-- denne hash bord, hvis du will-- kaldet session,
derefter gå videre og få fat i værdi fra den session-- tænketank
af dette som en shopping cart-- og gemme det
i en midlertidig variabel kaldet tæller.
>> Ellers, hvis denne værdi tælleren ikke angivet i den såkaldte indkøbskurv,
bare initialisere den til 0.
Endelig ned her, gå og sat tilbage ind i indkøbsvogne eller sessionen
værdien af ​​tælleren +1.
Så det viser sig, at dette særlig beholder her--
hvilket igen er en af ​​disse er forbundet arrays, et array, som du kan indeksere
i ord i stedet for numbers-- fortsætter selv efter at brugeren går væk.
Igen, vil jeg gå tilbage til siden nu.
Det har været et minut eller deromkring.
Men den husker, at jeg har været her 19 gange før.
Dette er mit 20th besøg.
>> Og så dette vil være nøglen til gennemførelse af ethvert websted, der husker
at du er logget ind, at du lægger noget bogstavelig i din indkøbskurv
til at købe eller at du har nogle antallet af meddelelser afventes.
Når som helst du ønsker at huske information,
Vi vil se, at PHP, ligesom flere andre sprog,
giver os med denne illusion af staten selvom, som du kan se i pset 6,
som du gør HTTP-anmodninger fra klient til server, det er det.
Når du kommer tilbage at svar, der er ikke noget mere
kommer tilbage fra serveren som standard.
Men vi vil se, hvordan man arbejder omkring dette.
>> Nå nu, lad os prøve at rydde dette op en lille smule.
Vi har set et par forskellige eksempler der.
Åh, og som en sidebemærkning, for dem kender eller ukendte,
årsagen til, at Frosh chatbeskeder eksempel gik
fra ser virkelig grim at slightly-- godt,
stadig ugly-- til lidt mindre grim men stadig grim
er fordi, hvis vi ser på kildekoden her,
det viser sig, at jeg har denne på toppen af ​​filen.
>> Viser sig, at bootstrap er en af ​​mange frit tilgængelige biblioteker derude
der findes ikke for programmeringssprog altid, men for CSS eller JavaScript
eller HTML eller en række sprog.
>> Og disse folk her-- oprindeligt kom ud
af Twitter-- bare have en hel masse af stilarter.
Det er en massiv fil her, at nogen skrev,
eller andens skrev, over tid, der specificerer farver og formatering
og whatnot, så jeg kan slags låne deres syntaks
og ikke er nødt til at regne ud hvordan man kan lægge ud min form.
Dette er også minified således at en computer kan
forstå det, men ikke nødvendigvis et menneske.
Så det er bare hvorfor det stilisering der ændret.
>> Men lad os nu gøre det bedre i form af design,
fordi hvis vi bo ned denne vej for lang,
vores kode kommer til at få rodet og Messier.
Så lad os fokusere på disse eksempler her.
Det sidste for i dag.
>> Så her er en super simpel version 1.0 af CS50 hjemmeside.
Det har kun links til foredrag og pensum,
og det er ved hjælp af denne uordnet liste tag-- UL tag, som vi brugte sidste gang.
Og hvis det i virkeligheden, hvis jeg åbne View Page Source,
vil du se, at dette er virkelig, virkelig simpel HTML.
Og i virkeligheden, selv om det er en PHP-fil under kølerhjelmen,
det er stadig bare spytte kun HTML for nu.
>> Så hvis jeg klikker på Forelæsninger, vi ser dette ske.
Og hvis jeg klikker på uge nul, ser vi dette.
Og hvis jeg klikker på Onsdag ser vi dette.
Og dette var tilsyneladende PDF dias fra den dag.
Alt, hvad jeg har gjort, er link til en ankerkode til denne webadresse her.
>> Så dette er kun at sige dette er en smuk simpel version af CS50 hjemmeside.
Lad os se, hvordan det er gennemført.
Hvis jeg går ind i mvc0 bibliotek, vi vil se et par filer.
Den ene er en README, så hvis nogle af disse er for hurtig,
du kan bare poke mere afslappet senere.
Og varsel her er en index.php fil.
Det viser sig, at hvis du selv, det menneskelige,
ikke angiver en endelig navn i en URL, webserveren sædvanligvis
udleder nogle standard navn for dig.
Et indeks dot noget er generelt standard.
>> Så det er derfor et øjeblik siden da jeg besøgte denne URL her,
ingen filnavn, ingen fil forlængelse, ingen periode i webadressen.
Det bare vidste eller anden måde magisk at lede efter index.php.
Det er bare en konvention.
Kunne kaldes noget.
>> Så hvis jeg nu gå ind index.php, vil du se
at indeed-- lad slippe af kommentarerne
her, fordi der er virkelig intet interessant at it--
det er bare svært kodet HTML.
Så det er konsekvent, dog med min påstand
at du kan blande HTML og PHP.
Der er ingen egentlig programmering logik i her.
>> Og de andre filer er temmelig meget lige så uinteressant.
Det er bare hårdt kodet uge én her til uge en m og en uge w,
for mandag og onsdag.
Og derefter, hvis jeg åbner op uge nul, bemærke det er næsten identiske.
>> Og det er lidt af en nøgle takeaway.
Læg mærke til, hvor overflødig dette er.
Disse filer ændrer næppe, og alligevel har jeg trak en af ​​disse copy / paste job
hvor jeg tog en file-- formentlig i uge zero-- kopieret det
når uge kom rundt, og sammenknebne et par værdier.
Vi skal nok være i stand til at gøre det bedre end dette.
>> Så lad os gå tilbage til MVC og gå ind i en udgave.
Og læg mærke til jeg har fået en par filer, fordi det,
var fælles for alle disse filer blot en øjeblik ago-- hvis jeg gå tilbage til version 0,
lad os gå tilbage til indekset, og bare postulate--
når jeg slippe af comments-- hvilken del af denne side
er formentlig i hver eneste af mine filer?
Bare kalde det ud.
Hvilke linjer er duplikeres sandsynligvis på tværs af alle disse sider?
Ja?
>> STUDENT: [uhørligt].
>> DAVID J. MALAN: 1 til 9.
Ja, absolut.
1 til 9, undtagen måske 8 ændrer en lille smule, fordi CS50
bliver foredrag eller uge nul eller noget.
Men næsten identiske.
Så alle disse ting er bare slags kopieres og indsættes.
Og der er et par andre linjer jeg kan tænke
af denne er sandsynligvis identisk på tværs af alle filerne.
>> STUDENT: 12 og 13.
DAVID J. MALAN: Ja.
Sure, 12, 13 og 14 sandsynligvis, bare fordi de interessante ting
der sker på linjerne 11 og 10, så det ser ud.
Så lad os se på version 1, som forsøger at forbedre dette.
I version 1 af denne MVC example-- vi får forklare, hvad MVC midler i en moment--
hvis jeg går ind i indekset, den slags ser lidt forvirrende nu.
Det er ikke helt så simpelt som før.
>> Men når du begynder at læse den grundigt, det er
temmelig ligetil, hvad den gør.
Tilsyneladende linje 1 og linje 8 har erstattet
alle de ting, du bare identified-- selvom der blot for god foranstaltning,
Jeg forlod ULS der just in case nogle dage ikke har en liste over ting.
Og så kræver er lidt ligesom pund omfatter i C. Den kopierer og pastaer
indholdet effektivt lige her i denne fil.
>> Så i header.php, som du kunne udlede af sit navn,
vil være overskriften på siden.
Det er slags forældreløse her.
Det har kun toppen til det, men er der ikke mere indhold nedenfor.
>> Og hvis jeg ser på footer i mellemtiden, som var den anden fil mentioned--
denne ene er endnu mindre interessant, men igen, det er fælles for alt.
Så dette er sidefoden.
Dette er header.
Dette er den fil, der er forandring, så hvorfor ikke
forsøge at faktor ud fællestrækkene med disse to linjer her?
>> Men vi kan rense dette op lidt længere.
Jeg har tænkt mig at gå videre og åbne udgave to, hvor
Vi vil se, at der er en ny fil, helpers.php.
Vi vil se, hvad der er i et øjeblik.
Lad os gå til indeks, som indgang som før.
>> Og nu opdager jeg kræver helpers.php, ikke header eller footer.
Men hjælpere er lidt ligesom helpers.c og helpers.h fra pset 2
eller pset 3 længe siden, da du rent faktisk gjorde søge og finde for denne pset,
og du havde alle dine kode til sortering og søge i en separat fil.
Det er, hvad der foregår her.
>> Og nu linie 3 ser lidt anderledes.
Og det er bare én linje.
For at gøre dette endnu mere klar, kunne jeg bare
gør dette for at være stilrene med alt det andet, vi har gjort.
Men det er ikke rigtig ændre funktionalitet.
Det er bare én linje af fast kode.
>> Tilsyneladende er der en funktion et sted kaldet gøre header,
og dette er, hvor tingene få temmelig stærk.
Bemærk, at indersiden af ​​sine parenteser er, hvad andre stykke syntaks?
Det er nok lidt svært at sige, men mærke there's-- Jeg vil sætte nogle hvide
plads.
Der er firkantede parenteser.
>> Og firkantede parenteser vi oplevede en smule siden i forbindelse med associative arrays,
som igen ligesom hash tabeller.
Og hvis du tror nu til C, den For argumenter i en funktion
skal altid være den samme.
Du er nødt til at huske, hvad det bestille is-- x, y, z eller z, y, x--
og du er nødt til altid at give dem i samme rækkefølge eller slå dem op
hvis du har glemt.
>> Men dette synes at være en smart måde passere en vilkårlig nøgle værdi
parvis hvorved titel er navnet af et argument i denne sag
og CS50 er dens værdi.
Og det faktum, at jeg har disse firkantede parenteser
betyder her, at jeg kunne også passere i noget
som en uge er 1 eller 0 eller 2 eller 3.
Så vi har parameteriseres denne funktion på en sådan måde
at det kan tage flere indgange, men for nu er det bare den ene.
>> Hvis jeg nu går ind i helpers.php, mærke, hvad det gør.
Dette er en lille smule af ny funktionalitet,
men for nu bare tage på troen på, at dette er
syntaksen, som du definere en funktion i PHP.
Du bogstaveligt talt sige funktion.
Du behøver ikke angive en tilbagevenden skriver, og det er konsekvent
med den variable detalje tidligere hvor du ikke rigtig stærkt skriver.
>> Dette blot specificerer der som standard, dette
tager en associativ array som et argument.
Og ved du hvad?
Hvis brugeren ikke passere en i, antage en standard værdi.
>> Dette er en funktion, at C ikke har for os, hvilket er rart, fordi nu
data, selvom du ikke give det noget,
kommer til at være en matrix men en tom.
Og som en sidebemærkning, ekstrakt bare gør noget funky
hvor det tager alle de nøgler fra dette associative array, alle de ting
du kan sætte i firkantede parenteser, og skaber variabler ud af dem
således at vi i sidste ende kan få adgang til dem i footet.php og header.php.
Det er lidt abstrakt, så lad mig opmærksom på dette.
>> I index.php, bemærke, at jeg er passerer i en central værdi par titel
med en værdi på CS50.
Hvis jeg nu ser på helpers.php, bemærke, at RenderHeader
er at udtrække, at data, som jeg passerer i, og derefter kræver header.php.
Hvad jeg har gjort er sortering af en fattig mands gennemførelsen nu af følgende.
>> Hvis jeg åbner header.php, meddelelse om, at jeg har ikke længere hårdt
kodet ordet CS50 i denne header fil.
Jeg har lagt dette ganske vist atrociously navngivne funktion, HTML særlige chars,
derinde.
Men bemærk, hvad jeg har gjort.
Jeg har åben HTML.
Jeg har derefter åbent hoved og åben titel.
>> Og derefter inde i titlen åbne og tætte tags, jeg har lidt af PHP kode.
Og dette er et rart, men af ​​syntaks, hvilket betyder bare echo ud.
Det betyder bogstaveligt denne-- echo following--
men dette er sexier at skrive.
Echo ud titlen der er blevet vedtaget i.
>> Men hvad tror du HTML særlig char handler om,
især hvis du har nogle forudgående HTML oplevelse?
Hvilke tegn kan være farligt at passere ind på en side
hvor du dynamisk generere websiden med kode som dette?
Lad mig gå til denne fil version to, og se om jeg ikke kan fremkalde dette.
>> Version to er dette.
Og læg mærke til alt er fint, fungerer godt.
Men formoder jeg går ind i index.php og Jeg præciserede, at titlen på min side
er ikke CS50.
Det er åbent beslag script alert hej verden tæt enkelt citat,
tæt parentes, semikolon, åbneparentes, skråstreg script.
>> Script, som vi får til sidst ser, er et tag
som du kan bruge til at bruge en anden programmeringssprog kaldet
JavaScript indersiden af ​​en webside.
Og nu mærke logikken her.
Her er en nøgle kaldet titel.
Her er det er vanvittigt lang værdi nu.
>> Men hvis jeg går til hjælperne side- eller rettere, forside,
Jeg ringer denne funktion på denne titel først.
Så hvis jeg nu genindlæse denne side, jeg se dette, som ser latterligt,
men det er sikkert.
Det ser bare dumt.
>> Men formoder i stedet Jeg havde glemt dette.
Og markere mine ord, en ikke-nul nummer af jer vil glemmer at gøre dette
og du får nogle flittige studerende eller ven kommer op
til dig på CS50 messen eller anonymt natten rode rundt på din hjemmeside
og hovedsagelig indsprøjte kode ukendt for dig i dit websted
eller anden måde.
>> Fordi hvis jeg bare spytte ud titel her og titel
there-- godt, hvis titel bogstaveligt ser sådan her ud og PHP
som et sprog, der kan spytte ud andre sprog tekst,
dette bogstaveligt talt går at erstatte dette tag med
selvfølgelig, hvad jeg sætter andetsteds.
>> Så hvis jeg nu gå her og genindlæse efter løsne disse sikkerhedsmekanismer,
nu har jeg hej verden her.
Nu det er ikke alt så stor en deal, men du kunne gøre noget
lidt mere ondsindet her, ligesom der er
andre tags-- som vi skal se, når vi bruger mere tid i JavaScript-- ligesom placering
dot href bliver, citat, citat slut, HTTP business.com, men det modsatte af det
fra den anden dag.
Og nu kan du fremkalde en web side faktisk gå straks
til denne webside her.
>> Og faktisk vil jeg ikke til selv at gå til business.com
fordi jeg ikke vil at vide, hvad det er.
Men også dette vil udløse kode skal injiceres i denne side.
Så dette er kun at sige, at selvom vi introducerer super tidligt på nogle
af disse mere komplekse strukturer, det er alle mod en ende af at sikre
at din kode er ikke udnyttes.
>> Så nu er en tredje version her.
Det bliver en smule mere avanceret.
Jeg har ikke rigtig like-- anal side af mig
fik lidt irriteret over faktum, at jeg havde en funktion kaldet
RenderHeader og RenderFooter der var næsten identiske.
Så det forekom mig, hvorfor ikke Jeg parameterisere disse funktioner
i kun ét kaldet gøre, har det tage et andet argument
som navnet på den skabelon, den endelige at render-- enten sidehoved eller sidefod?
Og derefter eventuelt hvis jeg vil at passere i nogle Nøgleværdiparrene
ligesom jeg gør til titlen for header men ikke for den sidefod,
Jeg kunne gøre det.
>> Og så nu, hvis jeg går ind i helpers.php, det er lidt mere kompliceret.
Og jeg vil vinke mine hænder på det detaljer, men det er bare én funktion.
Så det er et skridt mod en bedre design.
>> Vi kan tage det et skridt videre.
Hvis jeg går ind i mit fjerde version af denne, bemærker nu
at jeg gør noget endnu mere slags kryptiske.
Og jeg ved, at dette er en masse til at absorbere på én gang,
men vi er bare lidt til rensning af tingene op.
Nu er jeg sætte mine hjælpere fil i en mappe kaldet
includes-- bare en vilkårlig navn, hvor jeg ønsker at sætte ting
at jeg ønsker at include-- og derefter resten af ​​denne er den samme.
>> Men hvis jeg ser nu i gedit, meddelelse om, at jeg har fået fjernet
af alle de andre filer, og jeg har flyttede dem, for eksempel ind på her.
Og derefter i skabeloner, Jeg har denne her også.
Og så alt dette er nu i retning af et trin til anvendelse af en meget bedre design mønster.
Og vi er meget hurtigt kommer til at bevæge sig væk
fra PHP standard funktionalitet, som vi startede her med,
hvor du bare blande PHP, og din HTML og CSS,
og du bare spytte det ud og du går om din måde.
Det kommer ikke til at være meget vedligeholdes.
Ligesom i C, begyndte vi at bruge flere filer og flere funktioner
og factoring ting ud af det.
Vi vil gøre det samme her.
Og i virkeligheden, i den femte og sidste version her, gjorde jeg en anden ting.
Du kan endda bruge dot dot, som, igen, er bare det overordnede bibliotek.
At være endnu mere sikkerhed bevidst, fordi hvis jeg ser på den lyttende
her for femte og sidste udgave, varsel at jeg har en mappe her kaldet
offentligheden, og derefter på samme niveau, så at sige,
I got omfatter og skabeloner og derefter at tekstfil readme.
>> Og grunden til at jeg har opbygget det gerne denne-- og så mange web
værter, især dem $ 5 måned dem eller $ 10 måneder dem,
hvis du nogensinde har haft en af ​​disse services-- hvad så mange af dem gør
er de forventer bare dig til at dumpe alle af dine filer til en mappe,
ligesom vi gjorde allerede med dette første eksempel.
>> Men så snart du begynder at opbygge mere avancerede hjemmesider, der bare gemmer
data, du interesserer og filer, du bekymrer sig om, rent faktisk at organisere tingene
korrekt og med mere sikkerhed bevidsthed i sindet kan
vi begynder at forsvare mod alle de venner
at du enten har eller uden for denne klasse, der,
så snart du begynder at gøre programmer dig selv på internettet,
vil begynde at plukke på dig og på dem.
>> Og så vil vi se i sidste ende på dette motiv.
Dette er blot et billede der afbilder det følgende.
Vi kommer til at sætte alle vores programmering logik i en eller flere filer,
og vi vil bare begynde kalde disse controllere.
Det er, hvor hjerner vores hjemmesider rent faktisk er.
Så vi kommer til at har udsigt, og udsigt
er så simpelt som bare særskilt files-- kaldet skabeloner, ofte.
De har bare æstetik min side,
hvad jeg ønsker, at siden til at se like-- farver og layout
og positioner alle variablerne.
>> Og så mere interessant at vi i sidste ende vil komme til at
er den model, som kommer til at være lige Ordet vi slap på andre teknologier
at vi sætter ind i billede, ligesom faktiske databaser,
så når du ønsker at gemme information,
du ikke bare sende en e-mail til din proctor eller til dig selv,
du faktisk gemme det i en database ved hjælp af et andet sprog er kendt som SQL.
Og så vi vil forlade her i dag, og afhente med dette på onsdag
og indføre databaser derefter.
>> [Musikken afspilles]