1 00:00:00,000 --> 00:00:03,920 >> [MUSIK SPELA] 2 00:00:03,920 --> 00:00:11,760 3 00:00:11,760 --> 00:00:13,800 >> DAVID J. MALAN: Okej. 4 00:00:13,800 --> 00:00:15,640 Detta är CS50. 5 00:00:15,640 --> 00:00:17,620 Detta är början på veckan åtta. 6 00:00:17,620 --> 00:00:22,440 Och ni kanske minns att vi slutade Förra gången tittar på ett nytt språk 7 00:00:22,440 --> 00:00:23,240 helt och hållet. 8 00:00:23,240 --> 00:00:25,905 I själva verket, en som är ganska lätt och det är inte ens 9 00:00:25,905 --> 00:00:26,940 ett programspråk. 10 00:00:26,940 --> 00:00:31,100 Det är ett märkspråk som låter oss faktiskt strukturera och göra webbsidor. 11 00:00:31,100 --> 00:00:33,350 Och när du någonting annat jämförd med this-- 12 00:00:33,350 --> 00:00:35,670 eller snart kommer, om du inte redan har. 13 00:00:35,670 --> 00:00:38,530 Vi kommer att använda Cascading Style Sheets, eller CSS, vilket 14 00:00:38,530 --> 00:00:40,971 är en annan typ av språk med egenskaper och värden 15 00:00:40,971 --> 00:00:43,220 det kommer att låta oss göra Saker som ändrar färg 16 00:00:43,220 --> 00:00:46,010 och ändra positionen och dessa typer av tweaks. 17 00:00:46,010 --> 00:00:49,940 Men idag och framåt, börjar vi fokusera på mer kraftfulla språk, 18 00:00:49,940 --> 00:00:52,810 faktiska programmeringsspråk som PHP. 19 00:00:52,810 --> 00:00:54,880 >> Så PHP har funnits under en längre tid. 20 00:00:54,880 --> 00:00:56,810 Och som du ser, det utformades huvudsakligen 21 00:00:56,810 --> 00:01:00,280 tidigt för faktisk användning i webbutveckling 22 00:01:00,280 --> 00:01:02,360 och faktiskt generera webbsidor. 23 00:01:02,360 --> 00:01:04,849 Så vad slags funktioner gör ett språk 24 00:01:04,849 --> 00:01:10,040 behöver för att göra webben sidor dynamiskt med det? 25 00:01:10,040 --> 00:01:14,760 >> Med andra ord, om du vill skapa innehåll dynamically-- som Facebook s 26 00:01:14,760 --> 00:01:19,480 Newsfeed, som ändras hela tiden, eller snabbmeddelanden som dyker upp då 27 00:01:19,480 --> 00:01:21,872 att time-- som vad är det central del av funktionalitet 28 00:01:21,872 --> 00:01:24,580 du behöver i ett programmeringsspråk som skulle låta dig dynamiskt 29 00:01:24,580 --> 00:01:28,070 skriva ut ny information på skärmen? 30 00:01:28,070 --> 00:01:28,685 >> STUDENTEN Code. 31 00:01:28,685 --> 00:01:29,560 DAVID J. MALAN: Code. 32 00:01:29,560 --> 00:01:30,440 OK. 33 00:01:30,440 --> 00:01:31,995 Vi tar det. 34 00:01:31,995 --> 00:01:35,310 Lite mer exakt. 35 00:01:35,310 --> 00:01:37,639 Jag menar, kan vi göra detta med C, ärligt talat. 36 00:01:37,639 --> 00:01:38,930 Det skulle vara en smärta i nacken. 37 00:01:38,930 --> 00:01:41,045 Men-- är detta engagemang? 38 00:01:41,045 --> 00:01:41,895 >> STUDENT: Ja. 39 00:01:41,895 --> 00:01:42,677 Variabler, kanske? 40 00:01:42,677 --> 00:01:43,760 DAVID J. MALAN: Variabler. 41 00:01:43,760 --> 00:01:44,160 OK, visst. 42 00:01:44,160 --> 00:01:45,740 Variabler kan säkert hjälpa oss. 43 00:01:45,740 --> 00:01:47,020 Och även något enklare. 44 00:01:47,020 --> 00:01:50,640 Vi använde det i den allra första program för den allra första dagen 45 00:01:50,640 --> 00:01:55,686 när vi faktiskt sa "Hej världen". 46 00:01:55,686 --> 00:01:56,570 >> STUDENTEN Print. 47 00:01:56,570 --> 00:01:57,778 >> DAVID J. MALAN: Skriv ut, eller hur? 48 00:01:57,778 --> 00:02:01,050 Skriv ut eller printf i värld av C. Så hela den här tiden, 49 00:02:01,050 --> 00:02:03,362 vi har haft på vår förfogande en language-- C 50 00:02:03,362 --> 00:02:05,570 i particular-- och även Scratch för den delen som 51 00:02:05,570 --> 00:02:07,400 kan generera textsträngar. 52 00:02:07,400 --> 00:02:11,090 >> Tja, om HTML, som vi såg förra veckan, är bara en massa textsträngar 53 00:02:11,090 --> 00:02:14,692 om än med öppna fästen och stängda konsoler och något slags rim 54 00:02:14,692 --> 00:02:16,650 och anledningen till det, ja då kunde vi verkligen 55 00:02:16,650 --> 00:02:20,440 börja generera webbsidor antingen manuellt genom att skriva ut dem i gedit 56 00:02:20,440 --> 00:02:23,870 eller i Microsoft Word, för att matter-- vi behöver bara en textredigerare. 57 00:02:23,870 --> 00:02:26,830 >> Eller vi kan skriva kod, till ditt förslag 58 00:02:26,830 --> 00:02:30,435 tidigare, det skulle låta oss dynamiskt generera HTML, 59 00:02:30,435 --> 00:02:32,560 och det är vad vi kommer att börja göra med PHP 60 00:02:32,560 --> 00:02:34,900 och slutligen även med en språk som kallas JavaScript 61 00:02:34,900 --> 00:02:37,910 är att använda ett språk för att skapa en annan. 62 00:02:37,910 --> 00:02:40,720 Och faktiskt, det är vad Facebook och många, många andra platser 63 00:02:40,720 --> 00:02:44,530 göra för att faktiskt dynamiskt visa ny information till dig. 64 00:02:44,530 --> 00:02:47,117 >> Så låt oss börja med this-- a kryptiskt ser linjen, men en 65 00:02:47,117 --> 00:02:48,450 det är faktiskt ganska kraftfull. 66 00:02:48,450 --> 00:02:51,210 Hittills har vi använt C, vilket är en kompilerad språk. 67 00:02:51,210 --> 00:02:55,050 Och bara en snabb recap-- en kompilerad språket har vad karakteristiska? 68 00:02:55,050 --> 00:02:59,050 Du måste självklart att sammanställa det, men vad betyder det? 69 00:02:59,050 --> 00:03:00,505 Yeah? 70 00:03:00,505 --> 00:03:02,940 >> STUDENT: Det måste vara monteras maskinkod. 71 00:03:02,940 --> 00:03:03,060 >> David J. MALAN: OK. 72 00:03:03,060 --> 00:03:04,530 Det måste monteras till maskinkod. 73 00:03:04,530 --> 00:03:07,340 Så du tar din källkod, vilket är en slags engelsk-liknande. 74 00:03:07,340 --> 00:03:09,270 Du konverterar det till något lägre nivå, 75 00:03:09,270 --> 00:03:11,590 vilket slutligen kallas objektet code-- 0 s och 1 s. 76 00:03:11,590 --> 00:03:14,830 Och det är dessa 0 s och 1 s som en CPU, som de som gjorts av Intel, 77 00:03:14,830 --> 00:03:16,110 faktiskt förstår. 78 00:03:16,110 --> 00:03:19,690 >> Nu, PHP och Python och Ruby och JavaScript och klasar av andra 79 00:03:19,690 --> 00:03:23,190 språk är inte sammanställt språk, men tolkade språk, 80 00:03:23,190 --> 00:03:26,630 vilket innebär att du bara skriva in dem och sedan du behöver inte förvandla dem till 0 s och 1 s. 81 00:03:26,630 --> 00:03:30,790 Du istället bara ger sedan som input till någon annans program, 82 00:03:30,790 --> 00:03:32,080 kallas en tolk. 83 00:03:32,080 --> 00:03:34,460 Och den personens Programmet har utformats 84 00:03:34,460 --> 00:03:38,280 att förstå vad var och varje symbol i Python eller PHP 85 00:03:38,280 --> 00:03:42,650 eller Ruby eller valfritt antal andra språk betyder. 86 00:03:42,650 --> 00:03:44,760 >> Och så allt vi behöver är ungefär så här. 87 00:03:44,760 --> 00:03:46,350 Så i själva verket kommer jag att gå över till apparaten 88 00:03:46,350 --> 00:03:48,100 här, bara i någon gamla fönster, och vi är 89 00:03:48,100 --> 00:03:52,580 kommer att gå vidare och öppna en fil som heter, säger, hej. 90 00:03:52,580 --> 00:03:55,780 Nu tidigare, kanske jag har sparat detta även med en filändelse, 91 00:03:55,780 --> 00:03:57,910 men jag ska göra något ännu enklare här. 92 00:03:57,910 --> 00:04:02,450 Jag kommer att gå vidare och starta denna fil med detta kryptiska syntax. 93 00:04:02,450 --> 00:04:06,310 Så "user, bin, env, för miljö, php. " 94 00:04:06,310 --> 00:04:10,670 >> Detta är helt enkelt en rad kod som är ska berätta mitt operativsystem, 95 00:04:10,670 --> 00:04:13,730 gå hitta i din lokala miljö vad det nu är, 96 00:04:13,730 --> 00:04:18,149 varhelst PHP är-- den interpreter-- och gå vidare och använda den tolk 97 00:04:18,149 --> 00:04:20,589 att tolka följande kod. 98 00:04:20,589 --> 00:04:22,760 Nu är denna typ av en ful funktion i PHP. 99 00:04:22,760 --> 00:04:24,980 Men i detta språk, något gång du skriver PHP-kod, 100 00:04:24,980 --> 00:04:29,200 du måste ha en av dessa ful PHP-taggar avgränsar början 101 00:04:29,200 --> 00:04:32,220 din code-- 00:04:37,430 >> Men nedan här, kan jag nu göra något ganska enkelt, som printf hej kommatecken 103 00:04:37,430 --> 00:04:40,922 Världens bakstreck n nära citat, nära parentes. 104 00:04:40,922 --> 00:04:42,630 Och sedan bara för gott åtgärd, jag ska 105 00:04:42,630 --> 00:04:45,380 att gå vidare och stäng min php tagg över här 106 00:04:45,380 --> 00:04:47,390 så att allt ser ut snyggt ganska tryckt. 107 00:04:47,390 --> 00:04:50,780 >> Och så fort jag klickar på Spara, gedit är faktiskt smart nog 108 00:04:50,780 --> 00:04:54,620 att titta på den allra första raden och inse, åh, du skriver PHP-kod. 109 00:04:54,620 --> 00:04:56,710 Låt mig syntax highlight det med färgerna 110 00:04:56,710 --> 00:04:58,690 här så att det står ut lite mer. 111 00:04:58,690 --> 00:05:01,300 Men nu ska jag gå ner till min terminalfönster. 112 00:05:01,300 --> 00:05:02,340 Jag ska zooma in. 113 00:05:02,340 --> 00:05:06,860 >> Programmet kallades "hej" så jag kommer att göra punkt snedstreck hej, 114 00:05:06,860 --> 00:05:07,990 men tillstånd nekas. 115 00:05:07,990 --> 00:05:08,490 Och bash. 116 00:05:08,490 --> 00:05:10,610 Vi har faktiskt hört talas om det sak ett par veckor sedan 117 00:05:10,610 --> 00:05:13,140 inom ramen för Shock, en av dessa buggar. 118 00:05:13,140 --> 00:05:16,240 >> Men Permission denied vi har sett tidigare, kanske i ett annat sammanhang. 119 00:05:16,240 --> 00:05:19,060 Finns det någon som minns hur du kanske fixa något 120 00:05:19,060 --> 00:05:22,100 där tillstånd nekas så här? 121 00:05:22,100 --> 00:05:23,490 Vad är kommandot, åtminstone? 122 00:05:23,490 --> 00:05:24,159 >> STUDENTEN Chmod. 123 00:05:24,159 --> 00:05:26,700 DAVID J. MALAN: Ja, chmod, för att ändra läget för en fil. 124 00:05:26,700 --> 00:05:30,171 Och du får desto mer van vid detta nästa vecka med en efterföljande problem 125 00:05:30,171 --> 00:05:30,670 inställd. 126 00:05:30,670 --> 00:05:33,211 Men för nu, kommer jag att byta läget inte vara läsbar, 127 00:05:33,211 --> 00:05:36,650 utan att ge alla executeability privilegier, förmågan 128 00:05:36,650 --> 00:05:37,710 att köra den här filen. 129 00:05:37,710 --> 00:05:40,360 Och jag kommer att tilldela att till filen hej. 130 00:05:40,360 --> 00:05:45,150 >> Om jag nu dot slash hello in, du se, faktiskt, mitt program, Hej världen. 131 00:05:45,150 --> 00:05:48,760 Och vad steget gjorde jag klart hoppa helt och hållet? 132 00:05:48,760 --> 00:05:49,520 Kompilera. 133 00:05:49,520 --> 00:05:51,680 Så jag körde just det här programmet helt enkelt. 134 00:05:51,680 --> 00:05:55,690 >> Och det visar sig att du kan göra detta med mycket syntax som påminner om C. 135 00:05:55,690 --> 00:06:03,400 Låt mig gå in till dagens kod, som jag lade i min vhost katalog 136 00:06:03,400 --> 00:06:05,250 här, för verkliga skäl Vi ska återkomma till. 137 00:06:05,250 --> 00:06:09,350 Och jag kommer att gå in, låt oss säga, villkor 1. 138 00:06:09,350 --> 00:06:12,450 >> Och du kommer att se här, först och främst en massa kommentarer. 139 00:06:12,450 --> 00:06:15,240 Men detta är faktiskt ett återskapande i PHP 140 00:06:15,240 --> 00:06:18,960 av ett program som vi gjorde i veckan en kallade betingelser 1.c 141 00:06:18,960 --> 00:06:20,690 där syftet i liv av detta program 142 00:06:20,690 --> 00:06:22,950 är uppenbarligen att fråga användaren för ett heltal 143 00:06:22,950 --> 00:06:25,270 och sedan göra lite fluffig analys på det vari 144 00:06:25,270 --> 00:06:29,510 du säga om det är positivt eller negativt eller lika med noll. 145 00:06:29,510 --> 00:06:34,220 Och jag bara ta upp detta eftersom, utom för kanske en liten detalj, 146 00:06:34,220 --> 00:06:37,150 det är omöjlig att skilja så långt från C. 147 00:06:37,150 --> 00:06:39,930 >> Vad är en egenskap här som kanske hoppar ut 148 00:06:39,930 --> 00:06:41,410 på dig som en lite annorlunda? 149 00:06:41,410 --> 00:06:42,160 Kanske två saker. 150 00:06:42,160 --> 00:06:42,660 Yeah? 151 00:06:42,660 --> 00:06:44,070 >> STUDENT: Dollartecken n? 152 00:06:44,070 --> 00:06:44,944 >> DAVID J. MALAN: Ja. 153 00:06:44,944 --> 00:06:46,210 Så dollartecken n är närvarande. 154 00:06:46,210 --> 00:06:48,120 Och dollartecken, som vi får se, går 155 00:06:48,120 --> 00:06:51,460 att vara en fix till början varje variabel i PHP. 156 00:06:51,460 --> 00:06:54,250 Det är både bra och bad-- bra i att det är liksom självklart vad som är 157 00:06:54,250 --> 00:06:56,797 en variabel, dåligt i att det är ännu en sak att skriva. 158 00:06:56,797 --> 00:06:58,630 Och det finns en annan sak har vi inte riktigt 159 00:06:58,630 --> 00:07:00,876 sett, åtminstone i denna stavning. ja? 160 00:07:00,876 --> 00:07:01,630 >> STUDENTEN Readline. 161 00:07:01,630 --> 00:07:02,671 >> David J. MALAN: Readline. 162 00:07:02,671 --> 00:07:06,550 Readline vi inte se, i och för sig, i C, trots att det föreligger något 163 00:07:06,550 --> 00:07:09,530 liknande, men vi har använt getString, och detta är dess motsvarighet. 164 00:07:09,530 --> 00:07:12,950 Så om jag går in i detta katalog, som råkar vara, 165 00:07:12,950 --> 00:07:18,030 som jag ska förklara i en bit i mitt vhost katalog och min källa En katalog, 166 00:07:18,030 --> 00:07:22,730 och jag gå vidare och göra dot snedstreck conditions-- whoops-- dot snedstreck 167 00:07:22,730 --> 00:07:26,710 villkor 1, ser du, återigen, samma issue-- tillstånd nekas. 168 00:07:26,710 --> 00:07:33,610 >> Så låt mig zooma in och göra chmod ett plus x om villkor, pricka slashförhållanden. 169 00:07:33,610 --> 00:07:35,222 Jag skulle vilja ett heltal, snälla, 50. 170 00:07:35,222 --> 00:07:36,930 Och vi skulle kunna spela här spel hela dagen lång. 171 00:07:36,930 --> 00:07:39,140 Det kommer att bete sig exakt som den gjorde i veckan ett. 172 00:07:39,140 --> 00:07:42,860 >> OK så inte så olika, förutom inte bara det liten bit av syntax, 173 00:07:42,860 --> 00:07:45,490 men vid toppen, jag igen hade denna linje som 174 00:07:45,490 --> 00:07:49,760 tillät mig att skapa något som ser ut som ett C-program som heter hello, 175 00:07:49,760 --> 00:07:51,150 kallade villkor 1. 176 00:07:51,150 --> 00:07:54,520 Men det är inte 0: s och ettor Jag utför direkt. 177 00:07:54,520 --> 00:07:57,620 Det är i stället att köra detta tolk vars namn 178 00:07:57,620 --> 00:07:59,440 råkar vara identiskt med det språket. 179 00:07:59,440 --> 00:08:04,970 Programmet heter PHP, och min kod under linjen man håller på att passera in i den. 180 00:08:04,970 --> 00:08:07,740 >> Vi kan göra en ganska enkel exempel som påminner om något 181 00:08:07,740 --> 00:08:09,240 vi gjorde veckor sedan. 182 00:08:09,240 --> 00:08:12,020 Återigen är detta en sorts godtycklig bit av kod 183 00:08:12,020 --> 00:08:14,000 som uppenbarligen inte vad när du kör det? 184 00:08:14,000 --> 00:08:15,625 Vad detta kommer att skrivas ut, förmodligen? 185 00:08:15,625 --> 00:08:23,540 186 00:08:23,540 --> 00:08:28,250 >> Så inledningsvis på linje 16, är det ska säga x är nu 2, förmodligen. 187 00:08:28,250 --> 00:08:30,920 % D är samma som $ i för printf. 188 00:08:30,920 --> 00:08:33,460 Så då är det cubing, punkt, dot, dot, i linje 17. 189 00:08:33,460 --> 00:08:36,299 Och sedan linje 18 visas att anropa en funktion i kubik. 190 00:08:36,299 --> 00:08:37,600 Och var är Cubed definieras? 191 00:08:37,600 --> 00:08:40,319 >> Tja, det ser ut i linje 25, så det är inte så annorlunda. 192 00:08:40,319 --> 00:08:42,610 Jag har några kommentarer ovan det, men för det mesta, 193 00:08:42,610 --> 00:08:45,370 det är en ganska okomplicerad portning eller konvertering 194 00:08:45,370 --> 00:08:48,470 från C-programmet till PHP version. 195 00:08:48,470 --> 00:08:52,670 Men det finns nu ett par skillnader som kanske borde hoppa ut. 196 00:08:52,670 --> 00:08:56,100 Vad är annorlunda med hur ni kan skriva samma program i C? 197 00:08:56,100 --> 00:08:57,900 >> STUDENTEN [OHÖRBAR]. 198 00:08:57,900 --> 00:09:00,070 >> DAVID J. MALAN: Det finns ingen prototyp där uppe. 199 00:09:00,070 --> 00:09:03,210 Så PHP-- och ärligt talat, en Mycket av modern languages-- 200 00:09:03,210 --> 00:09:06,920 är mycket smartare och mer användbart än C-kompilatorer i att du 201 00:09:06,920 --> 00:09:09,740 kan sätta funktionen här uppe, Du kan sätta en funktion här nere, 202 00:09:09,740 --> 00:09:12,740 och tolken går att göra dig till förmån för läsning 203 00:09:12,740 --> 00:09:16,010 hela filen innan den beslutar att någon funktion inte finns. 204 00:09:16,010 --> 00:09:17,970 Så trevliga förbättringar år senare. 205 00:09:17,970 --> 00:09:22,126 Men det finns också något annars annorlunda eller frånvarande här. 206 00:09:22,126 --> 00:09:22,626 Yeah? 207 00:09:22,626 --> 00:09:25,084 >> STUDENTEN [OHÖRBAR]. 208 00:09:25,084 --> 00:09:27,750 DAVID J. MALAN: Vi behöver inte förklara vilka typer av variabler, 209 00:09:27,750 --> 00:09:31,780 så vi får se inom kort att det finns olika typer i PHP, 210 00:09:31,780 --> 00:09:34,970 men du behöver inte ange dem, som också är både bra och dåligt. 211 00:09:34,970 --> 00:09:36,623 Och det finns en annan sak saknas. 212 00:09:36,623 --> 00:09:37,430 >> STUDENT: Det finns inga bibliotek. 213 00:09:37,430 --> 00:09:38,630 >> David J. MALAN: Det finns inga bibliotek. 214 00:09:38,630 --> 00:09:39,350 OK, så det är trevligt. 215 00:09:39,350 --> 00:09:40,540 Vi får mycket mer ur lådan. 216 00:09:40,540 --> 00:09:43,373 Så det finns faktiskt mycket mer saker än jag trodde var annorlunda. 217 00:09:43,373 --> 00:09:44,350 Vad sägs om sätt på ryggen? 218 00:09:44,350 --> 00:09:46,032 Vad är det? 219 00:09:46,032 --> 00:09:46,740 Säg det en gång till? 220 00:09:46,740 --> 00:09:47,960 >> STUDENTEN Pointer. 221 00:09:47,960 --> 00:09:49,270 >> DAVID J. MALAN: Inga pekare. 222 00:09:49,270 --> 00:09:51,280 OK, åtminstone i detta exempel, nr. 223 00:09:51,280 --> 00:09:52,070 Det är rättvist. 224 00:09:52,070 --> 00:09:55,090 Så det finns inte pekare i PHP faktiskt i allmänhet. 225 00:09:55,090 --> 00:09:58,730 Det finns något som kallas referenser, men vi kommer inte spendera alltför mycket tid där. 226 00:09:58,730 --> 00:09:59,520 Och vad mer? 227 00:09:59,520 --> 00:10:00,185 >> STUDENTEN Main. 228 00:10:00,185 --> 00:10:01,060 David J. MALAN: Main. 229 00:10:01,060 --> 00:10:02,768 Så detta var biggie Jag tänkte på. 230 00:10:02,768 --> 00:10:04,660 Observera att det finns ingen viktigaste inkörsporten. 231 00:10:04,660 --> 00:10:06,525 Du börjar helt enkelt skriva din kod. 232 00:10:06,525 --> 00:10:08,400 Och detta är faktiskt kommer att vara fördelaktigt 233 00:10:08,400 --> 00:10:10,560 när vi övergången momentant för att faktiskt använda 234 00:10:10,560 --> 00:10:13,980 samma språk för webbaserad programmering, för vilka vi 235 00:10:13,980 --> 00:10:16,580 vill inte ha bara en ingång. 236 00:10:16,580 --> 00:10:19,980 Vi kanske vill ha ett gäng Webbadresser, en massa olika filer 237 00:10:19,980 --> 00:10:22,930 alla tar i användarens input och producera utdata. 238 00:10:22,930 --> 00:10:27,130 >> Men här är det mycket nedslående exempel som jag lovade förra gången, 239 00:10:27,130 --> 00:10:30,130 nämligen i den här mappen här, felstavade. 240 00:10:30,130 --> 00:10:33,680 Så i den här filen stavnings, som vi kommer inte att spendera för mycket tid på, det finns 241 00:10:33,680 --> 00:10:37,870 huvudsak en porting-- P-O-R-T. Det är bara det ord ges när, säg, 242 00:10:37,870 --> 00:10:40,800 du konverterar från ett språk till en annan manuellt brukar. 243 00:10:40,800 --> 00:10:45,680 >> Detta är en portning av PC version av speller från PSET 5. 244 00:10:45,680 --> 00:10:48,856 Och jag i huvudsak försökt att omvandla den rad för rad så nära som jag kan. 245 00:10:48,856 --> 00:10:51,730 Så om du gillar denna typ av sak, det faktiskt är värt någon gång 246 00:10:51,730 --> 00:10:54,229 dra dem båda sida vid sidan och se vad som är på samma 247 00:10:54,229 --> 00:10:55,230 och vad är annorlunda. 248 00:10:55,230 --> 00:10:57,510 Men de är ganska lika. 249 00:10:57,510 --> 00:11:00,110 Om du kommer ihåg vad stavnings ens såg ut, 250 00:11:00,110 --> 00:11:02,110 även om du inte gjorde det måste ändra den här filen, 251 00:11:02,110 --> 00:11:04,860 det är ganska likartad strukturellt med bara ett par 252 00:11:04,860 --> 00:11:06,200 ändringar här och där. 253 00:11:06,200 --> 00:11:10,140 >> Så detta är bara att säga att det är ganska okomplicerat att omvandla speller 254 00:11:10,140 --> 00:11:12,000 från C till PHP. 255 00:11:12,000 --> 00:11:15,390 Men i ordlistan, det finns något ännu mer övertygande. 256 00:11:15,390 --> 00:11:19,270 Låt mig gå vidare och skapa min egen dictionary.php fil. 257 00:11:19,270 --> 00:11:24,010 Så lite annorlunda i det vi ska kalla det .php istället för .c. 258 00:11:24,010 --> 00:11:26,980 Eftersom detta är en PHP-fil, jag do-- något annoyingly-- ha 259 00:11:26,980 --> 00:11:30,132 att starta filen med en php-tagg som. 260 00:11:30,132 --> 00:11:32,340 Och jag kommer att gå vidare och definiera några funktioner. 261 00:11:32,340 --> 00:11:35,770 Funktion kallad check, som är kommer att ta in ett ord som förut. 262 00:11:35,770 --> 00:11:37,520 Men detta argument är kommer att ha en dollar 263 00:11:37,520 --> 00:11:39,840 logga eftersom vi är, återigen, med PHP. 264 00:11:39,840 --> 00:11:42,350 En annan funktion från dictionary.c var belastning 265 00:11:42,350 --> 00:11:47,120 och det tog i namn av en ordbok, så jag ska få den funktionen redo att gå. 266 00:11:47,120 --> 00:11:50,920 >> En annan i dictionary.c var vad? 267 00:11:50,920 --> 00:11:54,580 Storlek var en av de trevligaste, vid fall om man höll någon variabel runt. 268 00:11:54,580 --> 00:11:57,830 så storlek har bara att returnera en variabel. 269 00:11:57,830 --> 00:11:59,090 Och sen blev det lossa. 270 00:11:59,090 --> 00:12:02,830 >> Så det var dessa fyra funktioner i problembild 5 271 00:12:02,830 --> 00:12:06,770 att du behövde genomföra med viss datastruktur eller strukturer. 272 00:12:06,770 --> 00:12:10,170 Så jag lovade att i PHP, kan vi deklarera 273 00:12:10,170 --> 00:12:14,490 en hash-tabell, till exempel, allt som lättare. 274 00:12:14,490 --> 00:12:17,377 Faktum är att om jag vill ha en hashtabell, Jag kommer bara att gå så där 275 00:12:17,377 --> 00:12:18,460 och det finns min hashtabell. 276 00:12:18,460 --> 00:12:21,555 Och det är noteringen, nedslående, att vi slutade förra gången. 277 00:12:21,555 --> 00:12:23,930 Och vet du vad, om jag ville en variabel för storlek, väl, 278 00:12:23,930 --> 00:12:25,867 detta är inte allt som skiljer sig från C, 279 00:12:25,867 --> 00:12:27,450 men jag kommer att gå vidare och göra det. 280 00:12:27,450 --> 00:12:28,630 Och märker ingen datatyp. 281 00:12:28,630 --> 00:12:31,180 Och jag ska gå tillbaka senare och faktiskt lägga till några kommentarer här. 282 00:12:31,180 --> 00:12:32,480 Men hur är det med last? 283 00:12:32,480 --> 00:12:35,780 >> Om dollartecken ordbok är namnet på min fil 284 00:12:35,780 --> 00:12:39,600 och jag vill verkligen att ladda ord i den här tabellen nu, 285 00:12:39,600 --> 00:12:42,360 Jag kan faktiskt göra något ganska enkelt. 286 00:12:42,360 --> 00:12:44,880 En-- och detta är minorly annoying-- i PHP, 287 00:12:44,880 --> 00:12:47,710 Du måste ange inne av en funktion om du 288 00:12:47,710 --> 00:12:51,060 vill komma åt någon global variabel som är definierad utanför. 289 00:12:51,060 --> 00:12:53,530 >> Men det är inte särskilt intressant just nu. 290 00:12:53,530 --> 00:12:57,920 Vad är mer intressant är detta för varje bygga som jag nämnde förra gången. 291 00:12:57,920 --> 00:13:01,880 Och det visar sig att PHP har en funktion kallas fil vars syfte i livet 292 00:13:01,880 --> 00:13:05,550 är att öppna en fil och läsa in alla dess rader i en array 293 00:13:05,550 --> 00:13:06,840 och lämna tillbaka dem. 294 00:13:06,840 --> 00:13:12,170 >> Det vill säga att jag kan göra ordlistan så som nu i praktiken när jag ringer fil, 295 00:13:12,170 --> 00:13:15,472 detta kommer att ge mig tillbaka en rad ord från filen. 296 00:13:15,472 --> 00:13:16,430 Det är inte så bra. 297 00:13:16,430 --> 00:13:20,130 Det kommer fortfarande att finnas en rad av ord, något linjärt. 298 00:13:20,130 --> 00:13:23,880 Men jag kan gå vidare och iterera över alla dessa ord med 299 00:13:23,880 --> 00:13:25,710 den syntax vi såg kort förra gången. 300 00:13:25,710 --> 00:13:27,940 Och du ser det mer i den kommande PSET. 301 00:13:27,940 --> 00:13:32,070 >> Men nu har jag en loop iteration över varje ord i ordlistan. 302 00:13:32,070 --> 00:13:36,100 Och på varje iteration, minns jag ringer det aktuella ordet "ord." 303 00:13:36,100 --> 00:13:39,790 Och allt det kommer att vidta för att sätta ett ord i ordlistan är 304 00:13:39,790 --> 00:13:43,530 kommer att vara ord gissning "sant". 305 00:13:43,530 --> 00:13:44,740 Det är min insats funktion. 306 00:13:44,740 --> 00:13:46,661 Det är min last funktion för min ordboken. 307 00:13:46,661 --> 00:13:49,410 Nu är det lite av ett fusk, eftersom, vet du vad, det finns faktiskt 308 00:13:49,410 --> 00:13:52,920 omvänt snedstreck n s i slutet av orden att jag förmodligen skulle bli av, 309 00:13:52,920 --> 00:13:56,380 men det är inte ett problem eftersom PHP har en funktion som kallas chop som bokstavligen 310 00:13:56,380 --> 00:13:58,480 kotletter utanför ett tecken på slutet. 311 00:13:58,480 --> 00:13:59,400 Så inga problem där. 312 00:13:59,400 --> 00:14:02,199 Vi har gått vidare och faktiskt förkortat till just detta. 313 00:14:02,199 --> 00:14:05,240 Och nu skulle jag nog hålla koll storlek, så låt oss åtminstone göra this-- 314 00:14:05,240 --> 00:14:05,835 storlek ++. 315 00:14:05,835 --> 00:14:07,339 Jag kan göra det som förut. 316 00:14:07,339 --> 00:14:10,380 Och då detta är förmodligen kommer att fungera alldeles utmärkt, så det är return true. 317 00:14:10,380 --> 00:14:10,930 Klar. 318 00:14:10,930 --> 00:14:11,797 PSET 5. 319 00:14:11,797 --> 00:14:13,545 >> [LAUGHTER] 320 00:14:13,545 --> 00:14:14,420 >> David J. MALAN: OK. 321 00:14:14,420 --> 00:14:16,628 Vi kommer att göra det igen med nästa PSET också. 322 00:14:16,628 --> 00:14:18,730 Så hur är storleken? 323 00:14:18,730 --> 00:14:22,080 Jo, förhoppningsvis är om det här som du förväntar dig förra gången, 324 00:14:22,080 --> 00:14:24,460 även om jag måste göra denna dumma global sak. 325 00:14:24,460 --> 00:14:26,610 Det är bara en artefakt från språket design. 326 00:14:26,610 --> 00:14:28,450 >> Men kontrollen är lite mer intressant. 327 00:14:28,450 --> 00:14:31,420 Så om jag passerade i dollar underteckna ord, jag först 328 00:14:31,420 --> 00:14:34,060 vill ha tillgång till att den globala variabeln bord. 329 00:14:34,060 --> 00:14:36,700 Och nu om jag vill kontrollera om ett ord finns där, 330 00:14:36,700 --> 00:14:44,350 Jag kan bara säga om det är sant att Följande ligger i tabellen, 331 00:14:44,350 --> 00:14:49,957 sedan gå vidare och retur sant; annat, returnera false. 332 00:14:49,957 --> 00:14:51,180 Klar. 333 00:14:51,180 --> 00:14:52,440 Den andra hälften av PSET 5. 334 00:14:52,440 --> 00:14:54,540 >> Okej, så igen, jag är styckning några hörn. 335 00:14:54,540 --> 00:14:56,831 I rättvisans namn, jag borde nog bringa ytterligare några sekunder 336 00:14:56,831 --> 00:14:58,300 om detta genomförande. 337 00:14:58,300 --> 00:15:01,860 Och jag förmodligen inte skulle håna alla timmar du lägger på PSET så mycket. 338 00:15:01,860 --> 00:15:04,045 Så strtolower är en funktion. 339 00:15:04,045 --> 00:15:06,670 Något liknande existentialist i C, åtminstone för tecken, 340 00:15:06,670 --> 00:15:08,560 men PHP har fått en hel sträng version. 341 00:15:08,560 --> 00:15:11,226 >> Det kommer att tvinga allt till gemener, som vissa av er 342 00:15:11,226 --> 00:15:14,944 kan ha gjort att canonicalize vad du lägger i din ordlista. 343 00:15:14,944 --> 00:15:16,360 Och nu kan du göra det i C också. 344 00:15:16,360 --> 00:15:17,780 Detta har ingenting att göra med PHP. 345 00:15:17,780 --> 00:15:20,260 >> Men varje gång du har ett booleskt villkor, 346 00:15:20,260 --> 00:15:22,680 som något på nätet 10 där, vilket är endast 347 00:15:22,680 --> 00:15:27,145 kommer att utvärderas till sant eller falskt, och din om annat tydligt 348 00:15:27,145 --> 00:15:33,620 återvänder sant eller falskt, jag kunde helt enkelt verkligen göra detta sexigare 349 00:15:33,620 --> 00:15:38,360 och bara göra något sånt här. 350 00:15:38,360 --> 00:15:40,500 Så att det är min funktionskontroll. 351 00:15:40,500 --> 00:15:42,560 Höger om Boolean returnerar ett sant eller falskt, 352 00:15:42,560 --> 00:15:44,630 låt oss bara lämna tillbaka den direkt. 353 00:15:44,630 --> 00:15:47,340 >> Och det finns några andra tweaks Jag skulle kunna göra här och där. 354 00:15:47,340 --> 00:15:51,380 Load-- lasta, förresten, det är gjort. 355 00:15:51,380 --> 00:15:52,850 Inget att göra där. 356 00:15:52,850 --> 00:15:55,840 Sedan allt minne i PHP och många andra språk 357 00:15:55,840 --> 00:15:57,570 är faktiskt hanteras för dig. 358 00:15:57,570 --> 00:16:00,330 Så medan i C, som du lärt smärtsamt, 359 00:16:00,330 --> 00:16:04,700 något du malloc eller calloc eller realloc, du måste frigöra dig. 360 00:16:04,700 --> 00:16:08,770 Allt du fopen, du måste fclose, så att resurserna slutligen befriat 361 00:16:08,770 --> 00:16:11,690 och verktyg som Valgrind inte märke och inte klaga, 362 00:16:11,690 --> 00:16:13,570 vilket är en bra sak att köra på dem. 363 00:16:13,570 --> 00:16:16,190 >> Men visst, det måste vara någon fångst, eller hur? 364 00:16:16,190 --> 00:16:19,400 Annars vi typ av bortkastade en hel massa veckor. 365 00:16:19,400 --> 00:16:23,270 Så det finns någon av flera skäl varför vi liksom ta denna bana, 366 00:16:23,270 --> 00:16:24,440 men det finns en trade-off. 367 00:16:24,440 --> 00:16:25,820 Rätt, har detta varit tematiska. 368 00:16:25,820 --> 00:16:29,690 >> Så vad kanske en kompromiss Här rör sig, från C till PHP? 369 00:16:29,690 --> 00:16:33,250 Känns som alla vinner hittills annat än lite fulhet här eller där. 370 00:16:33,250 --> 00:16:34,040 Yeah. 371 00:16:34,040 --> 00:16:34,700 Vad är det? 372 00:16:34,700 --> 00:16:36,064 >> STUDENTEN [OHÖRBAR] minne. 373 00:16:36,064 --> 00:16:36,980 DAVID J. MALAN: Hastighet. 374 00:16:36,980 --> 00:16:37,479 OK. 375 00:16:37,479 --> 00:16:40,720 Tja, min hastighet var ganska snabbt. 376 00:16:40,720 --> 00:16:42,020 Rätt? 377 00:16:42,020 --> 00:16:44,320 Men snabbhet i utförandet av programmet? 378 00:16:44,320 --> 00:16:45,580 OK, så det är en rättvis poäng. 379 00:16:45,580 --> 00:16:50,930 >> Så när det skulle hända, jag i förväg cued upp både min försök lösning, den ena 380 00:16:50,930 --> 00:16:53,510 Jag hade på den stora styrelsen var ett försök baserad lösning, 381 00:16:53,510 --> 00:16:55,510 och jag har det i den här katalogen här. 382 00:16:55,510 --> 00:16:58,510 Så jag i ett ögonblick, kan jag gå vidare och kör detta på King James Bible, 383 00:16:58,510 --> 00:16:59,657 slå Enter. 384 00:16:59,657 --> 00:17:01,990 Och det är förhoppningsvis rätt genomförande i slutet, 385 00:17:01,990 --> 00:17:05,109 ger mig tid i av 0,38 sekunder för att 386 00:17:05,109 --> 00:17:07,270 en något godtycklig exempel. 387 00:17:07,270 --> 00:17:09,270 >> Och om jag nu går in i det här andra terminalfönster 388 00:17:09,270 --> 00:17:14,569 här där jag öppnade första gedit, låt mig gå in i dagens code-- som, återigen, 389 00:17:14,569 --> 00:17:19,650 är i den här katalogen här-- och Låt mig gå vidare och köra speller. 390 00:17:19,650 --> 00:17:23,470 Så bara för att vara tydlig, detta är PHP version. 391 00:17:23,470 --> 00:17:25,170 Jag bara visar toppen av det här. 392 00:17:25,170 --> 00:17:32,020 >> Så om jag gör speller av tilde CS50 Pset 5 texter, King James anger. 393 00:17:32,020 --> 00:17:39,700 394 00:17:39,700 --> 00:17:43,050 Det är fortfarande snabbare än att skriva det i C, men den totala tiden 395 00:17:43,050 --> 00:17:47,650 är, meddelande, 0,93, medan min C-baserade genomförande var 0,38. 396 00:17:47,650 --> 00:17:49,110 Så det är en icke-trivial skillnad. 397 00:17:49,110 --> 00:17:51,100 >> Och detta är bara på en fil. 398 00:17:51,100 --> 00:17:53,480 Om du skulle köra två program kontra den stora styrelsen 399 00:17:53,480 --> 00:17:56,510 och har en hel massa ingångar testas, skulle detta säkerligen lägga upp. 400 00:17:56,510 --> 00:18:00,310 Och om vi hade ännu större datamängder, även detta skulle lägga upp allt mer. 401 00:18:00,310 --> 00:18:04,820 Så ja, betala viss pris av hastighet är fallet. 402 00:18:04,820 --> 00:18:05,470 Vad mer? 403 00:18:05,470 --> 00:18:08,000 404 00:18:08,000 --> 00:18:08,860 Yeah? 405 00:18:08,860 --> 00:18:10,340 >> STUDENT: Mängd RAM användning. 406 00:18:10,340 --> 00:18:11,756 >> DAVID J. MALAN: Mängd RAM användning. 407 00:18:11,756 --> 00:18:15,380 Så jag gav inte en sekund tänkte när du skriver detta PHP 408 00:18:15,380 --> 00:18:17,300 version om hur mycket minne var jag använder. 409 00:18:17,300 --> 00:18:22,080 Jag är helt skjuta upp det till PHP sig själv och den som skrev det programmet. 410 00:18:22,080 --> 00:18:24,500 Och det kan vara OK, men om jag faktiskt riktigt 411 00:18:24,500 --> 00:18:28,420 bryr sig om att klämma så mycket prestanda ut ur mitt program eller från min hemsida 412 00:18:28,420 --> 00:18:31,150 eller från vilket verktyg Jag bygger, kanske 413 00:18:31,150 --> 00:18:33,310 PHP, ja, inte är rätt språk. 414 00:18:33,310 --> 00:18:36,330 >> Och i själva verket är det därför, för Exempelvis har många webb servers-- 415 00:18:36,330 --> 00:18:38,980 själva programmen som servera web content-- 416 00:18:38,980 --> 00:18:41,810 är inte skriven i PHP eller i Python eller Ruby. 417 00:18:41,810 --> 00:18:44,630 De är skrivna, liksom Du kommer nu göra med pset 6, 418 00:18:44,630 --> 00:18:48,120 i C, så att du kan klämma varje uns av prestanda ur det 419 00:18:48,120 --> 00:18:50,780 och verkligen utöva finkornig kontroll över vad som är 420 00:18:50,780 --> 00:18:52,980 pågår under huva och inte bara ta det 421 00:18:52,980 --> 00:18:54,890 för givet någon högre nivå datastruktur. 422 00:18:54,890 --> 00:18:58,071 >> Betrakta, trots allt, den som i PHP implementeras 423 00:18:58,071 --> 00:19:00,070 att föreställningen om en hash table-- det är faktiskt mer 424 00:19:00,070 --> 00:19:04,260 korrekt kallas en associativ array-- gör han eller hon har någon aning vad för slags 425 00:19:04,260 --> 00:19:07,090 ingångar du kommer att bli ibruktagande strukturen? 426 00:19:07,090 --> 00:19:08,260 Så uppenbarligen inte, eller hur? 427 00:19:08,260 --> 00:19:10,340 Det är ett generiskt verktyg i verktygslådan som är 428 00:19:10,340 --> 00:19:13,430 ges till alla som vill att använda det, och så säkert det 429 00:19:13,430 --> 00:19:17,680 Det går inte att optimeras i slutändan för exakt vad du vill göra. 430 00:19:17,680 --> 00:19:21,180 >> Så handels offs-- utvecklingstid kanske skiljer sig åt, prestanda kan variera, 431 00:19:21,180 --> 00:19:23,120 komplexitet eller minnesanvändning kan skilja sig. 432 00:19:23,120 --> 00:19:24,820 Och så vad du hittar alltmer är att det finns 433 00:19:24,820 --> 00:19:26,570 kommer att vara annorlunda verktyg för handeln. 434 00:19:26,570 --> 00:19:31,160 Och i själva verket för en super majoritet av människors sista projekt i denna klass, 435 00:19:31,160 --> 00:19:34,360 tro det eller ej, är C kommer inte att vara rätt språk att använda. 436 00:19:34,360 --> 00:19:37,880 >> Och i själva verket en av de hämtställen i slutändan för någon klass som denna 437 00:19:37,880 --> 00:19:40,510 är att få dig att tänka på, Tja, vad ska man dra av 438 00:19:40,510 --> 00:19:42,710 hyllan när du vill att lösa några problem. 439 00:19:42,710 --> 00:19:46,720 Och faktiskt, vi över den här bron ännu mer när vi tittar på fler språk 440 00:19:46,720 --> 00:19:47,920 även efter idag. 441 00:19:47,920 --> 00:19:50,530 >> Så låt oss övergång nu kanske en mer bekant kontext 442 00:19:50,530 --> 00:19:52,480 för att använda ett språk som PHP. 443 00:19:52,480 --> 00:19:56,720 Det är ganska vanligt att använda på kommandoraden, skriver manus 444 00:19:56,720 --> 00:19:59,050 som jag gjorde, men det är mycket, mycket vanligare. 445 00:19:59,050 --> 00:20:02,350 Och det var avsett att användas i form av filer som vanligtvis slutar 446 00:20:02,350 --> 00:20:05,060 i .php-- men det är inte en prerequisite-- 447 00:20:05,060 --> 00:20:07,990 att själva skapa webbinnehåll. 448 00:20:07,990 --> 00:20:11,310 >> Så låt mig gå vidare och öppna ett par exempel som jag förberett i förväg. 449 00:20:11,310 --> 00:20:15,100 Och dessa är faktiskt typ av sann berättelser i att en av de första saker 450 00:20:15,100 --> 00:20:18,200 Jag någonsin gjorde mig själv efter målgång CS50 och kanske, tänker jag, 451 00:20:18,200 --> 00:20:21,350 CS51 år sedan är min rumskamrat och jag hjälpte 452 00:20:21,350 --> 00:20:24,320 att köra recentior intramural sportprogram, som, vid den tiden, 453 00:20:24,320 --> 00:20:28,610 hade förstaårselev registrering för olika sport genom att fylla i ett papper, 454 00:20:28,610 --> 00:20:31,800 som det kallades, promenader över gården till Wigglesworth, 455 00:20:31,800 --> 00:20:34,030 och släppa den på något Proctor dörr släpp. 456 00:20:34,030 --> 00:20:37,210 Och då skulle han eller hon går igenom dem och sedan faktiskt maila oss manuellt 457 00:20:37,210 --> 00:20:39,140 att vi var registrerade för en viss sport. 458 00:20:39,140 --> 00:20:41,166 >> Så klart, en möjlighet för förbättringar. 459 00:20:41,166 --> 00:20:44,040 Dessa dagar, kan du vända dig till just Google Formulär, men tillbaka i dag, 460 00:20:44,040 --> 00:20:46,914 Vi hade faktiskt nå for-- här var inte ens så länge ago-- når 461 00:20:46,914 --> 00:20:49,410 för ett programmerings språk som inte var PHP. 462 00:20:49,410 --> 00:20:51,200 Vid den tiden var det något som kallas Perl, 463 00:20:51,200 --> 00:20:52,890 som har gått ur modet sedan. 464 00:20:52,890 --> 00:20:54,160 Men tanken är densamma. 465 00:20:54,160 --> 00:20:58,940 >> Och jag satt i stort sett ner för att försöka till port går Perl versioner PHP, 466 00:20:58,940 --> 00:21:03,710 men fullt ansvarsfriskrivning, inte gav varje tanke till estetik ännu. 467 00:21:03,710 --> 00:21:04,960 Så här är en webbsida. 468 00:21:04,960 --> 00:21:05,670 Detta är en fil. 469 00:21:05,670 --> 00:21:09,470 Om jag zoomar in, dess till synes kallas froshim0.php 470 00:21:09,470 --> 00:21:12,060 bara för att det är vår första exempel i denna serie. 471 00:21:12,060 --> 00:21:15,970 Och märker att den har vad som verkar att vara en mycket ful HTML-formulär, 472 00:21:15,970 --> 00:21:18,680 utan en form är intressant eftersom det tillåter 473 00:21:18,680 --> 00:21:21,910 mig att ge användarens input till webbläsaren. 474 00:21:21,910 --> 00:21:27,730 >> Nu förra gången när vi hade en form, för att vem vi lämna vår frågeparameter, 475 00:21:27,730 --> 00:21:30,450 kön parametern som det hette? 476 00:21:30,450 --> 00:21:31,330 Så för att Google, eller hur? 477 00:21:31,330 --> 00:21:34,090 Vi punted helt på idén om gör något med den ingången. 478 00:21:34,090 --> 00:21:36,160 >> Men idag börjar vi producerar något. 479 00:21:36,160 --> 00:21:39,420 Och beteendet jag ska se här initialt är ganska trivialt. 480 00:21:39,420 --> 00:21:42,980 David, jag ska bocka av kön här, säger Matthews här. 481 00:21:42,980 --> 00:21:43,800 Jag kommer inte att vara kapten. 482 00:21:43,800 --> 00:21:45,410 Jag kommer att klicka på Registrera. 483 00:21:45,410 --> 00:21:50,720 Och märker att webbadressen har ändrats för att registrera-0.php, 484 00:21:50,720 --> 00:21:52,310 och sedan finns det denna fula text här. 485 00:21:52,310 --> 00:21:54,460 Jag gav ingen tanke på formateringen av detta. 486 00:21:54,460 --> 00:21:59,900 >> Men det som är intressant är att tre värden tydligen gått in. 487 00:21:59,900 --> 00:22:02,960 Det här är PHP: s slags ekvivalent med printf-- 488 00:22:02,960 --> 00:22:06,330 Vi får se vad det egentligen heter i en bit-- som bara skriver ut 489 00:22:06,330 --> 00:22:08,300 vad du gått in i den. 490 00:22:08,300 --> 00:22:11,414 Så detta tyder på att den formen hade åtminstone tre områden till det, 491 00:22:11,414 --> 00:22:12,580 och du såg mig skriva in dem. 492 00:22:12,580 --> 00:22:15,739 En var mitt namn, en var kön, en var sovsal. 493 00:22:15,739 --> 00:22:18,780 Och kaptenen inte ens får skickas till servern eftersom jag inte kontrollera det. 494 00:22:18,780 --> 00:22:22,150 >> Så detta är att säga tydligen, när du skickar in saker på webben, 495 00:22:22,150 --> 00:22:26,830 inte bara gör URL ibland change-- ibland inte. 496 00:22:26,830 --> 00:22:30,330 Faktum är filnamnet ändrat, men det som är frånvarande från URL 497 00:22:30,330 --> 00:22:32,861 att vi såg förra gången med Google. 498 00:22:32,861 --> 00:22:33,360 Yeah? 499 00:22:33,360 --> 00:22:34,380 >> STUDENT: Nej frågesträng 500 00:22:34,380 --> 00:22:35,220 >> DAVID J. MALAN: Det finns ingen frågesträngen. 501 00:22:35,220 --> 00:22:37,270 Det finns inget frågetecken något. 502 00:22:37,270 --> 00:22:40,050 Det finns inget frågetecken q lika katter, som vi gjorde förra gången. 503 00:22:40,050 --> 00:22:42,170 Och det finns definitivt ingen frågetecken Namnet är 504 00:22:42,170 --> 00:22:46,310 David eller studentrummet lika Matthews, så där är att alla på väg? 505 00:22:46,310 --> 00:22:51,290 >> Nåväl, låt mig gå tillbaka till gedit hit och öppna upp det första av dessa filer 506 00:22:51,290 --> 00:22:57,020 i mitt vhost, lokala värden, allmän katalog här och gå in froshim0. 507 00:22:57,020 --> 00:23:02,060 Så visar det sig att nästan allt på denna sida är bara HTML. 508 00:23:02,060 --> 00:23:05,410 Och detta kan vara obekant för er, men det kommer snart att bli mer så med PSET 6 509 00:23:05,410 --> 00:23:07,370 och PSET 7 och PSET 8. 510 00:23:07,370 --> 00:23:09,160 Men detta är bara en HTML-sida. 511 00:23:09,160 --> 00:23:12,400 >> Och det intressanta saker verkar vara här. 512 00:23:12,400 --> 00:23:16,290 En form tagg vars verkan attribut har ett värde av register 0. 513 00:23:16,290 --> 00:23:18,890 Det är därför när jag in detta går det till den filen. 514 00:23:18,890 --> 00:23:20,620 Men metoden är annorlunda today-- inlägg. 515 00:23:20,620 --> 00:23:23,120 Så visar det sig att det är åtminstone två metoder på nätet som används 516 00:23:23,120 --> 00:23:24,911 för att sända information från webbläsaren till servern. 517 00:23:24,911 --> 00:23:25,980 Få uttrycker det i webbadressen. 518 00:23:25,980 --> 00:23:27,950 Post uttrycker det på annat håll. 519 00:23:27,950 --> 00:23:30,570 Och när och varför kanske du faktiskt vill ha en hemsida 520 00:23:30,570 --> 00:23:34,110 att använda tjänsten då istället av få, bara intuitivt? 521 00:23:34,110 --> 00:23:37,080 Varje webbplats. 522 00:23:37,080 --> 00:23:42,010 Vilken typ av data ska gick genom slutledning nu via post till skillnad 523 00:23:42,010 --> 00:23:45,184 att få, om vi har sett de två skillnader? 524 00:23:45,184 --> 00:23:46,350 STUDENTEN [OHÖRBAR] säker. 525 00:23:46,350 --> 00:23:47,790 DAVID J. MALAN: Om du vill något att vara säker. 526 00:23:47,790 --> 00:23:50,360 Så du kan skriva in ett lösenord på en webbplats, ett kreditkort 527 00:23:50,360 --> 00:23:53,030 på en webbplats skulle typ av dessa suboptimala 528 00:23:53,030 --> 00:23:56,220 om webbläsaren sätta det värdet inne i webbadressen. 529 00:23:56,220 --> 00:23:57,680 Varför? 530 00:23:57,680 --> 00:24:00,059 Du ser det, vilket inte verkar vara en så stor sak, 531 00:24:00,059 --> 00:24:03,350 men oddsen är du ganska ofta gå borta från datorn eller använda dator 532 00:24:03,350 --> 00:24:05,310 labb, och så någon annan eller till och med en rumskompis 533 00:24:05,310 --> 00:24:08,220 kan lätt gå upp och se att privat information. 534 00:24:08,220 --> 00:24:10,220 När du skickar ett e-postmeddelande via webben, du förmodligen 535 00:24:10,220 --> 00:24:12,350 vill inte att uppgifter slut upp i webbadressen också. 536 00:24:12,350 --> 00:24:15,266 Och så finns det någon av flera skäl varför vi kanske vill lägga den här. 537 00:24:15,266 --> 00:24:18,610 Och photos-- rätt, jag kan inte ens riktigt föreställa sig hur man skulle ta en bild, 538 00:24:18,610 --> 00:24:21,480 som en JPEG, och lägg den i en URL. 539 00:24:21,480 --> 00:24:22,330 Du kan göra det. 540 00:24:22,330 --> 00:24:25,840 Det finns olika sätt att koda det, men det är bara inte okomplicerat så. 541 00:24:25,840 --> 00:24:29,030 >> Så registrera 0 är faktiskt mycket underwhelming. 542 00:24:29,030 --> 00:24:31,610 Allt det står bokstavligt är det. 543 00:24:31,610 --> 00:24:35,910 Den skriver ut på insidan av vissa HTML taggar följande. 544 00:24:35,910 --> 00:24:38,640 Jag har en PHP-tagg här kapslade i en pre-tagg. 545 00:24:38,640 --> 00:24:42,300 "Pre" betyder bara pre-formaterad text, mono åtskilda, som en skrivmaskin. 546 00:24:42,300 --> 00:24:44,836 >> Printr är ett tryck rekursiv funktion. 547 00:24:44,836 --> 00:24:46,710 Och så finns det här intressant sak här. 548 00:24:46,710 --> 00:24:48,835 Och vi ska återkomma till detta eftersom det finns andra, 549 00:24:48,835 --> 00:24:51,140 men dollartecken streck post verkar vara 550 00:24:51,140 --> 00:24:56,110 en variabel i PHP, där vad som helst du skickar från webbläsaren till servern 551 00:24:56,110 --> 00:24:58,040 får lagras för dig. 552 00:24:58,040 --> 00:25:00,930 Och vi får se hur man tar sig till att information inom kort. 553 00:25:00,930 --> 00:25:04,000 >> Men först, låt oss gå tillbaka till en något annorlunda exempel. 554 00:25:04,000 --> 00:25:09,050 Att gå in register-- eller snarare, froshims1.php, 555 00:25:09,050 --> 00:25:10,470 som ser lite annorlunda ut. 556 00:25:10,470 --> 00:25:12,670 Jag tog lite mer insats med formatering, 557 00:25:12,670 --> 00:25:14,370 även om det är fortfarande ganska ful. 558 00:25:14,370 --> 00:25:16,990 Men jag kommer att gå vidare och skriv in "David" nu. 559 00:25:16,990 --> 00:25:17,850 Male. 560 00:25:17,850 --> 00:25:19,360 Vi ska kolla "kapten" den här gången. 561 00:25:19,360 --> 00:25:20,660 Vi ska göra Matthews. 562 00:25:20,660 --> 00:25:22,430 Och registrera dig. 563 00:25:22,430 --> 00:25:24,110 >> Och den här gången står det, hm, inte riktigt. 564 00:25:24,110 --> 00:25:26,180 Okej, så vad är registrera 1? 565 00:25:26,180 --> 00:25:30,509 Låt mig gå in i öppna register 1 och-- hm. 566 00:25:30,509 --> 00:25:32,300 Okej, så det här är intressant, och detta 567 00:25:32,300 --> 00:25:34,880 är en språngbräda nu mot mer intressanta program. 568 00:25:34,880 --> 00:25:38,970 >> Lägg märke till toppen av denna fil har en PHP-tagg samt några kommentarer. 569 00:25:38,970 --> 00:25:42,590 Och dessa är, för nu, en distraktion så låt oss bara bli av med dessa synpunkter 570 00:25:42,590 --> 00:25:47,070 precis som de är i C. Och jag hävdar med denna del av koden med en kommentar 571 00:25:47,070 --> 00:25:49,280 att denna kod är validera inlämning. 572 00:25:49,280 --> 00:25:51,690 >> Tja, visar det sig att variabler som dollartecken 573 00:25:51,690 --> 00:25:53,739 streck inlägget är kallas super globals. 574 00:25:53,739 --> 00:25:55,530 De är som dessa särskilda globala variabler 575 00:25:55,530 --> 00:25:58,840 som är bara rund närvarande tillgänglig inom ditt program. 576 00:25:58,840 --> 00:26:03,870 Och du kan använda klammer notation till index i dem inte använder siffror 577 00:26:03,870 --> 00:26:07,460 som 0, 1, 2, 3, men faktiska ord. 578 00:26:07,460 --> 00:26:12,100 >> Så du kan tänka på dollartecken streck tjänst som en slags hashtabell 579 00:26:12,100 --> 00:26:15,920 att du skulle kunna passera en nyckel till, en uppslag ord i-mellan hakparenteserna, 580 00:26:15,920 --> 00:26:19,370 och det kommer att ge dig tillbaka värde som användaren faktiskt tillhandahålls. 581 00:26:19,370 --> 00:26:21,210 PHP har en funktion kallas tomt som bara 582 00:26:21,210 --> 00:26:23,720 säger ja eller nej, det här variabeln är tom eller inte. 583 00:26:23,720 --> 00:26:27,250 Vi har dessa dubbla streck, vilket betyder bara, eller, som i C. 584 00:26:27,250 --> 00:26:31,740 >> Så i själva verket är denna linje 4 bara säger om användaren inte gav ett namn 585 00:26:31,740 --> 00:26:36,540 eller gav inte ett kön eller inte ge en sovsal, gå vidare och omdirigera honom 586 00:26:36,540 --> 00:26:38,184 eller henne via denna linje här. 587 00:26:38,184 --> 00:26:40,600 Så det här är lite kryptiskt, men detta innebär bara bokstavligen 588 00:26:40,600 --> 00:26:43,330 gå tillbaka till denna plats, så det punts användaren 589 00:26:43,330 --> 00:26:45,420 tillbaka till oavsett var han eller hon kom från. 590 00:26:45,420 --> 00:26:47,880 Men det är lite klumpig i att jag hårt kodad den. 591 00:26:47,880 --> 00:26:52,150 >> Men tänk om detta om tillstånd utvärderar inte till true? 592 00:26:52,150 --> 00:26:55,790 Vad händer om användaren gav mig hans eller hennes namn och studentrummet och kön? 593 00:26:55,790 --> 00:26:58,540 Att om villkoret inte kommer att utvärderas till true, 594 00:26:58,540 --> 00:27:00,650 så jag inte träffar avfarten i linje 7. 595 00:27:00,650 --> 00:27:01,680 Så vad händer? 596 00:27:01,680 --> 00:27:03,880 Och detta är vad som är intressant med PHP. 597 00:27:03,880 --> 00:27:07,470 >> Du kan släppa in och ut PHP-läge, så att säga. 598 00:27:07,470 --> 00:27:10,985 Om du vill ha lite kod som ska köras, Du kan öppna och stänga en PHP-tagg 599 00:27:10,985 --> 00:27:13,010 och sätta koden där som jag har gjort här. 600 00:27:13,010 --> 00:27:16,810 Så snart du stänger PHP-taggen, servern 601 00:27:16,810 --> 00:27:19,407 är bara att spotta ut vad du lagt där. 602 00:27:19,407 --> 00:27:21,740 Och faktiskt, var denna del av den ursprungliga utformningen av PHP, 603 00:27:21,740 --> 00:27:25,280 på gott och ont, det var sammanblandning av kod och uppmärkning 604 00:27:25,280 --> 00:27:25,920 språk. 605 00:27:25,920 --> 00:27:28,670 Och vi ser att detta mycket snabbt ankommer i en enda röra. 606 00:27:28,670 --> 00:27:31,280 Och så ska vi göra bättre än detta i slutändan, men bara 607 00:27:31,280 --> 00:27:35,620 märker den lätthet med vilken jag är faktiskt kunna utföra en viss logik. 608 00:27:35,620 --> 00:27:37,440 >> Men fortfarande lite underwhelming. 609 00:27:37,440 --> 00:27:41,210 Låt oss öppna upp version två av Frosh IM, vilket 610 00:27:41,210 --> 00:27:44,270 tydligen lämnar till register2.php. 611 00:27:44,270 --> 00:27:47,600 Så här filen är faktiskt går att se nästan samma. 612 00:27:47,600 --> 00:27:50,780 Jag ska åka till Frosh IM 2. 613 00:27:50,780 --> 00:27:53,050 Men i Frosh IM 2, låt oss se vad som händer. 614 00:27:53,050 --> 00:27:58,110 >> David, klickar du på knappen, så det kallas; Matthews, ingen kapten. 615 00:27:58,110 --> 00:27:59,230 Registrera. 616 00:27:59,230 --> 00:28:00,130 Du är registrerad. 617 00:28:00,130 --> 00:28:00,700 Inte riktigt. 618 00:28:00,700 --> 00:28:02,574 Oh vänta, vi gjorde bara som exempel, inte vi? 619 00:28:02,574 --> 00:28:04,520 Okej, stand by. 620 00:28:04,520 --> 00:28:06,602 Vi ska göra de tre. 621 00:28:06,602 --> 00:28:08,560 Klart något är om att hända med Gmail. 622 00:28:08,560 --> 00:28:09,600 Vi ska komma dit. 623 00:28:09,600 --> 00:28:11,900 >> Så Frosh IMs 3 ser ut så här. 624 00:28:11,900 --> 00:28:13,050 Inget annat. 625 00:28:13,050 --> 00:28:19,850 Men när jag gör David, manlig, Matthews, och registrera, denna tredje och slutliga versionen 626 00:28:19,850 --> 00:28:22,230 påståenden, helt enkelt, du registreras egentligen. 627 00:28:22,230 --> 00:28:23,560 Det blir liksom ingen betydelse. 628 00:28:23,560 --> 00:28:25,600 Men jag hävdar med detta tredje och slutliga versionen 629 00:28:25,600 --> 00:28:30,610 Jag har nu återskapat exakt vad min rumskamrat och jag byggde för Frosh IM 630 00:28:30,610 --> 00:28:31,731 program år sedan. 631 00:28:31,731 --> 00:28:32,480 Och det var enkelt. 632 00:28:32,480 --> 00:28:34,330 Det fanns ingen databas, ingen Excel-ark. 633 00:28:34,330 --> 00:28:36,450 Men ännu viktigare, det fanns inga mer papper 634 00:28:36,450 --> 00:28:42,520 eftersom det vi gjorde med det här programmet var att faktiskt maila proctor, som 635 00:28:42,520 --> 00:28:44,530 var tidigare emot dessa saker via formulär. 636 00:28:44,530 --> 00:28:48,890 >> Och tydligen har vi programmerat detta i ett sådant sätt att när någon registrerar, 637 00:28:48,890 --> 00:28:52,470 John Harvard konto e-post till proctor-- eller sig själv i det här fallet, 638 00:28:52,470 --> 00:28:55,960 John Harvard-- med följande text-- "Den här personen just registrerats." 639 00:28:55,960 --> 00:29:00,560 Namn är David, är kapten tom; kön, manligt; och studentrummet, Matthews. 640 00:29:00,560 --> 00:29:01,560 >> Så vad hände där? 641 00:29:01,560 --> 00:29:05,360 Tja, filen i fråga här är tydligen register3.php. 642 00:29:05,360 --> 00:29:09,080 Och om jag öppnar den här, kommer du att se både kraften i koden så här 643 00:29:09,080 --> 00:29:12,380 och dessutom, ärligt talat, den otrygghet av ett system som e-postadress. 644 00:29:12,380 --> 00:29:16,290 Jag har just effektivt låtsades vara John Harvard på följande sätt. 645 00:29:16,290 --> 00:29:20,920 >> Jag har den öppna php-taggen där uppe, vilket bara säger här kommer lite PHP-kod. 646 00:29:20,920 --> 00:29:23,155 Här nere, visar sig att det är bibliotek i PHP. 647 00:29:23,155 --> 00:29:26,410 Du bara behöver inte Inkludera rubrik filer som mycket. 648 00:29:26,410 --> 00:29:28,900 Du får mer med diskbänk, så att säga. 649 00:29:28,900 --> 00:29:31,820 >> Men den här gången i rad 4, gör jag vill specialbibliotek som heter 650 00:29:31,820 --> 00:29:36,087 PHP Mailer, vilket är något du kan installera gratis i många system. 651 00:29:36,087 --> 00:29:37,920 Här nere jag validera inlämnande bara 652 00:29:37,920 --> 00:29:40,540 genom att kontrollera gjorde användaren ger mig ett namn, ett kön, och en sovsal. 653 00:29:40,540 --> 00:29:44,130 Och i så fall gå vidare och initiera en mailer. 654 00:29:44,130 --> 00:29:47,020 >> Du kan tänka på detta som en kodrad som bara fördelar. 655 00:29:47,020 --> 00:29:48,950 Det är som malloc, men det är lite sexigare 656 00:29:48,950 --> 00:29:51,790 eftersom du nämner inte bara malloc och några generiska nummer. 657 00:29:51,790 --> 00:29:55,030 Du säger ge mig en av dessa, ge mig en ny en av dessa. 658 00:29:55,030 --> 00:29:57,950 >> Och om du har programmerat in Java eller C ++ eller andra språk, 659 00:29:57,950 --> 00:29:59,130 du kanske har sett det här. 660 00:29:59,130 --> 00:30:01,840 Men den korta av den, om obekant, denna linje 661 00:30:01,840 --> 00:30:05,410 sätter i dollartecken mail en speciell struct kallas 662 00:30:05,410 --> 00:30:08,731 ett objekt som har inbyggd e-post funktionalitet. 663 00:30:08,731 --> 00:30:10,355 Och faktiskt, märke och liknande syntax. 664 00:30:10,355 --> 00:30:11,900 >> Detta är inte en pekare, per se. 665 00:30:11,900 --> 00:30:13,990 PHP bara använder samma syntax. 666 00:30:13,990 --> 00:30:17,660 Denna linje säger bruk SMTP-- Simple Mail Transfer 667 00:30:17,660 --> 00:30:20,900 Protokoll, vilket är precis det protokoll som används för att skicka e-post. 668 00:30:20,900 --> 00:30:24,240 Detta är att ange användning Harvards SMTP-server, som 669 00:30:24,240 --> 00:30:25,830 är någonstans här på campus. 670 00:30:25,830 --> 00:30:28,480 >> Detta säger vad TCP portnummer att prata med, 671 00:30:28,480 --> 00:30:31,650 och jag bara tänkte att genom googla eller genom att be helpdesk. 672 00:30:31,650 --> 00:30:34,640 Och då eftersom Harvard använder en del systemsäkerhet på post server-- 673 00:30:34,640 --> 00:30:37,060 åtminstone för att kryptera trafik mellan dig och det, 674 00:30:37,060 --> 00:30:41,380 även om vem som helst kan skicka till det-- Jag kommer att slå på TLS-protokollet 675 00:30:41,380 --> 00:30:42,710 för att hålla detta säkert. 676 00:30:42,710 --> 00:30:44,730 >> Men det är där saker få lite skrämmande. 677 00:30:44,730 --> 00:30:47,970 Jag kan bara godtyckligt säga att jag är jharvard, 678 00:30:47,970 --> 00:30:51,930 och jag kan bara godtyckligt maila mig här. 679 00:30:51,930 --> 00:30:55,650 Och då kan jag ange en ämne med denna linje här. 680 00:30:55,650 --> 00:30:58,460 >> Och detta ser bara ful, men det är bara en massa sammanfogning. 681 00:30:58,460 --> 00:31:04,480 Det visade sig att PHP har en super bra symbol, som vissa språk, punktoperatorn, 682 00:31:04,480 --> 00:31:07,340 som bara bokstavligen sammanfogar strängen efter strängen efter sträng, 683 00:31:07,340 --> 00:31:09,810 och du behöver inte malloc eller siffra ut den totala längden av strängen. 684 00:31:09,810 --> 00:31:10,820 Du gör bara det. 685 00:31:10,820 --> 00:31:15,220 Och faktiskt, eftersom jag sammanfoga i alla dessa saker med dessa punkter, 686 00:31:15,220 --> 00:31:18,330 det är därför den e jag skickade såg ut som den gjorde. 687 00:31:18,330 --> 00:31:20,610 >> Och så slutligen här, jag skicka e-post. 688 00:31:20,610 --> 00:31:22,580 Så om detta är falskt, Jag kommer bara att dö, 689 00:31:22,580 --> 00:31:25,680 som är en funktion som bara tryck till skärmen några felmeddelande. 690 00:31:25,680 --> 00:31:29,170 Men det är i själva verket anropa sändfunktionen. 691 00:31:29,170 --> 00:31:31,780 Annars, om allt detta misslyckas, Det omdirigerar mig tillbaka hit. 692 00:31:31,780 --> 00:31:34,050 >> Och varför gjorde jag ser att Jag är registrerad egentligen? 693 00:31:34,050 --> 00:31:36,110 Tja, hände det här. 694 00:31:36,110 --> 00:31:38,170 Så jag tar upp detta för ett par anledningar. 695 00:31:38,170 --> 00:31:41,542 >> Ett, det är precis så om du bygger någon hemsida för ett slutprojekt 696 00:31:41,542 --> 00:31:44,000 eller för den verkliga världen är detta hur du skickar e-post påminnelser 697 00:31:44,000 --> 00:31:45,924 till dina kunder eller dina prenumeranter. 698 00:31:45,924 --> 00:31:47,590 Detta är hur du skickar påminnelser om lösenord. 699 00:31:47,590 --> 00:31:50,760 Detta är hur du skickar folk meddelanden att de har en ny Facebook 700 00:31:50,760 --> 00:31:52,990 meddelande väntar eller något liknande. 701 00:31:52,990 --> 00:31:55,010 >> Men det talar också för att det faktum att detta kunde 702 00:31:55,010 --> 00:31:58,160 har varit mycket bra från Davin eller någon annan. 703 00:31:58,160 --> 00:32:00,567 Och jag säger detta slags med ett leende eftersom jag är 704 00:32:00,567 --> 00:32:03,400 helt säker på vad som händer genom flera av dina sinnen på denna punkt. 705 00:32:03,400 --> 00:32:11,910 Men detta är en av dem gör som jag säger, inte som jag gör typ av saker, 706 00:32:11,910 --> 00:32:14,480 eftersom det är trivialt att förfalska e-post som denna. 707 00:32:14,480 --> 00:32:16,480 Men som ni kanske har sett eller läsa i Crimson, 708 00:32:16,480 --> 00:32:18,271 sen är det också ganska trivialt för människor 709 00:32:18,271 --> 00:32:20,050 att spåra dem tillbaka till viss ursprung. 710 00:32:20,050 --> 00:32:23,790 Och fråga mig lite tid, kanske vid CS50 lunch, hur jag först 711 00:32:23,790 --> 00:32:27,080 bekantat mycket nära nästan till ed ombord många år 712 00:32:27,080 --> 00:32:30,890 sedan när jag upptäckte hur internet fungerade. 713 00:32:30,890 --> 00:32:36,940 Så på något case-- något efter ed styrelsen gjorde. 714 00:32:36,940 --> 00:32:42,300 >> Det i så fall finns det en massa super globals, 715 00:32:42,300 --> 00:32:45,960 som de kallas här, en av vilka Vi saw-- dollartecken streck inlägg. 716 00:32:45,960 --> 00:32:49,530 Det finns en motsvarighet som kallas get, som är där grejer från en URL 717 00:32:49,530 --> 00:32:50,690 slutar upp att gå. 718 00:32:50,690 --> 00:32:54,051 Och det finns en hel massa andra, too-- session och server och kaka. 719 00:32:54,051 --> 00:32:55,800 Vi ska återkomma till cookie en annan gång, 720 00:32:55,800 --> 00:33:01,340 men session är typ av cool eftersom rätt now-- fram now-- 721 00:33:01,340 --> 00:33:06,350 allt vi gjort med en webbläsare är en slags statslösa, så att säga. 722 00:33:06,350 --> 00:33:10,060 Jag kan klicka runt, tillgång filer på servern, något 723 00:33:10,060 --> 00:33:13,500 händer på skärmen, men därefter stänger förbindelsen. 724 00:33:13,500 --> 00:33:17,450 Internet Explorer eller Firefox ikonen slutar spinning 725 00:33:17,450 --> 00:33:20,340 och du bara se vad den webbsidan innehåller. 726 00:33:20,340 --> 00:33:23,530 >> Så HTTP är statslös i det när det gör en anslutning, 727 00:33:23,530 --> 00:33:25,050 får vissa uppgifter, det är det. 728 00:33:25,050 --> 00:33:29,940 Inget mer anslutning, till skillnad från Skype, till skillnad från Facetime, till skillnad Gchat, som 729 00:33:29,940 --> 00:33:32,180 upprätthåller ett konstant anslutning till servern. 730 00:33:32,180 --> 00:33:34,650 Webben är i grunden bortkopplad, även om vi kan 731 00:33:34,650 --> 00:33:36,630 se snart hur Vi kan simulera saker 732 00:33:36,630 --> 00:33:39,300 som Facebook chat och Gchat, som kan upprätthålla ett illusion-- 733 00:33:39,300 --> 00:33:41,680 eller faktiskt behålla en ständig förbindelse med hjälp 734 00:33:41,680 --> 00:33:43,270 modernare teknik. 735 00:33:43,270 --> 00:33:49,000 >> Men om jag går till, säger, counter.php, Detta är ett annat enkelt exempel, 736 00:33:49,000 --> 00:33:52,700 som vi får se, som nu tänker Jag besökte platsen noll tid. 737 00:33:52,700 --> 00:33:56,790 Men om jag laddar helt enkelt sida, det på något sätt vet jag var här förut. 738 00:33:56,790 --> 00:33:58,840 Om jag laddar igen, det vet att jag var här förut. 739 00:33:58,840 --> 00:34:01,100 Och igen och igen och igen och igen. 740 00:34:01,100 --> 00:34:03,610 >> Så det finns en del plus plussing pågår, men varsel 741 00:34:03,610 --> 00:34:07,090 den lilla saken snurrar någonsin så kort där uppe och sedan kopplar, 742 00:34:07,090 --> 00:34:11,179 så det är inte som jag har en konstant anslutning till min apparat. 743 00:34:11,179 --> 00:34:16,929 Tja, om jag går in i counter.php, märker hur enkelt det är. 744 00:34:16,929 --> 00:34:19,080 Jag först kalla detta speciella funktion som vi ska snart 745 00:34:19,080 --> 00:34:21,513 börjar ta för givet kallas sessionsstart. 746 00:34:21,513 --> 00:34:22,179 Starta en session. 747 00:34:22,179 --> 00:34:25,095 >> Och en session hädanefter bara kommer att vara en hink, som en shopping 748 00:34:25,095 --> 00:34:28,120 vagn där du kan sätta värden och typ av förtroende som programmerare 749 00:34:28,120 --> 00:34:31,590 att de kommer att vara här när att användaren kommer back-- en andra 750 00:34:31,590 --> 00:34:35,670 senare, en timme senare, och med ett år senare, så länge han eller hon inte försvinner 751 00:34:35,670 --> 00:34:37,602 deras kakor, som vi så småningom får se. 752 00:34:37,602 --> 00:34:39,310 Och nu har jag bara ett om tillstånd här. 753 00:34:39,310 --> 00:34:44,679 Så om följande nyckel, kallas räknare, ligger inne 754 00:34:44,679 --> 00:34:49,210 av denna super global-- denna hash bord, om du will-- kallas session, 755 00:34:49,210 --> 00:34:53,350 sedan gå vidare och ta tag i värde från session-- think 756 00:34:53,350 --> 00:34:55,250 detta som en shopping cart-- och lagra den 757 00:34:55,250 --> 00:34:57,680 i en temporär variabel som kallas räknare. 758 00:34:57,680 --> 00:35:02,240 >> Annars, om detta värde räknaren var inte ligger i den så kallade kundvagnen, 759 00:35:02,240 --> 00:35:04,430 bara initiera den till 0. 760 00:35:04,430 --> 00:35:09,830 Slutligen, här nere, gå och lägga tillbaka in i kundvagnar eller sessionen 761 00:35:09,830 --> 00:35:13,000 värdet på räknaren +1. 762 00:35:13,000 --> 00:35:16,730 Så visar det sig att detta särskild behållare här-- 763 00:35:16,730 --> 00:35:20,355 som, återigen, är en av dessa associerade matriser, en array som du kan indexera 764 00:35:20,355 --> 00:35:25,010 i ord istället för numbers-- kvarstår även efter att användaren går bort. 765 00:35:25,010 --> 00:35:26,510 Igen, ska jag gå tillbaka till sidan nu. 766 00:35:26,510 --> 00:35:28,400 Det har varit en minut eller så. 767 00:35:28,400 --> 00:35:31,300 Men det kommer ihåg att jag har varit här 19 gånger tidigare. 768 00:35:31,300 --> 00:35:32,740 Detta är mitt 20: e besök. 769 00:35:32,740 --> 00:35:36,560 >> Och så detta kommer att vara nyckeln till genomföra en webbplats som minns 770 00:35:36,560 --> 00:35:40,640 att du är inloggad, att du lägger något som bokstav i din varukorg 771 00:35:40,640 --> 00:35:43,902 att köpa eller att du har någon antalet meddelanden väntar. 772 00:35:43,902 --> 00:35:45,610 När som helst du vill komma ihåg information, 773 00:35:45,610 --> 00:35:48,130 vi får se att PHP, liksom flera andra språk, 774 00:35:48,130 --> 00:35:53,640 ger oss denna illusion av staten även om, som du ser i PSET 6, 775 00:35:53,640 --> 00:35:57,642 när du gör HTTP-förfrågningar från klient till server, det är det. 776 00:35:57,642 --> 00:35:59,850 När du får tillbaka den svar, det finns inget mer 777 00:35:59,850 --> 00:36:01,790 kommer tillbaka från servern som standard. 778 00:36:01,790 --> 00:36:03,820 Men vi får se hur att komma runt det. 779 00:36:03,820 --> 00:36:07,430 >> Nåväl, låt oss försöka städa upp detta lite. 780 00:36:07,430 --> 00:36:09,470 Vi har sett några olika exempel där. 781 00:36:09,470 --> 00:36:12,250 Åh, och som en sidoreplik, för de som är bekanta eller obekanta, 782 00:36:12,250 --> 00:36:14,230 på grund av att den Frosh IM exempel gick 783 00:36:14,230 --> 00:36:18,060 från att se riktigt fult att slightly-- bra, 784 00:36:18,060 --> 00:36:23,160 fortfarande ugly-- till svagt mindre ful men fortfarande ful 785 00:36:23,160 --> 00:36:25,230 Det beror på om vi ser på källkoden här, 786 00:36:25,230 --> 00:36:28,240 det visar sig att jag har denna högst upp i filen. 787 00:36:28,240 --> 00:36:32,570 >> Visar sig att bootstrap är en av många fritt tillgängliga bibliotek ute 788 00:36:32,570 --> 00:36:37,140 som inte existerar för programspråk alltid, men för CSS eller JavaScript 789 00:36:37,140 --> 00:36:39,190 eller HTML eller valfritt antal språk. 790 00:36:39,190 --> 00:36:42,160 >> Och dessa folks här-- ursprungligen kom ut 791 00:36:42,160 --> 00:36:44,730 av Twitter-- bara en massa stilar. 792 00:36:44,730 --> 00:36:47,360 Det är en massiv fil här som någon skrev, 793 00:36:47,360 --> 00:36:51,020 eller någon skrev, under tiden som specificerar färger och formatering 794 00:36:51,020 --> 00:36:53,740 och allt så att jag kan typ av låna deras syntax 795 00:36:53,740 --> 00:36:56,157 och inte behöva räkna ut hur man lägga ut min blankett. 796 00:36:56,157 --> 00:36:57,990 Detta är också minified så att en dator kan 797 00:36:57,990 --> 00:37:00,560 förstå det men inte nödvändigtvis en människa. 798 00:37:00,560 --> 00:37:03,050 Så det är precis därför som stilisering det ändrats. 799 00:37:03,050 --> 00:37:05,450 >> Men låt oss nu göra bättre när det gäller design, 800 00:37:05,450 --> 00:37:07,490 för om vi stannar nere denna väg för länge, 801 00:37:07,490 --> 00:37:11,290 vår kod kommer att bli rörigt och stökigare. 802 00:37:11,290 --> 00:37:13,040 Så låt oss fokusera på dessa exempel här. 803 00:37:13,040 --> 00:37:15,090 Den sista för idag. 804 00:37:15,090 --> 00:37:18,720 >> Så här är en super enkel version 1.0 av CS50: s hemsida. 805 00:37:18,720 --> 00:37:21,250 Det har bara länkar till föreläsningar och kursplan, 806 00:37:21,250 --> 00:37:25,490 och det är med hjälp av denna oordnad lista tag-- UL tagg som vi använde förra gången. 807 00:37:25,490 --> 00:37:28,800 Och om faktiskt, om jag öppna upp View Page Source, 808 00:37:28,800 --> 00:37:31,710 du kommer att se att detta är riktigt, riktigt enkel HTML. 809 00:37:31,710 --> 00:37:35,460 Och faktiskt, även om detta är en PHP-fil under huven, 810 00:37:35,460 --> 00:37:38,620 det är fortfarande bara spotta endast HTML för nu. 811 00:37:38,620 --> 00:37:41,312 >> Så om jag klickar på föreläsningar, vi ser detta hända. 812 00:37:41,312 --> 00:37:43,020 Och om jag klickar på veckan noll, ser vi detta. 813 00:37:43,020 --> 00:37:44,920 Och om jag klickar på Onsdag, ser vi detta. 814 00:37:44,920 --> 00:37:47,900 Och det var tydligen PDF av bilderna från den dagen. 815 00:37:47,900 --> 00:37:52,020 Allt jag har gjort är koppling till en ankare tagg till denna URL här. 816 00:37:52,020 --> 00:37:55,400 >> Så detta är bara att säga att detta är en ganska enkel version av CS50: s hemsida. 817 00:37:55,400 --> 00:37:56,790 Låt oss se hur det genomförs. 818 00:37:56,790 --> 00:38:01,240 Om jag går in i mvc0 katalog, vi får se några filer. 819 00:38:01,240 --> 00:38:03,250 Den ena är en README, så om en del av detta är för snabb, 820 00:38:03,250 --> 00:38:05,166 Du kan bara rota runt mer avslappnad senare. 821 00:38:05,166 --> 00:38:07,930 Och varsel här är en index.php fil. 822 00:38:07,930 --> 00:38:09,960 Det visar sig att om du själv, det mänskliga, 823 00:38:09,960 --> 00:38:14,460 inte anger ett slutligt namn i en URL, webbservern oftast 824 00:38:14,460 --> 00:38:17,010 härleder några standardnamn för dig. 825 00:38:17,010 --> 00:38:20,060 En index dot något är generellt standard. 826 00:38:20,060 --> 00:38:23,010 >> Så det är därför för en stund sedan när jag besökte denna URL här, 827 00:38:23,010 --> 00:38:26,750 inget filnamn, ingen fil förlängning, ingen period i webbadressen. 828 00:38:26,750 --> 00:38:29,710 Det visste precis något magiskt att leta efter index.php. 829 00:38:29,710 --> 00:38:30,870 Det är bara en konvention. 830 00:38:30,870 --> 00:38:32,360 Kunde kallas något. 831 00:38:32,360 --> 00:38:35,110 >> Så om jag nu går in i index.php, kommer du att se 832 00:38:35,110 --> 00:38:37,100 att, indeed-- låt oss bli av kommentarerna 833 00:38:37,100 --> 00:38:39,500 här eftersom det finns verkligen inget intressant att det-- 834 00:38:39,500 --> 00:38:41,579 detta är bara hårt kodad HTML. 835 00:38:41,579 --> 00:38:43,370 Så det är konsekvent, Men med mitt påstående 836 00:38:43,370 --> 00:38:45,230 att du kan commingle HTML och PHP. 837 00:38:45,230 --> 00:38:48,060 Det finns ingen verklig programmering logik i här. 838 00:38:48,060 --> 00:38:51,030 >> Och de andra filerna är ganska mycket lika ointressant. 839 00:38:51,030 --> 00:38:56,240 Det är bara hårdkodad vecka ett här veckan en meter och vecka ett w, 840 00:38:56,240 --> 00:38:57,510 för måndag och onsdag. 841 00:38:57,510 --> 00:39:01,890 Och sedan om jag öppnar upp vecka noll, märker att det är nästan identiska. 842 00:39:01,890 --> 00:39:03,320 >> Och det är lite av en nyckeltakeaway. 843 00:39:03,320 --> 00:39:06,180 Lägg märke till hur redundant detta är. 844 00:39:06,180 --> 00:39:10,710 Dessa filer knappt förändras, och ändå jag drog en av dessa kopiera / klistra jobb 845 00:39:10,710 --> 00:39:13,420 där jag tog en file-- förmodligen i vecka zero-- kopierade 846 00:39:13,420 --> 00:39:16,320 När veckan kom omkring, och fixade några värden. 847 00:39:16,320 --> 00:39:18,590 Vi bör nog kunna att göra bättre än så här. 848 00:39:18,590 --> 00:39:21,800 >> Så låt oss gå tillbaka till MVC och gå in i version ett. 849 00:39:21,800 --> 00:39:24,810 Och märker jag har en några filer, eftersom det 850 00:39:24,810 --> 00:39:29,870 var gemensamt för alla dessa filer bara en ögonblick ago-- om jag går tillbaka till version 0, 851 00:39:29,870 --> 00:39:32,600 låt oss gå tillbaka till index, och bara postulate-- 852 00:39:32,600 --> 00:39:36,090 när jag bli av med comments-- vilken del av denna sida 853 00:39:36,090 --> 00:39:40,072 förmodligen i varenda en av mina filer? 854 00:39:40,072 --> 00:39:40,780 Bara kalla det. 855 00:39:40,780 --> 00:39:44,620 Vilka linjer är dubblerade förmodligen över alla dessa sidor? 856 00:39:44,620 --> 00:39:45,120 Yeah? 857 00:39:45,120 --> 00:39:46,110 >> STUDENTEN [OHÖRBAR]. 858 00:39:46,110 --> 00:39:47,660 >> David J. MALAN: 1 genom 9. 859 00:39:47,660 --> 00:39:48,720 Ja, absolut. 860 00:39:48,720 --> 00:39:52,080 1 till 9, utom kanske 8 ändrar lite eftersom CS50 861 00:39:52,080 --> 00:39:54,650 blir föreläsningar eller vecka noll eller något. 862 00:39:54,650 --> 00:39:55,970 Men nästan identiska. 863 00:39:55,970 --> 00:39:58,657 Så allt det här är bara sorts kopieras och klistras. 864 00:39:58,657 --> 00:40:00,490 Och det finns ett par andra linjer jag kan tänka 865 00:40:00,490 --> 00:40:05,000 av detta är sannolikt identiska över alla filer. 866 00:40:05,000 --> 00:40:06,315 >> STUDENTEN 12 och 13. 867 00:40:06,315 --> 00:40:07,190 DAVID J. MALAN: Ja. 868 00:40:07,190 --> 00:40:11,220 Visst, 12, 13, och 14 antagligen, bara för att det intressanta saker 869 00:40:11,220 --> 00:40:15,460 händer på linjerna 11 och 10, så det verkar. 870 00:40:15,460 --> 00:40:18,350 Så låt oss titta på version 1, som försöker förbättra detta. 871 00:40:18,350 --> 00:40:24,020 I version 1 av denna MVC example-- vi ska förklara vad MVC medel i en moment-- 872 00:40:24,020 --> 00:40:27,420 om jag går in i index, det slags ser lite förvirrande nu. 873 00:40:27,420 --> 00:40:28,880 Det är inte riktigt så enkelt som tidigare. 874 00:40:28,880 --> 00:40:30,906 >> Men när du börjar Läs den noga, det är 875 00:40:30,906 --> 00:40:32,530 ganska enkelt vad den gör. 876 00:40:32,530 --> 00:40:34,397 Tydligen linje 1 och linje 8 har ersatt 877 00:40:34,397 --> 00:40:37,230 alla de saker som du bara identified-- men bara för bra åtgärd, 878 00:40:37,230 --> 00:40:41,900 Jag lämnade ULS där utifall något dagar inte har en lista över saker. 879 00:40:41,900 --> 00:40:47,860 Och så kräver är ungefär som pundet inkludera i C. Den kopierar och pastor 880 00:40:47,860 --> 00:40:50,470 innehållet effektivt just här i denna fil. 881 00:40:50,470 --> 00:40:53,650 >> Så i header.php, som ni kan dra slutsatsen från dess namn, 882 00:40:53,650 --> 00:40:55,330 kommer att vara huvudet på sidan. 883 00:40:55,330 --> 00:40:57,110 Det är typ av föräldralösa här. 884 00:40:57,110 --> 00:41:01,820 Den har endast det översta till det, men det finns inget mer innehåll nedan. 885 00:41:01,820 --> 00:41:05,070 >> Och om jag tittar på sidfot under tiden, som var den andra filen mentioned-- 886 00:41:05,070 --> 00:41:08,830 här är ännu mindre intressant, men återigen, det är vanligt att allt. 887 00:41:08,830 --> 00:41:10,250 Så detta är sidfoten. 888 00:41:10,250 --> 00:41:11,300 Detta är sidhuvudet. 889 00:41:11,300 --> 00:41:13,950 Detta är den fil som är förändras, så varför inte 890 00:41:13,950 --> 00:41:18,140 försöka faktor ut gemensamhet med dessa två rader här? 891 00:41:18,140 --> 00:41:20,090 >> Men vi kan rengöra upp lite längre. 892 00:41:20,090 --> 00:41:23,260 Jag kommer att gå vidare och öppna upp version två, där 893 00:41:23,260 --> 00:41:27,106 Vi ser att det finns en ny fil, helpers.php. 894 00:41:27,106 --> 00:41:28,610 Vi får se vad som finns i ett ögonblick. 895 00:41:28,610 --> 00:41:30,930 Låt oss gå till index, som ingång som tidigare. 896 00:41:30,930 --> 00:41:35,230 >> Och nu märker jag att kräva helpers.php, inte sidhuvud eller sidfot. 897 00:41:35,230 --> 00:41:41,720 Men medhjälpare är ungefär som helpers.c och helpers.h från PSET 2 898 00:41:41,720 --> 00:41:46,150 eller PSET 3 för länge sedan när du faktiskt gjorde söka och hitta för den PSET, 899 00:41:46,150 --> 00:41:50,950 och du hade all din kod för sortering och söka i en separat fil. 900 00:41:50,950 --> 00:41:52,510 Det är vad som händer här. 901 00:41:52,510 --> 00:41:54,390 >> Och nu line 3 ser lite annorlunda ut. 902 00:41:54,390 --> 00:41:55,920 Och det är bara en rad. 903 00:41:55,920 --> 00:41:57,950 För att göra detta ännu mer klart, jag kunde bara 904 00:41:57,950 --> 00:42:01,820 gör detta för att vara stilren med allt annat vi har gjort. 905 00:42:01,820 --> 00:42:04,130 Men det är inte riktigt att ändra funktionaliteten. 906 00:42:04,130 --> 00:42:05,880 Det är bara en rad med verklig kod. 907 00:42:05,880 --> 00:42:09,010 >> Tydligen finns det en funktion någonstans kallas render header, 908 00:42:09,010 --> 00:42:11,420 Och det är här saker bli ganska kraftfull. 909 00:42:11,420 --> 00:42:17,040 Lägg märke till att insidan av sina parenteser är vad andra stycke syntax? 910 00:42:17,040 --> 00:42:19,780 911 00:42:19,780 --> 00:42:23,350 Det är nog lite svårt att säga, men märker there's-- Jag ska lägga lite vitt 912 00:42:23,350 --> 00:42:24,300 utrymme. 913 00:42:24,300 --> 00:42:25,530 Det finns hakparenteser. 914 00:42:25,530 --> 00:42:29,700 >> Och hakparenteser såg vi lite sen i samband med associativa arrayer, 915 00:42:29,700 --> 00:42:31,580 vilka är, återigen, liksom hashtabeller. 916 00:42:31,580 --> 00:42:36,230 Och om du tror att nu till C, den ordning argument till en funktion 917 00:42:36,230 --> 00:42:37,570 måste alltid vara densamma. 918 00:42:37,570 --> 00:42:41,146 Du måste komma ihåg vad beställa är-- x, y, z eller z, y, x-- 919 00:42:41,146 --> 00:42:44,020 och du måste alltid ge dem i samma ordning eller slå upp dem 920 00:42:44,020 --> 00:42:45,100 om du har glömt. 921 00:42:45,100 --> 00:42:51,140 >> Men detta verkar vara ett smart sätt passera ett godtyckligt nyckelvärde 922 00:42:51,140 --> 00:42:55,840 par vari titel är namnet av ett argument i det här fallet 923 00:42:55,840 --> 00:42:58,334 och CS50 är dess värde. 924 00:42:58,334 --> 00:43:00,250 Och det faktum att jag har dessa hakparenteser 925 00:43:00,250 --> 00:43:02,560 här innebär att jag kunde också passera i något 926 00:43:02,560 --> 00:43:07,550 som en vecka är 1 eller 0 eller 2 eller 3. 927 00:43:07,550 --> 00:43:10,550 Så vi har parametriseras denna funktion på ett sådant sätt 928 00:43:10,550 --> 00:43:15,180 att det kan ta flera ingångar, men nu är det bara en. 929 00:43:15,180 --> 00:43:20,060 >> Om jag nu går in helpers.php, märker vad den gör. 930 00:43:20,060 --> 00:43:22,030 Detta är en liten bit av ny funktionalitet, 931 00:43:22,030 --> 00:43:24,190 men nu bara ta på tron ​​att detta är 932 00:43:24,190 --> 00:43:26,570 syntaxen som du definiera en funktion i PHP. 933 00:43:26,570 --> 00:43:27,840 Du säger bokstav funktion. 934 00:43:27,840 --> 00:43:30,090 Du behöver inte ange en avkastning typ, och det är konsekvent 935 00:43:30,090 --> 00:43:33,880 med den rörliga detalj tidigare där man inte riktigt starkt skriva. 936 00:43:33,880 --> 00:43:35,650 >> Här anges bara att som standard, detta 937 00:43:35,650 --> 00:43:37,460 tar en associativ array som argument. 938 00:43:37,460 --> 00:43:38,210 Och vet du vad? 939 00:43:38,210 --> 00:43:41,450 Om användaren inte passerar någon i, anta ett standardvärde. 940 00:43:41,450 --> 00:43:44,680 >> Detta är en funktion som C inte har för oss, vilket är trevligt, för nu 941 00:43:44,680 --> 00:43:46,430 uppgifter, även om du inte ger den något, 942 00:43:46,430 --> 00:43:49,300 kommer att bli en array men en tom. 943 00:43:49,300 --> 00:43:51,860 Och som en sidoreplik, extrakt bara gör något funky 944 00:43:51,860 --> 00:43:56,380 där det tar alla nycklar från associativ array, alla de saker 945 00:43:56,380 --> 00:43:59,950 du kan sätta hakparenteser, och skapar variabler ur dem 946 00:43:59,950 --> 00:44:06,270 så att vi i slutändan kan få tillgång till dem i footet.php och header.php. 947 00:44:06,270 --> 00:44:08,950 Det är lite abstrakt, så låt mig påpeka detta. 948 00:44:08,950 --> 00:44:12,990 >> I index.php, märker att jag är passerar ett nyckelvärde par titel 949 00:44:12,990 --> 00:44:14,850 med ett värde på CS50. 950 00:44:14,850 --> 00:44:18,660 Om jag tittar nu på helpers.php, märker att RenderHeader 951 00:44:18,660 --> 00:44:23,870 extraherar att data som jag passerar in, och sedan kräver header.php. 952 00:44:23,870 --> 00:44:27,970 Vad jag har gjort är en slags fattig mans Genomförandet nu av följande. 953 00:44:27,970 --> 00:44:31,720 >> Om jag öppnar upp header.php, märker att jag har inte längre hårt 954 00:44:31,720 --> 00:44:34,890 kodade ordet CS50 i denna header-fil. 955 00:44:34,890 --> 00:44:39,310 Jag har lagt det här visserligen vedervärdigt namngiven funktion, HTML speciella tecken, 956 00:44:39,310 --> 00:44:40,170 där. 957 00:44:40,170 --> 00:44:41,640 Men lägg märke till vad jag har gjort. 958 00:44:41,640 --> 00:44:44,240 Jag har öppet HTML. 959 00:44:44,240 --> 00:44:47,420 Jag har då öppet huvud och öppen titel. 960 00:44:47,420 --> 00:44:52,380 >> Och sedan insidan av titelns öppna och nära taggar, jag har en bit av PHP-kod. 961 00:44:52,380 --> 00:44:56,670 Och det här är en trevlig men av syntax, vilket betyder bara echo ut. 962 00:44:56,670 --> 00:44:59,840 Det betyder bokstavligen this-- echo following-- 963 00:44:59,840 --> 00:45:01,910 men detta är sexigare att skriva. 964 00:45:01,910 --> 00:45:05,000 Echo ut titel som har förts in. 965 00:45:05,000 --> 00:45:07,560 >> Men vad tror du HTML speciellt röding handlar om, 966 00:45:07,560 --> 00:45:10,590 särskilt om du har några tidigare HTML erfarenhet? 967 00:45:10,590 --> 00:45:14,050 Vilka tecken kan vara farligt att passera in till en sida 968 00:45:14,050 --> 00:45:17,980 var du dynamiskt generera webbsidan med kod så här? 969 00:45:17,980 --> 00:45:21,370 970 00:45:21,370 --> 00:45:24,650 Låt mig gå till den här filen, version två, och se om jag inte kan framkalla detta. 971 00:45:24,650 --> 00:45:26,210 >> Version två är här. 972 00:45:26,210 --> 00:45:28,510 Och märka allt är bra, fungerar bra. 973 00:45:28,510 --> 00:45:35,280 Men antar att jag går in i index.php och Jag specificerade att titeln på min sida 974 00:45:35,280 --> 00:45:36,630 är inte CS50. 975 00:45:36,630 --> 00:45:44,930 Det är öppet fäste script alert hallå världen, nära enda anbud, 976 00:45:44,930 --> 00:45:49,740 nära parentes, semikolon, öppen fäste, snedstreck manus. 977 00:45:49,740 --> 00:45:51,897 >> Script, som vi ska småningom ser, är en tagg 978 00:45:51,897 --> 00:45:54,480 som du kan använda för att använda en annan programmeringsspråk som kallas 979 00:45:54,480 --> 00:45:56,330 JavaScript insidan av en webbsida. 980 00:45:56,330 --> 00:45:57,960 Och nu märker logiken här. 981 00:45:57,960 --> 00:45:59,840 Här är en nyckel som heter titel. 982 00:45:59,840 --> 00:46:02,690 Här är det är galet långt värde nu. 983 00:46:02,690 --> 00:46:07,840 >> Men om jag går till hjälpare sid- eller snarare, rubriksida, 984 00:46:07,840 --> 00:46:11,310 Jag ringer denna funktion på den titeln först. 985 00:46:11,310 --> 00:46:15,250 Så om jag nu ladda om sidan, jag ser detta som ser löjligt, 986 00:46:15,250 --> 00:46:16,110 men det är säkert. 987 00:46:16,110 --> 00:46:17,310 Det ser bara dumt. 988 00:46:17,310 --> 00:46:20,320 >> Men anta i stället Jag hade glömt det. 989 00:46:20,320 --> 00:46:24,660 Och märk mina ord, ett nonzero nummer av er kommer att glömma att göra detta 990 00:46:24,660 --> 00:46:27,790 och du kommer att få några flitiga student eller vän kommer upp 991 00:46:27,790 --> 00:46:31,540 till dig i CS50 mässan eller anonymt nattetid peta runt på din webbplats 992 00:46:31,540 --> 00:46:35,300 och i huvudsak injicera kod vad varken du på din webbplats 993 00:46:35,300 --> 00:46:35,800 på något sätt. 994 00:46:35,800 --> 00:46:39,000 >> För om jag bara spotta out titel här och titel 995 00:46:39,000 --> 00:46:44,330 there-- bra, om titeln bokstav ser ut så här och PHP 996 00:46:44,330 --> 00:46:47,660 som ett språk som kan spotta ut andra språk text, 997 00:46:47,660 --> 00:46:50,650 Detta är bokstavligen går att ersätta denna tagg med, 998 00:46:50,650 --> 00:46:53,010 naturligtvis vad jag lägger på annat håll. 999 00:46:53,010 --> 00:46:57,640 >> Så om jag nu går här och ladda om efter lossa dessa säkerhetsmekanismer, 1000 00:46:57,640 --> 00:46:59,982 Nu har jag hallå världen här. 1001 00:46:59,982 --> 00:47:02,690 Nu är inte så stor av en hantera, men du kan göra något 1002 00:47:02,690 --> 00:47:05,119 lite mer skadlig här, som det finns 1003 00:47:05,119 --> 00:47:08,410 andra tags-- som vi får se när vi tillbringar mer tid i JavaScript-- som plats 1004 00:47:08,410 --> 00:47:14,910 dot href blir, citat, unquote, HTTP business.com, men motsatsen till det 1005 00:47:14,910 --> 00:47:15,950 från den andra dagen. 1006 00:47:15,950 --> 00:47:20,120 Och nu kan du framkalla en webb sida att faktiskt gå omedelbart 1007 00:47:20,120 --> 00:47:21,190 på denna webbsida här. 1008 00:47:21,190 --> 00:47:23,000 >> Och faktiskt, jag vill inte att ens gå till business.com 1009 00:47:23,000 --> 00:47:24,749 för jag vill inte att veta vad det är. 1010 00:47:24,749 --> 00:47:28,710 Men även detta kommer att utlösa kod som skall injiceras in i denna sida. 1011 00:47:28,710 --> 00:47:32,680 Så detta är bara att säga att även om introducerar vi super tidigt på någon 1012 00:47:32,680 --> 00:47:36,800 av dessa mer komplexa strukturer, det är alla mot en ände av att se 1013 00:47:36,800 --> 00:47:39,320 att din kod inte kan exploateras. 1014 00:47:39,320 --> 00:47:40,960 >> Så nu en tredje version här. 1015 00:47:40,960 --> 00:47:42,470 Det börjar bli lite snyggare. 1016 00:47:42,470 --> 00:47:44,875 Jag visste inte riktigt like-- anal sidan av mig 1017 00:47:44,875 --> 00:47:47,750 började bli lite irriterade av Att jag hade en funktion som kallas 1018 00:47:47,750 --> 00:47:51,940 RenderHeader och RenderFooter som var nästan identiska. 1019 00:47:51,940 --> 00:47:55,400 Så det slog mig, varför inte Jag parameter dessa funktioner 1020 00:47:55,400 --> 00:47:59,180 i bara en som heter render, har det ta ett andra argument 1021 00:47:59,180 --> 00:48:04,420 som namnet på mallen, den slutliga att render-- antingen sidhuvud eller sidfot? 1022 00:48:04,420 --> 00:48:07,160 Och sedan eventuellt, om jag vill att passera i vissa nyckelpar värde 1023 00:48:07,160 --> 00:48:10,580 som jag gör om titeln för header men inte för sidfoten, 1024 00:48:10,580 --> 00:48:11,800 Jag skulle kunna göra det. 1025 00:48:11,800 --> 00:48:16,510 >> Och så nu när jag går in helpers.php, det är lite mer komplicerat. 1026 00:48:16,510 --> 00:48:19,670 Och jag ska vifta händerna på detaljer, men det är bara en funktion. 1027 00:48:19,670 --> 00:48:21,890 Så det är ett steg mot en bättre design. 1028 00:48:21,890 --> 00:48:23,360 >> Vi kan ta detta ett steg längre. 1029 00:48:23,360 --> 00:48:28,890 Om jag går in i min fjärde version av denna, märker nu 1030 00:48:28,890 --> 00:48:31,320 att jag gör något ännu mer typ av kryptisk. 1031 00:48:31,320 --> 00:48:33,230 Och jag vet att detta är en mycket att absorbera på en gång, 1032 00:48:33,230 --> 00:48:35,080 men vi är bara typ att städa upp saker. 1033 00:48:35,080 --> 00:48:38,550 Nu sätter jag mina medhjälpare fil i en mapp som heter 1034 00:48:38,550 --> 00:48:41,190 includes-- bara en godtycklig namn där jag vill lägga saker 1035 00:48:41,190 --> 00:48:44,300 att jag vill include-- och sedan resten av detta är samma. 1036 00:48:44,300 --> 00:48:47,140 >> Men om jag ser nu i gedit, märker att jag har blivit kvitt 1037 00:48:47,140 --> 00:48:51,940 av alla dessa andra filer och jag har flyttade dem till exempel in på här. 1038 00:48:51,940 --> 00:48:55,110 Och sedan i mallar, Jag har den här här också. 1039 00:48:55,110 --> 00:48:59,292 Och så detta är allt nu mot ett steg att använda en mycket bättre designmönster. 1040 00:48:59,292 --> 00:49:01,000 Och vi är mycket snabbt kommer att flytta bort 1041 00:49:01,000 --> 00:49:03,870 från PHP: s standardfunktionalitet, som vi började här med, 1042 00:49:03,870 --> 00:49:07,655 där du bara commingle PHP, och HTML, och din CSS, 1043 00:49:07,655 --> 00:49:09,780 och du bara spotta ut och du går om din väg. 1044 00:49:09,780 --> 00:49:11,404 Det kommer inte att bli mycket att underhålla. 1045 00:49:11,404 --> 00:49:14,481 Precis som i C, vi började använda flera filer och flera funktioner 1046 00:49:14,481 --> 00:49:15,730 och facto saker som. 1047 00:49:15,730 --> 00:49:16,688 Vi ska göra samma sak här. 1048 00:49:16,688 --> 00:49:19,970 Och faktiskt, i det femte och sista versionen här, gjorde jag en annan sak. 1049 00:49:19,970 --> 00:49:23,710 Du kan även använda dot dot, som, igen, är bara den överordnade katalogen. 1050 00:49:23,710 --> 00:49:28,260 För att vara ännu mer säkerhet medvetna, för om jag tittar på lyssnings 1051 00:49:28,260 --> 00:49:32,450 här för femte och sista versionen, meddelande att jag har en katalog som här kallas 1052 00:49:32,450 --> 00:49:35,180 offentligt, och sedan på samma nivå, så att säga, 1053 00:49:35,180 --> 00:49:38,490 Jag har ingår och mallar och sedan den textfil readme. 1054 00:49:38,490 --> 00:49:41,130 >> Och anledningen till att jag har strukturerat Det gillar this-- och så många webb 1055 00:49:41,130 --> 00:49:44,330 värdar, särskilt de $ 5 a månad och kära eller $ 10 månaders sådana, 1056 00:49:44,330 --> 00:49:47,170 Om du någonsin har haft en av dessa services-- vad så många av dem 1057 00:49:47,170 --> 00:49:50,690 är de förväntar bara att du ska dumpa alla av dina filer till en katalog, 1058 00:49:50,690 --> 00:49:53,640 som vi gjorde redan med detta första exempel. 1059 00:49:53,640 --> 00:49:56,740 >> Men så fort du börjar bygga mer sofistikerade webbplatser som bara lagrar 1060 00:49:56,740 --> 00:50:00,480 data som du bryr dig om och filer som du bryr sig om, faktiskt organisera saker 1061 00:50:00,480 --> 00:50:05,060 korrekt och med större säkerhet medvetenhet i åtanke kan 1062 00:50:05,060 --> 00:50:07,927 vi börjar försvara mot alla vänner 1063 00:50:07,927 --> 00:50:10,135 att du har antingen eller utanför denna klass som, 1064 00:50:10,135 --> 00:50:12,510 så fort du börjar göra program själv på webben, 1065 00:50:12,510 --> 00:50:15,140 kommer att börja plocka på dig och på dem. 1066 00:50:15,140 --> 00:50:17,420 >> Och så kommer vi att titta i slutändan på denna design. 1067 00:50:17,420 --> 00:50:20,010 Detta är bara en bild som skildrar följande. 1068 00:50:20,010 --> 00:50:22,897 Vi kommer att sätta alla våra programmering logik i en eller flera filer, 1069 00:50:22,897 --> 00:50:25,230 och vi ska bara börja kalla dessa styrenheter. 1070 00:50:25,230 --> 00:50:28,022 Det är där hjärnan hos våra webbplatser faktiskt är. 1071 00:50:28,022 --> 00:50:29,730 Sen ska vi har utsikt och vyer 1072 00:50:29,730 --> 00:50:32,480 är så enkelt som att bara separat files-- kallade mallar, ofta. 1073 00:50:32,480 --> 00:50:34,410 De har bara estetik min sida, 1074 00:50:34,410 --> 00:50:37,020 vad jag vill att sidan ska se ut like-- färgerna och layouten 1075 00:50:37,020 --> 00:50:38,870 och positioner alla variabler. 1076 00:50:38,870 --> 00:50:41,120 >> Och sedan mer intressant att vi så småningom kommer till 1077 00:50:41,120 --> 00:50:45,420 är den modell, som kommer att vara precis ordet vi slap på andra tekniker 1078 00:50:45,420 --> 00:50:47,771 att vi sätta i den bild, som verkliga databaser, 1079 00:50:47,771 --> 00:50:49,520 så att när du vill att spara information, 1080 00:50:49,520 --> 00:50:52,140 du inte bara skicka ett mail till din proctor eller till dig själv, 1081 00:50:52,140 --> 00:50:57,350 du faktiskt lagra det i en databas med användning av ett annat språk kallas SQL. 1082 00:50:57,350 --> 00:51:00,450 Och så vi lämnar här i dag och plocka upp med detta på onsdag 1083 00:51:00,450 --> 00:51:02,990 och införa databaser då. 1084 00:51:02,990 --> 00:51:06,940 >> [MUSIK SPELA] 1085 00:51:06,940 --> 00:54:24,555