1 00:00:00,000 --> 00:00:03,920 >> [Muziek] 2 00:00:03,920 --> 00:00:11,760 3 00:00:11,760 --> 00:00:13,800 >> DAVID J. MALAN: Oké. 4 00:00:13,800 --> 00:00:15,640 Dit is CS50. 5 00:00:15,640 --> 00:00:17,620 Dit is het begin van week acht. 6 00:00:17,620 --> 00:00:22,440 En u herinnert zich misschien dat we gebleven laatste keer op zoek naar een nieuwe taal 7 00:00:22,440 --> 00:00:23,240 helemaal. 8 00:00:23,240 --> 00:00:25,905 In feite, een die vrij lichtgewicht en het is niet eens 9 00:00:25,905 --> 00:00:26,940 een programmeertaal. 10 00:00:26,940 --> 00:00:31,100 Het is een opmaaktaal die ons laat daadwerkelijk structureren en maken van webpagina's. 11 00:00:31,100 --> 00:00:33,350 En als je iets anders in combinatie met dit-- 12 00:00:33,350 --> 00:00:35,670 of binnenkort zal, indien je nog niet hebt. 13 00:00:35,670 --> 00:00:38,530 We gaan Cascading gebruiken Style Sheets of CSS, welke 14 00:00:38,530 --> 00:00:40,971 is een ander soort taal met eigenschappen en waarden 15 00:00:40,971 --> 00:00:43,220 dat gaat ons te laten doen dingen willen veranderen van de kleur 16 00:00:43,220 --> 00:00:46,010 en verander de positie en dit soort tweaks. 17 00:00:46,010 --> 00:00:49,940 Maar vandaag en verder, beginnen we te focus op krachtiger talen, 18 00:00:49,940 --> 00:00:52,810 werkelijke programmeertalen zoals PHP. 19 00:00:52,810 --> 00:00:54,880 >> Dus PHP is al enige tijd. 20 00:00:54,880 --> 00:00:56,810 En zoals u zult zien, het werd in eerste instantie ontworpen 21 00:00:56,810 --> 00:01:00,280 vroeg voor daadwerkelijke gebruiken in web development 22 00:01:00,280 --> 00:01:02,360 en eigenlijk het genereren van webpagina's. 23 00:01:02,360 --> 00:01:04,849 Dus wat voor soort functies doet een taal 24 00:01:04,849 --> 00:01:10,040 nodig hebben om web maken pagina's dynamisch met het? 25 00:01:10,040 --> 00:01:14,760 >> Met andere woorden, als u wilt genereren inhoud dynamically-- zoals Facebook's 26 00:01:14,760 --> 00:01:19,480 Newsfeed, die voortdurend verandert, of chatberichten die opduiken uit de tijd 27 00:01:19,480 --> 00:01:21,872 om tijd-- zoals wat is het belangrijk stuk van de functionaliteit 28 00:01:21,872 --> 00:01:24,580 je nodig hebt in een programmeertaal dat zou je dynamisch laten 29 00:01:24,580 --> 00:01:28,070 afdrukken nieuwe informatie aan het scherm? 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 We nemen dat. 34 00:01:31,995 --> 00:01:35,310 Een beetje nauwkeuriger. 35 00:01:35,310 --> 00:01:37,639 Ik bedoel, we konden doen dit met C, eerlijk gezegd. 36 00:01:37,639 --> 00:01:38,930 Het zou een pijn in de nek. 37 00:01:38,930 --> 00:01:41,045 Maar-- is dit engagement? 38 00:01:41,045 --> 00:01:41,895 >> STUDENT: Ja. 39 00:01:41,895 --> 00:01:42,677 Variabelen, misschien? 40 00:01:42,677 --> 00:01:43,760 DAVID J. MALAN: Variabelen. 41 00:01:43,760 --> 00:01:44,160 OK, zeker. 42 00:01:44,160 --> 00:01:45,740 Variabelen kunnen zeker helpen ons uit. 43 00:01:45,740 --> 00:01:47,020 En zelfs iets eenvoudiger. 44 00:01:47,020 --> 00:01:50,640 We gebruikten het in de eerste programma van de eerste dag 45 00:01:50,640 --> 00:01:55,686 toen we eigenlijk zei "hallo wereld". 46 00:01:55,686 --> 00:01:56,570 >> STUDENT: Print. 47 00:01:56,570 --> 00:01:57,778 >> DAVID J. MALAN: Print, toch? 48 00:01:57,778 --> 00:02:01,050 Print of printf in de wereld van C. Dus al die tijd, 49 00:02:01,050 --> 00:02:03,362 we bij hebben gehad onze beschikking over een language-- C, 50 00:02:03,362 --> 00:02:05,570 in particular-- en zelfs Scratch dat betreft dat 51 00:02:05,570 --> 00:02:07,400 kunnen strings van tekst te genereren. 52 00:02:07,400 --> 00:02:11,090 >> Nou, als HTML, zoals we zagen vorige week, is gewoon een hele hoop van de snaren van de tekst 53 00:02:11,090 --> 00:02:14,692 zij het met open beugels en gesloten beugels en een soort van rijm 54 00:02:14,692 --> 00:02:16,650 en reden achter de rug, nou dan kunnen we echt 55 00:02:16,650 --> 00:02:20,440 beginnen met het genereren van webpagina's ofwel handmatig door te typen ze in gedit 56 00:02:20,440 --> 00:02:23,870 of in Microsoft Word, voor dat matter-- we hoeven alleen maar een tekstverwerker. 57 00:02:23,870 --> 00:02:26,830 >> Of we kunnen de code te schrijven, uw suggestie 58 00:02:26,830 --> 00:02:30,435 eerder, dat zou ons laten dynamisch genereren van HTML, 59 00:02:30,435 --> 00:02:32,560 en dat is wat we gaan te gaan doen met PHP 60 00:02:32,560 --> 00:02:34,900 en uiteindelijk zelfs een taal genaamd JavaScript, 61 00:02:34,900 --> 00:02:37,910 is gebruik maken van een taal naar de andere te genereren. 62 00:02:37,910 --> 00:02:40,720 En inderdaad, dit is wat Facebook en vele, vele andere sites 63 00:02:40,720 --> 00:02:44,530 doen om daadwerkelijk dynamisch weer nieuwe informatie voor je. 64 00:02:44,530 --> 00:02:47,117 >> Dus laten we beginnen met dit-- een cryptisch op zoek lijn, maar één 65 00:02:47,117 --> 00:02:48,450 dat is eigenlijk vrij krachtig. 66 00:02:48,450 --> 00:02:51,210 Tot nu toe, hebben we met behulp van C, dat is een gecompileerde taal. 67 00:02:51,210 --> 00:02:55,050 En gewoon een snelle recap-- een gecompileerde taal heeft wat karakteristiek? 68 00:02:55,050 --> 00:02:59,050 Je moet uiteraard te compileren het, maar wat betekent dat? 69 00:02:59,050 --> 00:03:00,505 Yeah? 70 00:03:00,505 --> 00:03:02,940 >> STUDENT: Het moet geassembleerd in machinecode. 71 00:03:02,940 --> 00:03:03,060 >> DAVID J. MALAN: OK. 72 00:03:03,060 --> 00:03:04,530 Het moet worden geassembleerd in machine code. 73 00:03:04,530 --> 00:03:07,340 Zodat u uw broncode te nemen, dat is een soort van het Engels-achtige. 74 00:03:07,340 --> 00:03:09,270 Je zet dat om iets lager niveau, 75 00:03:09,270 --> 00:03:11,590 die uiteindelijk genoemd object code-- 0's en 1's. 76 00:03:11,590 --> 00:03:14,830 En het is de 0 en 1 dat een CPU, zoals die door Intel, 77 00:03:14,830 --> 00:03:16,110 echt begrijpen. 78 00:03:16,110 --> 00:03:19,690 >> Nu, PHP en Python en Ruby en JavaScript en trossen van andere 79 00:03:19,690 --> 00:03:23,190 talen worden niet gecompileerd talen maar geïnterpreteerde talen, 80 00:03:23,190 --> 00:03:26,630 wat betekent dat je gewoon typt ze en dan je hoeft ze niet om te zetten in 0's en 1's. 81 00:03:26,630 --> 00:03:30,790 Je plaats leveren alleen dan als input voor het programma van iemand anders, 82 00:03:30,790 --> 00:03:32,080 riep een tolk. 83 00:03:32,080 --> 00:03:34,460 En van die persoon programma is ontworpen 84 00:03:34,460 --> 00:03:38,280 om te begrijpen wat elk en elk symbool in Python of PHP 85 00:03:38,280 --> 00:03:42,650 of Ruby of een aantal andere talen betekent. 86 00:03:42,650 --> 00:03:44,760 >> En dus alles wat we nodig hebben is iets als dit. 87 00:03:44,760 --> 00:03:46,350 Dus in feite, ik ga naar ga naar het toestel 88 00:03:46,350 --> 00:03:48,100 hier, maar in elk oude venster, en we zijn 89 00:03:48,100 --> 00:03:52,580 ga je gang en geopend gaan een bestand genaamd, zeggen hallo. 90 00:03:52,580 --> 00:03:55,780 Nu eerder, ik had kunnen redden dit zelfs met een bestandsextensie, 91 00:03:55,780 --> 00:03:57,910 maar ik ga doen iets wat hier nog eenvoudiger. 92 00:03:57,910 --> 00:04:02,450 Ik ga om te gaan en te beginnen dit bestand met deze cryptische syntax. 93 00:04:02,450 --> 00:04:06,310 Dus "gebruiker, bin, env, voor milieu, php. " 94 00:04:06,310 --> 00:04:10,670 >> Dit is gewoon een regel code die ga mijn besturingssysteem te vertellen, 95 00:04:10,670 --> 00:04:13,730 gaan zoeken in uw lokale milieu wat dat ook is, 96 00:04:13,730 --> 00:04:18,149 waar PHP is-- de interpreter-- en ga je gang en gebruik dat tolk 97 00:04:18,149 --> 00:04:20,589 om de volgende code te interpreteren. 98 00:04:20,589 --> 00:04:22,760 Nu, dit is een soort van een lelijke eigenschap van PHP. 99 00:04:22,760 --> 00:04:24,980 Maar in deze taal eventuele keer je schrijft PHP code, 100 00:04:24,980 --> 00:04:29,200 je nodig hebt om een ​​van deze lelijke hebben PHP-tags afbakenen van het begin 101 00:04:29,200 --> 00:04:32,220 van uw code-- 00:04:37,430 >> Maar hieronder hier, ik kan nu iets doen heel simpel, zoals printf hallo komma 103 00:04:37,430 --> 00:04:40,922 wereld backslash n dicht citaat, haakje sluiten. 104 00:04:40,922 --> 00:04:42,630 En dan gewoon voor een goede maatregel, ik ga 105 00:04:42,630 --> 00:04:45,380 om vooruit en dicht gaan mijn php tag over hier 106 00:04:45,380 --> 00:04:47,390 zodat alles looks mooi mooi afgedrukt. 107 00:04:47,390 --> 00:04:50,780 >> En zodra ik klik op Opslaan, gedit is eigenlijk slim genoeg 108 00:04:50,780 --> 00:04:54,620 om te kijken naar die eerste lijn en realiseren, oh, je bent het schrijven van PHP code. 109 00:04:54,620 --> 00:04:56,710 Laat me syntax highlight met de kleuren 110 00:04:56,710 --> 00:04:58,690 hier zodat deze rechtop staat een beetje meer. 111 00:04:58,690 --> 00:05:01,300 Maar nu ga ik om te gaan naar mijn terminal venster. 112 00:05:01,300 --> 00:05:02,340 Ik zal in te zoomen. 113 00:05:02,340 --> 00:05:06,860 >> Dit programma heette "hallo" dus ik ga naar dot slash doen hallo, 114 00:05:06,860 --> 00:05:07,990 maar ontkende toestemming. 115 00:05:07,990 --> 00:05:08,490 En bash. 116 00:05:08,490 --> 00:05:10,610 We eigenlijk gehoord van dat ding een paar weken geleden 117 00:05:10,610 --> 00:05:13,140 in het kader van Shellshock, een van deze insecten. 118 00:05:13,140 --> 00:05:16,240 >> Maar ontkende toestemming die we hebben gezien vóór, misschien in een andere context. 119 00:05:16,240 --> 00:05:19,060 Heeft iemand herinneren hoe u misschien iets te repareren 120 00:05:19,060 --> 00:05:22,100 waarbij toestemming wordt geweigerd als dit? 121 00:05:22,100 --> 00:05:23,490 Wat is de opdracht, althans? 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, voor het veranderen van de modus van een bestand. 124 00:05:26,700 --> 00:05:30,171 En je krijgt des te meer gebruikt om deze volgende week met een volgend probleem 125 00:05:30,171 --> 00:05:30,670 set. 126 00:05:30,670 --> 00:05:33,211 Maar voor nu, ik ga veranderen de modus niet om leesbaar te zijn, 127 00:05:33,211 --> 00:05:36,650 maar om iedereen executeability geven privileges, de mogelijkheid 128 00:05:36,650 --> 00:05:37,710 om dit bestand uit te voeren. 129 00:05:37,710 --> 00:05:40,360 En ik ga toewijzen dat het bestand hallo. 130 00:05:40,360 --> 00:05:45,150 >> Als ik nu dot slash hallo invoeren, moet u zien, in feite, mijn programma, hallo wereld. 131 00:05:45,150 --> 00:05:48,760 En wat stap deed ik duidelijk helemaal overslaan? 132 00:05:48,760 --> 00:05:49,520 Compileren. 133 00:05:49,520 --> 00:05:51,680 Dus ik liep gewoon dit programma heel eenvoudig. 134 00:05:51,680 --> 00:05:55,690 >> En het blijkt dat je kunt dit doen met veel syntax doet denken aan C. 135 00:05:55,690 --> 00:06:03,400 Laat me gaan in op de huidige code, die ik in mijn vhost directory 136 00:06:03,400 --> 00:06:05,250 hier, voor de echte redenen we komen zeker terug te komen. 137 00:06:05,250 --> 00:06:09,350 En ik ga in te gaan, laten we zeggen, de voorwaarden 1. 138 00:06:09,350 --> 00:06:12,450 >> En je zult zien hier, eerste en vooral, een hele hoop reacties. 139 00:06:12,450 --> 00:06:15,240 Maar dit is eigenlijk een re-creatie in PHP 140 00:06:15,240 --> 00:06:18,960 van een programma dat we in week een zogenaamde voorwaarden 1.c 141 00:06:18,960 --> 00:06:20,690 wanneer het doel leven van dit programma 142 00:06:20,690 --> 00:06:22,950 is blijkbaar te vragen de gebruiker een integer 143 00:06:22,950 --> 00:06:25,270 en dan doen sommige pluizige analyse op waarbij 144 00:06:25,270 --> 00:06:29,510 je zegt als het positief of negatief of nul is. 145 00:06:29,510 --> 00:06:34,220 En ik breng dit alleen maar omdat, behalve misschien een klein detail, 146 00:06:34,220 --> 00:06:37,150 het onderscheiden zo ver van C. 147 00:06:37,150 --> 00:06:39,930 >> Wat is het een karakteristieke hier dat misschien springt uit 148 00:06:39,930 --> 00:06:41,410 op je af als een beetje anders? 149 00:06:41,410 --> 00:06:42,160 Misschien twee dingen. 150 00:06:42,160 --> 00:06:42,660 Yeah? 151 00:06:42,660 --> 00:06:44,070 >> STUDENT: Dollar teken n? 152 00:06:44,070 --> 00:06:44,944 >> DAVID J. MALAN: Yeah. 153 00:06:44,944 --> 00:06:46,210 Dus dollarteken n is aanwezig. 154 00:06:46,210 --> 00:06:48,120 En dollartekens, als we zullen zien, gaan 155 00:06:48,120 --> 00:06:51,460 om een ​​fix aan het begin te zijn van een variabele in PHP. 156 00:06:51,460 --> 00:06:54,250 Het is zowel goed als bad-- goed in dat is het soort van duidelijk wat er 157 00:06:54,250 --> 00:06:56,797 een variabele slecht dat het nog een ander ding om te typen. 158 00:06:56,797 --> 00:06:58,630 En er is een andere ding hebben we niet helemaal 159 00:06:58,630 --> 00:07:00,876 gezien, althans door deze spelling. 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 zagen we niet per se in C, hoewel er iets bestaat 163 00:07:06,550 --> 00:07:09,530 vergelijkbaar, maar we hebben gebruikt getString, en dit is zijn tegenhanger. 164 00:07:09,530 --> 00:07:12,950 Dus als ik in dit directory, dat gebeurt te zijn, 165 00:07:12,950 --> 00:07:18,030 zoals ik zal uitleggen in een beetje in mijn vhost directory en mijn bron Een directory, 166 00:07:18,030 --> 00:07:22,730 en ik ga je gang en doe dot slash conditions-- whoops-- dot slash 167 00:07:22,730 --> 00:07:26,710 voorwaarden 1, zie je, opnieuw, dezelfde Issue-- toestemming geweigerd. 168 00:07:26,710 --> 00:07:33,610 >> Dus laat me in te zoomen en doe chmod een plus x op de voorwaarden, dot slash voorwaarden. 169 00:07:33,610 --> 00:07:35,222 Ik wil graag een geheel getal, dan kunt u, 50. 170 00:07:35,222 --> 00:07:36,930 En we konden deze spelen spel de hele dag lang. 171 00:07:36,930 --> 00:07:39,140 Het gaat om precies te gedragen zoals zij heeft gedaan in week één. 172 00:07:39,140 --> 00:07:42,860 >> OK dus niet veel anders, behalve niet alleen dat kleine beetje van syntax, 173 00:07:42,860 --> 00:07:45,490 maar boven, opnieuw I had deze lijn die 174 00:07:45,490 --> 00:07:49,760 stond me toe om iets te creëren dat ziet eruit als een C-programma genaamd hallo, 175 00:07:49,760 --> 00:07:51,150 noemde voorwaarden 1. 176 00:07:51,150 --> 00:07:54,520 Maar het is niet 0 is en enen Ik ben direct uitvoeren. 177 00:07:54,520 --> 00:07:57,620 Het is deze plaats loopt tolk wiens naam 178 00:07:57,620 --> 00:07:59,440 gebeurt identiek aan de taal te zijn. 179 00:07:59,440 --> 00:08:04,970 Het programma heet PHP, en mijn code lijn hieronder een wordt doorgegeven in. 180 00:08:04,970 --> 00:08:07,740 >> We kunnen nog een vrij eenvoudig te doen bijvoorbeeld denken aan iets 181 00:08:07,740 --> 00:08:09,240 we deden weken geleden. 182 00:08:09,240 --> 00:08:12,020 Nogmaals, dit is een soort willekeurige stuk code 183 00:08:12,020 --> 00:08:14,000 dat blijkbaar wat als je het uit te voeren? 184 00:08:14,000 --> 00:08:15,625 Wat is dit het ter perse gaan, vermoedelijk? 185 00:08:15,625 --> 00:08:23,540 186 00:08:23,540 --> 00:08:28,250 >> Dus in eerste instantie op lijn 16, het is gaan zeggen x is nu 2, waarschijnlijk. 187 00:08:28,250 --> 00:08:30,920 % D is gelijk aan $ i voor printf. 188 00:08:30,920 --> 00:08:33,460 Dus dan is het Cubing, dot, dot, dot, in lijn 17. 189 00:08:33,460 --> 00:08:36,299 En dan lijn 18 verschijnt een functie Cubed noemen. 190 00:08:36,299 --> 00:08:37,600 En waar is Cubed gedefinieerd? 191 00:08:37,600 --> 00:08:40,319 >> Nou, het lijkt erop dat in de lijn 25, dus dat is niet zo heel verschillend. 192 00:08:40,319 --> 00:08:42,610 Ik heb boven nog wat opmerkingen , maar voor het grootste deel, 193 00:08:42,610 --> 00:08:45,370 het is een vrij eenvoudig porting of conversie 194 00:08:45,370 --> 00:08:48,470 van het C programma de PHP versie. 195 00:08:48,470 --> 00:08:52,670 Maar er zijn nu een paar verschillen die misschien moeten springen. 196 00:08:52,670 --> 00:08:56,100 Wat is er anders aan de manier waarop u zou dit hetzelfde programma in C schrijven? 197 00:08:56,100 --> 00:08:57,900 >> STUDENT: [onverstaanbaar]. 198 00:08:57,900 --> 00:09:00,070 >> DAVID J. MALAN: Er is geen prototype up top. 199 00:09:00,070 --> 00:09:03,210 Dus PHP-- en eerlijk gezegd, een veel moderne languages-- 200 00:09:03,210 --> 00:09:06,920 zijn een stuk slimmer en behulpzaam dan C-compilers in dat u 201 00:09:06,920 --> 00:09:09,740 kan de functie hier opgemaakt, U kunt een functie neer zetten hier, 202 00:09:09,740 --> 00:09:12,740 en de tolk gaat om u te doen ten gunste van het lezen 203 00:09:12,740 --> 00:09:16,010 het hele bestand voordat hij een besluit dat een functie niet bestaat. 204 00:09:16,010 --> 00:09:17,970 Zo leuk verbeteringen jaar later. 205 00:09:17,970 --> 00:09:22,126 Maar er is ook iets anders anders of afwezig hier. 206 00:09:22,126 --> 00:09:22,626 Yeah? 207 00:09:22,626 --> 00:09:25,084 >> STUDENT: [onverstaanbaar]. 208 00:09:25,084 --> 00:09:27,750 DAVID J. MALAN: We hoeven niet te verklaren typen variabelen, 209 00:09:27,750 --> 00:09:31,780 dus we zullen het duurde niet lang, dat zien Er zijn verschillende types in PHP, 210 00:09:31,780 --> 00:09:34,970 maar je hoeft niet om ze op te geven, die ook is zowel goed als slecht. 211 00:09:34,970 --> 00:09:36,623 En er is nog iets ontbreekt. 212 00:09:36,623 --> 00:09:37,430 >> STUDENT: Er is geen bibliotheken. 213 00:09:37,430 --> 00:09:38,630 >> DAVID J. MALAN: Er is geen bibliotheken. 214 00:09:38,630 --> 00:09:39,350 OK, dus dat is mooi. 215 00:09:39,350 --> 00:09:40,540 We krijgen veel meer uit de doos. 216 00:09:40,540 --> 00:09:43,373 Dus er is eigenlijk nog veel meer dingen dan ik dacht waren anders. 217 00:09:43,373 --> 00:09:44,350 Wat dacht je weg in terug? 218 00:09:44,350 --> 00:09:46,032 Wat is dat? 219 00:09:46,032 --> 00:09:46,740 Zeg het eens? 220 00:09:46,740 --> 00:09:47,960 >> STUDENT: Pointer. 221 00:09:47,960 --> 00:09:49,270 >> DAVID J. MALAN: geen pointers. 222 00:09:49,270 --> 00:09:51,280 OK, althans in dit voorbeeld, geen. 223 00:09:51,280 --> 00:09:52,070 Dat is eerlijk. 224 00:09:52,070 --> 00:09:55,090 Er zijn dus geen aanwijzingen in PHP eigenlijk in het algemeen. 225 00:09:55,090 --> 00:09:58,730 Er zijn iets genaamd referenties, maar we zullen niet te veel tijd door te brengen. 226 00:09:58,730 --> 00:09:59,520 En wat nog meer? 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 Dus dit was de biggie Ik dacht aan. 230 00:10:02,768 --> 00:10:04,660 Merk op dat er geen belangrijkste toegangspoort. 231 00:10:04,660 --> 00:10:06,525 Je begint gewoon het schrijven van uw code. 232 00:10:06,525 --> 00:10:08,400 En dit is eigenlijk zal voordelig zijn 233 00:10:08,400 --> 00:10:10,560 wanneer we overgang kort om daadwerkelijk gebruik 234 00:10:10,560 --> 00:10:13,980 deze zelfde taal voor web-based programmering, waarvoor wij 235 00:10:13,980 --> 00:10:16,580 niet wilt maar een entry point hebben. 236 00:10:16,580 --> 00:10:19,980 We zouden willen een heleboel hebben URL's, een bos van verschillende bestanden 237 00:10:19,980 --> 00:10:22,930 alle te nemen in input van de gebruiker en het produceren van output. 238 00:10:22,930 --> 00:10:27,130 >> Maar hier is het zeer ontmoedigend Bijvoorbeeld dat ik beloofd heb de vorige keer, 239 00:10:27,130 --> 00:10:30,130 namelijk in deze map hier, spelfouten. 240 00:10:30,130 --> 00:10:33,680 Dus in dit bestand speller, die we zal niet te veel tijd op, er is 241 00:10:33,680 --> 00:10:37,870 wezen een porting-- P-O-R-T. Het is gewoon het woord gegeven wanneer, laten we zeggen, 242 00:10:37,870 --> 00:10:40,800 het converteren van de ene taal ander handmatig gewoonlijk. 243 00:10:40,800 --> 00:10:45,680 >> Dit is een porten van PC versie van speller uit PSET 5. 244 00:10:45,680 --> 00:10:48,856 En ik voornamelijk geprobeerd om te zetten het regel voor regel zo goed als ik kan. 245 00:10:48,856 --> 00:10:51,730 Dus als je van dit soort dingen, het eigenlijk waard is op een bepaald punt 246 00:10:51,730 --> 00:10:54,229 ze allebei aan kant door te trekken kant en zien wat is het zelfde 247 00:10:54,229 --> 00:10:55,230 en wat is er anders. 248 00:10:55,230 --> 00:10:57,510 Maar ze zijn pretty darn vergelijkbaar. 249 00:10:57,510 --> 00:11:00,110 Als je nog wat speller ook leek, 250 00:11:00,110 --> 00:11:02,110 ook al heb je dat niet deden hebben om dit bestand te wijzigen, 251 00:11:02,110 --> 00:11:04,860 het is vrij gelijkaardig structureel met slechts een paar 252 00:11:04,860 --> 00:11:06,200 van veranderingen hier en daar. 253 00:11:06,200 --> 00:11:10,140 >> Dus dit is alleen maar om te zeggen dat het is vrij eenvoudig te speller zetten 254 00:11:10,140 --> 00:11:12,000 van C naar PHP. 255 00:11:12,000 --> 00:11:15,390 Maar in woordenboek, er is iets wat zelfs nog dringender. 256 00:11:15,390 --> 00:11:19,270 Laat me ga je gang en maak mijn eigen dictionary.php bestand. 257 00:11:19,270 --> 00:11:24,010 Dus iets anders in dat we noemen het .php in plaats van .c. 258 00:11:24,010 --> 00:11:26,980 Want dit is een PHP-bestand, ik doen-- iets annoyingly-- hebben 259 00:11:26,980 --> 00:11:30,132 om het bestand mee te beginnen een php tag als dat. 260 00:11:30,132 --> 00:11:32,340 En ik ga om verder te gaan en definieer een paar functies. 261 00:11:32,340 --> 00:11:35,770 Functie genaamd controle, wat gaan nemen in een woord als voorheen. 262 00:11:35,770 --> 00:11:37,520 Maar dit argument gaan om een ​​dollar hebben 263 00:11:37,520 --> 00:11:39,840 tekenen omdat we, nogmaals, met behulp van PHP. 264 00:11:39,840 --> 00:11:42,350 Een andere functie van dictionary.c was load 265 00:11:42,350 --> 00:11:47,120 en het nam in de naam van een woordenboek, dus ik zal die functie klaar om te gaan krijgen. 266 00:11:47,120 --> 00:11:50,920 >> Een ander in dictionary.c was wat? 267 00:11:50,920 --> 00:11:54,580 Maat was een van de mooiste die, op Tenminste als je een aantal variabele rond gehouden. 268 00:11:54,580 --> 00:11:57,830 dus de grootte heeft om er maar een variabel rendement. 269 00:11:57,830 --> 00:11:59,090 En dan was er nog uitladen. 270 00:11:59,090 --> 00:12:02,830 >> Zo waren er deze vier functies in probleem set 5 271 00:12:02,830 --> 00:12:06,770 dat u voor de uitvoering met sommige data structuur of structuren. 272 00:12:06,770 --> 00:12:10,170 Dus ik beloofde dat in PHP, kunnen we verklaren 273 00:12:10,170 --> 00:12:14,490 een hash tabel, bijvoorbeeld, dat alles makkelijker. 274 00:12:14,490 --> 00:12:17,377 In feite, als ik wil dat een hash table, Ik ga gewoon om te gaan als dat 275 00:12:17,377 --> 00:12:18,460 en daar is mijn hash table. 276 00:12:18,460 --> 00:12:21,555 En dat is de nota, ontmoedigend, dat we gebleven waren op de vorige keer. 277 00:12:21,555 --> 00:12:23,930 En weet je wat, als ik wilde een variabele voor grootte, goed, 278 00:12:23,930 --> 00:12:25,867 dit is nog niet alles dat verschilt van C, 279 00:12:25,867 --> 00:12:27,450 maar ik ga om verder te gaan en dat te doen. 280 00:12:27,450 --> 00:12:28,630 En merk geen datatype. 281 00:12:28,630 --> 00:12:31,180 En ik kom later terug te gaan en eigenlijk hier nog wat opmerkingen. 282 00:12:31,180 --> 00:12:32,480 Maar hoe zit het met de belasting? 283 00:12:32,480 --> 00:12:35,780 >> Als dollarteken woordenboek is de naam van mijn dossier 284 00:12:35,780 --> 00:12:39,600 en ik eigenlijk wilt laden woorden in deze tabel nu, 285 00:12:39,600 --> 00:12:42,360 Ik kan eigenlijk doen iets vrij eenvoudig. 286 00:12:42,360 --> 00:12:44,880 Een-- en dit is minorly annoying-- in PHP, 287 00:12:44,880 --> 00:12:47,710 je moet naar binnen te specificeren van een functie als u 288 00:12:47,710 --> 00:12:51,060 wilt u toegang tot bepaalde globale variabele die buiten is gedefinieerd. 289 00:12:51,060 --> 00:12:53,530 >> Maar dat is niet bijzonder nu interessant. 290 00:12:53,530 --> 00:12:57,920 Wat interessanter is dit voor elk construeren die ik noemde vorige keer. 291 00:12:57,920 --> 00:13:01,880 En het blijkt dat PHP heeft een functie genaamd bestand waarvan het doel in het leven 292 00:13:01,880 --> 00:13:05,550 is om een ​​bestand te openen en te lezen in al zijn lijnen in een array 293 00:13:05,550 --> 00:13:06,840 en mee teruggeven. 294 00:13:06,840 --> 00:13:12,170 >> Dat wil zeggen dat ik kan woordenboek doen dat nu effectief als ik bel file, 295 00:13:12,170 --> 00:13:15,472 dit gaat om me terug te geven een reeks van woorden uit het bestand. 296 00:13:15,472 --> 00:13:16,430 Het is niet allemaal zo goed. 297 00:13:16,430 --> 00:13:20,130 Het is nog steeds gaat om een ​​lijn te zijn woorden, iets lineair. 298 00:13:20,130 --> 00:13:23,880 Maar ik kan verder gaan en herhalen meer dan elk van deze woorden met behulp van 299 00:13:23,880 --> 00:13:25,710 dat syntax zagen we kort de vorige keer. 300 00:13:25,710 --> 00:13:27,940 En je zult het zien meer in de komende PSET. 301 00:13:27,940 --> 00:13:32,070 >> Maar nu heb ik een lus iteratie meer dan elk woord in het woordenboek. 302 00:13:32,070 --> 00:13:36,100 En op elke iteratie, herinner ik ben bellen naar het huidige woord "woord." 303 00:13:36,100 --> 00:13:39,790 En alles wat het gaat nemen om legde een woord in het woordenboek is 304 00:13:39,790 --> 00:13:43,530 gaat woord gok "waar is." 305 00:13:43,530 --> 00:13:44,740 Dat is mijn insert functie. 306 00:13:44,740 --> 00:13:46,661 Dat is mijn load-functie voor mijn woordenboek. 307 00:13:46,661 --> 00:13:49,410 Nu is het een beetje een cheat, omdat, weet je wat, er is eigenlijk 308 00:13:49,410 --> 00:13:52,920 backslash n bij het einde van de woorden dat ik waarschijnlijk zou moeten ontdoen van, 309 00:13:52,920 --> 00:13:56,380 maar dat is geen probleem omdat PHP heeft een functie genaamd Chop die letterlijk 310 00:13:56,380 --> 00:13:58,480 hakt één personage helemaal aan het eind. 311 00:13:58,480 --> 00:13:59,400 Dus geen probleem. 312 00:13:59,400 --> 00:14:02,199 We hebben je gang en eigenlijk gegaan verkort, dat om alleen deze. 313 00:14:02,199 --> 00:14:05,240 En nu moet ik waarschijnlijk bijhouden van grootte, dus laten we dit-- tenminste doen 314 00:14:05,240 --> 00:14:05,835 grootte ++. 315 00:14:05,835 --> 00:14:07,339 Ik kan dat doen als voorheen. 316 00:14:07,339 --> 00:14:10,380 En dan is dit waarschijnlijk gaat om werken prima, zodat de return true. 317 00:14:10,380 --> 00:14:10,930 Gedaan. 318 00:14:10,930 --> 00:14:11,797 PSET 5. 319 00:14:11,797 --> 00:14:13,545 >> [Lachen] 320 00:14:13,545 --> 00:14:14,420 >> DAVID J. MALAN: OK. 321 00:14:14,420 --> 00:14:16,628 We gaan dat opnieuw doen met de volgende PSET, ook. 322 00:14:16,628 --> 00:14:18,730 Dus hoe zit het met de grootte? 323 00:14:18,730 --> 00:14:22,080 Nou, dit hopelijk is ongeveer als je de vorige keer zou verwachten, 324 00:14:22,080 --> 00:14:24,460 hoewel ik moet doen dit stomme wereldwijde ding. 325 00:14:24,460 --> 00:14:26,610 Het is gewoon een artefact uit ontwerp van de taal. 326 00:14:26,610 --> 00:14:28,450 >> Maar check is een beetje meer interessant. 327 00:14:28,450 --> 00:14:31,420 Dus als ik aangenomen in dollar eerst aanmelden woord, ik 328 00:14:31,420 --> 00:14:34,060 toegang wilt hebben dat globale variabele tafel. 329 00:14:34,060 --> 00:14:36,700 En nu als ik wil controleren of een woord is er, 330 00:14:36,700 --> 00:14:44,350 Ik kan alleen maar zeggen dat als het waar is dat Het volgende is in de tabel, 331 00:14:44,350 --> 00:14:49,957 dan ga je gang en rendement waar; anders, return false. 332 00:14:49,957 --> 00:14:51,180 Gedaan. 333 00:14:51,180 --> 00:14:52,440 De andere helft van PSET 5. 334 00:14:52,440 --> 00:14:54,540 >> Oké, dus nogmaals, ik ben snijden van een paar bochten. 335 00:14:54,540 --> 00:14:56,831 In alle eerlijkheid, zou ik waarschijnlijk besteden een paar seconden 336 00:14:56,831 --> 00:14:58,300 op deze implementatie. 337 00:14:58,300 --> 00:15:01,860 En ik waarschijnlijk niet zou bespotten alle uren die u op de PSET zo veel. 338 00:15:01,860 --> 00:15:04,045 Dus strtolower is een functie. 339 00:15:04,045 --> 00:15:06,670 Iets dergelijks existentialist in C, althans voor tekens, 340 00:15:06,670 --> 00:15:08,560 maar PHP's kreeg een hele reeks versie. 341 00:15:08,560 --> 00:15:11,226 >> Dat zal alles te forceren naar kleine letters, die een aantal van jullie 342 00:15:11,226 --> 00:15:14,944 zou hebben gedaan om wat canonicalize je zet in je woordenboek. 343 00:15:14,944 --> 00:15:16,360 En nu kunt u dit ook doen in C,. 344 00:15:16,360 --> 00:15:17,780 Dit heeft niets te maken met PHP. 345 00:15:17,780 --> 00:15:20,260 >> Maar elke keer dat je hebt een Booleaanse staat, 346 00:15:20,260 --> 00:15:22,680 als iets on-line 10 daar, dat alleen 347 00:15:22,680 --> 00:15:27,145 gaan evalueren om waar of vals, en je als anders duidelijk 348 00:15:27,145 --> 00:15:33,620 is terug te keren waar of onwaar, ik kon gewoon echt maken dit sexier 349 00:15:33,620 --> 00:15:38,360 en net zoiets als dit te doen. 350 00:15:38,360 --> 00:15:40,500 Dus dat daar is mijn check functie. 351 00:15:40,500 --> 00:15:42,560 Rechts, indien de Boolean retourneert een echte of een valse, 352 00:15:42,560 --> 00:15:44,630 laten we gewoon terug het meteen. 353 00:15:44,630 --> 00:15:47,340 >> En er is nog een paar andere tweaks Ik kon hier en daar te maken. 354 00:15:47,340 --> 00:15:51,380 Load-- lossen, door de manier, dat is gebeurd. 355 00:15:51,380 --> 00:15:52,850 Niets te doen. 356 00:15:52,850 --> 00:15:55,840 Aangezien alle van de geheugen PHP en vele andere talen 357 00:15:55,840 --> 00:15:57,570 is eigenlijk voor u beheerd. 358 00:15:57,570 --> 00:16:00,330 Dus terwijl in C, als je pijnlijk hebt geleerd, 359 00:16:00,330 --> 00:16:04,700 alles wat je malloc of calloc of realloc, je hebt om jezelf te bevrijden. 360 00:16:04,700 --> 00:16:08,770 Alles wat je fopen, je moet fclose, zodat de middelen uiteindelijk worden bevrijd 361 00:16:08,770 --> 00:16:11,690 en tools zoals Valgrind niet opmerken en niet klagen, 362 00:16:11,690 --> 00:16:13,570 dat is een goede zaak om te draaien op hen. 363 00:16:13,570 --> 00:16:16,190 >> Maar zeker, er moet zijn enkele vangst, toch? 364 00:16:16,190 --> 00:16:19,400 Anders, we soort verspild een hele hoop weken. 365 00:16:19,400 --> 00:16:23,270 Dus er is een aantal redenen Daarom hebben we een soort van nemen dit traject, 366 00:16:23,270 --> 00:16:24,440 maar er is een trade-off. 367 00:16:24,440 --> 00:16:25,820 Rechts, dit is thematische geweest. 368 00:16:25,820 --> 00:16:29,690 >> Dus wat zou een trade-off hier bewegen, van C naar PHP? 369 00:16:29,690 --> 00:16:33,250 Voelt als alles winnen tot nu toe anders dan een beetje lelijkheid hier of daar. 370 00:16:33,250 --> 00:16:34,040 Yeah. 371 00:16:34,040 --> 00:16:34,700 Wat is dat? 372 00:16:34,700 --> 00:16:36,064 >> STUDENT: [onverstaanbaar] geheugen. 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 Nou, mijn snelheid was behoorlijk snel. 376 00:16:40,720 --> 00:16:42,020 Right? 377 00:16:42,020 --> 00:16:44,320 Maar de snelheid van uitvoering van het programma? 378 00:16:44,320 --> 00:16:45,580 OK, dus dat is een terechte opmerking. 379 00:16:45,580 --> 00:16:50,930 >> Zo zou gebeuren, ik vooraf cued up zowel mijn try-oplossing, de ene 380 00:16:50,930 --> 00:16:53,510 Ik had op het grote bord was een try-gebaseerde oplossing, 381 00:16:53,510 --> 00:16:55,510 en ik heb dat in deze map hier. 382 00:16:55,510 --> 00:16:58,510 Dus ik in een moment, ik kan gaan en lopen deze op de King James Bijbel, 383 00:16:58,510 --> 00:16:59,657 raken van Enter. 384 00:16:59,657 --> 00:17:01,990 En dit is hopelijk correcte implementatie op het einde, 385 00:17:01,990 --> 00:17:05,109 geeft me de tijd in totaal van 0,38 seconden voor dat 386 00:17:05,109 --> 00:17:07,270 een enigszins willekeurig voorbeeld. 387 00:17:07,270 --> 00:17:09,270 >> En als ik nu in deze tweede terminal venster 388 00:17:09,270 --> 00:17:14,569 hier, waar ik voor het eerst opende gedit, laat ik ga in code-- van vandaag, weer die, 389 00:17:14,569 --> 00:17:19,650 is in deze directory hier-- en laat me ga je gang en lopen speller. 390 00:17:19,650 --> 00:17:23,470 Dus gewoon om duidelijk te zijn, dit is de PHP versie. 391 00:17:23,470 --> 00:17:25,170 Ik ben gewoon met de top van het hier. 392 00:17:25,170 --> 00:17:32,020 >> Dus als ik speller van tilde CS50 doen PSET 5 teksten, King James, in te voeren. 393 00:17:32,020 --> 00:17:39,700 394 00:17:39,700 --> 00:17:43,050 Het is nog steeds sneller dan het schrijven in C, maar de totale tijd 395 00:17:43,050 --> 00:17:47,650 is, bericht, 0,93, terwijl mijn C-gebaseerde implementatie 0,38. 396 00:17:47,650 --> 00:17:49,110 Dus het is een niet-triviale verschil. 397 00:17:49,110 --> 00:17:51,100 >> En dit is slechts één bestand. 398 00:17:51,100 --> 00:17:53,480 Als je om de twee lopen programma's ten opzichte van de grote raad 399 00:17:53,480 --> 00:17:56,510 en hebben een hele hoop van inputs getest, zou dit zeker optellen. 400 00:17:56,510 --> 00:18:00,310 En als we hadden zelfs grotere datasets deze ook zouden des te voegen. 401 00:18:00,310 --> 00:18:04,820 Dus ja, het betalen van enige prijs snelheid is inderdaad het geval. 402 00:18:04,820 --> 00:18:05,470 Wat anders? 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: Hoeveelheid RAM gebruik. 406 00:18:10,340 --> 00:18:11,756 >> DAVID J. MALAN: Hoeveelheid RAM gebruik. 407 00:18:11,756 --> 00:18:15,380 Dus heb ik niet één seconde geven dacht bij het schrijven van dit PHP 408 00:18:15,380 --> 00:18:17,300 versie hoeveel geheugen was ik met behulp van. 409 00:18:17,300 --> 00:18:22,080 Ik ben het helemaal uitstellen dat aan PHP zelf en wie schreef dat programma. 410 00:18:22,080 --> 00:18:24,500 En dat zou kunnen zijn OK, maar als ik eigenlijk echt 411 00:18:24,500 --> 00:18:28,420 zorg over knijpen zoveel prestaties uit mijn programma of uit mijn website 412 00:18:28,420 --> 00:18:31,150 of uit welk instrument Ik bouw, misschien 413 00:18:31,150 --> 00:18:33,310 PHP, inderdaad, is niet de juiste taal. 414 00:18:33,310 --> 00:18:36,330 >> En in feite, dat is de reden waarom, voor Bijvoorbeeld, veel web servers-- 415 00:18:36,330 --> 00:18:38,980 het eigenlijke programma dat serveren web content-- 416 00:18:38,980 --> 00:18:41,810 zijn niet in PHP geschreven of in Python of Ruby. 417 00:18:41,810 --> 00:18:44,630 Ze zijn geschreven, zoals zult u nu doen met PSET 6, 418 00:18:44,630 --> 00:18:48,120 in C, zodat u kunt knijpen elke bit van prestaties uit het 419 00:18:48,120 --> 00:18:50,780 en echt oefenen fijnkorrelig controle over wat er 420 00:18:50,780 --> 00:18:52,980 gaande onder de motorkap en neem het niet alleen 421 00:18:52,980 --> 00:18:54,890 vanzelfsprekend een hogere level datastructuur. 422 00:18:54,890 --> 00:18:58,071 >> Overweeg, immers, wie in PHP geïmplementeerd 423 00:18:58,071 --> 00:19:00,070 dat idee van een hash table-- het is eigenlijk meer 424 00:19:00,070 --> 00:19:04,260 behoorlijk genoemd een associatieve array-- doet hij of zij enig idee wat voor soort 425 00:19:04,260 --> 00:19:07,090 van inputs je gaat worden het in de structuur? 426 00:19:07,090 --> 00:19:08,260 Dus natuurlijk niet, toch? 427 00:19:08,260 --> 00:19:10,340 Het is een generiek instrument in de toolkit is dat 428 00:19:10,340 --> 00:19:13,430 verstrekt aan iedereen die wil om het te gebruiken, en dus zeker het 429 00:19:13,430 --> 00:19:17,680 kan uiteindelijk niet worden geoptimaliseerd voor precies wat je wilt doen. 430 00:19:17,680 --> 00:19:21,180 >> Dus trade-offs-- ontwikkeltijd zou verschillen, de prestaties kunnen verschillen, 431 00:19:21,180 --> 00:19:23,120 complexiteit of geheugengebruik kan verschillen. 432 00:19:23,120 --> 00:19:24,820 En dus wat je zult vinden steeds is dat er 433 00:19:24,820 --> 00:19:26,570 ga anders zijn gereedschap voor de handel. 434 00:19:26,570 --> 00:19:31,160 En in feite voor een super meerderheid mensen afstudeerprojecten in deze klasse, 435 00:19:31,160 --> 00:19:34,360 geloof het of niet, is C niet van plan de juiste taal te gebruiken. 436 00:19:34,360 --> 00:19:37,880 >> En in feite een van de afhaalrestaurants uiteindelijk voor een klasse als deze 437 00:19:37,880 --> 00:19:40,510 is om je aan het denken over, nou ja, wat moet je trekken uit 438 00:19:40,510 --> 00:19:42,710 de plank wanneer je wilt om een ​​probleem op te lossen. 439 00:19:42,710 --> 00:19:46,720 En inderdaad, zullen we deze brug nog meer als we kijken naar meer talen 440 00:19:46,720 --> 00:19:47,920 zelfs verder dan vandaag. 441 00:19:47,920 --> 00:19:50,530 >> Dus laten we nu de overgang naar misschien een meer vertrouwde context 442 00:19:50,530 --> 00:19:52,480 voor het gebruik van een taal als PHP. 443 00:19:52,480 --> 00:19:56,720 Het is nogal gebruikelijk om gebruik te de command line, het schrijven van scripts 444 00:19:56,720 --> 00:19:59,050 zoals ik deed, maar het is veel, veel vaker voorkomt. 445 00:19:59,050 --> 00:20:02,350 En was bestemd in de vorm van bestanden die meestal eindigen 446 00:20:02,350 --> 00:20:05,060 in .php-- maar dat is niet een prerequisite-- 447 00:20:05,060 --> 00:20:07,990 die zichzelf genereren web content. 448 00:20:07,990 --> 00:20:11,310 >> Dus laat me ga je gang en open een paar voorbeelden die ik van tevoren voorbereid. 449 00:20:11,310 --> 00:20:15,100 En dit zijn eigenlijk een soort van echte verhalen in dat één van de eerste dingen 450 00:20:15,100 --> 00:20:18,200 Ik ooit heb mezelf na het beëindigen CS50 en misschien, denk ik, 451 00:20:18,200 --> 00:20:21,350 CS51 jaar geleden is mijn kamergenoot en ik hielpen 452 00:20:21,350 --> 00:20:24,320 om de eerstejaars intramurale draaien sportprogramma, die op het tijdstip, 453 00:20:24,320 --> 00:20:28,610 had eerstejaars inschrijven voor diverse sport door het invullen van een stuk papier, 454 00:20:28,610 --> 00:20:31,800 zoals het genoemd werd, wandelen over het erf naar Wigglesworth, 455 00:20:31,800 --> 00:20:34,030 en neer te zetten in een aantal Proctor's deur neerzetten. 456 00:20:34,030 --> 00:20:37,210 En dan zou hij of zij door te gaan en ze vervolgens daadwerkelijk handmatig mail ons 457 00:20:37,210 --> 00:20:39,140 dat we werden geregistreerd voor enkele sport. 458 00:20:39,140 --> 00:20:41,166 >> Zo duidelijk, een kans voor verbetering. 459 00:20:41,166 --> 00:20:44,040 Deze dagen, zou u zich wenden tot net Google Forms, maar terug in de dag, 460 00:20:44,040 --> 00:20:46,914 we moesten eigenlijk voor-- dit te bereiken was niet eens zo lang ago-- bereiken 461 00:20:46,914 --> 00:20:49,410 voor een uitvergroting taal die niet werd PHP. 462 00:20:49,410 --> 00:20:51,200 Op het moment, het was iets genaamd Perl, 463 00:20:51,200 --> 00:20:52,890 die sindsdien verdwenen uit de mode. 464 00:20:52,890 --> 00:20:54,160 Maar het idee is hetzelfde. 465 00:20:54,160 --> 00:20:58,940 >> En ik wezen ging zitten om te proberen naar de haven gaat Perl versies naar PHP, 466 00:20:58,940 --> 00:21:03,710 maar in de volledige disclaimer, gaf niet elke gedachte aan de esthetiek gewoon nog niet. 467 00:21:03,710 --> 00:21:04,960 Dus hier is een webpagina. 468 00:21:04,960 --> 00:21:05,670 Dit is een bestand. 469 00:21:05,670 --> 00:21:09,470 Als ik opnieuw in, zijn blijkbaar genaamd froshim0.php 470 00:21:09,470 --> 00:21:12,060 gewoon omdat het onze eerste Bijvoorbeeld in deze serie. 471 00:21:12,060 --> 00:21:15,970 En merk op dat het wat lijkt een zeer lelijk HTML vorm, 472 00:21:15,970 --> 00:21:18,680 maar een vorm is interessant omdat hierdoor 473 00:21:18,680 --> 00:21:21,910 mij om input van de gebruiker te verstrekken aan de browser. 474 00:21:21,910 --> 00:21:27,730 >> Nu de vorige keer toen we een formulier, om wie hebben we onze queryparameter indienen, 475 00:21:27,730 --> 00:21:30,450 de parameter wachtrij zoals het genoemd werd? 476 00:21:30,450 --> 00:21:31,330 Dus om Google, toch? 477 00:21:31,330 --> 00:21:34,090 Wij zijn helemaal punted op het idee van alles met die ingang doen. 478 00:21:34,090 --> 00:21:36,160 >> Maar vandaag beginnen we produceren output. 479 00:21:36,160 --> 00:21:39,420 En het gedrag ik ga om te zien hier in eerste instantie is vrij triviaal. 480 00:21:39,420 --> 00:21:42,980 David, ik zal afvinken geslacht hier, zeggen Matthews hier. 481 00:21:42,980 --> 00:21:43,800 Ik zal niet captain zijn. 482 00:21:43,800 --> 00:21:45,410 Ik ga klik op Registreren. 483 00:21:45,410 --> 00:21:50,720 En merk op dat de URL heeft veranderd in register-0.php, 484 00:21:50,720 --> 00:21:52,310 en dan is er nog dit lelijke tekst hier. 485 00:21:52,310 --> 00:21:54,460 Ik gaf geen aandacht aan de opmaak van. 486 00:21:54,460 --> 00:21:59,900 >> Maar wat interessant is, is dat de drie waarden waren blijkbaar doorgegeven in. 487 00:21:59,900 --> 00:22:02,960 Dit is PHP soort equivalent aan printf-- 488 00:22:02,960 --> 00:22:06,330 we zullen zien wat het echt heet in een bit-- die net afgedrukt 489 00:22:06,330 --> 00:22:08,300 wat je over in het. 490 00:22:08,300 --> 00:22:11,414 Zodat suggereert dat deze formule had ten minste drie gebieden aan, 491 00:22:11,414 --> 00:22:12,580 en je zag me ze intypen. 492 00:22:12,580 --> 00:22:15,739 Een van hen was mijn naam, een was geslacht, één was slaapzaal. 493 00:22:15,739 --> 00:22:18,780 En kapitein wist niet eens krijgen naar de server omdat ik controleer het niet. 494 00:22:18,780 --> 00:22:22,150 >> Dus dit is blijkbaar zeggen, wanneer je dingen in te dienen op het web, 495 00:22:22,150 --> 00:22:26,830 niet alleen het URL soms change-- soms ook niet. 496 00:22:26,830 --> 00:22:30,330 In feite, de bestandsnaam veranderd, maar wat afwezig in de URL is 497 00:22:30,330 --> 00:22:32,861 dat zagen we vorige keer met Google. 498 00:22:32,861 --> 00:22:33,360 Yeah? 499 00:22:33,360 --> 00:22:34,380 >> STUDENT: Geen query string 500 00:22:34,380 --> 00:22:35,220 >> DAVID J. MALAN: Er is geen query string. 501 00:22:35,220 --> 00:22:37,270 Er is geen vraagteken iets. 502 00:22:37,270 --> 00:22:40,050 Er is geen vraagteken q gelijk aan katten, omdat we de vorige keer deed. 503 00:22:40,050 --> 00:22:42,170 En er is zeker geen vraagteken naam is gelijk aan 504 00:22:42,170 --> 00:22:46,310 David of dorm gelijk Matthews, dus waar is dat allemaal? 505 00:22:46,310 --> 00:22:51,290 >> Nou, laat me terug naar gedit gaan hier en het openstellen van de eerste van deze bestanden 506 00:22:51,290 --> 00:22:57,020 in mijn vhost, lokale host, openbaar directory hier en ga in froshim0. 507 00:22:57,020 --> 00:23:02,060 Dus het blijkt dat bijna alle van deze pagina is gewoon HTML. 508 00:23:02,060 --> 00:23:05,410 En dit kan onbekend voor je zijn, maar het zal binnenkort meer dus met PSET 6 509 00:23:05,410 --> 00:23:07,370 en PSET 7 en PSET 8. 510 00:23:07,370 --> 00:23:09,160 Maar dit is slechts een HTML-pagina. 511 00:23:09,160 --> 00:23:12,400 >> En het interessante spul lijkt hier te zijn. 512 00:23:12,400 --> 00:23:16,290 Een vorm tag wiens optreden attribuut heeft een waarde van register 0. 513 00:23:16,290 --> 00:23:18,890 Dat is waarom, toen ik in te dienen dit gaat dat bestand. 514 00:23:18,890 --> 00:23:20,620 Maar methode is anders today-- bericht. 515 00:23:20,620 --> 00:23:23,120 Dus het blijkt dat er is op zijn minst twee manieren op het web gebruikte 516 00:23:23,120 --> 00:23:24,911 om informatie te sturen van browser tot server. 517 00:23:24,911 --> 00:23:25,980 Get zet het in de URL. 518 00:23:25,980 --> 00:23:27,950 Post zet het elders. 519 00:23:27,950 --> 00:23:30,570 En wanneer en waarom zou je eigenlijk willen een website 520 00:23:30,570 --> 00:23:34,110 te gebruiken na dan in plaats van krijgen, gewoon intuïtief? 521 00:23:34,110 --> 00:23:37,080 Elke website. 522 00:23:37,080 --> 00:23:42,010 Wat voor soort gegevens gewoon moeten worden doorgegeven door gevolgtrekking nu per post, in tegenstelling 523 00:23:42,010 --> 00:23:45,184 te krijgen, als we hebben gezien de twee verschillen? 524 00:23:45,184 --> 00:23:46,350 STUDENT: [onverstaanbaar] beveiligen. 525 00:23:46,350 --> 00:23:47,790 DAVID J. MALAN: Als je wilt iets om veilig te zijn. 526 00:23:47,790 --> 00:23:50,360 Dus je zou een wachtwoord in te voeren in een website, een credit card 527 00:23:50,360 --> 00:23:53,030 in een website zou soort van deze suboptimale 528 00:23:53,030 --> 00:23:56,220 indien de browser zetten dat waarde binnenkant van de URL. 529 00:23:56,220 --> 00:23:57,680 Waarom? 530 00:23:57,680 --> 00:24:00,059 Je ziet het, die dat niet doet lijken zo'n big deal te zijn, 531 00:24:00,059 --> 00:24:03,350 maar kansen zijn je behoorlijk vaak lopen uit de buurt van uw computer of het gebruik computer 532 00:24:03,350 --> 00:24:05,310 labs, en zo iemand anders of zelfs een kamergenoot 533 00:24:05,310 --> 00:24:08,220 konden gemakkelijk te voet naar omhoog en ziet die prive-informatie. 534 00:24:08,220 --> 00:24:10,220 Wanneer u een e-mail via het web, heb je waarschijnlijk 535 00:24:10,220 --> 00:24:12,350 niet wilt dat de gegevens tot en in de URL ook. 536 00:24:12,350 --> 00:24:15,266 En dus is er een aantal redenen waarom zouden we willen het hier te zetten. 537 00:24:15,266 --> 00:24:18,610 En photos-- rechts, ik kan niet eens behoorlijk voorstellen hoe u een afbeelding zou nemen, 538 00:24:18,610 --> 00:24:21,480 als een JPEG, en zet het in een URL. 539 00:24:21,480 --> 00:24:22,330 Je zou het kunnen doen. 540 00:24:22,330 --> 00:24:25,840 Er zijn manieren coderen, maar het is net niet eenvoudig als dat. 541 00:24:25,840 --> 00:24:29,030 >> Registreer dus 0 is eigenlijk zeer underwhelming. 542 00:24:29,030 --> 00:24:31,610 Al het zegt letterlijk is dit. 543 00:24:31,610 --> 00:24:35,910 Het drukt de binnenkant van sommige HTML-tags het volgende. 544 00:24:35,910 --> 00:24:38,640 Ik heb een PHP-tag hier genest binnenkant van een pre-tag. 545 00:24:38,640 --> 00:24:42,300 "Pre" betekent gewoon pre-opgemaakte tekst, mono-spaced, zoals een typemachine. 546 00:24:42,300 --> 00:24:44,836 >> Printr is een print recursieve functie. 547 00:24:44,836 --> 00:24:46,710 En dan is er dit interessante hier. 548 00:24:46,710 --> 00:24:48,835 En we zullen hierop terugkomen omdat er andere, 549 00:24:48,835 --> 00:24:51,140 maar dollarteken underscore achteraf blijkt te zijn 550 00:24:51,140 --> 00:24:56,110 een variabele in PHP waarin alles u van browser naar server 551 00:24:56,110 --> 00:24:58,040 wordt voor u opgeslagen. 552 00:24:58,040 --> 00:25:00,930 En we zullen zien hoe je op te krijgen dat de informatie voor lang. 553 00:25:00,930 --> 00:25:04,000 >> Maar laten we eerst eens teruggaan naar een iets ander voorbeeld. 554 00:25:04,000 --> 00:25:09,050 Going in register-- of eerder, froshims1.php, 555 00:25:09,050 --> 00:25:10,470 die ziet er een beetje anders. 556 00:25:10,470 --> 00:25:12,670 Ik nam een ​​beetje meer inspanning met opmaak, 557 00:25:12,670 --> 00:25:14,370 ook al is het nog steeds vrij lelijk. 558 00:25:14,370 --> 00:25:16,990 Maar ik ga om verder te gaan en type in "David" nu. 559 00:25:16,990 --> 00:25:17,850 Male. 560 00:25:17,850 --> 00:25:19,360 We zullen "captain" deze tijd te controleren. 561 00:25:19,360 --> 00:25:20,660 We doen Matthews. 562 00:25:20,660 --> 00:25:22,430 En te registreren. 563 00:25:22,430 --> 00:25:24,110 >> En deze keer zegt, hm, niet echt. 564 00:25:24,110 --> 00:25:26,180 Oké, dus wat is registreren 1? 565 00:25:26,180 --> 00:25:30,509 Laat me gaan in open register 1 en-- hm. 566 00:25:30,509 --> 00:25:32,300 Oké, dus dit is interessant en dit 567 00:25:32,300 --> 00:25:34,880 is een opstapje nu in de richting van meer interessante programma's. 568 00:25:34,880 --> 00:25:38,970 >> Let op de top van dit bestand heeft een PHP tag evenals een aantal opmerkingen. 569 00:25:38,970 --> 00:25:42,590 En dit zijn, voor nu, een afleiding dus laten we gewoon ontdoen van deze opmerkingen 570 00:25:42,590 --> 00:25:47,070 net alsof ze in C. En ik beweer met dit stuk code met een reactie 571 00:25:47,070 --> 00:25:49,280 dat deze code is valideren van de inzending. 572 00:25:49,280 --> 00:25:51,690 >> Nou, het blijkt dat variabelen als dollarteken 573 00:25:51,690 --> 00:25:53,739 underscore bericht zijn genaamd super globals. 574 00:25:53,739 --> 00:25:55,530 Ze zijn als deze speciale globale variabelen 575 00:25:55,530 --> 00:25:58,840 dat zijn slechts omni-moment beschikbaar zijn binnen uw programma. 576 00:25:58,840 --> 00:26:03,870 En u kunt vierkante haakjesnotering gebruiken te indexeren in hen niet met cijfers 577 00:26:03,870 --> 00:26:07,460 zoals 0, 1, 2, 3, maar de werkelijke woorden. 578 00:26:07,460 --> 00:26:12,100 >> Zo kunt u denken aan het dollarteken underscore functie als een soort van een hash table 579 00:26:12,100 --> 00:26:15,920 dat je een sleutel in een lookup kon overgaan woord in-tussen de vierkante haken, 580 00:26:15,920 --> 00:26:19,370 en het gaat om je terug het geven waarde die de gebruiker daadwerkelijk verstrekt. 581 00:26:19,370 --> 00:26:21,210 PHP een functie genaamd lege dat net 582 00:26:21,210 --> 00:26:23,720 zegt ja of nee, dit variabele leeg is of niet. 583 00:26:23,720 --> 00:26:27,250 We hebben deze dubbele verticale lijn, die net betekent of, zoals in C. 584 00:26:27,250 --> 00:26:31,740 >> Dus in feite, deze lijn 4 is gewoon zeggen als de gebruiker een naam niet gaf 585 00:26:31,740 --> 00:26:36,540 of heeft een gender niet geven of niet geven een slaapzaal, ga je gang en redirect hem 586 00:26:36,540 --> 00:26:38,184 of haar via deze lijn hier. 587 00:26:38,184 --> 00:26:40,600 Dus dit is een beetje cryptisch, maar dit betekent gewoon letterlijk 588 00:26:40,600 --> 00:26:43,330 ga terug naar deze plaats, dus het punters de gebruiker 589 00:26:43,330 --> 00:26:45,420 terug naar de plaats waar hij of zij vandaan kwam. 590 00:26:45,420 --> 00:26:47,880 Maar het is een beetje inelegant dat ik hard gecodeerd is. 591 00:26:47,880 --> 00:26:52,150 >> Maar wat als dit als voorwaarde niet beoordelen naar waar? 592 00:26:52,150 --> 00:26:55,790 Wat als de gebruiker gaf me zijn of haar naam en slaapzaal en geslacht? 593 00:26:55,790 --> 00:26:58,540 Dat als voorwaarde is niet gaan evalueren om waar, 594 00:26:58,540 --> 00:27:00,650 zodat ik niet de afslag in lijn 7 getroffen. 595 00:27:00,650 --> 00:27:01,680 Dus wat gebeurt er? 596 00:27:01,680 --> 00:27:03,880 En dit is wat er interessante over PHP. 597 00:27:03,880 --> 00:27:07,470 >> Je kan dalen in en uit van PHP-modus, om zo te zeggen. 598 00:27:07,470 --> 00:27:10,985 Als u wilt een stukje code uit te voeren, u kunt openen en sluiten van een PHP-tag 599 00:27:10,985 --> 00:27:13,010 en zet de code er als ik hier heb gedaan. 600 00:27:13,010 --> 00:27:16,810 Zodra je dicht de PHP-tag, de server 601 00:27:16,810 --> 00:27:19,407 is gewoon te spugen wat je daar te zetten. 602 00:27:19,407 --> 00:27:21,740 En inderdaad, dit was onderdeel van het oorspronkelijke ontwerp van PHP, 603 00:27:21,740 --> 00:27:25,280 voor beter slechter was vermenging van de code en markup 604 00:27:25,280 --> 00:27:25,920 taal. 605 00:27:25,920 --> 00:27:28,670 En we zullen zien dat dit zeer snel vervult, in een puinhoop. 606 00:27:28,670 --> 00:27:31,280 En dus zullen we het beter doen dan dit uiteindelijk, maar gewoon 607 00:27:31,280 --> 00:27:35,620 merkt het gemak waarmee ik ben daadwerkelijk in staat om wat logica te voeren. 608 00:27:35,620 --> 00:27:37,440 >> Maar nog steeds een beetje underwhelming. 609 00:27:37,440 --> 00:27:41,210 Laten we openstellen versie twee van Frosh IM, die 610 00:27:41,210 --> 00:27:44,270 blijkbaar onderwerpt aan register2.php. 611 00:27:44,270 --> 00:27:47,600 Dus dit bestand is eigenlijk gaat bijna hetzelfde uitzien. 612 00:27:47,600 --> 00:27:50,780 Ik ga om te gaan naar Frosh IM 2. 613 00:27:50,780 --> 00:27:53,050 Maar in Frosh IMs 2, laten we eens kijken wat er gebeurt. 614 00:27:53,050 --> 00:27:58,110 >> David, klikt u op de radio button, als het heet; Matthews, geen kapitein. 615 00:27:58,110 --> 00:27:59,230 Registreer. 616 00:27:59,230 --> 00:28:00,130 Je bent ingeschreven. 617 00:28:00,130 --> 00:28:00,700 Niet echt. 618 00:28:00,700 --> 00:28:02,574 Oh wacht, we deden gewoon dat voorbeeld, niet wij? 619 00:28:02,574 --> 00:28:04,520 Oké, stand by. 620 00:28:04,520 --> 00:28:06,602 We zullen de drie doen. 621 00:28:06,602 --> 00:28:08,560 Het is duidelijk dat er iets over gebeuren met Gmail. 622 00:28:08,560 --> 00:28:09,600 We komen er wel. 623 00:28:09,600 --> 00:28:11,900 >> Dus Frosh IMs 3 ziet er als volgt uit. 624 00:28:11,900 --> 00:28:13,050 Niet anders. 625 00:28:13,050 --> 00:28:19,850 Maar als ik dat doe David, mannelijke, Matthews, en registreren, dit derde en laatste versie 626 00:28:19,850 --> 00:28:22,230 aanspraken, heel eenvoudig, u zijn echt geregistreerd. 627 00:28:22,230 --> 00:28:23,560 Dat is een soort van immateriële. 628 00:28:23,560 --> 00:28:25,600 Maar ik beweer met dit derde en laatste versie 629 00:28:25,600 --> 00:28:30,610 Ik heb nu opnieuw precies wat mijn kamergenoot en ik gebouwd voor de Frosh IM 630 00:28:30,610 --> 00:28:31,731 programma jaar geleden. 631 00:28:31,731 --> 00:28:32,480 En het was eenvoudig. 632 00:28:32,480 --> 00:28:34,330 Er was geen database geen Excel-spreadsheet. 633 00:28:34,330 --> 00:28:36,450 Maar wat nog belangrijker is, er was geen papier meer 634 00:28:36,450 --> 00:28:42,520 want wat we hebben gedaan met dit programma was om daadwerkelijk e-mail de surveillant, die 635 00:28:42,520 --> 00:28:44,530 was eerder ontvangen deze dingen via formulieren. 636 00:28:44,530 --> 00:28:48,890 >> En blijkbaar hebben we deze geprogrammeerd in zodanig dat wanneer iemand registreert, 637 00:28:48,890 --> 00:28:52,470 John Harvard's rekening emails de proctor-- of zich in dit geval, 638 00:28:52,470 --> 00:28:55,960 John Harvard-- met de volgende text-- "Deze persoon net geregistreerd." 639 00:28:55,960 --> 00:29:00,560 Naam is David, de kapitein is leeg; geslacht, man; en dorm, Matthews. 640 00:29:00,560 --> 00:29:01,560 >> Dus wat is er gebeurd? 641 00:29:01,560 --> 00:29:05,360 Nou, het bestand in kwestie hier blijkbaar register3.php. 642 00:29:05,360 --> 00:29:09,080 En als ik dit te openen, ziet u zowel de kracht van de code als volgt 643 00:29:09,080 --> 00:29:12,380 en ook, eerlijk gezegd, de onveiligheid van een systeem als e-mail. 644 00:29:12,380 --> 00:29:16,290 Ik heb net effectief deed alsof zijn John Harvard op de volgende manier. 645 00:29:16,290 --> 00:29:20,920 >> Ik heb de open php tag up top, die zegt alleen hier komt een aantal PHP-code. 646 00:29:20,920 --> 00:29:23,155 Hierna, blijkt dat er zijn bibliotheken in PHP. 647 00:29:23,155 --> 00:29:26,410 Je gewoon niet hoeft te onder andere header files zo veel. 648 00:29:26,410 --> 00:29:28,900 Je krijgt meer met de gootsteen, om zo te zeggen. 649 00:29:28,900 --> 00:29:31,820 >> Maar deze keer in lijn 4, ik doe willen speciale bibliotheek genaamd 650 00:29:31,820 --> 00:29:36,087 PHP mailer, dat is iets wat je kan gratis installeren op vele systemen. 651 00:29:36,087 --> 00:29:37,920 Hierna ben ik valideren de indiening gewoon 652 00:29:37,920 --> 00:29:40,540 door het controleren heeft de gebruiker nodig me een naam, een geslacht, en een slaapzaal. 653 00:29:40,540 --> 00:29:44,130 En zo ja, ga je gang en instantiëren een mailer. 654 00:29:44,130 --> 00:29:47,020 >> U kunt denken aan dit als een regel code die net toewijst. 655 00:29:47,020 --> 00:29:48,950 Het is net als malloc, maar het is een beetje sexier 656 00:29:48,950 --> 00:29:51,790 in dat je gewoon zwijgen niet malloc en een aantal generieke nummer. 657 00:29:51,790 --> 00:29:55,030 U zegt geef me een van deze, geef me een nieuw exemplaar van deze. 658 00:29:55,030 --> 00:29:57,950 >> En als je hebt geprogrammeerd in Java of C ++ of andere talen, 659 00:29:57,950 --> 00:29:59,130 je zou hebben gezien dit. 660 00:29:59,130 --> 00:30:01,840 Maar de korte daarvan, indien onbekende, deze lijn 661 00:30:01,840 --> 00:30:05,410 zet in dollarteken mail een speciale structuur genoemd 662 00:30:05,410 --> 00:30:08,731 een object dat is ingebouwd in email functionaliteit. 663 00:30:08,731 --> 00:30:10,355 En inderdaad, merken en soortgelijke syntax. 664 00:30:10,355 --> 00:30:11,900 >> Dit is niet een pointer, per se. 665 00:30:11,900 --> 00:30:13,990 PHP maakt gebruik van precies dezelfde syntax. 666 00:30:13,990 --> 00:30:17,660 Deze lijn is te zeggen gebruik SMTP-- Simple Mail Transfer 667 00:30:17,660 --> 00:30:20,900 Protocol, dat is gewoon de protocol dat wordt gebruikt om e-mail te sturen. 668 00:30:20,900 --> 00:30:24,240 Dit specificeert gebruik Harvard's SMTP-server, die 669 00:30:24,240 --> 00:30:25,830 is ergens hier op de campus. 670 00:30:25,830 --> 00:30:28,480 >> Dit zegt wat TCP poortnummer om mee te praten, 671 00:30:28,480 --> 00:30:31,650 en ik bedacht dat uit door googlen of door het stellen van de helpdesk. 672 00:30:31,650 --> 00:30:34,640 En dan, omdat Harvard gebruikt enkele beveiliging van het systeem op de e-mail server-- 673 00:30:34,640 --> 00:30:37,060 althans versleutelen het verkeer tussen u en het, 674 00:30:37,060 --> 00:30:41,380 hoewel iedereen kan sturen naar het-- Ik ga voor het inschakelen van het TLS-protocol 675 00:30:41,380 --> 00:30:42,710 voor het houden van deze veilig. 676 00:30:42,710 --> 00:30:44,730 >> Maar dit is waar de dingen een beetje eng. 677 00:30:44,730 --> 00:30:47,970 Ik kan het gewoon willekeurig zeggen dat ik jharvard, 678 00:30:47,970 --> 00:30:51,930 En ik kan gewoon willekeurig e-mail me hier. 679 00:30:51,930 --> 00:30:55,650 En dan kan ik een specificeren onderwerp met deze lijn hier. 680 00:30:55,650 --> 00:30:58,460 >> En dit ziet er gewoon lelijk, maar het is gewoon een stel aaneenschakeling. 681 00:30:58,460 --> 00:31:04,480 Blijkt dat PHP heeft een super handig symbool, zoals sommige talen, de dot-operator, 682 00:31:04,480 --> 00:31:07,340 die net letterlijk aaneengeschakeld snaar voor snaar voor snaar, 683 00:31:07,340 --> 00:31:09,810 en je hoeft niet te malloc of figuur de totale lengte van de snaar. 684 00:31:09,810 --> 00:31:10,820 Je doet het gewoon. 685 00:31:10,820 --> 00:31:15,220 En inderdaad, want ik ben het aaneenschakelen in al deze dingen met deze punten, 686 00:31:15,220 --> 00:31:18,330 dat is de reden waarom de e-mail ik zond keek zoals zij heeft gedaan. 687 00:31:18,330 --> 00:31:20,610 >> En dan tot slot hier, ik ben het verzenden van mail. 688 00:31:20,610 --> 00:31:22,580 Dus als dit onjuist is, Ik ga gewoon om te sterven, 689 00:31:22,580 --> 00:31:25,680 die een functie enkel afdrukken om het scherm enkele foutmelding. 690 00:31:25,680 --> 00:31:29,170 Maar het is in feite het aanroepen van de send-functie. 691 00:31:29,170 --> 00:31:31,780 Anders, als dit alles niet lukt, leidt het automatisch me hier terug. 692 00:31:31,780 --> 00:31:34,050 >> En waarom heb ik dat Ik ben echt geregistreerd? 693 00:31:34,050 --> 00:31:36,110 Nou, het is gebeurd hier. 694 00:31:36,110 --> 00:31:38,170 Dus ik breng dit voor een paar redenen. 695 00:31:38,170 --> 00:31:41,542 >> One, dit is precies hoe als je bouwen sommige website voor een afstudeerproject 696 00:31:41,542 --> 00:31:44,000 of voor de echte wereld, is dit hoe je e-mail herinneringen te sturen 697 00:31:44,000 --> 00:31:45,924 aan uw klanten of uw abonnees. 698 00:31:45,924 --> 00:31:47,590 Dit is hoe je een wachtwoord herinneringen te versturen. 699 00:31:47,590 --> 00:31:50,760 Dit is hoe je mensen berichten sturen dat zij een nieuwe Facebook 700 00:31:50,760 --> 00:31:52,990 bericht in afwachting of iets dergelijks. 701 00:31:52,990 --> 00:31:55,010 >> Maar het spreekt ook tot het feit dat deze kan 702 00:31:55,010 --> 00:31:58,160 hebben zeer goed uit geweest Davin of iemand anders. 703 00:31:58,160 --> 00:32:00,567 En ik zeg dit soort met een glimlach, want ik ben 704 00:32:00,567 --> 00:32:03,400 helemaal zeker wat er aan de hand door middel van een aantal van uw gedachten op dit punt. 705 00:32:03,400 --> 00:32:11,910 Maar dit is een van die doen zoals ik zeg, niet wat ik doe voor soort dingen, 706 00:32:11,910 --> 00:32:14,480 omdat het triviaal om smeden e-mails als deze. 707 00:32:14,480 --> 00:32:16,480 Maar zoals je misschien gezien hebt of lees in de Crimson, 708 00:32:16,480 --> 00:32:18,271 van laat het is ook vrij triviaal voor mensen 709 00:32:18,271 --> 00:32:20,050 om ze terug om wat herkomst te traceren. 710 00:32:20,050 --> 00:32:23,790 En vraag me wat tijd, misschien bij CS50 lunch, hoe ik voor het eerst 711 00:32:23,790 --> 00:32:27,080 werd zeer nauw kennen bijna tot aan de ed board vele jaren 712 00:32:27,080 --> 00:32:30,890 geleden, toen ik ontdekte hoe het internet werkt. 713 00:32:30,890 --> 00:32:36,940 Dus in ieder case-- lichtjes na de red board deed. 714 00:32:36,940 --> 00:32:42,300 >> Dus in elk geval is er een hele hoop super globals, 715 00:32:42,300 --> 00:32:45,960 zoals ze hier genoemd, waarvan we saw-- dollarteken underscore bericht. 716 00:32:45,960 --> 00:32:49,530 Er is een tegenhanger genaamd get, dat is waar de spullen van een URL 717 00:32:49,530 --> 00:32:50,690 eindigt gaan. 718 00:32:50,690 --> 00:32:54,051 En er is een hele hoop anderen, too-- sessie en server en koekje. 719 00:32:54,051 --> 00:32:55,800 We zullen terug te komen koekje een andere keer, 720 00:32:55,800 --> 00:33:01,340 maar sessie is wel cool omdat rechts now-- tot now-- 721 00:33:01,340 --> 00:33:06,350 alles wat we hebben gedaan met een webbrowser is een soort van staatlozen, bij wijze van spreken. 722 00:33:06,350 --> 00:33:10,060 Ik kan klikken rond, toegang bestanden op de server, wat 723 00:33:10,060 --> 00:33:13,500 gebeurt op het scherm, maar vervolgens de verbinding sluit. 724 00:33:13,500 --> 00:33:17,450 De Internet Explorer of de Firefox-icoon stopt spinnen 725 00:33:17,450 --> 00:33:20,340 en je gewoon zien wat die webpagina bevat. 726 00:33:20,340 --> 00:33:23,530 >> Dus HTTP staatloos is in dat wanneer het een verbinding, 727 00:33:23,530 --> 00:33:25,050 krijgt een aantal gegevens, dat is het. 728 00:33:25,050 --> 00:33:29,940 Geen verbinding, in tegenstelling tot Skype, in tegenstelling tot Facetime, in tegenstelling tot Gchat, die 729 00:33:29,940 --> 00:33:32,180 zorgt voor een constante verbinding met de server. 730 00:33:32,180 --> 00:33:34,650 Het web is fundamenteel losgekoppeld, hoewel we 731 00:33:34,650 --> 00:33:36,630 zie het duurde niet lang hoe kunnen we dingen simuleren 732 00:33:36,630 --> 00:33:39,300 zoals Facebook Chat en Gchat, die de illusion-- behouden 733 00:33:39,300 --> 00:33:41,680 of eigenlijk doen handhaven van een constante verbinding met behulp van 734 00:33:41,680 --> 00:33:43,270 meer moderne technologie. 735 00:33:43,270 --> 00:33:49,000 >> Maar als ik naar, zeg, counter.php, Dit is een eenvoudig voorbeeld, 736 00:33:49,000 --> 00:33:52,700 zoals we zullen zien, die op dat moment denkt Ik bezocht de site nul keer. 737 00:33:52,700 --> 00:33:56,790 Maar als ik gewoon de pagina geladen is, een of andere manier weet ik was hier al eerder. 738 00:33:56,790 --> 00:33:58,840 Als ik herladen nogmaals, het weet dat ik hier eerder was. 739 00:33:58,840 --> 00:34:01,100 En opnieuw en opnieuw en opnieuw en opnieuw. 740 00:34:01,100 --> 00:34:03,610 >> Dus er is een aantal plus-plussing gaande, maar kennisgeving 741 00:34:03,610 --> 00:34:07,090 het kleine ding draait ooit zo kort up top en dan verbreekt, 742 00:34:07,090 --> 00:34:11,179 dus het is niet alsof ik heb een constante verbinding met mijn toestel. 743 00:34:11,179 --> 00:34:16,929 Nou, als ik in counter.php, merken hoe eenvoudig het is. 744 00:34:16,929 --> 00:34:19,080 Ik noem eerst deze speciale functie die we zullen snel 745 00:34:19,080 --> 00:34:21,513 beginnen met het nemen voor lief genaamd sessie start. 746 00:34:21,513 --> 00:34:22,179 Start een sessie. 747 00:34:22,179 --> 00:34:25,095 >> En een sessie voortaan slechts naar een emmer, zoals een winkelcentrum 748 00:34:25,095 --> 00:34:28,120 kar waarin je kunt waarden zetten en soort van vertrouwen als programmeur 749 00:34:28,120 --> 00:34:31,590 dat ze gaan om hier te zijn wanneer die gebruiker komt Terug-- een tweede 750 00:34:31,590 --> 00:34:35,670 later, een uur later, nog een jaar later, zolang hij of zij doet niet duidelijk 751 00:34:35,670 --> 00:34:37,602 hun cookies, zoals we uiteindelijk zullen zien. 752 00:34:37,602 --> 00:34:39,310 En nu heb ik gewoon een als voorwaarde hier. 753 00:34:39,310 --> 00:34:44,679 Dus als de volgende sleutel, genaamd teller, is ingesteld binnen 754 00:34:44,679 --> 00:34:49,210 van deze super global-- deze hash tafel, als je geroepen sessie will--, 755 00:34:49,210 --> 00:34:53,350 dan ga je gang en pak de waarde van de session-- think 756 00:34:53,350 --> 00:34:55,250 dit als shopping cart-- en op te slaan 757 00:34:55,250 --> 00:34:57,680 in een tijdelijke variabele genaamd teller. 758 00:34:57,680 --> 00:35:02,240 >> Anders, als die waarde teller was niet in de zogenaamde shopping cart, 759 00:35:02,240 --> 00:35:04,430 gewoon initialiseren op 0. 760 00:35:04,430 --> 00:35:09,830 Tot slot, hier beneden, ga en terug in de winkelwagentjes of de sessie 761 00:35:09,830 --> 00:35:13,000 de waarde van de teller +1. 762 00:35:13,000 --> 00:35:16,730 Zo blijkt het dat deze speciale container hier-- 763 00:35:16,730 --> 00:35:20,355 die, wederom, een van deze geassocieerde arrays, een serie die je kan indexeren 764 00:35:20,355 --> 00:35:25,010 in woorden in plaats van numbers-- blijft bestaan, zelfs nadat de gebruiker weggaat. 765 00:35:25,010 --> 00:35:26,510 Nogmaals, ik kom terug naar de pagina nu gaan. 766 00:35:26,510 --> 00:35:28,400 Het is al een minuut of zo. 767 00:35:28,400 --> 00:35:31,300 Maar het herinnert zich dat ik heb 19 keer eerder hier geweest. 768 00:35:31,300 --> 00:35:32,740 Dit is mijn 20e bezoek. 769 00:35:32,740 --> 00:35:36,560 >> En zo gaat dit de sleutel tot zijn de uitvoering van alle website die onthoudt 770 00:35:36,560 --> 00:35:40,640 dat je bent ingelogd, dat je iets letterlijk in uw winkelwagen 771 00:35:40,640 --> 00:35:43,902 te kopen of dat u een aantal aantal berichten in behandeling. 772 00:35:43,902 --> 00:35:45,610 Wanneer je maar wilt herinneren informatie, 773 00:35:45,610 --> 00:35:48,130 we zullen zien dat PHP, zoals verschillende andere talen, 774 00:35:48,130 --> 00:35:53,640 biedt ons deze illusie van de staat ook al, zoals u zult zien in PSET 6, 775 00:35:53,640 --> 00:35:57,642 als je het maken van HTTP-verzoeken van client naar server, dat is het. 776 00:35:57,642 --> 00:35:59,850 Zodra je terug dat reactie, er is niets meer 777 00:35:59,850 --> 00:36:01,790 komt terug van de server standaard. 778 00:36:01,790 --> 00:36:03,820 Maar we zullen zien hoe te werken rond dat. 779 00:36:03,820 --> 00:36:07,430 >> Welnu, laten we proberen om dit opruimen een beetje. 780 00:36:07,430 --> 00:36:09,470 We hebben een paar gezien verschillende voorbeelden daar. 781 00:36:09,470 --> 00:36:12,250 Oh, en als een terzijde, voor die bekende of onbekende, 782 00:36:12,250 --> 00:36:14,230 de reden dat de Frosh IMs voorbeeld ging 783 00:36:14,230 --> 00:36:18,060 uit te kijken echt lelijk om goed slightly--, 784 00:36:18,060 --> 00:36:23,160 nog ugly-- tot licht minder lelijk hoewel nog steeds lelijk 785 00:36:23,160 --> 00:36:25,230 Want als we kijken hier bij de broncode, 786 00:36:25,230 --> 00:36:28,240 het blijkt dat ik dit helemaal aan het begin van het bestand. 787 00:36:28,240 --> 00:36:32,570 >> Blijkt dat bootstrap is een van de vele vrij beschikbare bibliotheken die er zijn 788 00:36:32,570 --> 00:36:37,140 die niet aanwezig voor programmeertalen altijd, maar voor CSS of JavaScript 789 00:36:37,140 --> 00:36:39,190 of HTML of een aantal talen. 790 00:36:39,190 --> 00:36:42,160 >> En deze mensen hier-- kwam oorspronkelijk uit 791 00:36:42,160 --> 00:36:44,730 van Twitter-- gewoon een hele hoop stijlen. 792 00:36:44,730 --> 00:36:47,360 Het is een enorme file hier dat iemand schreef, 793 00:36:47,360 --> 00:36:51,020 of iemand schreef, over de tijd dat specificeert kleuren en opmaak 794 00:36:51,020 --> 00:36:53,740 en wat al niet, zodat ik kan soort lenen hun syntaxis 795 00:36:53,740 --> 00:36:56,157 en niet te achterhalen hoe de lay-out van mijn vorm. 796 00:36:56,157 --> 00:36:57,990 Dit wordt ook minified zodat een computer kan 797 00:36:57,990 --> 00:37:00,560 begrijp het maar niet noodzakelijkerwijs een mens. 798 00:37:00,560 --> 00:37:03,050 Dus dat is precies de reden waarom de stilering er veranderd. 799 00:37:03,050 --> 00:37:05,450 >> Maar laten we nu beter doen in termen van design, 800 00:37:05,450 --> 00:37:07,490 want als we blijven liggen deze weg te lang, 801 00:37:07,490 --> 00:37:11,290 onze code gaat krijgen rommelig en Messier. 802 00:37:11,290 --> 00:37:13,040 Dus laten we focussen op deze voorbeelden hier. 803 00:37:13,040 --> 00:37:15,090 De laatste voor vandaag. 804 00:37:15,090 --> 00:37:18,720 >> Dus hier is een super eenvoudige versie 1.0 van de website van CS50's. 805 00:37:18,720 --> 00:37:21,250 Het heeft alleen links naar lezingen en syllabus, 806 00:37:21,250 --> 00:37:25,490 en het is met behulp van die ongeordende lijst tag-- de UL tag die we gebruikten de vorige keer. 807 00:37:25,490 --> 00:37:28,800 En indien in feite, als ik openstellen View Page Source, 808 00:37:28,800 --> 00:37:31,710 je zult zien dat dit echt, echt simpel HTML. 809 00:37:31,710 --> 00:37:35,460 En in feite, hoewel dit een PHP-bestand onder de motorkap, 810 00:37:35,460 --> 00:37:38,620 het is nog steeds gewoon spugen alleen HTML voor nu. 811 00:37:38,620 --> 00:37:41,312 >> Dus als ik klik op Lezingen, we zien gebeuren. 812 00:37:41,312 --> 00:37:43,020 En als ik klik op de week nul is, zien we dit. 813 00:37:43,020 --> 00:37:44,920 En als ik klik op Woensdag zien we dit. 814 00:37:44,920 --> 00:37:47,900 En dit blijkbaar was de PDF van de dia's van die dag. 815 00:37:47,900 --> 00:37:52,020 Alles wat ik heb gedaan is koppeling met een anchor tag om deze URL hier. 816 00:37:52,020 --> 00:37:55,400 >> Dus dit is alleen maar om te zeggen dat dit een mooie eenvoudige versie van de website van CS50's. 817 00:37:55,400 --> 00:37:56,790 Laten we eens kijken hoe het is uitgevoerd. 818 00:37:56,790 --> 00:38:01,240 Als ik in de mvc0 directory, we zien wel een paar bestanden. 819 00:38:01,240 --> 00:38:03,250 Een daarvan is een README, dus als sommige hiervan is te snel, 820 00:38:03,250 --> 00:38:05,166 je kunt gewoon rond te snuffelen meer ontspannen later. 821 00:38:05,166 --> 00:38:07,930 En let op hier is een index.php bestand. 822 00:38:07,930 --> 00:38:09,960 Het blijkt dat als je jezelf, de mens, 823 00:38:09,960 --> 00:38:14,460 niet een definitieve naam niet opgeeft in een URL, de webserver meestal 824 00:38:14,460 --> 00:38:17,010 afleidt sommige standaardnaam voor u. 825 00:38:17,010 --> 00:38:20,060 Een index dot iets is over het algemeen de standaard. 826 00:38:20,060 --> 00:38:23,010 >> Dus dat is de reden waarom een ​​moment geleden toen ik deze URL hier, 827 00:38:23,010 --> 00:38:26,750 geen bestandsnaam, geen file verlenging, geen periode in de URL. 828 00:38:26,750 --> 00:38:29,710 Hij wist precies op magische om te zoeken naar index.php. 829 00:38:29,710 --> 00:38:30,870 Het is gewoon een conventie. 830 00:38:30,870 --> 00:38:32,360 Alles onder de noemer. 831 00:38:32,360 --> 00:38:35,110 >> Dus als ik nu in index.php, zie je 832 00:38:35,110 --> 00:38:37,100 dat, indeed-- laten zich te ontdoen van de opmerkingen 833 00:38:37,100 --> 00:38:39,500 hier, want er is echt niets interessants te het-- 834 00:38:39,500 --> 00:38:41,579 dit is gewoon hard gecodeerd HTML. 835 00:38:41,579 --> 00:38:43,370 Dus dat is consistent, hoewel, met mijn claim 836 00:38:43,370 --> 00:38:45,230 dat je kunt vermengen HTML en PHP. 837 00:38:45,230 --> 00:38:48,060 Er is geen werkelijke programmeerlogica in hier. 838 00:38:48,060 --> 00:38:51,030 >> En de andere bestanden zijn vrij veel net zo oninteressant. 839 00:38:51,030 --> 00:38:56,240 Het is gewoon hard-coded week één hier tot week één m en week een w, 840 00:38:56,240 --> 00:38:57,510 voor maandag en woensdag. 841 00:38:57,510 --> 00:39:01,890 En als ik dan openstellen week nul, merkt het is bijna identiek. 842 00:39:01,890 --> 00:39:03,320 >> En dat is een soort van een sleutel mee te nemen. 843 00:39:03,320 --> 00:39:06,180 Merk op hoe overbodig is. 844 00:39:06,180 --> 00:39:10,710 Deze bestanden nauwelijks veranderen, en toch heb ik trok een van deze copy / paste banen 845 00:39:10,710 --> 00:39:13,420 waar ik nam een ​​file-- vermoedelijk in week zero-- het gekopieerde 846 00:39:13,420 --> 00:39:16,320 toen week één kwam rond, en getweaked een paar waarden. 847 00:39:16,320 --> 00:39:18,590 Waarschijnlijk moeten we in staat zijn beter dan dit. 848 00:39:18,590 --> 00:39:21,800 >> Dus laten we gaan terug naar mvc en ga in één versie. 849 00:39:21,800 --> 00:39:24,810 En zie ik heb een gekregen paar bestanden, want wat 850 00:39:24,810 --> 00:39:29,870 was die voor al deze bestanden slechts Momenteel ago-- als ik terug naar versie 0, 851 00:39:29,870 --> 00:39:32,600 Laten we terug gaan in de index, en gewoon postulate-- 852 00:39:32,600 --> 00:39:36,090 zodra ik te ontdoen van de comments-- welk deel van deze pagina 853 00:39:36,090 --> 00:39:40,072 is vermoedelijk in een ieder van mijn bestanden? 854 00:39:40,072 --> 00:39:40,780 Noem het maar uit. 855 00:39:40,780 --> 00:39:44,620 Welke lijnen worden gedupliceerd waarschijnlijk in al deze pagina's? 856 00:39:44,620 --> 00:39:45,120 Yeah? 857 00:39:45,120 --> 00:39:46,110 >> STUDENT: [onverstaanbaar]. 858 00:39:46,110 --> 00:39:47,660 >> DAVID J. MALAN: 1 tot en met 9. 859 00:39:47,660 --> 00:39:48,720 Ja, absoluut. 860 00:39:48,720 --> 00:39:52,080 1 tot 9, behalve misschien 8 verandert een klein beetje omdat CS50 861 00:39:52,080 --> 00:39:54,650 wordt lezingen of week nul of iets. 862 00:39:54,650 --> 00:39:55,970 Maar vrijwel identiek. 863 00:39:55,970 --> 00:39:58,657 Dus al dit spul is gewoon soort gekopieerd en geplakt. 864 00:39:58,657 --> 00:40:00,490 En er is een paar andere lijnen die ik kan bedenken 865 00:40:00,490 --> 00:40:05,000 van dat zijn waarschijnlijk identiek over alle bestanden. 866 00:40:05,000 --> 00:40:06,315 >> STUDENT: 12 en 13. 867 00:40:06,315 --> 00:40:07,190 DAVID J. MALAN: Yeah. 868 00:40:07,190 --> 00:40:11,220 Tuurlijk, 12, 13, en 14 waarschijnlijk, gewoon omdat het interessant spul 869 00:40:11,220 --> 00:40:15,460 gebeurt op de lijnen 11 en 10, zo lijkt het. 870 00:40:15,460 --> 00:40:18,350 Dus laten we eens kijken naar versie 1, dat probeert om dit te verbeteren. 871 00:40:18,350 --> 00:40:24,020 In versie 1 van deze MVC example-- zullen we uitleggen wat mvc middel in een moment-- 872 00:40:24,020 --> 00:40:27,420 als ik ga in index, het soort ziet er een beetje verwarrend nu. 873 00:40:27,420 --> 00:40:28,880 Het is niet zo eenvoudig als voorheen. 874 00:40:28,880 --> 00:40:30,906 >> Maar als je eenmaal begint te lees het aandachtig, het is 875 00:40:30,906 --> 00:40:32,530 vrij eenvoudig wat het doet. 876 00:40:32,530 --> 00:40:34,397 Blijkbaar lijn 1 en lijn 8 hebben vervangen 877 00:40:34,397 --> 00:40:37,230 alle van de spullen die je gewoon identified-- hoewel slechts voor een goede maatregel, 878 00:40:37,230 --> 00:40:41,900 Ik verliet de UGT er voor het geval dat sommige dagen niet over een lijst van dingen. 879 00:40:41,900 --> 00:40:47,860 En dit vereist is een soort pond onder meer in C. Het kopieert en plakt 880 00:40:47,860 --> 00:40:50,470 de inhoud effectief hier in dit bestand. 881 00:40:50,470 --> 00:40:53,650 >> Dus in header.php, zoals u kunnen afleiden uit de naam, 882 00:40:53,650 --> 00:40:55,330 zal de kop van de pagina zijn. 883 00:40:55,330 --> 00:40:57,110 Het is hier soort weeskinderen. 884 00:40:57,110 --> 00:41:01,820 Het heeft slechts de top, maar er is geen inhoud meer hieronder. 885 00:41:01,820 --> 00:41:05,070 >> En als ik kijk naar voettekst ondertussen, die het andere bestand was mentioned-- 886 00:41:05,070 --> 00:41:08,830 dit is nog minder interessant, maar nogmaals, het is gebruikelijk om alles. 887 00:41:08,830 --> 00:41:10,250 Dus dit is de voettekst. 888 00:41:10,250 --> 00:41:11,300 Dit is de header. 889 00:41:11,300 --> 00:41:13,950 Dit is het bestand dat is het veranderen, dus waarom niet 890 00:41:13,950 --> 00:41:18,140 proberen om factor uit de gemeenschappelijkheid met deze twee lijnen hier? 891 00:41:18,140 --> 00:41:20,090 >> Maar we kunnen deze reinigen een beetje verder. 892 00:41:20,090 --> 00:41:23,260 Ik ga om te gaan en openstellen versie twee waar 893 00:41:23,260 --> 00:41:27,106 we zullen zien dat er een nieuw bestand, helpers.php. 894 00:41:27,106 --> 00:41:28,610 We zullen zien wat dat is in een moment. 895 00:41:28,610 --> 00:41:30,930 Laten we gaan naar de index, zoals de toegangspunt als voorheen. 896 00:41:30,930 --> 00:41:35,230 >> En nu merk ik nodig helpers.php, geen kop- of voettekst. 897 00:41:35,230 --> 00:41:41,720 Maar helpers is een soort helpers.c en helpers.h uit PSET 2 898 00:41:41,720 --> 00:41:46,150 of PSET 3 lang geleden, toen je eigenlijk heeft gezocht en gevonden in dat PSET, 899 00:41:46,150 --> 00:41:50,950 en je moest al je code voor het sorteren en het zoeken in een apart bestand. 900 00:41:50,950 --> 00:41:52,510 Dat is wat er aan de hand hier. 901 00:41:52,510 --> 00:41:54,390 >> En nu lijn 3 ziet er een beetje anders uit. 902 00:41:54,390 --> 00:41:55,920 En het is gewoon een regel. 903 00:41:55,920 --> 00:41:57,950 Om dit nog meer te maken duidelijk, ik kon gewoon 904 00:41:57,950 --> 00:42:01,820 doen dit om stilistisch consequent zijn met alles wat we hebben gedaan. 905 00:42:01,820 --> 00:42:04,130 Maar dat is niet echt het veranderen van de functionaliteit. 906 00:42:04,130 --> 00:42:05,880 Het is gewoon een regel van de echte code. 907 00:42:05,880 --> 00:42:09,010 >> Blijkbaar is er een functie ergens genoemd maken header, 908 00:42:09,010 --> 00:42:11,420 en dit is waar de dingen behoorlijk krachtig. 909 00:42:11,420 --> 00:42:17,040 Merk op dat de binnenkant van haar haakjes is wat ander stuk van syntax? 910 00:42:17,040 --> 00:42:19,780 911 00:42:19,780 --> 00:42:23,350 Het is waarschijnlijk een beetje moeilijk om te zeggen, maar merken there's-- ik wat witte kom zetten 912 00:42:23,350 --> 00:42:24,300 ruimte. 913 00:42:24,300 --> 00:42:25,530 Er is tussen vierkante haken. 914 00:42:25,530 --> 00:42:29,700 >> En vierkante haken we een beetje geleden zag in de context van associatieve arrays, 915 00:42:29,700 --> 00:42:31,580 die, wederom, zoals hash tabellen. 916 00:42:31,580 --> 00:42:36,230 En als je nu denkt aan C, de volgorde van argumenten in een functie 917 00:42:36,230 --> 00:42:37,570 moet altijd hetzelfde zijn. 918 00:42:37,570 --> 00:42:41,146 Je moet niet vergeten wat de bestellen is-- x, y, z of z, y, x-- 919 00:42:41,146 --> 00:42:44,020 en je moet ze altijd in dezelfde volgorde of zoek ze op 920 00:42:44,020 --> 00:42:45,100 als je bent vergeten. 921 00:42:45,100 --> 00:42:51,140 >> Maar dit lijkt een slimme manier te zijn van het passeren van een willekeurige sleutel waarde 922 00:42:51,140 --> 00:42:55,840 paren waarbij de titel is de naam van een argument in dit geval 923 00:42:55,840 --> 00:42:58,334 en CS50 is de waarde ervan. 924 00:42:58,334 --> 00:43:00,250 En het feit dat ik heb deze haken 925 00:43:00,250 --> 00:43:02,560 betekent hier dat ik kon ook doorgeven in iets 926 00:43:02,560 --> 00:43:07,550 zoals een week is 1 of 0 of 2 of 3. 927 00:43:07,550 --> 00:43:10,550 Dus hebben we geparametriseerd deze functie zodanig 928 00:43:10,550 --> 00:43:15,180 dat het meerdere ingangen kunnen nemen, maar voor nu is het gewoon de ene. 929 00:43:15,180 --> 00:43:20,060 >> Als ik nu in helpers.php, merkt wat het doet. 930 00:43:20,060 --> 00:43:22,030 Dit is een beetje van nieuwe functionaliteit, 931 00:43:22,030 --> 00:43:24,190 maar voor nu gewoon op het geloof dat dit 932 00:43:24,190 --> 00:43:26,570 de syntax waarmee je definieer een functie in PHP. 933 00:43:26,570 --> 00:43:27,840 Je zegt letterlijk functie. 934 00:43:27,840 --> 00:43:30,090 U hoeft niet een terugkeer vermeld typt, en dat is consequent 935 00:43:30,090 --> 00:43:33,880 met de variabele detail eerder waar je niet echt sterk te typen. 936 00:43:33,880 --> 00:43:35,650 >> Dit specificeert gewoon dat, door gebrek, deze 937 00:43:35,650 --> 00:43:37,460 neemt een associatieve matrix als argument. 938 00:43:37,460 --> 00:43:38,210 En weet je wat? 939 00:43:38,210 --> 00:43:41,450 Als de gebruiker niet voorbij één in, neem een ​​standaardwaarde. 940 00:43:41,450 --> 00:43:44,680 >> Dit is een functie die C niet hebben voor ons, dat is leuk, want nu 941 00:43:44,680 --> 00:43:46,430 data, zelfs als u geef het niet om het even wat, 942 00:43:46,430 --> 00:43:49,300 gaat om een ​​te zijn serie maar een lege. 943 00:43:49,300 --> 00:43:51,860 En als een terzijde, extract gewoon iets funky doet 944 00:43:51,860 --> 00:43:56,380 waar het neemt alle van de sleutels van deze associatieve array, alle dingen 945 00:43:56,380 --> 00:43:59,950 je kon in vierkante haakjes gezet, en creëert variabelen uit hen 946 00:43:59,950 --> 00:44:06,270 zodat we uiteindelijk kunnen hebben toegang om ze in footet.php en header.php. 947 00:44:06,270 --> 00:44:08,950 Dat is een beetje abstract, dus laat me hierop wijzen. 948 00:44:08,950 --> 00:44:12,990 >> In index.php, merk dat ik ben passeren in een belangrijke waarde paar van titel 949 00:44:12,990 --> 00:44:14,850 met een waarde van CS50. 950 00:44:14,850 --> 00:44:18,660 Als ik nu kijk naar helpers.php, merken dat RenderHeader 951 00:44:18,660 --> 00:44:23,870 is het extraheren van de gegevens die ik voorbij in, en dan die header.php. 952 00:44:23,870 --> 00:44:27,970 Wat ik heb gedaan is een soort van een arme man implementatie nu van het volgende. 953 00:44:27,970 --> 00:44:31,720 >> Als ik openstellen header.php, mede dat ik heb niet meer moeilijk 954 00:44:31,720 --> 00:44:34,890 gecodeerd het woord CS50 in deze header file. 955 00:44:34,890 --> 00:44:39,310 Ik heb dit zette weliswaar gruwelijk benoemde functie, HTML speciale tekens, 956 00:44:39,310 --> 00:44:40,170 in daar. 957 00:44:40,170 --> 00:44:41,640 Maar let op wat ik heb gedaan. 958 00:44:41,640 --> 00:44:44,240 Ik heb geopend HTML. 959 00:44:44,240 --> 00:44:47,420 Ik heb dan open hoofd en een open titel. 960 00:44:47,420 --> 00:44:52,380 >> En dan de binnenkant van de titel open en dicht-tags, ik heb een beetje PHP-code. 961 00:44:52,380 --> 00:44:56,670 En dit is een mooi maar van syntax, hetgeen betekent gewoon echo uit. 962 00:44:56,670 --> 00:44:59,840 Het betekent letterlijk dit-- echo de following-- 963 00:44:59,840 --> 00:45:01,910 maar dit is sexier om te schrijven. 964 00:45:01,910 --> 00:45:05,000 Echo uit de titel dat is al gepasseerd in. 965 00:45:05,000 --> 00:45:07,560 >> Maar wat denk je HTML speciale char is alles over, 966 00:45:07,560 --> 00:45:10,590 vooral als u sommige eerdere HTML-ervaring? 967 00:45:10,590 --> 00:45:14,050 Welke personages zou kunnen zijn gevaarlijk in overgaan naar een pagina 968 00:45:14,050 --> 00:45:17,980 waar je bent dynamisch genereren de webpagina met code als deze? 969 00:45:17,980 --> 00:45:21,370 970 00:45:21,370 --> 00:45:24,650 Laat me gaan naar dit bestand, versie twee, en kijken of ik niet dit kan induceren. 971 00:45:24,650 --> 00:45:26,210 >> Versie twee is dit. 972 00:45:26,210 --> 00:45:28,510 En merk op alles is prima, goed werkt. 973 00:45:28,510 --> 00:45:35,280 Maar stel dat ik in index.php en Ik vermeld dat de titel van mijn pagina 974 00:45:35,280 --> 00:45:36,630 is niet CS50. 975 00:45:36,630 --> 00:45:44,930 Het is geopend beugel script alert hallo wereld, dicht enkel aanhalingsteken, 976 00:45:44,930 --> 00:45:49,740 haakje sluiten, puntkomma, haakje openen, slash script. 977 00:45:49,740 --> 00:45:51,897 >> Script, zoals we zullen uiteindelijk zien, is een tag 978 00:45:51,897 --> 00:45:54,480 die u kunt gebruiken om het gebruik van een andere programmeertaal 979 00:45:54,480 --> 00:45:56,330 JavaScript binnenkant van een webpagina. 980 00:45:56,330 --> 00:45:57,960 En let nu op de logica hier. 981 00:45:57,960 --> 00:45:59,840 Hier is een sleutel genaamd titel. 982 00:45:59,840 --> 00:46:02,690 Hier is het is gek lang waarde nu. 983 00:46:02,690 --> 00:46:07,840 >> Maar als ik naar de helpers pagina- of liever gezegd, het voorblad, 984 00:46:07,840 --> 00:46:11,310 Ik ben het oproepen van deze functie op die titel als eerste. 985 00:46:11,310 --> 00:46:15,250 Dus als ik nu de pagina verversen, I zie dit, dat belachelijk uitziet, 986 00:46:15,250 --> 00:46:16,110 maar het is veilig. 987 00:46:16,110 --> 00:46:17,310 Het ziet er gewoon dom. 988 00:46:17,310 --> 00:46:20,320 >> Maar stel dat in plaats Ik had dit vergeten. 989 00:46:20,320 --> 00:46:24,660 En let op mijn woorden, een niet-nul getal van u zal vergeten om dit te doen 990 00:46:24,660 --> 00:46:27,790 en je krijgt een aantal nijvere student of vriend op komst 991 00:46:27,790 --> 00:46:31,540 om u op de CS50 beurs of anoniem 's nachts rondneuzen op uw website 992 00:46:31,540 --> 00:46:35,300 en in wezen het injecteren van code u niet weet dat in uw site 993 00:46:35,300 --> 00:46:35,800 een of andere manier. 994 00:46:35,800 --> 00:46:39,000 >> Want als ik gewoon spuug uit de titel hier en titel 995 00:46:39,000 --> 00:46:44,330 er-- goed, als titel letterlijk ziet er zo uit en PHP 996 00:46:44,330 --> 00:46:47,660 als een taal die kan spugen uit andere talen tekst, 997 00:46:47,660 --> 00:46:50,650 Dit gaat letterlijk om deze tag te vervangen door, 998 00:46:50,650 --> 00:46:53,010 natuurlijk, wat ik elders. 999 00:46:53,010 --> 00:46:57,640 >> Dus als ik nu ga hier en herladen na het ongedaan maken van de veiligheid mechanismen, 1000 00:46:57,640 --> 00:46:59,982 nu heb ik hallo wereld hier. 1001 00:46:59,982 --> 00:47:02,690 Nu is dat niet zo groot van een omgaan, maar je kon iets doen 1002 00:47:02,690 --> 00:47:05,119 een beetje meer kwaadaardige hier, alsof er 1003 00:47:05,119 --> 00:47:08,410 andere tags-- zoals we zullen zien als we besteden meer tijd in JavaScript-- als locatie 1004 00:47:08,410 --> 00:47:14,910 dot href krijgt, citaat, unquote, HTTP business.com, maar het tegenovergestelde van dat 1005 00:47:14,910 --> 00:47:15,950 van de andere dag. 1006 00:47:15,950 --> 00:47:20,120 En nu kunt u een web induceren pagina om daadwerkelijk meteen gaan 1007 00:47:20,120 --> 00:47:21,190 naar deze webpagina hier. 1008 00:47:21,190 --> 00:47:23,000 >> En eigenlijk, ik wil niet om zelfs naar business.com 1009 00:47:23,000 --> 00:47:24,749 omdat ik niet wil om te weten wat dat is. 1010 00:47:24,749 --> 00:47:28,710 Maar dit zal ook van code om te worden geïnjecteerd in deze pagina. 1011 00:47:28,710 --> 00:47:32,680 Dus dit is slechts zeggen dat hoewel introduceren we super vroeg op sommige 1012 00:47:32,680 --> 00:47:36,800 Deze meer complexe structuren, het is allemaal in de richting van een einde van ervoor te zorgen 1013 00:47:36,800 --> 00:47:39,320 dat uw code is niet misbruikt. 1014 00:47:39,320 --> 00:47:40,960 >> Dus nu een derde versie hier. 1015 00:47:40,960 --> 00:47:42,470 Het wordt een beetje aantrekkelijker. 1016 00:47:42,470 --> 00:47:44,875 Ik heb niet echt like-- de anale kant van mij 1017 00:47:44,875 --> 00:47:47,750 was een beetje geïrriteerd door de feit dat ik had een functie genaamd 1018 00:47:47,750 --> 00:47:51,940 RenderHeader en RenderFooter dat bijna identiek. 1019 00:47:51,940 --> 00:47:55,400 Dus bedacht ik me, waarom niet Ik parametriseren deze functies 1020 00:47:55,400 --> 00:47:59,180 in slechts één genoemd te maken, hebben het tot een tweede argument te nemen 1021 00:47:59,180 --> 00:48:04,420 zoals de naam van het sjabloon, de uiteindelijke om ofwel kop- of voettekst render--? 1022 00:48:04,420 --> 00:48:07,160 En dan naar keuze, als ik wil door te geven in een aantal belangrijke waarde-paren 1023 00:48:07,160 --> 00:48:10,580 zoals ik doe voor de titel voor de header, maar niet voor de voettekst, 1024 00:48:10,580 --> 00:48:11,800 Ik kon dat doen. 1025 00:48:11,800 --> 00:48:16,510 >> En dus nu als ik ga in helpers.php, het is een beetje ingewikkelder. 1026 00:48:16,510 --> 00:48:19,670 En ik zal mijn handen zwaaien naar de details, maar het is gewoon een functie. 1027 00:48:19,670 --> 00:48:21,890 Dus dat is een stap in de richting van een beter ontwerp. 1028 00:48:21,890 --> 00:48:23,360 >> We kunnen nog een stap verder te brengen. 1029 00:48:23,360 --> 00:48:28,890 Als ik in mijn vierde versie van deze, merk nu 1030 00:48:28,890 --> 00:48:31,320 dat ik iets te doen nog meer soort cryptisch. 1031 00:48:31,320 --> 00:48:33,230 En ik weet dat dit een veel tegelijk absorberen, 1032 00:48:33,230 --> 00:48:35,080 maar we zijn gewoon een soort van het schoonmaken van dingen. 1033 00:48:35,080 --> 00:48:38,550 Nu ben ik het zetten van mijn helpers bestand in een map met de naam 1034 00:48:38,550 --> 00:48:41,190 includes-- gewoon een willekeurige te noemen waar ik wil spullen 1035 00:48:41,190 --> 00:48:44,300 dat wil ik include-- en vervolgens de rest is hetzelfde. 1036 00:48:44,300 --> 00:48:47,140 >> Maar als ik kijk nu in gedit, mede dat ik ontdoen heb gekregen 1037 00:48:47,140 --> 00:48:51,940 van al die andere bestanden en ik heb verhuisden ze, bijvoorbeeld, in hier. 1038 00:48:51,940 --> 00:48:55,110 En vervolgens in de sjablonen, Ik heb dit ook hier. 1039 00:48:55,110 --> 00:48:59,292 En dus is dit nu allemaal in de richting van een stap van het gebruik van een veel beter ontwerp patroon. 1040 00:48:59,292 --> 00:49:01,000 En we zijn zeer snel van plan om weg te gaan 1041 00:49:01,000 --> 00:49:03,870 van PHP's standaard functionaliteit, die we hier begonnen met, 1042 00:49:03,870 --> 00:49:07,655 waar je gewoon vermengen PHP, en uw HTML en CSS, 1043 00:49:07,655 --> 00:49:09,780 en je gewoon spuug het uit en ga je over je weg. 1044 00:49:09,780 --> 00:49:11,404 Het gaat niet erg onderhoudbaar te zijn. 1045 00:49:11,404 --> 00:49:14,481 Net als in C, zijn we begonnen met behulp van meerdere bestanden en meerdere functies 1046 00:49:14,481 --> 00:49:15,730 en factoring dingen die eruit. 1047 00:49:15,730 --> 00:49:16,688 We zullen hier hetzelfde te doen. 1048 00:49:16,688 --> 00:49:19,970 En in feite, in de vijfde en laatste versie hier, ik heb een ander ding. 1049 00:49:19,970 --> 00:49:23,710 U kunt zelfs gebruik maken van dot dot, die, weer, is gewoon de bovenliggende directory. 1050 00:49:23,710 --> 00:49:28,260 Om nog meer zekerheid bewust te zijn, want als ik kijk naar de luisterpositie 1051 00:49:28,260 --> 00:49:32,450 hier voor de vijfde en laatste versie, bericht dat heb ik één directory hier genoemd 1052 00:49:32,450 --> 00:49:35,180 publiek, en dan op de hetzelfde niveau als het ware, 1053 00:49:35,180 --> 00:49:38,490 Ik heb omvat en templates en dan die tekst bestand readme. 1054 00:49:38,490 --> 00:49:41,130 >> En de reden dat ik heb opgebouwd het dit-- en zo veel web graag 1055 00:49:41,130 --> 00:49:44,330 hosts, vooral die $ 5 per maand degenen of $ 10 maand degenen, 1056 00:49:44,330 --> 00:49:47,170 als je ooit een van deze hebt gehad services-- wat zo velen van hen doen 1057 00:49:47,170 --> 00:49:50,690 is ze gewoon verwachten dat je alles te dumpen van uw bestanden in een directory, 1058 00:49:50,690 --> 00:49:53,640 als we wisten al met dit eerste voorbeeld. 1059 00:49:53,640 --> 00:49:56,740 >> Maar zodra je begint het bouwen van meer verfijnde sites die net slaan 1060 00:49:56,740 --> 00:50:00,480 gegevens die u belangrijk vindt en bestanden die u zorg over, eigenlijk dingen te organiseren 1061 00:50:00,480 --> 00:50:05,060 correct en met meer zekerheid bewustzijn in het achterhoofd kan 1062 00:50:05,060 --> 00:50:07,927 we beginnen te verdedigen tegen alle vrienden 1063 00:50:07,927 --> 00:50:10,135 dat je ofwel in of buiten deze klasse die 1064 00:50:10,135 --> 00:50:12,510 Zodra u begint met het maken van zelf programma's op het web, 1065 00:50:12,510 --> 00:50:15,140 gaan beginnen met het plukken op jou en op hen. 1066 00:50:15,140 --> 00:50:17,420 >> En dus zullen we kijken uiteindelijk op dit ontwerp. 1067 00:50:17,420 --> 00:50:20,010 Dit is gewoon een plaatje dat toont het volgende. 1068 00:50:20,010 --> 00:50:22,897 We gaan al zetten onze programmeren logische één of meer bestanden, 1069 00:50:22,897 --> 00:50:25,230 en we gaan gewoon beginnen roepen deze controllers. 1070 00:50:25,230 --> 00:50:28,022 Het is waar de hersenen van onze websites eigenlijk zijn. 1071 00:50:28,022 --> 00:50:29,730 Dan gaan we naar hebben uitzicht, en het uitzicht 1072 00:50:29,730 --> 00:50:32,480 zijn zo simpel als gewoon apart files-- genaamd sjablonen, vaak. 1073 00:50:32,480 --> 00:50:34,410 Ze hoeven alleen maar de esthetiek van mijn pagina, 1074 00:50:34,410 --> 00:50:37,020 wat ik wil op deze pagina te kijken like-- de kleuren en de lay-out 1075 00:50:37,020 --> 00:50:38,870 en de posities van alle variabelen. 1076 00:50:38,870 --> 00:50:41,120 >> En dan interessanter dat we uiteindelijk zullen krijgen om 1077 00:50:41,120 --> 00:50:45,420 is het model, die gaat gewoon het woord dat we klap op andere technologieën 1078 00:50:45,420 --> 00:50:47,771 wij brengen in de beeld, zoals werkelijke databases, 1079 00:50:47,771 --> 00:50:49,520 zodat wanneer je wilt om informatie op te slaan, 1080 00:50:49,520 --> 00:50:52,140 je niet zomaar een email sturen om uw Proctor of aan jezelf, 1081 00:50:52,140 --> 00:50:57,350 u daadwerkelijk op te slaan in een database een andere taal bekend als SQL. 1082 00:50:57,350 --> 00:51:00,450 En dus zullen we hier vandaag verlaten en pick-up met dit op woensdag 1083 00:51:00,450 --> 00:51:02,990 en de invoering van databases dan. 1084 00:51:02,990 --> 00:51:06,940 >> [Muziek] 1085 00:51:06,940 --> 00:54:24,555