1 00:00:00,000 --> 00:00:03,920 >> [MUSIC SPILLE] 2 00:00:03,920 --> 00:00:11,760 3 00:00:11,760 --> 00:00:13,800 >> DAVID J. MALAN: All right. 4 00:00:13,800 --> 00:00:15,640 Dette er CS50. 5 00:00:15,640 --> 00:00:17,620 Dette er starten på uke åtte. 6 00:00:17,620 --> 00:00:22,440 Og du husker kanskje at vi slapp siste gang å se på et nytt språk 7 00:00:22,440 --> 00:00:23,240 helt. 8 00:00:23,240 --> 00:00:25,905 Faktisk, en som er ganske lett og det er ikke engang 9 00:00:25,905 --> 00:00:26,940 et programmeringsspråk. 10 00:00:26,940 --> 00:00:31,100 Det er et kodespråk som lar oss faktisk strukturere og gjøre nettsider. 11 00:00:31,100 --> 00:00:33,350 Og når du noe annet i forbindelse med dette-- 12 00:00:33,350 --> 00:00:35,670 eller du snart vil dersom du ikke har allerede. 13 00:00:35,670 --> 00:00:38,530 Vi kommer til å bruke Cascading Style Sheets, eller CSS, som 14 00:00:38,530 --> 00:00:40,971 er en annen type språk med egenskaper og verdier 15 00:00:40,971 --> 00:00:43,220 som kommer til å la oss gjøre Ting som endrer farge 16 00:00:43,220 --> 00:00:46,010 og endre posisjon og slike tweaks. 17 00:00:46,010 --> 00:00:49,940 Men i dag og framover, begynner vi å fokusere på mer kraftfulle språk, 18 00:00:49,940 --> 00:00:52,810 Selve programmeringsspråk som PHP. 19 00:00:52,810 --> 00:00:54,880 >> Så PHP har eksistert i noen tid. 20 00:00:54,880 --> 00:00:56,810 Og som du ser, det designet primært 21 00:00:56,810 --> 00:01:00,280 tidlig for faktiske bruk innen webutvikling 22 00:01:00,280 --> 00:01:02,360 og faktisk genererer nettsider. 23 00:01:02,360 --> 00:01:04,849 Så hva slags funksjoner gjør et språk 24 00:01:04,849 --> 00:01:10,040 trenger for å lage web sider dynamisk med det? 25 00:01:10,040 --> 00:01:14,760 >> Med andre ord, hvis du vil generere Innholdet dynamically-- som Facebooks 26 00:01:14,760 --> 00:01:19,480 Nyhetsfeed, som skifter hele tiden, eller direktemeldinger som dukker opp fra tid 27 00:01:19,480 --> 00:01:21,872 å tid-- som hva er den viktig del av funksjonaliteten 28 00:01:21,872 --> 00:01:24,580 du trenger i et programmeringsspråk som ville la deg dynamisk 29 00:01:24,580 --> 00:01:28,070 skrive ut ny informasjon til skjermen? 30 00:01:28,070 --> 00:01:28,685 >> STUDENT: 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 vil ta det. 34 00:01:31,995 --> 00:01:35,310 Litt mer presis. 35 00:01:35,310 --> 00:01:37,639 Jeg mener, vi kunne gjøre dette med C, ærlig. 36 00:01:37,639 --> 00:01:38,930 Det ville være en smerte i nakken. 37 00:01:38,930 --> 00:01:41,045 Men-- er dette engasjementet? 38 00:01:41,045 --> 00:01:41,895 >> STUDENT: Yeah. 39 00:01:41,895 --> 00:01:42,677 Variabler, kanskje? 40 00:01:42,677 --> 00:01:43,760 DAVID J. MALAN: Variabler. 41 00:01:43,760 --> 00:01:44,160 OK, sikkert. 42 00:01:44,160 --> 00:01:45,740 Variabler kan sikkert hjelpe oss ut. 43 00:01:45,740 --> 00:01:47,020 Og selv noe enklere. 44 00:01:47,020 --> 00:01:50,640 Vi brukte det i den aller første program for den aller første dagen 45 00:01:50,640 --> 00:01:55,686 når vi faktisk sa "hello world". 46 00:01:55,686 --> 00:01:56,570 >> STUDENT: Print. 47 00:01:56,570 --> 00:01:57,778 >> DAVID J. MALAN: Print, ikke sant? 48 00:01:57,778 --> 00:02:01,050 Print, eller printf i verden av C. Så hele denne tiden, 49 00:02:01,050 --> 00:02:03,362 vi har hatt på vår disposisjon en language-- C, 50 00:02:03,362 --> 00:02:05,570 i particular-- og selv Scratch for den saks skyld at 51 00:02:05,570 --> 00:02:07,400 kan generere strenger av tekst. 52 00:02:07,400 --> 00:02:11,090 >> Vel, hvis HTML, som vi så i forrige uke, er bare en hel haug med strenger av tekst 53 00:02:11,090 --> 00:02:14,692 riktignok med åpne braketter og lukket braketter og en slags rim 54 00:02:14,692 --> 00:02:16,650 og årsaken bak det, vel da kunne vi virkelig 55 00:02:16,650 --> 00:02:20,440 begynne å generere websider enten manuelt ved å skrive dem ut i gedit 56 00:02:20,440 --> 00:02:23,870 eller i Microsoft Word, for at matter-- vi trenger bare en tekst editor. 57 00:02:23,870 --> 00:02:26,830 >> Eller vi kunne skrive kode, til ditt forslag 58 00:02:26,830 --> 00:02:30,435 tidligere, ville det gi oss dynamisk generere HTML, 59 00:02:30,435 --> 00:02:32,560 og det er det vi skal å begynne å gjøre med PHP 60 00:02:32,560 --> 00:02:34,900 og til slutt selv sammen med en språk kalt Javascript, 61 00:02:34,900 --> 00:02:37,910 er å bruke ett språk til å generere en annen. 62 00:02:37,910 --> 00:02:40,720 Og ja, dette er hva Facebook og mange, mange andre nettsteder 63 00:02:40,720 --> 00:02:44,530 gjøre for å faktisk dynamisk vise ny informasjon til deg. 64 00:02:44,530 --> 00:02:47,117 >> Så la oss begynne med dette-- en kryptisk ser linje, men en 65 00:02:47,117 --> 00:02:48,450 det er faktisk ganske kraftig. 66 00:02:48,450 --> 00:02:51,210 Så langt har vi brukt C, som er et kompilert språk. 67 00:02:51,210 --> 00:02:55,050 Og bare en rask recap-- en kompilert språket har det karakteristiske? 68 00:02:55,050 --> 00:02:59,050 Du er nødt til å kompilere det, men hva betyr det? 69 00:02:59,050 --> 00:03:00,505 Yeah? 70 00:03:00,505 --> 00:03:02,940 >> STUDENT: Det må være montert til maskinkode. 71 00:03:02,940 --> 00:03:03,060 >> DAVID J. MALAN: OK. 72 00:03:03,060 --> 00:03:04,530 Det må monteres til maskinkode. 73 00:03:04,530 --> 00:03:07,340 Så du tar kildekoden, som er slags engelsk-aktig. 74 00:03:07,340 --> 00:03:09,270 Du konvertere det til noe lavere nivå, 75 00:03:09,270 --> 00:03:11,590 som til slutt kalt objekt code-- 0 og 1-ere. 76 00:03:11,590 --> 00:03:14,830 Og det er disse 0 og 1-ere som en CPU, som de laget av Intel, 77 00:03:14,830 --> 00:03:16,110 faktisk forstår. 78 00:03:16,110 --> 00:03:19,690 >> Nå, PHP og Python og Ruby, og Java og bunter av andre 79 00:03:19,690 --> 00:03:23,190 språk er ikke kompilert språk, men tolket språk, 80 00:03:23,190 --> 00:03:26,630 som betyr at du bare skriver dem og deretter du trenger ikke gjøre dem om til 0 og 1-ere. 81 00:03:26,630 --> 00:03:30,790 Du stedet bare gi deretter som innspill til andres program, 82 00:03:30,790 --> 00:03:32,080 kalt tolk. 83 00:03:32,080 --> 00:03:34,460 Og vedkommende har Programmet har blitt utviklet 84 00:03:34,460 --> 00:03:38,280 å forstå hva hver og hvert symbol i Python eller PHP 85 00:03:38,280 --> 00:03:42,650 eller Ruby eller hvilket som helst antall andre språk betyr. 86 00:03:42,650 --> 00:03:44,760 >> Og så alt vi trenger er noe sånt som dette. 87 00:03:44,760 --> 00:03:46,350 Så faktisk, jeg kommer til å gå over til apparatet 88 00:03:46,350 --> 00:03:48,100 her, bare i noen gammelt vindu, og vi er 89 00:03:48,100 --> 00:03:52,580 kommer til å gå videre og åpne en fil som heter, sier, hallo. 90 00:03:52,580 --> 00:03:55,780 Nå tidligere, jeg kunne ha spart dette selv med en filtype, 91 00:03:55,780 --> 00:03:57,910 men jeg kommer til å gjøre noe enda enklere her. 92 00:03:57,910 --> 00:04:02,450 Jeg kommer til å gå videre og begynne denne filen med denne kryptiske syntaks. 93 00:04:02,450 --> 00:04:06,310 Så "bruker, bin, env, for miljø, php. " 94 00:04:06,310 --> 00:04:10,670 >> Dette er rett og slett en linje med kode som er kommer til å fortelle min operativsystem, 95 00:04:10,670 --> 00:04:13,730 gå finne i din lokale miljøet uansett hva det er, 96 00:04:13,730 --> 00:04:18,149 uansett hvor PHP er-- det interpreter-- og gå videre og bruke som tolk 97 00:04:18,149 --> 00:04:20,589 å tolke følgende kode. 98 00:04:20,589 --> 00:04:22,760 Nå er denne typen en stygg funksjon i PHP. 99 00:04:22,760 --> 00:04:24,980 Men i dette språket, noe gang du skriver PHP-kode, 100 00:04:24,980 --> 00:04:29,200 du må ha en av disse stygge PHP-koder demarcating begynnelsen 101 00:04:29,200 --> 00:04:32,220 av code-- 00:04:37,430 >> Men under her, kan jeg nå gjøre noe ganske enkelt, som printf hallo komma 103 00:04:37,430 --> 00:04:40,922 verden backslash n tett sitat, sluttparentes. 104 00:04:40,922 --> 00:04:42,630 Og så bare for godt tiltaket, jeg kommer 105 00:04:42,630 --> 00:04:45,380 å gå videre og tett min php tag over her 106 00:04:45,380 --> 00:04:47,390 slik at alt ser ut pent ganske trykket. 107 00:04:47,390 --> 00:04:50,780 >> Og så snart jeg klikker på Lagre, gedit er faktisk smart nok 108 00:04:50,780 --> 00:04:54,620 å se på det aller første linje og skjønner, oh, du skriver PHP-kode. 109 00:04:54,620 --> 00:04:56,710 La meg syntaks høydepunkt det med fargene 110 00:04:56,710 --> 00:04:58,690 her, slik at det står ut litt mer. 111 00:04:58,690 --> 00:05:01,300 Men nå kommer jeg til å gå ned til min terminal-vinduet. 112 00:05:01,300 --> 00:05:02,340 Jeg skal zoome inn. 113 00:05:02,340 --> 00:05:06,860 >> Dette programmet ble kalt "hallo", så jeg kommer til å gjøre dot slash hallo, 114 00:05:06,860 --> 00:05:07,990 men tilgang nektet. 115 00:05:07,990 --> 00:05:08,490 Og bash. 116 00:05:08,490 --> 00:05:10,610 Vi har faktisk hørt om det ting et par uker siden 117 00:05:10,610 --> 00:05:13,140 i sammenheng med Shellshock, en av disse feilene. 118 00:05:13,140 --> 00:05:16,240 >> Men tillatelse nektet vi har sett før, kanskje i en annen sammenheng. 119 00:05:16,240 --> 00:05:19,060 Er det noen som husker hvordan du kan fikse noe 120 00:05:19,060 --> 00:05:22,100 hvor tillatelse nektes som dette? 121 00:05:22,100 --> 00:05:23,490 Hva er kommandoen, minst? 122 00:05:23,490 --> 00:05:24,159 >> STUDENT: Chmod. 123 00:05:24,159 --> 00:05:26,700 DAVID J. MALAN: Ja, chmod, for å forandre modusen for en fil. 124 00:05:26,700 --> 00:05:30,171 Og du får alle mer vant til å Dette neste uke med en etterfølgende problem 125 00:05:30,171 --> 00:05:30,670 innstilt. 126 00:05:30,670 --> 00:05:33,211 Men for nå, kommer jeg til å endre modusen ikke å være lesbar, 127 00:05:33,211 --> 00:05:36,650 men å gi alle executeability privilegier, evnen 128 00:05:36,650 --> 00:05:37,710 å kjøre denne filen. 129 00:05:37,710 --> 00:05:40,360 Og jeg kommer til å tildele som til filen hallo. 130 00:05:40,360 --> 00:05:45,150 >> Hvis jeg nå gjøre dot slash hallo inn, du se, faktisk, mitt program, hallo verden. 131 00:05:45,150 --> 00:05:48,760 Og hva trinnet gjorde jeg klart hoppe helt? 132 00:05:48,760 --> 00:05:49,520 Kompilering. 133 00:05:49,520 --> 00:05:51,680 Så jeg bare kjørte dette programmet ganske enkelt. 134 00:05:51,680 --> 00:05:55,690 >> Og det viser seg at du kan gjøre dette med en masse syntaks som minner om C. 135 00:05:55,690 --> 00:06:03,400 La meg gå inn til dagens kode, som jeg satt inn i min vhost katalog 136 00:06:03,400 --> 00:06:05,250 her, for ekte grunner vi vil komme tilbake til. 137 00:06:05,250 --> 00:06:09,350 Og jeg kommer til å gå inn i, la oss si, forhold 1. 138 00:06:09,350 --> 00:06:12,450 >> Og du vil se her, først og fremst en hel haug med kommentarer. 139 00:06:12,450 --> 00:06:15,240 Men dette er faktisk en re-etablering i PHP 140 00:06:15,240 --> 00:06:18,960 av et program vi gjorde i uken en som heter forhold 1.c 141 00:06:18,960 --> 00:06:20,690 hvor hensikten i livet av dette programmet 142 00:06:20,690 --> 00:06:22,950 er tilsynelatende å spørre brukeren for et heltall 143 00:06:22,950 --> 00:06:25,270 og deretter gjøre noen fluffy analyse på det der 144 00:06:25,270 --> 00:06:29,510 du si om det er positivt eller negative eller lik null. 145 00:06:29,510 --> 00:06:34,220 Og jeg tar dette bare opp fordi, bortsett fra kanskje en liten detalj, 146 00:06:34,220 --> 00:06:37,150 det er umulig å skille så langt fra C. 147 00:06:37,150 --> 00:06:39,930 >> Hva er en karakteristikk her at kanskje hopper ut 148 00:06:39,930 --> 00:06:41,410 på deg som en litt annerledes? 149 00:06:41,410 --> 00:06:42,160 Kanskje to ting. 150 00:06:42,160 --> 00:06:42,660 Yeah? 151 00:06:42,660 --> 00:06:44,070 >> STUDENT: Dollar sign n? 152 00:06:44,070 --> 00:06:44,944 >> DAVID J. MALAN: Yeah. 153 00:06:44,944 --> 00:06:46,210 Så dollartegn n er til stede. 154 00:06:46,210 --> 00:06:48,120 Og dollartegn, som vi får se, kommer 155 00:06:48,120 --> 00:06:51,460 å være en fix til begynnelsen til alle variabler i PHP. 156 00:06:51,460 --> 00:06:54,250 Det er både godt og dårlig-- god i at det er liksom opplagt hva som er 157 00:06:54,250 --> 00:06:56,797 en variabel, dårlig i at det er enda en ting å skrive. 158 00:06:56,797 --> 00:06:58,630 Og det er en annen ting vi ikke har helt 159 00:06:58,630 --> 00:07:00,876 sett, minst av denne stavemåten. ja? 160 00:07:00,876 --> 00:07:01,630 >> STUDENT: Readline. 161 00:07:01,630 --> 00:07:02,671 >> DAVID J. MALAN: Readline. 162 00:07:02,671 --> 00:07:06,550 Readline fikk vi ikke se, per se, i C, selv om det eksisterer noe 163 00:07:06,550 --> 00:07:09,530 lignende, men vi har brukt getstring, og dette er dens motstykke. 164 00:07:09,530 --> 00:07:12,950 Så hvis jeg går inn i dette katalogen, som skjer for å være, 165 00:07:12,950 --> 00:07:18,030 som jeg vil forklare i litt i min vhost katalog og min kilde En katalog, 166 00:07:18,030 --> 00:07:22,730 og jeg går videre og gjøre dot slash conditions-- whoops-- dot slash 167 00:07:22,730 --> 00:07:26,710 forhold 1, vil du se igjen, samme issue-- tilgang nektet. 168 00:07:26,710 --> 00:07:33,610 >> Så la meg zoome inn og gjøre chmod et pluss x på forholdene, dot slash forhold. 169 00:07:33,610 --> 00:07:35,222 Jeg vil gjerne ha et heltall, please, 50. 170 00:07:35,222 --> 00:07:36,930 Og vi kunne spille dette spill hele dagen lang. 171 00:07:36,930 --> 00:07:39,140 Det kommer til å oppføre seg nøyaktig som det gjorde i uke en. 172 00:07:39,140 --> 00:07:42,860 >> OK så ikke så forskjellig, bortsett fra ikke bare at liten bit av syntaks, 173 00:07:42,860 --> 00:07:45,490 men på toppen, jeg igjen hadde denne linjen som 174 00:07:45,490 --> 00:07:49,760 tillot meg å lage noe som ser ut som en C-program som heter hallo, 175 00:07:49,760 --> 00:07:51,150 kalt forhold 1. 176 00:07:51,150 --> 00:07:54,520 Men det er ikke 0-tallet og de Jeg utfører direkte. 177 00:07:54,520 --> 00:07:57,620 Det er i stedet å kjøre denne tolk hvis navn 178 00:07:57,620 --> 00:07:59,440 skjer for å være identisk med det språk. 179 00:07:59,440 --> 00:08:04,970 Programmet kalles PHP, og min kode under linjen man er gått inn i den. 180 00:08:04,970 --> 00:08:07,740 >> Vi kan gjøre en annen ganske enkel eksempel minner om noe 181 00:08:07,740 --> 00:08:09,240 vi gjorde uker siden. 182 00:08:09,240 --> 00:08:12,020 Igjen, dette er en slags vilkårlig mengde koder 183 00:08:12,020 --> 00:08:14,000 som tilsynelatende gjør hva når du kjører den? 184 00:08:14,000 --> 00:08:15,625 Hva er dette kommer til å skrive ut, formodentlig? 185 00:08:15,625 --> 00:08:23,540 186 00:08:23,540 --> 00:08:28,250 >> Så i utgangspunktet på linje 16, er det kommer til å si x er nå 2, sannsynligvis. 187 00:08:28,250 --> 00:08:30,920 % D er den samme som for $ i printf. 188 00:08:30,920 --> 00:08:33,460 Så da er det cubing, prikk, prikk, prikk, i linje 17. 189 00:08:33,460 --> 00:08:36,299 Og deretter linje 18 vises å kalle en funksjon Cubed. 190 00:08:36,299 --> 00:08:37,600 Og hvor er Cubed definert? 191 00:08:37,600 --> 00:08:40,319 >> Vel, det ser ut som på linje 25, så det er ikke så forskjellig. 192 00:08:40,319 --> 00:08:42,610 Jeg har fått noen kommentarer ovenfor det, men for det meste, 193 00:08:42,610 --> 00:08:45,370 det er en ganske grei porting eller konvertering 194 00:08:45,370 --> 00:08:48,470 fra C-program til PHP versjon. 195 00:08:48,470 --> 00:08:52,670 Men det er nå et par forskjeller som kanskje burde hoppe ut. 196 00:08:52,670 --> 00:08:56,100 Hva annet er annerledes om hvordan du kanskje skrive denne samme programmet i C? 197 00:08:56,100 --> 00:08:57,900 >> STUDENT: [uhørbart]. 198 00:08:57,900 --> 00:09:00,070 >> DAVID J. MALAN: Det er ingen prototype opp toppen. 199 00:09:00,070 --> 00:09:03,210 Så PHP-- og ærlig, en Mange moderne languages-- 200 00:09:03,210 --> 00:09:06,920 er mye smartere og mer nyttig enn C-kompilatorer i at du 201 00:09:06,920 --> 00:09:09,740 kan sette funksjonen her oppe, du kan sette en funksjon her nede, 202 00:09:09,740 --> 00:09:12,740 og tolken kommer å gjøre deg til fordel for lesing 203 00:09:12,740 --> 00:09:16,010 hele filen før den bestemmer at noen funksjon finnes ikke. 204 00:09:16,010 --> 00:09:17,970 Så fine forbedringer år senere. 205 00:09:17,970 --> 00:09:22,126 Men det er også noe annet annerledes eller fraværende her. 206 00:09:22,126 --> 00:09:22,626 Yeah? 207 00:09:22,626 --> 00:09:25,084 >> STUDENT: [uhørbart]. 208 00:09:25,084 --> 00:09:27,750 DAVID J. MALAN: Vi trenger ikke å erklære hvilke typer variabler, 209 00:09:27,750 --> 00:09:31,780 så vi får se før lenge at det er forskjellige typer i PHP, 210 00:09:31,780 --> 00:09:34,970 men du trenger ikke å angi dem, som også er både gode og dårlige. 211 00:09:34,970 --> 00:09:36,623 Og det er en annen ting som mangler. 212 00:09:36,623 --> 00:09:37,430 >> STUDENT: Det er ingen biblioteker. 213 00:09:37,430 --> 00:09:38,630 >> DAVID J. MALAN: Det er ingen biblioteker. 214 00:09:38,630 --> 00:09:39,350 OK, så det er fint. 215 00:09:39,350 --> 00:09:40,540 Vi får mye mer ut av boksen. 216 00:09:40,540 --> 00:09:43,373 Så det er faktisk mye mer ting enn jeg trodde var annerledes. 217 00:09:43,373 --> 00:09:44,350 Hva med måten i ryggen? 218 00:09:44,350 --> 00:09:46,032 Hva er det? 219 00:09:46,032 --> 00:09:46,740 Si det en gang til? 220 00:09:46,740 --> 00:09:47,960 >> STUDENT: Pointer. 221 00:09:47,960 --> 00:09:49,270 >> DAVID J. MALAN: Ingen pekere. 222 00:09:49,270 --> 00:09:51,280 OK, i det minste i dette eksempel, no. 223 00:09:51,280 --> 00:09:52,070 Det er rettferdig. 224 00:09:52,070 --> 00:09:55,090 Så det er ikke pekere i PHP faktisk generelt. 225 00:09:55,090 --> 00:09:58,730 Det er noe som kalles referanser, men vi vil ikke bruke for mye tid der. 226 00:09:58,730 --> 00:09:59,520 Og hva annet? 227 00:09:59,520 --> 00:10:00,185 >> STUDENT: Main. 228 00:10:00,185 --> 00:10:01,060 DAVID J. MALAN: Main. 229 00:10:01,060 --> 00:10:02,768 Så dette var biggie Jeg tenkte på. 230 00:10:02,768 --> 00:10:04,660 Legg merke til det er ingen hovedinngangspunkt. 231 00:10:04,660 --> 00:10:06,525 Du bare begynner å skrive koden din. 232 00:10:06,525 --> 00:10:08,400 Og dette er faktisk kommer til å være en fordel 233 00:10:08,400 --> 00:10:10,560 når vi overgangen øyeblikk for å faktisk bruker 234 00:10:10,560 --> 00:10:13,980 denne samme språk for web-baserte programmering, som vi 235 00:10:13,980 --> 00:10:16,580 ønsker ikke å ha bare ett inngangspunkt. 236 00:10:16,580 --> 00:10:19,980 Vi ønsker kanskje å ha en haug med URLer, en haug med forskjellige filer 237 00:10:19,980 --> 00:10:22,930 alle tar i brukerundersøkelser og produsere utgang. 238 00:10:22,930 --> 00:10:27,130 >> Men her er det svært nedslående eksempel som jeg lovet forrige gang, 239 00:10:27,130 --> 00:10:30,130 nemlig i denne mappen her, feilstavinger. 240 00:10:30,130 --> 00:10:33,680 Så i denne filen stavekontrollen, som vi vil ikke bruke for mye tid på, er det 241 00:10:33,680 --> 00:10:37,870 i det vesentlige en porting-- P-O-R-T. Det er bare ordet gitt da, sier, 242 00:10:37,870 --> 00:10:40,800 du konvertere fra ett språk til et annet manuelt vanligvis. 243 00:10:40,800 --> 00:10:45,680 >> Dette er en porting av PC versjon av stavekontrollen fra PSet 5. 244 00:10:45,680 --> 00:10:48,856 Og jeg egentlig prøvde å konvertere den linje for linje så tett som jeg kan. 245 00:10:48,856 --> 00:10:51,730 Så hvis du liker denne typen ting, det faktisk er verdt på et tidspunkt 246 00:10:51,730 --> 00:10:54,229 trekke dem opp side ved begge side og se hva som er det samme 247 00:10:54,229 --> 00:10:55,230 og hva er annerledes. 248 00:10:55,230 --> 00:10:57,510 Men de er ganske darn lignende. 249 00:10:57,510 --> 00:11:00,110 Hvis du husker hva Speller selv så ut, 250 00:11:00,110 --> 00:11:02,110 selv om du ikke gjorde må endre denne filen, 251 00:11:02,110 --> 00:11:04,860 det er ganske lik strukturelt med bare et par 252 00:11:04,860 --> 00:11:06,200 endringer her og der. 253 00:11:06,200 --> 00:11:10,140 >> Så dette er bare for å si at det er ganske grei å konvertere stavekontroll 254 00:11:10,140 --> 00:11:12,000 fra C til PHP. 255 00:11:12,000 --> 00:11:15,390 Men i ordboken, er det noe enda mer overbevisende. 256 00:11:15,390 --> 00:11:19,270 La meg gå videre og skape min egen dictionary.php fil. 257 00:11:19,270 --> 00:11:24,010 Så litt annerledes ved at vi kaller det .php i stedet for .c. 258 00:11:24,010 --> 00:11:26,980 Fordi dette er en PHP-fil, jeg do-- litt annoyingly-- har 259 00:11:26,980 --> 00:11:30,132 å starte fil med en php tag sånn. 260 00:11:30,132 --> 00:11:32,340 Og jeg kommer til å gå videre og definere noen funksjoner. 261 00:11:32,340 --> 00:11:35,770 Funksjon kalt sjekk, som er kommer til å ta i et ord som før. 262 00:11:35,770 --> 00:11:37,520 Men dette argumentet er kommer til å ha en dollar 263 00:11:37,520 --> 00:11:39,840 signere fordi vi, igjen, ved hjelp av PHP. 264 00:11:39,840 --> 00:11:42,350 En annen funksjon fra dictionary.c var load 265 00:11:42,350 --> 00:11:47,120 og det tok i navnet til en ordbok, slik at jeg får den funksjonen klar til å gå. 266 00:11:47,120 --> 00:11:50,920 >> En annen i dictionary.c var hva? 267 00:11:50,920 --> 00:11:54,580 Størrelse var en av de hyggeligste, på hvert fall hvis du holdt noen variable rundt. 268 00:11:54,580 --> 00:11:57,830 slik størrelse har bare for å returnere en variabel. 269 00:11:57,830 --> 00:11:59,090 Og så var det losse. 270 00:11:59,090 --> 00:12:02,830 >> Så var det disse fire funksjoner i oppgavesettet 5 271 00:12:02,830 --> 00:12:06,770 at du trengte å gjennomføre med noen datastruktur eller strukturer. 272 00:12:06,770 --> 00:12:10,170 Så jeg lovet at i PHP, kan vi erklære 273 00:12:10,170 --> 00:12:14,490 en nøkkeltabell, for eksempel, alt som lettere. 274 00:12:14,490 --> 00:12:17,377 Faktisk, hvis jeg vil ha en hash table, Jeg bare kommer til å gå sånn 275 00:12:17,377 --> 00:12:18,460 og det er min hash table. 276 00:12:18,460 --> 00:12:21,555 Og det er notatet, nedslående, at vi slapp på forrige gang. 277 00:12:21,555 --> 00:12:23,930 Og vet du hva, hvis jeg ville en variabel for størrelse, vel, 278 00:12:23,930 --> 00:12:25,867 dette er ikke alt så forskjellig fra C, 279 00:12:25,867 --> 00:12:27,450 men jeg kommer til å gå videre og gjøre det. 280 00:12:27,450 --> 00:12:28,630 Og merker ingen datatype. 281 00:12:28,630 --> 00:12:31,180 Og jeg skal gå tilbake senere og faktisk legge til noen kommentarer her. 282 00:12:31,180 --> 00:12:32,480 Men hva med last? 283 00:12:32,480 --> 00:12:35,780 >> Hvis dollartegn ordbok er navnet på filen min 284 00:12:35,780 --> 00:12:39,600 og jeg faktisk ønsker å laste ord i denne tabellen nå, 285 00:12:39,600 --> 00:12:42,360 Jeg kan faktisk gjøre noe ganske enkel. 286 00:12:42,360 --> 00:12:44,880 One-- og dette er minorly annoying-- i PHP, 287 00:12:44,880 --> 00:12:47,710 du må spesifisere inne av en funksjon hvis du 288 00:12:47,710 --> 00:12:51,060 ønsker å få tilgang til noen global variable som er definert utenfor. 289 00:12:51,060 --> 00:12:53,530 >> Men det er ikke spesielt interessant akkurat nå. 290 00:12:53,530 --> 00:12:57,920 Hva er mer interessant er dette for hver konstruere at jeg nevnte forrige gang. 291 00:12:57,920 --> 00:13:01,880 Og det viser seg at PHP har en funksjon heter filen hvis formål i livet 292 00:13:01,880 --> 00:13:05,550 er å åpne en fil og lese i alle sine linjer inn i en matrise 293 00:13:05,550 --> 00:13:06,840 og levere dem tilbake til. 294 00:13:06,840 --> 00:13:12,170 >> Som er å si at jeg kan gjøre ordbok så som nå effektivt når jeg ringer fil, 295 00:13:12,170 --> 00:13:15,472 dette kommer til å gi meg tilbake en rekke ord fra filen. 296 00:13:15,472 --> 00:13:16,430 Det er ikke alt som godt. 297 00:13:16,430 --> 00:13:20,130 Det er fortsatt kommer til å være en linje av ord, noe lineær. 298 00:13:20,130 --> 00:13:23,880 Men jeg kan gå videre og iterere over hver av disse ordene ved hjelp 299 00:13:23,880 --> 00:13:25,710 at syntaks vi så kort sist. 300 00:13:25,710 --> 00:13:27,940 Og du vil se det mer i den kommende PSet. 301 00:13:27,940 --> 00:13:32,070 >> Men nå har jeg en sløyfe itera over hver ord i ordlisten. 302 00:13:32,070 --> 00:13:36,100 Og på hver iterasjon, husker jeg ringer det aktuelle ordet "ord". 303 00:13:36,100 --> 00:13:39,790 Og alt det kommer til å ta for å la et ord i ordlisten er 304 00:13:39,790 --> 00:13:43,530 kommer til å være ordet gjetning "true". 305 00:13:43,530 --> 00:13:44,740 Det er min insert funksjon. 306 00:13:44,740 --> 00:13:46,661 Det er min last funksjon for min ordbok. 307 00:13:46,661 --> 00:13:49,410 Nå er det litt av en utro fordi, vet du hva, det er faktisk 308 00:13:49,410 --> 00:13:52,920 backslash n er i slutten av ordene at jeg burde bli kvitt, 309 00:13:52,920 --> 00:13:56,380 men det er ikke et problem fordi PHP har en funksjon som heter hogge som bokstavelig talt 310 00:13:56,380 --> 00:13:58,480 koteletter off ett tegn på helt til slutt. 311 00:13:58,480 --> 00:13:59,400 Så ikke noe problem der. 312 00:13:59,400 --> 00:14:02,199 Vi har gått foran og faktisk forkortet det til nettopp dette. 313 00:14:02,199 --> 00:14:05,240 Og nå har jeg bør nok holde styr av størrelse, så la oss i det minste gjøre dette-- 314 00:14:05,240 --> 00:14:05,835 størrelse ++. 315 00:14:05,835 --> 00:14:07,339 Jeg kan gjøre det som før. 316 00:14:07,339 --> 00:14:10,380 Og så dette er trolig kommer til å fungere helt fint, så det er return true. 317 00:14:10,380 --> 00:14:10,930 Ferdig. 318 00:14:10,930 --> 00:14:11,797 PSet 5. 319 00:14:11,797 --> 00:14:13,545 >> [Latter] 320 00:14:13,545 --> 00:14:14,420 >> DAVID J. MALAN: OK. 321 00:14:14,420 --> 00:14:16,628 Vi kommer til å gjøre det igjen med neste PSet, også. 322 00:14:16,628 --> 00:14:18,730 Så hva med størrelse? 323 00:14:18,730 --> 00:14:22,080 Vel, dette forhåpentligvis er i ferd med som du ville forvente forrige gang, 324 00:14:22,080 --> 00:14:24,460 selv om jeg må gjøre denne dumme global ting. 325 00:14:24,460 --> 00:14:26,610 Det er bare en gjenstand fra utforming språkets. 326 00:14:26,610 --> 00:14:28,450 >> Men sjekk er litt mer interessant. 327 00:14:28,450 --> 00:14:31,420 Så hvis jeg passerte i dollar signere ord, jeg først 328 00:14:31,420 --> 00:14:34,060 ønsker å ha tilgang til at global variabel tabellen. 329 00:14:34,060 --> 00:14:36,700 Og nå hvis jeg vil sjekke om et ord er der, 330 00:14:36,700 --> 00:14:44,350 Jeg kan bare si om det er sant at følgende er satt i tabellen, 331 00:14:44,350 --> 00:14:49,957 deretter gå videre og retur true; annet, return false. 332 00:14:49,957 --> 00:14:51,180 Ferdig. 333 00:14:51,180 --> 00:14:52,440 Den andre halvparten av PSet 5. 334 00:14:52,440 --> 00:14:54,540 >> All right, så igjen, jeg er kutte noen hjørner. 335 00:14:54,540 --> 00:14:56,831 I rettferdighet, burde jeg sannsynligvis tilbringe noen flere sekunder 336 00:14:56,831 --> 00:14:58,300 på denne implementeringen. 337 00:14:58,300 --> 00:15:01,860 Og jeg sannsynligvis ikke skal spotte alle timer du satt på PSet så mye. 338 00:15:01,860 --> 00:15:04,045 Så strtolower er en funksjon. 339 00:15:04,045 --> 00:15:06,670 Noe lignende existentialist i C, i det minste for tegn, 340 00:15:06,670 --> 00:15:08,560 men PHP fikk en hel streng versjon. 341 00:15:08,560 --> 00:15:11,226 >> Det kommer til å tvinge alt til små bokstaver, som noen av dere 342 00:15:11,226 --> 00:15:14,944 kunne ha gjort for å canonicalize hva du var å sette i ordboken. 343 00:15:14,944 --> 00:15:16,360 Og nå kan du gjøre dette i C, også. 344 00:15:16,360 --> 00:15:17,780 Dette har ingenting å gjøre med PHP. 345 00:15:17,780 --> 00:15:20,260 >> Men helst du har en boolsk tilstand, 346 00:15:20,260 --> 00:15:22,680 som noe på linje 10 er det, som bare 347 00:15:22,680 --> 00:15:27,145 kommer til å vurdere å true eller falske, og hvis annet klart 348 00:15:27,145 --> 00:15:33,620 returnerer sant eller usant, jeg kunne rett og slett virkelig gjøre dette mer sexy 349 00:15:33,620 --> 00:15:38,360 og bare gjøre noe som dette. 350 00:15:38,360 --> 00:15:40,500 Slik at det er min sjekk funksjon. 351 00:15:40,500 --> 00:15:42,560 Høyre, hvis boolsk returnerer en sann eller falsk, 352 00:15:42,560 --> 00:15:44,630 la oss bare returnere den med en gang. 353 00:15:44,630 --> 00:15:47,340 >> Og det er et par andre tweaks Jeg kunne gjøre her og der. 354 00:15:47,340 --> 00:15:51,380 Load-- losse, forresten, det er gjort. 355 00:15:51,380 --> 00:15:52,850 Ingenting å gjøre der. 356 00:15:52,850 --> 00:15:55,840 Siden hele minnet i PHP og mange andre språk 357 00:15:55,840 --> 00:15:57,570 er faktisk klart for deg. 358 00:15:57,570 --> 00:16:00,330 Så mens i C, så du har lært smertelig, 359 00:16:00,330 --> 00:16:04,700 noe du malloc eller calloc eller realloc, må du frigjøre deg selv. 360 00:16:04,700 --> 00:16:08,770 Alt du fopen, må du fclose, slik at ressursene blir til slutt frigjort 361 00:16:08,770 --> 00:16:11,690 og verktøy som Valgrind ikke merke til og ikke klage, 362 00:16:11,690 --> 00:16:13,570 som er en god ting å kjøre på dem. 363 00:16:13,570 --> 00:16:16,190 >> Men sikkert, det må være noen fangst, ikke sant? 364 00:16:16,190 --> 00:16:19,400 Ellers, vi slags bortkastet en hel haug med uker. 365 00:16:19,400 --> 00:16:23,270 Så det er en rekke grunner hvorfor vi liksom ta denne banen, 366 00:16:23,270 --> 00:16:24,440 men det er en trade-off. 367 00:16:24,440 --> 00:16:25,820 Høyre har dette vært tema. 368 00:16:25,820 --> 00:16:29,690 >> Så hva kanskje en trade-off her beveger seg, fra C til PHP? 369 00:16:29,690 --> 00:16:33,250 Føles som alle seier så langt annet enn litt av stygghet her eller der. 370 00:16:33,250 --> 00:16:34,040 Yeah. 371 00:16:34,040 --> 00:16:34,700 Hva er det? 372 00:16:34,700 --> 00:16:36,064 >> STUDENT: [uhørbart] minne. 373 00:16:36,064 --> 00:16:36,980 DAVID J. MALAN: Speed. 374 00:16:36,980 --> 00:16:37,479 OK. 375 00:16:37,479 --> 00:16:40,720 Vel, var min hastighet ganske fort. 376 00:16:40,720 --> 00:16:42,020 Høyre? 377 00:16:42,020 --> 00:16:44,320 Men hastigheten på utførelsen av programmet? 378 00:16:44,320 --> 00:16:45,580 OK, så det er en rettferdig punkt. 379 00:16:45,580 --> 00:16:50,930 >> Så som det ville skje, jeg på forhånd cued opp både min prøve løsningen, den ene 380 00:16:50,930 --> 00:16:53,510 Jeg hadde på det store brettet var en prøve-basert løsning, 381 00:16:53,510 --> 00:16:55,510 og jeg har det i denne katalogen her. 382 00:16:55,510 --> 00:16:58,510 Så jeg i et øyeblikk, kan jeg gå videre og kjøre dette på King James Bible, 383 00:16:58,510 --> 00:16:59,657 trykket Enter. 384 00:16:59,657 --> 00:17:01,990 Og dette er forhåpentligvis korrekt gjennomføring på slutten, 385 00:17:01,990 --> 00:17:05,109 gir meg tid totalt av 0,38 sekunder for at 386 00:17:05,109 --> 00:17:07,270 en noe vilkårlig eksempel. 387 00:17:07,270 --> 00:17:09,270 >> Og hvis jeg nå går inn i dette andre terminalvindu 388 00:17:09,270 --> 00:17:14,569 her hvor jeg først åpnet gedit, la meg gå inn i dagens code-- som igjen, 389 00:17:14,569 --> 00:17:19,650 er i denne katalogen her-- og la meg gå videre og kjøre stavekontroll. 390 00:17:19,650 --> 00:17:23,470 Så bare for å være klar, dette er PHP versjon. 391 00:17:23,470 --> 00:17:25,170 Jeg bare viser toppen av det her. 392 00:17:25,170 --> 00:17:32,020 >> Så hvis jeg gjør stavekontroll av tilde CS50 PSet fem tekster, King James, skriv. 393 00:17:32,020 --> 00:17:39,700 394 00:17:39,700 --> 00:17:43,050 Det er fortsatt raskere enn skriving den i C, men den totale tiden 395 00:17:43,050 --> 00:17:47,650 er, varsel, 0,93, mens min C-basert implementering var 0,38. 396 00:17:47,650 --> 00:17:49,110 Så det er en ikke-triviell forskjell. 397 00:17:49,110 --> 00:17:51,100 >> Og dette er bare på én fil. 398 00:17:51,100 --> 00:17:53,480 Hvis du skulle kjøre de to programmer versus den store bord 399 00:17:53,480 --> 00:17:56,510 og har en hel haug med innganger testet, ville dette sikkert legge opp. 400 00:17:56,510 --> 00:18:00,310 Og hvis vi hadde enda større datasett, også dette ville legge opp enda mer. 401 00:18:00,310 --> 00:18:04,820 Så ja, betaler noen pris av hastighet virkelig er tilfelle. 402 00:18:04,820 --> 00:18:05,470 Hva annet? 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: Mengde RAM bruk. 406 00:18:10,340 --> 00:18:11,756 >> DAVID J. MALAN: Mengde RAM bruk. 407 00:18:11,756 --> 00:18:15,380 Så jeg ga ikke ett sekund tenkte når du skriver denne PHP 408 00:18:15,380 --> 00:18:17,300 versjon som til hvor mye minnet jeg var bruker. 409 00:18:17,300 --> 00:18:22,080 Jeg er helt utsette det til PHP seg selv og den som skrev det programmet. 410 00:18:22,080 --> 00:18:24,500 Og det kan være OK, men hvis jeg faktisk virkelig 411 00:18:24,500 --> 00:18:28,420 bryr seg om å klemme så mye ytelse ut av mitt program eller ut av min nettside 412 00:18:28,420 --> 00:18:31,150 eller ut av hva verktøyet Jeg bygger, kanskje 413 00:18:31,150 --> 00:18:33,310 PHP, faktisk, er ikke riktig språk. 414 00:18:33,310 --> 00:18:36,330 >> Og faktisk, det er derfor, for eksempel, mange web servers-- 415 00:18:36,330 --> 00:18:38,980 selve programmene som tjene opp web content-- 416 00:18:38,980 --> 00:18:41,810 er ikke skrevet i PHP eller i Python eller Ruby. 417 00:18:41,810 --> 00:18:44,630 De er skrevet, som vil du nå gjøre med PSet 6, 418 00:18:44,630 --> 00:18:48,120 i C, slik at du kan presse hver bit av ytelse ut av det 419 00:18:48,120 --> 00:18:50,780 og virkelig utøve finkornet kontroll over hva som er 420 00:18:50,780 --> 00:18:52,980 skjer under hette og ikke bare ta det 421 00:18:52,980 --> 00:18:54,890 for gitt noen høyere nivå-datastrukturen. 422 00:18:54,890 --> 00:18:58,071 >> Tenk, tross alt, hvem i PHP implementert 423 00:18:58,071 --> 00:19:00,070 at oppfatningen av en hash table-- det er faktisk mer 424 00:19:00,070 --> 00:19:04,260 korrekt kalt en assosiativ array-- gjør han eller hun har noen anelse om hva slags 425 00:19:04,260 --> 00:19:07,090 innganger du kommer til å være sette inn i strukturen? 426 00:19:07,090 --> 00:19:08,260 Så åpenbart ikke, ikke sant? 427 00:19:08,260 --> 00:19:10,340 Det er et generisk verktøy i verktøykasse som er 428 00:19:10,340 --> 00:19:13,430 gitt til alle som ønsker å bruke den, og så sikkert det 429 00:19:13,430 --> 00:19:17,680 ikke kan optimaliseres til slutt for nøyaktig hva du ønsker å gjøre. 430 00:19:17,680 --> 00:19:21,180 >> Så trade-offs-- utviklingstid kanskje forskjellig, ytelse kan variere, 431 00:19:21,180 --> 00:19:23,120 kompleksitet eller minnebruk kan være annerledes. 432 00:19:23,120 --> 00:19:24,820 Og så hva du finner økende grad er at det er 433 00:19:24,820 --> 00:19:26,570 kommer til å være annerledes verktøy for handelen. 434 00:19:26,570 --> 00:19:31,160 Og faktisk for en super flertall av folks endelige prosjekter i denne klassen, 435 00:19:31,160 --> 00:19:34,360 tro det eller ei, er C ikke kommer å være et riktig språk som skal brukes. 436 00:19:34,360 --> 00:19:37,880 >> Og faktisk, en av gatekjøkken slutt for noen klasse som dette 437 00:19:37,880 --> 00:19:40,510 er å få deg å tenke på, vel, hva skal du trekke av 438 00:19:40,510 --> 00:19:42,710 hyllen når du vil å løse noen problem. 439 00:19:42,710 --> 00:19:46,720 Og ja, vi vil krysse denne broen enda mer som vi ser på flere språk 440 00:19:46,720 --> 00:19:47,920 også utover i dag. 441 00:19:47,920 --> 00:19:50,530 >> Så la oss overgang nå kanskje en kjent sammenheng 442 00:19:50,530 --> 00:19:52,480 for å bruke et språk som PHP. 443 00:19:52,480 --> 00:19:56,720 Det er noe vanlig å bruke på kommandolinjen, skriver skript 444 00:19:56,720 --> 00:19:59,050 som jeg gjorde, men det er mye, mye mer vanlig. 445 00:19:59,050 --> 00:20:02,350 Og det var ment å bli brukt i form av filer som vanligvis ender 446 00:20:02,350 --> 00:20:05,060 i .php-- men det er ikke en prerequisite-- 447 00:20:05,060 --> 00:20:07,990 som selv genererer webinnhold. 448 00:20:07,990 --> 00:20:11,310 >> Så la meg gå videre og åpne noen eksemplene jeg forberedt på forhånd. 449 00:20:11,310 --> 00:20:15,100 Og disse er faktisk slags sant historier i at en av de første tingene 450 00:20:15,100 --> 00:20:18,200 Jeg noensinne gjorde meg selv etter endt CS50 og kanskje, tror jeg, 451 00:20:18,200 --> 00:20:21,350 CS51 år siden er min romkamerat og jeg prøvde å hjelpe 452 00:20:21,350 --> 00:20:24,320 å kjøre freshman utført sportsprogram, som på den tiden, 453 00:20:24,320 --> 00:20:28,610 hadde freshman registrerer for ulike sport ved å fylle ut et stykke papir, 454 00:20:28,610 --> 00:20:31,800 som det ble kalt, gang over tunet til Wigglesworth, 455 00:20:31,800 --> 00:20:34,030 og slippe det i noen Proctor dør drop. 456 00:20:34,030 --> 00:20:37,210 Og så han eller hun ville gå gjennom dem og deretter faktisk email oss manuelt 457 00:20:37,210 --> 00:20:39,140 at vi var registrert for noen sport. 458 00:20:39,140 --> 00:20:41,166 >> Så klart, en mulighet for forbedring. 459 00:20:41,166 --> 00:20:44,040 I disse dager, kan du slå til akkurat Google Forms, men tilbake i dag, 460 00:20:44,040 --> 00:20:46,914 vi måtte faktisk nå for-- dette var ikke engang så lenge ago-- nå 461 00:20:46,914 --> 00:20:49,410 for et programmerings språk som ikke var PHP. 462 00:20:49,410 --> 00:20:51,200 På den tiden var det noe som heter Perl, 463 00:20:51,200 --> 00:20:52,890 som har gått ut av moten siden. 464 00:20:52,890 --> 00:20:54,160 Men ideen er den samme. 465 00:20:54,160 --> 00:20:58,940 >> Og jeg egentlig satte meg ned for å prøve til porten går Perl-versjoner til PHP, 466 00:20:58,940 --> 00:21:03,710 men i fullstendig ansvarsfraskrivelse, ikke gi noen trodde til estetikk ennå. 467 00:21:03,710 --> 00:21:04,960 Så her er en nettside. 468 00:21:04,960 --> 00:21:05,670 Dette er en fil. 469 00:21:05,670 --> 00:21:09,470 Hvis jeg zoomer inn, dens tilsynelatende kalt froshim0.php 470 00:21:09,470 --> 00:21:12,060 bare fordi det er vår første eksempel i denne serien. 471 00:21:12,060 --> 00:21:15,970 Og legg merke til at den har det som synes å være en svært stygg HTML-skjema, 472 00:21:15,970 --> 00:21:18,680 men en form er interessant fordi det tillater 473 00:21:18,680 --> 00:21:21,910 meg å gi brukerundersøkelser til nettleseren. 474 00:21:21,910 --> 00:21:27,730 >> Nå sist gang da vi hadde en form, for å hvem vi avgir vår søkeparameter, 475 00:21:27,730 --> 00:21:30,450 køen parameter som det ble kalt? 476 00:21:30,450 --> 00:21:31,330 Så til Google, ikke sant? 477 00:21:31,330 --> 00:21:34,090 Vi helt punted på ideen om gjør noe med den inngangen. 478 00:21:34,090 --> 00:21:36,160 >> Men i dag, begynner vi å produsere utgang. 479 00:21:36,160 --> 00:21:39,420 Og atferden jeg kommer til å se her i utgangspunktet er ganske trivielt. 480 00:21:39,420 --> 00:21:42,980 David, jeg skal krysse av kjønn her, sier Matthews her. 481 00:21:42,980 --> 00:21:43,800 Jeg vil ikke være kaptein. 482 00:21:43,800 --> 00:21:45,410 Jeg kommer til å klikke Registeret. 483 00:21:45,410 --> 00:21:50,720 Og legg merke til at nettadressen har endret til register 0.php, 484 00:21:50,720 --> 00:21:52,310 og så er det denne stygge teksten her. 485 00:21:52,310 --> 00:21:54,460 Jeg ga ingen tanke til formateringen av dette. 486 00:21:54,460 --> 00:21:59,900 >> Men hva er interessant er at tre verdier ble tydeligvis gått i. 487 00:21:59,900 --> 00:22:02,960 Dette er PHP slags tilsvarer printf-- 488 00:22:02,960 --> 00:22:06,330 vi får se hva det egentlig heter i en bit-- som bare skriver ut 489 00:22:06,330 --> 00:22:08,300 hva man gått inn i den. 490 00:22:08,300 --> 00:22:11,414 Så dette tyder på at denne form hadde i det minste tre felt til det, 491 00:22:11,414 --> 00:22:12,580 og du så meg skrive dem inn. 492 00:22:12,580 --> 00:22:15,739 Den ene var mitt navn, var en kjønn, en var sovesal. 493 00:22:15,739 --> 00:22:18,780 Og kapteinen ikke engang blir sendt til serveren fordi jeg ikke sjekke det. 494 00:22:18,780 --> 00:22:22,150 >> Så dette er å si tilsynelatende, når du sender ting på nettet, 495 00:22:22,150 --> 00:22:26,830 ikke bare gjør URL noen ganger change-- noen ganger er det ikke. 496 00:22:26,830 --> 00:22:30,330 Faktisk filnavnet endres, men hva er fraværende fra URL 497 00:22:30,330 --> 00:22:32,861 at vi fikk se siste gang med Google. 498 00:22:32,861 --> 00:22:33,360 Yeah? 499 00:22:33,360 --> 00:22:34,380 >> STUDENT: Ingen søkestrengen 500 00:22:34,380 --> 00:22:35,220 >> DAVID J. MALAN: Det er ingen søkestrengen. 501 00:22:35,220 --> 00:22:37,270 Det er ingen spørsmålstegn noe. 502 00:22:37,270 --> 00:22:40,050 Det er ingen spørsmålstegn q lik katter, som vi gjorde forrige gang. 503 00:22:40,050 --> 00:22:42,170 Og det er absolutt ingen spørsmålstegn Navnet tilsvarer 504 00:22:42,170 --> 00:22:46,310 David eller dorm lik Matthews, så der er at alle kommer? 505 00:22:46,310 --> 00:22:51,290 >> Vel, la meg gå tilbake til gedit her og åpne opp den første av disse filene 506 00:22:51,290 --> 00:22:57,020 i min vhost, lokale verten, offentlig katalogen her og gå inn froshim0. 507 00:22:57,020 --> 00:23:02,060 Så det viser seg at nesten alt på denne siden er bare HTML. 508 00:23:02,060 --> 00:23:05,410 Og dette kan være ukjente for deg, men det snart vil være mer så med PSet 6 509 00:23:05,410 --> 00:23:07,370 og PSet 7 og PSet 8. 510 00:23:07,370 --> 00:23:09,160 Men dette er bare en HTML-side. 511 00:23:09,160 --> 00:23:12,400 >> Og det interessante ting synes å være over her. 512 00:23:12,400 --> 00:23:16,290 En form tag hvis handling attributt har en verdi på 0 register. 513 00:23:16,290 --> 00:23:18,890 Det er derfor når jeg sender inn dette, går den til den filen. 514 00:23:18,890 --> 00:23:20,620 Men metoden er annerledes today-- innlegg. 515 00:23:20,620 --> 00:23:23,120 Så det viser seg at det er minst to metoder på nettet som benyttes 516 00:23:23,120 --> 00:23:24,911 å sende informasjon fra nettleser til serveren. 517 00:23:24,911 --> 00:23:25,980 Get setter den i nettadressen. 518 00:23:25,980 --> 00:23:27,950 Post setter det andre steder. 519 00:23:27,950 --> 00:23:30,570 Og når og hvorfor du kanskje faktisk ønsker et nettsted 520 00:23:30,570 --> 00:23:34,110 å bruke innlegget så i stedet av få, bare intuitivt? 521 00:23:34,110 --> 00:23:37,080 Hvilken som helst nettside. 522 00:23:37,080 --> 00:23:42,010 Hva slags data skal sendes bare ved slutning nå via post i motsetning 523 00:23:42,010 --> 00:23:45,184 å få, hvis vi har sett de to forskjeller? 524 00:23:45,184 --> 00:23:46,350 STUDENT: [uhørbart] sikre. 525 00:23:46,350 --> 00:23:47,790 DAVID J. MALAN: Hvis du vil noe å være sikker. 526 00:23:47,790 --> 00:23:50,360 Så du kan skrive inn et passord inn i en webside, et kredittkort 527 00:23:50,360 --> 00:23:53,030 inn i en nettside ville slag av disse suboptimal 528 00:23:53,030 --> 00:23:56,220 hvis leseren sette det Verdien på innsiden av nettadressen. 529 00:23:56,220 --> 00:23:57,680 Hvorfor? 530 00:23:57,680 --> 00:24:00,059 Du ser den, noe som ikke gjør det synes å være en så stor avtale, 531 00:24:00,059 --> 00:24:03,350 men oddsen er du ganske ofte gå borte fra datamaskinen eller bruk av datamaskinen 532 00:24:03,350 --> 00:24:05,310 laboratorier, og så noen andre, eller til og med en romkamerat 533 00:24:05,310 --> 00:24:08,220 kan enkelt gå opp og se at privat informasjon. 534 00:24:08,220 --> 00:24:10,220 Når du sender en e-post via nettet, har du sannsynligvis 535 00:24:10,220 --> 00:24:12,350 ønsker ikke at data ending opp i URL også. 536 00:24:12,350 --> 00:24:15,266 Og så det er en rekke grunner hvorfor vi ønsker kanskje å sette det her. 537 00:24:15,266 --> 00:24:18,610 Og photos-- rett, kan jeg ikke engang helt forestill deg hvordan du ville ta en grafisk, 538 00:24:18,610 --> 00:24:21,480 som en JPEG, og sette det inn i en URL. 539 00:24:21,480 --> 00:24:22,330 Du kan gjøre det. 540 00:24:22,330 --> 00:24:25,840 Det finnes måter å kode det, men det er bare ikke grei sånn. 541 00:24:25,840 --> 00:24:29,030 >> Så registrer 0 er faktisk veldig uimponerende. 542 00:24:29,030 --> 00:24:31,610 Alle sier det bokstavelig talt er dette. 543 00:24:31,610 --> 00:24:35,910 Den skriver ut på innsiden av noen HTML tags følgende. 544 00:24:35,910 --> 00:24:38,640 Jeg har en PHP kode her nestet inne i en pre tag. 545 00:24:38,640 --> 00:24:42,300 "Pre" betyr bare pre-formatert tekst, mono linjeavstand, som en skrivemaskin. 546 00:24:42,300 --> 00:24:44,836 >> Printr er en utskrift rekursiv funksjon. 547 00:24:44,836 --> 00:24:46,710 Og så er det dette interessante her. 548 00:24:46,710 --> 00:24:48,835 Og vi vil komme tilbake til dette fordi det finnes andre, 549 00:24:48,835 --> 00:24:51,140 men dollartegn strek post synes å være 550 00:24:51,140 --> 00:24:56,110 en variabel i PHP som noe du sender fra nettleseren til server 551 00:24:56,110 --> 00:24:58,040 blir lagret for deg. 552 00:24:58,040 --> 00:25:00,930 Og vi får se hvordan å få på denne informasjonen før lenge. 553 00:25:00,930 --> 00:25:04,000 >> Men først, la oss gå tilbake til et litt annet eksempel. 554 00:25:04,000 --> 00:25:09,050 Går inn register-- eller heller, froshims1.php, 555 00:25:09,050 --> 00:25:10,470 som ser litt annerledes ut. 556 00:25:10,470 --> 00:25:12,670 Jeg tok litt mer innsats med formatering, 557 00:25:12,670 --> 00:25:14,370 selv om det er fortsatt ganske stygg. 558 00:25:14,370 --> 00:25:16,990 Men jeg kommer til å gå videre og skriv inn "David" nå. 559 00:25:16,990 --> 00:25:17,850 Male. 560 00:25:17,850 --> 00:25:19,360 Vi skal sjekke "captain" denne gangen. 561 00:25:19,360 --> 00:25:20,660 Vi vil gjøre Matthews. 562 00:25:20,660 --> 00:25:22,430 Og registrer deg. 563 00:25:22,430 --> 00:25:24,110 >> Og denne gangen står det, hm, egentlig ikke. 564 00:25:24,110 --> 00:25:26,180 Greit, så hva registrera en? 565 00:25:26,180 --> 00:25:30,509 La meg gå inn i åpent register en og-- hm. 566 00:25:30,509 --> 00:25:32,300 Greit, så dette er interessant, og denne 567 00:25:32,300 --> 00:25:34,880 er et springbrett nå mot mer interessante programmer. 568 00:25:34,880 --> 00:25:38,970 >> Legg merke til toppen av denne filen har en PHP-koden samt noen kommentarer. 569 00:25:38,970 --> 00:25:42,590 Og disse er, for nå, en distraksjon så la oss bare bli kvitt disse kommentarene 570 00:25:42,590 --> 00:25:47,070 akkurat som de er i C. Og jeg hevder med denne mengde koder med en kommentar 571 00:25:47,070 --> 00:25:49,280 at denne koden er validere innlevering. 572 00:25:49,280 --> 00:25:51,690 >> Vel, det viser seg at variabler som dollartegn 573 00:25:51,690 --> 00:25:53,739 strek innlegg er kalt super globals. 574 00:25:53,739 --> 00:25:55,530 De er som disse spesielle globale variabler 575 00:25:55,530 --> 00:25:58,840 som er like omni-dag tilgjengelig i programmet. 576 00:25:58,840 --> 00:26:03,870 Og du kan bruke hakeparentes notasjon å indeksere inn i dem ikke med tallene 577 00:26:03,870 --> 00:26:07,460 som 0, 1, 2, 3, men faktiske ord. 578 00:26:07,460 --> 00:26:12,100 >> Så du kan tenke på dollartegn strek innlegget som en slags hash table 579 00:26:12,100 --> 00:26:15,920 at du kunne passere en nøkkel inn i, et oppslag ord i mellom hakeparentesene, 580 00:26:15,920 --> 00:26:19,370 og det kommer til å gi deg tilbake verdi som brukeren faktisk gis. 581 00:26:19,370 --> 00:26:21,210 PHP har en funksjon heter tom at bare 582 00:26:21,210 --> 00:26:23,720 sier ja eller nei, dette variabelen er tom eller ikke. 583 00:26:23,720 --> 00:26:27,250 Vi har disse doble barer, noe som bare betyr eller, som i C. 584 00:26:27,250 --> 00:26:31,740 >> Så i praksis, er denne linjen fire like si hvis brukeren ikke gi et navn 585 00:26:31,740 --> 00:26:36,540 eller ikke gi et kjønn eller ikke gi en sovesal, gå videre og omdirigere ham 586 00:26:36,540 --> 00:26:38,184 eller henne via denne linjen her. 587 00:26:38,184 --> 00:26:40,600 Så dette er en litt kryptisk, men dette betyr bare bokstavelig talt 588 00:26:40,600 --> 00:26:43,330 gå tilbake til dette stedet, så det punter brukeren 589 00:26:43,330 --> 00:26:45,420 tilbake til uansett hvor han eller hun kom fra. 590 00:26:45,420 --> 00:26:47,880 Men det er litt uelegant i at jeg hardkodet det. 591 00:26:47,880 --> 00:26:52,150 >> Men hva om dette hvis tilstanden vurderer ikke å true? 592 00:26:52,150 --> 00:26:55,790 Hva hvis brukeren ga meg sin eller hennes navn og dorm og kjønn? 593 00:26:55,790 --> 00:26:58,540 At hvis tilstanden ikke er kommer til å vurdere å true, 594 00:26:58,540 --> 00:27:00,650 så jeg ikke treffer avkjørsel i linje 7. 595 00:27:00,650 --> 00:27:01,680 Så hva skjer? 596 00:27:01,680 --> 00:27:03,880 Og dette er hva som er interessant om PHP. 597 00:27:03,880 --> 00:27:07,470 >> Du kan slippe inn og ut av PHP-modus, så å si. 598 00:27:07,470 --> 00:27:10,985 Hvis du vil ha litt kode for å utføre, du kan åpne og lukke et PHP tag 599 00:27:10,985 --> 00:27:13,010 og sette kode der som jeg har gjort her. 600 00:27:13,010 --> 00:27:16,810 Så snart du lukker PHP-koden, serveren 601 00:27:16,810 --> 00:27:19,407 bare kommer til å spytte ut hva du putter der. 602 00:27:19,407 --> 00:27:21,740 Og ja, dette var en del av den opprinnelige utformingen av PHP, 603 00:27:21,740 --> 00:27:25,280 for bedre for verre, var dette commingling av kode og markup 604 00:27:25,280 --> 00:27:25,920 språk. 605 00:27:25,920 --> 00:27:28,670 Og vi vil se at dette svært raskt tilfaller inn i en rot. 606 00:27:28,670 --> 00:27:31,280 Og så vi vil gjøre det bedre enn dette til slutt, men bare 607 00:27:31,280 --> 00:27:35,620 legge merke til den enkle som jeg er faktisk i stand til å utføre en viss logikk. 608 00:27:35,620 --> 00:27:37,440 >> Men fortsatt litt uimponerende. 609 00:27:37,440 --> 00:27:41,210 La oss åpne opp versjon to av Frosh direktemeldinger, noe som 610 00:27:41,210 --> 00:27:44,270 tilsynelatende underkaster seg register2.php. 611 00:27:44,270 --> 00:27:47,600 Så denne filen som faktisk skjer å ser nesten den samme. 612 00:27:47,600 --> 00:27:50,780 Jeg kommer til å gå til Frosh direktemeldinger to. 613 00:27:50,780 --> 00:27:53,050 Men i Frosh direktemeldinger 2, la oss se hva som skjer. 614 00:27:53,050 --> 00:27:58,110 >> David, klikk på knappen, så det heter; Matthews, ingen kaptein. 615 00:27:58,110 --> 00:27:59,230 Registrere. 616 00:27:59,230 --> 00:28:00,130 Du er registrert. 617 00:28:00,130 --> 00:28:00,700 Ikke egentlig. 618 00:28:00,700 --> 00:28:02,574 Å vente, vi bare gjorde som eksempel, gjorde vi ikke? 619 00:28:02,574 --> 00:28:04,520 All right, stand by. 620 00:28:04,520 --> 00:28:06,602 Vi vil gjøre de tre. 621 00:28:06,602 --> 00:28:08,560 Helt klart noe handler om å skje med Gmail. 622 00:28:08,560 --> 00:28:09,600 Vi vil komme dit. 623 00:28:09,600 --> 00:28:11,900 >> Så Frosh direktemeldinger 3 ser slik ut. 624 00:28:11,900 --> 00:28:13,050 Ikke annerledes. 625 00:28:13,050 --> 00:28:19,850 Men når jeg gjør David, male, Matthews, og registrere, denne tredje og siste versjon 626 00:28:19,850 --> 00:28:22,230 krav, ganske enkelt, du er registrerte egentlig. 627 00:28:22,230 --> 00:28:23,560 Det er liksom uvesentlig. 628 00:28:23,560 --> 00:28:25,600 Men jeg hevder med dette tredje og siste versjon 629 00:28:25,600 --> 00:28:30,610 Jeg har nå gjenskapt nøyaktig hva min romkamerat og jeg bygget for Frosh direktemeldinger 630 00:28:30,610 --> 00:28:31,731 program år siden. 631 00:28:31,731 --> 00:28:32,480 Og det var enkelt. 632 00:28:32,480 --> 00:28:34,330 Det var ingen database, ingen Excel-regneark. 633 00:28:34,330 --> 00:28:36,450 Men enda viktigere, Det var ikke mer papir 634 00:28:36,450 --> 00:28:42,520 fordi det vi gjorde med dette programmet var å faktisk email Proctor, som 635 00:28:42,520 --> 00:28:44,530 var tidligere mottak disse tingene via skjemaer. 636 00:28:44,530 --> 00:28:48,890 >> Og tilsynelatende vi har programmert dette i en slik måte at når noen registrerer, 637 00:28:48,890 --> 00:28:52,470 John Harvard konto e-poster proctor-- eller i seg selv i dette tilfellet 638 00:28:52,470 --> 00:28:55,960 John Harvard-- med følgende text-- "Denne personen bare registrert." 639 00:28:55,960 --> 00:29:00,560 Navn er David, er kaptein blank; kjønn, mann; og dorm, Matthews. 640 00:29:00,560 --> 00:29:01,560 >> Så hva skjedde der? 641 00:29:01,560 --> 00:29:05,360 Vel, den aktuelle filen her er tilsynelatende register3.php. 642 00:29:05,360 --> 00:29:09,080 Og hvis jeg åpner denne, vil du se både makt kode som dette 643 00:29:09,080 --> 00:29:12,380 og også, for å være ærlig, den usikkerhet av et system som e-post. 644 00:29:12,380 --> 00:29:16,290 Jeg har nettopp effektivt lot til være John Harvard på følgende måte. 645 00:29:16,290 --> 00:29:20,920 >> Jeg har den åpne php tag opp toppen, som bare sier her kommer noen PHP-kode. 646 00:29:20,920 --> 00:29:23,155 Her nede, viser seg at det er bibliotekene i PHP. 647 00:29:23,155 --> 00:29:26,410 Du trenger bare ikke å Inkluder overskrift filer som mye. 648 00:29:26,410 --> 00:29:28,900 Du får mer med kjøkkenbenken, så å si. 649 00:29:28,900 --> 00:29:31,820 >> Men denne gangen i linje 4, gjør jeg ønsker å spesialbibliotek kalt 650 00:29:31,820 --> 00:29:36,087 PHP mailer, som er noe du kan installere gratis i mange systemer. 651 00:29:36,087 --> 00:29:37,920 Ned her jeg validere innlevering bare 652 00:29:37,920 --> 00:29:40,540 ved å sjekke gjorde brukeren gi meg et navn, et kjønn og en sovesal. 653 00:29:40,540 --> 00:29:44,130 Og hvis så, gå videre og instantiate en mailer. 654 00:29:44,130 --> 00:29:47,020 >> Du kan tenke på dette som en linje med kode som bare tildeler. 655 00:29:47,020 --> 00:29:48,950 Det er som malloc, men det er litt mer sexy 656 00:29:48,950 --> 00:29:51,790 i at du nevner ikke bare malloc og noen generiske nummer. 657 00:29:51,790 --> 00:29:55,030 Du sier gi meg en av disse, gi meg en ny en av disse. 658 00:29:55,030 --> 00:29:57,950 >> Og hvis du har programmert i Java eller C ++ eller andre språk, 659 00:29:57,950 --> 00:29:59,130 du kanskje har sett dette. 660 00:29:59,130 --> 00:30:01,840 Men den korte av det, hvis ukjente, denne linjen 661 00:30:01,840 --> 00:30:05,410 setter inn dollartegn post en spesiell struct kalt 662 00:30:05,410 --> 00:30:08,731 et objekt som har innebygd e-post-funksjonalitet. 663 00:30:08,731 --> 00:30:10,355 Og faktisk, merke og lignende syntaks. 664 00:30:10,355 --> 00:30:11,900 >> Dette er ikke en peker, per se. 665 00:30:11,900 --> 00:30:13,990 PHP bruker akkurat den samme syntaks. 666 00:30:13,990 --> 00:30:17,660 Denne linjen sier bruk SMTP-- Simple Mail Transfer 667 00:30:17,660 --> 00:30:20,900 Protocol, som er akkurat den protokoll som brukes til å sende e-post. 668 00:30:20,900 --> 00:30:24,240 Dette er å spesifisere bruk Harvard SMTP-server, som 669 00:30:24,240 --> 00:30:25,830 er et sted her på campus. 670 00:30:25,830 --> 00:30:28,480 >> Dette sier hva TCP portnummer å snakke med, 671 00:30:28,480 --> 00:30:31,650 og jeg bare funnet det ut ved å googling eller ved å spørre help desk. 672 00:30:31,650 --> 00:30:34,640 Og da fordi Harvard bruker noen systemsikkerheten på mail server-- 673 00:30:34,640 --> 00:30:37,060 i det minste å kryptere trafikk mellom deg og det, 674 00:30:37,060 --> 00:30:41,380 selv om alle kan sende til it-- Jeg kommer til å slå på TLS-protokollen 675 00:30:41,380 --> 00:30:42,710 for å holde dette sikkert. 676 00:30:42,710 --> 00:30:44,730 >> Men det er her ting bli litt skummelt. 677 00:30:44,730 --> 00:30:47,970 Jeg kan bare vilkårlig si at jeg er jharvard, 678 00:30:47,970 --> 00:30:51,930 og jeg kan bare vilkårlig e-post til meg selv her. 679 00:30:51,930 --> 00:30:55,650 Og så kan jeg angi en lagt med denne linjen her. 680 00:30:55,650 --> 00:30:58,460 >> Og dette ser bare stygg, men det er bare en haug med sammensetning. 681 00:30:58,460 --> 00:31:04,480 Det viser seg at PHP har en super nyttig symbol, som noen språk, dot operatør, 682 00:31:04,480 --> 00:31:07,340 som bare bokstavelig Setter sammen strengen etter at strengen etter streng, 683 00:31:07,340 --> 00:31:09,810 og du trenger ikke å malloc eller figur ut den totale lengden av strengen. 684 00:31:09,810 --> 00:31:10,820 Du bare gjør det. 685 00:31:10,820 --> 00:31:15,220 Og faktisk, fordi jeg concatenating i alle disse tingene med disse prikkene, 686 00:31:15,220 --> 00:31:18,330 det er derfor den e-posten jeg sendte så ut som det gjorde. 687 00:31:18,330 --> 00:31:20,610 >> Og så til slutt her, jeg sender mail. 688 00:31:20,610 --> 00:31:22,580 Så hvis dette er usant, Jeg bare kommer til å dø, 689 00:31:22,580 --> 00:31:25,680 som er en funksjon som bare utskrifter til skjermen enkelte feilmeldingen. 690 00:31:25,680 --> 00:31:29,170 Men det er i virkeligheten ringer av sendefunksjonen. 691 00:31:29,170 --> 00:31:31,780 Ellers, hvis alt dette mislykkes, den omdirigerer meg tilbake hit. 692 00:31:31,780 --> 00:31:34,050 >> Og hvorfor gjorde jeg ser at Jeg er registrert egentlig? 693 00:31:34,050 --> 00:31:36,110 Vel, det skjedde akkurat her. 694 00:31:36,110 --> 00:31:38,170 Så jeg tar dette opp for et par grunner. 695 00:31:38,170 --> 00:31:41,542 >> En, er dette nøyaktig hvordan hvis du bygger noen nettside for et avsluttende prosjekt 696 00:31:41,542 --> 00:31:44,000 eller for den virkelige verden, er dette hvordan du sender e-postpåminnelser 697 00:31:44,000 --> 00:31:45,924 til dine kunder eller abonnenter. 698 00:31:45,924 --> 00:31:47,590 Dette er hvordan du sender passord påminnelser. 699 00:31:47,590 --> 00:31:50,760 Dette er hvordan du sender folk meldinger at de har en ny Facebook 700 00:31:50,760 --> 00:31:52,990 Meldingen påvente eller noe sånt. 701 00:31:52,990 --> 00:31:55,010 >> Men det taler også til det faktum at dette kunne 702 00:31:55,010 --> 00:31:58,160 har vært veldig bra fra Davin eller noen andre. 703 00:31:58,160 --> 00:32:00,567 Og jeg sier denne typen med et smil fordi jeg er 704 00:32:00,567 --> 00:32:03,400 helt sikker på hva som skjer gjennom flere av deres sinn på dette punktet. 705 00:32:03,400 --> 00:32:11,910 Men dette er en av de som gjør som jeg sier, ikke som jeg gjør slags ting, 706 00:32:11,910 --> 00:32:14,480 fordi det er trivielt å smi e-poster som dette. 707 00:32:14,480 --> 00:32:16,480 Men som du kanskje har sett eller lese i Crimson, 708 00:32:16,480 --> 00:32:18,271 i det siste er det også ganske trivielt for folk 709 00:32:18,271 --> 00:32:20,050 å spore dem tilbake til en viss opprinnelse. 710 00:32:20,050 --> 00:32:23,790 Og spør meg litt tid, kanskje på CS50 lunsj, hvor jeg først 711 00:32:23,790 --> 00:32:27,080 ble kjent svært tett nesten til ed bord mange år 712 00:32:27,080 --> 00:32:30,890 siden da jeg oppdaget hvordan internett fungerte. 713 00:32:30,890 --> 00:32:36,940 Så i noen case-- litt etter ed styret gjorde. 714 00:32:36,940 --> 00:32:42,300 >> Slik at i alle tilfelle, er det en hel haug med super globals, 715 00:32:42,300 --> 00:32:45,960 som de kalles her, hvorav den ene vi saw-- dollartegn strek innlegg. 716 00:32:45,960 --> 00:32:49,530 Det er et motstykke heter get, som er der ting fra en URL 717 00:32:49,530 --> 00:32:50,690 ender opp med å gå. 718 00:32:50,690 --> 00:32:54,051 Og det er en hel haug med andre, også-- session og server og cookie. 719 00:32:54,051 --> 00:32:55,800 Vi vil komme tilbake til cookie en annen gang, 720 00:32:55,800 --> 00:33:01,340 men økt er slags kult fordi akkurat now-- inntil now-- 721 00:33:01,340 --> 00:33:06,350 alt vi har gjort med en nettleser er liksom statsløs, så å si. 722 00:33:06,350 --> 00:33:10,060 Jeg kan klikke rundt, tilgang filer på serveren, noe 723 00:33:10,060 --> 00:33:13,500 skjer på skjermen, men er forbindelsen lukkes. 724 00:33:13,500 --> 00:33:17,450 Internet Explorer eller Firefox-ikonet slutter å spinne 725 00:33:17,450 --> 00:33:20,340 og du bare se hva at nettsiden inneholder. 726 00:33:20,340 --> 00:33:23,530 >> Så HTTP er statsløs i at når det er en forbindelse, 727 00:33:23,530 --> 00:33:25,050 får noen data, det er det. 728 00:33:25,050 --> 00:33:29,940 Ingen flere tilkobling, i motsetning til Skype, i motsetning til Facetime, i motsetning Gchat, som 729 00:33:29,940 --> 00:33:32,180 opprettholder en konstant tilkobling til tjeneren. 730 00:33:32,180 --> 00:33:34,650 Nettet er fundamentalt frakoblet, men vi vil 731 00:33:34,650 --> 00:33:36,630 se før lenge hvordan Vi kan simulere ting 732 00:33:36,630 --> 00:33:39,300 som Facebook chat og Gchat, som opprettholder en illusion-- 733 00:33:39,300 --> 00:33:41,680 eller faktisk gjøre opprettholde en konstant tilkobling ved hjelp 734 00:33:41,680 --> 00:33:43,270 mer moderne teknologi. 735 00:33:43,270 --> 00:33:49,000 >> Men hvis jeg går til, sier counter.php, Dette er et annet enkelt eksempel, 736 00:33:49,000 --> 00:33:52,700 som vi skal se, som tenker i dag Jeg besøkte stedet null tid. 737 00:33:52,700 --> 00:33:56,790 Men hvis jeg bare laste siden på nytt, det liksom vet at jeg var her før. 738 00:33:56,790 --> 00:33:58,840 Hvis jeg laster igjen, det vet at jeg var her før. 739 00:33:58,840 --> 00:34:01,100 Og igjen og igjen og igjen og igjen. 740 00:34:01,100 --> 00:34:03,610 >> Så det er noen pluss-plussing skjer, men varsel 741 00:34:03,610 --> 00:34:07,090 den lille tingen spinner aldri så kort opp toppen og deretter kobler ut, 742 00:34:07,090 --> 00:34:11,179 så det er ikke som jeg har en konstant tilkobling til apparatet. 743 00:34:11,179 --> 00:34:16,929 Vel, hvis jeg går inn counter.php, merke til hvor enkelt det er. 744 00:34:16,929 --> 00:34:19,080 Jeg først kaller denne spesielle funksjon som vi snart 745 00:34:19,080 --> 00:34:21,513 begynne å ta for gitt kalles session start. 746 00:34:21,513 --> 00:34:22,179 Start en økt. 747 00:34:22,179 --> 00:34:25,095 >> Og en økt heretter er bare kommer til å bli en bøtte, som en handle 748 00:34:25,095 --> 00:34:28,120 kurven der du kan sette verdier og hva slags tillit som programmerer 749 00:34:28,120 --> 00:34:31,590 at de kommer til å være her når at brukeren kommer back-- et sekund 750 00:34:31,590 --> 00:34:35,670 senere, en time senere, enda et år senere, så lenge han eller hun ikke forsvinner 751 00:34:35,670 --> 00:34:37,602 sine informasjonskapsler, som vi vil til slutt se. 752 00:34:37,602 --> 00:34:39,310 Og nå har jeg bare en om tilstanden her. 753 00:34:39,310 --> 00:34:44,679 Så hvis følgende nøkkel, kalles teller, er satt inni 754 00:34:44,679 --> 00:34:49,210 av denne super global-- denne hash tabell, hvis du will-- kalt sesjon, 755 00:34:49,210 --> 00:34:53,350 deretter gå videre og ta tak i verdi fra session-- tenke 756 00:34:53,350 --> 00:34:55,250 på dette som et kjøpesenter cart-- og lagre det 757 00:34:55,250 --> 00:34:57,680 i en midlertidig variabel kalt telleren. 758 00:34:57,680 --> 00:35:02,240 >> Ellers, hvis denne verdien telleren var ikke satt i den såkalte handlekurv, 759 00:35:02,240 --> 00:35:04,430 bare initialisere den til 0. 760 00:35:04,430 --> 00:35:09,830 Til slutt, her nede, gå og sette tilbake inn i handlekurver eller økten 761 00:35:09,830 --> 00:35:13,000 verdien av en teller. 762 00:35:13,000 --> 00:35:16,730 Så det viser seg at dette spesiell beholder her-- 763 00:35:16,730 --> 00:35:20,355 som, igjen, er en av disse forbundet matriser, en matrise som du kan indeksere 764 00:35:20,355 --> 00:35:25,010 inn ord i stedet for numbers-- vedvarer selv etter at brukeren går bort. 765 00:35:25,010 --> 00:35:26,510 Igjen, vil jeg gå tilbake til siden nå. 766 00:35:26,510 --> 00:35:28,400 Det har vært et minutt eller så. 767 00:35:28,400 --> 00:35:31,300 Men det husker at jeg har vært her 19 ganger før. 768 00:35:31,300 --> 00:35:32,740 Dette er mitt 20. besøk. 769 00:35:32,740 --> 00:35:36,560 >> Og så dette kommer til å være nøkkelen til implementere hvilken som helst nettside som husker 770 00:35:36,560 --> 00:35:40,640 at du er logget inn, at du setter noe bokstavelig i handlekurven 771 00:35:40,640 --> 00:35:43,902 å kjøpe eller at du har noen antall meldinger som venter. 772 00:35:43,902 --> 00:35:45,610 Hver gang du vil huske informasjon, 773 00:35:45,610 --> 00:35:48,130 vi vil se at PHP, som flere andre språk, 774 00:35:48,130 --> 00:35:53,640 gir oss med denne illusjonen av staten selv om, som du vil se i PSet 6, 775 00:35:53,640 --> 00:35:57,642 som du gjør HTTP-forespørsler fra klient til server, det er det. 776 00:35:57,642 --> 00:35:59,850 Når du kommer tilbake som respons, det er ingenting mer 777 00:35:59,850 --> 00:36:01,790 kommer tilbake fra serveren som standard. 778 00:36:01,790 --> 00:36:03,820 Men vi får se hvordan å omgå det. 779 00:36:03,820 --> 00:36:07,430 >> Vel, la oss prøve å rydde opp litt. 780 00:36:07,430 --> 00:36:09,470 Vi har sett noen ulike eksempler der. 781 00:36:09,470 --> 00:36:12,250 Oh, og som en side, for de som er kjent eller ukjent, 782 00:36:12,250 --> 00:36:14,230 av den grunn at den Frosh direktemeldinger eksempel gikk 783 00:36:14,230 --> 00:36:18,060 fra å se virkelig stygg å slightly-- godt, 784 00:36:18,060 --> 00:36:23,160 fortsatt ugly-- til svakt mindre stygg men fortsatt stygg 785 00:36:23,160 --> 00:36:25,230 er fordi hvis vi ser på kildekoden her, 786 00:36:25,230 --> 00:36:28,240 det viser seg at jeg har denne på toppen av filen. 787 00:36:28,240 --> 00:36:32,570 >> Det viser seg at bootstrap er en av mange fritt tilgjengelige bibliotek der ute 788 00:36:32,570 --> 00:36:37,140 som ikke eksisterer for programmeringsspråk alltid, men for CSS eller Java 789 00:36:37,140 --> 00:36:39,190 eller HTML eller en rekke språk. 790 00:36:39,190 --> 00:36:42,160 >> Og disse folkene her-- opprinnelig kom ut 791 00:36:42,160 --> 00:36:44,730 av Twitter-- bare ha en hel haug med stiler. 792 00:36:44,730 --> 00:36:47,360 Det er en massiv fil her at noen skrev, 793 00:36:47,360 --> 00:36:51,020 eller noens skrev over tid som spesifiserer farger og formatering 794 00:36:51,020 --> 00:36:53,740 og whatnot slik at jeg kan slags låne deres syntaks 795 00:36:53,740 --> 00:36:56,157 og ikke trenger å finne ut hvordan å legge ut formen min. 796 00:36:56,157 --> 00:36:57,990 Dette er også minified slik at en datamaskin kan 797 00:36:57,990 --> 00:37:00,560 forstå det, men ikke nødvendigvis et menneske. 798 00:37:00,560 --> 00:37:03,050 Så det er bare hvorfor stilisering det endret. 799 00:37:03,050 --> 00:37:05,450 >> Men la oss nå gjøre det bedre i form av design, 800 00:37:05,450 --> 00:37:07,490 fordi hvis vi holde nede denne veien for lenge, 801 00:37:07,490 --> 00:37:11,290 koden vår kommer til å bli rotete og Messier. 802 00:37:11,290 --> 00:37:13,040 Så la oss fokusere på disse eksemplene her. 803 00:37:13,040 --> 00:37:15,090 Den siste for i dag. 804 00:37:15,090 --> 00:37:18,720 >> Så her er en superenkel versjon 1.0 av CS50 hjemmeside. 805 00:37:18,720 --> 00:37:21,250 Den har kun linker til forelesninger og pensum, 806 00:37:21,250 --> 00:37:25,490 og den bruker som sorterte liste tag-- UL tag som vi brukte forrige gang. 807 00:37:25,490 --> 00:37:28,800 Og hvis faktisk, hvis jeg åpne opp Vis sidekilde, 808 00:37:28,800 --> 00:37:31,710 vil du se at dette er veldig, veldig enkel HTML. 809 00:37:31,710 --> 00:37:35,460 Og i virkeligheten, selv om dette er en PHP-fil under panseret, 810 00:37:35,460 --> 00:37:38,620 det er fortsatt bare spytter ut bare HTML for nå. 811 00:37:38,620 --> 00:37:41,312 >> Så hvis jeg klikker på forelesninger, vi se dette skje. 812 00:37:41,312 --> 00:37:43,020 Og hvis jeg klikker på uken null, ser vi dette. 813 00:37:43,020 --> 00:37:44,920 Og hvis jeg klikker på Onsdag, ser vi dette. 814 00:37:44,920 --> 00:37:47,900 Og dette tilsynelatende var PDF lysbildene fra den dagen. 815 00:37:47,900 --> 00:37:52,020 Alt jeg har gjort er link med en ankerkoden til denne nettadressen her. 816 00:37:52,020 --> 00:37:55,400 >> Så dette er bare for å si at dette er en ganske enkel versjon av CS50 hjemmeside. 817 00:37:55,400 --> 00:37:56,790 La oss se hvordan det er implementert. 818 00:37:56,790 --> 00:38:01,240 Hvis jeg går inn i mvc0 katalog, vi får se noen filer. 819 00:38:01,240 --> 00:38:03,250 Den ene er en README, så hvis noe av dette er for rask, 820 00:38:03,250 --> 00:38:05,166 du kan bare rote rundt mer bedagelig senere. 821 00:38:05,166 --> 00:38:07,930 Og legg merke til her er en index.php fil. 822 00:38:07,930 --> 00:38:09,960 Det viser seg at hvis du selv, det menneskelige, 823 00:38:09,960 --> 00:38:14,460 spesifiserer ikke et endelig navn i en URL, webserveren vanligvis 824 00:38:14,460 --> 00:38:17,010 infers noen standardnavn for deg. 825 00:38:17,010 --> 00:38:20,060 En indeks dot noe er generelt standard. 826 00:38:20,060 --> 00:38:23,010 >> Så det er derfor et øyeblikk siden da jeg besøkte denne nettadressen her, 827 00:38:23,010 --> 00:38:26,750 noe filnavn, ingen fil forlengelse, ingen periode i nettadressen. 828 00:38:26,750 --> 00:38:29,710 Det bare visste en eller annen magisk å lete etter index.php. 829 00:38:29,710 --> 00:38:30,870 Det er bare en konvensjon. 830 00:38:30,870 --> 00:38:32,360 Kan kalles noe. 831 00:38:32,360 --> 00:38:35,110 >> Så hvis jeg nå går inn index.php, vil du se 832 00:38:35,110 --> 00:38:37,100 at indeed-- la oss kvitte seg med kommentarene 833 00:38:37,100 --> 00:38:39,500 her fordi det er egentlig noe interessant å it-- 834 00:38:39,500 --> 00:38:41,579 dette er bare hard kodet HTML. 835 00:38:41,579 --> 00:38:43,370 Så det er konsekvent, skjønt, med min påstand 836 00:38:43,370 --> 00:38:45,230 at du kan blande HTML og PHP. 837 00:38:45,230 --> 00:38:48,060 Det er ingen faktiske programmering logikken her. 838 00:38:48,060 --> 00:38:51,030 >> Og de andre filene er pen mye like uinteressant. 839 00:38:51,030 --> 00:38:56,240 Det er bare hardkodet uke en her til uke én m og uke en w, 840 00:38:56,240 --> 00:38:57,510 for mandag og onsdag. 841 00:38:57,510 --> 00:39:01,890 Og så hvis jeg åpner opp uke null, merke til det er nesten identiske. 842 00:39:01,890 --> 00:39:03,320 >> Og det er slag av en nøkkel takeaway. 843 00:39:03,320 --> 00:39:06,180 Legg merke til hvor overflødige dette er. 844 00:39:06,180 --> 00:39:10,710 Disse filene knapt endre, og ennå jeg trakk en av disse kopier / lim jobber 845 00:39:10,710 --> 00:39:13,420 der jeg tok en file-- formodentlig i uke zero-- kopiert det 846 00:39:13,420 --> 00:39:16,320 når uken kom rundt, og forskjøvet noen verdier. 847 00:39:16,320 --> 00:39:18,590 Vi bør nok være i stand å gjøre det bedre enn dette. 848 00:39:18,590 --> 00:39:21,800 >> Så la oss gå tilbake til MVC og går inn i en versjon. 849 00:39:21,800 --> 00:39:24,810 Og legg merke til jeg har fått en få filer, fordi det 850 00:39:24,810 --> 00:39:29,870 var felles for alle disse filene bare en øyeblikk ago-- hvis jeg går tilbake til versjon 0, 851 00:39:29,870 --> 00:39:32,600 la oss gå tilbake til indeks, og bare postulate-- 852 00:39:32,600 --> 00:39:36,090 når jeg bli kvitt den comments-- hvilken del av denne siden 853 00:39:36,090 --> 00:39:40,072 er antagelig i hver og en av filene mine? 854 00:39:40,072 --> 00:39:40,780 Bare ring det ut. 855 00:39:40,780 --> 00:39:44,620 Hvilke linjer er duplisert sannsynligvis på tvers av alle disse sidene? 856 00:39:44,620 --> 00:39:45,120 Yeah? 857 00:39:45,120 --> 00:39:46,110 >> STUDENT: [uhørbart]. 858 00:39:46,110 --> 00:39:47,660 >> DAVID J. MALAN: 1 til 9. 859 00:39:47,660 --> 00:39:48,720 Ja, absolutt. 860 00:39:48,720 --> 00:39:52,080 1 til 9, bortsett fra kanskje 8 endrer litt fordi CS50 861 00:39:52,080 --> 00:39:54,650 blir forelesninger eller uke null eller noe. 862 00:39:54,650 --> 00:39:55,970 Men nesten identiske. 863 00:39:55,970 --> 00:39:58,657 Så alt dette er bare slags kopiert og limt inn. 864 00:39:58,657 --> 00:40:00,490 Og det er et par andre linjer jeg kan tenke 865 00:40:00,490 --> 00:40:05,000 av det er trolig identiske på tvers av alle filene. 866 00:40:05,000 --> 00:40:06,315 >> STUDENT: 12 og 13. 867 00:40:06,315 --> 00:40:07,190 DAVID J. MALAN: Yeah. 868 00:40:07,190 --> 00:40:11,220 Jada, 12, 13, og 14 sannsynligvis, bare fordi den interessante ting 869 00:40:11,220 --> 00:40:15,460 som skjer på linjene 11 og 10, så det ville virke. 870 00:40:15,460 --> 00:40:18,350 Så la oss se på versjon 1, som forsøker å forbedre på dette. 871 00:40:18,350 --> 00:40:24,020 I versjon 1 av denne MVC example-- vil vi forklare hva MVC midler i en moment-- 872 00:40:24,020 --> 00:40:27,420 hvis jeg går inn i indeksen, den slags ser litt forvirrende nå. 873 00:40:27,420 --> 00:40:28,880 Det er ikke fullt så enkelt som før. 874 00:40:28,880 --> 00:40:30,906 >> Men når du begynner å les den nøye, er det 875 00:40:30,906 --> 00:40:32,530 ganske grei hva det gjør. 876 00:40:32,530 --> 00:40:34,397 Tilsynelatende linje 1 og linje 8 har erstattet 877 00:40:34,397 --> 00:40:37,230 alt av ting du bare identified-- men bare for godt mål, 878 00:40:37,230 --> 00:40:41,900 Jeg forlot ULS det bare i tilfelle noen dager ikke har en liste over ting. 879 00:40:41,900 --> 00:40:47,860 Og så krever er typen som pound inkludere i C. Den kopierer og limer 880 00:40:47,860 --> 00:40:50,470 innholdet effektivt akkurat her i denne filen. 881 00:40:50,470 --> 00:40:53,650 >> Så i header.php, som du kan slutte fra navnet sitt, 882 00:40:53,650 --> 00:40:55,330 kommer til å være overskriften på siden. 883 00:40:55,330 --> 00:40:57,110 Det er en slags foreldreløse her. 884 00:40:57,110 --> 00:41:01,820 Den har bare den øverste til det, men det er ikke mer innhold nedenfor. 885 00:41:01,820 --> 00:41:05,070 >> Og hvis jeg ser på bunnteksten i mellomtiden, som var den andre filen mentioned-- 886 00:41:05,070 --> 00:41:08,830 dette er enda mindre interessant, men igjen, det er vanlig å alt. 887 00:41:08,830 --> 00:41:10,250 Så dette er bunnteksten. 888 00:41:10,250 --> 00:41:11,300 Dette er overskriften. 889 00:41:11,300 --> 00:41:13,950 Dette er filen som er endring, så hvorfor ikke 890 00:41:13,950 --> 00:41:18,140 prøv å faktor ut alminnelighet med disse to linjene her? 891 00:41:18,140 --> 00:41:20,090 >> Men vi kan rense dette opp litt videre. 892 00:41:20,090 --> 00:41:23,260 Jeg kommer til å gå videre og åpne opp versjon to der 893 00:41:23,260 --> 00:41:27,106 vi vil se at det er en ny fil, helpers.php. 894 00:41:27,106 --> 00:41:28,610 Vi får se hva som er i et øyeblikk. 895 00:41:28,610 --> 00:41:30,930 La oss gå til indeks, som inngangspunkt som før. 896 00:41:30,930 --> 00:41:35,230 >> Og nå merker jeg krever helpers.php, ikke topp- eller bunnteksten. 897 00:41:35,230 --> 00:41:41,720 Men hjelpere er typen som helpers.c og helpers.h fra PSet 2 898 00:41:41,720 --> 00:41:46,150 eller PSet 3 lenge siden når du faktisk fant søke og finne for at PSet, 899 00:41:46,150 --> 00:41:50,950 og du hadde alt av koden din for sortering og søke i en egen fil. 900 00:41:50,950 --> 00:41:52,510 Det er det som skjer her. 901 00:41:52,510 --> 00:41:54,390 >> Og nå linje 3 ser litt annerledes. 902 00:41:54,390 --> 00:41:55,920 Og det er bare én linje. 903 00:41:55,920 --> 00:41:57,950 For å gjøre dette enda mer klart, jeg kunne bare 904 00:41:57,950 --> 00:42:01,820 gjør dette for å være stilren med alt annet vi har gjort. 905 00:42:01,820 --> 00:42:04,130 Men det er egentlig ikke å endre funksjonaliteten. 906 00:42:04,130 --> 00:42:05,880 Det er bare én linje av fast kode. 907 00:42:05,880 --> 00:42:09,010 >> Angivelig, det er en funksjon et sted kalt gjengi header, 908 00:42:09,010 --> 00:42:11,420 Og det er her ting bli ganske kraftig. 909 00:42:11,420 --> 00:42:17,040 Legg merke til at innsiden av sine parentes er det andre stykke syntaks? 910 00:42:17,040 --> 00:42:19,780 911 00:42:19,780 --> 00:42:23,350 Det er nok litt vanskelig å si, men merke there's-- Jeg skal sette noen hvit 912 00:42:23,350 --> 00:42:24,300 plass. 913 00:42:24,300 --> 00:42:25,530 Det er hakeparenteser. 914 00:42:25,530 --> 00:42:29,700 >> Og klammer vi så litt siden i sammenheng med assosiative matriser 915 00:42:29,700 --> 00:42:31,580 som er, igjen, som hash tabeller. 916 00:42:31,580 --> 00:42:36,230 Og hvis du tror nå til C, den rekkefølgen av argumenter i en funksjon 917 00:42:36,230 --> 00:42:37,570 må alltid være den samme. 918 00:42:37,570 --> 00:42:41,146 Du må huske hva bestille er-- x, y, z eller z, y, X- 919 00:42:41,146 --> 00:42:44,020 og du må alltid gi dem i samme rekkefølge eller se dem opp 920 00:42:44,020 --> 00:42:45,100 hvis du har glemt. 921 00:42:45,100 --> 00:42:51,140 >> Men dette synes å være en smart måte av passerer en vilkårlig nøkkelverdi 922 00:42:51,140 --> 00:42:55,840 parene der tittelen er navnet av et argument i dette tilfellet 923 00:42:55,840 --> 00:42:58,334 og CS50 er dens verdi. 924 00:42:58,334 --> 00:43:00,250 Og det faktum at jeg har disse hakeparenteser 925 00:43:00,250 --> 00:43:02,560 her betyr at jeg kunne også passere i noe 926 00:43:02,560 --> 00:43:07,550 som en uke er 1 eller 0 eller 2 eller 3. 927 00:43:07,550 --> 00:43:10,550 Så vi har parameterisert denne funksjon på en slik måte 928 00:43:10,550 --> 00:43:15,180 at det kan ta flere innganger, men for nå er det bare den ene. 929 00:43:15,180 --> 00:43:20,060 >> Hvis jeg nå går inn helpers.php, merke til hva det gjør. 930 00:43:20,060 --> 00:43:22,030 Dette er en liten bit av ny funksjonalitet, 931 00:43:22,030 --> 00:43:24,190 men for nå bare ta på tro at dette er 932 00:43:24,190 --> 00:43:26,570 syntaksen som du definere en funksjon i PHP. 933 00:43:26,570 --> 00:43:27,840 Du bokstavelig talt si funksjon. 934 00:43:27,840 --> 00:43:30,090 Du trenger ikke angi en avkastning skriver, og det er konsistent 935 00:43:30,090 --> 00:43:33,880 med variabel detalj tidligere der du egentlig ikke sterkt skriver. 936 00:43:33,880 --> 00:43:35,650 >> Dette angir bare som, som standard, dette 937 00:43:35,650 --> 00:43:37,460 tar en assosiativ matrise som et argument. 938 00:43:37,460 --> 00:43:38,210 Og vet du hva? 939 00:43:38,210 --> 00:43:41,450 Hvis brukeren ikke består en i, antar en standardverdi. 940 00:43:41,450 --> 00:43:44,680 >> Dette er en funksjon som C ikke har for oss, som er fint, for nå 941 00:43:44,680 --> 00:43:46,430 data, selv om du ikke gi den noe, 942 00:43:46,430 --> 00:43:49,300 kommer til å bli en matrise men en tom en. 943 00:43:49,300 --> 00:43:51,860 Og som en side, ekstrakt bare gjør noe funky 944 00:43:51,860 --> 00:43:56,380 hvor det tar alt av nøklene fra dette assosiativ array, alle de tingene 945 00:43:56,380 --> 00:43:59,950 du kan sette i hakeparentes, og skaper variabler ut av dem 946 00:43:59,950 --> 00:44:06,270 slik at vi kan til slutt ha tilgang til dem i footet.php og header.php. 947 00:44:06,270 --> 00:44:08,950 Det er litt abstrakt, så la meg påpeke dette. 948 00:44:08,950 --> 00:44:12,990 >> I index.php, merker at jeg er passerer i en nøkkelverdi par tittelen 949 00:44:12,990 --> 00:44:14,850 med en verdi på CS50. 950 00:44:14,850 --> 00:44:18,660 Hvis jeg nå ser på helpers.php, merker at RenderHeader 951 00:44:18,660 --> 00:44:23,870 Utvinner at data som jeg har bestått i, og deretter krever header.php. 952 00:44:23,870 --> 00:44:27,970 Det jeg har gjort er liksom en fattig mann implementeringen nå av følgende. 953 00:44:27,970 --> 00:44:31,720 >> Hvis jeg åpner opp header.php, merke til at jeg har ikke lenger vanskelig 954 00:44:31,720 --> 00:44:34,890 kodet ordet CS50 i denne header-fil. 955 00:44:34,890 --> 00:44:39,310 Jeg har satt dette riktignok atrociously oppkalt funksjon, HTML spesialtegn, 956 00:44:39,310 --> 00:44:40,170 der inne. 957 00:44:40,170 --> 00:44:41,640 Men legg merke til hva jeg har gjort. 958 00:44:41,640 --> 00:44:44,240 Jeg har åpent HTML. 959 00:44:44,240 --> 00:44:47,420 Jeg da ha åpent hode og åpen tittel. 960 00:44:47,420 --> 00:44:52,380 >> Og deretter på innsiden av tittel største åpne og nære koder, jeg har en bit av PHP-kode. 961 00:44:52,380 --> 00:44:56,670 Og dette er en fin, men av syntaks, noe som betyr bare ekko ut. 962 00:44:56,670 --> 00:44:59,840 Det betyr bokstavelig dette-- ekko following-- 963 00:44:59,840 --> 00:45:01,910 men dette er mer sexy å skrive. 964 00:45:01,910 --> 00:45:05,000 Ekko ut tittelen som er blitt vedtatt i. 965 00:45:05,000 --> 00:45:07,560 >> Men hva tror du HTML spesielt røye handler om, 966 00:45:07,560 --> 00:45:10,590 spesielt hvis du har noen tidligere HTML-opplevelse? 967 00:45:10,590 --> 00:45:14,050 Hvilke tegn kan være farlig å passere på en side 968 00:45:14,050 --> 00:45:17,980 hvor du dynamisk generere websiden med kode som dette? 969 00:45:17,980 --> 00:45:21,370 970 00:45:21,370 --> 00:45:24,650 La meg gå til denne filen, versjon to, og se om jeg ikke kan indusere dette. 971 00:45:24,650 --> 00:45:26,210 >> Versjon to er dette. 972 00:45:26,210 --> 00:45:28,510 Og legg merke til alt er greit, fungerer bra. 973 00:45:28,510 --> 00:45:35,280 Men sett at jeg går inn i index.php og Jeg presiserte at tittelen på siden min 974 00:45:35,280 --> 00:45:36,630 er ikke CS50. 975 00:45:36,630 --> 00:45:44,930 Den er åpen brakett script varsling hello world, nær enkelt sitat, 976 00:45:44,930 --> 00:45:49,740 parentes, semikolon, åpen brakett, slash script. 977 00:45:49,740 --> 00:45:51,897 >> Script, som vi vil slutt ser, er en tag 978 00:45:51,897 --> 00:45:54,480 som du kan bruke til å bruke en annen programmeringsspråk kalt 979 00:45:54,480 --> 00:45:56,330 Java innsiden av en web-side. 980 00:45:56,330 --> 00:45:57,960 Og nå merker logikken her. 981 00:45:57,960 --> 00:45:59,840 Her er en nøkkel kalt tittel. 982 00:45:59,840 --> 00:46:02,690 Her er det er gal lenge verdien nå. 983 00:46:02,690 --> 00:46:07,840 >> Men hvis jeg går til hjelperne side- eller rettere sagt, øverst på siden, 984 00:46:07,840 --> 00:46:11,310 Jeg ringer denne funksjonen på den tittelen først. 985 00:46:11,310 --> 00:46:15,250 Så hvis jeg nå laste denne siden, jeg se denne, som ser latterlig, 986 00:46:15,250 --> 00:46:16,110 men det er trygt. 987 00:46:16,110 --> 00:46:17,310 Det ser bare dumt. 988 00:46:17,310 --> 00:46:20,320 >> Men sett i stedet Jeg hadde glemt dette. 989 00:46:20,320 --> 00:46:24,660 Og merk mine ord, en nonzero nummer av dere vil glemme å gjøre dette 990 00:46:24,660 --> 00:46:27,790 og du vil få noen flittige student eller venn kommer opp 991 00:46:27,790 --> 00:46:31,540 til deg på CS50 rettferdig eller anonymt om natten poking rundt på nettstedet ditt 992 00:46:31,540 --> 00:46:35,300 og i hovedsak injisere kode ukjent for deg inn på nettstedet ditt 993 00:46:35,300 --> 00:46:35,800 en eller annen måte. 994 00:46:35,800 --> 00:46:39,000 >> Fordi hvis jeg bare spytte ut tittelen her og tittel 995 00:46:39,000 --> 00:46:44,330 det-- vel, hvis tittelen bokstavelig ser ut som dette og PHP 996 00:46:44,330 --> 00:46:47,660 som et språk som kan spytte ut andre språk tekst, 997 00:46:47,660 --> 00:46:50,650 Dette er bokstavelig talt går å erstatte dette merket med, 998 00:46:50,650 --> 00:46:53,010 selvfølgelig, hva jeg satt andre steder. 999 00:46:53,010 --> 00:46:57,640 >> Så hvis jeg nå gå her og oppdater etter løsne disse sikkerhetsmekanismer, 1000 00:46:57,640 --> 00:46:59,982 nå har jeg hallo verden her. 1001 00:46:59,982 --> 00:47:02,690 Nå det er ikke alle som stor av en avtale, men du kan gjøre noe 1002 00:47:02,690 --> 00:47:05,119 litt mer skadelig her, som det er 1003 00:47:05,119 --> 00:47:08,410 andre tags-- så vi får se når vi bruker mer tid i JavaScript-- som plassering 1004 00:47:08,410 --> 00:47:14,910 dot href blir, sitat, unquote, HTTP business.com, men det motsatte av det 1005 00:47:14,910 --> 00:47:15,950 fra den andre dagen. 1006 00:47:15,950 --> 00:47:20,120 Og nå kan du indusere en web side å faktisk gå umiddelbart 1007 00:47:20,120 --> 00:47:21,190 til denne nettsiden her. 1008 00:47:21,190 --> 00:47:23,000 >> Og faktisk, jeg ønsker ikke å selv gå til business.com 1009 00:47:23,000 --> 00:47:24,749 fordi jeg ikke ønsker å vite hva det er. 1010 00:47:24,749 --> 00:47:28,710 Men også dette vil utløse kode som skal injiseres inn i denne side. 1011 00:47:28,710 --> 00:47:32,680 Så dette er bare å si at selv om vi innføre super tidlig på noen 1012 00:47:32,680 --> 00:47:36,800 av disse mer komplekse strukturer, det er alle mot en slutt for å sørge 1013 00:47:36,800 --> 00:47:39,320 at koden kan ikke utnyttes. 1014 00:47:39,320 --> 00:47:40,960 >> Så nå en tredje versjon her. 1015 00:47:40,960 --> 00:47:42,470 Det begynner å bli en litt mer avansert. 1016 00:47:42,470 --> 00:47:44,875 Jeg gjorde egentlig ikke like-- anal side av meg 1017 00:47:44,875 --> 00:47:47,750 var å få litt irritert av faktum at jeg hadde en funksjon som heter 1018 00:47:47,750 --> 00:47:51,940 RenderHeader og RenderFooter som var nesten identiske. 1019 00:47:51,940 --> 00:47:55,400 Så det slo meg, hvorfor gjør ikke Jeg parameterize disse funksjonene 1020 00:47:55,400 --> 00:47:59,180 til bare en som heter gjengi, har det ta andre argumentet 1021 00:47:59,180 --> 00:48:04,420 som navnet på malen, det endelige å render-- enten topp- eller bunntekst? 1022 00:48:04,420 --> 00:48:07,160 Og så eventuelt, hvis jeg vil å passere i noen viktige verdi-par 1023 00:48:07,160 --> 00:48:10,580 som jeg gjør om tittelen for header, men ikke for bunnteksten, 1024 00:48:10,580 --> 00:48:11,800 Jeg kunne gjøre det. 1025 00:48:11,800 --> 00:48:16,510 >> Og så nå hvis jeg går inn helpers.php, det er litt mer komplisert. 1026 00:48:16,510 --> 00:48:19,670 Og jeg skal vinke hendene mine på detaljer, men det er bare én funksjon. 1027 00:48:19,670 --> 00:48:21,890 Så det er et skritt mot et bedre design. 1028 00:48:21,890 --> 00:48:23,360 >> Vi kan ta dette ett skritt videre. 1029 00:48:23,360 --> 00:48:28,890 Hvis jeg går inn i min fjerde versjon av denne, merker nå 1030 00:48:28,890 --> 00:48:31,320 at jeg gjør noe enda mer slags kryptisk. 1031 00:48:31,320 --> 00:48:33,230 Og jeg vet at dette er en masse for å absorbere på en gang, 1032 00:48:33,230 --> 00:48:35,080 men vi er bare snill med å rydde ting opp. 1033 00:48:35,080 --> 00:48:38,550 Nå er jeg sette mine hjelpere filen i en mappe som heter 1034 00:48:38,550 --> 00:48:41,190 includes-- bare en vilkårlig nevne hvor jeg ønsker å sette ting 1035 00:48:41,190 --> 00:48:44,300 at jeg ønsker å include-- og deretter resten av denne er den samme. 1036 00:48:44,300 --> 00:48:47,140 >> Men hvis jeg ser nå i gedit, merke til at jeg har fått kvitt 1037 00:48:47,140 --> 00:48:51,940 av alle de andre filene, og jeg har flyttet dem, for eksempel inn på her. 1038 00:48:51,940 --> 00:48:55,110 Og så maler, Jeg har denne her også. 1039 00:48:55,110 --> 00:48:59,292 Og så dette er alle nå mot et skritt ved hjelp av en mye bedre design mønster. 1040 00:48:59,292 --> 00:49:01,000 Og vi er veldig raskt kommer til å bevege seg bort 1041 00:49:01,000 --> 00:49:03,870 fra PHP standardfunksjonalitet, som vi startet her med, 1042 00:49:03,870 --> 00:49:07,655 der du bare blande PHP, og HTML, og CSS, 1043 00:49:07,655 --> 00:49:09,780 og du bare spytte det ut og du går om din vei. 1044 00:49:09,780 --> 00:49:11,404 Det kommer ikke til å være svært vedlikeholdsvennlig. 1045 00:49:11,404 --> 00:49:14,481 Akkurat som i C, begynte vi å bruke flere filer og flere funksjoner 1046 00:49:14,481 --> 00:49:15,730 og facto ting som ut. 1047 00:49:15,730 --> 00:49:16,688 Vi vil gjøre det samme her. 1048 00:49:16,688 --> 00:49:19,970 Og faktisk, i det femte og siste versjonen her, jeg gjorde en annen ting. 1049 00:49:19,970 --> 00:49:23,710 Du kan også bruke dot dot, som, igjen, er bare den overordnede katalogen. 1050 00:49:23,710 --> 00:49:28,260 For å være enda mer sikkerhetsbevisste, fordi hvis jeg ser på lytting 1051 00:49:28,260 --> 00:49:32,450 her for femte og siste versjon, varsel at jeg har en katalog her kalt 1052 00:49:32,450 --> 00:49:35,180 publikum, og deretter på samme nivå, så å si, 1053 00:49:35,180 --> 00:49:38,490 Jeg har fått inkluderer og maler og deretter som tekstfil readme. 1054 00:49:38,490 --> 00:49:41,130 >> Og grunnen til at jeg har strukturert det liker dette-- og så mange web 1055 00:49:41,130 --> 00:49:44,330 verter, spesielt de $ 5 måned de eller $ 10 i måneden enere, 1056 00:49:44,330 --> 00:49:47,170 hvis du noen gang har hatt en av disse services-- hva så mange av dem gjør 1057 00:49:47,170 --> 00:49:50,690 er de forventer bare at du skal dumpe alle av dine filer til en katalog, 1058 00:49:50,690 --> 00:49:53,640 som vi gjorde allerede med dette aller første eksempel. 1059 00:49:53,640 --> 00:49:56,740 >> Men så snart du begynner å bygge mer sofistikerte steder som bare lagrer 1060 00:49:56,740 --> 00:50:00,480 data du bryr deg om og filene du bryr seg om, faktisk organisere ting 1061 00:50:00,480 --> 00:50:05,060 riktig måte og med mer sikkerhet bevissthet i tankene kan 1062 00:50:05,060 --> 00:50:07,927 vi begynner å forsvare mot alle de venner 1063 00:50:07,927 --> 00:50:10,135 at du har enten i eller utsiden av denne klassen som, 1064 00:50:10,135 --> 00:50:12,510 så snart du begynner å lage programmer selv på nettet, 1065 00:50:12,510 --> 00:50:15,140 kommer til å begynne å plukke på deg og på dem. 1066 00:50:15,140 --> 00:50:17,420 >> Og så vil vi se slutt på dette designet. 1067 00:50:17,420 --> 00:50:20,010 Dette er bare et bilde som avbilder det følgende. 1068 00:50:20,010 --> 00:50:22,897 Vi kommer til å legge all vår programmering logikk i en eller flere filer, 1069 00:50:22,897 --> 00:50:25,230 og vi kommer til å bare starte kalle disse kontrollerne. 1070 00:50:25,230 --> 00:50:28,022 Det er der hjernen til våre nettsteder faktisk er. 1071 00:50:28,022 --> 00:50:29,730 Så skal vi til har utsikt, og utsikt 1072 00:50:29,730 --> 00:50:32,480 er så enkelt som bare separate files-- kalles maler, ofte. 1073 00:50:32,480 --> 00:50:34,410 De har akkurat den estetikk siden min, 1074 00:50:34,410 --> 00:50:37,020 hva jeg vil at siden skal se like-- fargene og oppsettet 1075 00:50:37,020 --> 00:50:38,870 og stillingene alle variablene. 1076 00:50:38,870 --> 00:50:41,120 >> Og så mer interessant at vi vil til slutt komme til 1077 00:50:41,120 --> 00:50:45,420 er modellen, som kommer til å være like ordet vi sleng på andre teknologier 1078 00:50:45,420 --> 00:50:47,771 at vi bringer inn i bilde, som faktiske databaser, 1079 00:50:47,771 --> 00:50:49,520 slik at når du vil for å lagre informasjon, 1080 00:50:49,520 --> 00:50:52,140 du trenger ikke bare å sende en e-post til Proctor eller til deg selv, 1081 00:50:52,140 --> 00:50:57,350 du faktisk lagre den i en database bruker et annet språk som kalles SQL. 1082 00:50:57,350 --> 00:51:00,450 Og så vi vil forlate her i dag og plukke opp med dette på onsdag 1083 00:51:00,450 --> 00:51:02,990 og introdusere databaser da. 1084 00:51:02,990 --> 00:51:06,940 >> [MUSIC SPILLE] 1085 00:51:06,940 --> 00:54:24,555