>> [MUSIK SPELA]
>> DAVID J. MALAN: Okej.
Detta är CS50.
Detta är början på veckan åtta.
Och ni kanske minns att vi slutade Förra gången tittar på ett nytt språk
helt och hållet.
I själva verket, en som är ganska lätt och det är inte ens
ett programspråk.
Det är ett märkspråk som låter oss faktiskt strukturera och göra webbsidor.
Och när du någonting annat jämförd med this--
eller snart kommer, om du inte redan har.
Vi kommer att använda Cascading Style Sheets, eller CSS, vilket
är en annan typ av språk med egenskaper och värden
det kommer att låta oss göra Saker som ändrar färg
och ändra positionen och dessa typer av tweaks.
Men idag och framåt, börjar vi fokusera på mer kraftfulla språk,
faktiska programmeringsspråk som PHP.
>> Så PHP har funnits under en längre tid.
Och som du ser, det utformades huvudsakligen
tidigt för faktisk användning i webbutveckling
och faktiskt generera webbsidor.
Så vad slags funktioner gör ett språk
behöver för att göra webben sidor dynamiskt med det?
>> Med andra ord, om du vill skapa innehåll dynamically-- som Facebook s
Newsfeed, som ändras hela tiden, eller snabbmeddelanden som dyker upp då
att time-- som vad är det central del av funktionalitet
du behöver i ett programmeringsspråk som skulle låta dig dynamiskt
skriva ut ny information på skärmen?
>> STUDENTEN Code.
DAVID J. MALAN: Code.
OK.
Vi tar det.
Lite mer exakt.
Jag menar, kan vi göra detta med C, ärligt talat.
Det skulle vara en smärta i nacken.
Men-- är detta engagemang?
>> STUDENT: Ja.
Variabler, kanske?
DAVID J. MALAN: Variabler.
OK, visst.
Variabler kan säkert hjälpa oss.
Och även något enklare.
Vi använde det i den allra första program för den allra första dagen
när vi faktiskt sa "Hej världen".
>> STUDENTEN Print.
>> DAVID J. MALAN: Skriv ut, eller hur?
Skriv ut eller printf i värld av C. Så hela den här tiden,
vi har haft på vår förfogande en language-- C
i particular-- och även Scratch för den delen som
kan generera textsträngar.
>> Tja, om HTML, som vi såg förra veckan, är bara en massa textsträngar
om än med öppna fästen och stängda konsoler och något slags rim
och anledningen till det, ja då kunde vi verkligen
börja generera webbsidor antingen manuellt genom att skriva ut dem i gedit
eller i Microsoft Word, för att matter-- vi behöver bara en textredigerare.
>> Eller vi kan skriva kod, till ditt förslag
tidigare, det skulle låta oss dynamiskt generera HTML,
och det är vad vi kommer att börja göra med PHP
och slutligen även med en språk som kallas JavaScript
är att använda ett språk för att skapa en annan.
Och faktiskt, det är vad Facebook och många, många andra platser
göra för att faktiskt dynamiskt visa ny information till dig.
>> Så låt oss börja med this-- a kryptiskt ser linjen, men en
det är faktiskt ganska kraftfull.
Hittills har vi använt C, vilket är en kompilerad språk.
Och bara en snabb recap-- en kompilerad språket har vad karakteristiska?
Du måste självklart att sammanställa det, men vad betyder det?
Yeah?
>> STUDENT: Det måste vara monteras maskinkod.
>> David J. MALAN: OK.
Det måste monteras till maskinkod.
Så du tar din källkod, vilket är en slags engelsk-liknande.
Du konverterar det till något lägre nivå,
vilket slutligen kallas objektet code-- 0 s och 1 s.
Och det är dessa 0 s och 1 s som en CPU, som de som gjorts av Intel,
faktiskt förstår.
>> Nu, PHP och Python och Ruby och JavaScript och klasar av andra
språk är inte sammanställt språk, men tolkade språk,
vilket innebär att du bara skriva in dem och sedan du behöver inte förvandla dem till 0 s och 1 s.
Du istället bara ger sedan som input till någon annans program,
kallas en tolk.
Och den personens Programmet har utformats
att förstå vad var och varje symbol i Python eller PHP
eller Ruby eller valfritt antal andra språk betyder.
>> Och så allt vi behöver är ungefär så här.
Så i själva verket kommer jag att gå över till apparaten
här, bara i någon gamla fönster, och vi är
kommer att gå vidare och öppna en fil som heter, säger, hej.
Nu tidigare, kanske jag har sparat detta även med en filändelse,
men jag ska göra något ännu enklare här.
Jag kommer att gå vidare och starta denna fil med detta kryptiska syntax.
Så "user, bin, env, för miljö, php. "
>> Detta är helt enkelt en rad kod som är ska berätta mitt operativsystem,
gå hitta i din lokala miljö vad det nu är,
varhelst PHP är-- den interpreter-- och gå vidare och använda den tolk
att tolka följande kod.
Nu är denna typ av en ful funktion i PHP.
Men i detta språk, något gång du skriver PHP-kod,
du måste ha en av dessa ful PHP-taggar avgränsar början
din code-- <? php.
>> Men nedan här, kan jag nu göra något ganska enkelt, som printf hej kommatecken
Världens bakstreck n nära citat, nära parentes.
Och sedan bara för gott åtgärd, jag ska
att gå vidare och stäng min php tagg över här
så att allt ser ut snyggt ganska tryckt.
>> Och så fort jag klickar på Spara, gedit är faktiskt smart nog
att titta på den allra första raden och inse, åh, du skriver PHP-kod.
Låt mig syntax highlight det med färgerna
här så att det står ut lite mer.
Men nu ska jag gå ner till min terminalfönster.
Jag ska zooma in.
>> Programmet kallades "hej" så jag kommer att göra punkt snedstreck hej,
men tillstånd nekas.
Och bash.
Vi har faktiskt hört talas om det sak ett par veckor sedan
inom ramen för Shock, en av dessa buggar.
>> Men Permission denied vi har sett tidigare, kanske i ett annat sammanhang.
Finns det någon som minns hur du kanske fixa något
där tillstånd nekas så här?
Vad är kommandot, åtminstone?
>> STUDENTEN Chmod.
DAVID J. MALAN: Ja, chmod, för att ändra läget för en fil.
Och du får desto mer van vid detta nästa vecka med en efterföljande problem
inställd.
Men för nu, kommer jag att byta läget inte vara läsbar,
utan att ge alla executeability privilegier, förmågan
att köra den här filen.
Och jag kommer att tilldela att till filen hej.
>> Om jag nu dot slash hello in, du se, faktiskt, mitt program, Hej världen.
Och vad steget gjorde jag klart hoppa helt och hållet?
Kompilera.
Så jag körde just det här programmet helt enkelt.
>> Och det visar sig att du kan göra detta med mycket syntax som påminner om C.
Låt mig gå in till dagens kod, som jag lade i min vhost katalog
här, för verkliga skäl Vi ska återkomma till.
Och jag kommer att gå in, låt oss säga, villkor 1.
>> Och du kommer att se här, först och främst en massa kommentarer.
Men detta är faktiskt ett återskapande i PHP
av ett program som vi gjorde i veckan en kallade betingelser 1.c
där syftet i liv av detta program
är uppenbarligen att fråga användaren för ett heltal
och sedan göra lite fluffig analys på det vari
du säga om det är positivt eller negativt eller lika med noll.
Och jag bara ta upp detta eftersom, utom för kanske en liten detalj,
det är omöjlig att skilja så långt från C.
>> Vad är en egenskap här som kanske hoppar ut
på dig som en lite annorlunda?
Kanske två saker.
Yeah?
>> STUDENT: Dollartecken n?
>> DAVID J. MALAN: Ja.
Så dollartecken n är närvarande.
Och dollartecken, som vi får se, går
att vara en fix till början varje variabel i PHP.
Det är både bra och bad-- bra i att det är liksom självklart vad som är
en variabel, dåligt i att det är ännu en sak att skriva.
Och det finns en annan sak har vi inte riktigt
sett, åtminstone i denna stavning. ja?
>> STUDENTEN Readline.
>> David J. MALAN: Readline.
Readline vi inte se, i och för sig, i C, trots att det föreligger något
liknande, men vi har använt getString, och detta är dess motsvarighet.
Så om jag går in i detta katalog, som råkar vara,
som jag ska förklara i en bit i mitt vhost katalog och min källa En katalog,
och jag gå vidare och göra dot snedstreck conditions-- whoops-- dot snedstreck
villkor 1, ser du, återigen, samma issue-- tillstånd nekas.
>> Så låt mig zooma in och göra chmod ett plus x om villkor, pricka slashförhållanden.
Jag skulle vilja ett heltal, snälla, 50.
Och vi skulle kunna spela här spel hela dagen lång.
Det kommer att bete sig exakt som den gjorde i veckan ett.
>> OK så inte så olika, förutom inte bara det liten bit av syntax,
men vid toppen, jag igen hade denna linje som
tillät mig att skapa något som ser ut som ett C-program som heter hello,
kallade villkor 1.
Men det är inte 0: s och ettor Jag utför direkt.
Det är i stället att köra detta tolk vars namn
råkar vara identiskt med det språket.
Programmet heter PHP, och min kod under linjen man håller på att passera in i den.
>> Vi kan göra en ganska enkel exempel som påminner om något
vi gjorde veckor sedan.
Återigen är detta en sorts godtycklig bit av kod
som uppenbarligen inte vad när du kör det?
Vad detta kommer att skrivas ut, förmodligen?
>> Så inledningsvis på linje 16, är det ska säga x är nu 2, förmodligen.
% D är samma som $ i för printf.
Så då är det cubing, punkt, dot, dot, i linje 17.
Och sedan linje 18 visas att anropa en funktion i kubik.
Och var är Cubed definieras?
>> Tja, det ser ut i linje 25, så det är inte så annorlunda.
Jag har några kommentarer ovan det, men för det mesta,
det är en ganska okomplicerad portning eller konvertering
från C-programmet till PHP version.
Men det finns nu ett par skillnader som kanske borde hoppa ut.
Vad är annorlunda med hur ni kan skriva samma program i C?
>> STUDENTEN [OHÖRBAR].
>> DAVID J. MALAN: Det finns ingen prototyp där uppe.
Så PHP-- och ärligt talat, en Mycket av modern languages--
är mycket smartare och mer användbart än C-kompilatorer i att du
kan sätta funktionen här uppe, Du kan sätta en funktion här nere,
och tolken går att göra dig till förmån för läsning
hela filen innan den beslutar att någon funktion inte finns.
Så trevliga förbättringar år senare.
Men det finns också något annars annorlunda eller frånvarande här.
Yeah?
>> STUDENTEN [OHÖRBAR].
DAVID J. MALAN: Vi behöver inte förklara vilka typer av variabler,
så vi får se inom kort att det finns olika typer i PHP,
men du behöver inte ange dem, som också är både bra och dåligt.
Och det finns en annan sak saknas.
>> STUDENT: Det finns inga bibliotek.
>> David J. MALAN: Det finns inga bibliotek.
OK, så det är trevligt.
Vi får mycket mer ur lådan.
Så det finns faktiskt mycket mer saker än jag trodde var annorlunda.
Vad sägs om sätt på ryggen?
Vad är det?
Säg det en gång till?
>> STUDENTEN Pointer.
>> DAVID J. MALAN: Inga pekare.
OK, åtminstone i detta exempel, nr.
Det är rättvist.
Så det finns inte pekare i PHP faktiskt i allmänhet.
Det finns något som kallas referenser, men vi kommer inte spendera alltför mycket tid där.
Och vad mer?
>> STUDENTEN Main.
David J. MALAN: Main.
Så detta var biggie Jag tänkte på.
Observera att det finns ingen viktigaste inkörsporten.
Du börjar helt enkelt skriva din kod.
Och detta är faktiskt kommer att vara fördelaktigt
när vi övergången momentant för att faktiskt använda
samma språk för webbaserad programmering, för vilka vi
vill inte ha bara en ingång.
Vi kanske vill ha ett gäng Webbadresser, en massa olika filer
alla tar i användarens input och producera utdata.
>> Men här är det mycket nedslående exempel som jag lovade förra gången,
nämligen i den här mappen här, felstavade.
Så i den här filen stavnings, som vi kommer inte att spendera för mycket tid på, det finns
huvudsak en porting-- P-O-R-T. Det är bara det ord ges när, säg,
du konverterar från ett språk till en annan manuellt brukar.
>> Detta är en portning av PC version av speller från PSET 5.
Och jag i huvudsak försökt att omvandla den rad för rad så nära som jag kan.
Så om du gillar denna typ av sak, det faktiskt är värt någon gång
dra dem båda sida vid sidan och se vad som är på samma
och vad är annorlunda.
Men de är ganska lika.
Om du kommer ihåg vad stavnings ens såg ut,
även om du inte gjorde det måste ändra den här filen,
det är ganska likartad strukturellt med bara ett par
ändringar här och där.
>> Så detta är bara att säga att det är ganska okomplicerat att omvandla speller
från C till PHP.
Men i ordlistan, det finns något ännu mer övertygande.
Låt mig gå vidare och skapa min egen dictionary.php fil.
Så lite annorlunda i det vi ska kalla det .php istället för .c.
Eftersom detta är en PHP-fil, jag do-- något annoyingly-- ha
att starta filen med en php-tagg som.
Och jag kommer att gå vidare och definiera några funktioner.
Funktion kallad check, som är kommer att ta in ett ord som förut.
Men detta argument är kommer att ha en dollar
logga eftersom vi är, återigen, med PHP.
En annan funktion från dictionary.c var belastning
och det tog i namn av en ordbok, så jag ska få den funktionen redo att gå.
>> En annan i dictionary.c var vad?
Storlek var en av de trevligaste, vid fall om man höll någon variabel runt.
så storlek har bara att returnera en variabel.
Och sen blev det lossa.
>> Så det var dessa fyra funktioner i problembild 5
att du behövde genomföra med viss datastruktur eller strukturer.
Så jag lovade att i PHP, kan vi deklarera
en hash-tabell, till exempel, allt som lättare.
Faktum är att om jag vill ha en hashtabell, Jag kommer bara att gå så där
och det finns min hashtabell.
Och det är noteringen, nedslående, att vi slutade förra gången.
Och vet du vad, om jag ville en variabel för storlek, väl,
detta är inte allt som skiljer sig från C,
men jag kommer att gå vidare och göra det.
Och märker ingen datatyp.
Och jag ska gå tillbaka senare och faktiskt lägga till några kommentarer här.
Men hur är det med last?
>> Om dollartecken ordbok är namnet på min fil
och jag vill verkligen att ladda ord i den här tabellen nu,
Jag kan faktiskt göra något ganska enkelt.
En-- och detta är minorly annoying-- i PHP,
Du måste ange inne av en funktion om du
vill komma åt någon global variabel som är definierad utanför.
>> Men det är inte särskilt intressant just nu.
Vad är mer intressant är detta för varje bygga som jag nämnde förra gången.
Och det visar sig att PHP har en funktion kallas fil vars syfte i livet
är att öppna en fil och läsa in alla dess rader i en array
och lämna tillbaka dem.
>> Det vill säga att jag kan göra ordlistan så som nu i praktiken när jag ringer fil,
detta kommer att ge mig tillbaka en rad ord från filen.
Det är inte så bra.
Det kommer fortfarande att finnas en rad av ord, något linjärt.
Men jag kan gå vidare och iterera över alla dessa ord med
den syntax vi såg kort förra gången.
Och du ser det mer i den kommande PSET.
>> Men nu har jag en loop iteration över varje ord i ordlistan.
Och på varje iteration, minns jag ringer det aktuella ordet "ord."
Och allt det kommer att vidta för att sätta ett ord i ordlistan är
kommer att vara ord gissning "sant".
Det är min insats funktion.
Det är min last funktion för min ordboken.
Nu är det lite av ett fusk, eftersom, vet du vad, det finns faktiskt
omvänt snedstreck n s i slutet av orden att jag förmodligen skulle bli av,
men det är inte ett problem eftersom PHP har en funktion som kallas chop som bokstavligen
kotletter utanför ett tecken på slutet.
Så inga problem där.
Vi har gått vidare och faktiskt förkortat till just detta.
Och nu skulle jag nog hålla koll storlek, så låt oss åtminstone göra this--
storlek ++.
Jag kan göra det som förut.
Och då detta är förmodligen kommer att fungera alldeles utmärkt, så det är return true.
Klar.
PSET 5.
>> [LAUGHTER]
>> David J. MALAN: OK.
Vi kommer att göra det igen med nästa PSET också.
Så hur är storleken?
Jo, förhoppningsvis är om det här som du förväntar dig förra gången,
även om jag måste göra denna dumma global sak.
Det är bara en artefakt från språket design.
>> Men kontrollen är lite mer intressant.
Så om jag passerade i dollar underteckna ord, jag först
vill ha tillgång till att den globala variabeln bord.
Och nu om jag vill kontrollera om ett ord finns där,
Jag kan bara säga om det är sant att Följande ligger i tabellen,
sedan gå vidare och retur sant; annat, returnera false.
Klar.
Den andra hälften av PSET 5.
>> Okej, så igen, jag är styckning några hörn.
I rättvisans namn, jag borde nog bringa ytterligare några sekunder
om detta genomförande.
Och jag förmodligen inte skulle håna alla timmar du lägger på PSET så mycket.
Så strtolower är en funktion.
Något liknande existentialist i C, åtminstone för tecken,
men PHP har fått en hel sträng version.
>> Det kommer att tvinga allt till gemener, som vissa av er
kan ha gjort att canonicalize vad du lägger i din ordlista.
Och nu kan du göra det i C också.
Detta har ingenting att göra med PHP.
>> Men varje gång du har ett booleskt villkor,
som något på nätet 10 där, vilket är endast
kommer att utvärderas till sant eller falskt, och din om annat tydligt
återvänder sant eller falskt, jag kunde helt enkelt verkligen göra detta sexigare
och bara göra något sånt här.
Så att det är min funktionskontroll.
Höger om Boolean returnerar ett sant eller falskt,
låt oss bara lämna tillbaka den direkt.
>> Och det finns några andra tweaks Jag skulle kunna göra här och där.
Load-- lasta, förresten, det är gjort.
Inget att göra där.
Sedan allt minne i PHP och många andra språk
är faktiskt hanteras för dig.
Så medan i C, som du lärt smärtsamt,
något du malloc eller calloc eller realloc, du måste frigöra dig.
Allt du fopen, du måste fclose, så att resurserna slutligen befriat
och verktyg som Valgrind inte märke och inte klaga,
vilket är en bra sak att köra på dem.
>> Men visst, det måste vara någon fångst, eller hur?
Annars vi typ av bortkastade en hel massa veckor.
Så det finns någon av flera skäl varför vi liksom ta denna bana,
men det finns en trade-off.
Rätt, har detta varit tematiska.
>> Så vad kanske en kompromiss Här rör sig, från C till PHP?
Känns som alla vinner hittills annat än lite fulhet här eller där.
Yeah.
Vad är det?
>> STUDENTEN [OHÖRBAR] minne.
DAVID J. MALAN: Hastighet.
OK.
Tja, min hastighet var ganska snabbt.
Rätt?
Men snabbhet i utförandet av programmet?
OK, så det är en rättvis poäng.
>> Så när det skulle hända, jag i förväg cued upp både min försök lösning, den ena
Jag hade på den stora styrelsen var ett försök baserad lösning,
och jag har det i den här katalogen här.
Så jag i ett ögonblick, kan jag gå vidare och kör detta på King James Bible,
slå Enter.
Och det är förhoppningsvis rätt genomförande i slutet,
ger mig tid i av 0,38 sekunder för att
en något godtycklig exempel.
>> Och om jag nu går in i det här andra terminalfönster
här där jag öppnade första gedit, låt mig gå in i dagens code-- som, återigen,
är i den här katalogen här-- och Låt mig gå vidare och köra speller.
Så bara för att vara tydlig, detta är PHP version.
Jag bara visar toppen av det här.
>> Så om jag gör speller av tilde CS50 Pset 5 texter, King James anger.
Det är fortfarande snabbare än att skriva det i C, men den totala tiden
är, meddelande, 0,93, medan min C-baserade genomförande var 0,38.
Så det är en icke-trivial skillnad.
>> Och detta är bara på en fil.
Om du skulle köra två program kontra den stora styrelsen
och har en hel massa ingångar testas, skulle detta säkerligen lägga upp.
Och om vi hade ännu större datamängder, även detta skulle lägga upp allt mer.
Så ja, betala viss pris av hastighet är fallet.
Vad mer?
Yeah?
>> STUDENT: Mängd RAM användning.
>> DAVID J. MALAN: Mängd RAM användning.
Så jag gav inte en sekund tänkte när du skriver detta PHP
version om hur mycket minne var jag använder.
Jag är helt skjuta upp det till PHP sig själv och den som skrev det programmet.
Och det kan vara OK, men om jag faktiskt riktigt
bryr sig om att klämma så mycket prestanda ut ur mitt program eller från min hemsida
eller från vilket verktyg Jag bygger, kanske
PHP, ja, inte är rätt språk.
>> Och i själva verket är det därför, för Exempelvis har många webb servers--
själva programmen som servera web content--
är inte skriven i PHP eller i Python eller Ruby.
De är skrivna, liksom Du kommer nu göra med pset 6,
i C, så att du kan klämma varje uns av prestanda ur det
och verkligen utöva finkornig kontroll över vad som är
pågår under huva och inte bara ta det
för givet någon högre nivå datastruktur.
>> Betrakta, trots allt, den som i PHP implementeras
att föreställningen om en hash table-- det är faktiskt mer
korrekt kallas en associativ array-- gör han eller hon har någon aning vad för slags
ingångar du kommer att bli ibruktagande strukturen?
Så uppenbarligen inte, eller hur?
Det är ett generiskt verktyg i verktygslådan som är
ges till alla som vill att använda det, och så säkert det
Det går inte att optimeras i slutändan för exakt vad du vill göra.
>> Så handels offs-- utvecklingstid kanske skiljer sig åt, prestanda kan variera,
komplexitet eller minnesanvändning kan skilja sig.
Och så vad du hittar alltmer är att det finns
kommer att vara annorlunda verktyg för handeln.
Och i själva verket för en super majoritet av människors sista projekt i denna klass,
tro det eller ej, är C kommer inte att vara rätt språk att använda.
>> Och i själva verket en av de hämtställen i slutändan för någon klass som denna
är att få dig att tänka på, Tja, vad ska man dra av
hyllan när du vill att lösa några problem.
Och faktiskt, vi över den här bron ännu mer när vi tittar på fler språk
även efter idag.
>> Så låt oss övergång nu kanske en mer bekant kontext
för att använda ett språk som PHP.
Det är ganska vanligt att använda på kommandoraden, skriver manus
som jag gjorde, men det är mycket, mycket vanligare.
Och det var avsett att användas i form av filer som vanligtvis slutar
i .php-- men det är inte en prerequisite--
att själva skapa webbinnehåll.
>> Så låt mig gå vidare och öppna ett par exempel som jag förberett i förväg.
Och dessa är faktiskt typ av sann berättelser i att en av de första saker
Jag någonsin gjorde mig själv efter målgång CS50 och kanske, tänker jag,
CS51 år sedan är min rumskamrat och jag hjälpte
att köra recentior intramural sportprogram, som, vid den tiden,
hade förstaårselev registrering för olika sport genom att fylla i ett papper,
som det kallades, promenader över gården till Wigglesworth,
och släppa den på något Proctor dörr släpp.
Och då skulle han eller hon går igenom dem och sedan faktiskt maila oss manuellt
att vi var registrerade för en viss sport.
>> Så klart, en möjlighet för förbättringar.
Dessa dagar, kan du vända dig till just Google Formulär, men tillbaka i dag,
Vi hade faktiskt nå for-- här var inte ens så länge ago-- når
för ett programmerings språk som inte var PHP.
Vid den tiden var det något som kallas Perl,
som har gått ur modet sedan.
Men tanken är densamma.
>> Och jag satt i stort sett ner för att försöka till port går Perl versioner PHP,
men fullt ansvarsfriskrivning, inte gav varje tanke till estetik ännu.
Så här är en webbsida.
Detta är en fil.
Om jag zoomar in, dess till synes kallas froshim0.php
bara för att det är vår första exempel i denna serie.
Och märker att den har vad som verkar att vara en mycket ful HTML-formulär,
utan en form är intressant eftersom det tillåter
mig att ge användarens input till webbläsaren.
>> Nu förra gången när vi hade en form, för att vem vi lämna vår frågeparameter,
kön parametern som det hette?
Så för att Google, eller hur?
Vi punted helt på idén om gör något med den ingången.
>> Men idag börjar vi producerar något.
Och beteendet jag ska se här initialt är ganska trivialt.
David, jag ska bocka av kön här, säger Matthews här.
Jag kommer inte att vara kapten.
Jag kommer att klicka på Registrera.
Och märker att webbadressen har ändrats för att registrera-0.php,
och sedan finns det denna fula text här.
Jag gav ingen tanke på formateringen av detta.
>> Men det som är intressant är att tre värden tydligen gått in.
Det här är PHP: s slags ekvivalent med printf--
Vi får se vad det egentligen heter i en bit-- som bara skriver ut
vad du gått in i den.
Så detta tyder på att den formen hade åtminstone tre områden till det,
och du såg mig skriva in dem.
En var mitt namn, en var kön, en var sovsal.
Och kaptenen inte ens får skickas till servern eftersom jag inte kontrollera det.
>> Så detta är att säga tydligen, när du skickar in saker på webben,
inte bara gör URL ibland change-- ibland inte.
Faktum är filnamnet ändrat, men det som är frånvarande från URL
att vi såg förra gången med Google.
Yeah?
>> STUDENT: Nej frågesträng
>> DAVID J. MALAN: Det finns ingen frågesträngen.
Det finns inget frågetecken något.
Det finns inget frågetecken q lika katter, som vi gjorde förra gången.
Och det finns definitivt ingen frågetecken Namnet är
David eller studentrummet lika Matthews, så där är att alla på väg?
>> Nåväl, låt mig gå tillbaka till gedit hit och öppna upp det första av dessa filer
i mitt vhost, lokala värden, allmän katalog här och gå in froshim0.
Så visar det sig att nästan allt på denna sida är bara HTML.
Och detta kan vara obekant för er, men det kommer snart att bli mer så med PSET 6
och PSET 7 och PSET 8.
Men detta är bara en HTML-sida.
>> Och det intressanta saker verkar vara här.
En form tagg vars verkan attribut har ett värde av register 0.
Det är därför när jag in detta går det till den filen.
Men metoden är annorlunda today-- inlägg.
Så visar det sig att det är åtminstone två metoder på nätet som används
för att sända information från webbläsaren till servern.
Få uttrycker det i webbadressen.
Post uttrycker det på annat håll.
Och när och varför kanske du faktiskt vill ha en hemsida
att använda tjänsten då istället av få, bara intuitivt?
Varje webbplats.
Vilken typ av data ska gick genom slutledning nu via post till skillnad
att få, om vi har sett de två skillnader?
STUDENTEN [OHÖRBAR] säker.
DAVID J. MALAN: Om du vill något att vara säker.
Så du kan skriva in ett lösenord på en webbplats, ett kreditkort
på en webbplats skulle typ av dessa suboptimala
om webbläsaren sätta det värdet inne i webbadressen.
Varför?
Du ser det, vilket inte verkar vara en så stor sak,
men oddsen är du ganska ofta gå borta från datorn eller använda dator
labb, och så någon annan eller till och med en rumskompis
kan lätt gå upp och se att privat information.
När du skickar ett e-postmeddelande via webben, du förmodligen
vill inte att uppgifter slut upp i webbadressen också.
Och så finns det någon av flera skäl varför vi kanske vill lägga den här.
Och photos-- rätt, jag kan inte ens riktigt föreställa sig hur man skulle ta en bild,
som en JPEG, och lägg den i en URL.
Du kan göra det.
Det finns olika sätt att koda det, men det är bara inte okomplicerat så.
>> Så registrera 0 är faktiskt mycket underwhelming.
Allt det står bokstavligt är det.
Den skriver ut på insidan av vissa HTML taggar följande.
Jag har en PHP-tagg här kapslade i en pre-tagg.
"Pre" betyder bara pre-formaterad text, mono åtskilda, som en skrivmaskin.
>> Printr är ett tryck rekursiv funktion.
Och så finns det här intressant sak här.
Och vi ska återkomma till detta eftersom det finns andra,
men dollartecken streck post verkar vara
en variabel i PHP, där vad som helst du skickar från webbläsaren till servern
får lagras för dig.
Och vi får se hur man tar sig till att information inom kort.
>> Men först, låt oss gå tillbaka till en något annorlunda exempel.
Att gå in register-- eller snarare, froshims1.php,
som ser lite annorlunda ut.
Jag tog lite mer insats med formatering,
även om det är fortfarande ganska ful.
Men jag kommer att gå vidare och skriv in "David" nu.
Male.
Vi ska kolla "kapten" den här gången.
Vi ska göra Matthews.
Och registrera dig.
>> Och den här gången står det, hm, inte riktigt.
Okej, så vad är registrera 1?
Låt mig gå in i öppna register 1 och-- hm.
Okej, så det här är intressant, och detta
är en språngbräda nu mot mer intressanta program.
>> Lägg märke till toppen av denna fil har en PHP-tagg samt några kommentarer.
Och dessa är, för nu, en distraktion så låt oss bara bli av med dessa synpunkter
precis som de är i C. Och jag hävdar med denna del av koden med en kommentar
att denna kod är validera inlämning.
>> Tja, visar det sig att variabler som dollartecken
streck inlägget är kallas super globals.
De är som dessa särskilda globala variabler
som är bara rund närvarande tillgänglig inom ditt program.
Och du kan använda klammer notation till index i dem inte använder siffror
som 0, 1, 2, 3, men faktiska ord.
>> Så du kan tänka på dollartecken streck tjänst som en slags hashtabell
att du skulle kunna passera en nyckel till, en uppslag ord i-mellan hakparenteserna,
och det kommer att ge dig tillbaka värde som användaren faktiskt tillhandahålls.
PHP har en funktion kallas tomt som bara
säger ja eller nej, det här variabeln är tom eller inte.
Vi har dessa dubbla streck, vilket betyder bara, eller, som i C.
>> Så i själva verket är denna linje 4 bara säger om användaren inte gav ett namn
eller gav inte ett kön eller inte ge en sovsal, gå vidare och omdirigera honom
eller henne via denna linje här.
Så det här är lite kryptiskt, men detta innebär bara bokstavligen
gå tillbaka till denna plats, så det punts användaren
tillbaka till oavsett var han eller hon kom från.
Men det är lite klumpig i att jag hårt kodad den.
>> Men tänk om detta om tillstånd utvärderar inte till true?
Vad händer om användaren gav mig hans eller hennes namn och studentrummet och kön?
Att om villkoret inte kommer att utvärderas till true,
så jag inte träffar avfarten i linje 7.
Så vad händer?
Och detta är vad som är intressant med PHP.
>> Du kan släppa in och ut PHP-läge, så att säga.
Om du vill ha lite kod som ska köras, Du kan öppna och stänga en PHP-tagg
och sätta koden där som jag har gjort här.
Så snart du stänger PHP-taggen, servern
är bara att spotta ut vad du lagt där.
Och faktiskt, var denna del av den ursprungliga utformningen av PHP,
på gott och ont, det var sammanblandning av kod och uppmärkning
språk.
Och vi ser att detta mycket snabbt ankommer i en enda röra.
Och så ska vi göra bättre än detta i slutändan, men bara
märker den lätthet med vilken jag är faktiskt kunna utföra en viss logik.
>> Men fortfarande lite underwhelming.
Låt oss öppna upp version två av Frosh IM, vilket
tydligen lämnar till register2.php.
Så här filen är faktiskt går att se nästan samma.
Jag ska åka till Frosh IM 2.
Men i Frosh IM 2, låt oss se vad som händer.
>> David, klickar du på knappen, så det kallas; Matthews, ingen kapten.
Registrera.
Du är registrerad.
Inte riktigt.
Oh vänta, vi gjorde bara som exempel, inte vi?
Okej, stand by.
Vi ska göra de tre.
Klart något är om att hända med Gmail.
Vi ska komma dit.
>> Så Frosh IMs 3 ser ut så här.
Inget annat.
Men när jag gör David, manlig, Matthews, och registrera, denna tredje och slutliga versionen
påståenden, helt enkelt, du registreras egentligen.
Det blir liksom ingen betydelse.
Men jag hävdar med detta tredje och slutliga versionen
Jag har nu återskapat exakt vad min rumskamrat och jag byggde för Frosh IM
program år sedan.
Och det var enkelt.
Det fanns ingen databas, ingen Excel-ark.
Men ännu viktigare, det fanns inga mer papper
eftersom det vi gjorde med det här programmet var att faktiskt maila proctor, som
var tidigare emot dessa saker via formulär.
>> Och tydligen har vi programmerat detta i ett sådant sätt att när någon registrerar,
John Harvard konto e-post till proctor-- eller sig själv i det här fallet,
John Harvard-- med följande text-- "Den här personen just registrerats."
Namn är David, är kapten tom; kön, manligt; och studentrummet, Matthews.
>> Så vad hände där?
Tja, filen i fråga här är tydligen register3.php.
Och om jag öppnar den här, kommer du att se både kraften i koden så här
och dessutom, ärligt talat, den otrygghet av ett system som e-postadress.
Jag har just effektivt låtsades vara John Harvard på följande sätt.
>> Jag har den öppna php-taggen där uppe, vilket bara säger här kommer lite PHP-kod.
Här nere, visar sig att det är bibliotek i PHP.
Du bara behöver inte Inkludera rubrik filer som mycket.
Du får mer med diskbänk, så att säga.
>> Men den här gången i rad 4, gör jag vill specialbibliotek som heter
PHP Mailer, vilket är något du kan installera gratis i många system.
Här nere jag validera inlämnande bara
genom att kontrollera gjorde användaren ger mig ett namn, ett kön, och en sovsal.
Och i så fall gå vidare och initiera en mailer.
>> Du kan tänka på detta som en kodrad som bara fördelar.
Det är som malloc, men det är lite sexigare
eftersom du nämner inte bara malloc och några generiska nummer.
Du säger ge mig en av dessa, ge mig en ny en av dessa.
>> Och om du har programmerat in Java eller C ++ eller andra språk,
du kanske har sett det här.
Men den korta av den, om obekant, denna linje
sätter i dollartecken mail en speciell struct kallas
ett objekt som har inbyggd e-post funktionalitet.
Och faktiskt, märke och liknande syntax.
>> Detta är inte en pekare, per se.
PHP bara använder samma syntax.
Denna linje säger bruk SMTP-- Simple Mail Transfer
Protokoll, vilket är precis det protokoll som används för att skicka e-post.
Detta är att ange användning Harvards SMTP-server, som
är någonstans här på campus.
>> Detta säger vad TCP portnummer att prata med,
och jag bara tänkte att genom googla eller genom att be helpdesk.
Och då eftersom Harvard använder en del systemsäkerhet på post server--
åtminstone för att kryptera trafik mellan dig och det,
även om vem som helst kan skicka till det-- Jag kommer att slå på TLS-protokollet
för att hålla detta säkert.
>> Men det är där saker få lite skrämmande.
Jag kan bara godtyckligt säga att jag är jharvard,
och jag kan bara godtyckligt maila mig här.
Och då kan jag ange en ämne med denna linje här.
>> Och detta ser bara ful, men det är bara en massa sammanfogning.
Det visade sig att PHP har en super bra symbol, som vissa språk, punktoperatorn,
som bara bokstavligen sammanfogar strängen efter strängen efter sträng,
och du behöver inte malloc eller siffra ut den totala längden av strängen.
Du gör bara det.
Och faktiskt, eftersom jag sammanfoga i alla dessa saker med dessa punkter,
det är därför den e jag skickade såg ut som den gjorde.
>> Och så slutligen här, jag skicka e-post.
Så om detta är falskt, Jag kommer bara att dö,
som är en funktion som bara tryck till skärmen några felmeddelande.
Men det är i själva verket anropa sändfunktionen.
Annars, om allt detta misslyckas, Det omdirigerar mig tillbaka hit.
>> Och varför gjorde jag ser att Jag är registrerad egentligen?
Tja, hände det här.
Så jag tar upp detta för ett par anledningar.
>> Ett, det är precis så om du bygger någon hemsida för ett slutprojekt
eller för den verkliga världen är detta hur du skickar e-post påminnelser
till dina kunder eller dina prenumeranter.
Detta är hur du skickar påminnelser om lösenord.
Detta är hur du skickar folk meddelanden att de har en ny Facebook
meddelande väntar eller något liknande.
>> Men det talar också för att det faktum att detta kunde
har varit mycket bra från Davin eller någon annan.
Och jag säger detta slags med ett leende eftersom jag är
helt säker på vad som händer genom flera av dina sinnen på denna punkt.
Men detta är en av dem gör som jag säger, inte som jag gör typ av saker,
eftersom det är trivialt att förfalska e-post som denna.
Men som ni kanske har sett eller läsa i Crimson,
sen är det också ganska trivialt för människor
att spåra dem tillbaka till viss ursprung.
Och fråga mig lite tid, kanske vid CS50 lunch, hur jag först
bekantat mycket nära nästan till ed ombord många år
sedan när jag upptäckte hur internet fungerade.
Så på något case-- något efter ed styrelsen gjorde.
>> Det i så fall finns det en massa super globals,
som de kallas här, en av vilka Vi saw-- dollartecken streck inlägg.
Det finns en motsvarighet som kallas get, som är där grejer från en URL
slutar upp att gå.
Och det finns en hel massa andra, too-- session och server och kaka.
Vi ska återkomma till cookie en annan gång,
men session är typ av cool eftersom rätt now-- fram now--
allt vi gjort med en webbläsare är en slags statslösa, så att säga.
Jag kan klicka runt, tillgång filer på servern, något
händer på skärmen, men därefter stänger förbindelsen.
Internet Explorer eller Firefox ikonen slutar spinning
och du bara se vad den webbsidan innehåller.
>> Så HTTP är statslös i det när det gör en anslutning,
får vissa uppgifter, det är det.
Inget mer anslutning, till skillnad från Skype, till skillnad från Facetime, till skillnad Gchat, som
upprätthåller ett konstant anslutning till servern.
Webben är i grunden bortkopplad, även om vi kan
se snart hur Vi kan simulera saker
som Facebook chat och Gchat, som kan upprätthålla ett illusion--
eller faktiskt behålla en ständig förbindelse med hjälp
modernare teknik.
>> Men om jag går till, säger, counter.php, Detta är ett annat enkelt exempel,
som vi får se, som nu tänker Jag besökte platsen noll tid.
Men om jag laddar helt enkelt sida, det på något sätt vet jag var här förut.
Om jag laddar igen, det vet att jag var här förut.
Och igen och igen och igen och igen.
>> Så det finns en del plus plussing pågår, men varsel
den lilla saken snurrar någonsin så kort där uppe och sedan kopplar,
så det är inte som jag har en konstant anslutning till min apparat.
Tja, om jag går in i counter.php, märker hur enkelt det är.
Jag först kalla detta speciella funktion som vi ska snart
börjar ta för givet kallas sessionsstart.
Starta en session.
>> Och en session hädanefter bara kommer att vara en hink, som en shopping
vagn där du kan sätta värden och typ av förtroende som programmerare
att de kommer att vara här när att användaren kommer back-- en andra
senare, en timme senare, och med ett år senare, så länge han eller hon inte försvinner
deras kakor, som vi så småningom får se.
Och nu har jag bara ett om tillstånd här.
Så om följande nyckel, kallas räknare, ligger inne
av denna super global-- denna hash bord, om du will-- kallas session,
sedan gå vidare och ta tag i värde från session-- think
detta som en shopping cart-- och lagra den
i en temporär variabel som kallas räknare.
>> Annars, om detta värde räknaren var inte ligger i den så kallade kundvagnen,
bara initiera den till 0.
Slutligen, här nere, gå och lägga tillbaka in i kundvagnar eller sessionen
värdet på räknaren +1.
Så visar det sig att detta särskild behållare här--
som, återigen, är en av dessa associerade matriser, en array som du kan indexera
i ord istället för numbers-- kvarstår även efter att användaren går bort.
Igen, ska jag gå tillbaka till sidan nu.
Det har varit en minut eller så.
Men det kommer ihåg att jag har varit här 19 gånger tidigare.
Detta är mitt 20: e besök.
>> Och så detta kommer att vara nyckeln till genomföra en webbplats som minns
att du är inloggad, att du lägger något som bokstav i din varukorg
att köpa eller att du har någon antalet meddelanden väntar.
När som helst du vill komma ihåg information,
vi får se att PHP, liksom flera andra språk,
ger oss denna illusion av staten även om, som du ser i PSET 6,
när du gör HTTP-förfrågningar från klient till server, det är det.
När du får tillbaka den svar, det finns inget mer
kommer tillbaka från servern som standard.
Men vi får se hur att komma runt det.
>> Nåväl, låt oss försöka städa upp detta lite.
Vi har sett några olika exempel där.
Åh, och som en sidoreplik, för de som är bekanta eller obekanta,
på grund av att den Frosh IM exempel gick
från att se riktigt fult att slightly-- bra,
fortfarande ugly-- till svagt mindre ful men fortfarande ful
Det beror på om vi ser på källkoden här,
det visar sig att jag har denna högst upp i filen.
>> Visar sig att bootstrap är en av många fritt tillgängliga bibliotek ute
som inte existerar för programspråk alltid, men för CSS eller JavaScript
eller HTML eller valfritt antal språk.
>> Och dessa folks här-- ursprungligen kom ut
av Twitter-- bara en massa stilar.
Det är en massiv fil här som någon skrev,
eller någon skrev, under tiden som specificerar färger och formatering
och allt så att jag kan typ av låna deras syntax
och inte behöva räkna ut hur man lägga ut min blankett.
Detta är också minified så att en dator kan
förstå det men inte nödvändigtvis en människa.
Så det är precis därför som stilisering det ändrats.
>> Men låt oss nu göra bättre när det gäller design,
för om vi stannar nere denna väg för länge,
vår kod kommer att bli rörigt och stökigare.
Så låt oss fokusera på dessa exempel här.
Den sista för idag.
>> Så här är en super enkel version 1.0 av CS50: s hemsida.
Det har bara länkar till föreläsningar och kursplan,
och det är med hjälp av denna oordnad lista tag-- UL tagg som vi använde förra gången.
Och om faktiskt, om jag öppna upp View Page Source,
du kommer att se att detta är riktigt, riktigt enkel HTML.
Och faktiskt, även om detta är en PHP-fil under huven,
det är fortfarande bara spotta endast HTML för nu.
>> Så om jag klickar på föreläsningar, vi ser detta hända.
Och om jag klickar på veckan noll, ser vi detta.
Och om jag klickar på Onsdag, ser vi detta.
Och det var tydligen PDF av bilderna från den dagen.
Allt jag har gjort är koppling till en ankare tagg till denna URL här.
>> Så detta är bara att säga att detta är en ganska enkel version av CS50: s hemsida.
Låt oss se hur det genomförs.
Om jag går in i mvc0 katalog, vi får se några filer.
Den ena är en README, så om en del av detta är för snabb,
Du kan bara rota runt mer avslappnad senare.
Och varsel här är en index.php fil.
Det visar sig att om du själv, det mänskliga,
inte anger ett slutligt namn i en URL, webbservern oftast
härleder några standardnamn för dig.
En index dot något är generellt standard.
>> Så det är därför för en stund sedan när jag besökte denna URL här,
inget filnamn, ingen fil förlängning, ingen period i webbadressen.
Det visste precis något magiskt att leta efter index.php.
Det är bara en konvention.
Kunde kallas något.
>> Så om jag nu går in i index.php, kommer du att se
att, indeed-- låt oss bli av kommentarerna
här eftersom det finns verkligen inget intressant att det--
detta är bara hårt kodad HTML.
Så det är konsekvent, Men med mitt påstående
att du kan commingle HTML och PHP.
Det finns ingen verklig programmering logik i här.
>> Och de andra filerna är ganska mycket lika ointressant.
Det är bara hårdkodad vecka ett här veckan en meter och vecka ett w,
för måndag och onsdag.
Och sedan om jag öppnar upp vecka noll, märker att det är nästan identiska.
>> Och det är lite av en nyckeltakeaway.
Lägg märke till hur redundant detta är.
Dessa filer knappt förändras, och ändå jag drog en av dessa kopiera / klistra jobb
där jag tog en file-- förmodligen i vecka zero-- kopierade
När veckan kom omkring, och fixade några värden.
Vi bör nog kunna att göra bättre än så här.
>> Så låt oss gå tillbaka till MVC och gå in i version ett.
Och märker jag har en några filer, eftersom det
var gemensamt för alla dessa filer bara en ögonblick ago-- om jag går tillbaka till version 0,
låt oss gå tillbaka till index, och bara postulate--
när jag bli av med comments-- vilken del av denna sida
förmodligen i varenda en av mina filer?
Bara kalla det.
Vilka linjer är dubblerade förmodligen över alla dessa sidor?
Yeah?
>> STUDENTEN [OHÖRBAR].
>> David J. MALAN: 1 genom 9.
Ja, absolut.
1 till 9, utom kanske 8 ändrar lite eftersom CS50
blir föreläsningar eller vecka noll eller något.
Men nästan identiska.
Så allt det här är bara sorts kopieras och klistras.
Och det finns ett par andra linjer jag kan tänka
av detta är sannolikt identiska över alla filer.
>> STUDENTEN 12 och 13.
DAVID J. MALAN: Ja.
Visst, 12, 13, och 14 antagligen, bara för att det intressanta saker
händer på linjerna 11 och 10, så det verkar.
Så låt oss titta på version 1, som försöker förbättra detta.
I version 1 av denna MVC example-- vi ska förklara vad MVC medel i en moment--
om jag går in i index, det slags ser lite förvirrande nu.
Det är inte riktigt så enkelt som tidigare.
>> Men när du börjar Läs den noga, det är
ganska enkelt vad den gör.
Tydligen linje 1 och linje 8 har ersatt
alla de saker som du bara identified-- men bara för bra åtgärd,
Jag lämnade ULS där utifall något dagar inte har en lista över saker.
Och så kräver är ungefär som pundet inkludera i C. Den kopierar och pastor
innehållet effektivt just här i denna fil.
>> Så i header.php, som ni kan dra slutsatsen från dess namn,
kommer att vara huvudet på sidan.
Det är typ av föräldralösa här.
Den har endast det översta till det, men det finns inget mer innehåll nedan.
>> Och om jag tittar på sidfot under tiden, som var den andra filen mentioned--
här är ännu mindre intressant, men återigen, det är vanligt att allt.
Så detta är sidfoten.
Detta är sidhuvudet.
Detta är den fil som är förändras, så varför inte
försöka faktor ut gemensamhet med dessa två rader här?
>> Men vi kan rengöra upp lite längre.
Jag kommer att gå vidare och öppna upp version två, där
Vi ser att det finns en ny fil, helpers.php.
Vi får se vad som finns i ett ögonblick.
Låt oss gå till index, som ingång som tidigare.
>> Och nu märker jag att kräva helpers.php, inte sidhuvud eller sidfot.
Men medhjälpare är ungefär som helpers.c och helpers.h från PSET 2
eller PSET 3 för länge sedan när du faktiskt gjorde söka och hitta för den PSET,
och du hade all din kod för sortering och söka i en separat fil.
Det är vad som händer här.
>> Och nu line 3 ser lite annorlunda ut.
Och det är bara en rad.
För att göra detta ännu mer klart, jag kunde bara
gör detta för att vara stilren med allt annat vi har gjort.
Men det är inte riktigt att ändra funktionaliteten.
Det är bara en rad med verklig kod.
>> Tydligen finns det en funktion någonstans kallas render header,
Och det är här saker bli ganska kraftfull.
Lägg märke till att insidan av sina parenteser är vad andra stycke syntax?
Det är nog lite svårt att säga, men märker there's-- Jag ska lägga lite vitt
utrymme.
Det finns hakparenteser.
>> Och hakparenteser såg vi lite sen i samband med associativa arrayer,
vilka är, återigen, liksom hashtabeller.
Och om du tror att nu till C, den ordning argument till en funktion
måste alltid vara densamma.
Du måste komma ihåg vad beställa är-- x, y, z eller z, y, x--
och du måste alltid ge dem i samma ordning eller slå upp dem
om du har glömt.
>> Men detta verkar vara ett smart sätt passera ett godtyckligt nyckelvärde
par vari titel är namnet av ett argument i det här fallet
och CS50 är dess värde.
Och det faktum att jag har dessa hakparenteser
här innebär att jag kunde också passera i något
som en vecka är 1 eller 0 eller 2 eller 3.
Så vi har parametriseras denna funktion på ett sådant sätt
att det kan ta flera ingångar, men nu är det bara en.
>> Om jag nu går in helpers.php, märker vad den gör.
Detta är en liten bit av ny funktionalitet,
men nu bara ta på tron ​​att detta är
syntaxen som du definiera en funktion i PHP.
Du säger bokstav funktion.
Du behöver inte ange en avkastning typ, och det är konsekvent
med den rörliga detalj tidigare där man inte riktigt starkt skriva.
>> Här anges bara att som standard, detta
tar en associativ array som argument.
Och vet du vad?
Om användaren inte passerar någon i, anta ett standardvärde.
>> Detta är en funktion som C inte har för oss, vilket är trevligt, för nu
uppgifter, även om du inte ger den något,
kommer att bli en array men en tom.
Och som en sidoreplik, extrakt bara gör något funky
där det tar alla nycklar från associativ array, alla de saker
du kan sätta hakparenteser, och skapar variabler ur dem
så att vi i slutändan kan få tillgång till dem i footet.php och header.php.
Det är lite abstrakt, så låt mig påpeka detta.
>> I index.php, märker att jag är passerar ett nyckelvärde par titel
med ett värde på CS50.
Om jag tittar nu på helpers.php, märker att RenderHeader
extraherar att data som jag passerar in, och sedan kräver header.php.
Vad jag har gjort är en slags fattig mans Genomförandet nu av följande.
>> Om jag öppnar upp header.php, märker att jag har inte längre hårt
kodade ordet CS50 i denna header-fil.
Jag har lagt det här visserligen vedervärdigt namngiven funktion, HTML speciella tecken,
där.
Men lägg märke till vad jag har gjort.
Jag har öppet HTML.
Jag har då öppet huvud och öppen titel.
>> Och sedan insidan av titelns öppna och nära taggar, jag har en bit av PHP-kod.
Och det här är en trevlig men av syntax, vilket betyder bara echo ut.
Det betyder bokstavligen this-- echo following--
men detta är sexigare att skriva.
Echo ut titel som har förts in.
>> Men vad tror du HTML speciellt röding handlar om,
särskilt om du har några tidigare HTML erfarenhet?
Vilka tecken kan vara farligt att passera in till en sida
var du dynamiskt generera webbsidan med kod så här?
Låt mig gå till den här filen, version två, och se om jag inte kan framkalla detta.
>> Version två är här.
Och märka allt är bra, fungerar bra.
Men antar att jag går in i index.php och Jag specificerade att titeln på min sida
är inte CS50.
Det är öppet fäste script alert hallå världen, nära enda anbud,
nära parentes, semikolon, öppen fäste, snedstreck manus.
>> Script, som vi ska småningom ser, är en tagg
som du kan använda för att använda en annan programmeringsspråk som kallas
JavaScript insidan av en webbsida.
Och nu märker logiken här.
Här är en nyckel som heter titel.
Här är det är galet långt värde nu.
>> Men om jag går till hjälpare sid- eller snarare, rubriksida,
Jag ringer denna funktion på den titeln först.
Så om jag nu ladda om sidan, jag ser detta som ser löjligt,
men det är säkert.
Det ser bara dumt.
>> Men anta i stället Jag hade glömt det.
Och märk mina ord, ett nonzero nummer av er kommer att glömma att göra detta
och du kommer att få några flitiga student eller vän kommer upp
till dig i CS50 mässan eller anonymt nattetid peta runt på din webbplats
och i huvudsak injicera kod vad varken du på din webbplats
på något sätt.
>> För om jag bara spotta out titel här och titel
there-- bra, om titeln bokstav ser ut så här och PHP
som ett språk som kan spotta ut andra språk text,
Detta är bokstavligen går att ersätta denna tagg med,
naturligtvis vad jag lägger på annat håll.
>> Så om jag nu går här och ladda om efter lossa dessa säkerhetsmekanismer,
Nu har jag hallå världen här.
Nu är inte så stor av en hantera, men du kan göra något
lite mer skadlig här, som det finns
andra tags-- som vi får se när vi tillbringar mer tid i JavaScript-- som plats
dot href blir, citat, unquote, HTTP business.com, men motsatsen till det
från den andra dagen.
Och nu kan du framkalla en webb sida att faktiskt gå omedelbart
på denna webbsida här.
>> Och faktiskt, jag vill inte att ens gå till business.com
för jag vill inte att veta vad det är.
Men även detta kommer att utlösa kod som skall injiceras in i denna sida.
Så detta är bara att säga att även om introducerar vi super tidigt på någon
av dessa mer komplexa strukturer, det är alla mot en ände av att se
att din kod inte kan exploateras.
>> Så nu en tredje version här.
Det börjar bli lite snyggare.
Jag visste inte riktigt like-- anal sidan av mig
började bli lite irriterade av Att jag hade en funktion som kallas
RenderHeader och RenderFooter som var nästan identiska.
Så det slog mig, varför inte Jag parameter dessa funktioner
i bara en som heter render, har det ta ett andra argument
som namnet på mallen, den slutliga att render-- antingen sidhuvud eller sidfot?
Och sedan eventuellt, om jag vill att passera i vissa nyckelpar värde
som jag gör om titeln för header men inte för sidfoten,
Jag skulle kunna göra det.
>> Och så nu när jag går in helpers.php, det är lite mer komplicerat.
Och jag ska vifta händerna på detaljer, men det är bara en funktion.
Så det är ett steg mot en bättre design.
>> Vi kan ta detta ett steg längre.
Om jag går in i min fjärde version av denna, märker nu
att jag gör något ännu mer typ av kryptisk.
Och jag vet att detta är en mycket att absorbera på en gång,
men vi är bara typ att städa upp saker.
Nu sätter jag mina medhjälpare fil i en mapp som heter
includes-- bara en godtycklig namn där jag vill lägga saker
att jag vill include-- och sedan resten av detta är samma.
>> Men om jag ser nu i gedit, märker att jag har blivit kvitt
av alla dessa andra filer och jag har flyttade dem till exempel in på här.
Och sedan i mallar, Jag har den här här också.
Och så detta är allt nu mot ett steg att använda en mycket bättre designmönster.
Och vi är mycket snabbt kommer att flytta bort
från PHP: s standardfunktionalitet, som vi började här med,
där du bara commingle PHP, och HTML, och din CSS,
och du bara spotta ut och du går om din väg.
Det kommer inte att bli mycket att underhålla.
Precis som i C, vi började använda flera filer och flera funktioner
och facto saker som.
Vi ska göra samma sak här.
Och faktiskt, i det femte och sista versionen här, gjorde jag en annan sak.
Du kan även använda dot dot, som, igen, är bara den överordnade katalogen.
För att vara ännu mer säkerhet medvetna, för om jag tittar på lyssnings
här för femte och sista versionen, meddelande att jag har en katalog som här kallas
offentligt, och sedan på samma nivå, så att säga,
Jag har ingår och mallar och sedan den textfil readme.
>> Och anledningen till att jag har strukturerat Det gillar this-- och så många webb
värdar, särskilt de $ 5 a månad och kära eller $ 10 månaders sådana,
Om du någonsin har haft en av dessa services-- vad så många av dem
är de förväntar bara att du ska dumpa alla av dina filer till en katalog,
som vi gjorde redan med detta första exempel.
>> Men så fort du börjar bygga mer sofistikerade webbplatser som bara lagrar
data som du bryr dig om och filer som du bryr sig om, faktiskt organisera saker
korrekt och med större säkerhet medvetenhet i åtanke kan
vi börjar försvara mot alla vänner
att du har antingen eller utanför denna klass som,
så fort du börjar göra program själv på webben,
kommer att börja plocka på dig och på dem.
>> Och så kommer vi att titta i slutändan på denna design.
Detta är bara en bild som skildrar följande.
Vi kommer att sätta alla våra programmering logik i en eller flera filer,
och vi ska bara börja kalla dessa styrenheter.
Det är där hjärnan hos våra webbplatser faktiskt är.
Sen ska vi har utsikt och vyer
är så enkelt som att bara separat files-- kallade mallar, ofta.
De har bara estetik min sida,
vad jag vill att sidan ska se ut like-- färgerna och layouten
och positioner alla variabler.
>> Och sedan mer intressant att vi så småningom kommer till
är den modell, som kommer att vara precis ordet vi slap på andra tekniker
att vi sätta i den bild, som verkliga databaser,
så att när du vill att spara information,
du inte bara skicka ett mail till din proctor eller till dig själv,
du faktiskt lagra det i en databas med användning av ett annat språk kallas SQL.
Och så vi lämnar här i dag och plocka upp med detta på onsdag
och införa databaser då.
>> [MUSIK SPELA]