1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Vecka 8] 2 00:00:02,000 --> 00:00:04,000 [David J Malan] [Harvard University] 3 00:00:04,000 --> 00:00:07,000 [Detta är CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:09,000 >> Välkommen tillbaka. 5 00:00:09,000 --> 00:00:11,000 Detta är CS50, och detta är början av vecka 8. 6 00:00:11,000 --> 00:00:14,000 Ett par möjligheter denna vecka, 7 00:00:14,000 --> 00:00:17,000 bland dem detta prat här, där mat kommer att serveras. 8 00:00:17,000 --> 00:00:20,000 För mer information kolla in de bilder som är online. 9 00:00:20,000 --> 00:00:24,000 Och även en annan händelse denna vecka av vår egen Thomas Carriero. 10 00:00:24,000 --> 00:00:27,000 Han är en av CS50: s tidigare stipendiater huvud undervisning som nu på Dropbox, 11 00:00:27,000 --> 00:00:29,000 och han är killen som ansluta oss med du vet vad, 12 00:00:29,000 --> 00:00:36,000 så om du vill ha mer av det huvudet till deras samtal i eftermiddag för Dropbox och mer. 13 00:00:36,000 --> 00:00:38,000 CS50 lunch är det fredag. 14 00:00:38,000 --> 00:00:41,000 Vill med oss ​​om du har möjlighet, 1:15, som vanligt, på Fire and Ice. 15 00:00:41,000 --> 00:00:45,000 >> Och nu har vi dyka in något som kallas Seminarier. 16 00:00:45,000 --> 00:00:49,000 Våra CS50 Seminarier, minns, är dessa valfria klasser leds av undervisning stipendiaterna 17 00:00:49,000 --> 00:00:51,000 och naturligtvis assistenter och vänner i kursen, 18 00:00:51,000 --> 00:00:55,000 folk från en grupp på campus som heter ABCD, som är en grupp av 19 00:00:55,000 --> 00:00:58,000 technophiles på campus, samt en grupp som heter HCS, 20 00:00:58,000 --> 00:01:02,000 Harvard Dataföreningen, studenter som är liknande intresserade datoranvändning. 21 00:01:02,000 --> 00:01:08,000 Årets roster av seminarier ingår seminarier om Android och iOS och JavaScript 22 00:01:08,000 --> 00:01:13,000 och PHP, Unix, Vim, och mer, så inser att dessa seminarier kommer upp. 23 00:01:13,000 --> 00:01:16,000 Om du vill OSA för någon av dem gå till denna URL där. 24 00:01:16,000 --> 00:01:20,000 Vi kommer då att lägga på kursens hemsida på tider och platser när de är klara. 25 00:01:20,000 --> 00:01:26,000 Men vet att det finns 5 års värde av tidigare seminarier finns tillgängliga online, 26 00:01:26,000 --> 00:01:29,000 av vilka många är fortfarande mycket aktuell i fråga om teknik du kan 27 00:01:29,000 --> 00:01:36,000 vill spela med för den slutliga projekt, så gå dit för några tillgängliga videoklipp därav. 28 00:01:36,000 --> 00:01:39,000 >> CSS, de av er som är bekanta med CSS redan, 29 00:01:39,000 --> 00:01:42,000 vad är det i ett nötskal? 30 00:01:42,000 --> 00:01:45,000 Vad är CSS? 31 00:01:45,000 --> 00:01:48,000 Det övergripande formatmallar och vad betyder det? 32 00:01:48,000 --> 00:01:53,000 Vad gör det för oss, CSS? 33 00:01:53,000 --> 00:01:57,000 Okej, låt oss värma upp med en enklare en, HTML, Hypertext Markup Language. 34 00:01:57,000 --> 00:02:01,000 Vad gör det för oss? 35 00:02:01,000 --> 00:02:04,000 Någon alls? 36 00:02:04,000 --> 00:02:07,000 Det börjar bli riktigt besvärlig ställer dessa frågor. 37 00:02:07,000 --> 00:02:11,000 HTML, Hypertext Markup Language. 38 00:02:11,000 --> 00:02:14,000 Ja? Nej? 39 00:02:14,000 --> 00:02:17,000 [Ohörbart elev svar] 40 00:02:17,000 --> 00:02:20,000 Okej, bra, gör det oss att markera text som ska visas i en webbläsare. 41 00:02:20,000 --> 00:02:22,000 Det är inte ett programmeringsspråk. 42 00:02:22,000 --> 00:02:25,000 Det är verkligen en märkningsspråk, vilket innebär att det instruerar webbläsaren hur du vill se 43 00:02:25,000 --> 00:02:28,000 information så den enklaste inkarnationen av detta som vi har sett 44 00:02:28,000 --> 00:02:32,000 är något super enkelt som boldfacing, säger öppet fäste B stängt fäste 45 00:02:32,000 --> 00:02:36,000 gör denna text fet, och det är faktiskt bara ett av många sätt 46 00:02:36,000 --> 00:02:39,000 där vi kan göra det, och faktiskt, i dessa dagar en bättre metod 47 00:02:39,000 --> 00:02:42,000 att stylizing din webbsida, göra saker fet och kursiv stil 48 00:02:42,000 --> 00:02:47,000 och centrerad och motiveras och liknande, inte sker via HTML-taggar ensam 49 00:02:47,000 --> 00:02:51,000 utan snarare med en teknik som kallas CSS, Cascading Style Sheets. 50 00:02:51,000 --> 00:02:53,000 Detta är ett språk i sig. 51 00:02:53,000 --> 00:02:55,000 Det är inte heller ett programmeringsspråk men- 52 00:02:55,000 --> 00:02:58,000 alla, är det Dan som håller med oss ​​i dag. 53 00:02:58,000 --> 00:03:01,000 Några tekniska svårigheter. Inte ett problem. 54 00:03:01,000 --> 00:03:04,000 >> CSS tillåter oss att stilisera en sida 55 00:03:04,000 --> 00:03:07,000 genom att så kallade egenskaper, så låt oss ta en titt på denna 56 00:03:07,000 --> 00:03:09,000 genom några grundläggande exempel. 57 00:03:09,000 --> 00:03:12,000 Låt mig gå in i apparaten i dag. 58 00:03:12,000 --> 00:03:15,000 Jag har källan 8 Måndag katalogen här 59 00:03:15,000 --> 00:03:18,000 och jag kommer att gå in i en katalog som heter CSS där vi har ett helt gäng 60 00:03:18,000 --> 00:03:21,000 filer som väntar på oss här, 61 00:03:21,000 --> 00:03:27,000 och i denna mapp har vi till exempel search0.html från förra gången. 62 00:03:27,000 --> 00:03:31,000 Nu minns med search0 vi kvar på denna anmärkning 63 00:03:31,000 --> 00:03:35,000 genom sorts genomföra Google eller egentligen bara fronten för det en vecka sedan eller så, 64 00:03:35,000 --> 00:03:38,000 och märker att vi hade några nya taggar där. 65 00:03:38,000 --> 00:03:41,000 Vi hade h1 för en stor, fet rubrik, 66 00:03:41,000 --> 00:03:45,000 form, som tillät oss att faktiskt ha ett HTML-formulär för inmatning. 67 00:03:45,000 --> 00:03:48,000 Action, vad var meningen med en handlingsplan attribut 68 00:03:48,000 --> 00:03:52,000 på HTML-formulär tag? 69 00:03:52,000 --> 00:03:58,000 Vad var meningen med detta, åtgärder? 70 00:03:58,000 --> 00:04:00,000 Jag ska bara göra det här i dag. 71 00:04:00,000 --> 00:04:03,000 Action är den destination där formuläret ska lämnas in. 72 00:04:03,000 --> 00:04:07,000 Det faktum att det står action = "google.com / search" 73 00:04:07,000 --> 00:04:10,000 betyder att när användaren klickar på skicka-knappen eller motsvarande 74 00:04:10,000 --> 00:04:14,000 vilken form fält som de fyllt kommer att skickas inte till vår server 75 00:04:14,000 --> 00:04:17,000 eller vår apparat utan till den specifika webbadress på Google. 76 00:04:17,000 --> 00:04:19,000 Och metoden det kommer att använda heter få, 77 00:04:19,000 --> 00:04:25,000 och få, för nu är bara en teknik för att överföra informationen vidare till en webbserver 78 00:04:25,000 --> 00:04:29,000 genom URL, så låt oss ta en snabb titt tillbaka på hur det fungerar. 79 00:04:29,000 --> 00:04:31,000 >> Lägg märke till att det finns en ingång som heter q 80 00:04:31,000 --> 00:04:35,000 vars typ är text och sedan en andra ingång av typen lämna 81 00:04:35,000 --> 00:04:39,000 vars värde är CS50 Sök, och faktiskt, om vi öppnar upp filen här, 82 00:04:39,000 --> 00:04:42,000 search0.html, det är en super enkel form, 83 00:04:42,000 --> 00:04:45,000 och om jag söker efter något som datavetenskap 84 00:04:45,000 --> 00:04:50,000 och sedan trycka Enter eller klicka på CS50 Sök 85 00:04:50,000 --> 00:04:53,000 märker att det som händer är bortom sig till Google 86 00:04:53,000 --> 00:04:56,000 Jag har särskilt hamnade på denna URL i toppen, 87 00:04:56,000 --> 00:05:01,000 google.com / search? q = dator + Science, 88 00:05:01,000 --> 00:05:04,000 och datavetenskap är naturligtvis vad jag skrev i. 89 00:05:04,000 --> 00:05:06,000 Den + betyder bara det är där ett blanksteg var, 90 00:05:06,000 --> 00:05:10,000 och det är gjort av webbläsaren bara för att se till att det inte finns någon 91 00:05:10,000 --> 00:05:13,000 förvirring och vitt utrymme i själva webbadressen. 92 00:05:13,000 --> 00:05:15,000 Och sedan q, naturligtvis, är parametern namnet. 93 00:05:15,000 --> 00:05:20,000 Vi har inte sett hur vi programmeraren, faktiskt kan komma q. än. 94 00:05:20,000 --> 00:05:23,000 Vi kan anta att Google vet vad de ska göra med det här, 95 00:05:23,000 --> 00:05:25,000 men vi kommer dit i tid idag. 96 00:05:25,000 --> 00:05:30,000 >> Men låt mig ta en titt istället på search1.html, 97 00:05:30,000 --> 00:05:34,000 som ser lite annorlunda eftersom jag bestämde att denna form här var bara lite lamt. 98 00:05:34,000 --> 00:05:36,000 Jag menar, det är längst upp till vänster. 99 00:05:36,000 --> 00:05:40,000 Det finns egentligen inga estetik till det, så jag vill stilisera detta 100 00:05:40,000 --> 00:05:43,000 lite mer som Google, vars hemsida, minns, 101 00:05:43,000 --> 00:05:47,000 även om du inte kan besöka det så ofta, ser ut så här idag på Halloween. 102 00:05:47,000 --> 00:05:53,000 Om vi ​​istället öppna upp version 1 av denna fil sök 1.html, jag centrerat det. 103 00:05:53,000 --> 00:05:57,000 Fortfarande ganska ful, men åtminstone nu har jag börjat kontrollera estetik på denna sida, 104 00:05:57,000 --> 00:06:00,000 inte bara märka detta. 105 00:06:00,000 --> 00:06:04,000 Låt oss ta en titt på sökning 1, och det är egentligen bara en skillnad här, 106 00:06:04,000 --> 00:06:06,000 som kan hoppa ut på dig, eller kanske inte, 107 00:06:06,000 --> 00:06:11,000 men vad är en linje eller utdrag av skillnaden? 108 00:06:11,000 --> 00:06:14,000 >> Det är denna stil attribut, så visar det sig att i HTML 109 00:06:14,000 --> 00:06:19,000 de flesta element kan de flesta taggar har en stil attribut på dem, 110 00:06:19,000 --> 00:06:23,000 och insidan av denna stil attribut är ett noterat sträng, 111 00:06:23,000 --> 00:06:26,000 och att citerade strängen är CSS. 112 00:06:26,000 --> 00:06:29,000 Du kan sätta CSS där 113 00:06:29,000 --> 00:06:32,000 genom att ange det som en fastighet namn 114 00:06:32,000 --> 00:06:34,000 följt av ett kolon följt av ett värde. 115 00:06:34,000 --> 00:06:37,000 Detta är typ av en olycklig konstruktion beslut för några år sedan 116 00:06:37,000 --> 00:06:40,000 att CSS är ett språk i sig, 117 00:06:40,000 --> 00:06:43,000 men syntaktiskt det är mycket annorlunda från HTML. 118 00:06:43,000 --> 00:06:46,000 I det här fallet ser vi att insidan av min hemsida, som är skriven i HTML, 119 00:06:46,000 --> 00:06:51,000 Jag har CSS insidan av dessa citat, och konventionen för CSS 120 00:06:51,000 --> 00:06:55,000 är att du har vad som kallas en fastighet följt av, igen, ett kolon, 121 00:06:55,000 --> 00:06:58,000 följt av värdet av denna egendom, så det finns inget likhetstecken. 122 00:06:58,000 --> 00:07:00,000 Det finns inga ytterligare citat. 123 00:07:00,000 --> 00:07:03,000 Det är bara här kolonseparerad nyckelvärde par, 124 00:07:03,000 --> 00:07:05,000 och textraden gör exakt vad den säger. 125 00:07:05,000 --> 00:07:09,000 Det anpassar texten i kroppen på sidan, vilket är verkligen modet på sidan, 126 00:07:09,000 --> 00:07:11,000 i mitten. 127 00:07:11,000 --> 00:07:13,000 >> Okej, slutresultatet då, att vara tydlig, det är. 128 00:07:13,000 --> 00:07:17,000 Inte alla som sexigare, men åtminstone är det centrerad och lite mer som den verkliga Google. 129 00:07:17,000 --> 00:07:21,000 Men om jag öppnar istället upp version 2 i denna 130 00:07:21,000 --> 00:07:25,000 och påpeka här nere en ny tagg helt och hållet? 131 00:07:25,000 --> 00:07:30,000 Nu i huvudet på min sida, som tidigare bara hade som etikett 132 00:07:30,000 --> 00:07:32,000 i alla tidigare exempel? 133 00:07:32,000 --> 00:07:34,000 Det hade just detta, titeln. 134 00:07:34,000 --> 00:07:38,000 För en stund sedan huvudet taggen såg ut så här. 135 00:07:38,000 --> 00:07:40,000 Nu i stället har en stil tagg inuti den, 136 00:07:40,000 --> 00:07:44,000 och detta även jag ber om ursäkt, syntaktiskt ser mycket annorlunda från HTML, 137 00:07:44,000 --> 00:07:47,000 men du vänjer sig, varvid insidan av stil taggen 138 00:07:47,000 --> 00:07:50,000 Jag kan nu räkna ut vad som var en stund sedan 139 00:07:50,000 --> 00:07:54,000 ett attribut, stil attribut, och jag kan uttrycka det högst upp på min sida. 140 00:07:54,000 --> 00:07:56,000 >> Varför? 141 00:07:56,000 --> 00:08:00,000 Nåväl, detta är ett steg mot städa upp saker, ungefär som skriftligen C-kod 142 00:08:00,000 --> 00:08:04,000 Vi skulle ibland skriver funktioner till faktor ut gemensam funktionalitet. 143 00:08:04,000 --> 00:08:07,000 Det är bara lite renare att börja factoring ut saker som estetik 144 00:08:07,000 --> 00:08:11,000 till en central plats i stället för allt intersperse hela din HTML. 145 00:08:11,000 --> 00:08:14,000 Detta gör också vad det säger, även om det är lite av ny syntax. 146 00:08:14,000 --> 00:08:19,000 Detta är här en väljare, och kroppen betyder bara att välja stomelementet 147 00:08:19,000 --> 00:08:21,000 och tillämpa följande egenskaper till den. 148 00:08:21,000 --> 00:08:23,000 Tja, är fastigheten exakt samma. 149 00:08:23,000 --> 00:08:25,000 För bra åtgärd Jag har lagt ett semikolon i slutet, 150 00:08:25,000 --> 00:08:29,000 som tenderar att vara konvent, och jag har svept hela denna egendom 151 00:08:29,000 --> 00:08:33,000 i klammerparenteser eftersom jag kunde faktiskt ha olika saker här. 152 00:08:33,000 --> 00:08:39,000 Jag kunde faktiskt säga något i stil färg: blå; 153 00:08:39,000 --> 00:08:42,000 >> Nu även detta inte kommer att bli ett steg mot någonting allt vackrare, 154 00:08:42,000 --> 00:08:47,000 men om jag nu går tillbaka till version 2 har jag åtminstone nu gjort kroppen av min 155 00:08:47,000 --> 00:08:49,000 sidans text alla blå. 156 00:08:49,000 --> 00:08:51,000 Knappen förblir densamma eftersom det är en ingång. Det är inte ren text. 157 00:08:51,000 --> 00:08:56,000 Men allt annat som är text, liksom CS50 Sök uppe, i själva verket är blå. 158 00:08:56,000 --> 00:09:01,000 Återigen är avlägsna allt vi har gjort nu från body-taggen, meddelande, 159 00:09:01,000 --> 00:09:04,000 stil attribut, och vi har med i beräkningen det här. 160 00:09:04,000 --> 00:09:08,000 Detta är inte en enorm förbättring, men om vi tar detta ett steg längre 161 00:09:08,000 --> 00:09:10,000 märke till vad vi kan göra i denna tredje versionen här. 162 00:09:10,000 --> 00:09:14,000 >> År search3.html webbsidan är nästan identisk 163 00:09:14,000 --> 00:09:17,000 med undantag för vad nya tag nu? 164 00:09:17,000 --> 00:09:20,000 Länk, så detta inte är mycket passande namnet 165 00:09:20,000 --> 00:09:24,000 eftersom du inte länka i betydelsen en klickbar hyperlänk. 166 00:09:24,000 --> 00:09:28,000 Snarare är du slags göra motsvarande # include i C 167 00:09:28,000 --> 00:09:31,000 varvid länken-taggen med en href-attribut 168 00:09:31,000 --> 00:09:34,000 och en rel attribut säger gå vidare 169 00:09:34,000 --> 00:09:39,000 och kopiera klistra in innehållet i en fil som heter search3.css här, i huvudsak. 170 00:09:39,000 --> 00:09:42,000 Det är inte riktigt göra det, men det är den anda av den. 171 00:09:42,000 --> 00:09:45,000 Det säger går öppna filen, search3.css, 172 00:09:45,000 --> 00:09:49,000 och behandla det som om användaren hade skrivit det här i huvudet av sidan 173 00:09:49,000 --> 00:09:51,000 precis som jag gjorde i det tidigare exemplet. 174 00:09:51,000 --> 00:09:54,000 Search3.css, tiden är ganska enkel. 175 00:09:54,000 --> 00:09:58,000 Det är verkligen bara innehåller exakt vad som var en stund sedan 176 00:09:58,000 --> 00:10:03,000 i stil taggen, men jag har vägts ut här till sin egen fil. 177 00:10:03,000 --> 00:10:07,000 >> Även om vi inte har spenderat mycket tid alls i HTML eller webbprogrammering 178 00:10:07,000 --> 00:10:11,000 bara intuitivt vad är motivationen, kanske för factoring ut 179 00:10:11,000 --> 00:10:14,000 denna lilla snutt även av CSS i en egen fil 180 00:10:14,000 --> 00:10:19,000 och sedan även den med den här länken tagg här? 181 00:10:19,000 --> 00:10:21,000 [Ohörbart elev svar] 182 00:10:21,000 --> 00:10:25,000 Okej, det är lättare att läsa i den meningen att du har din CSS i en CSS-fil. 183 00:10:25,000 --> 00:10:28,000 Du har din HTML i HTML-filen, så det är lättare att läsa i den bemärkelsen. 184 00:10:28,000 --> 00:10:30,000 Vad kan vara övertygande? Ja. 185 00:10:30,000 --> 00:10:32,000 [Ohörbart elev svar] 186 00:10:32,000 --> 00:10:35,000 Ja, så du kan ta med den många gånger, så nu vi gör dessa 187 00:10:35,000 --> 00:10:38,000 grundläggande exempel med enskilda filer, men antar du faktiskt gör 188 00:10:38,000 --> 00:10:42,000 en riktig webbplats som du kommer till pset 7 eller din slutliga projekt kanske, 189 00:10:42,000 --> 00:10:45,000 och du vill ha flera webbsidor, så är verkligen vanliga på 190 00:10:45,000 --> 00:10:48,000 själva World Wide Web och det skulle vara typ av Lama 191 00:10:48,000 --> 00:10:52,000 att behöva kopiera och klistra in samma blå färg 192 00:10:52,000 --> 00:10:56,000 och samma text linje center i var och en av dessa sidor. 193 00:10:56,000 --> 00:10:59,000 Snarare det är mer förnuftigt att faktor ut, ungefär som vi gjort i C 194 00:10:59,000 --> 00:11:02,000 med. h. filen, lägga den i en central plats, 195 00:11:02,000 --> 00:11:06,000 i detta fall search3.css, och sedan låta någon fil 196 00:11:06,000 --> 00:11:11,000 på din webbplats för att verkligen inkludera filen genom denna tagg här i linje 16. 197 00:11:11,000 --> 00:11:14,000 Som regel är fallet, började vi med version 0, vilken typ av verk 198 00:11:14,000 --> 00:11:18,000 men är inte nödvändigtvis det bästa, och med varje steg, 199 00:11:18,000 --> 00:11:21,000 Sök 1, sök 2, och nu söka 3 har vi tagit dessa baby steg 200 00:11:21,000 --> 00:11:26,000 mot mönster som är lite renare och är mer förberedande 201 00:11:26,000 --> 00:11:30,000 för mer komplexa sidor som vi kan göra på vägen. 202 00:11:30,000 --> 00:11:33,000 >> Låt mig öppna upp en sista exempel här bara för att visa 203 00:11:33,000 --> 00:11:36,000 en ännu mer stiliserad sida, men låt oss först titta på HTML. 204 00:11:36,000 --> 00:11:41,000 Detta är search4.html, och märker att strukturellt det är nästan lika 205 00:11:41,000 --> 00:11:44,000 undantag för införandet av en ny etikett, div. 206 00:11:44,000 --> 00:11:48,000 Div är en tagg som introducerar en uppdelning av sidan. 207 00:11:48,000 --> 00:11:51,000 Du kan se det som en osynlig rektangel. 208 00:11:51,000 --> 00:11:54,000 Det slags skapar en sträng av område på webbsidan 209 00:11:54,000 --> 00:11:56,000 att man kan stilisera allt på en gång. 210 00:11:56,000 --> 00:11:58,000 Vad jag har gjort här är som följer. 211 00:11:58,000 --> 00:12:01,000 Insidan av min kropp taggen, som har varit där hela tiden, 212 00:12:01,000 --> 00:12:05,000 Jag säger skapa en division av sidan här via ledningar 45 till 47, 213 00:12:05,000 --> 00:12:09,000 och det innebär i huvudsak ge mig en osynlig rektangel längst upp på sidan. 214 00:12:09,000 --> 00:12:14,000 Ge mig en andra rektangel, om än osynlig, under det, 215 00:12:14,000 --> 00:12:16,000 och identifiera den med namn innehåll och sedan slutligen, 216 00:12:16,000 --> 00:12:19,000 ge mig tredjedel uppdelning av sidan i botten 217 00:12:19,000 --> 00:12:21,000 kallas ID. 218 00:12:21,000 --> 00:12:23,000 Vi får se varför jag har gjort detta på bara ett ögonblick, 219 00:12:23,000 --> 00:12:26,000 men konceptuellt har jag en rubrik division. 220 00:12:26,000 --> 00:12:30,000 Jag har ett innehåll division, och jag har en sidfot uppdelning av sidan 221 00:12:30,000 --> 00:12:32,000 även om dessa är bara i uppmärkning. 222 00:12:32,000 --> 00:12:35,000 Användaren kommer inte att se 3 rektanglar, 223 00:12:35,000 --> 00:12:37,000 men typ av strukturellt där bakom kulisserna 224 00:12:37,000 --> 00:12:39,000 de är närvarande. 225 00:12:39,000 --> 00:12:41,000 >> Nu, vem bryr sig? Varför egentligen göra det? 226 00:12:41,000 --> 00:12:43,000 Allt annat på sidan är samma som vi har sett förut. 227 00:12:43,000 --> 00:12:47,000 Här är min form. Här är min ingång, min ingång, en radbrytning och så vidare. 228 00:12:47,000 --> 00:12:50,000 Här är en bild, men så vi får se om detta kom från på bara ett ögonblick. 229 00:12:50,000 --> 00:12:52,000 Här är en sidfot, som är ny, bara för att jag ville införa 230 00:12:52,000 --> 00:12:54,000 lite mer innehåll här. 231 00:12:54,000 --> 00:12:58,000 Om vi ​​rulla upp märka att ID för denna div är rubrik. 232 00:12:58,000 --> 00:13:02,000 ID för denna div är innehåll och ID för denna är sidfoten. 233 00:13:02,000 --> 00:13:05,000 Och som namnet antyder, när du har ett ID-attribut 234 00:13:05,000 --> 00:13:09,000 i HTML, per definition måste identifiera 235 00:13:09,000 --> 00:13:12,000 en av delarna, en av taggarna i sidan. 236 00:13:12,000 --> 00:13:16,000 Bördan är helt på dig att komma ihåg att du har en rubrik-ID redan. 237 00:13:16,000 --> 00:13:19,000 Du har en sidfot. Du har en innehålls-ID redan. 238 00:13:19,000 --> 00:13:22,000 Datorn kommer inte att räkna ut vad en tillgänglig ID är för dig, 239 00:13:22,000 --> 00:13:27,000 så du kan av misstag ge 2 taggar en ID huvud, 240 00:13:27,000 --> 00:13:29,000 och det skulle bara vara fel. 241 00:13:29,000 --> 00:13:31,000 >> Du måste hålla i minnet vad du har skapat, 242 00:13:31,000 --> 00:13:34,000 men när du har gjort det meddelande vad vi kan göra här. 243 00:13:34,000 --> 00:13:38,000 Jag kan nu ange i min stil tag i toppen 244 00:13:38,000 --> 00:13:41,000 eller ekvivalent i min CSS-fil, om jag fortfarande använder den versionen, 245 00:13:41,000 --> 00:13:46,000 Jag kan säga # header, och vad det betyder är att oavsett tagg 246 00:13:46,000 --> 00:13:49,000 i denna webbsida har ett ID på huvud 247 00:13:49,000 --> 00:13:53,000 och #, bara genom mänsklig konvention, representerar ID. 248 00:13:53,000 --> 00:13:56,000 Den kraftiga tecken eller pundtecken representerar ID. 249 00:13:56,000 --> 00:13:58,000 Header är namnet som jag gav det. 250 00:13:58,000 --> 00:14:01,000 Detta innebär tillämpa denna CSS-egenskap 251 00:14:01,000 --> 00:14:04,000 till vad tag i den här sidan bär en ID huvud. 252 00:14:04,000 --> 00:14:06,000 Samma affär här. 253 00:14:06,000 --> 00:14:09,000 Tillämpa denna egenskap, som råkar vara samma, till någon del 254 00:14:09,000 --> 00:14:11,000 vars ID är innehåll, och sedan ner här 255 00:14:11,000 --> 00:14:14,000 märker jag blev lite finare med sidfoten. 256 00:14:14,000 --> 00:14:18,000 Varje element vars ID är sidfot, av vilka det kan finnas bara en per definition, 257 00:14:18,000 --> 00:14:21,000 gå vidare och göra sin teckenstorlek mindre, 258 00:14:21,000 --> 00:14:24,000 dess typsnitt vikt fet, dess marginal 20 pixlar. 259 00:14:24,000 --> 00:14:26,000 >> Vad betyder det? 260 00:14:26,000 --> 00:14:28,000 Det är bara en marginal på toppen, botten och vänster och höger. 261 00:14:28,000 --> 00:14:31,000 Detta innebär att ge mig en 20-pixel osynliga marginal runt det 262 00:14:31,000 --> 00:14:35,000 bara för att driva allt annat ifrån det lite, som du kan göra i Word, 263 00:14:35,000 --> 00:14:37,000 Microsoft Word eller Pages eller liknande. 264 00:14:37,000 --> 00:14:39,000 Och sedan texten Centrera. 265 00:14:39,000 --> 00:14:43,000 Låt oss se slutresultatet, och sedan går vi tillbaka till en återstående utdrag av CSS där. 266 00:14:43,000 --> 00:14:48,000 Detta är version 4, vår sista för sökningen exemplen, och det är mycket, mycket sexigare. 267 00:14:48,000 --> 00:14:54,000 Nu, i rättvisans namn, googlade jag bara "google generator typsnitt logotyp." 268 00:14:54,000 --> 00:14:58,000 Och det får mig att skapa en GIF, ett bildformat, som ser ut som att det. 269 00:14:58,000 --> 00:15:00,000 I själva verket kan du göra det också. 270 00:15:00,000 --> 00:15:03,000 Vi har "google typsnitt logo generator." 271 00:15:03,000 --> 00:15:05,000 >> Låt oss se om vi kan göra detta. 272 00:15:05,000 --> 00:15:07,000 Okej, jag tror att detta är den webbplats jag använde. 273 00:15:07,000 --> 00:15:11,000 Vi kan säga Ec 10, till exempel, och göra dem sina egna. 274 00:15:11,000 --> 00:15:13,000 Du kan spela med denna hela dagen och sedan högerklicka på den 275 00:15:13,000 --> 00:15:16,000 och sedan ladda ner den aktuella GIF, vilket är allt som jag gjorde. 276 00:15:16,000 --> 00:15:19,000 Och faktiskt, det är därför i min HTML minns, här borta 277 00:15:19,000 --> 00:15:22,000 Jag hade en bild tagg, som vi såg i korthet förra veckan 278 00:15:22,000 --> 00:15:24,000 vars källa är logo.gif. 279 00:15:24,000 --> 00:15:28,000 Och vad var återigen motivationen för att ha denna alt-attribut, 280 00:15:28,000 --> 00:15:31,000 denna alternativa attribut? 281 00:15:31,000 --> 00:15:33,000 Ja. 282 00:15:33,000 --> 00:15:35,000 [Ohörbart elev svar] 283 00:15:35,000 --> 00:15:37,000 Bra, så 2 anledningar faktiskt, om webbläsaren inte kan dra upp bilden 284 00:15:37,000 --> 00:15:40,000 eftersom du har en långsam nätverksanslutning eller bilden är skadad 285 00:15:40,000 --> 00:15:44,000 eller något liknande åtminstone människa kan se "CS50 sökning," 286 00:15:44,000 --> 00:15:46,000 och sedan även för tillgänglighet skäl. 287 00:15:46,000 --> 00:15:48,000 Om du har en användare som är blind och använder en skärmläsare 288 00:15:48,000 --> 00:15:50,000 och därför uppenbarligen inte kan se bilder som de kan åtminstone 289 00:15:50,000 --> 00:15:52,000 höra texten om sin dator talar den till dem. 290 00:15:52,000 --> 00:15:56,000 >> I allmänhet, är praktisera detta bäst när det gäller tillgängligheten av sidor 291 00:15:56,000 --> 00:16:00,000 så att även användare i den situationen kan höra eller se, så att säga, 292 00:16:00,000 --> 00:16:03,000 vad det är som är på din sida. 293 00:16:03,000 --> 00:16:05,000 Det finns en annan sak som jag gjorde här 294 00:16:05,000 --> 00:16:09,000 vilket är lite intressant, och vi får se mer om detta i problemet som 7 295 00:16:09,000 --> 00:16:12,000 via en av de shorts som leds av en av de pedagogiska stipendiater. 296 00:16:12,000 --> 00:16:15,000 Men # hänvisar till den taggen 297 00:16:15,000 --> 00:16:20,000 vars ID är innehåll, men sedan finns det ett mellanslag och sedan finns det ordet ingången. 298 00:16:20,000 --> 00:16:25,000 Tja, vad som är intressant om CSS är att man kan 299 00:16:25,000 --> 00:16:29,000 avser taggar på en sida slags hierarkiskt, 300 00:16:29,000 --> 00:16:33,000 och vad detta utdrag av CSS betyder är att hitta taggen 301 00:16:33,000 --> 00:16:37,000 vars ID är innehåll och sedan tillämpa följande egenskaper 302 00:16:37,000 --> 00:16:42,000 till alla de ingående taggar som är ättlingar av innehåll, 303 00:16:42,000 --> 00:16:44,000 det är som är indragna i den. 304 00:16:44,000 --> 00:16:48,000 Indrag, igen, är bara viktigt att datorn inte till människan, 305 00:16:48,000 --> 00:16:51,000 men enligt praxis vi strecksats saker som vi går djupare in på en sida, 306 00:16:51,000 --> 00:16:54,000 så detta betyder tillämpa en marginal på 5 pixlar någon ingång inslag 307 00:16:54,000 --> 00:16:57,000 Det är någonstans inuti eller kapslade inuti 308 00:16:57,000 --> 00:16:59,000  elementet vars ID är innehåll. 309 00:16:59,000 --> 00:17:01,000 >> Vem gäller det för? 310 00:17:01,000 --> 00:17:03,000 Tja, det finns faktiskt bara dessa 2 killar här. 311 00:17:03,000 --> 00:17:05,000 Observera att insidan av formen finns 2 ingångar, 312 00:17:05,000 --> 00:17:07,000 eftersom det har varit för alla dessa exempel. 313 00:17:07,000 --> 00:17:11,000 Men märker att de 2 ingångarna råkar finnas inuti, 314 00:17:11,000 --> 00:17:13,000 om än lite djupt, ett par lager av indrag, 315 00:17:13,000 --> 00:17:16,000 insidan av etiketten vars ID är innehåll. 316 00:17:16,000 --> 00:17:18,000 Vad betyder det här? 317 00:17:18,000 --> 00:17:21,000 Om vi ​​går till webbläsaren här kan du se aldrig så lite, 318 00:17:21,000 --> 00:17:23,000 Låt mig zooma in-att det finns lite stoppning mellan knappen 319 00:17:23,000 --> 00:17:25,000 och mellan textfältet. 320 00:17:25,000 --> 00:17:27,000 >> Låt mig tillfälligt stänga av det där. 321 00:17:27,000 --> 00:17:30,000 Låt mig gå upp till mitt CSS, och låt mig gå vidare och bara 322 00:17:30,000 --> 00:17:34,000 ändra marginalen från 5 pixlar till 0 pixlar. 323 00:17:34,000 --> 00:17:37,000 Låt mig gå vidare då och spara filen, gå tillbaka till sökmotorn 324 00:17:37,000 --> 00:17:40,000 och ladda och titta på mitten av sidan. 325 00:17:40,000 --> 00:17:43,000 Allt blev ihop tillsammans, och när jag först piskade detta exempel upp 326 00:17:43,000 --> 00:17:46,000 Jag trodde som såg dum med textfältet och sedan på knappen direkt under. 327 00:17:46,000 --> 00:17:50,000 Jag ville pad det lite, så jag introducerade marginaler. 328 00:17:50,000 --> 00:17:55,000 Vad vi inte kommer att göra i föreläsning är att gå igenom flera dussin 329 00:17:55,000 --> 00:17:58,000 CSS-egenskaper som finns eftersom igen, det finns saker som teckenstorlek, 330 00:17:58,000 --> 00:18:02,000 typsnitt vikt, marginal, text anpassa, och några andra dussin, 331 00:18:02,000 --> 00:18:06,000 och vi hänvisa dig i problem som 7 olika tutorials på nätet 332 00:18:06,000 --> 00:18:08,000 och referenser som gör att du kan plocka dessa saker. 333 00:18:08,000 --> 00:18:10,000 Men vad som verkligen är viktigt i slutet av dagen 334 00:18:10,000 --> 00:18:12,000 >> är att förstå hur dessa saker används. 335 00:18:12,000 --> 00:18:15,000 Återigen, om vi har stil taggen inuti vilken 336 00:18:15,000 --> 00:18:19,000 kan gå väljarna, den typ av identifierare som anger 337 00:18:19,000 --> 00:18:21,000 vem vill du använda dessa egenskaper, 338 00:18:21,000 --> 00:18:24,000 och sedan sätter de egenskaper som central värde-par 339 00:18:24,000 --> 00:18:28,000 åtskilda av ett kolon och sedan slutade med ett semikolon, 340 00:18:28,000 --> 00:18:32,000 eller så kan du rippa allt detta ut och lägg den i en separat CSS-fil 341 00:18:32,000 --> 00:18:35,000 i sig. 342 00:18:35,000 --> 00:18:39,000 Okej, några frågor om begreppen 343 00:18:39,000 --> 00:18:41,000 eller helheten av CSS? 344 00:18:41,000 --> 00:18:43,000 Du kommer åter se mer av det i pset 7, 345 00:18:43,000 --> 00:18:47,000 men vi kommer att hålla det i allmänhet ganska enkelt. 346 00:18:47,000 --> 00:18:49,000 Nej? Okej. 347 00:18:49,000 --> 00:18:51,000 Det är dags för en verklig programmeringsspråk, 348 00:18:51,000 --> 00:18:54,000 och vi ska återkomma till lite CSS i form av ett exempel. 349 00:18:54,000 --> 00:18:58,000 PHP är faktiskt en underbart lättillgängligt språk 350 00:18:58,000 --> 00:19:02,000 att det är syntaktiskt nästan ekvivalent med C. 351 00:19:02,000 --> 00:19:06,000 Med andra ord, om du vet C, du vet för det mesta PHP, 352 00:19:06,000 --> 00:19:08,000 åtminstone syntaktiskt, även om det finns några nya funktioner 353 00:19:08,000 --> 00:19:10,000 och några nya begrepp vi måste titta på. 354 00:19:10,000 --> 00:19:13,000 >> Men för det mesta, nu när vi övergången från C till PHP 355 00:19:13,000 --> 00:19:16,000 de flesta nya grejer är verkligen i den stora bilden, 356 00:19:16,000 --> 00:19:19,000 hur du använder ett språk att programmera på webben i stället för 357 00:19:19,000 --> 00:19:23,000 på kommandoraden eller i en blinkande prompten som vi har gjort hittills. 358 00:19:23,000 --> 00:19:27,000 För referens, särskilt med pset 7 och det slutgiltiga projektet framåt, 359 00:19:27,000 --> 00:19:31,000 drar fördel av denna URL här om du vill läsa på formaliteterna i PHP. 360 00:19:31,000 --> 00:19:34,000 Det är som faktiskt en gratis online lärobok effektivt 361 00:19:34,000 --> 00:19:37,000 och du kommer också att upptäcka att det är riktigt nice om PHP 362 00:19:37,000 --> 00:19:41,000 är att det finns hundratals funktioner som kommer med det, 363 00:19:41,000 --> 00:19:44,000 medan i C du inte nödvändigtvis har tillgång till 364 00:19:44,000 --> 00:19:47,000 fler funktioner än var i matematik biblioteket, CS50 biblioteket. 365 00:19:47,000 --> 00:19:51,000 I PHP och en hel del moderna språk, Python och Ruby bland dem, 366 00:19:51,000 --> 00:19:54,000 får du tillgång till så många fler funktioner, vilket innebär att du får skriva 367 00:19:54,000 --> 00:19:57,000 mycket mindre kod eftersom du kan stå på axlarna av andra människor 368 00:19:57,000 --> 00:19:59,000 som redan skrivit vissa saker för dig. 369 00:19:59,000 --> 00:20:03,000 >> Låt oss ta en snabb rundtur i syntaxen i PHP och sedan skriva några exempel. 370 00:20:03,000 --> 00:20:06,000 Vad är trevligt om PHP först och främst 371 00:20:06,000 --> 00:20:08,000 är det finns ingen huvudfunktion. 372 00:20:08,000 --> 00:20:10,000 Om du vill skriva ett program i PHP du börjar skriva kod, 373 00:20:10,000 --> 00:20:12,000 och du behöver inte oroa dig för stora. 374 00:20:12,000 --> 00:20:14,000 Det finns ingen int. Det finns ingen återvändo. 375 00:20:14,000 --> 00:20:17,000 Det finns ingen argv, argc som är krävs när du skriver programmet. 376 00:20:17,000 --> 00:20:20,000 Snarare kan du bara börja skriva kod, och det är delvis 377 00:20:20,000 --> 00:20:23,000 eftersom PHP är vad som kallas ett tolkat språk. 378 00:20:23,000 --> 00:20:26,000 C sammanställdes, och det har sammanställts i den meningen att du börjar 379 00:20:26,000 --> 00:20:29,000 med källkod, kör det genom klang, som är en kompilator, 380 00:20:29,000 --> 00:20:33,000 och så småningom efter ett visst antal steg du får objektkod, 0 och 1. 381 00:20:33,000 --> 00:20:36,000 PHP och Python och Ruby och Pearl och andra 382 00:20:36,000 --> 00:20:39,000 finns olika typer av språk som du inte sammanställa dem. 383 00:20:39,000 --> 00:20:42,000 Du går inte från källkod till 0 och 1. 384 00:20:42,000 --> 00:20:45,000 Du kör bara källkoden, och du kör källkoden 385 00:20:45,000 --> 00:20:49,000 genom att skriva i en vanlig textfil som slutar på. php i detta fall 386 00:20:49,000 --> 00:20:53,000 istället för. c och vad programmet gör på din dator 387 00:20:53,000 --> 00:20:57,000 är det tolkar bokstavligen din kod rad för rad för rad. 388 00:20:57,000 --> 00:21:00,000 >> Med andra ord, snarare än att skriva ett program och kör programmet 389 00:21:00,000 --> 00:21:04,000 direkt du skriver istället ett program med en fil som slutar med. php. 390 00:21:04,000 --> 00:21:09,000 Då du kör en faktisk program som kallas php.exe, om du är på Windows, 391 00:21:09,000 --> 00:21:12,000 eller bara PHP om du är på Mac OS eller Linux, 392 00:21:12,000 --> 00:21:17,000 och du ger som underlag för PHP-programmet din egen källkod, 393 00:21:17,000 --> 00:21:20,000 och dess syfte i livet är att läsa din kod uppifrån och ned, från vänster till höger, 394 00:21:20,000 --> 00:21:23,000 och göra vad du har berättat det att göra. 395 00:21:23,000 --> 00:21:25,000 >> Låt oss se vad detta kommer att betyda syntaktiskt. 396 00:21:25,000 --> 00:21:27,000 I PHP har vi förutsättningar. 397 00:21:27,000 --> 00:21:29,000 Denna bild är identisk med vad du såg tillbaka i vecka 1 398 00:21:29,000 --> 00:21:33,000 eftersom syntaktiskt villkor, IFS och annars IFS och annars i PHP 399 00:21:33,000 --> 00:21:35,000 ser exakt ut så här. 400 00:21:35,000 --> 00:21:38,000 När det gäller booleska uttryck de ska se ut exakt så här. 401 00:21:38,000 --> 00:21:43,000 När det gäller att Anding saker tillsammans som Booleans det kommer att se ut exakt så här. 402 00:21:43,000 --> 00:21:46,000 Växlar ser likadana ut, och du får den extra fördelen i PHP 403 00:21:46,000 --> 00:21:51,000 att omkopplarna i C kan bara slå på en röding eller en int. 404 00:21:51,000 --> 00:21:53,000 Du kan inte slå på ett strängvärde. 405 00:21:53,000 --> 00:21:55,000 I PHP kan du faktiskt få ett uttryck 406 00:21:55,000 --> 00:21:58,000 som är en variabel vars innehåll är en sträng, 407 00:21:58,000 --> 00:22:01,000 och du kan faktiskt göra strängjämförelse i den verkliga intuitivt sätt, 408 00:22:01,000 --> 00:22:06,000 inte pekare jämförelse, för att besluta om att göra mål i eller j eller något annat. 409 00:22:06,000 --> 00:22:09,000 Vi får se till att eventuellt kort. 410 00:22:09,000 --> 00:22:11,000 >> Slingor alltför underbart är desamma. 411 00:22:11,000 --> 00:22:15,000 För slingor har en initiering, ett tillstånd, och ett visst antal uppdateringar. 412 00:22:15,000 --> 00:22:18,000 Medan loopar finns också i PHP. 413 00:22:18,000 --> 00:22:21,000 Göra medan slingor finns också i PHP, 414 00:22:21,000 --> 00:22:26,000 och arrayer finns i PHP, men här är där syntaxen börjar få lite annorlunda, 415 00:22:26,000 --> 00:22:29,000 men begreppen är desamma, och de begrepp verkligen är desamma 416 00:22:29,000 --> 00:22:32,000 som de var i vecka 0 med Scratch. 417 00:22:32,000 --> 00:22:34,000 Först och främst är det $ tecknet. 418 00:22:34,000 --> 00:22:37,000 Detta var en design beslut i PHP där varje variabel 419 00:22:37,000 --> 00:22:41,000 i PHP genom design börjar med $ tecken. 420 00:22:41,000 --> 00:22:46,000 Det finns ingen mer X, Y, Z. Det är nu $ X, $ Y, $ Z bara för att. 421 00:22:46,000 --> 00:22:49,000 Det är något att ha i åtanke, och nu på höger sida 422 00:22:49,000 --> 00:22:52,000 Detta liknar en matris, 423 00:22:52,000 --> 00:22:54,000 men vi använder hakparenteser här. 424 00:22:54,000 --> 00:22:57,000 I PHP och Javascript, som vi kommer så småningom se, 425 00:22:57,000 --> 00:23:01,000 att förklara en rad du öppna hakparentes och stängt hakparentes, 426 00:23:01,000 --> 00:23:04,000 och då har du en kommaseparerad lista med värden, om Ints 427 00:23:04,000 --> 00:23:09,000 eller strängar eller tecken, vad du vill, inne i det uttrycket där. 428 00:23:09,000 --> 00:23:11,000 >> Nu, hur vi gör något liknande i C? 429 00:23:11,000 --> 00:23:16,000 Vad var syntaxen för statiskt förklara en rad kända nummer? 430 00:23:16,000 --> 00:23:19,000 Det var klammerparenteser, så liten skillnad här, men i båda PHP 431 00:23:19,000 --> 00:23:22,000 och så småningom Javascript den använder bara hakparenteser, så egentligen 432 00:23:22,000 --> 00:23:25,000 den enda intressant detalj här är $ tecknet för variabelnamnet 433 00:23:25,000 --> 00:23:28,000 och även hakparenteser, och det finns en märklig sak 434 00:23:28,000 --> 00:23:32,000 som är utelämnats samt på den vänstra sidan av = tecknet. 435 00:23:32,000 --> 00:23:36,000 Det som saknas som vi har krav på i flera veckor nu? Ja. 436 00:23:36,000 --> 00:23:38,000 [Ohörbart elev svar] 437 00:23:38,000 --> 00:23:41,000 Storleken, så det finns inget omnämnande av storleken på matrisen. 438 00:23:41,000 --> 00:23:45,000 Ärligt talat, det finns inget omnämnande av hakparenteser till vänster 439 00:23:45,000 --> 00:23:47,000 av tecknet = och vad saknas i raden? 440 00:23:47,000 --> 00:23:49,000 Ja. >> [Ohörbart elev svar] 441 00:23:49,000 --> 00:23:52,000 Typen, så vad är intressant, särskilt om PHP 442 00:23:52,000 --> 00:23:56,000 är att det inte är ett starkt skrivit språk som C är, 443 00:23:56,000 --> 00:23:58,000 och det är starkt skrivit i den meningen att du måste säga röding, 444 00:23:58,000 --> 00:24:00,000 Du måste säga int, måste du säga flyta. 445 00:24:00,000 --> 00:24:03,000 >> När som helst du vill ha en variabel måste du berätta klang vad dess typ är. 446 00:24:03,000 --> 00:24:05,000 PHP är lite latare. 447 00:24:05,000 --> 00:24:08,000 Det är löst skrivit i den meningen att 448 00:24:08,000 --> 00:24:11,000 du kan ha flöten och tecken och strängar 449 00:24:11,000 --> 00:24:14,000 och Ints och så vidare, men själva språket 450 00:24:14,000 --> 00:24:17,000 egentligen inte bryr sig vad du lägger in i en variabel. 451 00:24:17,000 --> 00:24:20,000 Du behöver inte informera i förväg vilka datatyp 452 00:24:20,000 --> 00:24:22,000 går i en variabel. 453 00:24:22,000 --> 00:24:24,000 Det är helt upp till dig, så det är trevligt 454 00:24:24,000 --> 00:24:27,000 i att du inte behöver oroa dig så mycket om datatyper 455 00:24:27,000 --> 00:24:29,000 och oroande vad dina argument och så vidare. 456 00:24:29,000 --> 00:24:32,000 Det innebär också så småningom funktioner i PHP kommer att kunna återvända 457 00:24:32,000 --> 00:24:36,000 antingen en int för det mesta, och kanske då och då 458 00:24:36,000 --> 00:24:40,000 De kommer tillbaka en bool, en boolean false, till exempel, för att beteckna att något gick fel. 459 00:24:40,000 --> 00:24:44,000 Det ger oss några upsides, men också kommer att göra oss typ av avsiktligt 460 00:24:44,000 --> 00:24:47,000 lite latare när det gäller datatyper. 461 00:24:47,000 --> 00:24:50,000 >> Vad finns det att tänka på här? 462 00:24:50,000 --> 00:24:54,000 Variabler ser ganska såhär, så $ s = "hej, värld." 463 00:24:54,000 --> 00:24:57,000 Det är kanske inferable från föregående exempel, 464 00:24:57,000 --> 00:24:59,000 och vi har en annan typ av slinga. 465 00:24:59,000 --> 00:25:02,000 Den här kommer vi faktiskt se då och då eftersom det är ganska praktiskt, 466 00:25:02,000 --> 00:25:04,000 en foreach konstruktion. 467 00:25:04,000 --> 00:25:11,000 I det här fallet tar foreach loop inuti dess parenteser 3 ord typiskt, 468 00:25:11,000 --> 00:25:16,000 $ Något först, vilket är vad array vill du iterera över medlemmarna i, 469 00:25:16,000 --> 00:25:19,000 då bokstavligen sökordet som, och sedan slutligen, 470 00:25:19,000 --> 00:25:21,000 en annan variabel namn som du får välja. 471 00:25:21,000 --> 00:25:23,000 Det kan vara foo, bar, eller element, 472 00:25:23,000 --> 00:25:26,000 och vad denna konstruktion gör 473 00:25:26,000 --> 00:25:29,000 är om $ arrayen innehåller 10 element 474 00:25:29,000 --> 00:25:34,000 på varje iteration av denna array-ledsen, på varje iteration av denna slinga 475 00:25:34,000 --> 00:25:37,000 variabeln kallas elementet kommer att uppdateras 476 00:25:37,000 --> 00:25:40,000 att vara det första elementet i arrayen, då det andra elementet i arrayen, 477 00:25:40,000 --> 00:25:44,000 då det tredje elementet i arrayen, varigenom behovet 478 00:25:44,000 --> 00:25:46,000 att göra något irriterande hakparentes notation och 479 00:25:46,000 --> 00:25:49,000 $ I för att indexera i en array. 480 00:25:49,000 --> 00:25:53,000 PHP gör allt detta arbete för dig och på varje iteration 481 00:25:53,000 --> 00:25:55,000 bara händer dig nästa element från arrayen 482 00:25:55,000 --> 00:26:01,000 utan att du behöver veta om eller bry sig om dess numeriska index plats. 483 00:26:01,000 --> 00:26:04,000 >> Och sedan slutligen, för nu finns det en annan del av PHP 484 00:26:04,000 --> 00:26:08,000 det kommer att bli enormt användbara, särskilt när vi börja programmera på webben, 485 00:26:08,000 --> 00:26:10,000 och det är känt som en associativ array. 486 00:26:10,000 --> 00:26:13,000 De arrayer som vi vet hittills den 20 sekunder sedan 487 00:26:13,000 --> 00:26:17,000 och under de senaste 8 veckorna numeriskt indexerade arrayer, 488 00:26:17,000 --> 00:26:20,000 typ av traditionella matriser där indexen är Ints, 489 00:26:20,000 --> 00:26:23,000 0, 1, 2, hela vägen på upp. 490 00:26:23,000 --> 00:26:25,000 Associativa arrayer är mycket mer kraftfull. 491 00:26:25,000 --> 00:26:28,000 De tillåter dig att ha godtyckliga nycklar, 492 00:26:28,000 --> 00:26:31,000 godtyckliga index och godtyckliga värden. 493 00:26:31,000 --> 00:26:34,000 Medan i en traditionell uppsättning är det 0, 1, 2, 494 00:26:34,000 --> 00:26:37,000 i en associativ array kan du få ett index 495 00:26:37,000 --> 00:26:41,000 eller en nyckel foo vars värde är bar. 496 00:26:41,000 --> 00:26:46,000 Du kan sedan ha en annan tangent vars namn är baz och vars värde är qux. 497 00:26:46,000 --> 00:26:49,000 >> Återigen dumma datavetenskap generiska variabelnamn här, 498 00:26:49,000 --> 00:26:55,000 men poängen är att denna array inte har fäste 0 eller hållare 1. 499 00:26:55,000 --> 00:26:59,000 Det stället kommer att ha fäste foo och fäste baz. 500 00:26:59,000 --> 00:27:03,000 Detta är mycket mer mångsidig eftersom vi kommer att kunna associera 501 00:27:03,000 --> 00:27:07,000 ord med andra ord, nycklar med värden helt godtyckligt, 502 00:27:07,000 --> 00:27:12,000 och vi kommer att kunna få dessa värden tillbaka i konstant tid 503 00:27:12,000 --> 00:27:14,000 eftersom under huven vad en associativ array 504 00:27:14,000 --> 00:27:16,000 verkligen är en hash-tabell. 505 00:27:16,000 --> 00:27:20,000 Minns att en hash-tabell kan du sätta i lite input 506 00:27:20,000 --> 00:27:25,000 gillar sätta i ordet David om du vill infoga David till någon form av lexikon, 507 00:27:25,000 --> 00:27:27,000 och sedan får du tillbaka något värde normalt. 508 00:27:27,000 --> 00:27:29,000 I fallet med stavningskontroll, sant eller falskt. 509 00:27:29,000 --> 00:27:33,000 David eller vad ordet är i eller är inte i ordlistan. 510 00:27:33,000 --> 00:27:36,000 En associativ array är egentligen bara en hash-tabell, 511 00:27:36,000 --> 00:27:38,000 men det är en mycket mer användarvänlig inkarnation av det. 512 00:27:38,000 --> 00:27:41,000 Som vi ser, det kommer att tillåta oss att göra vissa saker 513 00:27:41,000 --> 00:27:43,000 mycket, mycket lätt. 514 00:27:43,000 --> 00:27:45,000 >> Låt oss ta en titt på några grundläggande PHP 515 00:27:45,000 --> 00:27:47,000 exempel och se vad vi kan göra med detta språk. 516 00:27:47,000 --> 00:27:51,000 Låt mig gå vidare och öppna upp i vår källkatalog idag 517 00:27:51,000 --> 00:27:54,000 en fil som heter hello1.php. 518 00:27:54,000 --> 00:27:57,000 Denna fil är mer kommentar än det är faktiska koden, 519 00:27:57,000 --> 00:28:00,000 så låt mig faktiskt ta bort alla kommentarer från filen 520 00:28:00,000 --> 00:28:05,000 och presentera kanske den enklaste PHP-program här. 521 00:28:05,000 --> 00:28:07,000 5 rader, och vissa av dem är vita rymden, 522 00:28:07,000 --> 00:28:09,000 så märker några viktiga skillnader här. 523 00:28:09,000 --> 00:28:12,000 Filen heter hello1.php. 524 00:28:12,000 --> 00:28:16,000 Den allra första raden är dock 00:28:18,000 Likadana i andemening som HTML, 526 00:28:18,000 --> 00:28:21,000 att teckensekvens talar om för datorn 527 00:28:21,000 --> 00:28:25,000 "Hej, dator, här kommer ett program vi är i i PHP." 528 00:28:25,000 --> 00:28:28,000 Det gör att den inte är förvirrad att det är något annat språk. 529 00:28:28,000 --> 00:28:30,000 Linje 2 är en intressant tomt utrymme. 530 00:28:30,000 --> 00:28:32,000 Linje 3 är vår gamle vän printf, 531 00:28:32,000 --> 00:28:34,000 denna gång i samband med PHP. 532 00:28:34,000 --> 00:28:37,000 PHP har sin egen version av printf som uppträder exakt samma, 533 00:28:37,000 --> 00:28:39,000 så detta är bara att skriva ut "Hello, world." 534 00:28:39,000 --> 00:28:46,000 Och sedan denna motsatta tagg här?>, Innebär att det för min PHP-kod. 535 00:28:46,000 --> 00:28:48,000 >> Låt oss se hur att köra. 536 00:28:48,000 --> 00:28:50,000 Jag ska gå tillbaka till min terminalfönster här. 537 00:28:50,000 --> 00:28:52,000 Jag ska gå in i min PHP-katalog. 538 00:28:52,000 --> 00:28:56,000 Observera att vi har en massa filer, den första som är hello.php. 539 00:28:56,000 --> 00:29:01,000 Låt mig gå vidare och köra, hello1.php skriver. 540 00:29:01,000 --> 00:29:03,000 Åtkomst nekades. Okej. 541 00:29:03,000 --> 00:29:06,000 Hur har vi fasta saker som detta i det förflutna? 542 00:29:06,000 --> 00:29:08,000 Vad är det? >> [Ohörbart elev svar] 543 00:29:08,000 --> 00:29:11,000 Vi behöver läsa och skriva, men låt mig göra ls-l. 544 00:29:11,000 --> 00:29:14,000 Kom ihåg detta något kryptiska utgång där hello1 545 00:29:14,000 --> 00:29:17,000 verkar vara läs-och skrivbara av mig 546 00:29:17,000 --> 00:29:19,000 men kan läsas av alla andra. 547 00:29:19,000 --> 00:29:22,000 Det visar sig detta faktiskt inte är ett steg i rätt riktning. 548 00:29:22,000 --> 00:29:25,000 Skillnaden, återigen, med ett tolkat språk 549 00:29:25,000 --> 00:29:27,000 är du inte köra programmet direkt. 550 00:29:27,000 --> 00:29:30,000 Du kör istället en tolk och lämna det koden 551 00:29:30,000 --> 00:29:33,000 som du har skrivit så det kan tolka det rad för rad. 552 00:29:33,000 --> 00:29:36,000 I detta fall, tolken eller program jag vill verkligen köra 553 00:29:36,000 --> 00:29:38,000 är bokstavligen kallas PHP. 554 00:29:38,000 --> 00:29:41,000 >> Någonstans på denna hårddisk av apparaten finns ett program 555 00:29:41,000 --> 00:29:45,000 någon annan skrev heter PHP eller Windows php.exe. 556 00:29:45,000 --> 00:29:48,000 Vad jag ska göra här är jag ska faktiskt köra PHP 557 00:29:48,000 --> 00:29:51,000 men ge det som ett argument koden som jag skrev, 558 00:29:51,000 --> 00:29:54,000 och då ska jag zooma ut och tryck enter. 559 00:29:54,000 --> 00:29:58,000 Det kör mitt program för mig, uppifrån och ned, från vänster till höger. 560 00:29:58,000 --> 00:30:01,000 Låt mig gå vidare och öppna upp en liten avvikelse av detta. 561 00:30:01,000 --> 00:30:05,000 I hello2.php märker att detta också 562 00:30:05,000 --> 00:30:08,000 är mestadels kommentarer, så låt mig bli av med dem som en distraktion, 563 00:30:08,000 --> 00:30:13,000 och vad är klart annorlunda nu om den här filen? 564 00:30:13,000 --> 00:30:15,000 Det är denna nya linje, något kryptiskt i toppen. 565 00:30:15,000 --> 00:30:20,000 I linje 1 är det #! / Bin / php. 566 00:30:20,000 --> 00:30:24,000 Bin är en konvention om Linux och Mac OS för binärer, 567 00:30:24,000 --> 00:30:27,000 så / bin innebär detta är en mapp som innehåller en massa binärer 568 00:30:27,000 --> 00:30:29,000 som är programmerad, en av vilken är PHP. 569 00:30:29,000 --> 00:30:32,000 Den #! är smeknamnet Shebang, 570 00:30:32,000 --> 00:30:35,000 vilket är ett snabbt sätt att säga det, och vad det innebär 571 00:30:35,000 --> 00:30:40,000 är att när du kör det här programmet nu finns det en antydan överst i filen 572 00:30:40,000 --> 00:30:44,000 som talar om för datorn vad tolken att använda. 573 00:30:44,000 --> 00:30:47,000 >> Det blir lite irriterande om du var tvungen att berätta för dina användare och dina kunder 574 00:30:47,000 --> 00:30:50,000 "Hej, skrev vi det här programmet som heter hello1.php." 575 00:30:50,000 --> 00:30:54,000 Allt du behöver göra är att alltid köra PHP och sedan namnet på programmet. 576 00:30:54,000 --> 00:30:58,000 Ärligt talat skulle det vara bara trevligare att köra hello1.php, 577 00:30:58,000 --> 00:31:00,000 och faktiskt, kan vi om vi gör följande. 578 00:31:00,000 --> 00:31:05,000 Låt mig gå vidare och göra ls-l, och meddelande i hello2 det är fortfarande bara läsa skriva 579 00:31:05,000 --> 00:31:10,000 och sedan läsa läsa, så jag kan inte ännu göra detta, hello2.php. 580 00:31:10,000 --> 00:31:15,000 Men vi introducerade denna aldrig så kort förra gången, kommandot chmod. 581 00:31:15,000 --> 00:31:20,000 Om jag gör chmod a + x, vilket betyder allt plus genomförbarheten, 582 00:31:20,000 --> 00:31:26,000 och sedan hello2.php och sedan märker ls-l igen vad som ändrats. 583 00:31:26,000 --> 00:31:29,000 En är Linux visar mig filnamnet i grönt för att förmedla idén 584 00:31:29,000 --> 00:31:32,000 att det är körbar, men ännu viktigare, på den vänstra sidan 585 00:31:32,000 --> 00:31:36,000 märker att lite som representerar X för körbara nu ställts in. 586 00:31:36,000 --> 00:31:42,000 Vad detta nu innebär är kan jag köra ./hello2.php som vanligt, 587 00:31:42,000 --> 00:31:45,000 tryck på enter, och på grund av shebang högst upp i filen 588 00:31:45,000 --> 00:31:48,000 det är en ledtråd, igen, till Linux som säger 589 00:31:48,000 --> 00:31:51,000 använda tolk för att köra den här filen. 590 00:31:51,000 --> 00:31:54,000 Oroa dig inte om att tvinga användaren att faktiskt skriva det. 591 00:31:54,000 --> 00:31:57,000 >> Och vad är trevligt nu är det slags irrelevant för mina kunder eller mina vänner 592 00:31:57,000 --> 00:32:01,000 vilket språk jag skrev det här programmet i, så jag kan gå vidare med mv 593 00:32:01,000 --> 00:32:04,000 och döpa det här till hello2, till exempel. 594 00:32:04,000 --> 00:32:07,000 Och nu om jag ./hello2 595 00:32:07,000 --> 00:32:10,000 och zooma ut mitt program fortsätter att köras. 596 00:32:10,000 --> 00:32:13,000 Dessa filtillägg är en mänsklig konvention som är nödvändiga 597 00:32:13,000 --> 00:32:15,000 för ungefär klang och gör som letar efter dem. 598 00:32:15,000 --> 00:32:18,000 Men för PHP, kan jag kalla detta något filtillägg jag vill. 599 00:32:18,000 --> 00:32:22,000 Jag kunde lura världen att tro att jag är riktigt bra på Ruby, 600 00:32:22,000 --> 00:32:25,000 och jag skulle kunna skriva hello2.rb och sedan köra detta, 601 00:32:25,000 --> 00:32:28,000 och voila, nu har jag Ruby versionen, som är en komplett lögn. 602 00:32:28,000 --> 00:32:30,000 Men filtillägg är meningslösa 603 00:32:30,000 --> 00:32:35,000 om filen är körbar och har denna speciella tips överst i filen. 604 00:32:35,000 --> 00:32:38,000 >> Nu, som en parentes, låt mig visa dig snabbt version 3, 605 00:32:38,000 --> 00:32:40,000 som är en slags bra trick för att veta. 606 00:32:40,000 --> 00:32:45,000 I hello3 jag gjorde något lite fel 607 00:32:45,000 --> 00:32:47,000 att jag ska uppdatera online-källkod. 608 00:32:47,000 --> 00:32:50,000 I version 3 visar det sig att på de flesta Linux-datorer 609 00:32:50,000 --> 00:32:53,000 Det finns ett program som heter env för miljö, 610 00:32:53,000 --> 00:32:56,000 och vad du kan göra här är om du har ingen aning om var PHP 611 00:32:56,000 --> 00:33:00,000 installeras på den lokala hårddisken, eftersom det faktiskt kan variera beroende på datorn 612 00:33:00,000 --> 00:33:03,000 att någon använder, säger ENV bara köra env, 613 00:33:03,000 --> 00:33:07,000 som är på de flesta system, och räkna ut var PHP är. 614 00:33:07,000 --> 00:33:11,000 Bara en vanlig trick så du behöver inte oroa dig för att ta reda på om ett program. 615 00:33:11,000 --> 00:33:14,000 Men om du bryr dig att ta reda på om ett program, och du inte har brytt hittills 616 00:33:14,000 --> 00:33:16,000 Du kan använda vilket kommando. 617 00:33:16,000 --> 00:33:19,000 >> Låt mig zooma ut och typ som php, 618 00:33:19,000 --> 00:33:23,000 och märker det säger mig att det är faktiskt i usr / bin / php. 619 00:33:23,000 --> 00:33:25,000 Det är lite av en lögn. Det är också i bin. 620 00:33:25,000 --> 00:33:27,000 Det är bara visar mig den första träffen. 621 00:33:27,000 --> 00:33:31,000 Om du någonsin undrat var klang är, som klang, det är i usr / bin / klang, 622 00:33:31,000 --> 00:33:34,000 som gör, är usr / bin / göra, och vad det betyder hela tiden 623 00:33:34,000 --> 00:33:38,000 du kunde ha skriva usr / bin / klang in för att köra klang, 624 00:33:38,000 --> 00:33:41,000 men det är typ av jobbigt att göra det, så vissa mappar 625 00:33:41,000 --> 00:33:44,000 Liksom usr / bin och bin antas vara standard 626 00:33:44,000 --> 00:33:50,000 så att datorn vet att titta i dem åt dig. 627 00:33:50,000 --> 00:33:53,000 Har du frågor om hur du skriver en super, super enkelt Hello World-programmet 628 00:33:53,000 --> 00:33:55,000 i PHP och sedan köra den? 629 00:33:55,000 --> 00:33:59,000 För nu ska vi börja införa mer övertygande syntax. 630 00:33:59,000 --> 00:34:01,000 Okej, nu kör vi. 631 00:34:01,000 --> 00:34:03,000 Dessa program har vi sett faktiskt alla av dem innan. 632 00:34:03,000 --> 00:34:07,000 >> Om jag öppnar till exempel, låt oss göra beer1.php, 633 00:34:07,000 --> 00:34:09,000 Vi kommer inte att gå igenom flera versioner av detta, men vad jag gjorde 634 00:34:09,000 --> 00:34:13,000 jag satte mig och hällde det eller konverteras 635 00:34:13,000 --> 00:34:15,000 min C-kod till PHP-kod här. 636 00:34:15,000 --> 00:34:18,000 De flesta av den övre delen av filen kommentarer här. 637 00:34:18,000 --> 00:34:20,000 Det visar sig att det finns en ny funktion som vi behöver kallas readline. 638 00:34:20,000 --> 00:34:23,000 GetString, minns, från vecka 0 och framåt var en CS50 sak. 639 00:34:23,000 --> 00:34:27,000 PHP kommer med sin egen användarvänliga funktion som kallas readline 640 00:34:27,000 --> 00:34:30,000 som tar 1 argument som anger att snabbt 641 00:34:30,000 --> 00:34:33,000 som du vill visa för användaren, och vad readline gör 642 00:34:33,000 --> 00:34:35,000 är det återgår oavsett användaren skriver i. 643 00:34:35,000 --> 00:34:39,000 I det här fallet, jag förklara en variabel som heter $ n. 644 00:34:39,000 --> 00:34:42,000 Jag lagring i det returvärdet av readline 645 00:34:42,000 --> 00:34:44,000 Efter att användaren med denna sträng. 646 00:34:44,000 --> 00:34:47,000 Bara för att säkerhetskopiera, att faktiskt köra denna sak, låt mig gå vidare 647 00:34:47,000 --> 00:34:50,000 och kör php beer1.php. 648 00:34:50,000 --> 00:34:53,000 Hur många flaskor blir det? Låt oss bara göra 2 denna gång. 649 00:34:53,000 --> 00:34:55,000 Enter. Det är allt. 650 00:34:55,000 --> 00:34:59,000 >> Programmet är funktionellt identisk med den C-versionen veckor sedan. 651 00:34:59,000 --> 00:35:01,000 Men syntaktiskt låt oss se vad som är annorlunda. 652 00:35:01,000 --> 00:35:05,000 Efter att jag får en int från användaren märker att jag gör något fel kontroll, 653 00:35:05,000 --> 00:35:08,000 och om n är mindre än 1 jag slutade och jag skriver ut 654 00:35:08,000 --> 00:35:11,000 en ledsen meddelande till användaren och avsluta med 1. 655 00:35:11,000 --> 00:35:13,000 Detta är också lite annorlunda. 656 00:35:13,000 --> 00:35:16,000  I C vad gjorde vi? I C vi återvände 1. 657 00:35:16,000 --> 00:35:20,000 I PHP du avslutar med 1, som uppriktigt sagt är jag tror lite mer intuitiv 658 00:35:20,000 --> 00:35:22,000 eftersom du bokstavligen avsluta programmet. 659 00:35:22,000 --> 00:35:25,000 Okej, och sedan ner här irriterande låten är identisk syntaktiskt 660 00:35:25,000 --> 00:35:29,000 utom för variabeln, så här nere i linje 24 och framåt 661 00:35:29,000 --> 00:35:31,000 märker jag att slingan är nästan densamma, 662 00:35:31,000 --> 00:35:34,000 men jag har $ framför i och n, 663 00:35:34,000 --> 00:35:37,000 och vad som också saknas i linje 26 som vi har haft i det förflutna 664 00:35:37,000 --> 00:35:39,000 När förklara en variabel jag? 665 00:35:39,000 --> 00:35:41,000 Det finns ingen typ. 666 00:35:41,000 --> 00:35:43,000 Det är felaktigt i PHP säga int. 667 00:35:43,000 --> 00:35:45,000 Du kan helt enkelt inte behöver göra det. 668 00:35:45,000 --> 00:35:48,000 Datorn är tolken PHP smarta nog att inse 669 00:35:48,000 --> 00:35:51,000 att om du sätter ett nummer i $ jag det kommer att behandla den 670 00:35:51,000 --> 00:35:53,000 som ett nummer för dig. 671 00:35:53,000 --> 00:35:57,000 Och sedan ner här vi ansluter $ i, $ i, $ I - 1. 672 00:35:57,000 --> 00:36:00,000 Allt detta är densamma, och sedan ner här vi gör en "Wow, det är irriterande" printf 673 00:36:00,000 --> 00:36:02,000 och avsluta (0). 674 00:36:02,000 --> 00:36:05,000 >> Återigen är det takeaway här att även om vi kommer att spendera relativt 675 00:36:05,000 --> 00:36:09,000 lite tid på PHP, säkert kontra vad vi gjorde på C, 676 00:36:09,000 --> 00:36:12,000 Det är nästan samma sak, och så vad vi ska göra i dag och nästa vecka 677 00:36:12,000 --> 00:36:14,000 och därefter är verkligen fokusera på några av de nya idéerna. 678 00:36:14,000 --> 00:36:17,000 Bara för att se att en annan sak gör översätter över från C, 679 00:36:17,000 --> 00:36:20,000 detta var en super enkelt program vi gjorde i vecka 1 680 00:36:20,000 --> 00:36:22,000 eller 2 som kubik ett värde. 681 00:36:22,000 --> 00:36:25,000 Men vad var intressant när om det här programmet är att det 682 00:36:25,000 --> 00:36:28,000 introducerade begreppet av en skriftlig anpassad funktion som vi själva skrev. 683 00:36:28,000 --> 00:36:31,000 Syntaxen i PHP är nästan densamma. 684 00:36:31,000 --> 00:36:33,000 Här är mitt program uppe. 685 00:36:33,000 --> 00:36:35,000 Notera återigen frånvarande är någon begreppet huvud. 686 00:36:35,000 --> 00:36:39,000 Jag börjar skriva kod, och det är vad som kommer att bli utföras av tolk. 687 00:36:39,000 --> 00:36:42,000 Jag skriver ut x är nu 2, förmodligen. 688 00:36:42,000 --> 00:36:44,000 Då jag hävdar cubing ... 689 00:36:44,000 --> 00:36:47,000 Då kallar jag kuben funktion och passerar i $ x 690 00:36:47,000 --> 00:36:50,000 och tilldela returvärdet till $ x. 691 00:36:50,000 --> 00:36:53,000 Då jag hävdar att det är kubik, och sedan säger jag detta, som förhoppningsvis 692 00:36:53,000 --> 00:36:55,000 kommer att säga x är nu 8. 693 00:36:55,000 --> 00:36:59,000 Syntaxen för funktionen i PHP är någonsin så något annorlunda. 694 00:36:59,000 --> 00:37:01,000 Återigen saknas är returtyp. 695 00:37:01,000 --> 00:37:05,000 Återigen saknas är returtyp och även saknas är vad annan typ? 696 00:37:05,000 --> 00:37:07,000 [Ohörbart elev svar] 697 00:37:07,000 --> 00:37:10,000 Okej, det är bra. Låt oss återkomma till det i en sekund. 698 00:37:10,000 --> 00:37:12,000 >> Vi har inte, till exempel, int här. 699 00:37:12,000 --> 00:37:15,000 Vi inte till exempel ha int här eftersom, återigen, i PHP 700 00:37:15,000 --> 00:37:18,000 du helt enkelt inte behöver och bör inte göra det, 701 00:37:18,000 --> 00:37:20,000 utan snarare finns det nya sökordet kallas funktionen. 702 00:37:20,000 --> 00:37:23,000 I PHP är det nästan lite tydligare eftersom när du vill ha en funktion 703 00:37:23,000 --> 00:37:26,000 du bokstavligen säger funktionen ger du det ett namn och sedan en kommaseparerad lista 704 00:37:26,000 --> 00:37:28,000 om någon av dess argument. 705 00:37:28,000 --> 00:37:32,000 Du behöver inte säga ogiltig eller nåt sånt, och då avkastningen är densamma, 706 00:37:32,000 --> 00:37:35,000 $ A * $ a * $ en. 707 00:37:35,000 --> 00:37:38,000 Vad som också saknas? Sammy påpekade detta här. 708 00:37:38,000 --> 00:37:43,000 På toppen av filen helt frånvarande i PHP också är en prototyp. 709 00:37:43,000 --> 00:37:45,000 Detta är också avsiktligt. 710 00:37:45,000 --> 00:37:48,000 Språk och tolkar som PHP är smartare än C någonsin var 711 00:37:48,000 --> 00:37:50,000 i kompilatorer som klang. 712 00:37:50,000 --> 00:37:53,000 >> Minns att klang, om du inte berätta det att kuben finns, 713 00:37:53,000 --> 00:37:56,000 om du inte berätta det som printf existerar som en prototyp 714 00:37:56,000 --> 00:38:00,000 eller med en # include, ja, var det kommer att skrika på dig och inte ens kompilera din kod. 715 00:38:00,000 --> 00:38:03,000 PHP och modernare språk är mycket smartare när det gäller detta. 716 00:38:03,000 --> 00:38:07,000 De kommer att ta på sig att läsa igenom alla din kod 717 00:38:07,000 --> 00:38:11,000 och sedan skrika på dig bara om den finner kub ingenstans. 718 00:38:11,000 --> 00:38:15,000 Det spelar ingen roll om kub är längst ner eller upp eller ens i någon separat fil. 719 00:38:15,000 --> 00:38:18,000 PHP och liknande språk är nu smart nog att se framåt 720 00:38:18,000 --> 00:38:26,000 på allt innan anse dig ha gjort ett misstag. 721 00:38:26,000 --> 00:38:28,000 Var lämnar det oss? 722 00:38:28,000 --> 00:38:32,000 >> Låt oss göra en sista exempel här i förhållanden, 723 00:38:32,000 --> 00:38:35,000 och om jag öppnar conditions2.php meddelande också 724 00:38:35,000 --> 00:38:37,000 Syntaxen här är nästan samma. 725 00:38:37,000 --> 00:38:40,000 Jag använder readline istället för GetString, men den linjen är densamma som tidigare, 726 00:38:40,000 --> 00:38:42,000 "Jag skulle vilja ett heltal tack." 727 00:38:42,000 --> 00:38:45,000 Jag har sedan en om tillstånd, ett annat om, och sedan en annan, 728 00:38:45,000 --> 00:38:48,000 men funktionellt detta program är också identiskt med vad vi gjorde veckor sedan, 729 00:38:48,000 --> 00:38:51,000 så om jag kör den här grejen, php i Villkor2, 730 00:38:51,000 --> 00:38:54,000 och jag ger det ett nummer som 23 - 731 00:38:54,000 --> 00:38:57,000 Jag plockade ett positivt tal. Om jag ger det -1 jag valde ett negativt tal. 732 00:38:57,000 --> 00:39:00,000 Om jag ger det 0 Jag plockade faktiskt 0. 733 00:39:00,000 --> 00:39:02,000 Så vem bryr sig om allt det här? 734 00:39:02,000 --> 00:39:06,000 Jo, en av de roliga typ av övningar här 735 00:39:06,000 --> 00:39:10,000 för mig åtminstone var att gå tillbaka och se hur snabbt jag kunde genomföra pset 5, 736 00:39:10,000 --> 00:39:12,000 den felstavningar pset. 737 00:39:12,000 --> 00:39:15,000 Minns att det var denna fil som heter speller.c, 738 00:39:15,000 --> 00:39:17,000 och det fanns en fil som heter dictionary.c. 739 00:39:17,000 --> 00:39:20,000 Vad jag gjorde var jag typ av använt några minuter och jag konverterade C-kod 740 00:39:20,000 --> 00:39:23,000 till PHP-kod, och vi kommer inte att spendera mycket tid på speller 741 00:39:23,000 --> 00:39:26,000 eftersom precis som i pset 5 du inte verkligen behöver 742 00:39:26,000 --> 00:39:29,000 tillbringar mycket tid på speller själv eftersom din uppmärksamhet var på ordlistan. 743 00:39:29,000 --> 00:39:32,000 >> Det räcker att säga att om du läser igenom speller, 744 00:39:32,000 --> 00:39:35,000 filen här, det är ganska mycket motsvarar C-kod 745 00:39:35,000 --> 00:39:37,000 vi gav dig för pset 5. 746 00:39:37,000 --> 00:39:39,000 Jag har precis lagt till några $ på platser. 747 00:39:39,000 --> 00:39:43,000 Jag har ändrat vissa funktionsnamn om de inte finns i PHP. 748 00:39:43,000 --> 00:39:45,000 Det finns en ytterligare sak här, preg_match, 749 00:39:45,000 --> 00:39:48,000 vilket är lite finare sätt att göra något, men vi kommer tillbaka till det så småningom. 750 00:39:48,000 --> 00:39:51,000 Men kort sagt, är speller nästan identiska, och om du tittar längst ner 751 00:39:51,000 --> 00:39:54,000 vad det slutligen spottar ut är detta här, 752 00:39:54,000 --> 00:39:57,000 ord felstavat, ord i ordbok, ord i texten. 753 00:39:57,000 --> 00:40:00,000 Okej, så vad är intressant nu är följande. 754 00:40:00,000 --> 00:40:05,000 På toppen av min fil jag behöver dictionary.php. 755 00:40:05,000 --> 00:40:09,000 Precis som C har omfattar # PHP har en speciell funktion som kallas kräver 756 00:40:09,000 --> 00:40:14,000 som ganska mycket gör samma sak, kräver en fil som heter dictionary.php. 757 00:40:14,000 --> 00:40:18,000 Hur kan jag gå om att genomföra pset 5? 758 00:40:18,000 --> 00:40:21,000 Låt mig gå vidare och öppna upp en fil här. 759 00:40:21,000 --> 00:40:24,000 Låt mig ta en liten referens här. 760 00:40:24,000 --> 00:40:29,000 Och låt mig skapa en ny fil och börja ringa detta dictionary.php. 761 00:40:29,000 --> 00:40:31,000 Låt mig uttrycka det i en annan mapp så att vi kan göra detta live. 762 00:40:31,000 --> 00:40:33,000 Och nu ska jag zooma in 763 00:40:33,000 --> 00:40:37,000 Jag ska börja min PHP-fil med öppen konsol php stängd fäste. 764 00:40:37,000 --> 00:40:40,000 Och sedan här fanns det några funktioner jag behövs för att genomföra för pset 5, 765 00:40:40,000 --> 00:40:42,000 så låt mig börja genomföra några av dem, 766 00:40:42,000 --> 00:40:47,000 så funktionskontroll, som var tvungen att ta ett ord i som ett argument. 767 00:40:47,000 --> 00:40:49,000 Vi ska göra det och komma tillbaka till det om en stund. 768 00:40:49,000 --> 00:40:53,000 >> Det var funktion belastning, som tog i vad som argument? 769 00:40:53,000 --> 00:40:56,000 Ordbok, så fil som jag egentligen ville ladda. 770 00:40:56,000 --> 00:41:00,000 Det var funktion storlek, som inte tar några argument 771 00:41:00,000 --> 00:41:04,000 och det var funktions-vad var det andra? 772 00:41:04,000 --> 00:41:06,000 Lasta, som inte tar några argument. 773 00:41:06,000 --> 00:41:10,000 Dessa är de 4 funktioner som jag skulle behöva nu genomföra i PHP, 774 00:41:10,000 --> 00:41:13,000 och vad jag ska göra är att gå vidare och göra det. 775 00:41:13,000 --> 00:41:16,000 Många av er använde en hash tabell i pset 5, 776 00:41:16,000 --> 00:41:21,000 så låt mig gå vidare och skapa en hashtabell i PHP. 777 00:41:21,000 --> 00:41:23,000 Klar. 778 00:41:23,000 --> 00:41:25,000 Det ger mig en hash-tabell. Tja, varför? 779 00:41:25,000 --> 00:41:30,000 En är den rörliga kallas $ bord, bara för att trolla fram tanken på en hash-tabell. 780 00:41:30,000 --> 00:41:34,000 Hakparenteserna, men minns, representerar vad? 781 00:41:34,000 --> 00:41:37,000 En array, men i PHP arrayer behöver inte vara numeriskt indexeras. 782 00:41:37,000 --> 00:41:41,000 De kan också vara associativa arrayer, 783 00:41:41,000 --> 00:41:44,000 vilket innebär att du kan ha godtyckliga nycklar och värden. 784 00:41:44,000 --> 00:41:49,000 >> Ungefär som i pset 5, de av er som gjorde hash table implementeringar 785 00:41:49,000 --> 00:41:53,000 du satt förmodligen ordet och sedan in den i en kedja av länkade listor, 786 00:41:53,000 --> 00:41:56,000 eller du lagrat värdet true någonstans eller något om detta. 787 00:41:56,000 --> 00:41:59,000 Du minns något sätt att ordet var där. 788 00:41:59,000 --> 00:42:01,000 För nu, det är kommer att bli min hash-tabell, 789 00:42:01,000 --> 00:42:06,000 och så nu att gå om genomförandet av kontrollfunktion 790 00:42:06,000 --> 00:42:09,000 Jag behöver bara titta in i den hashtabell 791 00:42:09,000 --> 00:42:11,000 och se om ett ord finns där. 792 00:42:11,000 --> 00:42:15,000 Vad jag ska göra är att jag ska säga om- 793 00:42:15,000 --> 00:42:20,000 låt oss säga isset, vilket är en PHP funktion som bokstavligen bara betyder är nyckeln set, 794 00:42:20,000 --> 00:42:24,000 så isset ($ bord [$ ord], 795 00:42:24,000 --> 00:42:29,000 och i så fall return true. 796 00:42:29,000 --> 00:42:32,000 Det var allt. Det är pset 5 i PHP. 797 00:42:32,000 --> 00:42:34,000 Tja, i rättvisans namn, okej. 798 00:42:34,000 --> 00:42:37,000 Annars returnera false, så det är inte där. 799 00:42:37,000 --> 00:42:39,000 Vad som verkligen händer här? 800 00:42:39,000 --> 00:42:42,000 Tja, om tabell-eller hashtabell här mer allmänt 801 00:42:42,000 --> 00:42:46,000 är en associativ array som innebär att du kan indexera i den 802 00:42:46,000 --> 00:42:50,000 med ett ord som "ord", och du måste komma tillbaka lite värde. 803 00:42:50,000 --> 00:42:52,000 >> Vi är typ av att få ett steg före oss. 804 00:42:52,000 --> 00:42:56,000 Det skulle vara ganska trevligt om vi faktiskt läses filen först, 805 00:42:56,000 --> 00:42:58,000 så belastningen är inte riktigt så enkelt, men låt mig gå vidare och piska upp 806 00:42:58,000 --> 00:43:00,000  en riktigt snabb implementering av belastning. 807 00:43:00,000 --> 00:43:07,000 Låt mig gå vidare och säga ord får filer ordlistan. 808 00:43:07,000 --> 00:43:10,000 Filen funktionen i PHP öppnar en fil 809 00:43:10,000 --> 00:43:12,000 och återgår till dig en matris med alla orden i den filen, 810 00:43:12,000 --> 00:43:14,000 bara händer dem till dig. 811 00:43:14,000 --> 00:43:16,000 Det var en stor smärta också, eller hur? 812 00:43:16,000 --> 00:43:21,000 Nu foreach, detta är vår nya konstruktion, foreach ($ ord som $ ordet). 813 00:43:21,000 --> 00:43:25,000 Denna slinga kommer att börja iteration över array ord 814 00:43:25,000 --> 00:43:30,000 och tilldela $ ordet variabeln varje ord i filen 815 00:43:30,000 --> 00:43:32,000 från den första till den andra till den tredje till den fjärde hela vägen 816 00:43:32,000 --> 00:43:35,000 så jag behöver inte göra det irriterande [i] notation och liknande. 817 00:43:35,000 --> 00:43:38,000 Och vad jag bara ska göra för varje av dessa ord 818 00:43:38,000 --> 00:43:43,000 är lagra det i mitt bord genom indexering i tabellen 819 00:43:43,000 --> 00:43:47,000 och sedan göra sant eftersom att minnas 820 00:43:47,000 --> 00:43:50,000 att ett ord är i min ordbok allt jag måste verkligen göra 821 00:43:50,000 --> 00:43:55,000 är vända typ av lite och säga detta ord i min hash-tabell är där, sant. 822 00:43:55,000 --> 00:43:58,000 Och om det inte finns där, jag har inte uttryckligen sätta falska, 823 00:43:58,000 --> 00:44:01,000 annars skulle jag behöva sätta false för alla möjliga ord i universum. 824 00:44:01,000 --> 00:44:05,000 >> Det räcker för mig bara att ställa in ett indexvärde 825 00:44:05,000 --> 00:44:09,000 till true om ett ord är faktiskt i mitt hashtabell. 826 00:44:09,000 --> 00:44:12,000 Nu är jag skära ett par hörn här som jag viftar mina händer på för nu, 827 00:44:12,000 --> 00:44:15,000 men nu belastningen funktionen är klar. 828 00:44:15,000 --> 00:44:18,000 Jag laddar alla ord från filen till en array. 829 00:44:18,000 --> 00:44:21,000 Jag iterera över den rad och för varje ord i arrayen 830 00:44:21,000 --> 00:44:24,000 Jag ansluter den till min hashtabell med 1 rad kod. 831 00:44:24,000 --> 00:44:26,000 Det är kul. Du vet hur vi kan genomföra storlek nu? 832 00:44:26,000 --> 00:44:28,000 Tja, är storleken alltid ganska lätt, i rättvisans namn. 833 00:44:28,000 --> 00:44:32,000 Här kan vi bara inte returnera räkna tabellen. 834 00:44:32,000 --> 00:44:34,000 Det är ganska enkelt också räkna antalet saker i tabellen. 835 00:44:34,000 --> 00:44:36,000 Det är faktiskt ganska inte den mest effektiva. 836 00:44:36,000 --> 00:44:39,000 Jag borde nog ha en variabel som heter storlek så att vi kan göra det 837 00:44:39,000 --> 00:44:41,000 i konstant tid, men det är ganska lätt. 838 00:44:41,000 --> 00:44:45,000 Åh, och sedan lossa, om vi verkligen vill vara anal här 839 00:44:45,000 --> 00:44:47,000 vi kan säga att det är hur du lasta något. 840 00:44:47,000 --> 00:44:49,000 Du ställer bara variabeln lika med en tom array, 841 00:44:49,000 --> 00:44:51,000 och det tar bort allt som var där. 842 00:44:51,000 --> 00:44:53,000 Du behöver inte ringa gratis. 843 00:44:53,000 --> 00:44:56,000 >> Återigen har jag klippa några hörn, och jag ber om ursäkt för tilldelning problembild 5 844 00:44:56,000 --> 00:45:00,000 kanske i C, men om vi nu gå vidare och köra, 845 00:45:00,000 --> 00:45:02,000 Jag ska faktiskt köra den version som jag skrev i förväg 846 00:45:02,000 --> 00:45:05,000 bara så att jag inte gör några syntaktiska fel som helst. 847 00:45:05,000 --> 00:45:08,000 Låt mig gå vidare och köra stavningskontroll. Användningen är densamma. 848 00:45:08,000 --> 00:45:12,000 Här är en ordlista fil som bara innehåller ordet foo. 849 00:45:12,000 --> 00:45:15,000 Här är en textfil som bara innehåller foo bar. 850 00:45:15,000 --> 00:45:19,000 Låt oss stavningskontroll detta, så speller, med denna ordbok filen på denna textfil. 851 00:45:19,000 --> 00:45:21,000 Det finns en felstavat ord, bar, och voila. 852 00:45:21,000 --> 00:45:23,000 Klar med pset 5. 853 00:45:23,000 --> 00:45:30,000 Låt oss ta en 5-minuters paus här, och vi ska komma tillbaka och mer på PHP. 854 00:45:30,000 --> 00:45:32,000 Okej, vi är tillbaka. 855 00:45:32,000 --> 00:45:34,000 Låt oss göra-hata mig en stund. 856 00:45:34,000 --> 00:45:37,000 Låt oss nu verkligen se om detta inte var en positiv 857 00:45:37,000 --> 00:45:39,000 faktiskt genomföra denna sak i PHP. 858 00:45:39,000 --> 00:45:43,000 Visst, det tog 45 sekunder att genomföra. 859 00:45:43,000 --> 00:45:45,000 >> Men låt oss gå vidare nu och köra saker. 860 00:45:45,000 --> 00:45:49,000 Låt mig gå vidare och köra en C-versionen 861 00:45:49,000 --> 00:45:52,000 av speller, och vi kommer att köra den på en av de största filerna, 862 00:45:52,000 --> 00:45:54,000 vilket är King James Bible. 863 00:45:54,000 --> 00:45:57,000 Och det är här i-låt oss gå in i vår C-mappen 864 00:45:57,000 --> 00:46:01,000 speller på King James den 5. 865 00:46:01,000 --> 00:46:03,000 Många felstavade ord. 866 00:46:03,000 --> 00:46:06,000 Okej, så det är utgången du förmodligen fått även om tiderna är lite annorlunda, 867 00:46:06,000 --> 00:46:09,000 om du fick allt fungerar, och så tiden till totalt stavningskontroll 868 00:46:09,000 --> 00:46:13,000 King James Bible var 0,38 sekunder, så ganska bra med att genomförandet. 869 00:46:13,000 --> 00:46:16,000 Låt mig nu gå in i PHP-versionen, som vi just skrev. 870 00:46:16,000 --> 00:46:18,000 Låt mig köra speller på King James. 871 00:46:18,000 --> 00:46:21,000 Hoppsan, ignorera detta fel. Jag är i fel katalog. 872 00:46:21,000 --> 00:46:24,000 Speller på King James den 5. 873 00:46:46,000 --> 00:46:48,000 Nästan klar. 874 00:46:48,000 --> 00:46:51,000 >> Okej, kommer skarpsinniga iakttagare inse att var mer än 3 sekunder där. 875 00:46:51,000 --> 00:46:54,000 Det är den sanna körtid. 876 00:46:54,000 --> 00:46:58,000 Det visar sig att det tar tid att spotta mycket text ut 877 00:46:58,000 --> 00:47:00,000 på grund av buffring frågor, men lång historia kort, 878 00:47:00,000 --> 00:47:04,000 Det var 3,15 sekunder maskintid, CPU-tid, 879 00:47:04,000 --> 00:47:07,000 kontra vad var det för en stund sedan? 880 00:47:07,000 --> 00:47:09,000 Som 0,3. 881 00:47:09,000 --> 00:47:11,000 Jag menar, det är en storleksordning lägre, så där är det 882 00:47:11,000 --> 00:47:14,000 löjligt avmattning kommer från? 883 00:47:14,000 --> 00:47:17,000 Tja, har som varit fallet med de flesta någon design beslut vi har gjort 884 00:47:17,000 --> 00:47:21,000 i klassen under de senaste 9 veckor finns det nästan alltid här avvägning. 885 00:47:21,000 --> 00:47:24,000 Ibland mellan bara utrymme, ibland mellan tid och rum, 886 00:47:24,000 --> 00:47:27,000 utrymme, tid och utvecklingsarbete, och faktiskt här, även om 887 00:47:27,000 --> 00:47:31,000 vi sparade en enorm mängd tid, kanske potentiellt 10-20-30 timmar 888 00:47:31,000 --> 00:47:34,000 av utvecklingstiden genomföra stavningskontrollen 889 00:47:34,000 --> 00:47:36,000 genom att piska upp på bara 45 sekunder med detta språk 890 00:47:36,000 --> 00:47:40,000 det pris vi betalar är att det är en storleksordning lägre som en följd, 891 00:47:40,000 --> 00:47:43,000 och detta är i allmänhet fallet med de flesta tolkat alla språk, 892 00:47:43,000 --> 00:47:46,000 PHP, Python, Ruby, Pearl eller andra varigenom 893 00:47:46,000 --> 00:47:49,000 om du ska köra det genom tolk och har det läst din kod 894 00:47:49,000 --> 00:47:52,000 rad för rad, uppifrån och ned, vänster till höger, 895 00:47:52,000 --> 00:47:55,000 att mellanhand kommer att ta lite tid för sig själv, 896 00:47:55,000 --> 00:47:59,000 och vad du känner här i 3 sekunder i motsats till 0,3 sekunder 897 00:47:59,000 --> 00:48:02,000 är det faktum att det är denna mellanhand som måste bokstavligen tolka vår kod 898 00:48:02,000 --> 00:48:05,000 rad för rad, och Gud förbjude om du är inne i en slinga 899 00:48:05,000 --> 00:48:08,000 med en enorm fil som innehåller hundratusentals ord. 900 00:48:08,000 --> 00:48:11,000 >> Det överliggande kommer att lägga upp och lägga upp och lägga upp och lägga upp. 901 00:48:11,000 --> 00:48:16,000 För ett verktyg som detta är det förmodligen inte den bästa språket att använda för att genomföra 902 00:48:16,000 --> 00:48:20,000 en stavningskontroll om omedelbarhet är av intresse för dina användare och till dig. 903 00:48:20,000 --> 00:48:23,000 Men lyxen har vi i ett ögonblick är om du 904 00:48:23,000 --> 00:48:27,000 använda ett språk som PHP eller mycket tolkade språk 905 00:48:27,000 --> 00:48:30,000 i samband med webben, för den delen, har du nytta 906 00:48:30,000 --> 00:48:34,000 att Internet är mycket långsammare än de flesta datorer. 907 00:48:34,000 --> 00:48:38,000 Du har en GHz CPU i datorn, 2 GHz, kanske ännu mer i dessa dagar. 908 00:48:38,000 --> 00:48:41,000 Men verkligheten är på internet finns det en stor mängd latens 909 00:48:41,000 --> 00:48:45,000 varigenom en webbläsare för att prata med en server, även om vi såg förra veckan 910 00:48:45,000 --> 00:48:47,000 att det är ganska snabbt, en halv millisekund eller så, 911 00:48:47,000 --> 00:48:51,000 som ger alltför upp, och om du hämtar saker som en bild 912 00:48:51,000 --> 00:48:54,000 eller Facebook foto eller få snabbmeddelanden via Facebook prat, 913 00:48:54,000 --> 00:48:57,000 Gchat eller liknande, alla dessa round-trip times 914 00:48:57,000 --> 00:49:00,000 mellan webbläsaren och servern börjar att lägga upp, 915 00:49:00,000 --> 00:49:03,000 vilket gör din val av språk i många fall 916 00:49:03,000 --> 00:49:07,000 inte så relevant, så du är bra med en något långsammare språk 917 00:49:07,000 --> 00:49:10,000 som PHP eller Python eller Ruby 918 00:49:10,000 --> 00:49:13,000 men där det finns stora upsides till dig och dina kollegor 919 00:49:13,000 --> 00:49:17,000 och dina vänner att du kan genomföra saker så, så mycket snabbare. 920 00:49:17,000 --> 00:49:20,000 Och dessutom har du mycket mindre risk för vissa säkerhetsbrister. 921 00:49:20,000 --> 00:49:22,000 Det finns inga pekare i PHP. 922 00:49:22,000 --> 00:49:25,000 Det finns inga segment fel som du enkelt kan inducera 923 00:49:25,000 --> 00:49:27,000 på samma sätt som du kan i C. 924 00:49:27,000 --> 00:49:29,000 Med C du är super nära till hårdvaran. 925 00:49:29,000 --> 00:49:33,000 Med PHP och liknande språk du typ av högre nivå, så att säga, 926 00:49:33,000 --> 00:49:37,000 med en hel del försvar mellan dig och vad som faktiskt händer 927 00:49:37,000 --> 00:49:39,000 inuti maskinen, och det är bara en avvägning. 928 00:49:39,000 --> 00:49:42,000 >> Vi har kommit till den punkt att ha dessa mer moderna, högnivåspråk 929 00:49:42,000 --> 00:49:47,000 som PHP grund av lärdomarna i språk som PHP i C. 930 00:49:47,000 --> 00:49:50,000 Men om du inte förstår vad som har pågått under huven hela tiden 931 00:49:50,000 --> 00:49:53,000 du absolut inte kan fatta rätt designbeslut, 932 00:49:53,000 --> 00:49:56,000 och säkerligen när det gäller att arbeta på en plats som Facebook eller Google 933 00:49:56,000 --> 00:49:59,000 eller någon av dessa platser som alltmer spelar med stora datamängder 934 00:49:59,000 --> 00:50:01,000 även om du går tillbaka och gör premed och arbetar med några MD 935 00:50:01,000 --> 00:50:04,000 på några stora datamängd där patienter och läkare 936 00:50:04,000 --> 00:50:08,000 och liknande att använda rätt verktyg är oerhört övertygande 937 00:50:08,000 --> 00:50:11,000 annars din analys av vissa datamängd kan ta några sekunder, 938 00:50:11,000 --> 00:50:14,000 eller det kan bokstavligen ta timmar. 939 00:50:14,000 --> 00:50:17,000 Detta är bara ett exempel, inte att hindra dig hur mycket mer arbete 940 00:50:17,000 --> 00:50:21,000 det var i C men att hjälpa dig att uppskatta att när du genomför något i C 941 00:50:21,000 --> 00:50:24,000 du förstår verkligen, eller i teorin, förstår 942 00:50:24,000 --> 00:50:28,000 hur allt är eller borde arbeta, och du har nästan full kontroll 943 00:50:28,000 --> 00:50:31,000 över vad som händer under huven och med dessa högre nivå språk 944 00:50:31,000 --> 00:50:34,000 du måste avstå mer kontroll till de människor som uppfann dem 945 00:50:34,000 --> 00:50:37,000 och är föremål mer av sin konstruktion beslut än din. 946 00:50:37,000 --> 00:50:41,000 Men om vi tar för givet att resultatet 947 00:50:41,000 --> 00:50:44,000 är inte lika viktigt på webben på grund av dessa andra frågor, 948 00:50:44,000 --> 00:50:47,000 bara nätverkshastigheter är lite långsammare än CPU hastigheter ändå, 949 00:50:47,000 --> 00:50:50,000 så vi kan sortera om råd att använda en något långsammare språk 950 00:50:50,000 --> 00:50:55,000 om upsides är vi kan utveckla saker 10 gånger snabbare eller ännu mer. 951 00:50:55,000 --> 00:50:57,000 >> Låt oss se hur vi kan börja använda det. 952 00:50:57,000 --> 00:51:00,000 Låt mig gå in i en mapp 953 00:51:00,000 --> 00:51:03,000 bland dagens exempel kallas frosh.ims, 954 00:51:03,000 --> 00:51:06,000 och detta var faktiskt personligen motiverad av det faktum att den allra första 955 00:51:06,000 --> 00:51:10,000 Jag skrev för webben år sedan efter att ha tagit CS50 och CS51 956 00:51:10,000 --> 00:51:14,000 var en webbplats för Frosh IMS-programmet, förstaårselev intramural sport, 957 00:51:14,000 --> 00:51:16,000 som vid tidpunkten var tillräckligt år sedan att det vid tidpunkten 958 00:51:16,000 --> 00:51:19,000 fanns ingen webbplats för programmet, även om det fanns en webbsida, 959 00:51:19,000 --> 00:51:22,000 och istället var det en proctor i Wigglesworth där om du ville 960 00:51:22,000 --> 00:51:26,000 att registrera sig för volleyboll eller fotboll eller vad du vill fylla i ett papper. 961 00:51:26,000 --> 00:51:28,000 Du skulle sedan gå över gården. 962 00:51:28,000 --> 00:51:31,000 Du skulle då knacka på deras dörr och skjut in deras dörr eller hand till proctor 963 00:51:31,000 --> 00:51:34,000 ett papper med ditt namn på det, om du vill vara en lagkapten, 964 00:51:34,000 --> 00:51:37,000 vilken sport du ville göra, och vad sovsal du var i. 965 00:51:37,000 --> 00:51:39,000 Det var typ av en gammal skola sätt att göra saker, och detta var ett utmärkt 966 00:51:39,000 --> 00:51:41,000 möjlighet att automatisera mycket av denna process. 967 00:51:41,000 --> 00:51:43,000 Du går bara till webbplatsen. Du skriver något i. 968 00:51:43,000 --> 00:51:46,000 Du får en e-postbekräftelse och bom, du är klar. 969 00:51:46,000 --> 00:51:49,000 >> Detta var det första jag gjorde, om än på ett språk som heter Pearl, 970 00:51:49,000 --> 00:51:52,000 men det är relativt lätt att göra i PHP, och detta är typ av representativ 971 00:51:52,000 --> 00:51:55,000 av de problem man kan börja lösa när du kan uttrycka dig själv 972 00:51:55,000 --> 00:51:58,000 programmatiskt och behöver inte förlita sig på saker som Googles webbplatser 973 00:51:58,000 --> 00:52:01,000 eller Excel eller verktyg som delas till dig. 974 00:52:01,000 --> 00:52:03,000 Ni har nu möjlighet att göra saker som denna. 975 00:52:03,000 --> 00:52:06,000 Detta är en super ful version av ett formulär, 976 00:52:06,000 --> 00:52:09,000 men låt oss använda det bara i början av samtalet där det är 977 00:52:09,000 --> 00:52:12,000 ungefär vad den form som såg ut som år sedan för oss 978 00:52:12,000 --> 00:52:14,000 för att människor på webben för att registrera dig för Frosh chattar. 979 00:52:14,000 --> 00:52:18,000 Vi bad om ett namn, en kryssruta för om de ville vara kapten, 980 00:52:18,000 --> 00:52:21,000 manlig eller kvinnlig, och sedan vad sovsal de var, 981 00:52:21,000 --> 00:52:23,000 och sedan skulle de skicka det här formuläret. 982 00:52:23,000 --> 00:52:27,000 Låt oss först titta under huven på HTML som representerar denna webbsida. 983 00:52:27,000 --> 00:52:31,000 Låt mig gå in froshims0, 984 00:52:31,000 --> 00:52:35,000 och som en reservera pset 7 tar jag för givet 985 00:52:35,000 --> 00:52:37,000 kataloger och mappar som jag lägger saker i. 986 00:52:37,000 --> 00:52:40,000 Vi kommer att gå igenom exakt var saker måste gå i apparaten, 987 00:52:40,000 --> 00:52:43,000 vilket mod kommandon du måste köra, så bry dig inte om alla 988 00:52:43,000 --> 00:52:46,000 dumma detaljer synkronisering i från get-gå här. 989 00:52:46,000 --> 00:52:49,000 >> Okej, här är froshims0.php. 990 00:52:49,000 --> 00:52:52,000 Låt mig scrolla ner, och vad som är nyfiken här, 991 00:52:52,000 --> 00:52:56,000 Detta är en PHP-fil, men vad som finns inuti det, klart? 992 00:52:56,000 --> 00:52:59,000 Det är en hel del HTML, och faktiskt, PHP: s ursprung 993 00:52:59,000 --> 00:53:02,000 verkligen var för att vara en webb-centrerad språk. 994 00:53:02,000 --> 00:53:04,000 Nyss vi använde det för att genomföra öl exempel 995 00:53:04,000 --> 00:53:07,000 villkor exempel hej exempel, och det är bra. 996 00:53:07,000 --> 00:53:11,000 Du kan använda PHP som ett skriptspråk 997 00:53:11,000 --> 00:53:15,000 där ett skript är egentligen bara den nomenklatur som ges till en snabb och smutsig program 998 00:53:15,000 --> 00:53:19,000 eller något som du skriver i en manus eller mer brukar tolkas en språk. 999 00:53:19,000 --> 00:53:22,000 PHP är super bra för det eftersom du har sett hur snabbt 1000 00:53:22,000 --> 00:53:24,000 relativt vi kan piska upp program i PHP. 1001 00:53:24,000 --> 00:53:27,000 Men det var verkligen avsedd att användas för webben, 1002 00:53:27,000 --> 00:53:31,000 och utformad för webben i den meningen att märka upp här på toppen av filen 1003 00:53:31,000 --> 00:53:34,000 Jag börjar med 00:53:38,000 Sen har jag ett gäng värdelösa kommentarer beviljade, men då jag stänger PHP-läge. 1005 00:53:38,000 --> 00:53:41,000 Men sedan jag släppa in HTML-läge. 1006 00:53:41,000 --> 00:53:45,000 >> Vad är intressant om PHP är även om filen slutar. Php 1007 00:53:45,000 --> 00:53:48,000 det är allmänt tänkt att tillsammans blandat med HTML, 1008 00:53:48,000 --> 00:53:50,000 några PHP-kod, vissa HTML. 1009 00:53:50,000 --> 00:53:53,000 Och vi får se så småningom att vi kan börja retas dem isär 1010 00:53:53,000 --> 00:53:56,000 och hålla vår HTML separat från vår PHP helt och hållet, 1011 00:53:56,000 --> 00:53:59,000 men ursprunget till PHP var verkligen ge dig denna flexibilitet, 1012 00:53:59,000 --> 00:54:02,000 att om du vill ha lite HTML bara skriva det, och det kommer att vara 1013 00:54:02,000 --> 00:54:04,000 spotta ut identiskt till webbläsaren. 1014 00:54:04,000 --> 00:54:07,000 Men om du behöver lite programmeringsteknik, 1015 00:54:07,000 --> 00:54:12,000 viss programkod, kan du också lagt det i exakt samma fil, som vi snart se. 1016 00:54:12,000 --> 00:54:14,000 Här är min HTML. 1017 00:54:14,000 --> 00:54:16,000 Jag har en titel för Frosh chattar. 1018 00:54:16,000 --> 00:54:20,000 Jag har en body-taggen som har fått en viss CSS på den för att centrera allt i mitten, 1019 00:54:20,000 --> 00:54:23,000 och sedan ner här har jag en form som tydligen kommer att läggas fram 1020 00:54:23,000 --> 00:54:27,000 till en ny fil som heter register0.php, så vi får se det i ett ögonblick. 1021 00:54:27,000 --> 00:54:31,000 Det använder en metod som kallas inlägg, som vi ska återkomma till också. 1022 00:54:31,000 --> 00:54:34,000 Då jag har någon form ingångar, en sk namn, vars typ är text, 1023 00:54:34,000 --> 00:54:37,000 en vars namn är kapten, vars typ är kryssrutan 1024 00:54:37,000 --> 00:54:40,000 och detta har vi inte sett det förut, men det gör exakt vad den säger. 1025 00:54:40,000 --> 00:54:42,000 Du kommer att få en kryssruta istället för en textruta. 1026 00:54:42,000 --> 00:54:46,000 Här nere har du en alternativknapp som är en av de cirkulära knappar 1027 00:54:46,000 --> 00:54:48,000 att du kan antingen välja detta en eller att en. 1028 00:54:48,000 --> 00:54:52,000 >> Notera att det är avsiktligt att jag gav båda alternativknappar namn kön. 1029 00:54:52,000 --> 00:54:55,000 Det är hur du får ömsesidig uteslutning där du måste klicka 1030 00:54:55,000 --> 00:54:58,000 antingen detta en eller att man, och genom att klicka på andra 1031 00:54:58,000 --> 00:55:01,000 Det unchecks den andra, så du måste ge dem samma namn 1032 00:55:01,000 --> 00:55:03,000 om du vill att de ska vara ömsesidigt uteslutande så. 1033 00:55:03,000 --> 00:55:07,000 Och sedan för sovsal, jag tror inte vi har sett det ännu, men det är en utvald meny, en rullgardinsmeny. 1034 00:55:07,000 --> 00:55:09,000 Taggen för det är väljer. 1035 00:55:09,000 --> 00:55:11,000 Du ger då rullgardinsmenyn ett namn, 1036 00:55:11,000 --> 00:55:13,000 och då har du en massa av dessa alternativ. 1037 00:55:13,000 --> 00:55:16,000 Den första, bara för estetik, är en tom sträng. 1038 00:55:16,000 --> 00:55:20,000 Jag ville bara drop down vara tomt som standard, 1039 00:55:20,000 --> 00:55:22,000 och sedan finns det Apley, Canaday, Grays, och så vidare. 1040 00:55:22,000 --> 00:55:24,000 Och märker dikotomin här. 1041 00:55:24,000 --> 00:55:27,000 Alternativet i drop har ner ett värde, 1042 00:55:27,000 --> 00:55:30,000 men då har en human-vänlig namn, som i detta exempel 1043 00:55:30,000 --> 00:55:33,000 är identisk, men om vi verkligen ville vara anal vi kunde ha 1044 00:55:33,000 --> 00:55:36,000 värdet av denna drop down bara vara den korta versionen, 1045 00:55:36,000 --> 00:55:39,000 Grått, men vi kan verkligen säga Grays Hall att människan faktiskt ser, 1046 00:55:39,000 --> 00:55:43,000 men det är inte alla som intressant, så jag bara fortsatte det enkelt och gjorde dem identiska. 1047 00:55:43,000 --> 00:55:46,000 Sedan ner på botten har vi en submit-knapp 1048 00:55:46,000 --> 00:55:49,000 som vi har sett tidigare, men märker jag gav bara det ett annat ord. 1049 00:55:49,000 --> 00:55:53,000 Istället för CS50 sökning gav jag etiketten "Registrera". 1050 00:55:53,000 --> 00:55:56,000 >> Slutresultatet är här webbsidan här, och igen, 1051 00:55:56,000 --> 00:56:00,000 varifrån kommer denna bli fram? 1052 00:56:00,000 --> 00:56:04,000 Det blir föremål för en viss fil, värdet av åtgärden attribut, 1053 00:56:04,000 --> 00:56:07,000 som var register0.php. 1054 00:56:07,000 --> 00:56:09,000 Låt oss se vad som egentligen händer här. 1055 00:56:09,000 --> 00:56:13,000 Låt mig gå vidare och fyll i formuläret, säger David, 1056 00:56:13,000 --> 00:56:16,000 manlig, Matthews, och sedan ska jag säga register. 1057 00:56:16,000 --> 00:56:18,000 Låt mig zooma ut och klicka på registrera. 1058 00:56:18,000 --> 00:56:22,000 Okej, så typ av värdelös, men låt oss se vad som verkligen händer. 1059 00:56:22,000 --> 00:56:26,000 Observera att webbadressen har ändrats till att vara register0.php. 1060 00:56:26,000 --> 00:56:34,000 Vad är märkligt frånvarande från URL, men även om vi bara fram ett formulär? 1061 00:56:34,000 --> 00:56:37,000 [Ohörbart elev svar] 1062 00:56:37,000 --> 00:56:39,000 Okej, det är bara Chrome vara användarvänlig dessa dagar. 1063 00:56:39,000 --> 00:56:42,000 Det är faktiskt där. De gömmer det bara för att spara utrymme. 1064 00:56:42,000 --> 00:56:44,000 Men bra tanke, god tanke. 1065 00:56:44,000 --> 00:56:46,000 Mot den andra änden av URL, men vad är det som saknas? Ja. 1066 00:56:46,000 --> 00:56:48,000 [Student] frågesträngen. 1067 00:56:48,000 --> 00:56:51,000 Den frågesträngen, så minns från våra enkel Google-sökning exempel. 1068 00:56:51,000 --> 00:56:54,000 Så fort jag klickar på knappen Skicka URL 1069 00:56:54,000 --> 00:57:00,000 tog mig till Google, men då var det? q = datavetenskap eller vad jag hade skrivit in 1070 00:57:00,000 --> 00:57:04,000 Det beror på att vi använt metoden GET med sökandet exempel. 1071 00:57:04,000 --> 00:57:06,000 >> Denna gång vi använder vilken metod istället? 1072 00:57:06,000 --> 00:57:10,000 Inlägg och en av de omedelbara skillnaderna 1073 00:57:10,000 --> 00:57:14,000 mellan att få och skicka är att tjänsten inte sätta användarens input i webbadressen. 1074 00:57:14,000 --> 00:57:16,000 Den döljer det. Den skickar fortfarande. 1075 00:57:16,000 --> 00:57:19,000 I själva verket vad vi ser i webbläsaren här, som vi kommer att avslöja i ett ögonblick 1076 00:57:19,000 --> 00:57:22,000 genom att titta på register0 är jag bara ser innehållet 1077 00:57:22,000 --> 00:57:25,000 av matrisen som lämnades in från webbläsaren till servern. 1078 00:57:25,000 --> 00:57:29,000 Men URL inte har en?, Inte har några sökord 1079 00:57:29,000 --> 00:57:31,000 eller värden i det, och varför är det? 1080 00:57:31,000 --> 00:57:35,000 Tja, kan inlägget du fortfarande skicka data från formuläret till en server, 1081 00:57:35,000 --> 00:57:38,000 men det inte lägga den i URL, så vilken typ av information är post 1082 00:57:38,000 --> 00:57:41,000 särskilt lämpligt för kanske när du ber användaren att 1083 00:57:41,000 --> 00:57:44,000 skriva in indata till en form? 1084 00:57:44,000 --> 00:57:48,000 Något som ett lösenord, något som vad? 1085 00:57:48,000 --> 00:57:50,000 Kreditkortsnummer. 1086 00:57:50,000 --> 00:57:53,000 Allt som är milt känslig du förmodligen inte vill hamna i URL 1087 00:57:53,000 --> 00:57:56,000 om så bara för att det innebär att din rumskompis eller familjemedlem kan bara troll genom 1088 00:57:56,000 --> 00:57:59,000 din Internet historia och sedan bokstavligen se dina lösenord, 1089 00:57:59,000 --> 00:58:02,000 bokstavligen se dina kreditkortsnummer eftersom de flesta webbläsare 1090 00:58:02,000 --> 00:58:05,000 minns i historien vad webbadresser som du har varit på, 1091 00:58:05,000 --> 00:58:09,000 så om bara för att det skulle vara en dålig idé. 1092 00:58:09,000 --> 00:58:11,000 Med post hudar som detalj från användaren. 1093 00:58:11,000 --> 00:58:14,000 >> Dessutom, hur du laddar upp ett foto till Facebook? 1094 00:58:14,000 --> 00:58:17,000 Tja, de enda 2 mekanismerna du verkligen kan använda, 1095 00:58:17,000 --> 00:58:21,000 även om det finns några andra mer svårbegripliga sådana, är få och skicka. 1096 00:58:21,000 --> 00:58:26,000 Hur laddar du kanske ett foto via en webbadress? 1097 00:58:26,000 --> 00:58:28,000 Du kan faktiskt göra det. 1098 00:58:28,000 --> 00:58:30,000 Du kan ta en JPEG-eller bitmapp eller GIF och du kan företräda den i hexadecimalt 1099 00:58:30,000 --> 00:58:32,000 eller något som kallas bas 64. 1100 00:58:32,000 --> 00:58:35,000 Istället för basen 16 du använder bas 64, som i huvudsak ser ut 1101 00:58:35,000 --> 00:58:38,000 ASCII-tecken, och du kan faktiskt ladda upp ett foto via en webbadress 1102 00:58:38,000 --> 00:58:41,000 efter ett frågetecken, men det är i allmänhet storleksbegränsningar. 1103 00:58:41,000 --> 00:58:44,000 De flesta webbläsare tvingar webbadresser som högst 1.000 tecken, 1104 00:58:44,000 --> 00:58:47,000 kanske 2.000 tecken eller liknande, så att du inte kan ladda upp 1105 00:58:47,000 --> 00:58:50,000 en 10 MB Facebook foto. 1106 00:58:50,000 --> 00:58:54,000 För att du använder tjänsten också, så för nu får sätter parametrarna i webbadressen, 1107 00:58:54,000 --> 00:58:57,000 vilket är trevligt och användbart ibland, men för något känsligt eller stora 1108 00:58:57,000 --> 00:58:59,000 inlägg är rätt väg att gå. 1109 00:58:59,000 --> 00:59:02,000 Vad register0 gör egentligen här? 1110 00:59:02,000 --> 00:59:05,000 Tja, om jag öppnar register0 märker att detta är en super enkel sida, 1111 00:59:05,000 --> 00:59:09,000 men det är visar det faktum att jag kan samarbeta mingla, på gott och ont, 1112 00:59:09,000 --> 00:59:12,000 HTML med PHP. 1113 00:59:12,000 --> 00:59:15,000 Hela denna fil, med undantag för kommentarer i toppen, är HTML 1114 00:59:15,000 --> 00:59:19,000 förutom den här killen här. 1115 00:59:19,000 --> 00:59:22,000 >> Lägg märke i mitten av min PHP-kod, 1116 00:59:22,000 --> 00:59:26,000 i mitten av min HTML har jag typ av tillfälligt 1117 00:59:26,000 --> 00:59:28,000 in PHP läge. 1118 00:59:28,000 --> 00:59:31,000 Jag ringer en speciell funktion som kallas print r.. 1119 00:59:31,000 --> 00:59:34,000 Det betyder ut rekursiv, och vad den gör är det rekursivt skriver 1120 00:59:34,000 --> 00:59:38,000 oavsett variabel du lämnar den, semikolon, utgång PHP-läge. 1121 00:59:38,000 --> 00:59:40,000 Och före taggen ger pre-formaterad text, 1122 00:59:40,000 --> 00:59:43,000 mono utrymme texten så att varje utrymme du faktiskt se den. 1123 00:59:43,000 --> 00:59:46,000 Det försvinner inte. Vad är post? 1124 00:59:46,000 --> 00:59:48,000 Tja, vad som är intressant och övertygande om PHP 1125 00:59:48,000 --> 00:59:52,000 är att när du skickar ett formulär med GET eller POST 1126 00:59:52,000 --> 00:59:56,000 något som är lämnat till dig av en webbläsare 1127 00:59:56,000 --> 01:00:00,000 PHP själv räknar ut vad de centrala värdepar är, 1128 01:00:00,000 --> 01:00:02,000 räknar ut om det finns likhetstecken, figurer ut om det finns ett frågetecken. 1129 01:00:02,000 --> 01:00:07,000 Det gör allt det hårda arbetet för dig, och sedan händer dig en associativ array 1130 01:00:07,000 --> 01:00:10,000 innehåller allt som användaren skrivit in i formuläret. 1131 01:00:10,000 --> 01:00:12,000 Nå, vad fält formuläret ha? 1132 01:00:12,000 --> 01:00:14,000 >> Den hade 4 fält. 1133 01:00:14,000 --> 01:00:16,000 En var ett textfält som heter namn. 1134 01:00:16,000 --> 01:00:18,000 En var en kryssruta som heter kapten. 1135 01:00:18,000 --> 01:00:22,000 En var en alternativknapp som kallas kön, 1136 01:00:22,000 --> 01:00:24,000 och en var en rullgardinsmeny som kallas sovsal, 1137 01:00:24,000 --> 01:00:27,000 så märker när jag skriver ut rekursivt 1138 01:00:27,000 --> 01:00:29,000 innehållet i denna speciella variabel. 1139 01:00:29,000 --> 01:00:34,000 Detta är en speciell global variabel som heter bokstavligen $ _POST, med stora bokstäver. 1140 01:00:34,000 --> 01:00:39,000 Detta är en speciell global variabel som PHP bara skapar för dig 1141 01:00:39,000 --> 01:00:42,000 och händer till dig så att du kan komma åt allt 1142 01:00:42,000 --> 01:00:45,000 som lämnades via ett formulär av en användare. 1143 01:00:45,000 --> 01:00:48,000 Och genom att ringa print r på det, du skulle inte göra detta i en normal tillämpning. 1144 01:00:48,000 --> 01:00:50,000 Vi gör detta för att se insidan av denna variabel, 1145 01:00:50,000 --> 01:00:53,000 och vad som finns inuti den, ja, 4 knappar, 1146 01:00:53,000 --> 01:00:56,000 4 http parametrar, så att säga, 1147 01:00:56,000 --> 01:00:59,000 namn, kapten, kön, studentrummet, och sedan de värden som användaren 1148 01:00:59,000 --> 01:01:01,000 skrivs in med ett undantag. 1149 01:01:01,000 --> 01:01:03,000 Jag gjorde typ D-A-V-I-D. 1150 01:01:03,000 --> 01:01:05,000 Jag kollade rutan, men för män, som tydligen lämnat ett värde 1151 01:01:05,000 --> 01:01:07,000 av bara meter för att vara kortfattad. 1152 01:01:07,000 --> 01:01:10,000 >> När jag valde Matthews som är det värde som blev vald, 1153 01:01:10,000 --> 01:01:12,000 och detta är lite dum, men det är konventionen. 1154 01:01:12,000 --> 01:01:17,000 När jag markerat rutan, värdet på "på", blev fram för kryssrutan. 1155 01:01:17,000 --> 01:01:21,000 Om jag inte hade kontrollerat det, skulle något värde har skickats helst. 1156 01:01:21,000 --> 01:01:26,000 Detta är bara ge oss insikter i vad som finns inuti denna speciella global variabel, 1157 01:01:26,000 --> 01:01:29,000 och det är så speciellt att det kallas en super global variabel. 1158 01:01:29,000 --> 01:01:33,000 Den finns överallt för dig inom din kod så att du faktiskt kan komma åt den. 1159 01:01:33,000 --> 01:01:36,000 Det är inte så övertygande, så låt oss faktiskt använder super globala 1160 01:01:36,000 --> 01:01:38,000 och faktiskt försöka registrera någon. 1161 01:01:38,000 --> 01:01:41,000 I froshims1 Jag ska göra en förändring. 1162 01:01:41,000 --> 01:01:44,000 Jag ändrar åtgärden som register1.php, 1163 01:01:44,000 --> 01:01:46,000 och jag gör en annan sak. 1164 01:01:46,000 --> 01:01:48,000 Jag var lite generad av kvaliteten på min hemsida där. 1165 01:01:48,000 --> 01:01:52,000 Det är ganska hemsk, ärligt talat, så visar det sig 1166 01:01:52,000 --> 01:01:56,000 som du kan använda mycket lätt på webben 1167 01:01:56,000 --> 01:01:59,000 andras JavaScript-kod, andra människors CSS 1168 01:01:59,000 --> 01:02:02,000 att de har skrivit och öppna anskaffas och göras tillgängligt som ett bibliotek, 1169 01:02:02,000 --> 01:02:06,000 så att säga, och till exempel här jag använder en fritt tillgänglig bibliotek, 1170 01:02:06,000 --> 01:02:08,000 ett gäng kod som någon annan skrivit. 1171 01:02:08,000 --> 01:02:11,000 >> Twitter råkade skriva denna kod och det kallas bootstrap biblioteket, 1172 01:02:11,000 --> 01:02:15,000 och det är bara en massa CSS-formatmallar, ett gäng. CSS-filer 1173 01:02:15,000 --> 01:02:19,000 att någon skrev annan och räknat ut hur man får allt trevligt och ganska 1174 01:02:19,000 --> 01:02:22,000 så att människor som oss kan oroa lite mindre om estetik och fokusera mycket mer 1175 01:02:22,000 --> 01:02:24,000 på logiken och den faktiska programmeringen. 1176 01:02:24,000 --> 01:02:30,000 Genom att koppla det med den taggen, vilket är samma tagg använde jag ihåg för styles3.css tidigare, 1177 01:02:30,000 --> 01:02:34,000 Jag har nu tillgång till en fil som heter bootstrap.min.css. 1178 01:02:34,000 --> 01:02:37,000 Min betyder bara att de har minified det och de har blivit av allt tomrum och så vidare 1179 01:02:37,000 --> 01:02:40,000 bara för att se till att de inte ska skicka mig fler byte än jag egentligen behöver. 1180 01:02:40,000 --> 01:02:45,000 Men i det finns en hel massa CSS, så om jag nu öppnar version 1 av Frosh IM 1181 01:02:45,000 --> 01:02:49,000 märker att min fil är definitivt vackrare. 1182 01:02:49,000 --> 01:02:54,000 Nu är det fortfarande bara svart och vitt, men märker att genom att bara använda sin formatmall 1183 01:02:54,000 --> 01:02:58,000 och använda vissa funktioner i det på min blankett är det inte fantastiskt, 1184 01:02:58,000 --> 01:03:01,000 men det är definitivt renare än den var före, och projektorn inte gör det rättvisa. 1185 01:03:01,000 --> 01:03:05,000 Det finns små grå linjer runt knapparna och runt textfältet här, 1186 01:03:05,000 --> 01:03:07,000 men det är definitivt renare än det var innan. 1187 01:03:07,000 --> 01:03:09,000 >> Nu, i rättvisans namn, jag måste ändra min kod lite. 1188 01:03:09,000 --> 01:03:12,000 Detta är version 1, och märker att jag har använt ett par nya taggar, 1189 01:03:12,000 --> 01:03:17,000 och ärligt hade jag ingen aning om hur man gör detta tills jag läste den dokumentation 1190 01:03:17,000 --> 01:03:20,000 för Twitters bootstrap bibliotek, och de berättade för mig om du vill använda vårt bibliotek 1191 01:03:20,000 --> 01:03:23,000 Använd en fältgrupp element i formuläret 1192 01:03:23,000 --> 01:03:27,000 sätta det ord du vill visa bredvid ett fält inne i en etikett etikett, 1193 01:03:27,000 --> 01:03:30,000 sedan ge ditt bidrag ett namn, precis som tidigare, 1194 01:03:30,000 --> 01:03:34,000 och sedan för kryssrutan inte bara du packa in den i en etikett element, 1195 01:03:34,000 --> 01:03:36,000 du använder något som kallas en klass, så vi har inte sett det här förut, 1196 01:03:36,000 --> 01:03:39,000 men du kommer att se detta i ett av pset 7 underbyxor. 1197 01:03:39,000 --> 01:03:43,000 En klass i CSS kan du göra något mycket likt ID, 1198 01:03:43,000 --> 01:03:46,000 men innan när vi hade ett ID med symbolen # 1199 01:03:46,000 --> 01:03:48,000 som var för en och endast en del. 1200 01:03:48,000 --> 01:03:51,000 Vad är trevligt om en klass är att flera element kan ha samma klass 1201 01:03:51,000 --> 01:03:54,000 eller samma CSS-grejer tillämpas på den. 1202 01:03:54,000 --> 01:03:57,000 >> Men återigen, är att kopiera mer på dem på kort, och resten av det bara och klistra 1203 01:03:57,000 --> 01:04:00,000 från deras dokumentation där jag har lagt till en etikett här och där. 1204 01:04:00,000 --> 01:04:03,000 Och i slutet, för jag har inkluderat länken taggen på toppen, 1205 01:04:03,000 --> 01:04:06,000 allt ser snyggare automatiskt 1206 01:04:06,000 --> 01:04:10,000 genom att helt enkelt ha märkt upp min sida på ett sätt som 1207 01:04:10,000 --> 01:04:12,000 Twitter väntat, och det finns så många olika sätt 1208 01:04:12,000 --> 01:04:14,000 att göra detta, och det är verkligen mycket lämpligt. 1209 01:04:14,000 --> 01:04:17,000 Vid denna punkt i terminen, som du ser i pset 7: s spec, 1210 01:04:17,000 --> 01:04:20,000 Googla runt, läsa på bibliotek, med hjälp av andra människors CSS 1211 01:04:20,000 --> 01:04:23,000 och JavaScript för att lösa tillhörande problem 1212 01:04:23,000 --> 01:04:26,000 på problemet satt är verkligen uppmuntras och är det sätt 1213 01:04:26,000 --> 01:04:29,000 webben är byggd i dessa dagar, genom att stå på andras axlar 1214 01:04:29,000 --> 01:04:32,000 så att du verkligen kan fokusera på nya och intressanta problem. 1215 01:04:32,000 --> 01:04:34,000 Men låt oss nu fokusera på, igen, logiken. 1216 01:04:34,000 --> 01:04:38,000 >> Det var en snabb avstickare på estetik bara för att visa dig i vilken riktning du kan gå. 1217 01:04:38,000 --> 01:04:40,000 Jag ska återgå till fulare en för nu bara för att 1218 01:04:40,000 --> 01:04:44,000 det finns inga distraktioner med Twitter grejer, och låt mig gå vidare och öppna upp 1219 01:04:44,000 --> 01:04:51,000 froshims2, vilket återigen skiljer endast i handling, register2.php, 1220 01:04:51,000 --> 01:04:55,000 och låt oss ta en titt på vad effekten är här. 1221 01:04:55,000 --> 01:04:57,000 Låt mig gå vidare och skriva i David. 1222 01:04:57,000 --> 01:04:59,000 Jag kommer inte att vara kapten den här gången. 1223 01:04:59,000 --> 01:05:01,000 Jag ska säga manlig, Matthews, registret. 1224 01:05:01,000 --> 01:05:05,000 Fan också. Okej, det är en skruv upp på min sida. 1225 01:05:05,000 --> 01:05:07,000 Stand by. 1226 01:05:07,000 --> 01:05:17,000 Register2, linje 22, om den är tom eller-ledsen. 1227 01:05:17,000 --> 01:05:19,000 Låt oss ladda om. 1228 01:05:19,000 --> 01:05:22,000 Okej, när skicka detta formulär vad som just hände? 1229 01:05:22,000 --> 01:05:25,000 Jag skrev i David, kontrolleras manlig, klickade Matthews, registret. 1230 01:05:25,000 --> 01:05:27,000 Du är registrerad. (Tja, inte riktigt.) 1231 01:05:27,000 --> 01:05:32,000 Detta är helt klart ett steg längre än bara skriva ut innehållet i en viss variabel, 1232 01:05:32,000 --> 01:05:34,000 Men vad är detta filen gör egentligen? 1233 01:05:34,000 --> 01:05:37,000 I register2.php 1234 01:05:37,000 --> 01:05:40,000 märker att jag har några nya koden. 1235 01:05:40,000 --> 01:05:44,000 Insidan av min kropp tag har jag i huvudsak en om annat konstruera, 1236 01:05:44,000 --> 01:05:47,000 men eftersom jag tillsammans mingel detta med några HTML 1237 01:05:47,000 --> 01:05:51,000 Jag måste in och ut PHP-läge och tillbaka, så låt oss se vad jag gör. 1238 01:05:51,000 --> 01:05:55,000 >> På första raden här jag säger om det är fallet 1239 01:05:55,000 --> 01:06:00,000 att efter Super globala är tom för nyckeln av namn, 1240 01:06:00,000 --> 01:06:04,000 så med andra ord, om användaren inte gav mig ett värde för namn i form, 1241 01:06:04,000 --> 01:06:07,000 töm sedan kommer att återvända sant eftersom värdet är tom. 1242 01:06:07,000 --> 01:06:11,000 Eller-märke de vertikala staplarna-om kön är tom 1243 01:06:11,000 --> 01:06:15,000 insidan av denna speciella super globala, vilket, återigen, representerar innehållet i formuläret, 1244 01:06:15,000 --> 01:06:19,000 eller studentrummet är tom, så jag ska gå vidare och skrika på användaren. 1245 01:06:19,000 --> 01:06:22,000 Hur? Tja, märker jag ska säga att du måste ange ditt namn, kön och sovsal. 1246 01:06:22,000 --> 01:06:24,000 Låt oss faktiskt framkalla det misstaget. 1247 01:06:24,000 --> 01:06:27,000 Låt mig gå tillbaka till min form. Låt mig ladda för att ta bort det. 1248 01:06:27,000 --> 01:06:30,000 Och jag ska bara ge dem David, och de behöver inte veta var jag bor. 1249 01:06:30,000 --> 01:06:33,000 Registrera. Tydligen jag behöver berätta för dem där jag bor. 1250 01:06:33,000 --> 01:06:35,000 Du måste ange ditt namn, kön och studentrummet. Gå tillbaka. 1251 01:06:35,000 --> 01:06:39,000 >> Och jag kunde klicka på för att gå tillbaka till den formen, men varför är det? 1252 01:06:39,000 --> 01:06:43,000 Tja, i så fall namn inte tom, men kön var, och studentrummet var, 1253 01:06:43,000 --> 01:06:47,000 så detta hela uttrycket utvärderas till true, och även om syntaxen är lite nytt, 1254 01:06:47,000 --> 01:06:51,000 igen, går vi in ​​PHP-läge, känner if, 1255 01:06:51,000 --> 01:06:54,000 men den nya delen här är just detta kolon, och jag hade skruvas upp genom att utelämna en parentes 1256 01:06:54,000 --> 01:06:57,000 av en slump, men märker tjocktarmen, och det betyder 1257 01:06:57,000 --> 01:07:00,000 även om vi lämnar PHP-läge allt 1258 01:07:00,000 --> 01:07:03,000 som följer ska spotta ut ordagrant till webbläsaren 1259 01:07:03,000 --> 01:07:07,000 tills du ser en annan kvarter, som vi gör här, 1260 01:07:07,000 --> 01:07:10,000 i vilket fall du bör i stället spotta ut det här 1261 01:07:10,000 --> 01:07:13,000 tills du ser endif, så några lite ny syntax 1262 01:07:13,000 --> 01:07:16,000 som tillåter mig att växla mellan HTML och PHP. 1263 01:07:16,000 --> 01:07:19,000 Vi kan städa upp det här så småningom, men för nu, 1264 01:07:19,000 --> 01:07:22,000 Det är lite av en övertygande sätt felkontroll formuläret. 1265 01:07:22,000 --> 01:07:25,000 >> Nu säger jag att du inte är riktigt registreras eftersom vi självklart har gjort något, men data, 1266 01:07:25,000 --> 01:07:28,000 så låt oss verkligen försöka göra något coolt. 1267 01:07:28,000 --> 01:07:33,000 År froshims3 den enda skillnaden är att jag kommer att lägga till register3, 1268 01:07:33,000 --> 01:07:35,000 så HTML finns det samma. 1269 01:07:35,000 --> 01:07:38,000 I register3 märker detta. 1270 01:07:38,000 --> 01:07:40,000 Detta är typ av sexig. 1271 01:07:40,000 --> 01:07:44,000 På toppen jag använder ett krav uttalande, så detta är som # include. 1272 01:07:44,000 --> 01:07:46,000 Den här gången är det inte stdio.h eller nåt sånt. 1273 01:07:46,000 --> 01:07:50,000 Det är ett PHP-bibliotek, och detta kallas PHPMailer. 1274 01:07:50,000 --> 01:07:53,000 Hur visste jag att ta med just denna citerade strängen? 1275 01:07:53,000 --> 01:07:56,000 Jag läste det i dokumentationen, så när de berättade för mig sätta detta överst i filen 1276 01:07:56,000 --> 01:08:00,000 Om du vill använda en speciell bibliotek som heter PHPMailer som gör vad den säger. 1277 01:08:00,000 --> 01:08:03,000 Det låter dig skicka e-post via PHP. 1278 01:08:03,000 --> 01:08:05,000 Nu ska vi rulla ner ytterligare. 1279 01:08:05,000 --> 01:08:08,000 >> Kallelse börja jag i PHP-läge här hela tiden, 1280 01:08:08,000 --> 01:08:11,000 så nu märker här nere efter att ha importerat det biblioteket, 1281 01:08:11,000 --> 01:08:13,000  så att säga, jag gör några sanity kontroller. 1282 01:08:13,000 --> 01:08:16,000 Om det är så att namnet inte är tom 1283 01:08:16,000 --> 01:08:19,000 och kön inte är tom-märker utropstecken- 1284 01:08:19,000 --> 01:08:24,000 och studentrummet inte är tom, då användaren har logiskt fyllt i formuläret, åtminstone tillräckligt. 1285 01:08:24,000 --> 01:08:28,000 Jag bryr mig inte om de är kapten eller inte. Jag behöver bara deras namn, kön och sovsal. 1286 01:08:28,000 --> 01:08:31,000 Om de har fyllt de ut så att ingen av dessa fält är tomma 1287 01:08:31,000 --> 01:08:33,000 Detta är något nytt syntax. 1288 01:08:33,000 --> 01:08:36,000 PHP, som en sidoreplik, är ett objektorienterat programmeringsspråk 1289 01:08:36,000 --> 01:08:39,000 som vissa av er kanske minns från APC eller liknande. 1290 01:08:39,000 --> 01:08:42,000 För nu, om främmande, vet bara att använda detta bibliotek 1291 01:08:42,000 --> 01:08:45,000 du måste skriva en rad kod som denna med en ny sökord, 1292 01:08:45,000 --> 01:08:47,000 bokstavligen ett nytt sökord kallade nya. 1293 01:08:47,000 --> 01:08:50,000 Men utöver det har vi några bekanta syntax. 1294 01:08:50,000 --> 01:08:54,000 Det är en pil operatör, som liknar det som vi använde för structs i samband med pekare. 1295 01:08:54,000 --> 01:08:57,000 För idag PHP inte har pekare, 1296 01:08:57,000 --> 01:09:01,000 men vet nu att insidan av e variabeln 1297 01:09:01,000 --> 01:09:05,000 är i huvudsak lite av en pekare till ett specialbibliotek 1298 01:09:05,000 --> 01:09:08,000 att någon annan skrev, och om jag vill komma åt specifika funktioner 1299 01:09:08,000 --> 01:09:12,000 insidan av det biblioteket jag, som i C, använd pilen operatör, 1300 01:09:12,000 --> 01:09:14,000 även om dessa inte är egentligen pekare. 1301 01:09:14,000 --> 01:09:16,000 Det är typ av PHP: s egen version av dessa. 1302 01:09:16,000 --> 01:09:20,000 Detta innebär att gå till biblioteket och ringa IsSMTP funktionen. 1303 01:09:20,000 --> 01:09:23,000 SMTP, minns, från våra Warriors of the Net hänvisar till e-post, 1304 01:09:23,000 --> 01:09:28,000 och det betyder bara använda en e-postserver för Frosh IM registrering. 1305 01:09:28,000 --> 01:09:30,000 >> Vilken värd vill jag använda? 1306 01:09:30,000 --> 01:09:34,000 Tja, Harvard, om du Google runt, har en e-postserver som heter smtp.fas.harvard.edu. 1307 01:09:34,000 --> 01:09:37,000 Om du spelar tillsammans hemma eller du bor på en Comcast nätverk 1308 01:09:37,000 --> 01:09:40,000 det kan vara något som smtp.comcast.net. 1309 01:09:40,000 --> 01:09:43,000 Det beror helt på var du bor och vem din ISP är. 1310 01:09:43,000 --> 01:09:47,000 Efter att jag kommer att ställa mig från adress godtyckligt vara jharvard@cs50.net. 1311 01:09:47,000 --> 01:09:52,000 Jag sedan gå att ställa in att ta vara jharvard@cs50.net. 1312 01:09:52,000 --> 01:09:55,000 Det enda sättet jag visste att dessa funktioner kallades SetFrom och AddAddress 1313 01:09:55,000 --> 01:09:57,000 är återigen läste jag dokumentationen. 1314 01:09:57,000 --> 01:09:59,000 Detta är inte typ av magiskt känd för alla programmerare. 1315 01:09:59,000 --> 01:10:02,000 Då jag satt en förutsättning att "registrering". 1316 01:10:02,000 --> 01:10:07,000 Och nu denna linje är lite ful eftersom vad punktoperatorn innebära i PHP? 1317 01:10:07,000 --> 01:10:09,000 Någon som vet? 1318 01:10:09,000 --> 01:10:11,000 Concatenate. 1319 01:10:11,000 --> 01:10:14,000 I C är det en smärta i nacken att sammanfoga 2 strängar tillsammans. 1320 01:10:14,000 --> 01:10:17,000 Du måste ta itu med malloc eller realloc eller allt det där 1321 01:10:17,000 --> 01:10:20,000 bara för att förlänga en sträng. 1322 01:10:20,000 --> 01:10:22,000 I PHP i JavaScript och andra språk 1323 01:10:22,000 --> 01:10:24,000 du kan vanligtvis göra detta med ett enda tecken. 1324 01:10:24,000 --> 01:10:28,000 I det här fallet betyder prick ta denna sträng här 1325 01:10:28,000 --> 01:10:30,000 och bifoga till det här strängen. 1326 01:10:30,000 --> 01:10:32,000 >> Åh, och förresten, bifoga den här strängen, 1327 01:10:32,000 --> 01:10:34,000 som råkar vara en variabel inuti att super globalt. 1328 01:10:34,000 --> 01:10:37,000 Sedan bifoga det en ny rad, så alla dessa punkter bara att 1329 01:10:37,000 --> 01:10:39,000 fortsätta att göra en större och större och större sträng, 1330 01:10:39,000 --> 01:10:43,000 och du behöver inte bryr sig alls om malloc eller liknande på ett språk som denna, 1331 01:10:43,000 --> 01:10:46,000 och det finns andra sätt att göra detta, men detta är en av de snabbaste 1332 01:10:46,000 --> 01:10:48,000 sätt att lägga ut. 1333 01:10:48,000 --> 01:10:50,000 Vad är detta gör? 1334 01:10:50,000 --> 01:10:55,000 Det skapar en e-postmeddelandet som kommer att säga Namn: Kapten: Kön: Dorm: 1335 01:10:55,000 --> 01:10:58,000 alla på separata rader, och sedan slutligen, 1336 01:10:58,000 --> 01:11:00,000 en kodrad, och jag kommer att ignorera detta för nu. 1337 01:11:00,000 --> 01:11:02,000 Om == false betyder bara om något gick fel, 1338 01:11:02,000 --> 01:11:04,000 men magin händer här. 1339 01:11:04,000 --> 01:11:08,000 Post Skicka betyder skicka e-post. 1340 01:11:08,000 --> 01:11:10,000 Låt oss se vad nettoresultatet är. 1341 01:11:10,000 --> 01:11:13,000 Längst ner i filen, märker att det kommer att säga att du är registrerad verkligen 1342 01:11:13,000 --> 01:11:15,000 om jag får så långt. 1343 01:11:15,000 --> 01:11:18,000 Men om användaren skruvar upp, märker att vi startade den här 1344 01:11:18,000 --> 01:11:21,000 Om villkoret upp här, om det inte är tomt och inte är tom 1345 01:11:21,000 --> 01:11:24,000 och inte tömma skickar vi e-post. 1346 01:11:24,000 --> 01:11:27,000 Annars ska vi skicka kodraden, 1347 01:11:27,000 --> 01:11:30,000 som kommer att ha effekten, som du ser i pset 7 av omdirigera användaren 1348 01:11:30,000 --> 01:11:35,000 tillbaka till där de kom, froshims3.php. 1349 01:11:35,000 --> 01:11:38,000 >> Tummarna, annars kommer att bli den mest nedslående demo idag. 1350 01:11:38,000 --> 01:11:40,000 Nu kör vi. 1351 01:11:40,000 --> 01:11:42,000 Låt mig öppna min inkorg för jharvard i Gmail. 1352 01:11:42,000 --> 01:11:44,000 Ingen e-post just nu. Okej. 1353 01:11:44,000 --> 01:11:53,000 Nu vill jag öppna upp froshims3, som är den tredje och sista exemplet vi titta på här. 1354 01:11:53,000 --> 01:11:55,000 Okej, nu kör vi. 1355 01:11:55,000 --> 01:12:00,000 Nate, kommer han att vara kapten, manlig, från, säg, Apley. 1356 01:12:00,000 --> 01:12:04,000 Registrera. Okej, du registrerat verkligen. 1357 01:12:04,000 --> 01:12:07,000 Nu om jag bläddrar över till min e-post, oh, min Gud. 1358 01:12:07,000 --> 01:12:09,000 Jag har just dynamiskt skickat ett e-post på webben. 1359 01:12:09,000 --> 01:12:11,000 >> Låt oss lämna på denna anmärkning. 1360 01:12:11,000 --> 01:12:16,000 En video är förestående för föreläsningen vi missat. Vi ses nästa vecka. 1361 01:12:16,000 --> 01:12:18,000 [CS50.TV]