>> Till att börja överbrygga vad kan vara din enda erfarenhet
med webbprogrammering, vad jag trodde att jag skulle göra är att stjäla ett par
exempel som du kanske har sett i 50
om du tog det förflutna år eller två, eller kanske inte har
om du tog det för några år sedan
som är baby steg mot en pyridin känner som MBC,
Model View Controller, och vad innebär det?
Det är att vi får se igen kanske är bara ett sätt att start
att rensa upp i utformningen av vissa webb-baserad mjukvara,
eller det kan vara klientsidan bygger också, men vi kommer att använda det
inom ramen för PHP, så att vi kan börja
för att göra mer komplexa projekt och sortera
separata olika typer av kod i programmet;
särskilt så att när vi har flera personer som arbetar
om ett projekt är det mycket lättare att rita linjer.
Så låt oss först ta en titta på en suboptimal sätt
att genomföra något.
Anta att jag ville göra en super enkel kurs hemsida för 50
eller någon annan klass, och den klassen har saker
som föreläsningar och en kursplan.
Jag skulle kunna göra något liknande en h1 tagg högst upp på min sida
och en oordnad lista med li listobjekt för
att bara ha en punktlista över menyalternativ, så super enkelt.
Så hur kan vi göra detta?
Nåväl, låt mig gå in i min terminalfönster här,
och märker att jag har en läs mig och vi ska länka till denna kod
på kursens hemsida i lite,
och märker att jag har index dot htm - index prick php.
Så låt mig gå vidare och öppna det, och visst är det typ
dumt att detta även kallad php
eftersom allt jag har är en php kommentar
och sedan allt annat är bara rå html-kod.
Men även detta är version noll,
så ett steg mot något mer intressant,
men märker jag hårdkodade CS50 som rubrik, CS50 i h1,
och nu har jag det föreläsningar länk,
nu har jag kursplanen länken.
Okej, så det inte verkar så orimligt
tills du följer en länk som föreläsningar och du inser
det okej det är annorlunda innehåll, men det är typ
av samma sak; det är en titel på sidan och oordnad lista.
Jag klickar vecka noll från förra året, och det är typ
av samma sak, en h1 tagg och en oordnad lista
och slutligen jag klickar detta, och jag får lite löv,
vilket är bilderna från att särskild föreläsning.
Så något säger mig Jag är på väg att krypa.
Om jag öppnar upp föreläsningar dot php meddelande
att det är ganska mycket kopiera och klistra från den föregående fil;
Jag ändrade bara titeln till h1, och vad dessa länkar är.
Ännu värre, om jag går i vecka noll dot php,
det är samma kopiera klistra jobb
med bara lite innehåll kalibreras.
Så säkert finns det en möjlighet här att förbättra,
och säkert detta bör vara en bra tumregel;
när du känner dig själv kopierar
och klistra in något mer än kanske en gång,
röda flaggor ska förhoppningsvis börjar gå bort.
Men hur ska vi gå om att förbättra detta?
Tja, det finns ett par olika sätt, och de tekniker du kan använda
i php har utvecklats under tid, men låt oss prova detta.
Låt mig gå in i version ett, så att nästa iteration av denna,
och låt mig försöka städa upp lite.
Rätt, en av php s enklaste mekanismer
för att lösa detta problem är det gamla skolan kräver funktion,
som ganska mycket gör en kopia och pasta av innehållet
av någon fil här, som C är skarp innefattar,
och andra språk har mycket likartade konstruktioner.
Så det ser lite konstigt nu,
det är definitivt inte en slutföra ser webbsida,
men förmodligen vad är insida header dot php.
Alla andra saker, till höger, html-taggen, huvudet taggen,
rubriktaggen, alla grejer som var ovanför huvud väsen
på sidan, vilket är utan tvekan bara oordnad lista,
och i sidfoten är förmodligen som den slutna body-taggen,
den slutna html tagg; ganska ointressant
men duplicative grejer.
Okej, och se till nog om jag går
i header prick php är det bara typ av föräldralösa fragmentet
från toppen, och om jag gå in i sidfoten dot php,
det är den föräldralösa fragmentet från botten,
och jag använder de samma fragment i mina andra filer,
som föreläsningar dot php.
Okej, vad är så bra om detta skulle du säga?
Yeah?
>> Enkelhet.
>> Enkelhet?
Jag vet inte den här typen av utseende mycket skrämmande för mig nu, eller hur?
>> Om jag ville ändra din header, skulle du inte ha
att ändra det i alla tidigare liknande filer.
Du ändrar bara det i sidhuvudet.
>> Exakt, så kanske i den meningen att det är enklare,
Kanske skulle jag rama in det som det är bara att det är lättare att uppdatera den.
Det är kanske lite renare
eftersom du har uppdaterat det på bara ett ställe.
Så det är ganska övertygande; vad är en nackdel
av denna metod, eller vad problemet kvarstår
att vi inte riktigt har löst?
Yeah?
[Av Mic kommentar]
Ja, precis, jag menar, jag är fortfarande kopiera och klistra in;
det är lite mindre, men jag bara drog upp två av dessa filer,
och de ganska mycket fortfarande såg identiska.
Det var ett krav på topp, en kräver i botten,
och en oordnad listan i mitten
som i sig själv var fortfarande strukturellt densamma.
Dessutom märker detta, om jag faktiskt se detta exempel
låt mig gå till Version One nu,
och märker jag har CS50 Föreläsning Kurs.
Uh oh, CS50 Vecka Zero Week En och CS50 onsdag, fredag,
Jag har typ av klippa ett hörn.
Vad var - vad var de titlar tidigare?
[Av Mic kommentar]
De var som föreläsningar i Vecka Zero, som om den var snäll
av sexigare, och det faktiskt hade viss dynamik till det,
och detta är typ av - jag är bara typ av punting nu
och bara om man antar att hela webbplatsen är CS50
och okej det fungerar, men det är absolut inte lika elegant
eller som en slags raka framåt som det en gång var,
men det är vettigt, eftersom om man tittar på index dot php
och föreläsningar dot php och vecka noll dot php,
de är alla inklusive samma fil,
så hur kan vi förbättra detta?
Vad är nästa iteration av denna kod förmodligen kommer att göra?
[Av Mic kommentar]
Ja, exakt, så om - och låt mig sammanfatta
med att vi i allt väsentligt vill för parameter att header
så ja det finns fortfarande en hårdkodad h1-tagg, men grejer
däremellan, den öppna och nära taggen,
är förmodligen dynamisk, och kommer från något annat.
Kanske "hämta sträng" eller sak efter frågetecknet
i webbadressen var någonstans annat, så låt oss ta en titt.
Så om jag går in i version två,
nu märker att jag har fick ytterligare en fil,
det ser ut som hjälpare dot php.
Jag vet inte riktigt var du ska börja så jag ska börja bara
på index som som alltid, och nu märker att det är lite annorlunda,
så jag har en kräva linje
upptill kräver hjälpare dot php,
men jag kan kalla det vad jag vill,
men nu märker linje tre det finns ett funktionsanrop
för att göra huvudet, vilket är intressant endast i den mån
enligt vad som förs vidare i tydligen, den anpassade titeln
för just denna sida.
Samtidigt finns det rendera foten vid botten,
och jag behöver inte någon parametrering där det bara
en sidfot, men nu verkar det
att vara ett steg mot en bättre lösning, render header tar,
och vad gör torget parentes anger för dem
som inte har sett php någonsin eller på ett tag?
[Av Mic kommentar]
Ja, det är en array.
Det är en associativ array eller en hash som associerar nycklar
med värden; det är som Java Skript, invändning notation,
eller andra språk, liknande syntaxs.
Okej, så vad är i hjälpare dot php?
I hjälpare dot php är det bara ett par funktioner,
återge sidhuvud och återge sidfot.
Så ett par detaljer om mindre bekanta,
så först och främst det faktum
att göra header tar en uppgifter argument som är tydligen
tilldelats den tomma matris där betyder vad?
Vad innebär det att göra jämlikar öppen bygel stängd bygel
som en parameter i php?
Det är standardvärdet.
Så om jag inte klarar i rad eller något argument som helst
till göra sidhuvud eller det gör sidfot funktion,
Jag kan åtminstone förtroende som författare av dessa funktioner
att data kommer minimalt vara en tom array;
Det kommer inte att odefinierade eller falskt, eller något liknande,
det kommer att bli precis vad Jag gav det som en standard.
Nu är det här lite av en sorts en hackish sätt lastsymboler
i ditt namn rymden så att säga,
men det fungerar ganska väl mot detta
att genomföra vår egen sorts fattigmansmallmotor.
Okej, det finns en hel del verktyg där ute för Python Ruby
och PHP som ger dig mall kapacitet
och det är precis vad vi vill ha.
Vi vill ha en mall som har en h1 öppen tagg, en h1 stängd tagg,
och typ av en plats hållare i mitten,
och vi vill fylla dem plats hållare i form av denna funktion,
så denna funktion extrahera råkar vara så
för att ge dig följande kapacitet.
Om du har en associativ av matris med nyckelpar värde
liknande foo är lika med bar, extrakt kommer att skapa en lokal variabel
heter effektivt dollartecken foo och ge den ett värde på bar
så det exploderar din associativa array från nyckelpar värde
in nya variabler med motsvarande värden.
Och sedan kräver dot header dot php är densamma som tidigare,
så vad ska vi antagligen att se insidan av header dot php?
Det har nog fått det h1 tagg och nära tag; vad som händer
att vara inne i det förmodligen i mellan den?
[Av Mic kommentar]
Exakt, det finns förmodligen några omnämnande av dollartecken titel
och visst, om jag zooma in På detta finns det min titel taggen,
det är min h1-tagg, och inne det är en dynamisk insättning
av dollartecken titel, men bara för bra åtgärd,
Jag gör denna html special ladda atrociously namnges
funktion, men det är användbara; vad gör det
eller vad det skyddar mot?
Detta är faktiskt en lösning till ett hot som du antyder;
du skulle ha lett oss till.
[Av Mic kommentar]
Exakt, så om en illvillig användare eller en intet ont anande offer
av en nätfiskeattack klickade på en länk
som i själv hade ett frågetecken och något som foo är lika med,
och sedan värdet av foo var faktiskt
liknande öppen bygel manus, stängd fäste,
och lite JavaScript-kod;
om du inte kalla detta långa huvudfunktion,
du skulle faktiskt vara att smitta rå html i din webbsida,
vars resultat är att du kanske luras.
Du kanske lura användaren till att köra JavaScript-kod
att han eller hon gjorde inte egentligen tänker.
Och även om vanligen du bara skada dig själv,
som bara du vet en idiot kommer att skriva
i öppet fäste manus, stängd fäste, och säga alert
eller något liknande och gör sig själv
in med några konstiga resultat, Om du blir lurad
till att klicka på en länk som har rå JavaScript inbäddade i den
som värdet av detta attribut,
Du kan bland annat stjäla någons cookies
eftersom det finns en egenskap kallad dokument dot kaka
i JavaScript som gör att du att ta en användares sessionscookie,
och om du minns vad en sessionskapning attack är,
lång historia kort, det är en sätt att faktiskt lura någon
till att ge dig den virtuella handen stämpel och sedan ta
över deras Facebook-konto eller någon annan typ av konto.
Okej, så det här är lite lång,
men det är bara med hjälp av rå html-kod.
Detta motsvarar att ringa eko
eller skriva ut på ett effektivt sätt, och vi är i huvudsak att sätta in
som dynamiskt.
Så vad mer är fortfarande här?
Nåväl, låt mig gå in i Version Three här,
och vi får se en något annorlunda -
exakt samma fil layout men Grafiska
att den här gången ska vi generalisera sidhuvud och sidfot
som mallar, så vad menar jag med det?
Vad är det en sak det är annorlunda här?
Vad har förändrats sedan den senaste versionen?
Subtila, men det är utan tvekan bara en bättre renare design.
Yeah?
[Av Mic kommentar]
Ja, det finns bara en standard återge funktion;
Jag har inte speciellt fall återge header eller göra sidfot,
vilka båda om man återkallande från hjälpare dot php,
vi är ganska identiska förutom deras namn
och mallar som de ingår.
Varför inte bara parameter det gör funktionen
och ta ett argument, det är namnet på den mall,
och en andra valfria argument som är de viktigaste Värdesparen
som du vill koppla in
Så om jag tittar nu på hjälpare dot php meddelande
att jag är en lite snyggare nu.
Jag är faktiskt kontroll gör filen finns och i så fall gå vidare
och kräver den; bara i fall att användaren oavsiktligt typer
i några falska mallnamn du vill inte kasta ett fel
i programmet så att vi kan minimalt göra dem här
gynna här.
Okej, men kan vi ta detta ett steg längre?
I den här versionen här märke till följande.
Jag har precis skrivit ls, och vad omedelbart hoppar
ut är något annorlunda.
Så det finns två kataloger, höger,
och så detta är nu ett steg mot vad kommer så småningom att bli en mer
lämplig ram.
Detta är typ av slarvig för mig att kasta alla
av mitt innehåll inom en offentligt tillgänglig katalog
som bokstavligen kallas allmänheten.
Och även om tyvärr, en massa ramar,
äldre speciellt, och även vissa webb inlägg,
Dröm Host bland dem, krafter dig att lägga alla dina filer
i motsvarighet till en offentlig katalog även
Om dina filer kanske inkludera databas lösenord
och användarnamn eller andra sådana meriter,
det är inte alls bra design.
Mycket bättre är bara lägga
i den offentliga katalogen vilken helt har
för att vara användartillgänglig, och allt annat
att du även som hjälpare dot php,
det finns ingen anledning till att det bör vara tillgängligt via nätet via en
webbläsaren med en webbadress.
Det kan vara helt ofarlig om användaren vill se kanske
som par, men det är bara principen av den,
och Gud förbjude det faktiskt gör har ett användarnamn och lösenord;
du inte vill att användare av misstag
eller avsiktligt vara kunna komma åt den.
Så vi är inte riktigt på en perfekt inställning här,
men märker följande nu.
I index dot php, märker att Jag är fortfarande kräver hjälpare,
men jag gör det på ett sådant sätt att jag slags organisera alla
av de filer som kommer att inkluderas
in i en underkatalog som heter som konventionellt innefattar,
och då kallar jag göra för Sidhuvud och sidfot som tidigare.
Så det enda Jag har gjort är typ
av omorganisera mina kataloger för att vara lite mer anal
om filstrukturen.
Men om vi nu går till detta femte exempel,
märker här att vi nu har en trio av mappar,
och detta är en bit vilseledande för tillfället
därför för enkelhets skull av hänsyn till klass,
Jag har precis kastat allt
in John Harvards Public Directory bara
så att vi kan navigera den via en webbläsare, utan varsel -
ignorera denna del för bara ett ögonblick,
det faktum att jag är där.
Lägg märke till att jag har tre underkataloger: offentliga,
mallar, och inkluderar.
Tanken är nu att på ett korrekt konfigurerad webbserver I
skulle tala om för Apache att detta hemsida har allmänheten
filer här, och ingen annanstans.
Så vad filen tror du Jag kommer att se insidan
av allmänheten, om jag skriver ls?
Vad är det åtminstone en fil det är nog där inne?
[Av Mic kommentar]
Okej index prick php, och vilken fil är naturligtvis inte
där bland andra?
Som medhjälpare dot php, header dot php, sidfot dot php;
samtliga fragment, all funktionalitet
som egentligen inte behöver att vara tillgänglig för allmänheten,
den behöver för att kunna användas av filerna
som är tillgängliga för allmänheten, men de själva,
ingen användare behöver se eller lägget en URL till medhjälpare dot php.
Lägg märke till att i stället om jag går
in omfattar det finns hjälpare dot php,
och om jag går in i mallar,
det finns sidfot och header prick php.
Ärligt talat, jag skulle ha lagt dem i samma katalog,
men jag försöker att bli ännu mer anal om att hålla filer
det är bara typ av statiska mallar annorlunda
från funktionella filer som hjälpare dot php,
och jag bara följa några ganska vanliga konventioner
ringer katalogerna omfattar och mallar.
Så det enda som förändrats sedan är återigen på väg.
Om vi ​​går upp hit märker att jag nu bara har
att inkludera en relativ katalog,
dot dot snedstreck innefattar hjälpare dot php,
eller jag kan vara lite mer korrekt och faktiskt göra något
så här, php och mycket
språk har dessa speciella symboler
att företräda aktuella filens katalog,
så streck streck dir streck streck representerar
den katalog är i denna fil,
och så om du bara sammanfoga med punktoperatorn, att,
som skulle uppnå samma resultat,
och tenderar att vara lite mer robust eftersom du kan få
i situationer med relativt kataloger bara säga prick
eller dot dot kan faktiskt ta dig till fel ställe,
så det brukar vara lite mer robust.
Okej, så vad men återstår?
Vad gör du fortfarande inte tycker om det här?
Vad kan förbättras och du kommenterade den tidigare tror jag
att det finns fortfarande vissa frågor?
[Av Mic kommentar]
Höger, säkert vi inte har för att börja skriva ut sidor
att se ut så här, eller hur?
Det känns inte så mycket bättre,
det finns fortfarande kopiera klistra.
Jag har fortfarande kräva linje på toppen.
Jag har fortfarande göra sidhuvud återge sidfot.
Det finns en hel del dubbelarbete.
Yeah?
[Av Mic kommentar]
Ja, precis, så vi har tagit ett steg mot sorts delning
upp "c" från "v", så MVC är Model View Controller;
controller är typ av hjärnor av ansökan.
Modell tenderar att vara de uppgifter eller någon gemensam funktionalitet,
och visa en tendens att vara den estetik, mallen,
så vi har tagit ett steg mot separera "c" från "v"
eftersom vi nu åtminstone har denna mall katalog,
men även där vi i huvudsak har en controller per fil.
Det ser inte ut som det finns mycket logik som händer här,
men index dot php är effektivt en regulator.
När du besöker en webbadress och slutar i index dot php,
all den logik som genomför den sidan är rätt
i index dot php, och Samma för föreläsningar dot php.
Samma för vecka noll dot php.
Så vi har slags Strone vår logik överallt,
och det känns som detta kommer inte
att skala mycket väl när vi har inte fyra men fyrtio sidor
Om varje sida börjar med jag kopiera en äldre version
på filen och bara tweaking några
av innehållet i den.
Så vi har bara tagit ett steg mot detta,
och ett av verktygen Vi ska presentera
på onsdag är en Framer kallade "Laravel"
och detta är mycket populär php ramverk,
andra som innefattar "Fuelphp."
Det är en äldre man kallade "CodeIgniter."
Det finns en som heter "Cake".
Det finns en som heter "Symphony".
Jag menar om du Google PHP ramar,
det är en avskyvärd antal liknande ramar
att människor som genomförs.
Laravel är en av de mer upp och uppstickare;
det är en av de renare kära, och du hittar
som i slutändan hjälper det spara ganska lite
tid även om det finns lite av en inlärningskurva,
men att vi kommer att vägleda dig över på onsdag.
Dessutom kommer vi att presentera vad som kallas en "ORM."
I det här fallet använder vi något som kommer
med detta ramverk kallas Laravel.
Det kallas "Eloquent" och detta är bara ett lager av kod
som gör det möjligt att bland annat saker pratar med databaser.
Och även här, låt mig stjäla en exempel som antingen nyligen
eller en återgång till några av er från 50.
Om du tog 50, och du gjorde "CS50 Finance,"
du kanske kommer ihåg filer som du skriver eller skrev om som ser
så här, var denna inloggning dot php, och på den tiden,
särskilt eftersom vi inte spendera mycket tid
på php fundamenta tidigt på,
detta kan i sig ha varit ganska utmanande,
och så gjorde vi, faktiskt, försöka förenkla konstruktionen.
Vi visste inte riktigt skilja "M" från "V" från "C" så mycket
för problem som "Sju CS50 Finance,"
men märker en sak som ska förhoppningsvis starta
att snart gnugga dig fel sätt, är ungefär så här.
Jag menar, inte bara var det här logga in punkt php en styrenhet.
Det var också prata direkt
till en databas specifikt med hjälp av uppföljaren, som inte kommer
att skala mycket väl när du börjar arbeta med en
eller två eller tre parter.
Till exempel, om en av partnerna är ansvarig
för att skapa din databastabeller och kommande
upp med dina index och räkna
ut vad nyckeln ska vara, det primärnycklar, främmande nycklar,
och allt detta, att besluta om tabellnamn och allt det där.
Nu har du den andra personen i gruppen behöver för att veta allt
av de designbeslut som han eller hon har gjort, och du nu behöver
att hårdkoda dessa beslut in i din fil, så nu är han
eller hon är ganska mycket begränsad
att aldrig ändra dessa tabellnamn.
Aldrig igen för att ändra de som lämnats in namn
utan att informera dig.
Dessutom kan du inte riktigt enkelt arbeta på samma fil
utan att kollidera med varandra, om han
eller hon är ständigt ändra namn,
och du har den gamla versioner och så vidare,
så det är bara att bjuda in massor av huvudvärk.
Dessutom, som vi ska se snart,
även om du inte behöver
att göra särskilt avancerade frågor här,
när du börjar ha flera bord, två bord, tre, fem,
tio tabeller i en MySQL eller allmänhet en relationsdatabas,
du måste ansluta dessa tabeller ofta om bekanta, och du har
för att kombinera data från en med den andra,
och ärligt talat dina uppföljaren frågor börjar bli längre och längre,
och längre, och mer komplex, och det bara börjar
för att få en mycket enklare att göra misstag
och mycket svårare att få saker och ting rätt.
Och så verktyg som Vältalig och ORM går
att hjälpa oss att modellera våra data och det är också ett effektivt sätt att gå
att alstra den kod som vi måste börja att fråga databaser
i mer sofistikerade sätt.
Så om du har en primärnyckel hit och en främmande nyckel
här borta, allt du behöver göra är att lära ut att ORM,
Object Relation Mapper, vad detta förhållande är
och det kommer att räkna ut vad frågor för att utföra för dig.
Och endast i sällsynta fall behöver du
att nödvändigtvis skriva Uppföljaren kod själv.
Om du verkligen vill finjustera något,
men för det mesta kan du bara börja behandla enheter
i databaser så sant objekt och inte dessa platta rader
att du på något sätt behöver rekonstruera och de normaliseras.