[Powered by Google Translate] [Vecka 8]
[David J Malan] [Harvard University]
[Detta är CS50.] [CS50.TV]
>> Välkommen tillbaka.
Detta är CS50, och detta är början av vecka 8.
Ett par möjligheter denna vecka,
bland dem detta prat här, där mat kommer att serveras.
För mer information kolla in de bilder som är online.
Och även en annan händelse denna vecka av vår egen Thomas Carriero.
Han är en av CS50: s tidigare stipendiater huvud undervisning som nu på Dropbox,
och han är killen som ansluta oss med du vet vad,
så om du vill ha mer av det huvudet till deras samtal i eftermiddag för Dropbox och mer.
CS50 lunch är det fredag.
Vill med oss ​​om du har möjlighet, 1:15, som vanligt, på Fire and Ice.
>> Och nu har vi dyka in något som kallas Seminarier.
Våra CS50 Seminarier, minns, är dessa valfria klasser leds av undervisning stipendiaterna
och naturligtvis assistenter och vänner i kursen,
folk från en grupp på campus som heter ABCD, som är en grupp av
technophiles på campus, samt en grupp som heter HCS,
Harvard Dataföreningen, studenter som är liknande intresserade datoranvändning.
Årets roster av seminarier ingår seminarier om Android och iOS och JavaScript
och PHP, Unix, Vim, och mer, så inser att dessa seminarier kommer upp.
Om du vill OSA för någon av dem gå till denna URL där.
Vi kommer då att lägga på kursens hemsida på tider och platser när de är klara.
Men vet att det finns 5 års värde av tidigare seminarier finns tillgängliga online,
av vilka många är fortfarande mycket aktuell i fråga om teknik du kan
vill spela med för den slutliga projekt, så gå dit för några tillgängliga videoklipp därav.
>> CSS, de av er som är bekanta med CSS redan,
vad är det i ett nötskal?
Vad är CSS?
Det övergripande formatmallar och vad betyder det?
Vad gör det för oss, CSS?
Okej, låt oss värma upp med en enklare en, HTML, Hypertext Markup Language.
Vad gör det för oss?
Någon alls?
Det börjar bli riktigt besvärlig ställer dessa frågor.
HTML, Hypertext Markup Language.
Ja? Nej?
[Ohörbart elev svar]
Okej, bra, gör det oss att markera text som ska visas i en webbläsare.
Det är inte ett programmeringsspråk.
Det är verkligen en märkningsspråk, vilket innebär att det instruerar webbläsaren hur du vill se
information så den enklaste inkarnationen av detta som vi har sett
är något super enkelt som boldfacing, säger öppet fäste B stängt fäste
gör denna text fet, och det är faktiskt bara ett av många sätt
där vi kan göra det, och faktiskt, i dessa dagar en bättre metod
att stylizing din webbsida, göra saker fet och kursiv stil
och centrerad och motiveras och liknande, inte sker via HTML-taggar ensam
utan snarare med en teknik som kallas CSS, Cascading Style Sheets.
Detta är ett språk i sig.
Det är inte heller ett programmeringsspråk men-
alla, är det Dan som håller med oss ​​i dag.
Några tekniska svårigheter. Inte ett problem.
>> CSS tillåter oss att stilisera en sida
genom att så kallade egenskaper, så låt oss ta en titt på denna
genom några grundläggande exempel.
Låt mig gå in i apparaten i dag.
Jag har källan 8 Måndag katalogen här
och jag kommer att gå in i en katalog som heter CSS där vi har ett helt gäng
filer som väntar på oss här,
och i denna mapp har vi till exempel search0.html från förra gången.
Nu minns med search0 vi kvar på denna anmärkning
genom sorts genomföra Google eller egentligen bara fronten för det en vecka sedan eller så,
och märker att vi hade några nya taggar där.
Vi hade h1 för en stor, fet rubrik,
form, som tillät oss att faktiskt ha ett HTML-formulär för inmatning.
Action, vad var meningen med en handlingsplan attribut
på HTML-formulär tag?
Vad var meningen med detta, åtgärder?
Jag ska bara göra det här i dag.
Action är den destination där formuläret ska lämnas in.
Det faktum att det står action = "google.com / search"
betyder att när användaren klickar på skicka-knappen eller motsvarande
vilken form fält som de fyllt kommer att skickas inte till vår server
eller vår apparat utan till den specifika webbadress på Google.
Och metoden det kommer att använda heter få,
och få, för nu är bara en teknik för att överföra informationen vidare till en webbserver
genom URL, så låt oss ta en snabb titt tillbaka på hur det fungerar.
>> Lägg märke till att det finns en ingång som heter q
vars typ är text och sedan en andra ingång av typen lämna
vars värde är CS50 Sök, och faktiskt, om vi öppnar upp filen här,
search0.html, det är en super enkel form,
och om jag söker efter något som datavetenskap
och sedan trycka Enter eller klicka på CS50 Sök
märker att det som händer är bortom sig till Google
Jag har särskilt hamnade på denna URL i toppen,
google.com / search? q = dator + Science,
och datavetenskap är naturligtvis vad jag skrev i.
Den + betyder bara det är där ett blanksteg var,
och det är gjort av webbläsaren bara för att se till att det inte finns någon
förvirring och vitt utrymme i själva webbadressen.
Och sedan q, naturligtvis, är parametern namnet.
Vi har inte sett hur vi programmeraren, faktiskt kan komma q. än.
Vi kan anta att Google vet vad de ska göra med det här,
men vi kommer dit i tid idag.
>> Men låt mig ta en titt istället på search1.html,
som ser lite annorlunda eftersom jag bestämde att denna form här var bara lite lamt.
Jag menar, det är längst upp till vänster.
Det finns egentligen inga estetik till det, så jag vill stilisera detta
lite mer som Google, vars hemsida, minns,
även om du inte kan besöka det så ofta, ser ut så här idag på Halloween.
Om vi ​​istället öppna upp version 1 av denna fil sök 1.html, jag centrerat det.
Fortfarande ganska ful, men åtminstone nu har jag börjat kontrollera estetik på denna sida,
inte bara märka detta.
Låt oss ta en titt på sökning 1, och det är egentligen bara en skillnad här,
som kan hoppa ut på dig, eller kanske inte,
men vad är en linje eller utdrag av skillnaden?
>> Det är denna stil attribut, så visar det sig att i HTML
de flesta element kan de flesta taggar har en stil attribut på dem,
och insidan av denna stil attribut är ett noterat sträng,
och att citerade strängen är CSS.
Du kan sätta CSS där
genom att ange det som en fastighet namn
följt av ett kolon följt av ett värde.
Detta är typ av en olycklig konstruktion beslut för några år sedan
att CSS är ett språk i sig,
men syntaktiskt det är mycket annorlunda från HTML.
I det här fallet ser vi att insidan av min hemsida, som är skriven i HTML,
Jag har CSS insidan av dessa citat, och konventionen för CSS
är att du har vad som kallas en fastighet följt av, igen, ett kolon,
följt av värdet av denna egendom, så det finns inget likhetstecken.
Det finns inga ytterligare citat.
Det är bara här kolonseparerad nyckelvärde par,
och textraden gör exakt vad den säger.
Det anpassar texten i kroppen på sidan, vilket är verkligen modet på sidan,
i mitten.
>> Okej, slutresultatet då, att vara tydlig, det är.
Inte alla som sexigare, men åtminstone är det centrerad och lite mer som den verkliga Google.
Men om jag öppnar istället upp version 2 i denna
och påpeka här nere en ny tagg helt och hållet?
Nu i huvudet på min sida, som tidigare bara hade som etikett
i alla tidigare exempel?
Det hade just detta, titeln.
För en stund sedan huvudet taggen såg ut så här.
Nu i stället har en stil tagg inuti den,
och detta även jag ber om ursäkt, syntaktiskt ser mycket annorlunda från HTML,
men du vänjer sig, varvid insidan av stil taggen
Jag kan nu räkna ut vad som var en stund sedan
ett attribut, stil attribut, och jag kan uttrycka det högst upp på min sida.
>> Varför?
Nåväl, detta är ett steg mot städa upp saker, ungefär som skriftligen C-kod
Vi skulle ibland skriver funktioner till faktor ut gemensam funktionalitet.
Det är bara lite renare att börja factoring ut saker som estetik
till en central plats i stället för allt intersperse hela din HTML.
Detta gör också vad det säger, även om det är lite av ny syntax.
Detta är här en väljare, och kroppen betyder bara att välja stomelementet
och tillämpa följande egenskaper till den.
Tja, är fastigheten exakt samma.
För bra åtgärd Jag har lagt ett semikolon i slutet,
som tenderar att vara konvent, och jag har svept hela denna egendom
i klammerparenteser eftersom jag kunde faktiskt ha olika saker här.
Jag kunde faktiskt säga något i stil färg: blå;
>> Nu även detta inte kommer att bli ett steg mot någonting allt vackrare,
men om jag nu går tillbaka till version 2 har jag åtminstone nu gjort kroppen av min
sidans text alla blå.
Knappen förblir densamma eftersom det är en ingång. Det är inte ren text.
Men allt annat som är text, liksom CS50 Sök uppe, i själva verket är blå.
Återigen är avlägsna allt vi har gjort nu från body-taggen, meddelande,
stil attribut, och vi har med i beräkningen det här.
Detta är inte en enorm förbättring, men om vi tar detta ett steg längre
märke till vad vi kan göra i denna tredje versionen här.
>> År search3.html webbsidan är nästan identisk
med undantag för vad nya tag nu?
Länk, så detta inte är mycket passande namnet
eftersom du inte länka i betydelsen en klickbar hyperlänk.
Snarare är du slags göra motsvarande # include i C
varvid länken-taggen med en href-attribut
och en rel attribut säger gå vidare
och kopiera klistra in innehållet i en fil som heter search3.css här, i huvudsak.
Det är inte riktigt göra det, men det är den anda av den.
Det säger går öppna filen, search3.css,
och behandla det som om användaren hade skrivit det här i huvudet av sidan
precis som jag gjorde i det tidigare exemplet.
Search3.css, tiden är ganska enkel.
Det är verkligen bara innehåller exakt vad som var en stund sedan
i stil taggen, men jag har vägts ut här till sin egen fil.
>> Även om vi inte har spenderat mycket tid alls i HTML eller webbprogrammering
bara intuitivt vad är motivationen, kanske för factoring ut
denna lilla snutt även av CSS i en egen fil
och sedan även den med den här länken tagg här?
[Ohörbart elev svar]
Okej, det är lättare att läsa i den meningen att du har din CSS i en CSS-fil.
Du har din HTML i HTML-filen, så det är lättare att läsa i den bemärkelsen.
Vad kan vara övertygande? Ja.
[Ohörbart elev svar]
Ja, så du kan ta med den många gånger, så nu vi gör dessa
grundläggande exempel med enskilda filer, men antar du faktiskt gör
en riktig webbplats som du kommer till pset 7 eller din slutliga projekt kanske,
och du vill ha flera webbsidor, så är verkligen vanliga på
själva World Wide Web och det skulle vara typ av Lama
att behöva kopiera och klistra in samma blå färg
och samma text linje center i var och en av dessa sidor.
Snarare det är mer förnuftigt att faktor ut, ungefär som vi gjort i C
med. h. filen, lägga den i en central plats,
i detta fall search3.css, och sedan låta någon fil
på din webbplats för att verkligen inkludera filen genom denna tagg här i linje 16.
Som regel är fallet, började vi med version 0, vilken typ av verk
men är inte nödvändigtvis det bästa, och med varje steg,
Sök 1, sök 2, och nu söka 3 har vi tagit dessa baby steg
mot mönster som är lite renare och är mer förberedande
för mer komplexa sidor som vi kan göra på vägen.
>> Låt mig öppna upp en sista exempel här bara för att visa
en ännu mer stiliserad sida, men låt oss först titta på HTML.
Detta är search4.html, och märker att strukturellt det är nästan lika
undantag för införandet av en ny etikett, div.
Div är en tagg som introducerar en uppdelning av sidan.
Du kan se det som en osynlig rektangel.
Det slags skapar en sträng av område på webbsidan
att man kan stilisera allt på en gång.
Vad jag har gjort här är som följer.
Insidan av min kropp taggen, som har varit där hela tiden,
Jag säger skapa en division av sidan här via ledningar 45 till 47,
och det innebär i huvudsak ge mig en osynlig rektangel längst upp på sidan.
Ge mig en andra rektangel, om än osynlig, under det,
och identifiera den med namn innehåll och sedan slutligen,
ge mig tredjedel uppdelning av sidan i botten
kallas ID.
Vi får se varför jag har gjort detta på bara ett ögonblick,
men konceptuellt har jag en rubrik division.
Jag har ett innehåll division, och jag har en sidfot uppdelning av sidan
även om dessa är bara i uppmärkning.
Användaren kommer inte att se 3 rektanglar,
men typ av strukturellt där bakom kulisserna
de är närvarande.
>> Nu, vem bryr sig? Varför egentligen göra det?
Allt annat på sidan är samma som vi har sett förut.
Här är min form. Här är min ingång, min ingång, en radbrytning och så vidare.
Här är en bild, men så vi får se om detta kom från på bara ett ögonblick.
Här är en sidfot, som är ny, bara för att jag ville införa
lite mer innehåll här.
Om vi ​​rulla upp märka att ID för denna div är rubrik.
ID för denna div är innehåll och ID för denna är sidfoten.
Och som namnet antyder, när du har ett ID-attribut
i HTML, per definition måste identifiera
en av delarna, en av taggarna i sidan.
Bördan är helt på dig att komma ihåg att du har en rubrik-ID redan.
Du har en sidfot. Du har en innehålls-ID redan.
Datorn kommer inte att räkna ut vad en tillgänglig ID är för dig,
så du kan av misstag ge 2 taggar en ID huvud,
och det skulle bara vara fel.
>> Du måste hålla i minnet vad du har skapat,
men när du har gjort det meddelande vad vi kan göra här.
Jag kan nu ange i min stil tag i toppen
eller ekvivalent i min CSS-fil, om jag fortfarande använder den versionen,
Jag kan säga # header, och vad det betyder är att oavsett tagg
i denna webbsida har ett ID på huvud
och #, bara genom mänsklig konvention, representerar ID.
Den kraftiga tecken eller pundtecken representerar ID.
Header är namnet som jag gav det.
Detta innebär tillämpa denna CSS-egenskap
till vad tag i den här sidan bär en ID huvud.
Samma affär här.
Tillämpa denna egenskap, som råkar vara samma, till någon del
vars ID är innehåll, och sedan ner här
märker jag blev lite finare med sidfoten.
Varje element vars ID är sidfot, av vilka det kan finnas bara en per definition,
gå vidare och göra sin teckenstorlek mindre,
dess typsnitt vikt fet, dess marginal 20 pixlar.
>> Vad betyder det?
Det är bara en marginal på toppen, botten och vänster och höger.
Detta innebär att ge mig en 20-pixel osynliga marginal runt det
bara för att driva allt annat ifrån det lite, som du kan göra i Word,
Microsoft Word eller Pages eller liknande.
Och sedan texten Centrera.
Låt oss se slutresultatet, och sedan går vi tillbaka till en återstående utdrag av CSS där.
Detta är version 4, vår sista för sökningen exemplen, och det är mycket, mycket sexigare.
Nu, i rättvisans namn, googlade jag bara "google generator typsnitt logotyp."
Och det får mig att skapa en GIF, ett bildformat, som ser ut som att det.
I själva verket kan du göra det också.
Vi har "google typsnitt logo generator."
>> Låt oss se om vi kan göra detta.
Okej, jag tror att detta är den webbplats jag använde.
Vi kan säga Ec 10, till exempel, och göra dem sina egna.
Du kan spela med denna hela dagen och sedan högerklicka på den
och sedan ladda ner den aktuella GIF, vilket är allt som jag gjorde.
Och faktiskt, det är därför i min HTML minns, här borta
Jag hade en bild tagg, som vi såg i korthet förra veckan
vars källa är logo.gif.
Och vad var återigen motivationen för att ha denna alt-attribut,
denna alternativa attribut?
Ja.
[Ohörbart elev svar]
Bra, så 2 anledningar faktiskt, om webbläsaren inte kan dra upp bilden
eftersom du har en långsam nätverksanslutning eller bilden är skadad
eller något liknande åtminstone människa kan se "CS50 sökning,"
och sedan även för tillgänglighet skäl.
Om du har en användare som är blind och använder en skärmläsare
och därför uppenbarligen inte kan se bilder som de kan åtminstone
höra texten om sin dator talar den till dem.
>> I allmänhet, är praktisera detta bäst när det gäller tillgängligheten av sidor
så att även användare i den situationen kan höra eller se, så att säga,
vad det är som är på din sida.
Det finns en annan sak som jag gjorde här
vilket är lite intressant, och vi får se mer om detta i problemet som 7
via en av de shorts som leds av en av de pedagogiska stipendiater.
Men # hänvisar till den taggen
vars ID är innehåll, men sedan finns det ett mellanslag och sedan finns det ordet ingången.
Tja, vad som är intressant om CSS är att man kan
avser taggar på en sida slags hierarkiskt,
och vad detta utdrag av CSS betyder är att hitta taggen
vars ID är innehåll och sedan tillämpa följande egenskaper
till alla de ingående taggar som är ättlingar av innehåll,
det är som är indragna i den.
Indrag, igen, är bara viktigt att datorn inte till människan,
men enligt praxis vi strecksats saker som vi går djupare in på en sida,
så detta betyder tillämpa en marginal på 5 pixlar någon ingång inslag
Det är någonstans inuti eller kapslade inuti
elementet vars ID är innehåll.
>> Vem gäller det för?
Tja, det finns faktiskt bara dessa 2 killar här.
Observera att insidan av formen finns 2 ingångar,
eftersom det har varit för alla dessa exempel.
Men märker att de 2 ingångarna råkar finnas inuti,
om än lite djupt, ett par lager av indrag,
insidan av etiketten vars ID är innehåll.
Vad betyder det här?
Om vi ​​går till webbläsaren här kan du se aldrig så lite,
Låt mig zooma in-att det finns lite stoppning mellan knappen
och mellan textfältet.
>> Låt mig tillfälligt stänga av det där.
Låt mig gå upp till mitt CSS, och låt mig gå vidare och bara
ändra marginalen från 5 pixlar till 0 pixlar.
Låt mig gå vidare då och spara filen, gå tillbaka till sökmotorn
och ladda och titta på mitten av sidan.
Allt blev ihop tillsammans, och när jag först piskade detta exempel upp
Jag trodde som såg dum med textfältet och sedan på knappen direkt under.
Jag ville pad det lite, så jag introducerade marginaler.
Vad vi inte kommer att göra i föreläsning är att gå igenom flera dussin
CSS-egenskaper som finns eftersom igen, det finns saker som teckenstorlek,
typsnitt vikt, marginal, text anpassa, och några andra dussin,
och vi hänvisa dig i problem som 7 olika tutorials på nätet
och referenser som gör att du kan plocka dessa saker.
Men vad som verkligen är viktigt i slutet av dagen
>> är att förstå hur dessa saker används.
Återigen, om vi har stil taggen inuti vilken
kan gå väljarna, den typ av identifierare som anger
vem vill du använda dessa egenskaper,
och sedan sätter de egenskaper som central värde-par
åtskilda av ett kolon och sedan slutade med ett semikolon,
eller så kan du rippa allt detta ut och lägg den i en separat CSS-fil
i sig.
Okej, några frågor om begreppen
eller helheten av CSS?
Du kommer åter se mer av det i pset 7,
men vi kommer att hålla det i allmänhet ganska enkelt.
Nej? Okej.
Det är dags för en verklig programmeringsspråk,
och vi ska återkomma till lite CSS i form av ett exempel.
PHP är faktiskt en underbart lättillgängligt språk
att det är syntaktiskt nästan ekvivalent med C.
Med andra ord, om du vet C, du vet för det mesta PHP,
åtminstone syntaktiskt, även om det finns några nya funktioner
och några nya begrepp vi måste titta på.
>> Men för det mesta, nu när vi övergången från C till PHP
de flesta nya grejer är verkligen i den stora bilden,
hur du använder ett språk att programmera på webben i stället för
på kommandoraden eller i en blinkande prompten som vi har gjort hittills.
För referens, särskilt med pset 7 och det slutgiltiga projektet framåt,
drar fördel av denna URL här om du vill läsa på formaliteterna i PHP.
Det är som faktiskt en gratis online lärobok effektivt
och du kommer också att upptäcka att det är riktigt nice om PHP
är att det finns hundratals funktioner som kommer med det,
medan i C du inte nödvändigtvis har tillgång till
fler funktioner än var i matematik biblioteket, CS50 biblioteket.
I PHP och en hel del moderna språk, Python och Ruby bland dem,
får du tillgång till så många fler funktioner, vilket innebär att du får skriva
mycket mindre kod eftersom du kan stå på axlarna av andra människor
som redan skrivit vissa saker för dig.
>> Låt oss ta en snabb rundtur i syntaxen i PHP och sedan skriva några exempel.
Vad är trevligt om PHP först och främst
är det finns ingen huvudfunktion.
Om du vill skriva ett program i PHP du börjar skriva kod,
och du behöver inte oroa dig för stora.
Det finns ingen int. Det finns ingen återvändo.
Det finns ingen argv, argc som är krävs när du skriver programmet.
Snarare kan du bara börja skriva kod, och det är delvis
eftersom PHP är vad som kallas ett tolkat språk.
C sammanställdes, och det har sammanställts i den meningen att du börjar
med källkod, kör det genom klang, som är en kompilator,
och så småningom efter ett visst antal steg du får objektkod, 0 och 1.
PHP och Python och Ruby och Pearl och andra
finns olika typer av språk som du inte sammanställa dem.
Du går inte från källkod till 0 och 1.
Du kör bara källkoden, och du kör källkoden
genom att skriva i en vanlig textfil som slutar på. php i detta fall
istället för. c och vad programmet gör på din dator
är det tolkar bokstavligen din kod rad för rad för rad.
>> Med andra ord, snarare än att skriva ett program och kör programmet
direkt du skriver istället ett program med en fil som slutar med. php.
Då du kör en faktisk program som kallas php.exe, om du är på Windows,
eller bara PHP om du är på Mac OS eller Linux,
och du ger som underlag för PHP-programmet din egen källkod,
och dess syfte i livet är att läsa din kod uppifrån och ned, från vänster till höger,
och göra vad du har berättat det att göra.
>> Låt oss se vad detta kommer att betyda syntaktiskt.
I PHP har vi förutsättningar.
Denna bild är identisk med vad du såg tillbaka i vecka 1
eftersom syntaktiskt villkor, IFS och annars IFS och annars i PHP
ser exakt ut så här.
När det gäller booleska uttryck de ska se ut exakt så här.
När det gäller att Anding saker tillsammans som Booleans det kommer att se ut exakt så här.
Växlar ser likadana ut, och du får den extra fördelen i PHP
att omkopplarna i C kan bara slå på en röding eller en int.
Du kan inte slå på ett strängvärde.
I PHP kan du faktiskt få ett uttryck
som är en variabel vars innehåll är en sträng,
och du kan faktiskt göra strängjämförelse i den verkliga intuitivt sätt,
inte pekare jämförelse, för att besluta om att göra mål i eller j eller något annat.
Vi får se till att eventuellt kort.
>> Slingor alltför underbart är desamma.
För slingor har en initiering, ett tillstånd, och ett visst antal uppdateringar.
Medan loopar finns också i PHP.
Göra medan slingor finns också i PHP,
och arrayer finns i PHP, men här är där syntaxen börjar få lite annorlunda,
men begreppen är desamma, och de begrepp verkligen är desamma
som de var i vecka 0 med Scratch.
Först och främst är det $ tecknet.
Detta var en design beslut i PHP där varje variabel
i PHP genom design börjar med $ tecken.
Det finns ingen mer X, Y, Z. Det är nu $ X, $ Y, $ Z bara för att.
Det är något att ha i åtanke, och nu på höger sida
Detta liknar en matris,
men vi använder hakparenteser här.
I PHP och Javascript, som vi kommer så småningom se,
att förklara en rad du öppna hakparentes och stängt hakparentes,
och då har du en kommaseparerad lista med värden, om Ints
eller strängar eller tecken, vad du vill, inne i det uttrycket där.
>> Nu, hur vi gör något liknande i C?
Vad var syntaxen för statiskt förklara en rad kända nummer?
Det var klammerparenteser, så liten skillnad här, men i båda PHP
och så småningom Javascript den använder bara hakparenteser, så egentligen
den enda intressant detalj här är $ tecknet för variabelnamnet
och även hakparenteser, och det finns en märklig sak
som är utelämnats samt på den vänstra sidan av = tecknet.
Det som saknas som vi har krav på i flera veckor nu? Ja.
[Ohörbart elev svar]
Storleken, så det finns inget omnämnande av storleken på matrisen.
Ärligt talat, det finns inget omnämnande av hakparenteser till vänster
av tecknet = och vad saknas i raden?
Ja. >> [Ohörbart elev svar]
Typen, så vad är intressant, särskilt om PHP
är att det inte är ett starkt skrivit språk som C är,
och det är starkt skrivit i den meningen att du måste säga röding,
Du måste säga int, måste du säga flyta.
>> När som helst du vill ha en variabel måste du berätta klang vad dess typ är.
PHP är lite latare.
Det är löst skrivit i den meningen att
du kan ha flöten och tecken och strängar
och Ints och så vidare, men själva språket
egentligen inte bryr sig vad du lägger in i en variabel.
Du behöver inte informera i förväg vilka datatyp
går i en variabel.
Det är helt upp till dig, så det är trevligt
i att du inte behöver oroa dig så mycket om datatyper
och oroande vad dina argument och så vidare.
Det innebär också så småningom funktioner i PHP kommer att kunna återvända
antingen en int för det mesta, och kanske då och då
De kommer tillbaka en bool, en boolean false, till exempel, för att beteckna att något gick fel.
Det ger oss några upsides, men också kommer att göra oss typ av avsiktligt
lite latare när det gäller datatyper.
>> Vad finns det att tänka på här?
Variabler ser ganska såhär, så $ s = "hej, värld."
Det är kanske inferable från föregående exempel,
och vi har en annan typ av slinga.
Den här kommer vi faktiskt se då och då eftersom det är ganska praktiskt,
en foreach konstruktion.
I det här fallet tar foreach loop inuti dess parenteser 3 ord typiskt,
$ Något först, vilket är vad array vill du iterera över medlemmarna i,
då bokstavligen sökordet som, och sedan slutligen,
en annan variabel namn som du får välja.
Det kan vara foo, bar, eller element,
och vad denna konstruktion gör
är om $ arrayen innehåller 10 element
på varje iteration av denna array-ledsen, på varje iteration av denna slinga
variabeln kallas elementet kommer att uppdateras
att vara det första elementet i arrayen, då det andra elementet i arrayen,
då det tredje elementet i arrayen, varigenom behovet
att göra något irriterande hakparentes notation och
$ I för att indexera i en array.
PHP gör allt detta arbete för dig och på varje iteration
bara händer dig nästa element från arrayen
utan att du behöver veta om eller bry sig om dess numeriska index plats.
>> Och sedan slutligen, för nu finns det en annan del av PHP
det kommer att bli enormt användbara, särskilt när vi börja programmera på webben,
och det är känt som en associativ array.
De arrayer som vi vet hittills den 20 sekunder sedan
och under de senaste 8 veckorna numeriskt indexerade arrayer,
typ av traditionella matriser där indexen är Ints,
0, 1, 2, hela vägen på upp.
Associativa arrayer är mycket mer kraftfull.
De tillåter dig att ha godtyckliga nycklar,
godtyckliga index och godtyckliga värden.
Medan i en traditionell uppsättning är det 0, 1, 2,
i en associativ array kan du få ett index
eller en nyckel foo vars värde är bar.
Du kan sedan ha en annan tangent vars namn är baz och vars värde är qux.
>> Återigen dumma datavetenskap generiska variabelnamn här,
men poängen är att denna array inte har fäste 0 eller hållare 1.
Det stället kommer att ha fäste foo och fäste baz.
Detta är mycket mer mångsidig eftersom vi kommer att kunna associera
ord med andra ord, nycklar med värden helt godtyckligt,
och vi kommer att kunna få dessa värden tillbaka i konstant tid
eftersom under huven vad en associativ array
verkligen är en hash-tabell.
Minns att en hash-tabell kan du sätta i lite input
gillar sätta i ordet David om du vill infoga David till någon form av lexikon,
och sedan får du tillbaka något värde normalt.
I fallet med stavningskontroll, sant eller falskt.
David eller vad ordet är i eller är inte i ordlistan.
En associativ array är egentligen bara en hash-tabell,
men det är en mycket mer användarvänlig inkarnation av det.
Som vi ser, det kommer att tillåta oss att göra vissa saker
mycket, mycket lätt.
>> Låt oss ta en titt på några grundläggande PHP
exempel och se vad vi kan göra med detta språk.
Låt mig gå vidare och öppna upp i vår källkatalog idag
en fil som heter hello1.php.
Denna fil är mer kommentar än det är faktiska koden,
så låt mig faktiskt ta bort alla kommentarer från filen
och presentera kanske den enklaste PHP-program här.
5 rader, och vissa av dem är vita rymden,
så märker några viktiga skillnader här.
Filen heter hello1.php.
Den allra första raden är dock <? Php.
Likadana i andemening som HTML,
att teckensekvens talar om för datorn
"Hej, dator, här kommer ett program vi är i i PHP."
Det gör att den inte är förvirrad att det är något annat språk.
Linje 2 är en intressant tomt utrymme.
Linje 3 är vår gamle vän printf,
denna gång i samband med PHP.
PHP har sin egen version av printf som uppträder exakt samma,
så detta är bara att skriva ut "Hello, world."
Och sedan denna motsatta tagg här?>, Innebär att det för min PHP-kod.
>> Låt oss se hur att köra.
Jag ska gå tillbaka till min terminalfönster här.
Jag ska gå in i min PHP-katalog.
Observera att vi har en massa filer, den första som är hello.php.
Låt mig gå vidare och köra, hello1.php skriver.
Åtkomst nekades. Okej.
Hur har vi fasta saker som detta i det förflutna?
Vad är det? >> [Ohörbart elev svar]
Vi behöver läsa och skriva, men låt mig göra ls-l.
Kom ihåg detta något kryptiska utgång där hello1
verkar vara läs-och skrivbara av mig
men kan läsas av alla andra.
Det visar sig detta faktiskt inte är ett steg i rätt riktning.
Skillnaden, återigen, med ett tolkat språk
är du inte köra programmet direkt.
Du kör istället en tolk och lämna det koden
som du har skrivit så det kan tolka det rad för rad.
I detta fall, tolken eller program jag vill verkligen köra
är bokstavligen kallas PHP.
>> Någonstans på denna hårddisk av apparaten finns ett program
någon annan skrev heter PHP eller Windows php.exe.
Vad jag ska göra här är jag ska faktiskt köra PHP
men ge det som ett argument koden som jag skrev,
och då ska jag zooma ut och tryck enter.
Det kör mitt program för mig, uppifrån och ned, från vänster till höger.
Låt mig gå vidare och öppna upp en liten avvikelse av detta.
I hello2.php märker att detta också
är mestadels kommentarer, så låt mig bli av med dem som en distraktion,
och vad är klart annorlunda nu om den här filen?
Det är denna nya linje, något kryptiskt i toppen.
I linje 1 är det #! / Bin / php.
Bin är en konvention om Linux och Mac OS för binärer,
så / bin innebär detta är en mapp som innehåller en massa binärer
som är programmerad, en av vilken är PHP.
Den #! är smeknamnet Shebang,
vilket är ett snabbt sätt att säga det, och vad det innebär
är att när du kör det här programmet nu finns det en antydan överst i filen
som talar om för datorn vad tolken att använda.
>> Det blir lite irriterande om du var tvungen att berätta för dina användare och dina kunder
"Hej, skrev vi det här programmet som heter hello1.php."
Allt du behöver göra är att alltid köra PHP och sedan namnet på programmet.
Ärligt talat skulle det vara bara trevligare att köra hello1.php,
och faktiskt, kan vi om vi gör följande.
Låt mig gå vidare och göra ls-l, och meddelande i hello2 det är fortfarande bara läsa skriva
och sedan läsa läsa, så jag kan inte ännu göra detta, hello2.php.
Men vi introducerade denna aldrig så kort förra gången, kommandot chmod.
Om jag gör chmod a + x, vilket betyder allt plus genomförbarheten,
och sedan hello2.php och sedan märker ls-l igen vad som ändrats.
En är Linux visar mig filnamnet i grönt för att förmedla idén
att det är körbar, men ännu viktigare, på den vänstra sidan
märker att lite som representerar X för körbara nu ställts in.
Vad detta nu innebär är kan jag köra ./hello2.php som vanligt,
tryck på enter, och på grund av shebang högst upp i filen
det är en ledtråd, igen, till Linux som säger
använda tolk för att köra den här filen.
Oroa dig inte om att tvinga användaren att faktiskt skriva det.
>> Och vad är trevligt nu är det slags irrelevant för mina kunder eller mina vänner
vilket språk jag skrev det här programmet i, så jag kan gå vidare med mv
och döpa det här till hello2, till exempel.
Och nu om jag ./hello2
och zooma ut mitt program fortsätter att köras.
Dessa filtillägg är en mänsklig konvention som är nödvändiga
för ungefär klang och gör som letar efter dem.
Men för PHP, kan jag kalla detta något filtillägg jag vill.
Jag kunde lura världen att tro att jag är riktigt bra på Ruby,
och jag skulle kunna skriva hello2.rb och sedan köra detta,
och voila, nu har jag Ruby versionen, som är en komplett lögn.
Men filtillägg är meningslösa
om filen är körbar och har denna speciella tips överst i filen.
>> Nu, som en parentes, låt mig visa dig snabbt version 3,
som är en slags bra trick för att veta.
I hello3 jag gjorde något lite fel
att jag ska uppdatera online-källkod.
I version 3 visar det sig att på de flesta Linux-datorer
Det finns ett program som heter env för miljö,
och vad du kan göra här är om du har ingen aning om var PHP
installeras på den lokala hårddisken, eftersom det faktiskt kan variera beroende på datorn
att någon använder, säger ENV bara köra env,
som är på de flesta system, och räkna ut var PHP är.
Bara en vanlig trick så du behöver inte oroa dig för att ta reda på om ett program.
Men om du bryr dig att ta reda på om ett program, och du inte har brytt hittills
Du kan använda vilket kommando.
>> Låt mig zooma ut och typ som php,
och märker det säger mig att det är faktiskt i usr / bin / php.
Det är lite av en lögn. Det är också i bin.
Det är bara visar mig den första träffen.
Om du någonsin undrat var klang är, som klang, det är i usr / bin / klang,
som gör, är usr / bin / göra, och vad det betyder hela tiden
du kunde ha skriva usr / bin / klang in för att köra klang,
men det är typ av jobbigt att göra det, så vissa mappar
Liksom usr / bin och bin antas vara standard
så att datorn vet att titta i dem åt dig.
Har du frågor om hur du skriver en super, super enkelt Hello World-programmet
i PHP och sedan köra den?
För nu ska vi börja införa mer övertygande syntax.
Okej, nu kör vi.
Dessa program har vi sett faktiskt alla av dem innan.
>> Om jag öppnar till exempel, låt oss göra beer1.php,
Vi kommer inte att gå igenom flera versioner av detta, men vad jag gjorde
jag satte mig och hällde det eller konverteras
min C-kod till PHP-kod här.
De flesta av den övre delen av filen kommentarer här.
Det visar sig att det finns en ny funktion som vi behöver kallas readline.
GetString, minns, från vecka 0 och framåt var en CS50 sak.
PHP kommer med sin egen användarvänliga funktion som kallas readline
som tar 1 argument som anger att snabbt
som du vill visa för användaren, och vad readline gör
är det återgår oavsett användaren skriver i.
I det här fallet, jag förklara en variabel som heter $ n.
Jag lagring i det returvärdet av readline
Efter att användaren med denna sträng.
Bara för att säkerhetskopiera, att faktiskt köra denna sak, låt mig gå vidare
och kör php beer1.php.
Hur många flaskor blir det? Låt oss bara göra 2 denna gång.
Enter. Det är allt.
>> Programmet är funktionellt identisk med den C-versionen veckor sedan.
Men syntaktiskt låt oss se vad som är annorlunda.
Efter att jag får en int från användaren märker att jag gör något fel kontroll,
och om n är mindre än 1 jag slutade och jag skriver ut
en ledsen meddelande till användaren och avsluta med 1.
Detta är också lite annorlunda.
I C vad gjorde vi? I C vi återvände 1.
I PHP du avslutar med 1, som uppriktigt sagt är jag tror lite mer intuitiv
eftersom du bokstavligen avsluta programmet.
Okej, och sedan ner här irriterande låten är identisk syntaktiskt
utom för variabeln, så här nere i linje 24 och framåt
märker jag att slingan är nästan densamma,
men jag har $ framför i och n,
och vad som också saknas i linje 26 som vi har haft i det förflutna
När förklara en variabel jag?
Det finns ingen typ.
Det är felaktigt i PHP säga int.
Du kan helt enkelt inte behöver göra det.
Datorn är tolken PHP smarta nog att inse
att om du sätter ett nummer i $ jag det kommer att behandla den
som ett nummer för dig.
Och sedan ner här vi ansluter $ i, $ i, $ I - 1.
Allt detta är densamma, och sedan ner här vi gör en "Wow, det är irriterande" printf
och avsluta (0).
>> Återigen är det takeaway här att även om vi kommer att spendera relativt
lite tid på PHP, säkert kontra vad vi gjorde på C,
Det är nästan samma sak, och så vad vi ska göra i dag och nästa vecka
och därefter är verkligen fokusera på några av de nya idéerna.
Bara för att se att en annan sak gör översätter över från C,
detta var en super enkelt program vi gjorde i vecka 1
eller 2 som kubik ett värde.
Men vad var intressant när om det här programmet är att det
introducerade begreppet av en skriftlig anpassad funktion som vi själva skrev.
Syntaxen i PHP är nästan densamma.
Här är mitt program uppe.
Notera återigen frånvarande är någon begreppet huvud.
Jag börjar skriva kod, och det är vad som kommer att bli utföras av tolk.
Jag skriver ut x är nu 2, förmodligen.
Då jag hävdar cubing ...
Då kallar jag kuben funktion och passerar i $ x
och tilldela returvärdet till $ x.
Då jag hävdar att det är kubik, och sedan säger jag detta, som förhoppningsvis
kommer att säga x är nu 8.
Syntaxen för funktionen i PHP är någonsin så något annorlunda.
Återigen saknas är returtyp.
Återigen saknas är returtyp och även saknas är vad annan typ?
[Ohörbart elev svar]
Okej, det är bra. Låt oss återkomma till det i en sekund.
>> Vi har inte, till exempel, int här.
Vi inte till exempel ha int här eftersom, återigen, i PHP
du helt enkelt inte behöver och bör inte göra det,
utan snarare finns det nya sökordet kallas funktionen.
I PHP är det nästan lite tydligare eftersom när du vill ha en funktion
du bokstavligen säger funktionen ger du det ett namn och sedan en kommaseparerad lista
om någon av dess argument.
Du behöver inte säga ogiltig eller nåt sånt, och då avkastningen är densamma,
$ A * $ a * $ en.
Vad som också saknas? Sammy påpekade detta här.
På toppen av filen helt frånvarande i PHP också är en prototyp.
Detta är också avsiktligt.
Språk och tolkar som PHP är smartare än C någonsin var
i kompilatorer som klang.
>> Minns att klang, om du inte berätta det att kuben finns,
om du inte berätta det som printf existerar som en prototyp
eller med en # include, ja, var det kommer att skrika på dig och inte ens kompilera din kod.
PHP och modernare språk är mycket smartare när det gäller detta.
De kommer att ta på sig att läsa igenom alla din kod
och sedan skrika på dig bara om den finner kub ingenstans.
Det spelar ingen roll om kub är längst ner eller upp eller ens i någon separat fil.
PHP och liknande språk är nu smart nog att se framåt
på allt innan anse dig ha gjort ett misstag.
Var lämnar det oss?
>> Låt oss göra en sista exempel här i förhållanden,
och om jag öppnar conditions2.php meddelande också
Syntaxen här är nästan samma.
Jag använder readline istället för GetString, men den linjen är densamma som tidigare,
"Jag skulle vilja ett heltal tack."
Jag har sedan en om tillstånd, ett annat om, och sedan en annan,
men funktionellt detta program är också identiskt med vad vi gjorde veckor sedan,
så om jag kör den här grejen, php i Villkor2,
och jag ger det ett nummer som 23 -
Jag plockade ett positivt tal. Om jag ger det -1 jag valde ett negativt tal.
Om jag ger det 0 Jag plockade faktiskt 0.
Så vem bryr sig om allt det här?
Jo, en av de roliga typ av övningar här
för mig åtminstone var att gå tillbaka och se hur snabbt jag kunde genomföra pset 5,
den felstavningar pset.
Minns att det var denna fil som heter speller.c,
och det fanns en fil som heter dictionary.c.
Vad jag gjorde var jag typ av använt några minuter och jag konverterade C-kod
till PHP-kod, och vi kommer inte att spendera mycket tid på speller
eftersom precis som i pset 5 du inte verkligen behöver
tillbringar mycket tid på speller själv eftersom din uppmärksamhet var på ordlistan.
>> Det räcker att säga att om du läser igenom speller,
filen här, det är ganska mycket motsvarar C-kod
vi gav dig för pset 5.
Jag har precis lagt till några $ på platser.
Jag har ändrat vissa funktionsnamn om de inte finns i PHP.
Det finns en ytterligare sak här, preg_match,
vilket är lite finare sätt att göra något, men vi kommer tillbaka till det så småningom.
Men kort sagt, är speller nästan identiska, och om du tittar längst ner
vad det slutligen spottar ut är detta här,
ord felstavat, ord i ordbok, ord i texten.
Okej, så vad är intressant nu är följande.
På toppen av min fil jag behöver dictionary.php.
Precis som C har omfattar # PHP har en speciell funktion som kallas kräver
som ganska mycket gör samma sak, kräver en fil som heter dictionary.php.
Hur kan jag gå om att genomföra pset 5?
Låt mig gå vidare och öppna upp en fil här.
Låt mig ta en liten referens här.
Och låt mig skapa en ny fil och börja ringa detta dictionary.php.
Låt mig uttrycka det i en annan mapp så att vi kan göra detta live.
Och nu ska jag zooma in
Jag ska börja min PHP-fil med öppen konsol php stängd fäste.
Och sedan här fanns det några funktioner jag behövs för att genomföra för pset 5,
så låt mig börja genomföra några av dem,
så funktionskontroll, som var tvungen att ta ett ord i som ett argument.
Vi ska göra det och komma tillbaka till det om en stund.
>> Det var funktion belastning, som tog i vad som argument?
Ordbok, så fil som jag egentligen ville ladda.
Det var funktion storlek, som inte tar några argument
och det var funktions-vad var det andra?
Lasta, som inte tar några argument.
Dessa är de 4 funktioner som jag skulle behöva nu genomföra i PHP,
och vad jag ska göra är att gå vidare och göra det.
Många av er använde en hash tabell i pset 5,
så låt mig gå vidare och skapa en hashtabell i PHP.
Klar.
Det ger mig en hash-tabell. Tja, varför?
En är den rörliga kallas $ bord, bara för att trolla fram tanken på en hash-tabell.
Hakparenteserna, men minns, representerar vad?
En array, men i PHP arrayer behöver inte vara numeriskt indexeras.
De kan också vara associativa arrayer,
vilket innebär att du kan ha godtyckliga nycklar och värden.
>> Ungefär som i pset 5, de av er som gjorde hash table implementeringar
du satt förmodligen ordet och sedan in den i en kedja av länkade listor,
eller du lagrat värdet true någonstans eller något om detta.
Du minns något sätt att ordet var där.
För nu, det är kommer att bli min hash-tabell,
och så nu att gå om genomförandet av kontrollfunktion
Jag behöver bara titta in i den hashtabell
och se om ett ord finns där.
Vad jag ska göra är att jag ska säga om-
låt oss säga isset, vilket är en PHP funktion som bokstavligen bara betyder är nyckeln set,
så isset ($ bord [$ ord],
och i så fall return true.
Det var allt. Det är pset 5 i PHP.
Tja, i rättvisans namn, okej.
Annars returnera false, så det är inte där.
Vad som verkligen händer här?
Tja, om tabell-eller hashtabell här mer allmänt
är en associativ array som innebär att du kan indexera i den
med ett ord som "ord", och du måste komma tillbaka lite värde.
>> Vi är typ av att få ett steg före oss.
Det skulle vara ganska trevligt om vi faktiskt läses filen först,
så belastningen är inte riktigt så enkelt, men låt mig gå vidare och piska upp
en riktigt snabb implementering av belastning.
Låt mig gå vidare och säga ord får filer ordlistan.
Filen funktionen i PHP öppnar en fil
och återgår till dig en matris med alla orden i den filen,
bara händer dem till dig.
Det var en stor smärta också, eller hur?
Nu foreach, detta är vår nya konstruktion, foreach ($ ord som $ ordet).
Denna slinga kommer att börja iteration över array ord
och tilldela $ ordet variabeln varje ord i filen
från den första till den andra till den tredje till den fjärde hela vägen
så jag behöver inte göra det irriterande [i] notation och liknande.
Och vad jag bara ska göra för varje av dessa ord
är lagra det i mitt bord genom indexering i tabellen
och sedan göra sant eftersom att minnas
att ett ord är i min ordbok allt jag måste verkligen göra
är vända typ av lite och säga detta ord i min hash-tabell är där, sant.
Och om det inte finns där, jag har inte uttryckligen sätta falska,
annars skulle jag behöva sätta false för alla möjliga ord i universum.
>> Det räcker för mig bara att ställa in ett indexvärde
till true om ett ord är faktiskt i mitt hashtabell.
Nu är jag skära ett par hörn här som jag viftar mina händer på för nu,
men nu belastningen funktionen är klar.
Jag laddar alla ord från filen till en array.
Jag iterera över den rad och för varje ord i arrayen
Jag ansluter den till min hashtabell med 1 rad kod.
Det är kul. Du vet hur vi kan genomföra storlek nu?
Tja, är storleken alltid ganska lätt, i rättvisans namn.
Här kan vi bara inte returnera räkna tabellen.
Det är ganska enkelt också räkna antalet saker i tabellen.
Det är faktiskt ganska inte den mest effektiva.
Jag borde nog ha en variabel som heter storlek så att vi kan göra det
i konstant tid, men det är ganska lätt.
Åh, och sedan lossa, om vi verkligen vill vara anal här
vi kan säga att det är hur du lasta något.
Du ställer bara variabeln lika med en tom array,
och det tar bort allt som var där.
Du behöver inte ringa gratis.
>> Återigen har jag klippa några hörn, och jag ber om ursäkt för tilldelning problembild 5
kanske i C, men om vi nu gå vidare och köra,
Jag ska faktiskt köra den version som jag skrev i förväg
bara så att jag inte gör några syntaktiska fel som helst.
Låt mig gå vidare och köra stavningskontroll. Användningen är densamma.
Här är en ordlista fil som bara innehåller ordet foo.
Här är en textfil som bara innehåller foo bar.
Låt oss stavningskontroll detta, så speller, med denna ordbok filen på denna textfil.
Det finns en felstavat ord, bar, och voila.
Klar med pset 5.
Låt oss ta en 5-minuters paus här, och vi ska komma tillbaka och mer på PHP.
Okej, vi är tillbaka.
Låt oss göra-hata mig en stund.
Låt oss nu verkligen se om detta inte var en positiv
faktiskt genomföra denna sak i PHP.
Visst, det tog 45 sekunder att genomföra.
>> Men låt oss gå vidare nu och köra saker.
Låt mig gå vidare och köra en C-versionen
av speller, och vi kommer att köra den på en av de största filerna,
vilket är King James Bible.
Och det är här i-låt oss gå in i vår C-mappen
speller på King James den 5.
Många felstavade ord.
Okej, så det är utgången du förmodligen fått även om tiderna är lite annorlunda,
om du fick allt fungerar, och så tiden till totalt stavningskontroll
King James Bible var 0,38 sekunder, så ganska bra med att genomförandet.
Låt mig nu gå in i PHP-versionen, som vi just skrev.
Låt mig köra speller på King James.
Hoppsan, ignorera detta fel. Jag är i fel katalog.
Speller på King James den 5.
Nästan klar.
>> Okej, kommer skarpsinniga iakttagare inse att var mer än 3 sekunder där.
Det är den sanna körtid.
Det visar sig att det tar tid att spotta mycket text ut
på grund av buffring frågor, men lång historia kort,
Det var 3,15 sekunder maskintid, CPU-tid,
kontra vad var det för en stund sedan?
Som 0,3.
Jag menar, det är en storleksordning lägre, så där är det
löjligt avmattning kommer från?
Tja, har som varit fallet med de flesta någon design beslut vi har gjort
i klassen under de senaste 9 veckor finns det nästan alltid här avvägning.
Ibland mellan bara utrymme, ibland mellan tid och rum,
utrymme, tid och utvecklingsarbete, och faktiskt här, även om
vi sparade en enorm mängd tid, kanske potentiellt 10-20-30 timmar
av utvecklingstiden genomföra stavningskontrollen
genom att piska upp på bara 45 sekunder med detta språk
det pris vi betalar är att det är en storleksordning lägre som en följd,
och detta är i allmänhet fallet med de flesta tolkat alla språk,
PHP, Python, Ruby, Pearl eller andra varigenom
om du ska köra det genom tolk och har det läst din kod
rad för rad, uppifrån och ned, vänster till höger,
att mellanhand kommer att ta lite tid för sig själv,
och vad du känner här i 3 sekunder i motsats till 0,3 sekunder
är det faktum att det är denna mellanhand som måste bokstavligen tolka vår kod
rad för rad, och Gud förbjude om du är inne i en slinga
med en enorm fil som innehåller hundratusentals ord.
>> Det överliggande kommer att lägga upp och lägga upp och lägga upp och lägga upp.
För ett verktyg som detta är det förmodligen inte den bästa språket att använda för att genomföra
en stavningskontroll om omedelbarhet är av intresse för dina användare och till dig.
Men lyxen har vi i ett ögonblick är om du
använda ett språk som PHP eller mycket tolkade språk
i samband med webben, för den delen, har du nytta
att Internet är mycket långsammare än de flesta datorer.
Du har en GHz CPU i datorn, 2 GHz, kanske ännu mer i dessa dagar.
Men verkligheten är på internet finns det en stor mängd latens
varigenom en webbläsare för att prata med en server, även om vi såg förra veckan
att det är ganska snabbt, en halv millisekund eller så,
som ger alltför upp, och om du hämtar saker som en bild
eller Facebook foto eller få snabbmeddelanden via Facebook prat,
Gchat eller liknande, alla dessa round-trip times
mellan webbläsaren och servern börjar att lägga upp,
vilket gör din val av språk i många fall
inte så relevant, så du är bra med en något långsammare språk
som PHP eller Python eller Ruby
men där det finns stora upsides till dig och dina kollegor
och dina vänner att du kan genomföra saker så, så mycket snabbare.
Och dessutom har du mycket mindre risk för vissa säkerhetsbrister.
Det finns inga pekare i PHP.
Det finns inga segment fel som du enkelt kan inducera
på samma sätt som du kan i C.
Med C du är super nära till hårdvaran.
Med PHP och liknande språk du typ av högre nivå, så att säga,
med en hel del försvar mellan dig och vad som faktiskt händer
inuti maskinen, och det är bara en avvägning.
>> Vi har kommit till den punkt att ha dessa mer moderna, högnivåspråk
som PHP grund av lärdomarna i språk som PHP i C.
Men om du inte förstår vad som har pågått under huven hela tiden
du absolut inte kan fatta rätt designbeslut,
och säkerligen när det gäller att arbeta på en plats som Facebook eller Google
eller någon av dessa platser som alltmer spelar med stora datamängder
även om du går tillbaka och gör premed och arbetar med några MD
på några stora datamängd där patienter och läkare
och liknande att använda rätt verktyg är oerhört övertygande
annars din analys av vissa datamängd kan ta några sekunder,
eller det kan bokstavligen ta timmar.
Detta är bara ett exempel, inte att hindra dig hur mycket mer arbete
det var i C men att hjälpa dig att uppskatta att när du genomför något i C
du förstår verkligen, eller i teorin, förstår
hur allt är eller borde arbeta, och du har nästan full kontroll
över vad som händer under huven och med dessa högre nivå språk
du måste avstå mer kontroll till de människor som uppfann dem
och är föremål mer av sin konstruktion beslut än din.
Men om vi tar för givet att resultatet
är inte lika viktigt på webben på grund av dessa andra frågor,
bara nätverkshastigheter är lite långsammare än CPU hastigheter ändå,
så vi kan sortera om råd att använda en något långsammare språk
om upsides är vi kan utveckla saker 10 gånger snabbare eller ännu mer.
>> Låt oss se hur vi kan börja använda det.
Låt mig gå in i en mapp
bland dagens exempel kallas frosh.ims,
och detta var faktiskt personligen motiverad av det faktum att den allra första
Jag skrev för webben år sedan efter att ha tagit CS50 och CS51
var en webbplats för Frosh IMS-programmet, förstaårselev intramural sport,
som vid tidpunkten var tillräckligt år sedan att det vid tidpunkten
fanns ingen webbplats för programmet, även om det fanns en webbsida,
och istället var det en proctor i Wigglesworth där om du ville
att registrera sig för volleyboll eller fotboll eller vad du vill fylla i ett papper.
Du skulle sedan gå över gården.
Du skulle då knacka på deras dörr och skjut in deras dörr eller hand till proctor
ett papper med ditt namn på det, om du vill vara en lagkapten,
vilken sport du ville göra, och vad sovsal du var i.
Det var typ av en gammal skola sätt att göra saker, och detta var ett utmärkt
möjlighet att automatisera mycket av denna process.
Du går bara till webbplatsen. Du skriver något i.
Du får en e-postbekräftelse och bom, du är klar.
>> Detta var det första jag gjorde, om än på ett språk som heter Pearl,
men det är relativt lätt att göra i PHP, och detta är typ av representativ
av de problem man kan börja lösa när du kan uttrycka dig själv
programmatiskt och behöver inte förlita sig på saker som Googles webbplatser
eller Excel eller verktyg som delas till dig.
Ni har nu möjlighet att göra saker som denna.
Detta är en super ful version av ett formulär,
men låt oss använda det bara i början av samtalet där det är
ungefär vad den form som såg ut som år sedan för oss
för att människor på webben för att registrera dig för Frosh chattar.
Vi bad om ett namn, en kryssruta för om de ville vara kapten,
manlig eller kvinnlig, och sedan vad sovsal de var,
och sedan skulle de skicka det här formuläret.
Låt oss först titta under huven på HTML som representerar denna webbsida.
Låt mig gå in froshims0,
och som en reservera pset 7 tar jag för givet
kataloger och mappar som jag lägger saker i.
Vi kommer att gå igenom exakt var saker måste gå i apparaten,
vilket mod kommandon du måste köra, så bry dig inte om alla
dumma detaljer synkronisering i från get-gå här.
>> Okej, här är froshims0.php.
Låt mig scrolla ner, och vad som är nyfiken här,
Detta är en PHP-fil, men vad som finns inuti det, klart?
Det är en hel del HTML, och faktiskt, PHP: s ursprung
verkligen var för att vara en webb-centrerad språk.
Nyss vi använde det för att genomföra öl exempel
villkor exempel hej exempel, och det är bra.
Du kan använda PHP som ett skriptspråk
där ett skript är egentligen bara den nomenklatur som ges till en snabb och smutsig program
eller något som du skriver i en manus eller mer brukar tolkas en språk.
PHP är super bra för det eftersom du har sett hur snabbt
relativt vi kan piska upp program i PHP.
Men det var verkligen avsedd att användas för webben,
och utformad för webben i den meningen att märka upp här på toppen av filen
Jag börjar med <? Php.
Sen har jag ett gäng värdelösa kommentarer beviljade, men då jag stänger PHP-läge.
Men sedan jag släppa in HTML-läge.
>> Vad är intressant om PHP är även om filen slutar. Php
det är allmänt tänkt att tillsammans blandat med HTML,
några PHP-kod, vissa HTML.
Och vi får se så småningom att vi kan börja retas dem isär
och hålla vår HTML separat från vår PHP helt och hållet,
men ursprunget till PHP var verkligen ge dig denna flexibilitet,
att om du vill ha lite HTML bara skriva det, och det kommer att vara
spotta ut identiskt till webbläsaren.
Men om du behöver lite programmeringsteknik,
viss programkod, kan du också lagt det i exakt samma fil, som vi snart se.
Här är min HTML.
Jag har en titel för Frosh chattar.
Jag har en body-taggen som har fått en viss CSS på den för att centrera allt i mitten,
och sedan ner här har jag en form som tydligen kommer att läggas fram
till en ny fil som heter register0.php, så vi får se det i ett ögonblick.
Det använder en metod som kallas inlägg, som vi ska återkomma till också.
Då jag har någon form ingångar, en sk namn, vars typ är text,
en vars namn är kapten, vars typ är kryssrutan
och detta har vi inte sett det förut, men det gör exakt vad den säger.
Du kommer att få en kryssruta istället för en textruta.
Här nere har du en alternativknapp som är en av de cirkulära knappar
att du kan antingen välja detta en eller att en.
>> Notera att det är avsiktligt att jag gav båda alternativknappar namn kön.
Det är hur du får ömsesidig uteslutning där du måste klicka
antingen detta en eller att man, och genom att klicka på andra
Det unchecks den andra, så du måste ge dem samma namn
om du vill att de ska vara ömsesidigt uteslutande så.
Och sedan för sovsal, jag tror inte vi har sett det ännu, men det är en utvald meny, en rullgardinsmeny.
Taggen för det är väljer.
Du ger då rullgardinsmenyn ett namn,
och då har du en massa av dessa alternativ.
Den första, bara för estetik, är en tom sträng.
Jag ville bara drop down vara tomt som standard,
och sedan finns det Apley, Canaday, Grays, och så vidare.
Och märker dikotomin här.
Alternativet i drop har ner ett värde,
men då har en human-vänlig namn, som i detta exempel
är identisk, men om vi verkligen ville vara anal vi kunde ha
värdet av denna drop down bara vara den korta versionen,
Grått, men vi kan verkligen säga Grays Hall att människan faktiskt ser,
men det är inte alla som intressant, så jag bara fortsatte det enkelt och gjorde dem identiska.
Sedan ner på botten har vi en submit-knapp
som vi har sett tidigare, men märker jag gav bara det ett annat ord.
Istället för CS50 sökning gav jag etiketten "Registrera".
>> Slutresultatet är här webbsidan här, och igen,
varifrån kommer denna bli fram?
Det blir föremål för en viss fil, värdet av åtgärden attribut,
som var register0.php.
Låt oss se vad som egentligen händer här.
Låt mig gå vidare och fyll i formuläret, säger David,
manlig, Matthews, och sedan ska jag säga register.
Låt mig zooma ut och klicka på registrera.
Okej, så typ av värdelös, men låt oss se vad som verkligen händer.
Observera att webbadressen har ändrats till att vara register0.php.
Vad är märkligt frånvarande från URL, men även om vi bara fram ett formulär?
[Ohörbart elev svar]
Okej, det är bara Chrome vara användarvänlig dessa dagar.
Det är faktiskt där. De gömmer det bara för att spara utrymme.
Men bra tanke, god tanke.
Mot den andra änden av URL, men vad är det som saknas? Ja.
[Student] frågesträngen.
Den frågesträngen, så minns från våra enkel Google-sökning exempel.
Så fort jag klickar på knappen Skicka URL
tog mig till Google, men då var det? q = datavetenskap eller vad jag hade skrivit in
Det beror på att vi använt metoden GET med sökandet exempel.
>> Denna gång vi använder vilken metod istället?
Inlägg och en av de omedelbara skillnaderna
mellan att få och skicka är att tjänsten inte sätta användarens input i webbadressen.
Den döljer det. Den skickar fortfarande.
I själva verket vad vi ser i webbläsaren här, som vi kommer att avslöja i ett ögonblick
genom att titta på register0 är jag bara ser innehållet
av matrisen som lämnades in från webbläsaren till servern.
Men URL inte har en?, Inte har några sökord
eller värden i det, och varför är det?
Tja, kan inlägget du fortfarande skicka data från formuläret till en server,
men det inte lägga den i URL, så vilken typ av information är post
särskilt lämpligt för kanske när du ber användaren att
skriva in indata till en form?
Något som ett lösenord, något som vad?
Kreditkortsnummer.
Allt som är milt känslig du förmodligen inte vill hamna i URL
om så bara för att det innebär att din rumskompis eller familjemedlem kan bara troll genom
din Internet historia och sedan bokstavligen se dina lösenord,
bokstavligen se dina kreditkortsnummer eftersom de flesta webbläsare
minns i historien vad webbadresser som du har varit på,
så om bara för att det skulle vara en dålig idé.
Med post hudar som detalj från användaren.
>> Dessutom, hur du laddar upp ett foto till Facebook?
Tja, de enda 2 mekanismerna du verkligen kan använda,
även om det finns några andra mer svårbegripliga sådana, är få och skicka.
Hur laddar du kanske ett foto via en webbadress?
Du kan faktiskt göra det.
Du kan ta en JPEG-eller bitmapp eller GIF och du kan företräda den i hexadecimalt
eller något som kallas bas 64.
Istället för basen 16 du använder bas 64, som i huvudsak ser ut
ASCII-tecken, och du kan faktiskt ladda upp ett foto via en webbadress
efter ett frågetecken, men det är i allmänhet storleksbegränsningar.
De flesta webbläsare tvingar webbadresser som högst 1.000 tecken,
kanske 2.000 tecken eller liknande, så att du inte kan ladda upp
en 10 MB Facebook foto.
För att du använder tjänsten också, så för nu får sätter parametrarna i webbadressen,
vilket är trevligt och användbart ibland, men för något känsligt eller stora
inlägg är rätt väg att gå.
Vad register0 gör egentligen här?
Tja, om jag öppnar register0 märker att detta är en super enkel sida,
men det är visar det faktum att jag kan samarbeta mingla, på gott och ont,
HTML med PHP.
Hela denna fil, med undantag för kommentarer i toppen, är HTML
förutom den här killen här.
>> Lägg märke i mitten av min PHP-kod,
i mitten av min HTML har jag typ av tillfälligt
in PHP läge.
Jag ringer en speciell funktion som kallas print r..
Det betyder ut rekursiv, och vad den gör är det rekursivt skriver
oavsett variabel du lämnar den, semikolon, utgång PHP-läge.
Och före taggen ger pre-formaterad text,
mono utrymme texten så att varje utrymme du faktiskt se den.
Det försvinner inte. Vad är post?
Tja, vad som är intressant och övertygande om PHP
är att när du skickar ett formulär med GET eller POST
något som är lämnat till dig av en webbläsare
PHP själv räknar ut vad de centrala värdepar är,
räknar ut om det finns likhetstecken, figurer ut om det finns ett frågetecken.
Det gör allt det hårda arbetet för dig, och sedan händer dig en associativ array
innehåller allt som användaren skrivit in i formuläret.
Nå, vad fält formuläret ha?
>> Den hade 4 fält.
En var ett textfält som heter namn.
En var en kryssruta som heter kapten.
En var en alternativknapp som kallas kön,
och en var en rullgardinsmeny som kallas sovsal,
så märker när jag skriver ut rekursivt
innehållet i denna speciella variabel.
Detta är en speciell global variabel som heter bokstavligen $ _POST, med stora bokstäver.
Detta är en speciell global variabel som PHP bara skapar för dig
och händer till dig så att du kan komma åt allt
som lämnades via ett formulär av en användare.
Och genom att ringa print r på det, du skulle inte göra detta i en normal tillämpning.
Vi gör detta för att se insidan av denna variabel,
och vad som finns inuti den, ja, 4 knappar,
4 http parametrar, så att säga,
namn, kapten, kön, studentrummet, och sedan de värden som användaren
skrivs in med ett undantag.
Jag gjorde typ D-A-V-I-D.
Jag kollade rutan, men för män, som tydligen lämnat ett värde
av bara meter för att vara kortfattad.
>> När jag valde Matthews som är det värde som blev vald,
och detta är lite dum, men det är konventionen.
När jag markerat rutan, värdet på "på", blev fram för kryssrutan.
Om jag inte hade kontrollerat det, skulle något värde har skickats helst.
Detta är bara ge oss insikter i vad som finns inuti denna speciella global variabel,
och det är så speciellt att det kallas en super global variabel.
Den finns överallt för dig inom din kod så att du faktiskt kan komma åt den.
Det är inte så övertygande, så låt oss faktiskt använder super globala
och faktiskt försöka registrera någon.
I froshims1 Jag ska göra en förändring.
Jag ändrar åtgärden som register1.php,
och jag gör en annan sak.
Jag var lite generad av kvaliteten på min hemsida där.
Det är ganska hemsk, ärligt talat, så visar det sig
som du kan använda mycket lätt på webben
andras JavaScript-kod, andra människors CSS
att de har skrivit och öppna anskaffas och göras tillgängligt som ett bibliotek,
så att säga, och till exempel här jag använder en fritt tillgänglig bibliotek,
ett gäng kod som någon annan skrivit.
>> Twitter råkade skriva denna kod och det kallas bootstrap biblioteket,
och det är bara en massa CSS-formatmallar, ett gäng. CSS-filer
att någon skrev annan och räknat ut hur man får allt trevligt och ganska
så att människor som oss kan oroa lite mindre om estetik och fokusera mycket mer
på logiken och den faktiska programmeringen.
Genom att koppla det med den taggen, vilket är samma tagg använde jag ihåg för styles3.css tidigare,
Jag har nu tillgång till en fil som heter bootstrap.min.css.
Min betyder bara att de har minified det och de har blivit av allt tomrum och så vidare
bara för att se till att de inte ska skicka mig fler byte än jag egentligen behöver.
Men i det finns en hel massa CSS, så om jag nu öppnar version 1 av Frosh IM
märker att min fil är definitivt vackrare.
Nu är det fortfarande bara svart och vitt, men märker att genom att bara använda sin formatmall
och använda vissa funktioner i det på min blankett är det inte fantastiskt,
men det är definitivt renare än den var före, och projektorn inte gör det rättvisa.
Det finns små grå linjer runt knapparna och runt textfältet här,
men det är definitivt renare än det var innan.
>> Nu, i rättvisans namn, jag måste ändra min kod lite.
Detta är version 1, och märker att jag har använt ett par nya taggar,
och ärligt hade jag ingen aning om hur man gör detta tills jag läste den dokumentation
för Twitters bootstrap bibliotek, och de berättade för mig om du vill använda vårt bibliotek
Använd en fältgrupp element i formuläret
sätta det ord du vill visa bredvid ett fält inne i en etikett etikett,
sedan ge ditt bidrag ett namn, precis som tidigare,
och sedan för kryssrutan inte bara du packa in den i en etikett element,
du använder något som kallas en klass, så vi har inte sett det här förut,
men du kommer att se detta i ett av pset 7 underbyxor.
En klass i CSS kan du göra något mycket likt ID,
men innan när vi hade ett ID med symbolen #
som var för en och endast en del.
Vad är trevligt om en klass är att flera element kan ha samma klass
eller samma CSS-grejer tillämpas på den.
>> Men återigen, är att kopiera mer på dem på kort, och resten av det bara och klistra
från deras dokumentation där jag har lagt till en etikett här och där.
Och i slutet, för jag har inkluderat länken taggen på toppen,
allt ser snyggare automatiskt
genom att helt enkelt ha märkt upp min sida på ett sätt som
Twitter väntat, och det finns så många olika sätt
att göra detta, och det är verkligen mycket lämpligt.
Vid denna punkt i terminen, som du ser i pset 7: s spec,
Googla runt, läsa på bibliotek, med hjälp av andra människors CSS
och JavaScript för att lösa tillhörande problem
på problemet satt är verkligen uppmuntras och är det sätt
webben är byggd i dessa dagar, genom att stå på andras axlar
så att du verkligen kan fokusera på nya och intressanta problem.
Men låt oss nu fokusera på, igen, logiken.
>> Det var en snabb avstickare på estetik bara för att visa dig i vilken riktning du kan gå.
Jag ska återgå till fulare en för nu bara för att
det finns inga distraktioner med Twitter grejer, och låt mig gå vidare och öppna upp
froshims2, vilket återigen skiljer endast i handling, register2.php,
och låt oss ta en titt på vad effekten är här.
Låt mig gå vidare och skriva i David.
Jag kommer inte att vara kapten den här gången.
Jag ska säga manlig, Matthews, registret.
Fan också. Okej, det är en skruv upp på min sida.
Stand by.
Register2, linje 22, om den är tom eller-ledsen.
Låt oss ladda om.
Okej, när skicka detta formulär vad som just hände?
Jag skrev i David, kontrolleras manlig, klickade Matthews, registret.
Du är registrerad. (Tja, inte riktigt.)
Detta är helt klart ett steg längre än bara skriva ut innehållet i en viss variabel,
Men vad är detta filen gör egentligen?
I register2.php
märker att jag har några nya koden.
Insidan av min kropp tag har jag i huvudsak en om annat konstruera,
men eftersom jag tillsammans mingel detta med några HTML
Jag måste in och ut PHP-läge och tillbaka, så låt oss se vad jag gör.
>> På första raden här jag säger om det är fallet
att efter Super globala är tom för nyckeln av namn,
så med andra ord, om användaren inte gav mig ett värde för namn i form,
töm sedan kommer att återvända sant eftersom värdet är tom.
Eller-märke de vertikala staplarna-om kön är tom
insidan av denna speciella super globala, vilket, återigen, representerar innehållet i formuläret,
eller studentrummet är tom, så jag ska gå vidare och skrika på användaren.
Hur? Tja, märker jag ska säga att du måste ange ditt namn, kön och sovsal.
Låt oss faktiskt framkalla det misstaget.
Låt mig gå tillbaka till min form. Låt mig ladda för att ta bort det.
Och jag ska bara ge dem David, och de behöver inte veta var jag bor.
Registrera. Tydligen jag behöver berätta för dem där jag bor.
Du måste ange ditt namn, kön och studentrummet. Gå tillbaka.
>> Och jag kunde klicka på för att gå tillbaka till den formen, men varför är det?
Tja, i så fall namn inte tom, men kön var, och studentrummet var,
så detta hela uttrycket utvärderas till true, och även om syntaxen är lite nytt,
igen, går vi in ​​PHP-läge, känner if,
men den nya delen här är just detta kolon, och jag hade skruvas upp genom att utelämna en parentes
av en slump, men märker tjocktarmen, och det betyder
även om vi lämnar PHP-läge allt
som följer ska spotta ut ordagrant till webbläsaren
tills du ser en annan kvarter, som vi gör här,
i vilket fall du bör i stället spotta ut det här
tills du ser endif, så några lite ny syntax
som tillåter mig att växla mellan HTML och PHP.
Vi kan städa upp det här så småningom, men för nu,
Det är lite av en övertygande sätt felkontroll formuläret.
>> Nu säger jag att du inte är riktigt registreras eftersom vi självklart har gjort något, men data,
så låt oss verkligen försöka göra något coolt.
År froshims3 den enda skillnaden är att jag kommer att lägga till register3,
så HTML finns det samma.
I register3 märker detta.
Detta är typ av sexig.
På toppen jag använder ett krav uttalande, så detta är som # include.
Den här gången är det inte stdio.h eller nåt sånt.
Det är ett PHP-bibliotek, och detta kallas PHPMailer.
Hur visste jag att ta med just denna citerade strängen?
Jag läste det i dokumentationen, så när de berättade för mig sätta detta överst i filen
Om du vill använda en speciell bibliotek som heter PHPMailer som gör vad den säger.
Det låter dig skicka e-post via PHP.
Nu ska vi rulla ner ytterligare.
>> Kallelse börja jag i PHP-läge här hela tiden,
så nu märker här nere efter att ha importerat det biblioteket,
så att säga, jag gör några sanity kontroller.
Om det är så att namnet inte är tom
och kön inte är tom-märker utropstecken-
och studentrummet inte är tom, då användaren har logiskt fyllt i formuläret, åtminstone tillräckligt.
Jag bryr mig inte om de är kapten eller inte. Jag behöver bara deras namn, kön och sovsal.
Om de har fyllt de ut så att ingen av dessa fält är tomma
Detta är något nytt syntax.
PHP, som en sidoreplik, är ett objektorienterat programmeringsspråk
som vissa av er kanske minns från APC eller liknande.
För nu, om främmande, vet bara att använda detta bibliotek
du måste skriva en rad kod som denna med en ny sökord,
bokstavligen ett nytt sökord kallade nya.
Men utöver det har vi några bekanta syntax.
Det är en pil operatör, som liknar det som vi använde för structs i samband med pekare.
För idag PHP inte har pekare,
men vet nu att insidan av e variabeln
är i huvudsak lite av en pekare till ett specialbibliotek
att någon annan skrev, och om jag vill komma åt specifika funktioner
insidan av det biblioteket jag, som i C, använd pilen operatör,
även om dessa inte är egentligen pekare.
Det är typ av PHP: s egen version av dessa.
Detta innebär att gå till biblioteket och ringa IsSMTP funktionen.
SMTP, minns, från våra Warriors of the Net hänvisar till e-post,
och det betyder bara använda en e-postserver för Frosh IM registrering.
>> Vilken värd vill jag använda?
Tja, Harvard, om du Google runt, har en e-postserver som heter smtp.fas.harvard.edu.
Om du spelar tillsammans hemma eller du bor på en Comcast nätverk
det kan vara något som smtp.comcast.net.
Det beror helt på var du bor och vem din ISP är.
Efter att jag kommer att ställa mig från adress godtyckligt vara jharvard@cs50.net.
Jag sedan gå att ställa in att ta vara jharvard@cs50.net.
Det enda sättet jag visste att dessa funktioner kallades SetFrom och AddAddress
är återigen läste jag dokumentationen.
Detta är inte typ av magiskt känd för alla programmerare.
Då jag satt en förutsättning att "registrering".
Och nu denna linje är lite ful eftersom vad punktoperatorn innebära i PHP?
Någon som vet?
Concatenate.
I C är det en smärta i nacken att sammanfoga 2 strängar tillsammans.
Du måste ta itu med malloc eller realloc eller allt det där
bara för att förlänga en sträng.
I PHP i JavaScript och andra språk
du kan vanligtvis göra detta med ett enda tecken.
I det här fallet betyder prick ta denna sträng här
och bifoga till det här strängen.
>> Åh, och förresten, bifoga den här strängen,
som råkar vara en variabel inuti att super globalt.
Sedan bifoga det en ny rad, så alla dessa punkter bara att
fortsätta att göra en större och större och större sträng,
och du behöver inte bryr sig alls om malloc eller liknande på ett språk som denna,
och det finns andra sätt att göra detta, men detta är en av de snabbaste
sätt att lägga ut.
Vad är detta gör?
Det skapar en e-postmeddelandet som kommer att säga Namn: Kapten: Kön: Dorm:
alla på separata rader, och sedan slutligen,
en kodrad, och jag kommer att ignorera detta för nu.
Om == false betyder bara om något gick fel,
men magin händer här.
Post Skicka betyder skicka e-post.
Låt oss se vad nettoresultatet är.
Längst ner i filen, märker att det kommer att säga att du är registrerad verkligen
om jag får så långt.
Men om användaren skruvar upp, märker att vi startade den här
Om villkoret upp här, om det inte är tomt och inte är tom
och inte tömma skickar vi e-post.
Annars ska vi skicka kodraden,
som kommer att ha effekten, som du ser i pset 7 av omdirigera användaren
tillbaka till där de kom, froshims3.php.
>> Tummarna, annars kommer att bli den mest nedslående demo idag.
Nu kör vi.
Låt mig öppna min inkorg för jharvard i Gmail.
Ingen e-post just nu. Okej.
Nu vill jag öppna upp froshims3, som är den tredje och sista exemplet vi titta på här.
Okej, nu kör vi.
Nate, kommer han att vara kapten, manlig, från, säg, Apley.
Registrera. Okej, du registrerat verkligen.
Nu om jag bläddrar över till min e-post, oh, min Gud.
Jag har just dynamiskt skickat ett e-post på webben.
>> Låt oss lämna på denna anmärkning.
En video är förestående för föreläsningen vi missat. Vi ses nästa vecka.
[CS50.TV]