1 00:00:00,000 --> 00:00:03,920 >> [Musikken afspilles] 2 00:00:03,920 --> 00:00:11,760 3 00:00:11,760 --> 00:00:13,800 >> DAVID J. MALAN: Okay. 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å uge otte. 6 00:00:17,620 --> 00:00:22,440 Og du husker måske, at vi slap sidste gang at kigge på et nyt sprog 7 00:00:22,440 --> 00:00:23,240 helt. 8 00:00:23,240 --> 00:00:25,905 I virkeligheden, en, der er forholdsvis let og det er ikke engang 9 00:00:25,905 --> 00:00:26,940 et programmeringssprog. 10 00:00:26,940 --> 00:00:31,100 Det er et kodesprog, der lader os faktisk strukturere og gøre websider. 11 00:00:31,100 --> 00:00:33,350 Og når du noget andet sammenholdt med denne-- 12 00:00:33,350 --> 00:00:35,670 eller du snart vil, hvis du ikke allerede har. 13 00:00:35,670 --> 00:00:38,530 Vi kommer til at bruge Cascading Style Sheets, eller CSS, som 14 00:00:38,530 --> 00:00:40,971 er en anden type sprog med egenskaber og værdier 15 00:00:40,971 --> 00:00:43,220 det kommer til at lade os gøre tingene gerne ændre farven 16 00:00:43,220 --> 00:00:46,010 og ændre placeringen og disse former for tweaks. 17 00:00:46,010 --> 00:00:49,940 Men i dag og fremefter, vi begynder at fokusere på mere kraftfulde sprog, 18 00:00:49,940 --> 00:00:52,810 faktiske programmeringssprog som PHP. 19 00:00:52,810 --> 00:00:54,880 >> Så PHP har eksisteret i nogen tid. 20 00:00:54,880 --> 00:00:56,810 Og som du kan se, det designet primært 21 00:00:56,810 --> 00:01:00,280 tidligt for faktiske bruge i webudvikling 22 00:01:00,280 --> 00:01:02,360 og faktisk genererer websider. 23 00:01:02,360 --> 00:01:04,849 Så hvad slags funktioner gør et sprog 24 00:01:04,849 --> 00:01:10,040 behov for at gøre web sider dynamisk med det? 25 00:01:10,040 --> 00:01:14,760 >> Med andre ord, hvis du ønsker at generere indhold dynamically-- ligesom Facebooks 26 00:01:14,760 --> 00:01:19,480 Nyhedsfeed, som ændrer sig hele tiden, eller chatbeskeder, der dukker op fra tid 27 00:01:19,480 --> 00:01:21,872 at time-- ligesom hvad er central del af funktionalitet 28 00:01:21,872 --> 00:01:24,580 du behøver i et programmeringssprog der ville lade dig dynamisk 29 00:01:24,580 --> 00:01:28,070 udskrive nye oplysninger til skærmen? 30 00:01:28,070 --> 00:01:28,685 >> STUDENT: Kode. 31 00:01:28,685 --> 00:01:29,560 DAVID J. MALAN: Kode. 32 00:01:29,560 --> 00:01:30,440 OK. 33 00:01:30,440 --> 00:01:31,995 Vi vil tage det. 34 00:01:31,995 --> 00:01:35,310 Lidt mere præcis. 35 00:01:35,310 --> 00:01:37,639 Jeg mener, vi kunne gøre dette med C, helt ærligt. 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 engagement? 38 00:01:41,045 --> 00:01:41,895 >> STUDENT: Ja. 39 00:01:41,895 --> 00:01:42,677 Variabler, måske? 40 00:01:42,677 --> 00:01:43,760 DAVID J. MALAN: Variable. 41 00:01:43,760 --> 00:01:44,160 OK, helt sikkert. 42 00:01:44,160 --> 00:01:45,740 Variabler kan helt sikkert hjælpe os ud. 43 00:01:45,740 --> 00:01:47,020 Og endda noget enklere. 44 00:01:47,020 --> 00:01:50,640 Vi brugte det i den allerførste program af den allerførste dag 45 00:01:50,640 --> 00:01:55,686 når vi rent faktisk sagde "Hej verden". 46 00:01:55,686 --> 00:01:56,570 >> STUDENT: Udskriv. 47 00:01:56,570 --> 00:01:57,778 >> DAVID J. MALAN: Print, right? 48 00:01:57,778 --> 00:02:01,050 Print eller printf i verden af ​​C. Så al den tid, 49 00:02:01,050 --> 00:02:03,362 vi har haft på vores rådighed en language-- C, 50 00:02:03,362 --> 00:02:05,570 i particular-- og endda Scratch for den sags skyld 51 00:02:05,570 --> 00:02:07,400 kan generere tekststrenge. 52 00:02:07,400 --> 00:02:11,090 >> Tja, hvis HTML, som vi så i sidste uge, er bare en hel masse tekststrenge 53 00:02:11,090 --> 00:02:14,692 omend med åbne konsoller og lukket beslag og en slags rim 54 00:02:14,692 --> 00:02:16,650 og årsagen til det, ja så kunne vi virkelig 55 00:02:16,650 --> 00:02:20,440 begynde at generere websider enten manuelt ved at skrive dem ud i gedit 56 00:02:20,440 --> 00:02:23,870 eller i Microsoft Word, for det matter-- vi bare brug for en tekst editor. 57 00:02:23,870 --> 00:02:26,830 >> Eller vi kunne skrive kode, til dit forslag 58 00:02:26,830 --> 00:02:30,435 tidligere, vil, lad os dynamisk generere HTML, 59 00:02:30,435 --> 00:02:32,560 og det er, hvad vi vil at begynde at gøre med PHP 60 00:02:32,560 --> 00:02:34,900 og i sidste ende selv med en sprog kaldet JavaScript, 61 00:02:34,900 --> 00:02:37,910 er at bruge et sprog til at generere en anden. 62 00:02:37,910 --> 00:02:40,720 Og ja, det er, hvad Facebook og mange, mange andre steder 63 00:02:40,720 --> 00:02:44,530 gør faktisk dynamisk vise nye oplysninger til dig. 64 00:02:44,530 --> 00:02:47,117 >> Så lad os begynde med denne-- a kryptisk leder linje, men en 65 00:02:47,117 --> 00:02:48,450 det er faktisk temmelig stærk. 66 00:02:48,450 --> 00:02:51,210 Hidtil har vi været ved hjælp af C, som er en kompileret sprog. 67 00:02:51,210 --> 00:02:55,050 Og kun en hurtig recap-- en kompileret sprog har hvad karakteristisk? 68 00:02:55,050 --> 00:02:59,050 Du selvfølgelig nødt til at kompilere det, men hvad betyder det? 69 00:02:59,050 --> 00:03:00,505 Ja? 70 00:03:00,505 --> 00:03:02,940 >> STUDENT: Det skal være samles 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 skal samles til maskinkode. 73 00:03:04,530 --> 00:03:07,340 Så du tager din kildekode, som er en slags engelsk-lignende. 74 00:03:07,340 --> 00:03:09,270 Du konvertere det til noget lavere niveau, 75 00:03:09,270 --> 00:03:11,590 som i sidste instans kaldes objekt code-- 0'er og 1'er. 76 00:03:11,590 --> 00:03:14,830 Og det er disse 0'er og 1-taller, der en CPU, ligesom dem fra Intel, 77 00:03:14,830 --> 00:03:16,110 faktisk forstår. 78 00:03:16,110 --> 00:03:19,690 >> Nu, PHP og Python og Ruby og JavaScript og klaser af andre 79 00:03:19,690 --> 00:03:23,190 sprog er ikke kompileret sprog, men fortolket sprog, 80 00:03:23,190 --> 00:03:26,630 hvilket betyder, at du bare skrive dem og derefter du behøver ikke gøre dem til 0'er og 1'er. 81 00:03:26,630 --> 00:03:30,790 Man i stedet bare give derefter som input til en andens program, 82 00:03:30,790 --> 00:03:32,080 kaldet en tolk. 83 00:03:32,080 --> 00:03:34,460 Og denne persons Programmet er udformet 84 00:03:34,460 --> 00:03:38,280 at forstå, hvad hver hver symbol i Python eller PHP 85 00:03:38,280 --> 00:03:42,650 eller Ruby eller en række andre sprog betyder. 86 00:03:42,650 --> 00:03:44,760 >> Og så alt hvad vi behøver er noget som dette. 87 00:03:44,760 --> 00:03:46,350 Så i virkeligheden, vil jeg gå over til apparatet 88 00:03:46,350 --> 00:03:48,100 her, bare i en hvilken som helst gamle vindue, og vi er 89 00:03:48,100 --> 00:03:52,580 kommer til at gå videre og åbne en fil kaldet, siger hej. 90 00:03:52,580 --> 00:03:55,780 Nu tidligere, jeg kunne have reddet dette selv med en filtype, 91 00:03:55,780 --> 00:03:57,910 men jeg har tænkt mig at gøre noget endnu enklere her. 92 00:03:57,910 --> 00:04:02,450 Jeg har tænkt mig at gå videre og begynde denne fil med dette kryptiske syntaks. 93 00:04:02,450 --> 00:04:06,310 Så "bruger, bin, ENV, for miljø, php. " 94 00:04:06,310 --> 00:04:10,670 >> Dette er blot en linje kode, der er vil fortælle mit operativsystem, 95 00:04:10,670 --> 00:04:13,730 gå finde i din lokale miljø uanset hvad det er, 96 00:04:13,730 --> 00:04:18,149 uanset hvor PHP is-- den interpreter-- og gå videre og bruge den tolk 97 00:04:18,149 --> 00:04:20,589 at fortolke følgende kode. 98 00:04:20,589 --> 00:04:22,760 Nu, dette er slags en grim funktion af PHP. 99 00:04:22,760 --> 00:04:24,980 Men i dette sprog enhver gang du skriver PHP kode, 100 00:04:24,980 --> 00:04:29,200 du nødt til at have en af ​​disse grimme PHP tags afgrænser begyndelsen 101 00:04:29,200 --> 00:04:32,220 af din code-- 00:04:37,430 >> Men under her, kan jeg nu gøre noget ganske enkel, ligesom printf hello komma 103 00:04:37,430 --> 00:04:40,922 verden backslash n tæt citat tæt parentes. 104 00:04:40,922 --> 00:04:42,630 Og så bare for god foranstaltning, jeg har tænkt mig 105 00:04:42,630 --> 00:04:45,380 at gå videre og tæt min php tag herovre 106 00:04:45,380 --> 00:04:47,390 så alt ser pænt temmelig udskrives. 107 00:04:47,390 --> 00:04:50,780 >> Og så snart jeg klikker på Gem, gedit er faktisk smart nok 108 00:04:50,780 --> 00:04:54,620 se på det allerførste linje og indse, åh, du skriver PHP-kode. 109 00:04:54,620 --> 00:04:56,710 Lad mig syntaksfremhævningen det med farverne 110 00:04:56,710 --> 00:04:58,690 her, så det står ud af lidt mere. 111 00:04:58,690 --> 00:05:01,300 Men nu har jeg tænkt mig at gå ned til min terminal vindue. 112 00:05:01,300 --> 00:05:02,340 Jeg vil zoome ind. 113 00:05:02,340 --> 00:05:06,860 >> Dette program blev kaldt "Hej," så jeg har tænkt mig at gøre dot skråstreg hej, 114 00:05:06,860 --> 00:05:07,990 men tilladelse nægtet. 115 00:05:07,990 --> 00:05:08,490 Og bash. 116 00:05:08,490 --> 00:05:10,610 Vi faktisk hørt om det ting et par uger siden 117 00:05:10,610 --> 00:05:13,140 i forbindelse med Shellshock, en af ​​disse fejl. 118 00:05:13,140 --> 00:05:16,240 >> Men Tilladelse nægtet vi har set før, måske i en anden sammenhæng. 119 00:05:16,240 --> 00:05:19,060 Er der nogen huske, hvordan du måske reparere noget 120 00:05:19,060 --> 00:05:22,100 hvor tilladelse nægtes som denne? 121 00:05:22,100 --> 00:05:23,490 Hvad er kommandoen, i det mindste? 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, til at ændre tilstanden af ​​en fil. 124 00:05:26,700 --> 00:05:30,171 Og du vil få alle de mere bruges til denne næste uge med et efterfølgende problem 125 00:05:30,171 --> 00:05:30,670 indstillet. 126 00:05:30,670 --> 00:05:33,211 Men for nu, jeg kommer til at ændre tilstanden ikke at kunne læses, 127 00:05:33,211 --> 00:05:36,650 men at give alle executeability privilegier, evnen 128 00:05:36,650 --> 00:05:37,710 at køre denne fil. 129 00:05:37,710 --> 00:05:40,360 Og jeg har tænkt mig at tildele at til filen hej. 130 00:05:40,360 --> 00:05:45,150 >> Hvis jeg nu gøre dot skråstreg hej indtaste, du se, i virkeligheden, mit program, hello verden. 131 00:05:45,150 --> 00:05:48,760 Og hvad skridt gjorde jeg tydeligt springe helt? 132 00:05:48,760 --> 00:05:49,520 Kompilering. 133 00:05:49,520 --> 00:05:51,680 Så jeg løb bare dette program ganske enkelt. 134 00:05:51,680 --> 00:05:55,690 >> Og det viser sig, du kan gøre dette med en masse syntaks minder om C. 135 00:05:55,690 --> 00:06:03,400 Lad mig gå ind til dagens kode, som jeg sætter ind i min vhost bibliotek 136 00:06:03,400 --> 00:06:05,250 her, for rigtige grunde vi vil komme tilbage til. 137 00:06:05,250 --> 00:06:09,350 Og jeg har tænkt mig at gå ind i, lad os sige, betingelser 1. 138 00:06:09,350 --> 00:06:12,450 >> Og du vil se her, først og fremmest en hel masse kommentarer. 139 00:06:12,450 --> 00:06:15,240 Men det er faktisk en genskabelse i PHP 140 00:06:15,240 --> 00:06:18,960 af et program, vi gjorde i uge ét kaldet betingelser 1.c 141 00:06:18,960 --> 00:06:20,690 hvor formålet i liv af dette program 142 00:06:20,690 --> 00:06:22,950 er tilsyneladende at spørge brugeren for et heltal 143 00:06:22,950 --> 00:06:25,270 og derefter gøre nogle fluffy analyse på det, hvorved 144 00:06:25,270 --> 00:06:29,510 du sige, hvis det er positivt eller negativ eller lig med nul. 145 00:06:29,510 --> 00:06:34,220 Og jeg bringer det kun op, fordi, bortset fra måske en lille detalje, 146 00:06:34,220 --> 00:06:37,150 det er ikke til at skelne så langt fra C. 147 00:06:37,150 --> 00:06:39,930 >> Hvad er en egenskab her, at måske springer ud 148 00:06:39,930 --> 00:06:41,410 på dig som en lidt anderledes? 149 00:06:41,410 --> 00:06:42,160 Måske to ting. 150 00:06:42,160 --> 00:06:42,660 Ja? 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: Ja. 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 vil se, går 155 00:06:48,120 --> 00:06:51,460 at være en rettelse til begyndelsen af enhver variabel i PHP. 156 00:06:51,460 --> 00:06:54,250 Det er både godt og bad-- gode i at det er en slags indlysende, hvad der er 157 00:06:54,250 --> 00:06:56,797 en variabel, dårlig, at det er endnu en ting at skrive. 158 00:06:56,797 --> 00:06:58,630 Og der er en anden ting, vi ikke har helt 159 00:06:58,630 --> 00:07:00,876 set, i det mindste ved dette stavning. 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 vi ikke se sig selv i C, selv om der findes noget 163 00:07:06,550 --> 00:07:09,530 lignende, men vi har brugt getString, og dette er dens modstykke. 164 00:07:09,530 --> 00:07:12,950 Så hvis jeg går ind i denne mappen, som sker for at være, 165 00:07:12,950 --> 00:07:18,030 som jeg vil forklare i en smule i min vhost mappe og min kilde En mappe, 166 00:07:18,030 --> 00:07:22,730 og jeg gå videre og gøre dot skråstreg conditions-- whoops-- dot skråstreg 167 00:07:22,730 --> 00:07:26,710 Betingelser 1, vil du se, igen, samme issue-- tilladelse nægtet. 168 00:07:26,710 --> 00:07:33,610 >> Så lad mig zoome ind og gøre chmod et plus x på betingelser, dot skråstreg betingelser. 169 00:07:33,610 --> 00:07:35,222 Jeg vil gerne have et heltal, please, 50. 170 00:07:35,222 --> 00:07:36,930 Og vi kunne spille dette spil hele dagen lang. 171 00:07:36,930 --> 00:07:39,140 Det kommer til at opføre sig præcis som den gjorde i uge et. 172 00:07:39,140 --> 00:07:42,860 >> OK, så ikke så forskellig, undtagen ikke bare, at lille smule syntaks, 173 00:07:42,860 --> 00:07:45,490 men foroven, jeg igen havde denne linje som 174 00:07:45,490 --> 00:07:49,760 tillod mig at skabe noget, ligner et C-program kaldet hej, 175 00:07:49,760 --> 00:07:51,150 kaldet forhold 1. 176 00:07:51,150 --> 00:07:54,520 Men det er ikke 0'er og dem Jeg fuldbyrdende direkte. 177 00:07:54,520 --> 00:07:57,620 Det er i stedet kører dette tolk, hvis navn 178 00:07:57,620 --> 00:07:59,440 sker for at være identisk med sproget. 179 00:07:59,440 --> 00:08:04,970 Programmet hedder PHP, og min kode under linje man er ved at blive ført ind i det. 180 00:08:04,970 --> 00:08:07,740 >> Vi kan gøre en anden forholdsvis enkel eksempel minder om noget 181 00:08:07,740 --> 00:08:09,240 vi gjorde uger siden. 182 00:08:09,240 --> 00:08:12,020 Igen, dette er en slags vilkårlig luns af kode 183 00:08:12,020 --> 00:08:14,000 der tilsyneladende gør hvad, når du kører det? 184 00:08:14,000 --> 00:08:15,625 Hvad er det kommer til at udskrive, formentlig? 185 00:08:15,625 --> 00:08:23,540 186 00:08:23,540 --> 00:08:28,250 >> Så i første omgang på linie 16, er det vil sige x er nu 2, sandsynligvis. 187 00:08:28,250 --> 00:08:30,920 % D er den samme som $ i for printf. 188 00:08:30,920 --> 00:08:33,460 Så er det cubing, prik, prik, prik, på linje 17. 189 00:08:33,460 --> 00:08:36,299 Og derefter linje 18 vises at kalde en funktion Cubed. 190 00:08:36,299 --> 00:08:37,600 Og hvor er Cubed defineres? 191 00:08:37,600 --> 00:08:40,319 >> Tja, det ligner i linje 25, så det er ikke så forskellig. 192 00:08:40,319 --> 00:08:42,610 Jeg har fået nogle kommentarer ovenfor det, men for det meste, 193 00:08:42,610 --> 00:08:45,370 det er en forholdsvis ligetil portering eller omstilling 194 00:08:45,370 --> 00:08:48,470 fra C-programmet for PHP version. 195 00:08:48,470 --> 00:08:52,670 Men der er nu et par forskelle, der måske skulle springe ud. 196 00:08:52,670 --> 00:08:56,100 Hvad er anderledes ved, hvordan du kunne skrive samme program i C? 197 00:08:56,100 --> 00:08:57,900 >> STUDENT: [uhørligt]. 198 00:08:57,900 --> 00:09:00,070 >> DAVID J. MALAN: Der er ingen prototype op øverst. 199 00:09:00,070 --> 00:09:03,210 Så PHP-- og helt ærligt, en masse moderne languages-- 200 00:09:03,210 --> 00:09:06,920 er en meget smartere og mere nyttigt end C compilere, i, at du 201 00:09:06,920 --> 00:09:09,740 kan sætte funktionen op her, du kan sætte en funktion hernede, 202 00:09:09,740 --> 00:09:12,740 og tolken går til at gøre dig den tjeneste at læse 203 00:09:12,740 --> 00:09:16,010 hele filen før den beslutter at en funktion ikke eksisterer. 204 00:09:16,010 --> 00:09:17,970 Så rart forbedringer år senere. 205 00:09:17,970 --> 00:09:22,126 Men der er også noget andet anderledes eller fraværende her. 206 00:09:22,126 --> 00:09:22,626 Ja? 207 00:09:22,626 --> 00:09:25,084 >> STUDENT: [uhørligt]. 208 00:09:25,084 --> 00:09:27,750 DAVID J. MALAN: Vi behøver ikke at erklære de typer af variabler, 209 00:09:27,750 --> 00:09:31,780 så vi vil se inden længe at Der er forskellige typer i PHP, 210 00:09:31,780 --> 00:09:34,970 men du behøver ikke at angive dem, som også er både gode og dårlige. 211 00:09:34,970 --> 00:09:36,623 Og der er en anden ting mangler. 212 00:09:36,623 --> 00:09:37,430 >> STUDENT: Der er ingen biblioteker. 213 00:09:37,430 --> 00:09:38,630 >> DAVID J. MALAN: Der er ingen biblioteker. 214 00:09:38,630 --> 00:09:39,350 OK, så det er rart. 215 00:09:39,350 --> 00:09:40,540 Vi får meget mere ud af kassen. 216 00:09:40,540 --> 00:09:43,373 Så der er faktisk en hel del mere ting, end jeg troede var anderledes. 217 00:09:43,373 --> 00:09:44,350 Hvordan omkring måde tilbage? 218 00:09:44,350 --> 00:09:46,032 Hvad er det? 219 00:09:46,032 --> 00:09:46,740 Sig det en gang mere? 220 00:09:46,740 --> 00:09:47,960 >> STUDENT: Pointer. 221 00:09:47,960 --> 00:09:49,270 >> DAVID J. MALAN: Ingen pointers. 222 00:09:49,270 --> 00:09:51,280 OK, i det mindste i dette eksempel nr. 223 00:09:51,280 --> 00:09:52,070 Det er fair. 224 00:09:52,070 --> 00:09:55,090 Så der er ikke pointers i PHP faktisk i almindelighed. 225 00:09:55,090 --> 00:09:58,730 Der er noget, der hedder referencer, men vi vil ikke bruge for meget tid der. 226 00:09:58,730 --> 00:09:59,520 Og hvad ellers? 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 tænkte på. 230 00:10:02,768 --> 00:10:04,660 Læg mærke til der er ingen vigtigste indgang. 231 00:10:04,660 --> 00:10:06,525 Du skal blot begynde at skrive din kode. 232 00:10:06,525 --> 00:10:08,400 Og det er faktisk vil være fordelagtig 233 00:10:08,400 --> 00:10:10,560 når vi overgangen momentant til rent faktisk at bruge 234 00:10:10,560 --> 00:10:13,980 dette samme sprog til web-baserede programmering, som vi 235 00:10:13,980 --> 00:10:16,580 ikke ønsker at have bare én indgang. 236 00:10:16,580 --> 00:10:19,980 Vi vil måske gerne have en flok Webadresser, en masse forskellige filer 237 00:10:19,980 --> 00:10:22,930 alle tager i brugerens input og producerer output. 238 00:10:22,930 --> 00:10:27,130 >> Men her er meget skidt eksempel, som jeg lovede sidste gang, 239 00:10:27,130 --> 00:10:30,130 nemlig i denne mappe her, stavefejl. 240 00:10:30,130 --> 00:10:33,680 Så i denne fil speller, som vi vil ikke bruge for meget tid på, er der 241 00:10:33,680 --> 00:10:37,870 væsentlige en porting-- P-O-R-T. Det er bare ord gives, når, siger, 242 00:10:37,870 --> 00:10:40,800 du konvertere fra et sprog til en anden manuelt normalt. 243 00:10:40,800 --> 00:10:45,680 >> Dette er en overførsel af PC version af speller fra pset 5. 244 00:10:45,680 --> 00:10:48,856 Og jeg hovedsagelig forsøgt at konvertere det linie for linie så tæt som jeg kan. 245 00:10:48,856 --> 00:10:51,730 Så hvis du kan lide denne slags ting, det faktisk er værd på et tidspunkt 246 00:10:51,730 --> 00:10:54,229 trække dem begge op ved siden af side og se, hvad der er det samme 247 00:10:54,229 --> 00:10:55,230 og hvad der er anderledes. 248 00:10:55,230 --> 00:10:57,510 Men de er temmelig darn ens. 249 00:10:57,510 --> 00:11:00,110 Hvis du kan huske hvad speller selv lignede, 250 00:11:00,110 --> 00:11:02,110 selvom du ikke gjorde nødt til at ændre denne fil, 251 00:11:02,110 --> 00:11:04,860 det er temmelig ens strukturelt med blot et par 252 00:11:04,860 --> 00:11:06,200 ændringer her og der. 253 00:11:06,200 --> 00:11:10,140 >> Så dette er kun at sige, at det er temmelig ligetil at konvertere speller 254 00:11:10,140 --> 00:11:12,000 fra C til PHP. 255 00:11:12,000 --> 00:11:15,390 Men i ordbogen, er der noget endnu mere overbevisende. 256 00:11:15,390 --> 00:11:19,270 Lad mig gå videre og skabe min egen dictionary.php fil. 257 00:11:19,270 --> 00:11:24,010 Så lidt anderledes i det vi vil kalde det .php i stedet for .c. 258 00:11:24,010 --> 00:11:26,980 Da dette er en PHP-fil, jeg do-- lidt annoyingly-- have 259 00:11:26,980 --> 00:11:30,132 at starte filen med en php-tag som. 260 00:11:30,132 --> 00:11:32,340 Og jeg har tænkt mig at gå videre og definere et par funktioner. 261 00:11:32,340 --> 00:11:35,770 Funktion kaldet check, der er kommer til at tage i et ord som før. 262 00:11:35,770 --> 00:11:37,520 Men dette argument er vil have en dollar 263 00:11:37,520 --> 00:11:39,840 underskrive, fordi vi, igen, ved hjælp af PHP. 264 00:11:39,840 --> 00:11:42,350 En anden funktion fra dictionary.c var belastning 265 00:11:42,350 --> 00:11:47,120 og det tog i navnet på en ordbog, så jeg får denne funktion klar til at gå. 266 00:11:47,120 --> 00:11:50,920 >> En anden i dictionary.c var hvad? 267 00:11:50,920 --> 00:11:54,580 Størrelse var en af ​​de bedste dem på hvert fald hvis man holdt nogle variable rundt. 268 00:11:54,580 --> 00:11:57,830 så størrelse bare har at returnere en variabel. 269 00:11:57,830 --> 00:11:59,090 Og så var der unload. 270 00:11:59,090 --> 00:12:02,830 >> Så der var disse fire funktioner i problem sæt 5 271 00:12:02,830 --> 00:12:06,770 at du havde brug for at gennemføre med nogle datastruktur eller strukturer. 272 00:12:06,770 --> 00:12:10,170 Så jeg lovede, at i PHP, kan vi erklære 273 00:12:10,170 --> 00:12:14,490 en hash tabel, for eksempel, alt dette lettere. 274 00:12:14,490 --> 00:12:17,377 I virkeligheden, hvis jeg vil have en hash tabel, Jeg bare kommer til at gå som det 275 00:12:17,377 --> 00:12:18,460 og der er min hash tabellen. 276 00:12:18,460 --> 00:12:21,555 Og det er den tone, nedslående, at vi slap sidste gang. 277 00:12:21,555 --> 00:12:23,930 Og ved du hvad, hvis jeg ønskede en variabel for størrelse, godt, 278 00:12:23,930 --> 00:12:25,867 denne ene ikke er alle så forskellige fra C, 279 00:12:25,867 --> 00:12:27,450 men jeg har tænkt mig at gå videre og gøre det. 280 00:12:27,450 --> 00:12:28,630 Og bemærk ingen datatype. 281 00:12:28,630 --> 00:12:31,180 Og jeg vil gå tilbage senere og faktisk tilføje nogle kommentarer her. 282 00:12:31,180 --> 00:12:32,480 Men hvad med belastning? 283 00:12:32,480 --> 00:12:35,780 >> Hvis dollartegn ordbog er navnet på min fil 284 00:12:35,780 --> 00:12:39,600 og jeg faktisk ønsker at indlæse ord til denne tabel nu, 285 00:12:39,600 --> 00:12:42,360 Jeg kan faktisk gøre noget forholdsvis enkel. 286 00:12:42,360 --> 00:12:44,880 En-- og dette er minorly annoying-- i PHP, 287 00:12:44,880 --> 00:12:47,710 du nødt til at specificere inde af en funktion, hvis du 288 00:12:47,710 --> 00:12:51,060 ønsker at få adgang til nogle globale variabel, der er defineret uden. 289 00:12:51,060 --> 00:12:53,530 >> Men det er ikke særlig interessant lige nu. 290 00:12:53,530 --> 00:12:57,920 Hvad er mere interessant er det for hver konstruere, som jeg nævnte sidste gang. 291 00:12:57,920 --> 00:13:01,880 Og det viser sig, at PHP har en funktion kaldet fil, hvis formål i livet 292 00:13:01,880 --> 00:13:05,550 er at åbne en fil og læse i alle sine linjer i et array 293 00:13:05,550 --> 00:13:06,840 og udlevere dem tilbage til. 294 00:13:06,840 --> 00:13:12,170 >> Hvilket vil sige, at jeg kan gøre ordbogen så at nu effektivt, når jeg kalder filen, 295 00:13:12,170 --> 00:13:15,472 dette vil give mig tilbage en vifte af ord fra filen. 296 00:13:15,472 --> 00:13:16,430 Det er ikke alt, god. 297 00:13:16,430 --> 00:13:20,130 Det er stadig kommer til at være en linje af ord, noget lineær. 298 00:13:20,130 --> 00:13:23,880 Men jeg kan gå videre og gentage over hver af disse ord ved hjælp af 299 00:13:23,880 --> 00:13:25,710 at syntaks vi så kortvarigt sidste gang. 300 00:13:25,710 --> 00:13:27,940 Og du vil se det mere i den kommende pset. 301 00:13:27,940 --> 00:13:32,070 >> Men nu har jeg en løkke iteration over hvert ord i ordbogen. 302 00:13:32,070 --> 00:13:36,100 Og på hver iteration, husker jeg kalde det aktuelle ord "ord". 303 00:13:36,100 --> 00:13:39,790 Og alt det kommer til at tage til sætte et ord i ordbogen er 304 00:13:39,790 --> 00:13:43,530 kommer til at være ord gæt "sandt". 305 00:13:43,530 --> 00:13:44,740 Det er min insert funktion. 306 00:13:44,740 --> 00:13:46,661 Det er min belastning funktion for min ordbog. 307 00:13:46,661 --> 00:13:49,410 Nu er det lidt af en snyde, fordi ved du hvad, der er faktisk 308 00:13:49,410 --> 00:13:52,920 backslash n er i slutningen af ​​ordene at jeg nok skulle slippe af med, 309 00:13:52,920 --> 00:13:56,380 men det er ikke et problem, fordi PHP har en funktion kaldet chop, som bogstaveligt 310 00:13:56,380 --> 00:13:58,480 hugger et tegn på den bitre ende. 311 00:13:58,480 --> 00:13:59,400 Så ikke noget problem der. 312 00:13:59,400 --> 00:14:02,199 Vi har gået videre og faktisk afkortet til netop dette. 313 00:14:02,199 --> 00:14:05,240 Og nu skal jeg nok holde styr af størrelse, så lad os i det mindste gøre denne-- 314 00:14:05,240 --> 00:14:05,835 størrelse ++. 315 00:14:05,835 --> 00:14:07,339 Jeg kan gøre det som før. 316 00:14:07,339 --> 00:14:10,380 Og så er dette sandsynligvis vil fungere fint, så det er returnere sandt. 317 00:14:10,380 --> 00:14:10,930 Udført. 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 vil gøre det igen med den næste pset, også. 322 00:14:16,628 --> 00:14:18,730 Så hvad med størrelse? 323 00:14:18,730 --> 00:14:22,080 Nå, det ene forhåbentlig handler om som du ville forvente sidste gang, 324 00:14:22,080 --> 00:14:24,460 selv om jeg er nødt til at gøre denne dumme global ting. 325 00:14:24,460 --> 00:14:26,610 Det er bare et artefakt fra sproget design. 326 00:14:26,610 --> 00:14:28,450 >> Men check er en smule mere interessant. 327 00:14:28,450 --> 00:14:31,420 Så hvis jeg bestået i dollar underskrive ord, jeg først 328 00:14:31,420 --> 00:14:34,060 ønsker at have adgang til at den globale variabel tabel. 329 00:14:34,060 --> 00:14:36,700 Og nu, hvis jeg ønsker at kontrollere, om et ord er der, 330 00:14:36,700 --> 00:14:44,350 Jeg kan blot sige, hvis det er sandt, at Følgende er angivet i tabellen, 331 00:14:44,350 --> 00:14:49,957 derefter gå videre og retur sandt; andet, return false. 332 00:14:49,957 --> 00:14:51,180 Udført. 333 00:14:51,180 --> 00:14:52,440 Den anden halvdel af pset 5. 334 00:14:52,440 --> 00:14:54,540 >> Okay, så igen, jeg er skære et par hjørner. 335 00:14:54,540 --> 00:14:56,831 Retfærdigvis jeg bør formentlig bruge et par sekunder 336 00:14:56,831 --> 00:14:58,300 om gennemførelsen heraf. 337 00:14:58,300 --> 00:15:01,860 Og jeg burde nok ikke håne alle timer du lægger på pset så meget. 338 00:15:01,860 --> 00:15:04,045 Så strtolower er en funktion. 339 00:15:04,045 --> 00:15:06,670 Noget lignende eksistentialistiske i C, i det mindste for tegn, 340 00:15:06,670 --> 00:15:08,560 men PHP har fået en hel streng version. 341 00:15:08,560 --> 00:15:11,226 >> Det kommer til at tvinge alt til små bogstaver, som nogle af jer 342 00:15:11,226 --> 00:15:14,944 kunne have gjort for at canonicalize hvad du lagde i din ordbog. 343 00:15:14,944 --> 00:15:16,360 Og nu kan du gøre dette i C, også. 344 00:15:16,360 --> 00:15:17,780 Dette har intet at gøre med PHP. 345 00:15:17,780 --> 00:15:20,260 >> Men enhver tid du har en boolesk tilstand, 346 00:15:20,260 --> 00:15:22,680 som noget på linje 10 er der, som kun 347 00:15:22,680 --> 00:15:27,145 kommer til at vurdere, sand eller falsk, og din hvis ellers tydeligt 348 00:15:27,145 --> 00:15:33,620 returnerer sandt eller falsk, kunne jeg simpelthen virkelig gøre dette sexet 349 00:15:33,620 --> 00:15:38,360 og bare gøre noget som dette. 350 00:15:38,360 --> 00:15:40,500 Så der er min check funktion. 351 00:15:40,500 --> 00:15:42,560 Højre, hvis den Boolske returnerer en sand eller falsk, 352 00:15:42,560 --> 00:15:44,630 lad os bare returnere det straks. 353 00:15:44,630 --> 00:15:47,340 >> Og der er et par andre tweaks Jeg kunne gøre her og der. 354 00:15:47,340 --> 00:15:51,380 Load-- losse, ved den måde, det er gjort. 355 00:15:51,380 --> 00:15:52,850 Intet at gøre der. 356 00:15:52,850 --> 00:15:55,840 Da alle hukommelsen i PHP og mange andre sprog 357 00:15:55,840 --> 00:15:57,570 er faktisk lykkedes for dig. 358 00:15:57,570 --> 00:16:00,330 Så mens det i C, som du har lært smerteligt, 359 00:16:00,330 --> 00:16:04,700 noget du malloc eller calloc eller realloc, er du nødt til at befri dig selv. 360 00:16:04,700 --> 00:16:08,770 Alt hvad du fopen, er du nødt til at fclose, således at ressourcerne i sidste ende er befriet 361 00:16:08,770 --> 00:16:11,690 og værktøjer som Valgrind ikke lægge mærke til og ikke klage, 362 00:16:11,690 --> 00:16:13,570 hvilket er en god ting at køre på dem. 363 00:16:13,570 --> 00:16:16,190 >> Men sikkert, skal der være nogle fangst, right? 364 00:16:16,190 --> 00:16:19,400 Ellers vi slags brændt en hel masse uger. 365 00:16:19,400 --> 00:16:23,270 Så der er en række årsager hvorfor vi slags tage denne bane, 366 00:16:23,270 --> 00:16:24,440 men der er et trade-off. 367 00:16:24,440 --> 00:16:25,820 Right, har dette været tematisk. 368 00:16:25,820 --> 00:16:29,690 >> Så hvad kan en trade-off her bevæger sig fra C til PHP? 369 00:16:29,690 --> 00:16:33,250 Føles som alle vinder hidtil, bortset en smule grimhed her eller der. 370 00:16:33,250 --> 00:16:34,040 Ja. 371 00:16:34,040 --> 00:16:34,700 Hvad er det? 372 00:16:34,700 --> 00:16:36,064 >> STUDENT: [uhørligt] hukommelse. 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 Nå, min hastighed var temmelig hurtigt. 376 00:16:40,720 --> 00:16:42,020 Right? 377 00:16:42,020 --> 00:16:44,320 Men hurtighed i udførelsen af ​​dette program? 378 00:16:44,320 --> 00:16:45,580 OK, så det er en retfærdig punkt. 379 00:16:45,580 --> 00:16:50,930 >> Så som det ville ske, jeg på forhånd cued op både min prøve løsning, den ene 380 00:16:50,930 --> 00:16:53,510 Jeg havde på det store bord var en try-baseret løsning, 381 00:16:53,510 --> 00:16:55,510 og jeg har det i denne mappe her. 382 00:16:55,510 --> 00:16:58,510 Så jeg i et øjeblik, kan jeg gå videre og køre dette på King James Bible, 383 00:16:58,510 --> 00:16:59,657 trykke Enter. 384 00:16:59,657 --> 00:17:01,990 Og det er forhåbentlig korrekt implementering i slutningen, 385 00:17:01,990 --> 00:17:05,109 giver mig tid i alt 0,38 sekunder for at 386 00:17:05,109 --> 00:17:07,270 en noget arbitrær eksempel. 387 00:17:07,270 --> 00:17:09,270 >> Og hvis jeg nu går ind i dette anden terminal vindue 388 00:17:09,270 --> 00:17:14,569 her, hvor jeg første gang åbnede gedit, lad mig gå ind i dagens code-- som igen, 389 00:17:14,569 --> 00:17:19,650 er i denne mappe her-- og lad mig gå videre og køre stavekontrol. 390 00:17:19,650 --> 00:17:23,470 Så bare for at være klar, dette er PHP version. 391 00:17:23,470 --> 00:17:25,170 Jeg er bare viser toppen af ​​det her. 392 00:17:25,170 --> 00:17:32,020 >> Så hvis jeg gør speller af tilde CS50 Pset 5 tekster, King James, indtast. 393 00:17:32,020 --> 00:17:39,700 394 00:17:39,700 --> 00:17:43,050 Det er stadig hurtigere end at skrive det i C, men den samlede tid 395 00:17:43,050 --> 00:17:47,650 er, varsel, 0,93, mens min C-baseret implementering var 0,38. 396 00:17:47,650 --> 00:17:49,110 Så det er en ikke-triviel forskel. 397 00:17:49,110 --> 00:17:51,100 >> Og dette er blot på én fil. 398 00:17:51,100 --> 00:17:53,480 Hvis du skulle køre to programmer versus den store bord 399 00:17:53,480 --> 00:17:56,510 og har en hel bunke af inputs testet, ville dette sikkert tilføje op. 400 00:17:56,510 --> 00:18:00,310 Og hvis vi havde endda større datasæt, dette ville også tilføje op desto mere. 401 00:18:00,310 --> 00:18:04,820 Så ja, betaler nogle pris af hastighed er tilfældet. 402 00:18:04,820 --> 00:18:05,470 Hvad ellers? 403 00:18:05,470 --> 00:18:08,000 404 00:18:08,000 --> 00:18:08,860 Ja? 405 00:18:08,860 --> 00:18:10,340 >> STUDENT: mængden af ​​ram brug. 406 00:18:10,340 --> 00:18:11,756 >> DAVID J. MALAN: mængden af ​​ram brug. 407 00:18:11,756 --> 00:18:15,380 Så jeg gav ikke en sekund mente, når du skriver denne PHP 408 00:18:15,380 --> 00:18:17,300 udgave, hvor meget hukommelse var jeg bruger. 409 00:18:17,300 --> 00:18:22,080 Jeg helt udskyde det til PHP selv og hvem skrev det pågældende program. 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 bekymre sig om at klemme så meget ydeevne ud af mit program eller ud af min hjemmeside 412 00:18:28,420 --> 00:18:31,150 eller ud af hvad værktøj Jeg bygger, måske 413 00:18:31,150 --> 00:18:33,310 PHP, ja, er ikke det rigtige sprog. 414 00:18:33,310 --> 00:18:36,330 >> Og i virkeligheden, det er derfor, for Eksempelvis mange web servers-- 415 00:18:36,330 --> 00:18:38,980 de faktiske programmer, tjene op 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, ligesom du nu gøre med pset 6, 418 00:18:44,630 --> 00:18:48,120 i C, så du kan klemme hver en bid af ydelse ud af det 419 00:18:48,120 --> 00:18:50,780 og virkelig udøve finkornet kontrol over, hvad der er 420 00:18:50,780 --> 00:18:52,980 foregår under hætte og ikke bare tage det 421 00:18:52,980 --> 00:18:54,890 for givet nogle højere niveau datastruktur. 422 00:18:54,890 --> 00:18:58,071 >> Overveje, trods alt, hvem i PHP implementeret 423 00:18:58,071 --> 00:19:00,070 at begrebet en hash table-- det er faktisk mere 424 00:19:00,070 --> 00:19:04,260 korrekt kaldes en associativ array-- gør han eller hun har nogen idé om, hvad slags 425 00:19:04,260 --> 00:19:07,090 af indgange, du vil være sætte ind i strukturen? 426 00:19:07,090 --> 00:19:08,260 Så naturligvis ikke, right? 427 00:19:08,260 --> 00:19:10,340 Det er et generisk værktøj i værktøjskassen, der er 428 00:19:10,340 --> 00:19:13,430 forudsat at alle, der ønsker at bruge det, og så bliver det helt sikkert 429 00:19:13,430 --> 00:19:17,680 ikke kan optimeres i sidste ende for præcis, hvad du ønsker at gøre. 430 00:19:17,680 --> 00:19:21,180 >> Så trade-offs-- udvikling tid måske forskellige, ydeevne kan variere, 431 00:19:21,180 --> 00:19:23,120 kompleksitet eller hukommelsesforbrug kan variere. 432 00:19:23,120 --> 00:19:24,820 Og så hvad du vil finde stadig er, at der er 433 00:19:24,820 --> 00:19:26,570 vil være forskellige værktøjer til handel. 434 00:19:26,570 --> 00:19:31,160 Og i virkeligheden for en super flertal af folks endelige projekt i denne klasse, 435 00:19:31,160 --> 00:19:34,360 tro det eller ej, er C vil ikke at være det rigtige sprog til at bruge. 436 00:19:34,360 --> 00:19:37,880 >> Og i virkeligheden, en af ​​grillbarer i sidste ende for enhver klasse som denne 437 00:19:37,880 --> 00:19:40,510 er at få dig til at tænke over, godt, hvad skal du trække ud 438 00:19:40,510 --> 00:19:42,710 hylden, når du vil at løse et problem. 439 00:19:42,710 --> 00:19:46,720 Og ja, vi vil krydse denne bro endnu mere som vi ser på flere sprog 440 00:19:46,720 --> 00:19:47,920 selv ud i dag. 441 00:19:47,920 --> 00:19:50,530 >> Så lad os overgang nu måske en mere velkendt sammenhæng 442 00:19:50,530 --> 00:19:52,480 til anvendelse af en som PHP. 443 00:19:52,480 --> 00:19:56,720 Det er lidt almindeligt at bruge på kommandolinjen, skrive scripts 444 00:19:56,720 --> 00:19:59,050 som jeg gjorde, men det er meget, meget mere udbredt. 445 00:19:59,050 --> 00:20:02,350 Og det blev bestemt til at anvendes i form af filer, der typisk 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 at selv generere webindhold. 448 00:20:07,990 --> 00:20:11,310 >> Så lad mig gå videre og åbne et par eksempler, jeg forberedt på forhånd. 449 00:20:11,310 --> 00:20:15,100 Og disse er faktisk slags sand historier i, at en af ​​de første ting 450 00:20:15,100 --> 00:20:18,200 Jeg nogensinde har gjort mig efter endt CS50 og måske, tror jeg, 451 00:20:18,200 --> 00:20:21,350 CS51 år siden, er min værelseskammerat og jeg hjalp 452 00:20:21,350 --> 00:20:24,320 at køre freshman murene sports program, som på det tidspunkt, 453 00:20:24,320 --> 00:20:28,610 havde freshman tilmelding til diverse sport ved at udfylde et stykke papir, 454 00:20:28,610 --> 00:20:31,800 som det blev kaldt, walking over gården til Wigglesworth, 455 00:20:31,800 --> 00:20:34,030 og slippe det i nogle Proctor dør drop. 456 00:20:34,030 --> 00:20:37,210 Og så ville han eller hun gå igennem dem og derefter faktisk email os manuelt 457 00:20:37,210 --> 00:20:39,140 at vi blev registreret for nogle sport. 458 00:20:39,140 --> 00:20:41,166 >> Så klart en mulighed til forbedring. 459 00:20:41,166 --> 00:20:44,040 Disse dage, kan du henvende sig til blot Google-formularer, men tilbage i dag, 460 00:20:44,040 --> 00:20:46,914 vi havde faktisk nå for-- dette var ikke selv så længe ago-- nå 461 00:20:46,914 --> 00:20:49,410 for en programmering sprog, der ikke var PHP. 462 00:20:49,410 --> 00:20:51,200 På det tidspunkt var det noget, der hedder Perl, 463 00:20:51,200 --> 00:20:52,890 som er gået ud af mode siden. 464 00:20:52,890 --> 00:20:54,160 Men idéen er den samme. 465 00:20:54,160 --> 00:20:58,940 >> Og jeg hovedsagelig sad til prøve til havn går Perl-versioner til PHP, 466 00:20:58,940 --> 00:21:03,710 men i fuld ansvarsfraskrivelse, ikke gav nogen tanker om æstetik endnu. 467 00:21:03,710 --> 00:21:04,960 Så her er en webside. 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 ind, dens tilsyneladende kaldet froshim0.php 470 00:21:09,470 --> 00:21:12,060 bare fordi det er vores første eksempel i denne serie. 471 00:21:12,060 --> 00:21:15,970 Og bemærk, at det har hvad der vises at være en meget grim HTML-formular, 472 00:21:15,970 --> 00:21:18,680 men en form er interessant fordi det giver 473 00:21:18,680 --> 00:21:21,910 mig til at give brugeren input til browseren. 474 00:21:21,910 --> 00:21:27,730 >> Nu sidste gang, da vi havde en form for hvem vi indsende vores forespørgselsparameter, 475 00:21:27,730 --> 00:21:30,450 køen parameter, som det blev kaldt? 476 00:21:30,450 --> 00:21:31,330 Så til Google, right? 477 00:21:31,330 --> 00:21:34,090 Vi helt punted på idéen om gør noget med det input. 478 00:21:34,090 --> 00:21:36,160 >> Men i dag, vi begynde at producere output. 479 00:21:36,160 --> 00:21:39,420 Og den adfærd, jeg har tænkt mig at se her i første omgang er temmelig triviel. 480 00:21:39,420 --> 00:21:42,980 David, jeg vil kontrollere off køn her, siger Matthews her. 481 00:21:42,980 --> 00:21:43,800 Jeg vil ikke være kaptajn. 482 00:21:43,800 --> 00:21:45,410 Jeg har tænkt mig at klikke på Register. 483 00:21:45,410 --> 00:21:50,720 Og bemærk, at webadressen har ændret til registrere-0.php, 484 00:21:50,720 --> 00:21:52,310 og så er der denne grimme tekst her. 485 00:21:52,310 --> 00:21:54,460 Jeg gav ingen tanke til formateringen af ​​dette. 486 00:21:54,460 --> 00:21:59,900 >> Men hvad er interessant, er, at tre værdier blev tilsyneladende vedtaget i. 487 00:21:59,900 --> 00:22:02,960 Dette er PHP slags svarende til printf-- 488 00:22:02,960 --> 00:22:06,330 Vi vil se, hvad det virkelig hedder i en bit-- der bare udskriver 489 00:22:06,330 --> 00:22:08,300 hvad du bestået i den. 490 00:22:08,300 --> 00:22:11,414 Så dette tyder på, at denne form havde mindst tre områder til det, 491 00:22:11,414 --> 00:22:12,580 og du så mig skrive dem i. 492 00:22:12,580 --> 00:22:15,739 Den ene var mit navn, en var køn, den ene var sovesal. 493 00:22:15,739 --> 00:22:18,780 Og kaptajn engang ikke bliver sendt til serveren fordi jeg ikke kontrollere det. 494 00:22:18,780 --> 00:22:22,150 >> Så det vil sige tilsyneladende, når du sender ting på nettet, 495 00:22:22,150 --> 00:22:26,830 ikke alene webadressen undertiden change-- nogle gange er det ikke. 496 00:22:26,830 --> 00:22:30,330 Faktisk ændret filnavn men hvad er fraværende fra webadressen 497 00:22:30,330 --> 00:22:32,861 at vi kunne se sidste gang med Google. 498 00:22:32,861 --> 00:22:33,360 Ja? 499 00:22:33,360 --> 00:22:34,380 >> STUDENT: Ingen søgestrengen 500 00:22:34,380 --> 00:22:35,220 >> DAVID J. MALAN: Der er ingen søgestrengen. 501 00:22:35,220 --> 00:22:37,270 Der er ingen spørgsmålstegn noget. 502 00:22:37,270 --> 00:22:40,050 Der er ingen spørgsmålstegn q lig katte, som vi gjorde sidste gang. 503 00:22:40,050 --> 00:22:42,170 Og der er bestemt ingen spørgsmålstegn navn lig 504 00:22:42,170 --> 00:22:46,310 David eller kollegieværelset lig Matthews, så hvor er, at alt går? 505 00:22:46,310 --> 00:22:51,290 >> Nå, lad mig gå tilbage til gedit her og åbne op for den første af disse filer 506 00:22:51,290 --> 00:22:57,020 i min vhost, lokal vært, offentlig biblioteket her og gå ind froshim0. 507 00:22:57,020 --> 00:23:02,060 Så det viser sig, at næsten alt på denne side er blot HTML. 508 00:23:02,060 --> 00:23:05,410 Og dette kan være uvant for dig, men det snart vil være mere 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 blot en HTML-side. 511 00:23:09,160 --> 00:23:12,400 >> Og det interessante ting synes at være herovre. 512 00:23:12,400 --> 00:23:16,290 En form tag, hvis handling attribut har en værdi af register 0. 513 00:23:16,290 --> 00:23:18,890 Det er derfor, når jeg indsender dette, går til den pågældende fil. 514 00:23:18,890 --> 00:23:20,620 Men metoden er forskellig today-- stolpe. 515 00:23:20,620 --> 00:23:23,120 Så det viser sig der er mindst to metoder på nettet, der anvendes 516 00:23:23,120 --> 00:23:24,911 til at sende oplysninger fra browser til serveren. 517 00:23:24,911 --> 00:23:25,980 Få sætter det i webadressen. 518 00:23:25,980 --> 00:23:27,950 Indlæg udtrykker det andetsteds. 519 00:23:27,950 --> 00:23:30,570 Og hvornår og hvorfor du måske faktisk ønsker en hjemmeside 520 00:23:30,570 --> 00:23:34,110 At bruge så i stedet af får, bare intuitivt? 521 00:23:34,110 --> 00:23:37,080 Enhver hjemmeside. 522 00:23:37,080 --> 00:23:42,010 Hvilken slags oplysninger bør videregives bare ved følgeslutning nu via posten i modsætning 523 00:23:42,010 --> 00:23:45,184 at få, hvis vi har set de to forskelle? 524 00:23:45,184 --> 00:23:46,350 STUDENT: [uhørligt] sikker. 525 00:23:46,350 --> 00:23:47,790 DAVID J. MALAN: Hvis du vil noget at være sikker. 526 00:23:47,790 --> 00:23:50,360 Så du kan skrive en adgangskode ind i en hjemmeside, et kreditkort 527 00:23:50,360 --> 00:23:53,030 ind i en hjemmeside ville art af disse suboptimal 528 00:23:53,030 --> 00:23:56,220 hvis browseren sætte det værdi inde i webadressen. 529 00:23:56,220 --> 00:23:57,680 Hvorfor? 530 00:23:57,680 --> 00:24:00,059 Du ser det, som ikke synes at være sådan en big deal, 531 00:24:00,059 --> 00:24:03,350 men odds er du temmelig ofte gå væk fra din computer eller bruge computer 532 00:24:03,350 --> 00:24:05,310 labs, og så nogen anden eller endda en roommate 533 00:24:05,310 --> 00:24:08,220 kunne nemt gå op og se at private oplysninger. 534 00:24:08,220 --> 00:24:10,220 Når du sender en e-mail via internettet, har du sandsynligvis 535 00:24:10,220 --> 00:24:12,350 ønsker ikke, at data slutning op i URL'en så godt. 536 00:24:12,350 --> 00:24:15,266 Og så er der en række årsager hvorfor vi måske ønsker at sætte det her. 537 00:24:15,266 --> 00:24:18,610 Og photos-- ret, kan jeg ikke engang helt forestille sig, hvordan du ville tage en grafisk, 538 00:24:18,610 --> 00:24:21,480 ligesom en JPEG, og sætte det ind i en URL. 539 00:24:21,480 --> 00:24:22,330 Du kunne gøre det. 540 00:24:22,330 --> 00:24:25,840 Der er måder, der koder for det, men det er bare ikke så ligetil som. 541 00:24:25,840 --> 00:24:29,030 >> Så tilmeld 0 er faktisk meget underwhelming. 542 00:24:29,030 --> 00:24:31,610 Alt det siger bogstaveligt er dette. 543 00:24:31,610 --> 00:24:35,910 Den udskriver ud inde i nogle HTML tags følgende. 544 00:24:35,910 --> 00:24:38,640 Jeg har fået en PHP tag her indlejret i en på forhånd tag. 545 00:24:38,640 --> 00:24:42,300 "Pre" bare betyder pre-formateret tekst, mono-afstand, ligesom en skrivemaskine. 546 00:24:42,300 --> 00:24:44,836 >> Printr er en udskrift rekursiv funktion. 547 00:24:44,836 --> 00:24:46,710 Og så er der dette interessant ting her. 548 00:24:46,710 --> 00:24:48,835 Og vi vil komme tilbage til dette fordi der er andre, 549 00:24:48,835 --> 00:24:51,140 men dollartegn understregning stilling synes at være 550 00:24:51,140 --> 00:24:56,110 en variabel i PHP, hvor noget du sender fra browser til server 551 00:24:56,110 --> 00:24:58,040 bliver gemt for dig. 552 00:24:58,040 --> 00:25:00,930 Og vi vil se, hvordan man kommer på at information inden længe. 553 00:25:00,930 --> 00:25:04,000 >> Men først, lad os gå tilbage til en lidt anderledes eksempel. 554 00:25:04,000 --> 00:25:09,050 Gå ind register-- eller snarere froshims1.php, 555 00:25:09,050 --> 00:25:10,470 som ser lidt anderledes. 556 00:25:10,470 --> 00:25:12,670 Jeg tog lidt mere indsats med formatering, 557 00:25:12,670 --> 00:25:14,370 selvom det er stadig temmelig grim. 558 00:25:14,370 --> 00:25:16,990 Men jeg har tænkt mig at gå videre og skriv "David" nu. 559 00:25:16,990 --> 00:25:17,850 Male. 560 00:25:17,850 --> 00:25:19,360 Vi vil kontrollere "kaptajn" denne gang. 561 00:25:19,360 --> 00:25:20,660 Vi vil gøre Matthews. 562 00:25:20,660 --> 00:25:22,430 Og registrere. 563 00:25:22,430 --> 00:25:24,110 >> Og denne gang står, hm, ikke rigtig. 564 00:25:24,110 --> 00:25:26,180 Okay, så hvad er registrere 1? 565 00:25:26,180 --> 00:25:30,509 Lad mig gå ind i åben register 1 og-- hm. 566 00:25:30,509 --> 00:25:32,300 Okay, så dette er interessant, og det 567 00:25:32,300 --> 00:25:34,880 er et springbræt nu mod mere interessante programmer. 568 00:25:34,880 --> 00:25:38,970 >> Læg mærke til toppen af ​​denne fil har et PHP tag samt nogle bemærkninger. 569 00:25:38,970 --> 00:25:42,590 Og disse er, for nu, en distraktion så lad os bare slippe af med disse bemærkninger 570 00:25:42,590 --> 00:25:47,070 ligesom de er i C. Og jeg påstå med denne luns af kode med en kommentar 571 00:25:47,070 --> 00:25:49,280 at denne kode er validering indsendelse. 572 00:25:49,280 --> 00:25:51,690 >> Tja, det viser sig, at variabler som dollartegn 573 00:25:51,690 --> 00:25:53,739 understregning indlæg er kaldet Super Globals. 574 00:25:53,739 --> 00:25:55,530 De er ligesom disse særlige globale variable 575 00:25:55,530 --> 00:25:58,840 der er bare omni-øjeblikket rådighed inden for dit program. 576 00:25:58,840 --> 00:26:03,870 Og du kan bruge firkantede beslag notation til indeks i dem ikke bruge tal 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 tænke på dollartegn understregning post som en slags hash tabel 579 00:26:12,100 --> 00:26:15,920 at du kunne passere en nøgle i et opslag ord i-mellem de kantede parenteser, 580 00:26:15,920 --> 00:26:19,370 og det kommer til at give dig tilbage værdi, som brugeren faktisk leveres. 581 00:26:19,370 --> 00:26:21,210 PHP har en funktion kaldet tom, der bare 582 00:26:21,210 --> 00:26:23,720 siger ja eller nej, dette variabel er tom eller ikke. 583 00:26:23,720 --> 00:26:27,250 Vi har disse dobbelte stænger, hvilket betyder blot eller lignende i C. 584 00:26:27,250 --> 00:26:31,740 >> Så i realiteten denne linje 4 er bare siger, hvis brugeren ikke give et navn 585 00:26:31,740 --> 00:26:36,540 eller gav ikke et køn eller ikke give et kollegieværelse, gå videre og omdirigere ham 586 00:26:36,540 --> 00:26:38,184 eller hende via denne linje her. 587 00:26:38,184 --> 00:26:40,600 Så dette er en lille kryptisk, men dette betyder bare bogstaveligt 588 00:26:40,600 --> 00:26:43,330 gå tilbage til dette sted, så det punts brugeren 589 00:26:43,330 --> 00:26:45,420 tilbage til, hvor han eller hun kom fra. 590 00:26:45,420 --> 00:26:47,880 Men det er lidt uelegant i, at jeg hårdt kodet det. 591 00:26:47,880 --> 00:26:52,150 >> Men hvad nu, hvis dette, hvis tilstand vurderer ikke at sandt? 592 00:26:52,150 --> 00:26:55,790 Hvad hvis brugeren gav mig hans eller hendes navn og dorm og køn? 593 00:26:55,790 --> 00:26:58,540 At hvis tilstand er ikke kommer til at evaluere til sand, 594 00:26:58,540 --> 00:27:00,650 så jeg ikke ramte exit i linje 7. 595 00:27:00,650 --> 00:27:01,680 Så hvad sker der? 596 00:27:01,680 --> 00:27:03,880 Og dette er, hvad der er interessant om PHP. 597 00:27:03,880 --> 00:27:07,470 >> Du kan droppe ind og ud af PHP mode, så at sige. 598 00:27:07,470 --> 00:27:10,985 Hvis du vil have noget kode til at udføre, du kan åbne og lukke en PHP tag 599 00:27:10,985 --> 00:27:13,010 og sætte kode der ligesom jeg har gjort her. 600 00:27:13,010 --> 00:27:16,810 Så snart du lukker PHP tag, serveren 601 00:27:16,810 --> 00:27:19,407 er bare at spytte ud uanset hvad du lægger der. 602 00:27:19,407 --> 00:27:21,740 Og ja, det var en del af den oprindelige udformning af PHP, 603 00:27:21,740 --> 00:27:25,280 for bedre for værre, var dette sammenblanding af kode og markup 604 00:27:25,280 --> 00:27:25,920 sprog. 605 00:27:25,920 --> 00:27:28,670 Og vi vil se, at denne meget hurtigt uddelegerer ind i en rod. 606 00:27:28,670 --> 00:27:31,280 Og så vil vi gøre det bedre end dette i sidste ende, men blot 607 00:27:31,280 --> 00:27:35,620 bemærke den lethed, hvormed jeg faktisk er i stand til at udføre en vis logik. 608 00:27:35,620 --> 00:27:37,440 >> Men stadig en smule underwhelming. 609 00:27:37,440 --> 00:27:41,210 Lad os åbne op udgave to af Frosh IMS som 610 00:27:41,210 --> 00:27:44,270 tilsyneladende underkaster sig register2.php. 611 00:27:44,270 --> 00:27:47,600 Så denne fil er faktisk går at se næsten den samme. 612 00:27:47,600 --> 00:27:50,780 Jeg har tænkt mig at gå til Frosh IM 2. 613 00:27:50,780 --> 00:27:53,050 Men i Frosh IM'er 2, lad os se hvad der sker. 614 00:27:53,050 --> 00:27:58,110 >> David, skal du klikke på alternativknappen, som det hedder; Matthews, ingen anfører. 615 00:27:58,110 --> 00:27:59,230 Registrer. 616 00:27:59,230 --> 00:28:00,130 Du er registreret. 617 00:28:00,130 --> 00:28:00,700 Ikke rigtig. 618 00:28:00,700 --> 00:28:02,574 Åh vent, vi lige gjorde dette eksempel, gjorde vi ikke? 619 00:28:02,574 --> 00:28:04,520 Okay, stå ved. 620 00:28:04,520 --> 00:28:06,602 Vi vil gøre de tre. 621 00:28:06,602 --> 00:28:08,560 Klart noget handler om skal ske med Gmail. 622 00:28:08,560 --> 00:28:09,600 Vi får der. 623 00:28:09,600 --> 00:28:11,900 >> Så Frosh IM 3 ligner dette. 624 00:28:11,900 --> 00:28:13,050 Ikke anderledes. 625 00:28:13,050 --> 00:28:19,850 Men når jeg gør David, mandlig, Matthews, og registrere denne tredje og sidste udgave 626 00:28:19,850 --> 00:28:22,230 krav, ganske enkelt, du er registreret virkelig. 627 00:28:22,230 --> 00:28:23,560 Det er slags uvæsentlige. 628 00:28:23,560 --> 00:28:25,600 Men jeg hævder med dette tredje og endelige version 629 00:28:25,600 --> 00:28:30,610 Jeg har nu genskabt præcis, hvad min værelseskammerat og jeg bygget til Frosh infrastrukturforvaltere 630 00:28:30,610 --> 00:28:31,731 program år siden. 631 00:28:31,731 --> 00:28:32,480 Og det var enkel. 632 00:28:32,480 --> 00:28:34,330 Der var ingen database, ingen Excel-regneark. 633 00:28:34,330 --> 00:28:36,450 Men endnu vigtigere, der var ikke mere papir 634 00:28:36,450 --> 00:28:42,520 fordi det, vi gjorde med dette program var faktisk maile Proctor, som 635 00:28:42,520 --> 00:28:44,530 var tidligere modtager disse ting via former. 636 00:28:44,530 --> 00:28:48,890 >> Og tilsyneladende vi har programmeret dette i sådan måde, at når nogen registrerer, 637 00:28:48,890 --> 00:28:52,470 John Harvards konto emails proctor-- eller selv i dette tilfælde, 638 00:28:52,470 --> 00:28:55,960 John Harvard-- med følgende text-- "Denne person blot registreret." 639 00:28:55,960 --> 00:29:00,560 Navn er David, kaptajn er tomt; køn, mand; og kollegiet, Matthews. 640 00:29:00,560 --> 00:29:01,560 >> Så hvad skete der? 641 00:29:01,560 --> 00:29:05,360 Nå, den pågældende fil her er tilsyneladende register3.php. 642 00:29:05,360 --> 00:29:09,080 Og hvis jeg åbner denne, vil du se både magt kode som denne 643 00:29:09,080 --> 00:29:12,380 og også helt ærligt, den usikkerhed af et system som e-mail. 644 00:29:12,380 --> 00:29:16,290 Jeg har netop effektivt foregivet at være John Harvard på følgende måde. 645 00:29:16,290 --> 00:29:20,920 >> Jeg har den åbne php tag op øverst, som bare siger her kommer nogle PHP-kode. 646 00:29:20,920 --> 00:29:23,155 Hernede, vender derude er biblioteker i PHP. 647 00:29:23,155 --> 00:29:26,410 Du skal bare ikke behøver at omfatter header filer så meget. 648 00:29:26,410 --> 00:29:28,900 Du får mere med køkkenvask, så at sige. 649 00:29:28,900 --> 00:29:31,820 >> Men denne gang i linje 4, det gør jeg ønsker at fagbibliotek kaldet 650 00:29:31,820 --> 00:29:36,087 PHP mailer, hvilket er noget du kan installere gratis i mange systemer. 651 00:29:36,087 --> 00:29:37,920 Hernede jeg validere indsendelse bare 652 00:29:37,920 --> 00:29:40,540 ved at kontrollere har brugeren giver mig et navn, et køn og en sovesal. 653 00:29:40,540 --> 00:29:44,130 Og hvis ja, gå videre og instantiere en mailer. 654 00:29:44,130 --> 00:29:47,020 >> Du kan tænke på dette som værende en linje kode, der bare tildeler. 655 00:29:47,020 --> 00:29:48,950 Det er ligesom malloc, men det er lidt mere sexet 656 00:29:48,950 --> 00:29:51,790 i, at du ikke nævne allokere og nogle generiske nummer. 657 00:29:51,790 --> 00:29:55,030 Du siger at give mig en af ​​disse, give mig en ny en af ​​disse. 658 00:29:55,030 --> 00:29:57,950 >> Og hvis du har programmeret i Java eller C ++ eller andre sprog, 659 00:29:57,950 --> 00:29:59,130 du måske har set dette. 660 00:29:59,130 --> 00:30:01,840 Men den korte af det, hvis uvant, denne linje 661 00:30:01,840 --> 00:30:05,410 sætter dollartegn mail en særlig struct kaldet 662 00:30:05,410 --> 00:30:08,731 et objekt, der har indbygget e-mail-funktionalitet. 663 00:30:08,731 --> 00:30:10,355 Og i virkeligheden, mærke og lignende syntaks. 664 00:30:10,355 --> 00:30:11,900 >> Dette er ikke en pointer, per se. 665 00:30:11,900 --> 00:30:13,990 PHP bare bruger samme syntaks. 666 00:30:13,990 --> 00:30:17,660 Denne linje siger brug SMTP-- Simple Mail Transfer 667 00:30:17,660 --> 00:30:20,900 Protokollen, som er lige protokol, der bruges til at sende e-mail. 668 00:30:20,900 --> 00:30:24,240 Dette er angivelse brug Harvard SMTP-server, som 669 00:30:24,240 --> 00:30:25,830 er et eller andet sted her på campus. 670 00:30:25,830 --> 00:30:28,480 >> Det er at sige, hvad TCP portnummer til at tale med, 671 00:30:28,480 --> 00:30:31,650 og jeg bare var der ud af googling eller ved at spørge helpdesk. 672 00:30:31,650 --> 00:30:34,640 Og så fordi Harvard bruger nogle systemets sikkerhed på mail server-- 673 00:30:34,640 --> 00:30:37,060 mindst at kryptere trafik mellem dig og det, 674 00:30:37,060 --> 00:30:41,380 selvom alle kan sende til it-- Jeg har tænkt mig at tænde TLS protokollen 675 00:30:41,380 --> 00:30:42,710 for at holde denne sikker. 676 00:30:42,710 --> 00:30:44,730 >> Men dette er, hvor tingene få en smule skræmmende. 677 00:30:44,730 --> 00:30:47,970 Jeg kan bare vilkårligt sige, at jeg jharvard, 678 00:30:47,970 --> 00:30:51,930 og jeg kan bare vilkårligt email mig her. 679 00:30:51,930 --> 00:30:55,650 Og så kan jeg angive en individ med denne linje her. 680 00:30:55,650 --> 00:30:58,460 >> Og det ser bare grimt, men det er bare en masse sammenkædning. 681 00:30:58,460 --> 00:31:04,480 Slår ud PHP har en super brugbart symbol, ligesom nogle sprog, dot operatør, 682 00:31:04,480 --> 00:31:07,340 som netop bogstaveligt sammenkæder streng efter streng efter streng, 683 00:31:07,340 --> 00:31:09,810 og du behøver ikke at malloc eller figur den totale længde af strengen. 684 00:31:09,810 --> 00:31:10,820 Du skal bare gøre det. 685 00:31:10,820 --> 00:31:15,220 Og ja, fordi jeg sammenkæde i alle disse ting med disse prikker, 686 00:31:15,220 --> 00:31:18,330 det er grunden til email jeg sendt så ud som det gjorde. 687 00:31:18,330 --> 00:31:20,610 >> Og så til sidst her, jeg sender mail. 688 00:31:20,610 --> 00:31:22,580 Så hvis dette er falsk, Jeg skal bare dø, 689 00:31:22,580 --> 00:31:25,680 som er en funktion, der kun udskriver til skærmen nogle fejlmeddelelse. 690 00:31:25,680 --> 00:31:29,170 Men det er i virkeligheden, kalder funktionen Send. 691 00:31:29,170 --> 00:31:31,780 Ellers, hvis alt dette mislykkes, det omdirigerer mig tilbage her. 692 00:31:31,780 --> 00:31:34,050 >> Og hvorfor gjorde jeg se, at Jeg er registreret egentlig? 693 00:31:34,050 --> 00:31:36,110 Tja, det skete lige her. 694 00:31:36,110 --> 00:31:38,170 Så jeg bringe dette op til et par grunde. 695 00:31:38,170 --> 00:31:41,542 >> One, det er præcis hvordan, hvis du bygger nogle hjemmeside for et afsluttende projekt 696 00:31:41,542 --> 00:31:44,000 eller til den virkelige verden, er dette hvordan du sender e-mail påmindelser 697 00:31:44,000 --> 00:31:45,924 til dine kunder eller dine abonnenter. 698 00:31:45,924 --> 00:31:47,590 Dette er, hvordan du sender password påmindelser. 699 00:31:47,590 --> 00:31:50,760 Dette er, hvordan du sende folk beskeder at de har en ny Facebook 700 00:31:50,760 --> 00:31:52,990 besked verserende eller noget lignende. 701 00:31:52,990 --> 00:31:55,010 >> Men det er også taler til det faktum, at dette kunne 702 00:31:55,010 --> 00:31:58,160 har været meget godt fra Davin eller nogen anden. 703 00:31:58,160 --> 00:32:00,567 Og jeg siger den slags med et smil, fordi jeg er 704 00:32:00,567 --> 00:32:03,400 helt sikker på, hvad der foregår gennem flere af dine tanker på dette punkt. 705 00:32:03,400 --> 00:32:11,910 Men dette er en af ​​dem, gør som jeg siger, ikke som jeg gør slags ting, 706 00:32:11,910 --> 00:32:14,480 fordi det er trivielt at smede emails som denne. 707 00:32:14,480 --> 00:32:16,480 Men som du måske har set eller læse i Crimson, 708 00:32:16,480 --> 00:32:18,271 af sent det er også temmelig trivielle for mennesker 709 00:32:18,271 --> 00:32:20,050 at spore dem tilbage til nogle oprindelse. 710 00:32:20,050 --> 00:32:23,790 Og spørg mig lidt tid, måske ved CS50 frokost, hvor jeg først 711 00:32:23,790 --> 00:32:27,080 fik kendskab meget nøje næsten til ed board mange år 712 00:32:27,080 --> 00:32:30,890 siden, da jeg opdagede hvordan internettet arbejdede. 713 00:32:30,890 --> 00:32:36,940 Så i enhver case-- lidt efter ed bestyrelse gjorde. 714 00:32:36,940 --> 00:32:42,300 >> Det under alle omstændigheder, er der en hel masse super globals, 715 00:32:42,300 --> 00:32:45,960 som de kaldes her, hvoraf den ene vi saw-- dollartegn understregning indlæg. 716 00:32:45,960 --> 00:32:49,530 Der er et modstykke kaldet get, som er hvor ting fra en URL 717 00:32:49,530 --> 00:32:50,690 ender med at gå. 718 00:32:50,690 --> 00:32:54,051 Og der er en hel masse andre, too-- session og server og cookie. 719 00:32:54,051 --> 00:32:55,800 Vi vil komme tilbage til cookie en anden gang, 720 00:32:55,800 --> 00:33:01,340 men session er lidt cool fordi lige nu-- indtil nu-- 721 00:33:01,340 --> 00:33:06,350 alt, hvad vi har gjort med en webbrowser er sortering af statsløse, så at sige. 722 00:33:06,350 --> 00:33:10,060 Jeg kan klikke rundt, adgang filer på serveren, noget 723 00:33:10,060 --> 00:33:13,500 der sker på skærmen, men derefter forbindelsen lukkes. 724 00:33:13,500 --> 00:33:17,450 Internet Explorer eller Firefox-ikon stopper spinding 725 00:33:17,450 --> 00:33:20,340 og du bare se, hvad denne webside indeholder. 726 00:33:20,340 --> 00:33:23,530 >> Så HTTP er statsløs i at når det gør en forbindelse, 727 00:33:23,530 --> 00:33:25,050 får nogle data, der er det. 728 00:33:25,050 --> 00:33:29,940 Ikke mere tilslutning, i modsætning til Skype, modsætning Facetime modsætning Gchat, som 729 00:33:29,940 --> 00:33:32,180 opretholder en konstant forbindelse til serveren. 730 00:33:32,180 --> 00:33:34,650 Den web er fundamentalt afbrudt, selv om vi 731 00:33:34,650 --> 00:33:36,630 se inden længe hvordan vi kan simulere ting 732 00:33:36,630 --> 00:33:39,300 som Facebook chat og Gchat, som opretholder en illusion-- 733 00:33:39,300 --> 00:33:41,680 eller rent faktisk gør opretholde en konstant forbindelse ved hjælp af 734 00:33:41,680 --> 00:33:43,270 mere moderne teknologi. 735 00:33:43,270 --> 00:33:49,000 >> Men hvis jeg går til, siger, counter.php, dette er en anden simpel eksempel 736 00:33:49,000 --> 00:33:52,700 som vi skal se, der i øjeblikket tænker Jeg besøgte stedet tiden nul. 737 00:33:52,700 --> 00:33:56,790 Men hvis jeg bare genindlæse siden, det på en måde kender jeg var her før. 738 00:33:56,790 --> 00:33:58,840 Hvis jeg opdateres igen, kender jeg var her før. 739 00:33:58,840 --> 00:34:01,100 Og igen og igen og igen og igen. 740 00:34:01,100 --> 00:34:03,610 >> Så der er nogle plus-plussing foregår, men varsel 741 00:34:03,610 --> 00:34:07,090 den lille ting spins nogensinde så kortvarigt op toppen og derefter afbryder, 742 00:34:07,090 --> 00:34:11,179 så det er ikke ligesom jeg har en konstant forbindelse til min apparatet. 743 00:34:11,179 --> 00:34:16,929 Tja, hvis jeg går ind i counter.php, mærke til, hvor nemt det er. 744 00:34:16,929 --> 00:34:19,080 Jeg først kalde denne særlige funktion, som vi vil snart 745 00:34:19,080 --> 00:34:21,513 begynder at tage for givet kaldet starte session. 746 00:34:21,513 --> 00:34:22,179 Start en session. 747 00:34:22,179 --> 00:34:25,095 >> Og en session fremover er bare vil være en spand, ligesom et indkøbscenter 748 00:34:25,095 --> 00:34:28,120 vogn, hvor du kan sætte værdier og art tillid som programmør 749 00:34:28,120 --> 00:34:31,590 at de kommer til at være her, når at brugeren kommer tilbage-- en anden 750 00:34:31,590 --> 00:34:35,670 senere, en time senere, selv et år senere, så længe han eller hun ikke klar 751 00:34:35,670 --> 00:34:37,602 deres cookies, som vi i sidste ende vil se. 752 00:34:37,602 --> 00:34:39,310 Og nu skal jeg bare have en hvis betingelse her. 753 00:34:39,310 --> 00:34:44,679 Så hvis følgende nøgle, kaldet tæller, er sat inde 754 00:34:44,679 --> 00:34:49,210 af denne super global-- denne hash bord, hvis du will-- kaldet session, 755 00:34:49,210 --> 00:34:53,350 derefter gå videre og få fat i værdi fra den session-- tænketank 756 00:34:53,350 --> 00:34:55,250 af dette som en shopping cart-- og gemme det 757 00:34:55,250 --> 00:34:57,680 i en midlertidig variabel kaldet tæller. 758 00:34:57,680 --> 00:35:02,240 >> Ellers, hvis denne værdi tælleren ikke angivet i den såkaldte indkøbskurv, 759 00:35:02,240 --> 00:35:04,430 bare initialisere den til 0. 760 00:35:04,430 --> 00:35:09,830 Endelig ned her, gå og sat tilbage ind i indkøbsvogne eller sessionen 761 00:35:09,830 --> 00:35:13,000 værdien af ​​tælleren +1. 762 00:35:13,000 --> 00:35:16,730 Så det viser sig, at dette særlig beholder her-- 763 00:35:16,730 --> 00:35:20,355 hvilket igen er en af ​​disse er forbundet arrays, et array, som du kan indeksere 764 00:35:20,355 --> 00:35:25,010 i ord i stedet for numbers-- fortsætter selv efter at brugeren går væk. 765 00:35:25,010 --> 00:35:26,510 Igen, vil jeg gå tilbage til siden nu. 766 00:35:26,510 --> 00:35:28,400 Det har været et minut eller deromkring. 767 00:35:28,400 --> 00:35:31,300 Men den husker, at jeg har været her 19 gange før. 768 00:35:31,300 --> 00:35:32,740 Dette er mit 20th besøg. 769 00:35:32,740 --> 00:35:36,560 >> Og så dette vil være nøglen til gennemførelse af ethvert websted, der husker 770 00:35:36,560 --> 00:35:40,640 at du er logget ind, at du lægger noget bogstavelig i din indkøbskurv 771 00:35:40,640 --> 00:35:43,902 til at købe eller at du har nogle antallet af meddelelser afventes. 772 00:35:43,902 --> 00:35:45,610 Når som helst du ønsker at huske information, 773 00:35:45,610 --> 00:35:48,130 Vi vil se, at PHP, ligesom flere andre sprog, 774 00:35:48,130 --> 00:35:53,640 giver os med denne illusion af staten selvom, som du kan se i pset 6, 775 00:35:53,640 --> 00:35:57,642 som du gør HTTP-anmodninger fra klient til server, det er det. 776 00:35:57,642 --> 00:35:59,850 Når du kommer tilbage at svar, der er ikke noget mere 777 00:35:59,850 --> 00:36:01,790 kommer tilbage fra serveren som standard. 778 00:36:01,790 --> 00:36:03,820 Men vi vil se, hvordan man arbejder omkring dette. 779 00:36:03,820 --> 00:36:07,430 >> Nå nu, lad os prøve at rydde dette op en lille smule. 780 00:36:07,430 --> 00:36:09,470 Vi har set et par forskellige eksempler der. 781 00:36:09,470 --> 00:36:12,250 Åh, og som en sidebemærkning, for dem kender eller ukendte, 782 00:36:12,250 --> 00:36:14,230 årsagen til, at Frosh chatbeskeder eksempel gik 783 00:36:14,230 --> 00:36:18,060 fra ser virkelig grim at slightly-- godt, 784 00:36:18,060 --> 00:36:23,160 stadig ugly-- til lidt mindre grim men stadig grim 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 sig, at jeg har denne på toppen af ​​filen. 787 00:36:28,240 --> 00:36:32,570 >> Viser sig, at bootstrap er en af ​​mange frit tilgængelige biblioteker derude 788 00:36:32,570 --> 00:36:37,140 der findes ikke for programmeringssprog altid, men for CSS eller JavaScript 789 00:36:37,140 --> 00:36:39,190 eller HTML eller en række sprog. 790 00:36:39,190 --> 00:36:42,160 >> Og disse folk her-- oprindeligt kom ud 791 00:36:42,160 --> 00:36:44,730 af Twitter-- bare have en hel masse af stilarter. 792 00:36:44,730 --> 00:36:47,360 Det er en massiv fil her, at nogen skrev, 793 00:36:47,360 --> 00:36:51,020 eller andens skrev, over tid, der specificerer farver og formatering 794 00:36:51,020 --> 00:36:53,740 og whatnot, så jeg kan slags låne deres syntaks 795 00:36:53,740 --> 00:36:56,157 og ikke er nødt til at regne ud hvordan man kan lægge ud min form. 796 00:36:56,157 --> 00:36:57,990 Dette er også minified således at en computer 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 det stilisering der ændret. 799 00:37:03,050 --> 00:37:05,450 >> Men lad os nu gøre det bedre i form af design, 800 00:37:05,450 --> 00:37:07,490 fordi hvis vi bo ned denne vej for lang, 801 00:37:07,490 --> 00:37:11,290 vores kode kommer til at få rodet og Messier. 802 00:37:11,290 --> 00:37:13,040 Så lad os fokusere på disse eksempler her. 803 00:37:13,040 --> 00:37:15,090 Det sidste for i dag. 804 00:37:15,090 --> 00:37:18,720 >> Så her er en super simpel version 1.0 af CS50 hjemmeside. 805 00:37:18,720 --> 00:37:21,250 Det har kun links til foredrag og pensum, 806 00:37:21,250 --> 00:37:25,490 og det er ved hjælp af denne uordnet liste tag-- UL tag, som vi brugte sidste gang. 807 00:37:25,490 --> 00:37:28,800 Og hvis det i virkeligheden, hvis jeg åbne View Page Source, 808 00:37:28,800 --> 00:37:31,710 vil du se, at dette er virkelig, virkelig simpel HTML. 809 00:37:31,710 --> 00:37:35,460 Og i virkeligheden, selv om det er en PHP-fil under kølerhjelmen, 810 00:37:35,460 --> 00:37:38,620 det er stadig bare spytte kun HTML for nu. 811 00:37:38,620 --> 00:37:41,312 >> Så hvis jeg klikker på Forelæsninger, vi ser dette ske. 812 00:37:41,312 --> 00:37:43,020 Og hvis jeg klikker på uge nul, 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 var tilsyneladende PDF dias fra den dag. 815 00:37:47,900 --> 00:37:52,020 Alt, hvad jeg har gjort, er link til en ankerkode til denne webadresse her. 816 00:37:52,020 --> 00:37:55,400 >> Så dette er kun at sige dette er en smuk simpel version af CS50 hjemmeside. 817 00:37:55,400 --> 00:37:56,790 Lad os se, hvordan det er gennemført. 818 00:37:56,790 --> 00:38:01,240 Hvis jeg går ind i mvc0 bibliotek, vi vil se et par filer. 819 00:38:01,240 --> 00:38:03,250 Den ene er en README, så hvis nogle af disse er for hurtig, 820 00:38:03,250 --> 00:38:05,166 du kan bare poke mere afslappet senere. 821 00:38:05,166 --> 00:38:07,930 Og varsel her er en index.php fil. 822 00:38:07,930 --> 00:38:09,960 Det viser sig, at hvis du selv, det menneskelige, 823 00:38:09,960 --> 00:38:14,460 ikke angiver en endelig navn i en URL, webserveren sædvanligvis 824 00:38:14,460 --> 00:38:17,010 udleder nogle standard navn for dig. 825 00:38:17,010 --> 00:38:20,060 Et indeks dot noget er generelt standard. 826 00:38:20,060 --> 00:38:23,010 >> Så det er derfor et øjeblik siden da jeg besøgte denne URL her, 827 00:38:23,010 --> 00:38:26,750 ingen filnavn, ingen fil forlængelse, ingen periode i webadressen. 828 00:38:26,750 --> 00:38:29,710 Det bare vidste eller anden måde magisk at lede efter index.php. 829 00:38:29,710 --> 00:38:30,870 Det er bare en konvention. 830 00:38:30,870 --> 00:38:32,360 Kunne kaldes noget. 831 00:38:32,360 --> 00:38:35,110 >> Så hvis jeg nu gå ind index.php, vil du se 832 00:38:35,110 --> 00:38:37,100 at indeed-- lad slippe af kommentarerne 833 00:38:37,100 --> 00:38:39,500 her, fordi der er virkelig intet interessant at it-- 834 00:38:39,500 --> 00:38:41,579 det er bare svært kodet HTML. 835 00:38:41,579 --> 00:38:43,370 Så det er konsekvent, dog 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 Der er ingen egentlig programmering logik i her. 838 00:38:48,060 --> 00:38:51,030 >> Og de andre filer er temmelig meget lige så uinteressant. 839 00:38:51,030 --> 00:38:56,240 Det er bare hårdt kodet uge én her til uge en m og en uge w, 840 00:38:56,240 --> 00:38:57,510 for mandag og onsdag. 841 00:38:57,510 --> 00:39:01,890 Og derefter, hvis jeg åbner op uge nul, bemærke det er næsten identiske. 842 00:39:01,890 --> 00:39:03,320 >> Og det er lidt af en nøgle takeaway. 843 00:39:03,320 --> 00:39:06,180 Læg mærke til, hvor overflødig dette er. 844 00:39:06,180 --> 00:39:10,710 Disse filer ændrer næppe, og alligevel har jeg trak en af ​​disse copy / paste job 845 00:39:10,710 --> 00:39:13,420 hvor jeg tog en file-- formentlig i uge zero-- kopieret det 846 00:39:13,420 --> 00:39:16,320 når uge kom rundt, og sammenknebne et par værdier. 847 00:39:16,320 --> 00:39:18,590 Vi skal nok være i stand til at gøre det bedre end dette. 848 00:39:18,590 --> 00:39:21,800 >> Så lad os gå tilbage til MVC og gå ind i en udgave. 849 00:39:21,800 --> 00:39:24,810 Og læg mærke til jeg har fået en par filer, fordi det, 850 00:39:24,810 --> 00:39:29,870 var fælles for alle disse filer blot en øjeblik ago-- hvis jeg gå tilbage til version 0, 851 00:39:29,870 --> 00:39:32,600 lad os gå tilbage til indekset, og bare postulate-- 852 00:39:32,600 --> 00:39:36,090 når jeg slippe af comments-- hvilken del af denne side 853 00:39:36,090 --> 00:39:40,072 er formentlig i hver eneste af mine filer? 854 00:39:40,072 --> 00:39:40,780 Bare kalde det ud. 855 00:39:40,780 --> 00:39:44,620 Hvilke linjer er duplikeres sandsynligvis på tværs af alle disse sider? 856 00:39:44,620 --> 00:39:45,120 Ja? 857 00:39:45,120 --> 00:39:46,110 >> STUDENT: [uhørligt]. 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, absolut. 860 00:39:48,720 --> 00:39:52,080 1 til 9, undtagen måske 8 ændrer en lille smule, fordi CS50 861 00:39:52,080 --> 00:39:54,650 bliver foredrag eller uge nul eller noget. 862 00:39:54,650 --> 00:39:55,970 Men næsten identiske. 863 00:39:55,970 --> 00:39:58,657 Så alle disse ting er bare slags kopieres og indsættes. 864 00:39:58,657 --> 00:40:00,490 Og der er et par andre linjer jeg kan tænke 865 00:40:00,490 --> 00:40:05,000 af denne er sandsynligvis identisk på tværs af alle filerne. 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: Ja. 868 00:40:07,190 --> 00:40:11,220 Sure, 12, 13 og 14 sandsynligvis, bare fordi de interessante ting 869 00:40:11,220 --> 00:40:15,460 der sker på linjerne 11 og 10, så det ser ud. 870 00:40:15,460 --> 00:40:18,350 Så lad os se på version 1, som forsøger at forbedre dette. 871 00:40:18,350 --> 00:40:24,020 I version 1 af denne MVC example-- vi får forklare, hvad MVC midler i en moment-- 872 00:40:24,020 --> 00:40:27,420 hvis jeg går ind i indekset, den slags ser lidt forvirrende nu. 873 00:40:27,420 --> 00:40:28,880 Det er ikke helt så simpelt som før. 874 00:40:28,880 --> 00:40:30,906 >> Men når du begynder at læse den grundigt, det er 875 00:40:30,906 --> 00:40:32,530 temmelig ligetil, hvad den gør. 876 00:40:32,530 --> 00:40:34,397 Tilsyneladende linje 1 og linje 8 har erstattet 877 00:40:34,397 --> 00:40:37,230 alle de ting, du bare identified-- selvom der blot for god foranstaltning, 878 00:40:37,230 --> 00:40:41,900 Jeg forlod ULS der just in case nogle dage ikke har en liste over ting. 879 00:40:41,900 --> 00:40:47,860 Og så kræver er lidt ligesom pund omfatter i C. Den kopierer og pastaer 880 00:40:47,860 --> 00:40:50,470 indholdet effektivt lige her i denne fil. 881 00:40:50,470 --> 00:40:53,650 >> Så i header.php, som du kunne udlede af sit navn, 882 00:40:53,650 --> 00:40:55,330 vil være overskriften på siden. 883 00:40:55,330 --> 00:40:57,110 Det er slags forældreløse her. 884 00:40:57,110 --> 00:41:01,820 Det har kun toppen til det, men er der ikke mere indhold nedenfor. 885 00:41:01,820 --> 00:41:05,070 >> Og hvis jeg ser på footer i mellemtiden, som var den anden fil mentioned-- 886 00:41:05,070 --> 00:41:08,830 denne ene er endnu mindre interessant, men igen, det er fælles for alt. 887 00:41:08,830 --> 00:41:10,250 Så dette er sidefoden. 888 00:41:10,250 --> 00:41:11,300 Dette er header. 889 00:41:11,300 --> 00:41:13,950 Dette er den fil, der er forandring, så hvorfor ikke 890 00:41:13,950 --> 00:41:18,140 forsøge at faktor ud fællestrækkene med disse to linjer her? 891 00:41:18,140 --> 00:41:20,090 >> Men vi kan rense dette op lidt længere. 892 00:41:20,090 --> 00:41:23,260 Jeg har tænkt mig at gå videre og åbne udgave to, hvor 893 00:41:23,260 --> 00:41:27,106 Vi vil se, at der er en ny fil, helpers.php. 894 00:41:27,106 --> 00:41:28,610 Vi vil se, hvad der er i et øjeblik. 895 00:41:28,610 --> 00:41:30,930 Lad os gå til indeks, som indgang som før. 896 00:41:30,930 --> 00:41:35,230 >> Og nu opdager jeg kræver helpers.php, ikke header eller footer. 897 00:41:35,230 --> 00:41:41,720 Men hjælpere er lidt ligesom helpers.c og helpers.h fra pset 2 898 00:41:41,720 --> 00:41:46,150 eller pset 3 længe siden, da du rent faktisk gjorde søge og finde for denne pset, 899 00:41:46,150 --> 00:41:50,950 og du havde alle dine kode til sortering og søge i en separat fil. 900 00:41:50,950 --> 00:41:52,510 Det er, hvad der foregår her. 901 00:41:52,510 --> 00:41:54,390 >> Og nu linie 3 ser lidt anderledes. 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 at gøre dette endnu mere klar, kunne jeg bare 904 00:41:57,950 --> 00:42:01,820 gør dette for at være stilrene med alt det andet, vi har gjort. 905 00:42:01,820 --> 00:42:04,130 Men det er ikke rigtig ændre funktionalitet. 906 00:42:04,130 --> 00:42:05,880 Det er bare én linje af fast kode. 907 00:42:05,880 --> 00:42:09,010 >> Tilsyneladende er der en funktion et sted kaldet gøre header, 908 00:42:09,010 --> 00:42:11,420 og dette er, hvor tingene få temmelig stærk. 909 00:42:11,420 --> 00:42:17,040 Bemærk, at indersiden af ​​sine parenteser er, hvad andre stykke syntaks? 910 00:42:17,040 --> 00:42:19,780 911 00:42:19,780 --> 00:42:23,350 Det er nok lidt svært at sige, men mærke there's-- Jeg vil sætte nogle hvide 912 00:42:23,350 --> 00:42:24,300 plads. 913 00:42:24,300 --> 00:42:25,530 Der er firkantede parenteser. 914 00:42:25,530 --> 00:42:29,700 >> Og firkantede parenteser vi oplevede en smule siden i forbindelse med associative arrays, 915 00:42:29,700 --> 00:42:31,580 som igen ligesom hash tabeller. 916 00:42:31,580 --> 00:42:36,230 Og hvis du tror nu til C, den For argumenter i en funktion 917 00:42:36,230 --> 00:42:37,570 skal altid være den samme. 918 00:42:37,570 --> 00:42:41,146 Du er nødt til at huske, hvad det bestille is-- x, y, z eller z, y, x-- 919 00:42:41,146 --> 00:42:44,020 og du er nødt til altid at give dem i samme rækkefølge eller slå dem op 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 at være en smart måde passere en vilkårlig nøgle værdi 922 00:42:51,140 --> 00:42:55,840 parvis hvorved titel er navnet af et argument i denne sag 923 00:42:55,840 --> 00:42:58,334 og CS50 er dens værdi. 924 00:42:58,334 --> 00:43:00,250 Og det faktum, at jeg har disse firkantede parenteser 925 00:43:00,250 --> 00:43:02,560 betyder her, at jeg kunne også passere i noget 926 00:43:02,560 --> 00:43:07,550 som en uge er 1 eller 0 eller 2 eller 3. 927 00:43:07,550 --> 00:43:10,550 Så vi har parameteriseres denne funktion på en sådan måde 928 00:43:10,550 --> 00:43:15,180 at det kan tage flere indgange, men for nu er det bare den ene. 929 00:43:15,180 --> 00:43:20,060 >> Hvis jeg nu går ind i helpers.php, mærke, hvad det gør. 930 00:43:20,060 --> 00:43:22,030 Dette er en lille smule af ny funktionalitet, 931 00:43:22,030 --> 00:43:24,190 men for nu bare tage på troen på, at dette er 932 00:43:24,190 --> 00:43:26,570 syntaksen, som du definere en funktion i PHP. 933 00:43:26,570 --> 00:43:27,840 Du bogstaveligt talt sige funktion. 934 00:43:27,840 --> 00:43:30,090 Du behøver ikke angive en tilbagevenden skriver, og det er konsekvent 935 00:43:30,090 --> 00:43:33,880 med den variable detalje tidligere hvor du ikke rigtig stærkt skriver. 936 00:43:33,880 --> 00:43:35,650 >> Dette blot specificerer der som standard, dette 937 00:43:35,650 --> 00:43:37,460 tager en associativ array som et argument. 938 00:43:37,460 --> 00:43:38,210 Og ved du hvad? 939 00:43:38,210 --> 00:43:41,450 Hvis brugeren ikke passere en i, antage en standard værdi. 940 00:43:41,450 --> 00:43:44,680 >> Dette er en funktion, at C ikke har for os, hvilket er rart, fordi nu 941 00:43:44,680 --> 00:43:46,430 data, selvom du ikke give det noget, 942 00:43:46,430 --> 00:43:49,300 kommer til at være en matrix men en tom. 943 00:43:49,300 --> 00:43:51,860 Og som en sidebemærkning, ekstrakt bare gør noget funky 944 00:43:51,860 --> 00:43:56,380 hvor det tager alle de nøgler fra dette associative array, alle de ting 945 00:43:56,380 --> 00:43:59,950 du kan sætte i firkantede parenteser, og skaber variabler ud af dem 946 00:43:59,950 --> 00:44:06,270 således at vi i sidste ende kan få adgang til dem i footet.php og header.php. 947 00:44:06,270 --> 00:44:08,950 Det er lidt abstrakt, så lad mig opmærksom på dette. 948 00:44:08,950 --> 00:44:12,990 >> I index.php, bemærke, at jeg er passerer i en central værdi par titel 949 00:44:12,990 --> 00:44:14,850 med en værdi på CS50. 950 00:44:14,850 --> 00:44:18,660 Hvis jeg nu ser på helpers.php, bemærke, at RenderHeader 951 00:44:18,660 --> 00:44:23,870 er at udtrække, at data, som jeg passerer i, og derefter kræver header.php. 952 00:44:23,870 --> 00:44:27,970 Hvad jeg har gjort er sortering af en fattig mands gennemførelsen nu af følgende. 953 00:44:27,970 --> 00:44:31,720 >> Hvis jeg åbner header.php, meddelelse om, at jeg har ikke længere hårdt 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 lagt dette ganske vist atrociously navngivne funktion, HTML særlige chars, 956 00:44:39,310 --> 00:44:40,170 derinde. 957 00:44:40,170 --> 00:44:41,640 Men bemærk, hvad jeg har gjort. 958 00:44:41,640 --> 00:44:44,240 Jeg har åben HTML. 959 00:44:44,240 --> 00:44:47,420 Jeg har derefter åbent hoved og åben titel. 960 00:44:47,420 --> 00:44:52,380 >> Og derefter inde i titlen åbne og tætte tags, jeg har lidt af PHP kode. 961 00:44:52,380 --> 00:44:56,670 Og dette er et rart, men af ​​syntaks, hvilket betyder bare echo ud. 962 00:44:56,670 --> 00:44:59,840 Det betyder bogstaveligt denne-- echo following-- 963 00:44:59,840 --> 00:45:01,910 men dette er sexier at skrive. 964 00:45:01,910 --> 00:45:05,000 Echo ud titlen der er blevet vedtaget i. 965 00:45:05,000 --> 00:45:07,560 >> Men hvad tror du HTML særlig char handler om, 966 00:45:07,560 --> 00:45:10,590 især hvis du har nogle forudgående HTML oplevelse? 967 00:45:10,590 --> 00:45:14,050 Hvilke tegn kan være farligt at passere ind 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 Lad mig gå til denne fil version to, og se om jeg ikke kan fremkalde dette. 971 00:45:24,650 --> 00:45:26,210 >> Version to er dette. 972 00:45:26,210 --> 00:45:28,510 Og læg mærke til alt er fint, fungerer godt. 973 00:45:28,510 --> 00:45:35,280 Men formoder jeg går ind i index.php og Jeg præciserede, at titlen på min side 974 00:45:35,280 --> 00:45:36,630 er ikke CS50. 975 00:45:36,630 --> 00:45:44,930 Det er åbent beslag script alert hej verden tæt enkelt citat, 976 00:45:44,930 --> 00:45:49,740 tæt parentes, semikolon, åbneparentes, skråstreg script. 977 00:45:49,740 --> 00:45:51,897 >> Script, som vi får til sidst ser, er et tag 978 00:45:51,897 --> 00:45:54,480 som du kan bruge til at bruge en anden programmeringssprog kaldet 979 00:45:54,480 --> 00:45:56,330 JavaScript indersiden af ​​en webside. 980 00:45:56,330 --> 00:45:57,960 Og nu mærke logikken her. 981 00:45:57,960 --> 00:45:59,840 Her er en nøgle kaldet titel. 982 00:45:59,840 --> 00:46:02,690 Her er det er vanvittigt lang værdi nu. 983 00:46:02,690 --> 00:46:07,840 >> Men hvis jeg går til hjælperne side- eller rettere, forside, 984 00:46:07,840 --> 00:46:11,310 Jeg ringer denne funktion på denne titel først. 985 00:46:11,310 --> 00:46:15,250 Så hvis jeg nu genindlæse denne side, jeg se dette, som ser latterligt, 986 00:46:15,250 --> 00:46:16,110 men det er sikkert. 987 00:46:16,110 --> 00:46:17,310 Det ser bare dumt. 988 00:46:17,310 --> 00:46:20,320 >> Men formoder i stedet Jeg havde glemt dette. 989 00:46:20,320 --> 00:46:24,660 Og markere mine ord, en ikke-nul nummer af jer vil glemmer at gøre dette 990 00:46:24,660 --> 00:46:27,790 og du får nogle flittige studerende eller ven kommer op 991 00:46:27,790 --> 00:46:31,540 til dig på CS50 messen eller anonymt natten rode rundt på din hjemmeside 992 00:46:31,540 --> 00:46:35,300 og hovedsagelig indsprøjte kode ukendt for dig i dit websted 993 00:46:35,300 --> 00:46:35,800 eller anden måde. 994 00:46:35,800 --> 00:46:39,000 >> Fordi hvis jeg bare spytte ud titel her og titel 995 00:46:39,000 --> 00:46:44,330 there-- godt, hvis titel bogstaveligt ser sådan her ud og PHP 996 00:46:44,330 --> 00:46:47,660 som et sprog, der kan spytte ud andre sprog tekst, 997 00:46:47,660 --> 00:46:50,650 dette bogstaveligt talt går at erstatte dette tag med 998 00:46:50,650 --> 00:46:53,010 selvfølgelig, hvad jeg sætter andetsteds. 999 00:46:53,010 --> 00:46:57,640 >> Så hvis jeg nu gå her og genindlæse efter løsne disse sikkerhedsmekanismer, 1000 00:46:57,640 --> 00:46:59,982 nu har jeg hej verden her. 1001 00:46:59,982 --> 00:47:02,690 Nu det er ikke alt så stor en deal, men du kunne gøre noget 1002 00:47:02,690 --> 00:47:05,119 lidt mere ondsindet her, ligesom der er 1003 00:47:05,119 --> 00:47:08,410 andre tags-- som vi skal se, når vi bruger mere tid i JavaScript-- ligesom placering 1004 00:47:08,410 --> 00:47:14,910 dot href bliver, citat, citat slut, HTTP business.com, men det modsatte af det 1005 00:47:14,910 --> 00:47:15,950 fra den anden dag. 1006 00:47:15,950 --> 00:47:20,120 Og nu kan du fremkalde en web side faktisk gå straks 1007 00:47:20,120 --> 00:47:21,190 til denne webside her. 1008 00:47:21,190 --> 00:47:23,000 >> Og faktisk vil jeg ikke til selv at gå til business.com 1009 00:47:23,000 --> 00:47:24,749 fordi jeg ikke vil at vide, hvad det er. 1010 00:47:24,749 --> 00:47:28,710 Men også dette vil udløse kode skal injiceres i denne side. 1011 00:47:28,710 --> 00:47:32,680 Så dette er kun at sige, at selvom vi introducerer super tidligt på nogle 1012 00:47:32,680 --> 00:47:36,800 af disse mere komplekse strukturer, det er alle mod en ende af at sikre 1013 00:47:36,800 --> 00:47:39,320 at din kode er ikke udnyttes. 1014 00:47:39,320 --> 00:47:40,960 >> Så nu er en tredje version her. 1015 00:47:40,960 --> 00:47:42,470 Det bliver en smule mere avanceret. 1016 00:47:42,470 --> 00:47:44,875 Jeg har ikke rigtig like-- anal side af mig 1017 00:47:44,875 --> 00:47:47,750 fik lidt irriteret over faktum, at jeg havde en funktion kaldet 1018 00:47:47,750 --> 00:47:51,940 RenderHeader og RenderFooter der var næsten identiske. 1019 00:47:51,940 --> 00:47:55,400 Så det forekom mig, hvorfor ikke Jeg parameterisere disse funktioner 1020 00:47:55,400 --> 00:47:59,180 i kun ét kaldet gøre, har det tage et andet argument 1021 00:47:59,180 --> 00:48:04,420 som navnet på den skabelon, den endelige at render-- enten sidehoved eller sidefod? 1022 00:48:04,420 --> 00:48:07,160 Og derefter eventuelt hvis jeg vil at passere i nogle Nøgleværdiparrene 1023 00:48:07,160 --> 00:48:10,580 ligesom jeg gør til titlen for header men ikke for den sidefod, 1024 00:48:10,580 --> 00:48:11,800 Jeg kunne gøre det. 1025 00:48:11,800 --> 00:48:16,510 >> Og så nu, hvis jeg går ind i helpers.php, det er lidt mere kompliceret. 1026 00:48:16,510 --> 00:48:19,670 Og jeg vil vinke mine hænder på det detaljer, men det er bare én funktion. 1027 00:48:19,670 --> 00:48:21,890 Så det er et skridt mod en bedre design. 1028 00:48:21,890 --> 00:48:23,360 >> Vi kan tage det et skridt videre. 1029 00:48:23,360 --> 00:48:28,890 Hvis jeg går ind i mit fjerde version af denne, bemærker nu 1030 00:48:28,890 --> 00:48:31,320 at jeg gør noget endnu mere slags kryptiske. 1031 00:48:31,320 --> 00:48:33,230 Og jeg ved, at dette er en masse til at absorbere på én gang, 1032 00:48:33,230 --> 00:48:35,080 men vi er bare lidt til rensning af tingene op. 1033 00:48:35,080 --> 00:48:38,550 Nu er jeg sætte mine hjælpere fil i en mappe kaldet 1034 00:48:38,550 --> 00:48:41,190 includes-- bare en vilkårlig navn, hvor jeg ønsker at sætte ting 1035 00:48:41,190 --> 00:48:44,300 at jeg ønsker at include-- og derefter resten af ​​denne er den samme. 1036 00:48:44,300 --> 00:48:47,140 >> Men hvis jeg ser nu i gedit, meddelelse om, at jeg har fået fjernet 1037 00:48:47,140 --> 00:48:51,940 af alle de andre filer, og jeg har flyttede dem, for eksempel ind på her. 1038 00:48:51,940 --> 00:48:55,110 Og derefter i skabeloner, Jeg har denne her også. 1039 00:48:55,110 --> 00:48:59,292 Og så alt dette er nu i retning af et trin til anvendelse af en meget bedre design mønster. 1040 00:48:59,292 --> 00:49:01,000 Og vi er meget hurtigt kommer til at bevæge sig væk 1041 00:49:01,000 --> 00:49:03,870 fra PHP standard funktionalitet, som vi startede her med, 1042 00:49:03,870 --> 00:49:07,655 hvor du bare blande PHP, og din HTML og CSS, 1043 00:49:07,655 --> 00:49:09,780 og du bare spytte det ud og du går om din måde. 1044 00:49:09,780 --> 00:49:11,404 Det kommer ikke til at være meget vedligeholdes. 1045 00:49:11,404 --> 00:49:14,481 Ligesom i C, begyndte vi at bruge flere filer og flere funktioner 1046 00:49:14,481 --> 00:49:15,730 og factoring ting ud af det. 1047 00:49:15,730 --> 00:49:16,688 Vi vil gøre det samme her. 1048 00:49:16,688 --> 00:49:19,970 Og i virkeligheden, i den femte og sidste version her, gjorde jeg en anden ting. 1049 00:49:19,970 --> 00:49:23,710 Du kan endda bruge dot dot, som, igen, er bare det overordnede bibliotek. 1050 00:49:23,710 --> 00:49:28,260 At være endnu mere sikkerhed bevidst, fordi hvis jeg ser på den lyttende 1051 00:49:28,260 --> 00:49:32,450 her for femte og sidste udgave, varsel at jeg har en mappe her kaldet 1052 00:49:32,450 --> 00:49:35,180 offentligheden, og derefter på samme niveau, så at sige, 1053 00:49:35,180 --> 00:49:38,490 I got omfatter og skabeloner og derefter at tekstfil readme. 1054 00:49:38,490 --> 00:49:41,130 >> Og grunden til at jeg har opbygget det gerne denne-- og så mange web 1055 00:49:41,130 --> 00:49:44,330 værter, især dem $ 5 måned dem eller $ 10 måneder dem, 1056 00:49:44,330 --> 00:49:47,170 hvis du nogensinde har haft en af ​​disse services-- hvad så mange af dem gør 1057 00:49:47,170 --> 00:49:50,690 er de forventer bare dig til at dumpe alle af dine filer til en mappe, 1058 00:49:50,690 --> 00:49:53,640 ligesom vi gjorde allerede med dette første eksempel. 1059 00:49:53,640 --> 00:49:56,740 >> Men så snart du begynder at opbygge mere avancerede hjemmesider, der bare gemmer 1060 00:49:56,740 --> 00:50:00,480 data, du interesserer og filer, du bekymrer sig om, rent faktisk at organisere tingene 1061 00:50:00,480 --> 00:50:05,060 korrekt og med mere sikkerhed bevidsthed i sindet kan 1062 00:50:05,060 --> 00:50:07,927 vi begynder at forsvare mod alle de venner 1063 00:50:07,927 --> 00:50:10,135 at du enten har eller uden for denne klasse, der, 1064 00:50:10,135 --> 00:50:12,510 så snart du begynder at gøre programmer dig selv på internettet, 1065 00:50:12,510 --> 00:50:15,140 vil begynde at plukke på dig og på dem. 1066 00:50:15,140 --> 00:50:17,420 >> Og så vil vi se i sidste ende på dette motiv. 1067 00:50:17,420 --> 00:50:20,010 Dette er blot et billede der afbilder det følgende. 1068 00:50:20,010 --> 00:50:22,897 Vi kommer til at sætte alle vores programmering logik i en eller flere filer, 1069 00:50:22,897 --> 00:50:25,230 og vi vil bare begynde kalde disse controllere. 1070 00:50:25,230 --> 00:50:28,022 Det er, hvor hjerner vores hjemmesider rent faktisk er. 1071 00:50:28,022 --> 00:50:29,730 Så vi kommer til at har udsigt, og udsigt 1072 00:50:29,730 --> 00:50:32,480 er så simpelt som bare særskilt files-- kaldet skabeloner, ofte. 1073 00:50:32,480 --> 00:50:34,410 De har bare æstetik min side, 1074 00:50:34,410 --> 00:50:37,020 hvad jeg ønsker, at siden til at se like-- farver og layout 1075 00:50:37,020 --> 00:50:38,870 og positioner alle variablerne. 1076 00:50:38,870 --> 00:50:41,120 >> Og så mere interessant at vi i sidste ende vil komme til at 1077 00:50:41,120 --> 00:50:45,420 er den model, som kommer til at være lige Ordet vi slap på andre teknologier 1078 00:50:45,420 --> 00:50:47,771 at vi sætter ind i billede, ligesom faktiske databaser, 1079 00:50:47,771 --> 00:50:49,520 så når du ønsker at gemme information, 1080 00:50:49,520 --> 00:50:52,140 du ikke bare sende en e-mail til din proctor eller til dig selv, 1081 00:50:52,140 --> 00:50:57,350 du faktisk gemme det i en database ved hjælp af et andet sprog er kendt som SQL. 1082 00:50:57,350 --> 00:51:00,450 Og så vi vil forlade her i dag, og afhente med dette på onsdag 1083 00:51:00,450 --> 00:51:02,990 og indføre databaser derefter. 1084 00:51:02,990 --> 00:51:06,940 >> [Musikken afspilles] 1085 00:51:06,940 --> 00:54:24,555