1 00:00:00,000 --> 00:00:11,330 2 00:00:11,330 --> 00:00:12,360 >> DAVID Malan: Molt bé. 3 00:00:12,360 --> 00:00:15,970 Aquest és CS50, i això és Al final de la setmana nou. 4 00:00:15,970 --> 00:00:18,560 Ha estat un remolí sobre els últims dies. 5 00:00:18,560 --> 00:00:21,580 I un problema conjunt de set, si ets de genoll profundament en ella, s'adonen que hi ha un bon 6 00:00:21,580 --> 00:00:23,340 poc nou que hi és. 7 00:00:23,340 --> 00:00:26,660 Però anem a veure si no podem piece tot junt aquí breument 8 00:00:26,660 --> 00:00:29,230 abans després de virar en encara una altra direcció i visió 9 00:00:29,230 --> 00:00:30,510 On més podem anar. 10 00:00:30,510 --> 00:00:32,630 >> Així que fins ara, hem parlat d'HTML. 11 00:00:32,630 --> 00:00:33,740 Hem parlat de CSS. 12 00:00:33,740 --> 00:00:34,705 Hem parlat de PHP. 13 00:00:34,705 --> 00:00:36,520 Vostè ha començat a experimentar SQL. 14 00:00:36,520 --> 00:00:38,360 Avui, parlarem una mica sobre JavaScript. 15 00:00:38,360 --> 00:00:41,230 Però, com fer tot això dispars idiomes encaixen? 16 00:00:41,230 --> 00:00:44,970 >> Així que parlem la setmana passada sobre la noció de tenir un servidor. 17 00:00:44,970 --> 00:00:48,470 Així que anem a dibuixar aquest rectangle com un servidor web aquí. 18 00:00:48,470 --> 00:00:52,200 I un servidor web serveix segurament arxius. 19 00:00:52,200 --> 00:00:54,640 I alguns d'aquests arxius poden ser arxius HTML. 20 00:00:54,640 --> 00:00:58,270 Així que una de les coses que un servidor web pot escopir podria ser un arxiu que 21 00:00:58,270 --> 00:01:01,290 només haurem de dibuixar com aquest conté alguna cosa d'HTML. 22 00:01:01,290 --> 00:01:04,786 Així que en termes simples, el que no HTML et deixa fer? 23 00:01:04,786 --> 00:01:06,036 >> AUDIÈNCIA: Pàgina vegi bonic. 24 00:01:06,036 --> 00:01:09,670 25 00:01:09,670 --> 00:01:12,310 >> DAVID Malan: OK, fer una pàgina veuen bé, encara que crec que he demostrat 26 00:01:12,310 --> 00:01:13,370 que d'altra manera. 27 00:01:13,370 --> 00:01:18,250 Així HTML no permeten distribuir les pàgines estructuralment, i que li permet 28 00:01:18,250 --> 00:01:22,410 espècie d'estètica marcar una pàgina, marcar el contingut estàtic, de manera que 29 00:01:22,410 --> 00:01:23,640 llavors pot veure amb un navegador web. 30 00:01:23,640 --> 00:01:24,690 >> Però aquesta és la clau. 31 00:01:24,690 --> 00:01:26,130 És el contingut estàtic. 32 00:01:26,130 --> 00:01:28,590 Vostè escriu, el guarda, i després vostè ho envia. 33 00:01:28,590 --> 00:01:31,130 I el servidor web serveix llavors en mans dels seus visitants. 34 00:01:31,130 --> 00:01:35,700 >> Però ens estilitzen coses usant una diferent idioma completament. 35 00:01:35,700 --> 00:01:40,150 Comencem a utilitzar un atribut d'estil en certes etiquetes. 36 00:01:40,150 --> 00:01:43,400 I l'atribut d'estil Posem-nos coses com la mida de la font i el color. 37 00:01:43,400 --> 00:01:46,460 I és probable que hagi començat a descobrir, o aviat ho sabrà per última 38 00:01:46,460 --> 00:01:50,160 projectes potencialment, però, una altra propietats que es poden utilitzar en el CSS. 39 00:01:50,160 --> 00:01:54,710 I així, en termes senzills, el que llavors realment fa CSS? 40 00:01:54,710 --> 00:01:57,810 Aquests són només alguns exemples dels mateixos. 41 00:01:57,810 --> 00:02:00,730 Què farem això HTML no sembla d'allò 42 00:02:00,730 --> 00:02:02,606 que hem vist fins ara? 43 00:02:02,606 --> 00:02:04,850 >> AUDIÈNCIA: Definir estils per tu mateix. 44 00:02:04,850 --> 00:02:06,700 >> DAVID Malan: Definir estils per si mateix. 45 00:02:06,700 --> 00:02:10,280 Així que definir les coses com les classes a mesura que pot haver trobat, o únicament 46 00:02:10,280 --> 00:02:13,800 identificar els nodes d'un document per que es pot estilitzar ells. 47 00:02:13,800 --> 00:02:16,890 Però més específicament, jo diria que el CSS realment li permet prendre les coses de la 48 00:02:16,890 --> 00:02:20,790 última milla i li permet especificar molt més precisament l'estètica, 49 00:02:20,790 --> 00:02:24,340 mentre que HTML en la seva major part permet a estructurar les seves pàgines. 50 00:02:24,340 --> 00:02:27,310 >> I tot i que hi ha alguns valors per defecte, com vam veure l'etiqueta per 51 00:02:27,310 --> 00:02:30,690 una etiqueta de partida, que en termes generals fet coses grans i audaços. 52 00:02:30,690 --> 00:02:34,250 Aquesta és una definició bastant genèric de l'etiqueta - gran i en negreta. 53 00:02:34,250 --> 00:02:35,260 Què mida de la font és aquesta? 54 00:02:35,260 --> 00:02:36,080 De quin color és? 55 00:02:36,080 --> 00:02:36,890 Com negreta és això? 56 00:02:36,890 --> 00:02:39,830 I CSS li permet més precisió coses afinar l'estil. 57 00:02:39,830 --> 00:02:42,150 Així com el disseny, ja que alguns que has vist. 58 00:02:42,150 --> 00:02:45,180 >> I, francament, CSS és una mica d'un llenguatge desordenat. 59 00:02:45,180 --> 00:02:48,370 És molt poderós en que vostè pot fer literalment, qualsevol lloc web que vostè ha 60 00:02:48,370 --> 00:02:51,880 vist a la web avui en dia amb ell, però és un tipus de dolor al coll. 61 00:02:51,880 --> 00:02:54,440 I alguns de vosaltres heu colpejat el cap contra les parets ia només per fer 62 00:02:54,440 --> 00:02:58,560 alguna cosa estúpid com a centre d'un menú en problema va fixar 07:00 si vostè ha arribat a 63 00:02:58,560 --> 00:02:59,470 aquest punt ja. 64 00:02:59,470 --> 00:03:01,530 >> Però adonar-se, aquestes coses més fàcil amb el temps. 65 00:03:01,530 --> 00:03:02,820 Es comença a notar patrons. 66 00:03:02,820 --> 00:03:06,020 I un cop més, Google va a ser el seu amic per a les diverses formes en què es pot 67 00:03:06,020 --> 00:03:07,220 resoldre aquest tipus de problemes. 68 00:03:07,220 --> 00:03:11,520 >> I m'atreveixo a dir amb CSS i HTML més en general, pot resoldre els problemes de 69 00:03:11,520 --> 00:03:15,910 moltes més formes, la qual cosa podria molt bé ser correcta, del que podria 70 00:03:15,910 --> 00:03:18,900 en alguna cosa com C, fins i tot Ara PHP o JavaScript. 71 00:03:18,900 --> 00:03:21,080 Hi ha simplement molts diferents maneres d'establir les coses. 72 00:03:21,080 --> 00:03:22,570 >> Però això va començar a desordenat, vam dir. 73 00:03:22,570 --> 00:03:26,480 Només tipus de commingling seu HTML i el CSS amb l'atribut d'estil era 74 00:03:26,480 --> 00:03:27,590 una mica descuidat. 75 00:03:27,590 --> 00:03:31,460 I així que en comptes vam dir, una mena de parlant en abstracte, que vostè ha 76 00:03:31,460 --> 00:03:34,050 almenys començar amb el factor el teu CSS probablement. 77 00:03:34,050 --> 00:03:37,430 Atribueix No és el seu estil, però almenys utilitzar l'etiqueta d'estil dins del que 78 00:03:37,430 --> 00:03:38,840 part de la pàgina web? 79 00:03:38,840 --> 00:03:39,560 >> AUDIÈNCIA: Head. 80 00:03:39,560 --> 00:03:40,120 >> DAVID Malan: En el cap. 81 00:03:40,120 --> 00:03:43,270 Fins ara, només teníem el títol fins allà, però també es pot afegir un estil de 82 00:03:43,270 --> 00:03:47,230 etiqueta, i vostè pot posar el seu CSS més o menys parlant cap a la part superior de la pàgina. 83 00:03:47,230 --> 00:03:52,550 Però després ens vam donar un pas més coses i factorizada que més 84 00:03:52,550 --> 00:03:54,130 en un arxiu separat. 85 00:03:54,130 --> 00:03:57,240 >> I pel que aquests dos arxius van ser d'alguna manera ara vinculat. 86 00:03:57,240 --> 00:03:59,550 I de fet ho va ser el etiqueta que va fer això. 87 00:03:59,550 --> 00:04:02,920 I el que era un dels objectius globals motivacions per factoritzar nostra CSS 88 00:04:02,920 --> 00:04:04,057 encara més? 89 00:04:04,057 --> 00:04:05,280 >> AUDIÈNCIA: Reutilització. 90 00:04:05,280 --> 00:04:05,785 >> DAVID Malan: Reutilització. 91 00:04:05,785 --> 00:04:06,150 Cert? 92 00:04:06,150 --> 00:04:09,470 Vostè va poder haver vist en p-7 set ja que gran part de les pàgines, l' 93 00:04:09,470 --> 00:04:12,260 pàgina de compra, la pàgina de venda, el pàgina de la cartera, són probablement 94 00:04:12,260 --> 00:04:13,550 estructurat una cosa similar. 95 00:04:13,550 --> 00:04:17,579 Hi ha un logo finances CS50 a la part superior llevat que t'hagis decidit a canviar-lo. 96 00:04:17,579 --> 00:04:19,839 Hi ha un peu de pàgina en la part inferior de les pàgines. 97 00:04:19,839 --> 00:04:24,315 I CSS li permet llavors al factor fora en un arxiu separat de manera que si 98 00:04:24,315 --> 00:04:27,780 que desitja canviar alguna cosa a nivell mundial a través de tot el seu lloc, vostè pot realment 99 00:04:27,780 --> 00:04:29,390 només canvia en un sol lloc. 100 00:04:29,390 --> 00:04:32,750 >> Però hi ha un preu que es paga potencialment en haver un factor fora de la 101 00:04:32,750 --> 00:04:38,380 CSS del meu arxiu HTML en un a part arxiu que fa referència amb la 102 00:04:38,380 --> 00:04:40,650 etiqueta, que vam veure dilluns. 103 00:04:40,650 --> 00:04:43,850 Quin podria ser el costat negatiu d'això? 104 00:04:43,850 --> 00:04:48,830 Pensant fa una setmana per quan estem parlant d'HTTP i TCP / IP i com 105 00:04:48,830 --> 00:04:52,070 funciona Internet. 106 00:04:52,070 --> 00:04:53,530 Una mica per aquí? 107 00:04:53,530 --> 00:04:54,730 >> AUDIÈNCIA: Es necessita més temps. 108 00:04:54,730 --> 00:04:55,470 >> DAVID Malan: Es necessita més temps. 109 00:04:55,470 --> 00:04:56,750 Per què? 110 00:04:56,750 --> 00:04:59,450 >> AUDIÈNCIA: [inaudible]. 111 00:04:59,450 --> 00:04:59,750 >> DAVID Malan: Si. 112 00:04:59,750 --> 00:05:01,240 Per tant, es podria dir que té una mica més de temps. 113 00:05:01,240 --> 00:05:04,290 Perquè un, el CSS és, òbviament, no en el mateix arxiu. 114 00:05:04,290 --> 00:05:06,920 Així que ara vostè ha de no fer un, sinó dos peticions. 115 00:05:06,920 --> 00:05:11,230 I cadascuna d'aquestes peticions, com vam veure en Chrome en l'anomenat inspector, 116 00:05:11,230 --> 00:05:15,740 i ens fixem en la fitxa de xarxa, cadascuna d'aquests arxius requereix un HTTP 117 00:05:15,740 --> 00:05:18,360 sol · licitud, que vam veure fa una certa quantitat de temps. 118 00:05:18,360 --> 00:05:19,290 Ara, potser no és molt. 119 00:05:19,290 --> 00:05:20,670 Potser és només 20 mil · lisegons. 120 00:05:20,670 --> 00:05:22,260 Potser és 200 mil · lisegons. 121 00:05:22,260 --> 00:05:25,530 >> Però pensar en una pàgina com Facebook, o CNN, o Google, que són molt 122 00:05:25,530 --> 00:05:28,060 més grans que els exemples que hem mirat fins ara. 123 00:05:28,060 --> 00:05:32,070 Aquestes pàgines poden tenir desenes d'arxius, cadascun del que podria requerir un 124 00:05:32,070 --> 00:05:33,550 descàrrega d'un arxiu. 125 00:05:33,550 --> 00:05:35,800 Així que les coses poden potencialment començarà a disminuir. 126 00:05:35,800 --> 00:05:39,280 >> I sobretot en aquests dies en què tots tenen telèfons mòbils a la butxaca i 127 00:05:39,280 --> 00:05:43,010 connexions d'Internet més lentes, havent de esperar uns quants mil · lisegons, uns pocs 128 00:05:43,010 --> 00:05:46,110 més milisegons addicional arxius en realitat pot ser lent. 129 00:05:46,110 --> 00:05:50,430 La latència és la paraula que descriu la tipus d'esperar que vostè ha de 130 00:05:50,430 --> 00:05:53,110 experiència quan s'espera alguna peça d'informació. 131 00:05:53,110 --> 00:05:54,430 >> Però hi ha un costat positiu. 132 00:05:54,430 --> 00:05:56,600 Així que no tot és una espècie de - 133 00:05:56,600 --> 00:05:58,170 que en realitat és una mica d'un puja i baixa aquí. 134 00:05:58,170 --> 00:06:02,970 Downside ara, però el que els navegadors poden fer si són intel · ligents, per tal d'evitar 135 00:06:02,970 --> 00:06:08,870 haver de sol · licitar el mateix styles.css nou arxiu pot ser per fer què? 136 00:06:08,870 --> 00:06:09,390 >> Memòria cau ella. 137 00:06:09,390 --> 00:06:10,370 Així que l'emmagatzematge en memòria cau - 138 00:06:10,370 --> 00:06:11,690 C-A-C-H-I - 139 00:06:11,690 --> 00:06:15,810 generalment significa aquí només per salvar el presentar la seva sol · licitud per primera vegada, i 140 00:06:15,810 --> 00:06:17,440 a continuació, comproveu la memòria cau per a això. 141 00:06:17,440 --> 00:06:20,400 Assegura't que ets una mena de contenidor d'emmagatzematge, i si vostè ja té un 142 00:06:20,400 --> 00:06:24,520 còpia de styles.css, encara que algun altre pàgina en el p-set, o de qualsevol lloc web, 143 00:06:24,520 --> 00:06:28,560 demana de nou, només per donar la usuari que mateixa còpia en memòria cau. 144 00:06:28,560 --> 00:06:30,140 No et molestis a demanar-lo. 145 00:06:30,140 --> 00:06:32,560 >> Downside allà, però, com alguns de vostès han ensopegat amb la p-set. 146 00:06:32,560 --> 00:06:35,870 Si es fa un canvi al servidor i vostè torna al navegador i que 147 00:06:35,870 --> 00:06:39,250 recarregar, de vegades el navegador fa un favor i no es molesta 148 00:06:39,250 --> 00:06:43,660 tornar a descarregar l'arxiu styles.css perquè, anem, quines són les probabilitats 149 00:06:43,660 --> 00:06:47,620 que aquests estils que Facebook utilitza canviaran hora a hora o 150 00:06:47,620 --> 00:06:48,140 dia a dia? 151 00:06:48,140 --> 00:06:48,800 És bastant baix. 152 00:06:48,800 --> 00:06:52,260 Ells podrien canviar amb el temps, però no per minuts o per hores. 153 00:06:52,260 --> 00:06:55,810 >> Així que un truc, ho dic en fer web desenvolupament, que sovint es mantingui premut el 154 00:06:55,810 --> 00:06:59,500 tecla de majúscules, per exemple, i després feu clic a recarregar en el seu navegador, i que la voluntat 155 00:06:59,500 --> 00:07:03,280 solen dir la recàrrega del navegador tot, encara que ja té 156 00:07:03,280 --> 00:07:04,180 a la memòria cau. 157 00:07:04,180 --> 00:07:06,630 Així que de nou, avantatges i desavantatges, però tots ells 158 00:07:06,630 --> 00:07:08,260 en última instància, decisions de disseny. 159 00:07:08,260 --> 00:07:11,520 >> Així que ara, no ho vam fer només acabar la història aquí. 160 00:07:11,520 --> 00:07:15,790 Si ara torno i tornar i tornar i de nou, vam començar a presentar no només 161 00:07:15,790 --> 00:07:18,060 HTML, però PHP. 162 00:07:18,060 --> 00:07:20,786 Així que en termes simples, el que Què PHP fem? 163 00:07:20,786 --> 00:07:22,770 >> AUDIÈNCIA: [inaudible]. 164 00:07:22,770 --> 00:07:24,258 >> DAVID Malan: Què és això? 165 00:07:24,258 --> 00:07:25,250 >> AUDIÈNCIA: Introduir la lògica en el codi. 166 00:07:25,250 --> 00:07:26,620 >> DAVID Malan: Sí, introduir lògica en el codi. 167 00:07:26,620 --> 00:07:29,570 Així que és un llenguatge de programació real amb bucles i variables, i 168 00:07:29,570 --> 00:07:32,620 funcions i condicions, i tots les coses que hem estat utilitzant camí de tornada 169 00:07:32,620 --> 00:07:33,780 quan des del principi. 170 00:07:33,780 --> 00:07:36,780 I PHP, hem vist, es pot utilitzar ja sigui en la línia d'ordres - és 171 00:07:36,780 --> 00:07:39,190 no ha de tenir res a veure amb la web, tot i que això és 172 00:07:39,190 --> 00:07:43,150 realment els seus orígens i el que tendeix ser bo i propici per al - 173 00:07:43,150 --> 00:07:47,130 però es pot utilitzar PHP simplement per la naturalesa del fet que té una impressió () 174 00:07:47,130 --> 00:07:49,660 funció, i una funció de () printf, o una funció () fet. 175 00:07:49,660 --> 00:07:52,440 Hi ha moltes maneres de pot imprimir text amb PHP. 176 00:07:52,440 --> 00:07:56,540 >> Per tant, pot utilitzar aquesta programació llenguatge per a sortida exactament 177 00:07:56,540 --> 00:07:58,460 el que parlàvem abans. 178 00:07:58,460 --> 00:08:01,360 Pot generar dinàmicament seva HTML. 179 00:08:01,360 --> 00:08:02,300 Potser no tot. 180 00:08:02,300 --> 00:08:06,460 Potser les coses dures de codi, com el capçalera i el peu de pàgina i el logotip, 181 00:08:06,460 --> 00:08:07,950 i els fulls d'estil, i tot això. 182 00:08:07,950 --> 00:08:11,190 Però per alguna cosa com p-7 set, on hi ha la manipulació d'accions i 183 00:08:11,190 --> 00:08:14,690 mostrant la cartera de l'usuari, que és canviarà de forma dinàmica, es pot 184 00:08:14,690 --> 00:08:18,960 segurament utilitzar PHP i la lògica que dóna vostè com un llenguatge de programació per 185 00:08:18,960 --> 00:08:22,320 sortida dinàmicament subconjunts de la pàgina. 186 00:08:22,320 --> 00:08:25,900 >> Per això, quan es parla de llocs web dinàmics, o la programació web, això és 187 00:08:25,900 --> 00:08:27,200 el que realment estàs parlant. 188 00:08:27,200 --> 00:08:31,450 L'ús d'un llenguatge com PHP o coses anomenat Python o Ruby, o Java, o 189 00:08:31,450 --> 00:08:35,900 Encara en altres llengües, per consultar una base de dades sovint, o un altre servidor, i 190 00:08:35,900 --> 00:08:38,580 després escopir dinàmicament HTML. 191 00:08:38,580 --> 00:08:42,470 >> Ara el resultat final, com un part, és que la majoria de llocs web d'HTML, 192 00:08:42,470 --> 00:08:45,970 incloent la seva p-7 set, és probablement serà un gran embolic si 193 00:08:45,970 --> 00:08:48,060 ens fixem en la font codi en un navegador. 194 00:08:48,060 --> 00:08:49,010 Això no és una gran cosa. 195 00:08:49,010 --> 00:08:51,550 En aquest punt, quan ens preocupem per estil, ens preocupem pel 196 00:08:51,550 --> 00:08:52,740 coses que vostè escriu. 197 00:08:52,740 --> 00:08:56,240 No anem a preocupar-se per les coses que el que les seves sortides de codi. 198 00:08:56,240 --> 00:08:59,520 Així que no et preocupis per la sagnia aquí si es tracta de PHP que és 199 00:08:59,520 --> 00:09:01,190 en realitat la sortida de material. 200 00:09:01,190 --> 00:09:04,430 Després de tot, el navegador no li importa, i un ésser humà no es busca 201 00:09:04,430 --> 00:09:05,400 a la font de totes maneres. 202 00:09:05,400 --> 00:09:09,000 Tenim el personal, per exemple, seria es busca en PHP. 203 00:09:09,000 --> 00:09:13,440 >> Així que et vaig a donar un exemple ràpid ara de per què això podria ser més útil. 204 00:09:13,440 --> 00:09:18,620 Així que, francament, no puc recordar l'última vegada que utilitza C per resoldre un problema en 205 00:09:18,620 --> 00:09:19,620 el món real. 206 00:09:19,620 --> 00:09:22,330 Probablement va ser a la universitat quan Que necessitava utilitzar un llenguatge que 207 00:09:22,330 --> 00:09:26,710 era bastant baix nivell i em va donar la oportunitat de fer alguna cosa molt elevada 208 00:09:26,710 --> 00:09:30,720 realitzant per salvar realment el major nombre de CPU cicles com vaig poder, en gran part, 209 00:09:30,720 --> 00:09:33,990 perquè jo estava fent servir enormes conjunts de dades, i cada cicle de la CPU va explicar. 210 00:09:33,990 --> 00:09:37,750 I, francament, fins i tot en coses com els telèfons aquests dies i altres dispositius 211 00:09:37,750 --> 00:09:39,910 en el qual no té absolutament tant memòria i no té absolutament com 212 00:09:39,910 --> 00:09:44,160 molta CPU, utilitzant llenguatges més ràpids encara és atractiu. 213 00:09:44,160 --> 00:09:47,290 >> Però en el món real, quan s'acaba de vol llançar un programa conjunt per 214 00:09:47,290 --> 00:09:50,340 analitzar algunes dades, o que hagi recollit un munt de registres per 215 00:09:50,340 --> 00:09:53,330 algun grup d'estudiants i vol molt automatitzar ràpidament l'enviament de correus electrònics 216 00:09:53,330 --> 00:09:56,240 un per un per a cada un dels sol · licitants de registre, vostè va a aconseguir 217 00:09:56,240 --> 00:09:59,240 un llenguatge d'alt nivell de C per dir-ho. 218 00:09:59,240 --> 00:10:04,060 Una cosa així com PHP o Python o Ruby, o una mitjana dotzena d'altres que hi ha 219 00:10:04,060 --> 00:10:04,550 en aquests dies. 220 00:10:04,550 --> 00:10:07,200 Però els tres són probablement el més de moda en aquests moments. 221 00:10:07,200 --> 00:10:10,840 >> I el que això significa és que es pot obrir un editor de text com el gedit o 222 00:10:10,840 --> 00:10:14,030 més qualsevol altra cosa i llavors simplement començar escriure codi sense haver de preocupar 223 00:10:14,030 --> 00:10:17,800 sobre la compilació, sense haver de realment preocupar-se per la gestió de memòria, 224 00:10:17,800 --> 00:10:20,820 tenint en compte però que una mica deixadesa eventualment tornarà 225 00:10:20,820 --> 00:10:24,790 a mossegar si el conjunt de dades es més gran o el problema s'engrandeix. 226 00:10:24,790 --> 00:10:27,230 Però el que això significa per a la nosaltres és el següent. 227 00:10:27,230 --> 00:10:29,860 >> Déjame anar endavant i corro Speller del problema va fixar sisos. 228 00:10:29,860 --> 00:10:33,480 Així que aquesta és la meva implementació basada en triennis que he fet servir en la gran 229 00:10:33,480 --> 00:10:35,500 tauler on jo no vaig tan bé. 230 00:10:35,500 --> 00:10:38,720 Tornarem en el termini d'una setmana i revisitar aquells que acaben sobre de la 231 00:10:38,720 --> 00:10:40,430 gran tauler a la nostra última conferència. 232 00:10:40,430 --> 00:10:44,520 Però per ara, deixeu-me anar endavant i només executar la meva solució en el text, i ho farem 233 00:10:44,520 --> 00:10:48,460 la Bíblia King James, i aquí anem. 234 00:10:48,460 --> 00:10:51,080 >> Així que aquests són tots els suposadament paraules mal escrites de 235 00:10:51,080 --> 00:10:52,240 Rei James Bible. 236 00:10:52,240 --> 00:10:55,560 I la meva aplicació es mig segon en total. 237 00:10:55,560 --> 00:10:58,270 Així que no està malament en aquest en particular de l'equip. 238 00:10:58,270 --> 00:11:01,540 Però pensa en el molt codi que havia d'escriure. 239 00:11:01,540 --> 00:11:02,880 Penseu en la quantitat de codi que havia d'escriure. 240 00:11:02,880 --> 00:11:06,170 Penseu quantes hores vas passar al D-hall o el teu dormitori o on sigui 241 00:11:06,170 --> 00:11:07,890 en realitat la codificació fins a aquesta solució. 242 00:11:07,890 --> 00:11:11,850 >> Bé, si en realitat tinc un nivell més alt llenguatge com PHP, prendre nota de 243 00:11:11,850 --> 00:11:13,350 el que puc fer aquí. 244 00:11:13,350 --> 00:11:16,410 En primer lloc, suposem que això és en lloc el seu codi de distribució. 245 00:11:16,410 --> 00:11:17,790 Es tracta d'un arxiu anomenat abecedari. 246 00:11:17,790 --> 00:11:20,220 Està disponible com a part de l'actual codi de distribució. 247 00:11:20,220 --> 00:11:22,670 I jo vaig a agitar la mà a màxim dels detalls, però això és en realitat 248 00:11:22,670 --> 00:11:25,500 un exemple interessant de com vostè pot ser el port un llenguatge 249 00:11:25,500 --> 00:11:28,870 com C a PHP. 250 00:11:28,870 --> 00:11:33,420 Jo, literalment, obrir dues finestres de text, un amb la meva versió C de speller.c, 251 00:11:33,420 --> 00:11:36,960 i jo només vaig començar a traduir en el meu dirigir-se a PHP i escrivint a terme utilitzant 252 00:11:36,960 --> 00:11:38,840 les funcions equivalents més propers. 253 00:11:38,840 --> 00:11:40,100 >> Així que algunes d'aquestes coses són diferents. 254 00:11:40,100 --> 00:11:43,730 Ens vam veure l'última vegada que PHP no utilitza incloure en la mateixa forma. 255 00:11:43,730 --> 00:11:47,050 S'utilitza típicament requerir, encara que incloure existeix. 256 00:11:47,050 --> 00:11:50,330 Definir és una mica diferent de # Defineix en C, però això és 257 00:11:50,330 --> 00:11:51,890 com fem una constant. 258 00:11:51,890 --> 00:11:55,860 $ Argc resulta que hi ha en PHP, pel que hem vist abans. 259 00:11:55,860 --> 00:11:58,650 Aquests són només variables, totes de de començar amb signes de dòlar. 260 00:11:58,650 --> 00:12:00,590 Recordem aquests són només un munt de surar punts. 261 00:12:00,590 --> 00:12:03,970 >> Així que conte llarg, us convidem a voltejar a través d'aquest cas curiós, això és 262 00:12:03,970 --> 00:12:10,010 gairebé una conversió de la línia-per-línia de la Versió C de speller.c en PHP. 263 00:12:10,010 --> 00:12:12,630 I es podria fer això de nou per mitja dotzena d'altres idiomes. 264 00:12:12,630 --> 00:12:14,910 >> Però l'interessant és el següent. 265 00:12:14,910 --> 00:12:16,910 O el que és francament descoratjador és la següent. 266 00:12:16,910 --> 00:12:20,790 Déjame anar endavant i escric sobre dictionary.php, i afirmen que sóc 267 00:12:20,790 --> 00:12:23,670 seguirà endavant i tornar a posar en pràctica problema establert sis aquí. 268 00:12:23,670 --> 00:12:27,530 >> Així que proposarem en primer lloc que en aquest arxiu, que s'implementarà en 269 00:12:27,530 --> 00:12:30,550 PHP, així que anem a obrir els meus etiquetes com això. 270 00:12:30,550 --> 00:12:34,780 Permetin-me donar a mi mateix 1 mundial variable $ size obté zero. 271 00:12:34,780 --> 00:12:36,710 I jo vaig a donar jo mateix una taula hash. 272 00:12:36,710 --> 00:12:38,110 Vaig a utilitzar una taula hash d'aquesta cosa. 273 00:12:38,110 --> 00:12:42,070 Com declaro una taula hash en PHP? 274 00:12:42,070 --> 00:12:42,990 Fet. 275 00:12:42,990 --> 00:12:43,980 D'acord. 276 00:12:43,980 --> 00:12:48,870 >> Suport de manera oberta claudàtor de tancament representa el que en PHP, com hem vist? 277 00:12:48,870 --> 00:12:51,850 Un arsenal, però una matriu que pogués ser un array associatiu. 278 00:12:51,850 --> 00:12:54,320 Una matriu associativa és una estructura de dades que 279 00:12:54,320 --> 00:12:55,860 associa claus amb valors. 280 00:12:55,860 --> 00:12:59,430 >> Ara bé, en el més simple numèricament indexats array, aquestes claus són què? 281 00:12:59,430 --> 00:13:02,250 282 00:13:02,250 --> 00:13:03,960 Zero, un, dos, tres, no? 283 00:13:03,960 --> 00:13:08,780 Old school coses de tornada de C. Però pot també ser cadenes com foo i bar, 284 00:13:08,780 --> 00:13:12,210 o Maxwell, o qualsevol cadena. 285 00:13:12,210 --> 00:13:14,240 Així que puc aprofitar aquesta en un moment. 286 00:13:14,240 --> 00:13:17,550 >> Déjame anar per davant i declaro una funció com - 287 00:13:17,550 --> 00:13:19,020 farem load () en primer lloc. 288 00:13:19,020 --> 00:13:20,690 Així funció load (). 289 00:13:20,690 --> 00:13:23,440 I PHP és una mica diferent, ja que que, literalment, escriure la funció, però que 290 00:13:23,440 --> 00:13:24,930 no escrigui un tipus de retorn. 291 00:13:24,930 --> 00:13:28,760 Vaig a seguir endavant i dir que el funció load () ha de prendre en 292 00:13:28,760 --> 00:13:31,000 argument $ diccionari, simplement com la versió C va fer. 293 00:13:31,000 --> 00:13:32,510 Jo faré això de la memòria. 294 00:13:32,510 --> 00:13:34,910 >> I proposo que sóc va a fer això. 295 00:13:34,910 --> 00:13:37,080 Simplement faré foreach. 296 00:13:37,080 --> 00:13:40,710 Vaig a cridar a una funció anomenada file (), passant el nom d'aquesta 297 00:13:40,710 --> 00:13:44,990 presentar, que és la variable $ Diccionari com $ paraula. 298 00:13:44,990 --> 00:13:49,410 I després a l'interior del meu bucle aquí, estic seguirà endavant i emmagatzemar en el meu 299 00:13:49,410 --> 00:13:57,440 $ $ Taula que es corri la veritat. 300 00:13:57,440 --> 00:13:57,918 Fet. 301 00:13:57,918 --> 00:14:01,264 Oh, espera. 302 00:14:01,264 --> 00:14:02,422 Fet. 303 00:14:02,422 --> 00:14:02,760 D'acord. 304 00:14:02,760 --> 00:14:04,970 >> Aquesta és la funció load () dir en PHP. 305 00:14:04,970 --> 00:14:05,865 Ara, per què funciona? 306 00:14:05,865 --> 00:14:07,010 I jo sóc una mena de trampa aquí. 307 00:14:07,010 --> 00:14:09,980 >> Així que, un, foreach vam veure breument l'última vegada. 308 00:14:09,980 --> 00:14:13,680 Només vol dir que vostè pot recórrer en iteració una matriu sense molestar amb i 309 00:14:13,680 --> 00:14:16,150 i n i plus plus, i tot això. 310 00:14:16,150 --> 00:14:21,350 Diccionari és, per descomptat, el nom del fitxer, una mena gran o petit, els dos 311 00:14:21,350 --> 00:14:22,830 diccionaris que fem servir l'última vegada. 312 00:14:22,830 --> 00:14:26,715 L'arxiu és una funció que obre el text arxiu, el llegeix en línia per línia, i 313 00:14:26,715 --> 00:14:29,840 mans fer una còpia d'una enorme varietat, cada un dels elements és una 314 00:14:29,840 --> 00:14:31,340 línia d'aquest arxiu. 315 00:14:31,340 --> 00:14:36,040 Així que aquesta és la combinació de fopen, i fread i while, i fclose, 316 00:14:36,040 --> 00:14:37,080 i tot això. 317 00:14:37,080 --> 00:14:40,150 Finalment, com la paraula només significa que és la variables que tindré accés a 318 00:14:40,150 --> 00:14:41,890 en cada iteració en aquest bucle. 319 00:14:41,890 --> 00:14:46,910 >> Així que en resum, aquest acudit aquí voldrà dir obrir l'arxiu el nom està en 320 00:14:46,910 --> 00:14:50,750 diccionari, la variable, iterar sobre línia per línia, i cada vegada que rebi 321 00:14:50,750 --> 00:14:54,290 una línia, emmagatzemar en una variable anomenada paraula, i després fer alguna cosa amb la paraula. 322 00:14:54,290 --> 00:14:55,280 Què vull fer? 323 00:14:55,280 --> 00:14:58,110 Vull posar paraules al meu taula hash. 324 00:14:58,110 --> 00:15:00,860 >> Bé, puc posar alguna cosa al meu taula hash igual que en C 325 00:15:00,860 --> 00:15:02,140 utilitzant claudàtors. 326 00:15:02,140 --> 00:15:03,660 Aquest és el nom del meu taula hash. 327 00:15:03,660 --> 00:15:07,180 Vaig a índex en el hash taula en aquest lloc. 328 00:15:07,180 --> 00:15:08,920 Així que no entre parèntesis zero, no suport d'un. 329 00:15:08,920 --> 00:15:11,990 Suport citar alguna cosa unquote, qualsevol que sigui aquesta paraula és. 330 00:15:11,990 --> 00:15:15,200 I igual que vostè pugui tenir en el seu trie treball taula hash, que acaba de botiga 331 00:15:15,200 --> 00:15:17,650 efectivament un booleà, implícitament o explícitament. 332 00:15:17,650 --> 00:15:18,260 Fet. 333 00:15:18,260 --> 00:15:20,000 Estic emmagatzemant el valor veritable. 334 00:15:20,000 --> 00:15:23,150 >> Ara hi ha un parell de coses Vaig a tallar les cantonades aquí. 335 00:15:23,150 --> 00:15:27,720 Tècnicament, no hi haurà un molest nova línia, / n, al extrem de 336 00:15:27,720 --> 00:15:28,820 cadascuna d'aquestes paraules. 337 00:15:28,820 --> 00:15:31,770 Així que probablement hauria de cridar a una funció PHP anomenat chop (), que 338 00:15:31,770 --> 00:15:33,460 literalment tallar això. 339 00:15:33,460 --> 00:15:35,020 I jo realment necessito fer una cosa més. 340 00:15:35,020 --> 00:15:38,380 Probablement hauria d'incrementar la mida de cada iteració, així que em quedo amb la pista 341 00:15:38,380 --> 00:15:39,560 a nivell mundial del que és. 342 00:15:39,560 --> 00:15:43,180 I la veritat, i aquesta és una de les aspectes més estúpids de PHP, si ets 343 00:15:43,180 --> 00:15:46,950 utilitzant una variable global, ha dir explícitament que es trobi. 344 00:15:46,950 --> 00:15:51,670 Així que vaig a estendre en mundial $ Size, taula global de $, i ara 345 00:15:51,670 --> 00:15:52,690 la meva funció és completa. 346 00:15:52,690 --> 00:15:57,475 >> Així que no és tan simple com abans, però Probablement va prendre menys temps que el C 347 00:15:57,475 --> 00:15:58,220 versió, potser? 348 00:15:58,220 --> 00:15:58,730 D'acord. 349 00:15:58,730 --> 00:16:00,390 >> Així que ara anem a fer la funció de verificació (). 350 00:16:00,390 --> 00:16:04,300 A veure si això va tenir almenys el hores i hores que ens va portar a C. Així 351 00:16:04,300 --> 00:16:06,500 m'ho dius a mi anar per davant i declaro comprovar com una funció. 352 00:16:06,500 --> 00:16:09,070 Presa en l'argument la paraula, que és vindrà d'ortografia. 353 00:16:09,070 --> 00:16:13,410 I jo només vaig a comprovar si el següent isset variables, taula 354 00:16:13,410 --> 00:16:18,400 suport strtolower de la paraula - 355 00:16:18,400 --> 00:16:20,590 anem a equilibrar tots els meus parèntesi - 356 00:16:20,590 --> 00:16:24,275 a continuació, tornar true. 357 00:16:24,275 --> 00:16:27,020 358 00:16:27,020 --> 00:16:28,460 Altres vendes - 359 00:16:28,460 --> 00:16:30,330 que era realment el disc part d'aquest programa. 360 00:16:30,330 --> 00:16:31,940 Si no, retorna false. 361 00:16:31,940 --> 00:16:32,630 Fet. 362 00:16:32,630 --> 00:16:33,460 Això és verificació (). 363 00:16:33,460 --> 00:16:34,520 >> Ara, per què funciona això? 364 00:16:34,520 --> 00:16:37,040 Bé, un vaig passar en una paraula, que és una cadena. 365 00:16:37,040 --> 00:16:41,400 Dos, estic revisant l'interior del hash taula, que es diu $ taula. 366 00:16:41,400 --> 00:16:45,470 Estic forçant a minúscules trucant una funció molt similar tolower () en 367 00:16:45,470 --> 00:16:48,580 C, però això fa tota la paraula, ni un sol personatge. 368 00:16:48,580 --> 00:16:52,680 I si això s'ajusta, en altres paraules, s'estableix un valor, en altres paraules, 369 00:16:52,680 --> 00:16:54,880 si és veritat, llavors sí, es tracta d'una paraula. 370 00:16:54,880 --> 00:16:56,530 Perquè jo vaig posar aquí amb load (). 371 00:16:56,530 --> 00:16:59,100 I si no, vaig a tornar false. 372 00:16:59,100 --> 00:17:00,090 >> Ara els altres són fàcils. 373 00:17:00,090 --> 00:17:03,570 La mida de la funció (), com puc fer això? 374 00:17:03,570 --> 00:17:05,230 Jo bàsicament faig tornar $ size. 375 00:17:05,230 --> 00:17:07,770 Però tècnicament necessito fer aquesta cosa molesta. 376 00:17:07,770 --> 00:17:10,640 I en realitat fins a sentir, jo estava tallant una de les cantonades de més. 377 00:17:10,640 --> 00:17:12,920 Realment necessito fer taula global $. 378 00:17:12,920 --> 00:17:16,260 >> Però una vegada dit això, descàrrega). 379 00:17:16,260 --> 00:17:17,380 Unload () és increïble. 380 00:17:17,380 --> 00:17:20,500 Funció de descàrrega (). 381 00:17:20,500 --> 00:17:23,990 Com em vull posar en pràctica unload ()? 382 00:17:23,990 --> 00:17:25,079 Fet. 383 00:17:25,079 --> 00:17:25,450 D'acord. 384 00:17:25,450 --> 00:17:28,900 >> Així que descarregar (), la gestió de memòria és completament atesos per vostè en 385 00:17:28,900 --> 00:17:31,800 una mena PHP i molt de llenguatges d'alt nivell. 386 00:17:31,800 --> 00:17:32,600 Així que això és increïble. 387 00:17:32,600 --> 00:17:36,080 Com per què dimonis ho vam passar el passat vuit setmanes més en l'escriptura C 388 00:17:36,080 --> 00:17:41,030 aparentment molt lent, realment el temps consumeixen problemes amb desenes d'hores 389 00:17:41,030 --> 00:17:42,530 de treballar en el nostre haver? 390 00:17:42,530 --> 00:17:46,110 >> Bé, d'una banda, això pot funcionar bé per a petits programes. 391 00:17:46,110 --> 00:17:47,840 Sens dubte va accelerar el meu temps de desenvolupament. 392 00:17:47,840 --> 00:17:49,790 Però anem a veure què passa en el món real. 393 00:17:49,790 --> 00:17:52,370 >> Déjame anar en aquest directori en una finestra de terminal. 394 00:17:52,370 --> 00:17:53,370 Hi ha ortogràfic. 395 00:17:53,370 --> 00:17:56,570 I fixin-com un part, i és possible que s'han trobat amb aquest problema en conjunt 396 00:17:56,570 --> 00:17:58,190 sis o set problemes n. 397 00:17:58,190 --> 00:18:01,610 No té estrictament a arxius PHP per tal. php. 398 00:18:01,610 --> 00:18:05,250 Si poses una línia com la primera a la part superior, que és una línia especial 399 00:18:05,250 --> 00:18:10,980 de sintaxi que essencialment significa trobar el programa que es diu PHP i l'utilitzen per 400 00:18:10,980 --> 00:18:12,270 interpretar aquest arxiu. 401 00:18:12,270 --> 00:18:15,410 Així que ara ningú sap realment que Estic corrent un programa PHP. 402 00:18:15,410 --> 00:18:19,860 Puc córrer simplement com si van ser una mica compilat en C. 403 00:18:19,860 --> 00:18:20,650 >> Però aquí està la cosa. 404 00:18:20,650 --> 00:18:21,600 En realitat, farem això una altra vegada. 405 00:18:21,600 --> 00:18:23,530 Dropbox/pset6 /. 406 00:18:23,530 --> 00:18:25,390 Hi ha ortogràfic. 407 00:18:25,390 --> 00:18:26,720 Acceptar, 0,44 segons. 408 00:18:26,720 --> 00:18:28,080 Va arribar ràpid aquesta vegada. 409 00:18:28,080 --> 00:18:29,745 >> Ara entrarem en la versió de PHP. 410 00:18:29,745 --> 00:18:43,070 411 00:18:43,070 --> 00:18:44,320 Un bonic detall. 412 00:18:44,320 --> 00:18:50,830 413 00:18:50,830 --> 00:18:53,285 Però només pensar en la quantitat de temps Vaig salvar en horari d'oficina. 414 00:18:53,285 --> 00:18:56,990 415 00:18:56,990 --> 00:18:57,790 D'acord. 416 00:18:57,790 --> 00:19:01,020 >> Així 3,59 segons, que en realitat no sona exacta tampoc. 417 00:19:01,020 --> 00:19:03,710 Però això és perquè conte llarg, quan s'està imprimint una gran quantitat 418 00:19:03,710 --> 00:19:06,840 de coses a la pantalla, que si alenteix les coses. 419 00:19:06,840 --> 00:19:11,260 El que realment es va prendre el CPU en el aparell era 3,59 segons, en 420 00:19:11,260 --> 00:19:15,260 diferència de C, que va tenir 0,44 segon més recentment. 421 00:19:15,260 --> 00:19:17,620 Això és realment un ordre de diferent magnitud. 422 00:19:17,620 --> 00:19:20,280 >> Llavors, on està aquest preu ve? 423 00:19:20,280 --> 00:19:21,790 Per què és tan lent? 424 00:19:21,790 --> 00:19:24,220 Per què PHP realitzar tan malament? 425 00:19:24,220 --> 00:19:25,242 Danielle? 426 00:19:25,242 --> 00:19:26,550 >> AUDIÈNCIA: No ho va fer realment utilitzar una taula hash. 427 00:19:26,550 --> 00:19:27,710 >> DAVID Malan: Jo realment no utilitzar una taula hash. 428 00:19:27,710 --> 00:19:28,760 Així que tipus de fet. 429 00:19:28,760 --> 00:19:29,870 Així que és una matriu associativa. 430 00:19:29,870 --> 00:19:33,650 El més probable, si la gent de PHP són molt intel · ligent, que utilitza per sota de la 431 00:19:33,650 --> 00:19:39,520 campana una taula hash real implementat en alguna cosa com C o C + +. 432 00:19:39,520 --> 00:19:41,290 Però. 433 00:19:41,290 --> 00:19:42,760 Sí 434 00:19:42,760 --> 00:19:44,010 >> AUDIÈNCIA: [inaudible]. 435 00:19:44,010 --> 00:19:46,690 436 00:19:46,690 --> 00:19:47,080 >> DAVID Malan: Si. 437 00:19:47,080 --> 00:19:50,780 Així que cadascuna de les funcions que vaig escriure ara - En realitat, es pot dir que una vegada més un 438 00:19:50,780 --> 00:19:51,480 mica més fort? 439 00:19:51,480 --> 00:19:54,509 >> AUDIÈNCIA: Cadascuna de les funcions que Ha inclòs té molt més completa 440 00:19:54,509 --> 00:19:56,610 la capacitat de - 441 00:19:56,610 --> 00:19:57,550 >> DAVID Malan: Així que això és molt cert. 442 00:19:57,550 --> 00:20:01,490 Hi ha molt més sobrecàrrega que estem sense veure realment al centrar-se només en 443 00:20:01,490 --> 00:20:03,730 dictionary.php, que només vaig escriure. 444 00:20:03,730 --> 00:20:08,020 Per contra, hi ha tot un intèrpret va en el fons. 445 00:20:08,020 --> 00:20:12,040 De fet, quan em vaig trobar amb aquest programa, no s'estava executant zeros i uns compilats 446 00:20:12,040 --> 00:20:14,290 dissenyada per a la meva CPU Intel. 447 00:20:14,290 --> 00:20:19,270 Més aviat, s'estava executant línia per línia Codi PHP que es veu exactament 448 00:20:19,270 --> 00:20:20,350 com ho va escriure. 449 00:20:20,350 --> 00:20:22,475 I així, cada vegada que utilitzi un llenguatge interpretat, que 450 00:20:22,475 --> 00:20:23,850 en realitat no pagar aquest preu. 451 00:20:23,850 --> 00:20:27,010 Va a portar el seu temps per llegir el seu principal arxiu a baix, d'esquerra a 452 00:20:27,010 --> 00:20:30,740 dreta i, a continuació, executar cada línia una i altra vegada. 453 00:20:30,740 --> 00:20:34,250 >> Ara bé, en realitat, sobretot en la web, en realitat es pot accelerar aquest procés 454 00:20:34,250 --> 00:20:38,660 en emmagatzemar en memòria cau els resultats de la Codi PHP s'interpreta. 455 00:20:38,660 --> 00:20:41,640 I això té sentit en la web, ja que si vostè no té un usuari com 456 00:20:41,640 --> 00:20:46,300 jo aquí, però 1.000 o 10.000 usuaris, potser la primera vegada que l'arxiu és 457 00:20:46,300 --> 00:20:49,050 accés és lent, però a partir de llavors que és molt més ràpid. 458 00:20:49,050 --> 00:20:51,000 >> Però això també, de nou, és una solució de compromís. 459 00:20:51,000 --> 00:20:53,870 I per alguna cosa com una dada de la investigació conjunt, o fins i tot una cosa tan gran com 460 00:20:53,870 --> 00:20:58,330 això, els seus usuaris amb el temps es començar a sentir que la desacceleració. 461 00:20:58,330 --> 00:21:02,670 >> Així que en resum, interpreten les llengües són molt de moda, molt popular, i 462 00:21:02,670 --> 00:21:06,710 francament probablement els idiomes que ha d'arribar a l'hora de resoldre problemes 463 00:21:06,710 --> 00:21:08,200 després de CS50. 464 00:21:08,200 --> 00:21:12,720 Però t'adones de la quantitat que està realment benentès sota de la caputxa 465 00:21:12,720 --> 00:21:15,910 realment aquestes últimes setmanes d'haixix taules i arbres, i tracta, 466 00:21:15,910 --> 00:21:20,770 que s'utilitzen en última instància a la realitat implementar coses com obrir el parèntesi, 467 00:21:20,770 --> 00:21:24,200 claudàtors, que podem ara gratitud donar per fet. 468 00:21:24,200 --> 00:21:26,360 >> Així que donem una ullada ara en aquest context web. 469 00:21:26,360 --> 00:21:29,890 I vaig esmentar l'última vegada que no hi ha un munt de superglobals en PHP que 470 00:21:29,890 --> 00:21:32,490 no són realment rellevants en la línia d'ordres. 471 00:21:32,490 --> 00:21:36,210 Són més rellevant en el context d'utilitzar PHP en un context web. 472 00:21:36,210 --> 00:21:41,220 Així s'executa PHP al servidor web amb la finalitat per generar coses com HTML. 473 00:21:41,220 --> 00:21:44,540 >> I ens mirem a $ _GET i $ _POST, i aquí és on automàticament als usuaris ' 474 00:21:44,540 --> 00:21:49,100 entrada acaba simplement si vostè presenta una formulari en un arxiu amb extensió. php en un web 475 00:21:49,100 --> 00:21:50,460 servidor com l'aparell. 476 00:21:50,460 --> 00:21:53,310 Però anem a veure breument en $ _COOKIE I $ _SESSION. 477 00:21:53,310 --> 00:21:56,670 >> En termes senzills, què és una galeta com vostè ho entén en el context de 478 00:21:56,670 --> 00:21:58,220 utilitzant la web? 479 00:21:58,220 --> 00:21:59,450 >> AUDIÈNCIA: arxiu de l'ordinador. 480 00:21:59,450 --> 00:21:59,920 >> DAVID Malan: Si. 481 00:21:59,920 --> 00:22:03,500 És un arxiu a l'ordinador de l'usuari plantat per qualsevol lloc web 482 00:22:03,500 --> 00:22:04,410 li passa a visitar. 483 00:22:04,410 --> 00:22:07,334 Així que quan vostè va a Facebook, quan es va a bankofamerica.com, quan vas 484 00:22:07,334 --> 00:22:10,330 a google.com, quan vostè va a gairebé qualsevol lloc web en el món en aquests dies, 485 00:22:10,330 --> 00:22:14,850 incloent cs50.net una galeta es planta en l'equip, la qual cosa és 486 00:22:14,850 --> 00:22:19,800 ja sigui un valor emmagatzemat a la memòria RAM en el seu ordinador a la memòria del seu navegador, o 487 00:22:19,800 --> 00:22:22,800 de fet de vegades un fitxer emmagatzemat en el seu disc dur. 488 00:22:22,800 --> 00:22:26,960 >> I el que normalment s'emmagatzema a l'arxiu no és el seu nom d'usuari, no la seva 489 00:22:26,960 --> 00:22:31,060 contrasenya, en general no és una cosa sensible llevat que el lloc web no és tan 490 00:22:31,060 --> 00:22:35,040 bo amb la seva seguretat, sinó més aviat és un identificador únic gran entre els 491 00:22:35,040 --> 00:22:35,680 altres coses. 492 00:22:35,680 --> 00:22:38,920 És un nombre aleatori gran plantada en el seu ordinador, però es pot pensar en com 493 00:22:38,920 --> 00:22:42,740 una mena de segell virtual de mà com de un club o algun parc de diversions que 494 00:22:42,740 --> 00:22:47,160 permet que el personal, els amos d'aquest servei, per recordar qui ets. 495 00:22:47,160 --> 00:22:51,030 Així que si el nombre aleatori gran és com 12345678, encara que això és, òbviament, 496 00:22:51,030 --> 00:22:54,180 no massa aleatòria, pensar que a mesura que el segell a la mà que quan vostè visita 497 00:22:54,180 --> 00:22:57,930 facebook.com per primera vegada, es eradicar aquest número a la mà. 498 00:22:57,930 --> 00:23:01,510 I després perquè vostè parla d'HTTP, ser un explorador, i perquè Facebook 499 00:23:01,510 --> 00:23:06,440 òbviament parla el mateix com una banda servidor, el protocol HTTP diu que 500 00:23:06,440 --> 00:23:09,930 en qualsevol moment que visiti posteriorment facebook.com, si es tracta d'un segon 501 00:23:09,930 --> 00:23:13,560 més tard, una hora més tard, fins i tot al dia següent, sempre que vostè no té explícitament 502 00:23:13,560 --> 00:23:17,050 tancat la sessió, el que efectivament és com rentar-se les mans. 503 00:23:17,050 --> 00:23:20,280 HTTP diu que vostè ha de presentar la segell a la mà cada vegada que 504 00:23:20,280 --> 00:23:22,020 tornar a aquest lloc web. 505 00:23:22,020 --> 00:23:24,390 >> El que Facebook llavors no és que mira aquest segell a la mà i 506 00:23:24,390 --> 00:23:26,850 diuen, oh, 123456789. 507 00:23:26,850 --> 00:23:30,260 No sé a primera vista que aquest és David Malan a Cambridge, 508 00:23:30,260 --> 00:23:34,690 Massachusetts, però es poden revisar el seu base de dades i dir, oh, la persona 509 00:23:34,690 --> 00:23:39,930 en aquest equip plantem 123456789 és David Malan de Cambridge, 510 00:23:39,930 --> 00:23:40,440 Massachusetts. 511 00:23:40,440 --> 00:23:46,000 Anem a mostrar aquest usuari i després el seu perfil pàgina o el seu News Feed. 512 00:23:46,000 --> 00:23:49,660 >> Però hi ha un problema aquí si aquesta és de fet com funciona la web. 513 00:23:49,660 --> 00:23:51,390 Fem una ullada a un exemple ràpid. 514 00:23:51,390 --> 00:23:55,190 Anem a anar en realitat dir facebook.com. 515 00:23:55,190 --> 00:23:58,130 Però abans que poguéssim anar-hi, i molt que em vagi per davant, ia obrir Chrome 516 00:23:58,130 --> 00:23:59,790 Inspector aquí baix. 517 00:23:59,790 --> 00:24:01,140 Deixa que et miri a la fitxa xarxa. 518 00:24:01,140 --> 00:24:06,020 I ara anem a seguir endavant i escriviu en https://facebook.com. 519 00:24:06,020 --> 00:24:09,410 I jo vaig a fer això per el que no veiem totes aquestes redireccions i residus 520 00:24:09,410 --> 00:24:10,660 temps mirant a través d'ells. 521 00:24:10,660 --> 00:24:12,690 Permetin-me prem enter. 522 00:24:12,690 --> 00:24:13,130 >> Està bé. 523 00:24:13,130 --> 00:24:14,580 Veiem un munt de peticions. 524 00:24:14,580 --> 00:24:15,640 Arriba Facebook. 525 00:24:15,640 --> 00:24:16,930 Hi ha un munt d'arxius. 526 00:24:16,930 --> 00:24:19,290 I aquí, per la meva menció de latència última vegada, això és 527 00:24:19,290 --> 00:24:21,240 una gran quantitat de peticions HTTP. 528 00:24:21,240 --> 00:24:23,700 Però el primer és, probablement, la més interessant. 529 00:24:23,700 --> 00:24:26,420 >> Així que anem a desplaçar-se fins aquí, i Vaig a apropar una en un segon. 530 00:24:26,420 --> 00:24:29,090 Això serà una espècie de un desastre, però anem a veure. 531 00:24:29,090 --> 00:24:31,660 Facebook ens està enviant un Tot munt de coses. 532 00:24:31,660 --> 00:24:33,490 >> Però espera, interessant. 533 00:24:33,490 --> 00:24:37,880 Estan plantant no un, sinó quatre segells mà a la mà aquí. 534 00:24:37,880 --> 00:24:40,400 Set-Cookie, Set-galeta Set-Cookie, set-cookie. 535 00:24:40,400 --> 00:24:44,030 I hi ha algunes característiques aquí. 536 00:24:44,030 --> 00:24:46,170 Tots ells esmenten alguns tipus de caducitat. 537 00:24:46,170 --> 00:24:50,090 I sembla que Facebook és l'esperança perquè em recordis fins a 2015. 538 00:24:50,090 --> 00:24:53,670 Així que això és probablement el temps pel qual He de tancar la sessió o que només va a 539 00:24:53,670 --> 00:24:55,710 assumeixo automàticament que sóc no tornar. 540 00:24:55,710 --> 00:24:57,840 Així que això és en realitat un decent quantitat de temps. 541 00:24:57,840 --> 00:24:59,170 >> I hi ha alguna altra coses que fer aquí. 542 00:24:59,170 --> 00:25:03,036 Aquesta galeta sembla ser la força esborrat dient que va expirar el 1970 543 00:25:03,036 --> 00:25:04,460 abans que existissin les galetes. 544 00:25:04,460 --> 00:25:06,510 Així que el navegador només va assumir bé, això és com 545 00:25:06,510 --> 00:25:07,910 rentar el segell mans. 546 00:25:07,910 --> 00:25:11,240 >> Però ara, quan el meu navegador fa una sol · licitud posterior - 547 00:25:11,240 --> 00:25:14,340 m'ho dius a mi anar endavant i fer això 1 i recàrrega. 548 00:25:14,340 --> 00:25:18,170 Ara vaig a retrocedir a la superior petició i baixar 549 00:25:18,170 --> 00:25:20,760 aquí, les capçaleres de sol · licitud. 550 00:25:20,760 --> 00:25:21,390 Note això. 551 00:25:21,390 --> 00:25:25,280 Així que ara estic baix no capçaleres de resposta, però noti que diu capçaleres de sol · licitud. 552 00:25:25,280 --> 00:25:29,220 I noti que el meu navegador com a part de seva sol · licitud després de colpejar recàrrega té 553 00:25:29,220 --> 00:25:32,780 enviat almenys la següent informació. 554 00:25:32,780 --> 00:25:34,670 No estableix galetes, però galeta. 555 00:25:34,670 --> 00:25:38,750 Així que aquesta és la línia, la capçalera HTTP de manera dir-ho, on el meu navegador és una espècie 556 00:25:38,750 --> 00:25:43,340 de, sense que jo ho sabés presentar la mà per a la inspecció de Facebook. 557 00:25:43,340 --> 00:25:46,020 >> Així doncs, aquestes galetes poden ser utilitzat llavors per què? 558 00:25:46,020 --> 00:25:49,420 Per recordar qui és vostè, o recordar com moltes vegades que he estat allà, o 559 00:25:49,420 --> 00:25:50,280 realment res. 560 00:25:50,280 --> 00:25:52,742 >> Així que aquí està counter.php. 561 00:25:52,742 --> 00:25:53,780 I permetin-me acostar la font. 562 00:25:53,780 --> 00:25:58,380 I cada vegada que torno a carregar aquesta pàgina, previ avís sigui per recordar el nombre de vegades 563 00:25:58,380 --> 00:25:59,250 Jo he estat allà. 564 00:25:59,250 --> 00:26:00,570 Bé, això no és tan impressionant. 565 00:26:00,570 --> 00:26:03,140 Anem a tancar aquesta llengüeta, i ara anem a tornar a 566 00:26:03,140 --> 00:26:07,860 http://localhost/counter.php. 567 00:26:07,860 --> 00:26:08,970 >> Oh, això és interessant. 568 00:26:08,970 --> 00:26:10,960 Encara recordava, fins i tot encara que jo vaig tancar la pestanya. 569 00:26:10,960 --> 00:26:14,010 I, francament, si tanco el navegador, si s'aplica de la manera correcta, jo 570 00:26:14,010 --> 00:26:18,950 Encara recordava que aquest usuari és que ell o ella era la primera vegada, i 571 00:26:18,950 --> 00:26:22,840 només una vegada que entro al menú de Chrome, que aquí sou aquí, i vagi a 572 00:26:22,840 --> 00:26:25,990 Història, i feu clic a Elimina les dades de navegació, com alguns de vostès poden tenir en el 573 00:26:25,990 --> 00:26:33,050 passat, només llavors les galetes realment ser esborrat durant web 574 00:26:33,050 --> 00:26:33,970 desenvolupament. 575 00:26:33,970 --> 00:26:35,340 >> Per tant, si anem - 576 00:26:35,340 --> 00:26:37,080 anem a tancar fins gedit aquí. 577 00:26:37,080 --> 00:26:38,910 I si ens anem ara a aquesta imatge. 578 00:26:38,910 --> 00:26:44,210 Déjame anar al nostre vhosts / localhost / públic, i m'ho dius a mi fer 579 00:26:44,210 --> 00:26:46,340 counter.php. 580 00:26:46,340 --> 00:26:48,350 Tingueu en compte que aquesta és una molt programa senzill. 581 00:26:48,350 --> 00:26:50,250 És un lloc web molt simple. 582 00:26:50,250 --> 00:26:51,770 >> Així que la part superior de l'arxiu és a comentaris. 583 00:26:51,770 --> 00:26:54,930 Però aquí hi ha una nova línia que vostè pot han vist ja en p-7 set, 584 00:26:54,930 --> 00:26:56,000 session_start (). 585 00:26:56,000 --> 00:27:00,380 Es tracta d'una línia de codi PHP que bàsicament li diu al servidor web, donar a 586 00:27:00,380 --> 00:27:03,400 Assegureu-vos d'estampar les mans i fer assegura't de revisar segells de mà. 587 00:27:03,400 --> 00:27:06,810 Això és tot el que fa la línia, i fa tot aquest procés per a nosaltres. 588 00:27:06,810 --> 00:27:09,510 Llavors noto Acabo dues sucursals aquí. 589 00:27:09,510 --> 00:27:14,150 Si el comptador de clau en l'interior d'aquest variable global especial anomenat 590 00:27:14,150 --> 00:27:18,010 $ _SESSION Està ajustat - en altres paraules, si hi ha alguna cosa de valor allà - 591 00:27:18,010 --> 00:27:22,440 anem a fer-ho i ho emmagatzemen en un local de variable anomenada $ taulell. 592 00:27:22,440 --> 00:27:27,000 Si no, anem a assignar $ counter el valor predeterminat de 0. 593 00:27:27,000 --> 00:27:30,320 >> Ara, aquí hi ha un aspecte de PHP que és tant una benedicció com una maledicció. 594 00:27:30,320 --> 00:27:32,080 PHP és una mica descuidat. 595 00:27:32,080 --> 00:27:35,160 Així, mentre que en C, ¿quina seria la àmbit d'aplicació de comptador d'haver estat 596 00:27:35,160 --> 00:27:36,725 ja sigui aquí o aquí? 597 00:27:36,725 --> 00:27:39,270 598 00:27:39,270 --> 00:27:41,690 >> Hauria estat confinat a aquestes claus. 599 00:27:41,690 --> 00:27:42,090 Saps una cosa? 600 00:27:42,090 --> 00:27:46,920 En PHP, hi ha fins i tot fora dels claus, aquí, i aquí, 601 00:27:46,920 --> 00:27:49,120 i aquí, i aquí, i fins i tot per sota. 602 00:27:49,120 --> 00:27:52,400 Per això dic que és una benedicció en el sentit que vostè no ha de pensar com 603 00:27:52,400 --> 00:27:54,070 dur com ho vam fer fa setmanes. 604 00:27:54,070 --> 00:27:56,880 Però també és una mica d'una maledicció en què sense importar on s'utilitza una variable en 605 00:27:56,880 --> 00:28:00,020 PHP, almenys en un programa com aquest, accessible a nivell mundial per 606 00:28:00,020 --> 00:28:01,170 bé o per mal. 607 00:28:01,170 --> 00:28:06,130 Així que cal tenir en compte ara que les variables no poden ser indefinits. 608 00:28:06,130 --> 00:28:07,640 És possible que calgui preveuen altres disposicions. 609 00:28:07,640 --> 00:28:09,460 >> Però, què faré, en última instància? 610 00:28:09,460 --> 00:28:13,160 Vaig a guardar a l'interior d'aquest mundial variable com un valor de la 611 00:28:13,160 --> 00:28:17,060 comptador de clau el resultat de fent contra més 1. 612 00:28:17,060 --> 00:28:18,910 Així que això és només l'aritmètica que fa el 613 00:28:18,910 --> 00:28:20,590 incrementación d'aquest comptador. 614 00:28:20,590 --> 00:28:24,850 I el fet que estic emmagatzemant que valor de nou aquí voldrà dir és que 615 00:28:24,850 --> 00:28:29,970 actualitzar la base de dades essencialment a recordeu que 123456789 d'usuari ha estat 616 00:28:29,970 --> 00:28:31,010 aquí dues vegades. 617 00:28:31,010 --> 00:28:33,780 I quan ho faig de nou la propera vegada que recarregar la pàgina, es va a comprovar 618 00:28:33,780 --> 00:28:36,710 el meu segell a la mà i dir, ah, 123456789 usuari té ara 619 00:28:36,710 --> 00:28:38,410 estat tres vegades. 620 00:28:38,410 --> 00:28:43,390 >> ¿I què PHP i llenguatges similars estan fent per a nosaltres és que estan pensant 621 00:28:43,390 --> 00:28:47,720 com i on i per quant temps per emmagatzemar els valors en aquest especial 622 00:28:47,720 --> 00:28:48,830 superglobal. 623 00:28:48,830 --> 00:28:52,750 I això superglobal la propera vegada que visiti la pàgina és una qüestió de màgia 624 00:28:52,750 --> 00:28:57,440 pre-poblada, plena de valors que Vam estar allà l'última vegada que va visitar, 625 00:28:57,440 --> 00:29:02,310 si això va ser fa un segon, una setmana fa, o el 2013, i ara estem parlant 626 00:29:02,310 --> 00:29:03,790 voltant de l'any 2015. 627 00:29:03,790 --> 00:29:07,600 PHP i el servidor web cuiden de tot això per a vostè. 628 00:29:07,600 --> 00:29:08,850 >> AUDIÈNCIA: [inaudible]. 629 00:29:08,850 --> 00:29:11,900 630 00:29:11,900 --> 00:29:15,760 >> DAVID Malan: Variables en PHP són essencialment sempre global, llevat que 631 00:29:15,760 --> 00:29:18,400 declarar-los en l'interior d'una funció, i després ells són locals 632 00:29:18,400 --> 00:29:19,420 només la funció. 633 00:29:19,420 --> 00:29:22,300 Però com jo no he escrit cap funcions, que són ara efectivament 634 00:29:22,300 --> 00:29:25,090 mundial al llarg de tota la meva arxiu aquí. 635 00:29:25,090 --> 00:29:26,040 >> AUDIÈNCIA: Hi ha una manera per fer-los local? 636 00:29:26,040 --> 00:29:28,470 >> DAVID Malan: Hi ha alguna manera de fer-local? 637 00:29:28,470 --> 00:29:30,680 Només embolicant en funcions. 638 00:29:30,680 --> 00:29:32,790 Que en l'última versió del PHP, vostè pot fer això amb 639 00:29:32,790 --> 00:29:34,130 una funció anònima. 640 00:29:34,130 --> 00:29:35,930 Però més sobre això en el context de JavaScript. 641 00:29:35,930 --> 00:29:37,260 Però la resposta curta és no. 642 00:29:37,260 --> 00:29:40,888 Una resposta més llarga és sí. 643 00:29:40,888 --> 00:29:42,380 Niça. 644 00:29:42,380 --> 00:29:43,380 Bona pregunta concurs. 645 00:29:43,380 --> 00:29:43,930 Està bé. 646 00:29:43,930 --> 00:29:47,760 >> Així, finalment, la pàgina en si és En realitat és bastant simple. 647 00:29:47,760 --> 00:29:51,470 Tingueu en compte que una vegada que sortir de la manera PHP, recordar que totes aquestes coses baix 648 00:29:51,470 --> 00:29:53,700 a continuació és només va a aconseguir graella a prima per al navegador. 649 00:29:53,700 --> 00:29:57,050 La qual cosa està bé, perquè jo vull manar l'usuari una mica d'HTML, però sí vull 650 00:29:57,050 --> 00:29:59,140 per actualitzar dinàmicament que HTML. 651 00:29:59,140 --> 00:30:03,930 I una manera que puc fer és classificar de caure molt ràpidament de nou en PHP 652 00:30:03,930 --> 00:30:07,730 manera, l'ús obert abraçadora pregunta Suprimeix signe igual, i després la sortida el valor 653 00:30:07,730 --> 00:30:08,650 del comptador. 654 00:30:08,650 --> 00:30:12,360 >> O si això sembla una mica críptic, aquest signe igual és en realitat només alguns 655 00:30:12,360 --> 00:30:16,190 sucre sintàctic per aquest printf ($ comptador). 656 00:30:16,190 --> 00:30:19,160 Però, francament, això és una mica lletja i una mica molest per escriure. 657 00:30:19,160 --> 00:30:23,660 Així que PHP molt bé té aquesta opció, on només es pot dir que sigui més 658 00:30:23,660 --> 00:30:25,450 succinta de la mateixa manera. 659 00:30:25,450 --> 00:30:26,940 >> Llavors, què està passant sota el capó? 660 00:30:26,940 --> 00:30:31,210 Anem ràpid cop d'ull a la xarxa fitxa aquí per counter.php. 661 00:30:31,210 --> 00:30:35,090 I m'ho dius a mi seguir endavant i primera anem a aclarir les galetes. 662 00:30:35,090 --> 00:30:38,670 Elimina les dades de navegació Anem a des el principi dels temps. 663 00:30:38,670 --> 00:30:39,680 Ara anem a tornar per aquí. 664 00:30:39,680 --> 00:30:41,340 Ara anem a tornar a carregar la pàgina. 665 00:30:41,340 --> 00:30:42,170 I estic de tornada a zero. 666 00:30:42,170 --> 00:30:44,810 Perquè el meu segell a la mà s'ha rentat, Ara rep una nova galeta. 667 00:30:44,810 --> 00:30:48,780 >> De fet, si miro la fitxa Xarxa i mirar les capçaleres de resposta, observi 668 00:30:48,780 --> 00:30:51,960 que l'aparell m'està enviant una cookie el nom és una mica 669 00:30:51,960 --> 00:30:55,820 arbitrària, però una mica raonable, PHPSESSID. 670 00:30:55,820 --> 00:30:58,440 I m'està enviant això realment nombre aleatori gran. 671 00:30:58,440 --> 00:30:59,440 No és un bon nombre. 672 00:30:59,440 --> 00:31:00,390 No és exactament hexadecimal. 673 00:31:00,390 --> 00:31:03,600 És una espècie de cadena alfanumèrica, però se suposa que és aleatori. 674 00:31:03,600 --> 00:31:06,830 I aquest és el segell de la mà perquè parlo el que em refereixo. 675 00:31:06,830 --> 00:31:11,960 >> Mentrestant, si faig clic a recarregar i després mirar a aquesta segona línia per la meva segona 676 00:31:11,960 --> 00:31:17,600 sol · licitud, avís ara que la meva petició capçaleres inclouen PHPSESSID és igual a aquest, 677 00:31:17,600 --> 00:31:19,390 no set-cookie, però només galeta. 678 00:31:19,390 --> 00:31:22,950 I això és la presentació del meu navegador de la meva segell a la mà. 679 00:31:22,950 --> 00:31:28,820 >> Així que ara com un teaser, i parlarem més sobre això en una setmana o així, però 680 00:31:28,820 --> 00:31:31,590 ¿De quina manera això fa que vulnerable, el compte de Facebook 681 00:31:31,590 --> 00:31:34,137 vulnerables, i altres tals comptes vulnerables? 682 00:31:34,137 --> 00:31:35,510 >> AUDIÈNCIA: Si algú té la galeta. 683 00:31:35,510 --> 00:31:36,750 >> DAVID Malan: Sí, si algú té la seva galeta. 684 00:31:36,750 --> 00:31:39,920 Vull dir veritat, igual que alguns de vostès podria haver intentat la mateixa manera que un club o 685 00:31:39,920 --> 00:31:44,030 parc d'atraccions, si intenta alguna cosa així copiar el segell, encara que 686 00:31:44,030 --> 00:31:47,560 cap enrere sobre la mà d'una altra persona, i llavors ell o ella ho presenta com 687 00:31:47,560 --> 00:31:53,250 seu compte, si en realitat es veu idèntica, 123456789, llavors la web 688 00:31:53,250 --> 00:31:57,980 servidor està aparentment només va a confiem que aquest usuari és vostè. 689 00:31:57,980 --> 00:32:01,450 >> I això és de fet un dret fonamental amenaça cada vegada que utilitza les cookies 690 00:32:01,450 --> 00:32:05,420 perquè si algú falsifica així parlar seves galetes, figures de què es 691 00:32:05,420 --> 00:32:08,660 és a dir, ja sigui per veritablement copiar mirant al seu ordinador 692 00:32:08,660 --> 00:32:09,890 i de ser així, a D'acord. 693 00:32:09,890 --> 00:32:14,520 Galetes de David és JJ3JIK i així successivament, i són prou intel · ligents com per saber 694 00:32:14,520 --> 00:32:18,080 com ordenar d'enviar manualment que galeta d'un navegador o d'un 695 00:32:18,080 --> 00:32:22,350 programa que escriuen, que van poder totalment accedir a un lloc web que vostè. 696 00:32:22,350 --> 00:32:28,560 No és tan difícil de fingir ser altra persona llevat que tornem p-set 697 00:32:28,560 --> 00:32:30,790 dos, que va presentar el que? 698 00:32:30,790 --> 00:32:32,065 >> AUDIÈNCIA: Criptografia. 699 00:32:32,065 --> 00:32:33,860 >> DAVID Malan: Amb unes bits de la criptografia. 700 00:32:33,860 --> 00:32:36,550 Criptografia simple, almenys en la edició estàndard, però crypto 701 00:32:36,550 --> 00:32:36,870 però. 702 00:32:36,870 --> 00:32:37,410 menys. 703 00:32:37,410 --> 00:32:41,440 Així que resulta que si xifra tots aquestes capçaleres amb alguna cosa que 704 00:32:41,440 --> 00:32:48,770 poden ara saber més familiarment com SSL, secure socket layer, o URLs https://, 705 00:32:48,770 --> 00:32:51,890 a continuació, totes aquestes coses que hem estat fent una ullada a són en realitat xifrada, 706 00:32:51,890 --> 00:32:54,800 el que significa que és com si no pot llegir el segell a la mà. 707 00:32:54,800 --> 00:32:59,350 Només facebook.com llauna o google.com, o en aquest cas, l'aparell pot 708 00:32:59,350 --> 00:33:00,550 llegir aquest segell a la mà. 709 00:33:00,550 --> 00:33:04,020 >> Tràgicament, però, una vegada i una altra, això és molt apropiada amb les coses NSA 710 00:33:04,020 --> 00:33:06,410 en els últims temps, fins i tot SSL és fràgil. 711 00:33:06,410 --> 00:33:09,850 I en realitat no és tan difícil fins i tot a trencar que el xifrat. 712 00:33:09,850 --> 00:33:12,040 No tant per les tècniques d'encriptació, però enganyant al 713 00:33:12,040 --> 00:33:15,720 navegador a desxifrar les dades abans de temps. 714 00:33:15,720 --> 00:33:17,880 Però, de nou, li prenen el pèl amb el que en poc temps. 715 00:33:17,880 --> 00:33:21,242 Per ara, només por. 716 00:33:21,242 --> 00:33:23,070 És tràgicament tipus de veritat. 717 00:33:23,070 --> 00:33:23,760 >> Està bé. 718 00:33:23,760 --> 00:33:27,910 Així que, ¿d'on ve això ara ens deixa? 719 00:33:27,910 --> 00:33:29,010 Bé, anem a fer això. 720 00:33:29,010 --> 00:33:31,790 Seguirem endavant i prendre una ràpida sumari abans de prendre un descans. 721 00:33:31,790 --> 00:33:33,790 I crec que anem a detenir-nos una mica més avui, sinó que anem a bussejar en 722 00:33:33,790 --> 00:33:37,850 alguna cosa nova i atractiu, que obrir la gana per més. 723 00:33:37,850 --> 00:33:38,950 Així que això és el teaser. 724 00:33:38,950 --> 00:33:41,520 >> Així SQL, vam començar a parlar de molt breument l'última vegada. 725 00:33:41,520 --> 00:33:44,670 Segur que va a embrutar-se les mans amb una mica d'ella en p-conjunt de set. 726 00:33:44,670 --> 00:33:46,480 I en termes simples, el que fa SQL - 727 00:33:46,480 --> 00:33:47,110 S-Q-L - 728 00:33:47,110 --> 00:33:49,850 fer per vostè? 729 00:33:49,850 --> 00:33:50,310 Què és? 730 00:33:50,310 --> 00:33:51,546 Si. 731 00:33:51,546 --> 00:33:53,240 >> AUDIÈNCIA: et permet accedir a les dades. 732 00:33:53,240 --> 00:33:53,360 >> DAVID Malan: Si. 733 00:33:53,360 --> 00:33:55,120 Se't permet accedir a les dades en una base de dades. 734 00:33:55,120 --> 00:33:56,710 Llenguatge de consulta estructurat. 735 00:33:56,710 --> 00:33:59,890 I aquest és essencialment un llenguatge de programació. 736 00:33:59,890 --> 00:34:03,400 Hi ha característiques de la mateixa que No utilitzarem a l'aula. 737 00:34:03,400 --> 00:34:04,710 Però vostè pot efectivament definir funcions. 738 00:34:04,710 --> 00:34:06,870 Es diuen s'emmagatzema procediments de SQL. 739 00:34:06,870 --> 00:34:09,860 Però ens mantenim bastant simple i només utilitzar-lo per algunes operacions bàsiques 740 00:34:09,860 --> 00:34:14,320 com la selecció de les dades, inserir dades, actualització de les dades i eliminar dades. 741 00:34:14,320 --> 00:34:17,400 >> I realment es pot pensar en una base de dades, com una base de dades SQL, com s'acaba de 742 00:34:17,400 --> 00:34:18,800 sent Microsoft Excel. 743 00:34:18,800 --> 00:34:21,989 Atès que SQL es refereix a una relacional base de dades, on 744 00:34:21,989 --> 00:34:23,480 relació només significa taules. 745 00:34:23,480 --> 00:34:24,739 Files i columnes. 746 00:34:24,739 --> 00:34:27,929 Així que qualsevol cosa que vostè pot posar en un full de càlcul així o Google Docs, 747 00:34:27,929 --> 00:34:32,460 es pot posar en una base de dades SQL declarant una taula. 748 00:34:32,460 --> 00:34:34,800 >> Ara, com realment accés aquesta informació? 749 00:34:34,800 --> 00:34:38,239 Bé, amb les ordres o consultes com aquesta. 750 00:34:38,239 --> 00:34:40,199 SELECT, INSERT, UPDATE i DELETE. 751 00:34:40,199 --> 00:34:44,489 I per a la major part, aquests són els quatre únics ingredients que necessitarà per 752 00:34:44,489 --> 00:34:47,370 fer alguna cosa molt poderós en el problema plantejat 07:00. 753 00:34:47,370 --> 00:34:49,940 >> Ara, de tornada al dia, ho faria realitat interactuar amb una base de dades en un 754 00:34:49,940 --> 00:34:52,730 finestra de terminal en blanc i negre en un missatge parpellejant com aquest. 755 00:34:52,730 --> 00:34:56,370 I la base de dades que estem executant en el aparell es diu MySQL, que és 756 00:34:56,370 --> 00:34:58,560 motor de base de dades de codi obert i lliure. 757 00:34:58,560 --> 00:35:02,240 Si es busca a Google i llegir la Wikipedia article, vostè sabrà que el nom és 758 00:35:02,240 --> 00:35:05,060 una mica de transició per a alguns versions de Linux. 759 00:35:05,060 --> 00:35:10,460 Base de dades de Maria és en realitat un forquilla per dir-ho d'MySQL. 760 00:35:10,460 --> 00:35:12,740 >> Llarga història curta, Oracle va comprar MySQL. 761 00:35:12,740 --> 00:35:13,870 Oracle és una empresa gran. 762 00:35:13,870 --> 00:35:17,010 La gent ha estat preocupat que seria no sent bastant com a codi obert, 763 00:35:17,010 --> 00:35:20,930 així que això és només una còpia de MySQL que és sent gratuït, de codi obert encara, i 764 00:35:20,930 --> 00:35:23,550 instal · lat a Fedora Linux per defecte. 765 00:35:23,550 --> 00:35:26,130 >> Però aquest és un tipus de dolor al coll de familiaritzar-amb una 766 00:35:26,130 --> 00:35:27,310 base de dades d'aquesta manera. 767 00:35:27,310 --> 00:35:30,560 Així que incloem en l'aparell CS50 una eina de codi obert anomenat 768 00:35:30,560 --> 00:35:31,700 phpMyAdmin. 769 00:35:31,700 --> 00:35:33,940 Només una coincidència que està escrit en PHP. 770 00:35:33,940 --> 00:35:36,450 No és fonamental necessitat de PHP aquí. 771 00:35:36,450 --> 00:35:40,090 Però això és només una eina basada en web que hem descarregat de forma gratuïta, instal · lada en 772 00:35:40,090 --> 00:35:43,850 l'aparell, que ens permet tenir una interfície gràfica d'usuari amb el qual 773 00:35:43,850 --> 00:35:48,610 per explorar la base de dades de p-conjunt amb set per crear noves bases de dades, 774 00:35:48,610 --> 00:35:51,980 dic per al vostre projecte final si hi havia com, i en última instància, crear 775 00:35:51,980 --> 00:35:55,900 llocs web dinàmics com CS50 Finances que permeten consultar les dades i 776 00:35:55,900 --> 00:35:58,140 actualitzar les dades de forma dinàmica. 777 00:35:58,140 --> 00:36:01,420 >> No hauràs de fer servir només un arxiu de text o CSV. 778 00:36:01,420 --> 00:36:05,950 En realitat es pot utilitzar una base de dades intel · ligent programa perquè pugui executar més 779 00:36:05,950 --> 00:36:10,240 consultes sofisticades que acaba de llegir per tot el lineal. 780 00:36:10,240 --> 00:36:14,150 >> Així, per exemple, això és el que donem fora de la caixa per al p-7 set. 781 00:36:14,150 --> 00:36:18,280 Aquesta és una taula amb almenys aparentment tres columnes, una de les quals és 782 00:36:18,280 --> 00:36:21,450 nom d'usuari, un dels quals és de hash, i l'altre dels quals és ID. 783 00:36:21,450 --> 00:36:26,200 >> Però l'interessant, i només per desentranyar un pensament aquí, nom d'usuari 784 00:36:26,200 --> 00:36:29,270 és presumiblement ja únic, oi? 785 00:36:29,270 --> 00:36:31,190 Vull dir, la majoria de qualsevol lloc web, si vostè té un nom d'usuari, hi ha 786 00:36:31,190 --> 00:36:32,370 No pot haver-hi dos cèsars. 787 00:36:32,370 --> 00:36:33,440 No pot haver-hi dos Malans. 788 00:36:33,440 --> 00:36:34,950 No pot haver-hi dos jharvards. 789 00:36:34,950 --> 00:36:35,600 El seu únic. 790 00:36:35,600 --> 00:36:38,610 En cas contrari, no saben el que jharvard el que realment és. 791 00:36:38,610 --> 00:36:42,710 Llavors, quina podria ser la motivació perquè també que té una tercera columna de l'esquerra 792 00:36:42,710 --> 00:36:46,970 allà anomenat ID, que s'assembla a una nombre que és igualment únic? 793 00:36:46,970 --> 00:36:51,300 Se sent una mica redundant a mi a primera vista. 794 00:36:51,300 --> 00:36:54,910 Per què podria ser convincent per tenir no només els noms d'usuari únics, 795 00:36:54,910 --> 00:36:56,837 sinó també un únic número? 796 00:36:56,837 --> 00:36:59,460 >> AUDIÈNCIA: Podrien tenir la mateixa contrasenya. 797 00:36:59,460 --> 00:37:01,720 >> DAVID Malan: La gent pot tenir la mateixa contrasenya, és clar. 798 00:37:01,720 --> 00:37:03,900 Això podria succeir absolutament. 799 00:37:03,900 --> 00:37:08,270 Però si tenen aquest nom d'usuari únic, que argumentarien que aquesta realitat no 800 00:37:08,270 --> 00:37:11,630 assumpte, perquè si escriu en el seu nom d'usuari, només he de comprovar el seu 801 00:37:11,630 --> 00:37:15,060 contrasenya, els seus hash dels mateixos. 802 00:37:15,060 --> 00:37:15,970 Per què més? 803 00:37:15,970 --> 00:37:17,950 >> AUDIÈNCIA: Cerca més ràpida. 804 00:37:17,950 --> 00:37:18,680 >> DAVID Malan: Cerca més ràpida. 805 00:37:18,680 --> 00:37:19,548 Per què? 806 00:37:19,548 --> 00:37:21,460 >> AUDIÈNCIA: ID és només un. 807 00:37:21,460 --> 00:37:24,040 >> DAVID Malan: ID és només un personatge, o per ser més precisos, és un nombre, 808 00:37:24,040 --> 00:37:26,910 pel que és probable que 32 bits o alguna cosa per l'estil. 809 00:37:26,910 --> 00:37:30,270 Mentre que el nom d'usuari, pel que es veu Jason Hirschhorn està allà és una espècie de 810 00:37:30,270 --> 00:37:33,900 ridículament llarg, i que va a em portarà molt més temps per a cordes 811 00:37:33,900 --> 00:37:40,910 comparar H-I-R-S-C-H-H-O-R-N, i potser a / 0 o alguna cosa per l'estil, per tal 812 00:37:40,910 --> 00:37:45,100 per buscar Jason, en lloc de només dient dóna'm el número d'usuari de dos. 813 00:37:45,100 --> 00:37:46,510 Això és 32 bits. 814 00:37:46,510 --> 00:37:48,550 És un sol INT que vostè ha de comparar. 815 00:37:48,550 --> 00:37:52,150 I de fet, això és exactament per què les bases de dades tendeixen a assignar identificadors únics als 816 00:37:52,150 --> 00:37:53,710 files en ells. 817 00:37:53,710 --> 00:37:56,280 >> Ara, quins altres tipus de dades hi són més de INT i aparentment 818 00:37:56,280 --> 00:37:57,160 cadenes d'aquest tipus? 819 00:37:57,160 --> 00:37:59,700 Bé, per ser més correcte, Bases de dades SQL, com 820 00:37:59,700 --> 00:38:02,060 MySQL, té camps CHAR. 821 00:38:02,060 --> 00:38:05,320 I CHAR una mica enganyosa No hi ha una sola CHAR. 822 00:38:05,320 --> 00:38:10,290 Un camp CHAR en una base de dades MySQL és un o més caràcters, però és un 823 00:38:10,290 --> 00:38:11,780 nombre fix de caràcters. 824 00:38:11,780 --> 00:38:15,710 >> Així, per exemple, si vaig a phpMyAdmin ja que pot tenir ja, o 825 00:38:15,710 --> 00:38:21,340 aviat serà un problema creat set, i em vaig a la meva base de dades, i només per diversió, 826 00:38:21,340 --> 00:38:25,700 crearem una nova taula anomenada prova amb només dues columnes. 827 00:38:25,700 --> 00:38:27,160 Vaig a continuació, feu clic a Vés 828 00:38:27,160 --> 00:38:30,070 I això es farà molt familiar, especialment en el que tu jugues 829 00:38:30,070 --> 00:38:31,130 pel seu compte. 830 00:38:31,130 --> 00:38:34,140 Aquí jo podria escriure ID per crear una nova taula de tipus INT. 831 00:38:34,140 --> 00:38:37,770 Però aquí jo podria escriure nom d'usuari per recrear la taula anterior. 832 00:38:37,770 --> 00:38:40,700 I noti que tinc un munt de tipus per triar. 833 00:38:40,700 --> 00:38:43,610 >> I això també és la raó per phpMyAdmin és una espècie d'agradable. 834 00:38:43,610 --> 00:38:46,770 És una espècie d'auto-aprenentatge en què pot simplement espècie de punt i feu clic a, i 835 00:38:46,770 --> 00:38:50,730 mirar els menús desplegables, i deduir de que el que li dóna poders SQL. 836 00:38:50,730 --> 00:38:54,090 >> I de fet, si trio CHAR, que després ha d'especificar la longitud, o com 837 00:38:54,090 --> 00:38:55,940 molts valors, el nombre de caràcters. 838 00:38:55,940 --> 00:39:00,090 Així que els valors molt comuns són coses com 255, però això és una mica llarg. 839 00:39:00,090 --> 00:39:02,250 Comunament és vuit per a un nom d'usuari. 840 00:39:02,250 --> 00:39:03,590 Però això és una mica petita en aquests dies. 841 00:39:03,590 --> 00:39:05,430 Així que aquesta és una decisió de disseny. 842 00:39:05,430 --> 00:39:08,630 És 8 caràcters com a màxim, 32, 255, 1000? 843 00:39:08,630 --> 00:39:09,830 És realment depèn de tu. 844 00:39:09,830 --> 00:39:12,350 Però un camp CHAR és un nombre fix. 845 00:39:12,350 --> 00:39:16,420 Així que tria molt pocs i ets una mica cargolat si vols un nom d'usuari més. 846 00:39:16,420 --> 00:39:19,132 Trieu de més i el que és l'inconvenient? 847 00:39:19,132 --> 00:39:20,820 >> AUDIÈNCIA: [inaudible]. 848 00:39:20,820 --> 00:39:21,620 >> DAVID Malan: És un malbaratament. 849 00:39:21,620 --> 00:39:24,835 Igual que en C, si vostè té una més gran part de la memòria que vostè necessita, vostè és 850 00:39:24,835 --> 00:39:27,190 perdent el temps i desaprofitant espai. 851 00:39:27,190 --> 00:39:31,430 Així com una alternativa, hi ha VARCHAR, que resol aquest problema 852 00:39:31,430 --> 00:39:36,390 el tractament de la longitud no com una longitud fixa, sinó com una longitud màxima, i l'ús d'un 853 00:39:36,390 --> 00:39:40,990 nombre variable de caràcters, que després tendeix a utilitzar només la quantitat de CHAR com vostè 854 00:39:40,990 --> 00:39:42,710 realment es necessita. 855 00:39:42,710 --> 00:39:43,670 Això sona perfecte. 856 00:39:43,670 --> 00:39:45,640 >> Per què no ens desfem de l' Dades de tipus char, llavors? 857 00:39:45,640 --> 00:39:48,500 Quines podrien ser les desavantatges de utilitzant dades VARCHAR, que sona 858 00:39:48,500 --> 00:39:51,644 com si fos una bona victòria? 859 00:39:51,644 --> 00:39:52,596 Sí? 860 00:39:52,596 --> 00:39:53,846 >> AUDIÈNCIA: [inaudible]. 861 00:39:53,846 --> 00:39:57,360 862 00:39:57,360 --> 00:39:57,790 >> DAVID Malan: OK, bo. 863 00:39:57,790 --> 00:40:01,101 Així que si totes les dades és el mateix longitud, quin és el problema? 864 00:40:01,101 --> 00:40:05,250 >> AUDIÈNCIA: Perquè estàs perdent dades per dir-li a tots. 865 00:40:05,250 --> 00:40:09,060 >> DAVID Malan: Llavors, si totes les dades es la mateixa longitud, però, jo argumentaria 866 00:40:09,060 --> 00:40:12,300 que a l'especificar una longitud màxima a VARCHAR no és diferent de 867 00:40:12,300 --> 00:40:16,070 especificant una longitud fixa de CHAR si vostè sap que el nombre d'anticipació. 868 00:40:16,070 --> 00:40:19,500 Però no és veritat, i vaig a ordenar d' extreure de la resposta a la realitat 869 00:40:19,500 --> 00:40:22,610 que encara hi ha un màxim, el que podria ser molest, especialment si 870 00:40:22,610 --> 00:40:25,920 trobar el nom d'una persona que és inusualment llarg que no ho va fer 871 00:40:25,920 --> 00:40:26,860 anticipar. 872 00:40:26,860 --> 00:40:31,420 I també és una mica menys eficient per buscar realment en VARCHAR com 873 00:40:31,420 --> 00:40:35,620 oposició a CHAR recerca, especialment per a taules llargues que tenen un munt i 874 00:40:35,620 --> 00:40:36,510 gran quantitat de dades. 875 00:40:36,510 --> 00:40:40,060 Així que aquí també, temàtica és nou cap opció òbvia. 876 00:40:40,060 --> 00:40:42,870 >> Així que per donar-li un sentit de si els tipus de dades que poden ser del seu interès 877 00:40:42,870 --> 00:40:45,400 ja sigui per p-conjunt de set oa el futur, és INT. 878 00:40:45,400 --> 00:40:47,270 Hi ha BIGINT, que és com molt de temps. 879 00:40:47,270 --> 00:40:48,880 Tendeix a ser de 64 bits. 880 00:40:48,880 --> 00:40:51,640 Hi ha decimal, que es veurà a el conjunt de problemes, que és un tant 881 00:40:51,640 --> 00:40:55,300 netejador de resposta als problemes que trobat amb el flotador i surant 882 00:40:55,300 --> 00:40:55,980 imprecisió punt. 883 00:40:55,980 --> 00:40:57,390 I després hi DATETIME. 884 00:40:57,390 --> 00:41:01,530 Hi ha, literalment, un tipus de dades que té per semblar-se a un any, un mes, un dia, 885 00:41:01,530 --> 00:41:03,730 i una hora, minuts i segons. 886 00:41:03,730 --> 00:41:07,470 >> Però també tenen bases de dades SQL coses que van a cridar els índexs. 887 00:41:07,470 --> 00:41:11,630 I un índex és una cosa que especificar en crear la taula de 888 00:41:11,630 --> 00:41:15,720 fer recerques i altres operacions més eficient. 889 00:41:15,720 --> 00:41:18,550 En concret, hi ha alguna cosa que es diu l'índex principal que es va poder 890 00:41:18,550 --> 00:41:19,440 declaro el següent. 891 00:41:19,440 --> 00:41:22,330 >> Vam fer això per a vostè amb el taula d'usuaris que li donen. 892 00:41:22,330 --> 00:41:26,160 Però fixa't si estigués recreant manualment la taula d'usuaris aquí donant 893 00:41:26,160 --> 00:41:27,110 un nom d'usuari. 894 00:41:27,110 --> 00:41:28,125 Ja especifiqui ID. 895 00:41:28,125 --> 00:41:29,330 He especificat INT. 896 00:41:29,330 --> 00:41:32,000 Que s'especifica nom d'usuari amb 32 caràcters com a màxim. 897 00:41:32,000 --> 00:41:36,140 Però si ens mantenim en aquest desplaçament bastant àmplia finestra, es va adonar que hi ha un 898 00:41:36,140 --> 00:41:38,260 munt d'altres coses que puc especificar. 899 00:41:38,260 --> 00:41:40,950 >> Un, puc especificar atributs com, ja saps què, aquest 900 00:41:40,950 --> 00:41:42,190 INT ha de ser UNSIGNED. 901 00:41:42,190 --> 00:41:45,510 No vull que els nombres negatius, així que anem a fer-ho sense signar. 902 00:41:45,510 --> 00:41:48,660 Null no és rellevant aquí perquè Jo vull que tots els usuaris 903 00:41:48,660 --> 00:41:49,640 tenir un nombre únic. 904 00:41:49,640 --> 00:41:50,830 Jo no vull que sigui nul. 905 00:41:50,830 --> 00:41:52,330 >> Però això és interessant. 906 00:41:52,330 --> 00:41:57,780 Puc especificar que ID és o bé la clau primària d'aquesta base de dades, o és 907 00:41:57,780 --> 00:42:00,620 text únic, o està indexada o complet. 908 00:42:00,620 --> 00:42:05,630 Així que per als propòsits d'avui, llarga història que significa curt, primària que això es 909 00:42:05,630 --> 00:42:10,570 ser tant conceptual com tècnicament el camp que s'utilitza exclusivament per 910 00:42:10,570 --> 00:42:12,140 identificar els usuaris. 911 00:42:12,140 --> 00:42:16,140 >> Així que quan mirem els usuaris, això és una espècie de la promesa de mirar cap amunt en la seva majoria per 912 00:42:16,140 --> 00:42:17,370 que identificador únic. 913 00:42:17,370 --> 00:42:21,930 I la base de dades s'ha d'assegurar que si tenir un nombre d'usuari 3, no es pot 914 00:42:21,930 --> 00:42:25,400 inserir físicament a un altre usuari amb el mateix número 3. 915 00:42:25,400 --> 00:42:28,380 La base de dades només es negarà per desar els canvis. 916 00:42:28,380 --> 00:42:32,310 La qual cosa és una bona cosa, perquè es pot protegir-se de si mateix. jo 917 00:42:32,310 --> 00:42:34,270 >> D'altra banda, el nom d'usuari. 918 00:42:34,270 --> 00:42:37,670 Així que la segona fila, el record, és el camp de nom d'usuari. 919 00:42:37,670 --> 00:42:41,860 Així que la segona fila aquí és nom d'usuari, com ho vam fer a l'extrem esquerre allà. 920 00:42:41,860 --> 00:42:43,940 >> Què més podria jo voler especificar? 921 00:42:43,940 --> 00:42:47,840 No em permet, d'acord amb SQL, per especificar dues claus primàries. 922 00:42:47,840 --> 00:42:50,750 pot especificar una clau conjunta en què mirar dos camps, però no poden 923 00:42:50,750 --> 00:42:52,260 ser individualment claus primàries. 924 00:42:52,260 --> 00:42:54,750 Així que això està fora de la qüestió. 925 00:42:54,750 --> 00:42:56,040 Llavors, què podria jo voler triar? 926 00:42:56,040 --> 00:42:59,710 >> Bé, UNIQUE és similar en esperit a un clau principal en el qual s'especifica aquesta 927 00:42:59,710 --> 00:43:03,570 camp ha de ser únic, però és no serà el 928 00:43:03,570 --> 00:43:04,410 Jo ús tot el temps. 929 00:43:04,410 --> 00:43:08,450 I nosaltres no utilitzarem aquest tots el temps pel que una vegada més la raó? 930 00:43:08,450 --> 00:43:10,490 És potencialment més lent si és un llarg nom d'usuari. 931 00:43:10,490 --> 00:43:11,740 És només una pèrdua de temps. 932 00:43:11,740 --> 00:43:16,140 >> INDEX, per la seva banda, estableix que és No anava a ser únic, però m'agradaria 933 00:43:16,140 --> 00:43:19,470 a treballar la seva màgia sota el campana perquè sigui més ràpid per a mi 934 00:43:19,470 --> 00:43:21,420 buscar en aquest camp. 935 00:43:21,420 --> 00:43:23,320 Així que això probablement no és rellevant aquí. 936 00:43:23,320 --> 00:43:26,500 Per nom d'usuari, jo diria que UNIQUE és una bona resposta. 937 00:43:26,500 --> 00:43:31,200 Però suposem que vam fer més usuaris interessant que els noms d'usuari només, 938 00:43:31,200 --> 00:43:32,430 hashes, i números d'identificació. 939 00:43:32,430 --> 00:43:33,860 Què passa si li vam donar la gent noms complets? 940 00:43:33,860 --> 00:43:37,700 ¿I si els vam donar adreces i altres dades sobre ells? 941 00:43:37,700 --> 00:43:43,360 >> Bé, si s'especifica que una columna d'una base de dades està indexada, que significa que 942 00:43:43,360 --> 00:43:47,730 MySQL o Oracle, o qualsevol base de dades que està utilitzant, ha de treballar la seva màgia 943 00:43:47,730 --> 00:43:51,300 i l'ús d'algun tipus de dades de fantasia s'estructura com un arbre o un trienni, o un 944 00:43:51,300 --> 00:43:55,940 taula hash o alguna cosa per garantir que en buscar dades utilitzant 945 00:43:55,940 --> 00:43:58,150 seleccionar en aquest camp en particular - 946 00:43:58,150 --> 00:44:01,310 m'agradaria mostrar a tots que viu a Oxford Street. 947 00:44:01,310 --> 00:44:02,540 Una consulta així. 948 00:44:02,540 --> 00:44:06,250 Si heu especificat per endavant que desitja un índex en aquest camp, la 949 00:44:06,250 --> 00:44:09,050 Recerques serà molt, molt més ràpid. 950 00:44:09,050 --> 00:44:12,090 >> Si no s'especifica un índex, la millor que pot fer és una recerca lineal si 951 00:44:12,090 --> 00:44:13,030 no està resolt. 952 00:44:13,030 --> 00:44:16,220 Però si s'especifica INDEX, l'intel · ligent persones que van fer la base de dades - 953 00:44:16,220 --> 00:44:19,340 persones com vostè que ara saben els arbres i tries i taules hash - 954 00:44:19,340 --> 00:44:23,220 construirà automàticament aquestes dades a estructura en la memòria RAM per assegurar-se que 955 00:44:23,220 --> 00:44:26,050 aquestes recerques són molt més ràpids. 956 00:44:26,050 --> 00:44:29,660 >> Fulltext part és similar en esperit, però li permet fer comodí 957 00:44:29,660 --> 00:44:35,480 Recerques, m'agrada mostrar a tots que viu en els carrers que comencen amb la 958 00:44:35,480 --> 00:44:36,960 lletra O per qualsevol raó. 959 00:44:36,960 --> 00:44:38,850 Vostè pot fer cerques amb comodins d'aquesta manera. 960 00:44:38,850 --> 00:44:45,880 O bé, les coses més atractives com a espectacle mi tots els que tenen la paraula - 961 00:44:45,880 --> 00:44:49,400 mostreu-me tot aquell el nom comença amb una carta particular. 962 00:44:49,400 --> 00:44:51,880 Pots buscar per paraules clau d'aquesta manera. 963 00:44:51,880 --> 00:44:52,630 Està bé. 964 00:44:52,630 --> 00:44:55,760 >> Així, les oportunitats de disseny hi ha potencial. 965 00:44:55,760 --> 00:44:57,740 Hi ha altres que vaig a agitar les mans en. 966 00:44:57,740 --> 00:45:00,530 Resulta que vostè pot tenir diferents motors d'emmagatzematge. 967 00:45:00,530 --> 00:45:04,390 I això és més misteriós del que necessitem sens dubte per al problema d'establir 07:00. 968 00:45:04,390 --> 00:45:06,920 Per defecte, vostès estan utilitzant cosa que es diu InnoDB. 969 00:45:06,920 --> 00:45:10,910 Veuràs esment d'això en algun lloc més probable és que la interfície de phpMyAdmin. 970 00:45:10,910 --> 00:45:14,130 Però saben que hi ha un altre disseny decisions que són de potencial 971 00:45:14,130 --> 00:45:18,030 interès vénen projectes finals si fer alguna cosa basat en la web. 972 00:45:18,030 --> 00:45:19,330 >> Però farem això. 973 00:45:19,330 --> 00:45:23,130 Seguirem endavant i posar això en la pantalla com a reclam per a una història 974 00:45:23,130 --> 00:45:26,330 relacionat amb vostè, un company de quart, i un got de llet. 975 00:45:26,330 --> 00:45:28,240 Prenguem a dos minuts o menys de setmana aquí. 976 00:45:28,240 --> 00:45:31,060 I si pots quedar-te, anem a venir cap enrere, miri una mica més en SQL, i 977 00:45:31,060 --> 00:45:35,160 a continuació, una mica de JavaScript amb p-conjunt de vuit en ment. 978 00:45:35,160 --> 00:45:36,120 >> Està bé. 979 00:45:36,120 --> 00:45:40,420 Per tant, anem a començar a pensar sobre un cas de la cantonada que pot sorgir amb molta facilitat 980 00:45:40,420 --> 00:45:44,240 en el context de la utilització d'una base de dades, o francament, fins i tot amb les coses del món real 981 00:45:44,240 --> 00:45:46,280 com caixers automàtics per obtenir diners. 982 00:45:46,280 --> 00:45:47,640 Així que aquí està una nevera. 983 00:45:47,640 --> 00:45:50,040 Suposem que tens una també a la seva residència o casa. 984 00:45:50,040 --> 00:45:54,990 I tens un company de quart, i tots dos realment t'agrada la llet, per exemple. 985 00:45:54,990 --> 00:45:57,210 >> Així arriba a casa de classe un dia. 986 00:45:57,210 --> 00:45:58,490 Ell o ella encara no ha tornat. 987 00:45:58,490 --> 00:45:59,180 Obres la nevera. 988 00:45:59,180 --> 00:46:00,870 De debò vols un gran got de llet. 989 00:46:00,870 --> 00:46:01,820 No hi ha llet. 990 00:46:01,820 --> 00:46:02,920 Llavors, què fa vostè? 991 00:46:02,920 --> 00:46:03,840 Es tanca la nevera. 992 00:46:03,840 --> 00:46:04,670 Vostè agafa les claus. 993 00:46:04,670 --> 00:46:05,930 Vostè surt a la plaça. 994 00:46:05,930 --> 00:46:09,240 I s'obté d'acord al CVS als coses d'autoservei, que sempre 995 00:46:09,240 --> 00:46:11,180 prendre més temps que en realitat tenir caixers. 996 00:46:11,180 --> 00:46:11,820 De totes maneres. 997 00:46:11,820 --> 00:46:15,490 >> Així que, mentrestant, punt punt punt, el seu company de pis arriba a casa i ell o ella 998 00:46:15,490 --> 00:46:17,440 igualment té un anhel una mica de llet. 999 00:46:17,440 --> 00:46:20,380 Així que ell o ella obre la nevera, mira dins, i oh, maledicció. 1000 00:46:20,380 --> 00:46:21,160 No hi ha llet. 1001 00:46:21,160 --> 00:46:24,750 Així que ell o ella es dirigeix, que passa d'anar als altres CVS, que era només un 1002 00:46:24,750 --> 00:46:27,900 quadra per alguna raó, i ell o es posa a la fila per comprar una mica de llet. 1003 00:46:27,900 --> 00:46:30,480 >> Mentrestant, arriba a casa, ell o ella arriba a casa, i el que fan 1004 00:46:30,480 --> 00:46:31,980 té en última instància? 1005 00:46:31,980 --> 00:46:33,080 Dues vegades tant com la llet. 1006 00:46:33,080 --> 00:46:34,620 Però no m'agrada molt llet que molt. 1007 00:46:34,620 --> 00:46:37,300 Així que ara vostè té tanta llet que ara un d'ells és només va a anar agra 1008 00:46:37,300 --> 00:46:37,820 temps. 1009 00:46:37,820 --> 00:46:39,370 Així que això és realment un problema greu. 1010 00:46:39,370 --> 00:46:39,900 Cert? 1011 00:46:39,900 --> 00:46:41,990 >> Llavors, què ha passat? 1012 00:46:41,990 --> 00:46:44,810 Així que bàsicament, això és una espècie d'un exemple ridícul. 1013 00:46:44,810 --> 00:46:48,580 Però sota la campana, el que hem tingut passar aquí és alhora que ens registrem 1014 00:46:48,580 --> 00:46:52,390 l'estat d'alguna peça de la memòria, la nevera. 1015 00:46:52,390 --> 00:46:54,420 Tots dos comprovat l'estat d'alguna variable. 1016 00:46:54,420 --> 00:46:57,360 Tots dos es va arribar a una conclusió que després va actuar en. 1017 00:46:57,360 --> 00:47:01,420 Però, per desgràcia, mentre que el seu company de quart estava a la botiga, l'estat d'aquest 1018 00:47:01,420 --> 00:47:05,670 variable de canvi, ell o ella va tornar i ara vol canviar l'estat, però 1019 00:47:05,670 --> 00:47:07,480 que ja ha canviat en ell o ella. 1020 00:47:07,480 --> 00:47:11,120 I, per descomptat, ell o ella no tindria anat a la botiga si ho sabessin 1021 00:47:11,120 --> 00:47:13,010 que ja estava en camí. 1022 00:47:13,010 --> 00:47:16,430 >> Així que en el món real, com vas poder evitar aquest problema, suposant que té 1023 00:47:16,430 --> 00:47:18,940 nevera, té un company de quart, i que realment t'agrada la llet? 1024 00:47:18,940 --> 00:47:19,760 >> AUDIÈNCIA: La comunicació. 1025 00:47:19,760 --> 00:47:20,580 >> DAVID Malan: Comunicació. 1026 00:47:20,580 --> 00:47:21,160 D'acord. 1027 00:47:21,160 --> 00:47:22,500 Però, com pot vostè comunicar-se? 1028 00:47:22,500 --> 00:47:23,990 >> AUDIÈNCIA: Deixa una nota. 1029 00:47:23,990 --> 00:47:25,480 >> DAVID Malan: Deixa una nota, oi? 1030 00:47:25,480 --> 00:47:28,025 Sempre deixi una nota, fans de la sèrie. 1031 00:47:28,025 --> 00:47:31,580 Molt bé, així que sempre deixen una nota o posar veritablement com un cadenat o alguna cosa 1032 00:47:31,580 --> 00:47:35,440 a la nevera que manté la seva company de pis a partir de la inspecció de l'estat de 1033 00:47:35,440 --> 00:47:36,540 aquesta variable. 1034 00:47:36,540 --> 00:47:40,800 >> Ara, per què podria ser això pertinent per problema conjunt de set, o pels caixers automàtics. 1035 00:47:40,800 --> 00:47:46,780 Bé, imagina un món en un caixer automàtic on vostè podria ser capaç de pujar a un caixer automàtic 1036 00:47:46,780 --> 00:47:48,920 màquina d'aquí, i un altre caixer automàtic aquí. 1037 00:47:48,920 --> 00:47:50,680 I això passa molt sovint. 1038 00:47:50,680 --> 00:47:54,150 I supose que té dues targetes de caixer automàtic, que és possible obtenir. 1039 00:47:54,150 --> 00:47:57,420 I vostè registra en ambdues màquines eficaçment a la vegada, amb sort 1040 00:47:57,420 --> 00:47:58,660 mentre que ningú està mirant. 1041 00:47:58,660 --> 00:48:01,260 I a continuació, escriviu en el PIN més o menys simultàniament. 1042 00:48:01,260 --> 00:48:06,280 I després fas una consulta equilibri per veure la quantitat de diners que té. 1043 00:48:06,280 --> 00:48:08,920 I diguem que vostè té $ 100 queda en el seu compte. 1044 00:48:08,920 --> 00:48:13,310 Així que, essencialment de forma simultània, dir un, zero, zero, anoti. 1045 00:48:13,310 --> 00:48:16,000 I espero tornar alguns diners. 1046 00:48:16,000 --> 00:48:18,440 >> Però, quants diners t'has tornat? 1047 00:48:18,440 --> 00:48:21,710 Ara els ordinadors al final del dia, especialment si estan parlant amb 1048 00:48:21,710 --> 00:48:27,360 servidors, no necessàriament es fan les coses en l'ordre en que s'espera. 1049 00:48:27,360 --> 00:48:30,860 >> Així que suposem que el que succeeix, per siguin quins siguin els problemes de velocitat de la xarxa allà 1050 00:48:30,860 --> 00:48:34,530 són, o qüestions de CPU ha, o res d'això, suposem que la 1051 00:48:34,530 --> 00:48:38,530 primer ATM comprova el seu equilibri i veu, oh, aquesta persona té $ 100. 1052 00:48:38,530 --> 00:48:41,840 Però després es distreu perquè potser una còpia de seguretat està succeint i el que és 1053 00:48:41,840 --> 00:48:42,500 desacceleració. 1054 00:48:42,500 --> 00:48:45,080 O potser durant la comprovació, la xarxa connexió es va posar una mica més lent perquè 1055 00:48:45,080 --> 00:48:45,910 això només succeeix. 1056 00:48:45,910 --> 00:48:47,100 Són dispositius físics. 1057 00:48:47,100 --> 00:48:49,330 Així que mentrestant, el segon caixer automàtic està fent la mateixa pregunta. 1058 00:48:49,330 --> 00:48:53,030 Quants diners té David? 100 $ és la resposta. 1059 00:48:53,030 --> 00:48:58,930 Però com que el primer caixer automàtic encara no ha envia el missatge de restar $ 100, tant 1060 00:48:58,930 --> 00:49:03,000 Caixers automàtics han inspeccionat la volta del banc, veient que hi ha 100 $ allà, i ara 1061 00:49:03,000 --> 00:49:07,160 ambdues màquines són potencialment va a escopir una resposta. 1062 00:49:07,160 --> 00:49:12,240 >> Ara, això és molt bo per a vostè en algun sentit si el que fa el banc en última instància 1063 00:49:12,240 --> 00:49:17,200 és canviar la quantitat a menys de 100 per establint la variable igual a la seva 1064 00:49:17,200 --> 00:49:21,570 compte bancari igual a 0, en contraposició per fer menys 100. 1065 00:49:21,570 --> 00:49:24,410 Ara, en el pitjor dels casos per al banc - 1066 00:49:24,410 --> 00:49:27,470 o en el millor per al banc, per la seva banda, et donen $ 200, i 1067 00:49:27,470 --> 00:49:31,690 seu compte bancari ara mostra negativa $ 100, que en realitat no ho fa 1068 00:49:31,690 --> 00:49:32,950 que beneficiarà a tots. 1069 00:49:32,950 --> 00:49:36,500 Però el punt és que aquesta cursa condició perquè dos companys de quart que aconsegueixen 1070 00:49:36,500 --> 00:49:40,660 llet, o per a dos caixers automàtics que tracten d'obtenir diners en efectiu i canviar l'estat d'una volta 1071 00:49:40,660 --> 00:49:44,510 al mateix temps hi ha cap vegada que tingui una base de dades. 1072 00:49:44,510 --> 00:49:48,290 >> Ara a problema plantejat 07:00, aquesta qüestió sorgeix en el sentit que si vostè compra una 1073 00:49:48,290 --> 00:49:52,110 participació en accions de Facebook i, a continuació, per exemple, vostè compra una segona part de 1074 00:49:52,110 --> 00:49:55,160 Accions de Facebook, vostè necessita per fer una decisió pel que fa al programador. 1075 00:49:55,160 --> 00:49:58,710 Per tal de decidir la forma d'actualitzar la base de dades, el més probable és que vas a 1076 00:49:58,710 --> 00:50:02,250 tenir una fila d'aquesta població, i això és una manera de posar-ho en pràctica. 1077 00:50:02,250 --> 00:50:06,640 I tindràs una acció de FB, que és el seu símbol ticker 1078 00:50:06,640 --> 00:50:10,120 per aquest nom d'usuari o aquest usuari Identificació, l'identificador únic. 1079 00:50:10,120 --> 00:50:12,340 >> Però la mateixa història pot succeir aquí. 1080 00:50:12,340 --> 00:50:15,800 Si fas un SELECT de SQL, com es veurà en el problema d'establir 07:00 quan vostè veu, 1081 00:50:15,800 --> 00:50:18,460 oh, David té una acció d'accions de Facebook. 1082 00:50:18,460 --> 00:50:23,240 Permetin-me ara canviar això per ser dues accions, perquè vol comprar una 1083 00:50:23,240 --> 00:50:24,120 segona part. 1084 00:50:24,120 --> 00:50:27,860 Però suposem que David en realitat tenia dos finestres obertes del navegador, o suposen que 1085 00:50:27,860 --> 00:50:32,150 és un compte conjunt amb dos cònjuges, i dos d'ells estan tractant de dur a terme 1086 00:50:32,150 --> 00:50:36,770 la mateixa operació, allà, també, la hi ha la possibilitat que una decisió sigui 1087 00:50:36,770 --> 00:50:39,670 realitzat en base a l'anterior estat del món - 1088 00:50:39,670 --> 00:50:41,290 el compte té una acció - 1089 00:50:41,290 --> 00:50:45,630 i dues persones, o tots dos servidors, ara tractar de dir incrementar a dues accions. 1090 00:50:45,630 --> 00:50:49,020 Però en aquest cas, és possible que hi hagi carregat em de diners per a ambdues accions, però 1091 00:50:49,020 --> 00:50:50,830 incrementat només aquesta vegada. 1092 00:50:50,830 --> 00:50:54,730 >> Així que en resum, el problema fonamental aquí, igual que amb la broma sobre deixar un 1093 00:50:54,730 --> 00:50:58,750 tingui en compte, o posar un cadenat en ell, és si dues persones, o dos temes - 1094 00:50:58,750 --> 00:50:59,930 pensar de nou a zero - 1095 00:50:59,930 --> 00:51:03,220 Podeu inspeccionar l'estat d'alguna variable i després tractar de canviar aquesta variable, 1096 00:51:03,220 --> 00:51:07,950 però aquestes dues coses no succeeixen en el mateix temps, però poden quedar interromput 1097 00:51:07,950 --> 00:51:11,500 per altres coses que succeeixen, les dades poden entrar en un estat molt estrany. 1098 00:51:11,500 --> 00:51:15,450 I vostè pot beneficiar o pots patir en el sentit de l'exemple de diners. 1099 00:51:15,450 --> 00:51:18,110 >> Així que en conjunt de problemes 7, et donem aquesta una línia de codi, que durant molt temps 1100 00:51:18,110 --> 00:51:21,000 conte, resol aquest problema en MySQL. 1101 00:51:21,000 --> 00:51:24,950 Aquesta molt llarga instrucció que no fa fins i tot que càpiguen en una línia en la 1102 00:51:24,950 --> 00:51:30,370 pantalla aquí assegura que la seva operació és el que s'anomena atòmica. 1103 00:51:30,370 --> 00:51:33,720 Tot succeeix alhora, o no succeeix en absolut. 1104 00:51:33,720 --> 00:51:37,530 Aquesta llarguíssima frase no pot quedar interromput parcialment. 1105 00:51:37,530 --> 00:51:39,840 >> I el que fa és, literalment, el que diu. 1106 00:51:39,840 --> 00:51:44,200 Inseriu en alguna taula següent tres camps dels valors específics, 1107 00:51:44,200 --> 00:51:47,280 però per duplicat de la clau, no faci una inserció. 1108 00:51:47,280 --> 00:51:48,280 Feu una actualització. 1109 00:51:48,280 --> 00:51:52,450 Així que això és com fer un SELECT i un INSERT per dir-ho, a la vegada. 1110 00:51:52,450 --> 00:51:55,150 I quina és la clau que probablement es refereix aquí? 1111 00:51:55,150 --> 00:51:58,300 1112 00:51:58,300 --> 00:52:01,380 >> Resulta, i veuràs això en problema estableix les especificacions de set, perquè 1113 00:52:01,380 --> 00:52:06,040 hem declarat que hi ha una clau única en aquesta taula en particular de manera que 1114 00:52:06,040 --> 00:52:08,480 no es pot tenir diverses files per al mateix usuari amb la 1115 00:52:08,480 --> 00:52:10,150 mateixa acció de penic símbol - 1116 00:52:10,150 --> 00:52:13,780 en aquest exemple aquí, DVN.V és 1 penny estoc ximple que 1117 00:52:13,780 --> 00:52:14,980 consulti en l'especificació. 1118 00:52:14,980 --> 00:52:17,860 Perquè hem declarat el fan únic, el que això significa és que si vostè 1119 00:52:17,860 --> 00:52:23,580 tractar d'inserir una fila duplicada, ets en lloc d'anar a actualitzar sense 1120 00:52:23,580 --> 00:52:27,020 qualsevol altra persona tenen l'oportunitat de canviar l'estat del món tampoc. 1121 00:52:27,020 --> 00:52:29,400 Així que en resum, el que garanteix coses són atòmiques. 1122 00:52:29,400 --> 00:52:32,530 >> De manera més general encara, bases de dades com MySQL - 1123 00:52:32,530 --> 00:52:35,460 i vostè no necessita aquesta funció per p-7 set, però tingui en compte per 1124 00:52:35,460 --> 00:52:36,200 el futur - 1125 00:52:36,200 --> 00:52:38,870 recolzar el que es diuen les transaccions, on es pot dir 1126 00:52:38,870 --> 00:52:40,990 Iniciar la transacció, literalment. 1127 00:52:40,990 --> 00:52:43,270 A continuació, pot executar dues sentències de SQL. 1128 00:52:43,270 --> 00:52:45,710 I una sentència SQL, com es veurà en p-7 set, es veu una mica 1129 00:52:45,710 --> 00:52:46,750 alguna cosa com això. 1130 00:52:46,750 --> 00:52:48,820 Actualització d'una trucada compte de taula. 1131 00:52:48,820 --> 00:52:52,550 Indiqueu la columna saldo equivalent al que la columna de la balança actualment 1132 00:52:52,550 --> 00:52:57,280 és menys 1000 quan el nombre, la número de compte, igual que l'ID d'usuari, 1133 00:52:57,280 --> 00:53:00,830 és igual a 2, i després actualitzar compte dot dot dot. 1134 00:53:00,830 --> 00:53:04,350 >> Així que en termes simples, què és el que aquests dos consultes semblen estar fent en el 1135 00:53:04,350 --> 00:53:05,840 veritable sentit de món de la banca? 1136 00:53:05,840 --> 00:53:07,440 >> AUDIÈNCIA: Transferència d'estalvis. 1137 00:53:07,440 --> 00:53:08,020 >> DAVID Malan: Exactament. 1138 00:53:08,020 --> 00:53:10,470 Transferència de fons d'una en compte a l'altra. 1139 00:53:10,470 --> 00:53:14,400 I aquest és un altre exemple en què realment volen aquestes dues coses que succeeixen 1140 00:53:14,400 --> 00:53:15,570 o no succeir. 1141 00:53:15,570 --> 00:53:18,880 No vol que alguna cosa s'interposi en el enmig d'ells i potencialment malmetre 1142 00:53:18,880 --> 00:53:22,220 les matemàtiques, o fer malbé la quantitat diners que té, o quant 1143 00:53:22,220 --> 00:53:23,170 diners que el banc té. 1144 00:53:23,170 --> 00:53:26,890 Així que el que és realment bo de les transaccions en MySQL és que, i 1145 00:53:26,890 --> 00:53:30,160 bases de dades de manera més general, és que i les persones intel · ligents que han implementats 1146 00:53:30,160 --> 00:53:33,670 aquestes característiques d'esbrinar com fer Assegureu-vos que les dues coses succeeixen 1147 00:53:33,670 --> 00:53:35,120 o no en absolut. 1148 00:53:35,120 --> 00:53:38,580 >> I si vostè està realment aspira a fer un lloc web que és utilitzat per la gent en 1149 00:53:38,580 --> 00:53:41,490 campus, la gent en el món real, fent alguna cosa en el sentit d'inici, 1150 00:53:41,490 --> 00:53:43,300 aquests són els tipus de decisions de disseny que 1151 00:53:43,300 --> 00:53:45,020 cada vegada tan important. 1152 00:53:45,020 --> 00:53:48,240 En cas contrari, vostè comença a perdre dades, perdre els usuaris, o en el pitjor cas com 1153 00:53:48,240 --> 00:53:51,800 que hem vist aquí, el que podria perdre diners. 1154 00:53:51,800 --> 00:53:56,180 Així que de nou, més sobre això en conjunt de problemes 07:00, així com potser per a alguns dels 1155 00:53:56,180 --> 00:53:57,530 que en els projectes finals. 1156 00:53:57,530 --> 00:54:01,870 >> Així que anem a canviar aquesta imatge que teníem Fa un moment just a una forma més. 1157 00:54:01,870 --> 00:54:04,070 Així que permetin-me realment veure si puc - 1158 00:54:04,070 --> 00:54:06,030 doncs no, això s'ha anat. 1159 00:54:06,030 --> 00:54:06,690 Aquí està. 1160 00:54:06,690 --> 00:54:09,020 >> Així que això és on ho deixem l'última vegada. 1161 00:54:09,020 --> 00:54:12,390 I resulta que anem a tirar una cosa més en la barreja aquí - 1162 00:54:12,390 --> 00:54:14,510 un llenguatge anomenat JavaScript. 1163 00:54:14,510 --> 00:54:18,060 Així JavaScript realitat s'ajusta en aquesta peça - 1164 00:54:18,060 --> 00:54:22,086 i jo no acabava de deixar prou espai, així que això no és ara a escala. 1165 00:54:22,086 --> 00:54:23,900 OK, això és realment patètic. 1166 00:54:23,900 --> 00:54:27,075 OK, així que això és JavaScript. 1167 00:54:27,075 --> 00:54:27,340 Està bé. 1168 00:54:27,340 --> 00:54:28,760 Realment m'estic fent un flac favor. 1169 00:54:28,760 --> 00:54:29,390 Està bé. 1170 00:54:29,390 --> 00:54:34,790 >> Així JavaScript és un altre de programació llenguatge, i el nostre passat, si això ajuda 1171 00:54:34,790 --> 00:54:37,770 assegurar-li que no hi ha molt més de les boques d'incendis aquí. 1172 00:54:37,770 --> 00:54:41,100 Així Javascript és també una interpretació llenguatge, el que significa que no ho fa 1173 00:54:41,100 --> 00:54:42,670 compilar en zeros i uns. 1174 00:54:42,670 --> 00:54:43,690 Vostè acaba d'executar. 1175 00:54:43,690 --> 00:54:47,680 Però el que és fonamentalment diferent amb JavaScript generalment és que vostè 1176 00:54:47,680 --> 00:54:49,815 no s'executen en el seu servidor web. 1177 00:54:49,815 --> 00:54:52,570 No aconsegueix executar en el aparell de per si. 1178 00:54:52,570 --> 00:54:57,490 Més aviat, es descarrega per un usuari a través d'HTTP al navegador - 1179 00:54:57,490 --> 00:55:00,260 Chrome, Safari, Internet Explorer, Firefox, el que sigui - 1180 00:55:00,260 --> 00:55:03,860 i és el navegador que executa aquest en particular llenguatge de programació. 1181 00:55:03,860 --> 00:55:08,000 >> Així que per ser clars, PHP ha estat fins ara executat ja sigui a la línia d'ordres en 1182 00:55:08,000 --> 00:55:11,290 nostra finestra en blanc i negre, en un servidor com l'aparell, un ordinador 1183 00:55:11,290 --> 00:55:14,490 agradaria que l'aparell, o que ha estat executat per un servidor web 1184 00:55:14,490 --> 00:55:15,860 que s'executa en un ordinador. 1185 00:55:15,860 --> 00:55:20,490 Però el tema aquí és que PHP fins ara s'ha executat al servidor, de manera que 1186 00:55:20,490 --> 00:55:24,820 l'usuari i el navegador de l'usuari mai no es vegi una línia de codi PHP. 1187 00:55:24,820 --> 00:55:28,530 >> De fet, si mai obrir un navegador per el seu lloc web o un altre i que 1188 00:55:28,530 --> 00:55:32,400 realment veure el codi PHP a la seva finestra, algú ha ficat la pota. 1189 00:55:32,400 --> 00:55:34,950 Com que no està destinat a ser enviat a un navegador directament. 1190 00:55:34,950 --> 00:55:38,150 Se suposa que ha de ser executat i es va tornar en alguna cosa semblant a HTML. 1191 00:55:38,150 --> 00:55:40,120 >> Però Javascript és essencialment el contrari. 1192 00:55:40,120 --> 00:55:44,350 Se suposa que ha de ser executat en general dins d' de la finestra del navegador de l'usuari. 1193 00:55:44,350 --> 00:55:46,840 I quin tipus de llocs web utilitzar JavaScript llavors aquests dies? 1194 00:55:46,840 --> 00:55:49,640 1195 00:55:49,640 --> 00:55:52,180 >> Igual que, literalment, tots els llocs web populars. 1196 00:55:52,180 --> 00:55:55,430 Cada lloc web que vostès probablement utilitzar tots els dies Javascript per a la 1197 00:55:55,430 --> 00:55:57,330 més senzilla i fins i tot la característiques més atractives. 1198 00:55:57,330 --> 00:55:59,800 >> Així que alguna cosa com Facebook Xatejar si fa servir això. 1199 00:55:59,800 --> 00:56:01,040 Com es treballen realment? 1200 00:56:01,040 --> 00:56:05,090 Doncs fins ara, totes les coses que hem fer amb HTML i PHP assumeix que 1201 00:56:05,090 --> 00:56:08,750 que tiri cap amunt d'una URL, i premeu la tecla Enter, i veus una mica de contingut HTML. 1202 00:56:08,750 --> 00:56:11,970 I fer clic a l'enllaç, que canvia la URL, canvia la pàgina i torna a carregar 1203 00:56:11,970 --> 00:56:12,740 nous continguts. 1204 00:56:12,740 --> 00:56:16,340 Feu clic en una altra URL o enviar un formulari, aconseguir traslladats a una altra pàgina i 1205 00:56:16,340 --> 00:56:17,420 veus algun contingut nou. 1206 00:56:17,420 --> 00:56:22,710 >> Però l'ús d'alguna cosa com Facebook Xat, o Gchat o Google Maps, rarament 1207 00:56:22,710 --> 00:56:27,350 no tota la pàgina a carregar aquesta que Si veu una pantalla en blanc momentàniament i 1208 00:56:27,350 --> 00:56:28,470 a continuació, el nou contingut. 1209 00:56:28,470 --> 00:56:32,610 Per contra, les pàgines web d'avui són dinàmicament tenir actualitzada una i 1210 00:56:32,610 --> 00:56:35,570 una i altra vegada tot tipus de darrere de les escenes. 1211 00:56:35,570 --> 00:56:38,560 I resulta que quan vostè va a alguna cosa com Facebook o Gchat, 1212 00:56:38,560 --> 00:56:43,050 o Gmail, i les actualitzacions de la pàgina automàticament sense necessitat de recarregar la 1213 00:56:43,050 --> 00:56:47,630 tota la pantalla, el que ha passat és que el seu navegador ha fet una mena de secret 1214 00:56:47,630 --> 00:56:49,410 peticions HTTP addicionals - 1215 00:56:49,410 --> 00:56:52,740 no per a pàgines web senceres, però només per petits fragments de dades, com el 1216 00:56:52,740 --> 00:56:55,740 missatges instantanis que el seu amic només vostè, o l'actualització d'estat que envia 1217 00:56:55,740 --> 00:56:58,210 algú que, o el tweet enviat que algú acaba d'enviar. 1218 00:56:58,210 --> 00:57:02,120 És només fer petits sol · licituds de dades, i després utilitzant JavaScript, aquesta 1219 00:57:02,120 --> 00:57:06,370 llenguatge de programació, per canviar el que la pàgina web es veu igual que sense el 1220 00:57:06,370 --> 00:57:09,860 servidor d'ajuda, sense que el servidor generant que HTML. 1221 00:57:09,860 --> 00:57:13,820 >> Així que en resum, JavaScript es pot utilitzar a continuació no només per recollir noves dades de 1222 00:57:13,820 --> 00:57:16,750 el servidor sense recarregar el seu conjunt pàgina o enviar un formulari. 1223 00:57:16,750 --> 00:57:20,060 També es pot utilitzar per canviar l'anomenat DOM - 1224 00:57:20,060 --> 00:57:21,520 Document Object Model - 1225 00:57:21,520 --> 00:57:24,620 que és només la forma elegant per dient que l'arbre d'HTML 1226 00:57:24,620 --> 00:57:26,220 que vam veure l'última vegada. 1227 00:57:26,220 --> 00:57:31,640 >> Així que per tranquil · litzar i Javascript és sintàcticament tan semblant a C també. 1228 00:57:31,640 --> 00:57:32,820 No hi ha funció principal. 1229 00:57:32,820 --> 00:57:35,430 Vostè acaba de començar a escriure el codi i que serà executat, o 1230 00:57:35,430 --> 00:57:36,900 interpretar de manera més adequada. 1231 00:57:36,900 --> 00:57:38,660 Condicions es veurà així. 1232 00:57:38,660 --> 00:57:41,230 No és diferent de C o PHP per al cas. 1233 00:57:41,230 --> 00:57:43,890 Expressions booleanes o-ed junts es veurà així. 1234 00:57:43,890 --> 00:57:45,590 AND junts aquest aspecte. 1235 00:57:45,590 --> 00:57:47,750 >> Commutadors es veurà així. 1236 00:57:47,750 --> 00:57:49,440 Per bucles es veurà així. 1237 00:57:49,440 --> 00:57:51,060 Mentre que els bucles es veurà així. 1238 00:57:51,060 --> 00:57:53,316 Feu bucles while es veurà així. 1239 00:57:53,316 --> 00:57:54,780 >> Això és nou. 1240 00:57:54,780 --> 00:57:58,753 Així que JavaScript no té un foreach construir per se, però aquest constructe 1241 00:57:58,753 --> 00:58:03,870 per a i variable en sèrie, i jo en aquest cas es converteix en un valor d'índex. 1242 00:58:03,870 --> 00:58:06,880 Així que és una mica diferent de la foreach, encara que les noves versions de 1243 00:58:06,880 --> 00:58:10,280 JavaScript estan sortint tot el temps, pel que fins i tot aquestes característiques d'idioma 1244 00:58:10,280 --> 00:58:10,880 estan evolucionant. 1245 00:58:10,880 --> 00:58:16,920 >> I en un a part, JavaScript aquests dies També es pot utilitzar en un servidor igual que 1246 00:58:16,920 --> 00:58:19,920 PHP utilitzant un marc anomenat Node.js. 1247 00:58:19,920 --> 00:58:24,670 Un TFS de CS50, Kevin, ha portat a seminari sobre Node.js que està disponible a 1248 00:58:24,670 --> 00:58:26,440 cs50.net/seminars. 1249 00:58:26,440 --> 00:58:28,830 Així que si ets curiós, saber que pot utilitzar això en el costat del servidor com 1250 00:58:28,830 --> 00:58:33,870 bo, però això és una tendència relativament recent, però una poderosa en això. 1251 00:58:33,870 --> 00:58:35,270 >> Això és una mica diferent. 1252 00:58:35,270 --> 00:58:37,910 Es tracta d'una matriu en JavaScript. 1253 00:58:37,910 --> 00:58:40,115 I el que sembla diferent en comparació amb C o PHP? 1254 00:58:40,115 --> 00:58:43,890 1255 00:58:43,890 --> 00:58:47,420 Hi ha algunes històries ràpides podem dir aquí. 1256 00:58:47,420 --> 00:58:49,367 El que li falta en comparació amb PHP? 1257 00:58:49,367 --> 00:58:51,652 >> AUDIÈNCIA: [inaudible]. 1258 00:58:51,652 --> 00:58:52,110 >> DAVID Malan: Sí? 1259 00:58:52,110 --> 00:58:53,322 Ho sentim, dir de nou? 1260 00:58:53,322 --> 00:58:54,740 >> AUDIÈNCIA: No declarar el tipus de variable. 1261 00:58:54,740 --> 00:58:56,390 >> DAVID Malan: No estem declarant el tipus de variable. 1262 00:58:56,390 --> 00:58:59,630 Així que en realitat bastant com PHP, no estem especificant els tipus d'aquesta variable. 1263 00:58:59,630 --> 00:59:02,670 Per contra, estem més genèricament dient var per a la variable. 1264 00:59:02,670 --> 00:59:06,690 No hi ha molèsties de la PHP signe de dòlar, que encara que tediós 1265 00:59:06,690 --> 00:59:09,160 tipus, no fan més evident que cosa que és una variable. 1266 00:59:09,160 --> 00:59:11,830 Mentre que aquí, estem sort de tornar a L'enfocament de C amb només trucar a un 1267 00:59:11,830 --> 00:59:14,500 variables amb el nom que vulguem per donar-li, com a nombres. 1268 00:59:14,500 --> 00:59:17,170 I també com PHP, tenim claudàtors per al 1269 00:59:17,170 --> 00:59:19,170 valors dins d'aquesta matriu. 1270 00:59:19,170 --> 00:59:22,490 >> Així variables en JavaScript també podria tenir aquest aspecte. 1271 00:59:22,490 --> 00:59:26,900 Noteu aquí es tracta d'una cadena anomenada s, però igualment no hem especificat 1272 00:59:26,900 --> 00:59:28,750 que és una cadena. 1273 00:59:28,750 --> 00:59:33,160 Aquí, però és una característica que no es existir exactament de la mateixa manera en PHP, 1274 00:59:33,160 --> 00:59:34,460 però una mica de manera similar. 1275 00:59:34,460 --> 00:59:36,530 Aquest és un objecte en JavaScript. 1276 00:59:36,530 --> 00:59:42,110 I els objectes són una mena d'exèrcit suís Ganivet d'una estructura de dades en què es 1277 00:59:42,110 --> 00:59:43,900 es pot utilitzar per a qualsevol nombre de coses. 1278 00:59:43,900 --> 00:59:46,860 >> Aquí, per exemple, estem declarant una variable anomenada cotització. 1279 00:59:46,860 --> 00:59:49,110 El tipus d'aquesta variable és un objecte. 1280 00:59:49,110 --> 00:59:53,550 Vostè pot pensar en això com una estructura C que té les claus i valors. 1281 00:59:53,550 --> 00:59:55,250 Símbol és una clau. 1282 00:59:55,250 --> 00:59:57,350 FB és un valor, pel que sembla un símbol de cotització. 1283 00:59:57,350 --> 00:59:57,930 Comma. 1284 00:59:57,930 --> 01:00:02,180 El preu és una altra de les claus, i el seu valor és pel que sembla un punt flotant, o un 1285 01:00:02,180 --> 01:00:06,510 nombre més general, en JavaScript, per 49,26 $. 1286 01:00:06,510 --> 01:00:09,030 >> Així que PHP no té - 1287 01:00:09,030 --> 01:00:12,980 que no hem vist en els objectes de PHP molt d'aquesta manera, però vam veure un anàleg, 1288 01:00:12,980 --> 01:00:14,093 que era el que? 1289 01:00:14,093 --> 01:00:14,980 >> AUDIÈNCIA: [inaudible]. 1290 01:00:14,980 --> 01:00:16,110 >> DAVID Malan: Les matrius associatives. 1291 01:00:16,110 --> 01:00:19,990 Així, mentre que PHP té matrius associatives la sintaxi és sempre una mica per 1292 01:00:19,990 --> 01:00:20,370 diferent - 1293 01:00:20,370 --> 01:00:21,780 vam veure els claudàtors. 1294 01:00:21,780 --> 01:00:23,860 Vam veure els símbols fletxes estranyes. 1295 01:00:23,860 --> 01:00:27,330 JavaScript té objectes, però això és sobretot una diferència semàntica i 1296 01:00:27,330 --> 01:00:29,260 diferent sinònim d'ara. 1297 01:00:29,260 --> 01:00:35,060 No obstant això, en un apart, PHP també té objectes d'una manera que Java i altres 1298 01:00:35,060 --> 01:00:37,810 llengües tenen objectes en programació orientada a objectes. 1299 01:00:37,810 --> 01:00:40,440 Però anem a utilitzar aquests només per a tipus de dades per ara. 1300 01:00:40,440 --> 01:00:42,170 Objectes i matrius associatives. 1301 01:00:42,170 --> 01:00:44,140 >> Aquest potser és una mica més clar. 1302 01:00:44,140 --> 01:00:45,890 Heus aquí per què un objecte és útil. 1303 01:00:45,890 --> 01:00:48,760 Quan es vol declarar un estudiant, com Zamyla, podem realment 1304 01:00:48,760 --> 01:00:52,630 encapsular per dir-ho a l'interior d'aquest objecte utilitzant claus com 1305 01:00:52,630 --> 01:00:55,060 sobretot un grapat de claus i els valors d'aquí. 1306 01:00:55,060 --> 01:00:59,150 Comptem amb un ID, una casa i un nom per Zamyla, seguit per un punt i coma com 1307 01:00:59,150 --> 01:01:00,690 habitual a l'extrem. 1308 01:01:00,690 --> 01:01:04,840 >> Aquí sota també, això és lleugerament diferent, però també molt potent 1309 01:01:04,840 --> 01:01:05,690 en aquests dies. 1310 01:01:05,690 --> 01:01:08,780 Aquí hi ha una gran varietat, i jo sé que ja hi ha un claudàtor dalt 1311 01:01:08,780 --> 01:01:11,090 superior i un claudàtor a la part inferior. 1312 01:01:11,090 --> 01:01:16,050 I aquesta és una matriu de les dades que escrigui pel que sembla en JavaScript? 1313 01:01:16,050 --> 01:01:21,260 Aquest és un arranjament del que sembla com tres objectes. 1314 01:01:21,260 --> 01:01:24,580 I jo sé que és un objecte únic causa de les claus. 1315 01:01:24,580 --> 01:01:28,760 I noti que hi ha clau d'obertura, algunes coses, prop de claudàtor, coma, 1316 01:01:28,760 --> 01:01:31,180 després una mica més, coma, i després una mica més. 1317 01:01:31,180 --> 01:01:33,800 Així que això és tres arguments separats per dos comes. 1318 01:01:33,800 --> 01:01:36,810 >> Així que això és una sèrie de tres objectes. 1319 01:01:36,810 --> 01:01:39,940 I cada un d'aquests objectes sembla haver un estudiant o membre del personal d'algunes 1320 01:01:39,940 --> 01:01:42,370 tipus, cadascun amb una identificació, casa, i el nom. 1321 01:01:42,370 --> 01:01:45,060 Però jo he cridat a aquesta cosa anomenat JSON - 1322 01:01:45,060 --> 01:01:47,450 JavaScript Object Notation. 1323 01:01:47,450 --> 01:01:52,060 I aquest és un format de dades que en realitat és molt popular i en 1324 01:01:52,060 --> 01:01:55,100 voga en aquests dies que si escriviu un aplicació que utilitza el Facebook 1325 01:01:55,100 --> 01:01:59,150 API, l'API de Twitter, realment gairebé qualsevol API que hi ha en aquests dies, 1326 01:01:59,150 --> 01:02:02,820 incloent alguns de la pròpia CS50, la les dades a recuperar no es troba en 1327 01:02:02,820 --> 01:02:04,720 format CSV de la vella escola. 1328 01:02:04,720 --> 01:02:06,780 >> Perquè recordem que CSV és super simple. 1329 01:02:06,780 --> 01:02:10,230 És a columnes separades per comes. 1330 01:02:10,230 --> 01:02:13,190 Dades JSON li dóna més metadades. 1331 01:02:13,190 --> 01:02:17,800 Es associa una clau amb cada valor, de manera que no han d'assumir que simplement 1332 01:02:17,800 --> 01:02:22,460 la columna zero és un valor, la columna un és l'altre, la columna 2 és una altra. 1333 01:02:22,460 --> 01:02:26,790 Tot en un objecte JSON que aquí és una espècie de l'auto-descripció, ja que cada 1334 01:02:26,790 --> 01:02:30,940 un dels noms en aquest arxiu té, literalment, nomenar davant d'ell com un 1335 01:02:30,940 --> 01:02:32,510 cadena entre cometes. 1336 01:02:32,510 --> 01:02:34,950 >> Així que donem una ullada a una parell d'exemples. 1337 01:02:34,950 --> 01:02:36,800 Déjame anar a l'aparell. 1338 01:02:36,800 --> 01:02:41,000 I m'ho dius a mi anar al nostre amfitrió virtual directori en el públic. 1339 01:02:41,000 --> 01:02:45,590 I m'ho dius a mi anar a la JavaScript directori. 1340 01:02:45,590 --> 01:02:49,610 I seguirem endavant i obrir dg-0.html, on DOM només significa 1341 01:02:49,610 --> 01:02:51,010 model d'objectes de documents. 1342 01:02:51,010 --> 01:02:53,490 Són les coses de l'arbre al qual M'he referit abans. 1343 01:02:53,490 --> 01:02:54,950 >> I permetin-me proposar el següent. 1344 01:02:54,950 --> 01:02:57,720 Aquí hi ha una pàgina web la cos és bastant simple. 1345 01:02:57,720 --> 01:03:00,170 Així que aquí baix a la part inferior, notar que tinc un formulari. 1346 01:03:00,170 --> 01:03:01,500 Hem vist els d'abans. 1347 01:03:01,500 --> 01:03:07,600 Té dues entrades, una de les quals té un Identificació de nom, un dels quals té un tipus de 1348 01:03:07,600 --> 01:03:09,830 presentar, i la primera seu tipus és text. 1349 01:03:09,830 --> 01:03:11,900 Així que això realment sona bastant simple. 1350 01:03:11,900 --> 01:03:13,090 >> Anirem aquí. 1351 01:03:13,090 --> 01:03:15,390 Tornem a aquesta pàgina aquí. 1352 01:03:15,390 --> 01:03:21,030 Entrarem en localhost, i entrar en nostre directori JavaScript, i anar a 1353 01:03:21,030 --> 01:03:24,640 dg-0, i aquí tenim aquest formulari. 1354 01:03:24,640 --> 01:03:26,550 Així que això és pel que sembla tota aquesta pàgina fa. 1355 01:03:26,550 --> 01:03:28,740 Té un camp de nom amb un botó Envia. 1356 01:03:28,740 --> 01:03:30,340 Però jo no vaig a utilitzar PHP aquí. 1357 01:03:30,340 --> 01:03:34,310 Jo faré del costat del client tot el per dir-ho en JavaScript de la següent manera. 1358 01:03:34,310 --> 01:03:39,100 >> Noteu que en veritat li he donat el nom camp d'aquesta entrada una única 1359 01:03:39,100 --> 01:03:42,350 identificador, que farà realitat em estalviar una mica de temps en un moment. 1360 01:03:42,350 --> 01:03:45,480 I noto que he introduït una altra etiqueta al cap de la meva pàgina web, la 1361 01:03:45,480 --> 01:03:46,565  tag. 1362 01:03:46,565 --> 01:03:50,120 >> Així que és en aquest sentit que JavaScript està un llenguatge de programació del costat del client. 1363 01:03:50,120 --> 01:03:55,020 En aquest cas, igual que CSS, he posat ella cap a l'interior de la meva HTML. 1364 01:03:55,020 --> 01:03:58,810 Però cal notar que he declarat una funció que es veu una mica com PHP 1365 01:03:58,810 --> 01:04:01,530 sintàcticament, però això és en realitat JavaScript, perquè una vegada més, és 1366 01:04:01,530 --> 01:04:03,920 del costat del client en el navegador. 1367 01:04:03,920 --> 01:04:07,590 I prendre una conjectura del que això va a fer, tot i que algunes de la sintaxi 1368 01:04:07,590 --> 01:04:09,338 aquí és nou. 1369 01:04:09,338 --> 01:04:11,760 >> AUDIÈNCIA: Saluda a qui sigui. 1370 01:04:11,760 --> 01:04:14,020 >> DAVID Malan: Es va a saludar als visitants d'aquesta pàgina. 1371 01:04:14,020 --> 01:04:15,120 Llavors, com? 1372 01:04:15,120 --> 01:04:18,070 >> Així compte, resulta que en JavaScript hi ha una funció d'alerta (). 1373 01:04:18,070 --> 01:04:22,840 Aquesta és una funció molt poc trist que realment només tendeix a molestar els usuaris. 1374 01:04:22,840 --> 01:04:25,440 No és un que realment ha d'utilitzar normalment, però és un ràpid i brut 1375 01:04:25,440 --> 01:04:27,710 camí de l'espècie d'imprimir alguna cosa a un usuari gràfica 1376 01:04:27,710 --> 01:04:29,180 interfície, com un navegador. 1377 01:04:29,180 --> 01:04:31,400 Noteu aquí que tinc una cadena entre cometes simples. 1378 01:04:31,400 --> 01:04:36,010 Resulta que a diferència de C, JavaScript pot tenir en realitat s'utilitza sola 1379 01:04:36,010 --> 01:04:38,730 cita, i, francament, és només una mica de la convenció estilística entre 1380 01:04:38,730 --> 01:04:41,180 JavaScript programadors utilitzar cometes simples. 1381 01:04:41,180 --> 01:04:43,750 PHP, que en realitat tenen poc significat diferent. 1382 01:04:43,750 --> 01:04:45,810 Però, per ara, només sé que aquesta és l'única raó. 1383 01:04:45,810 --> 01:04:49,270 La convenció en JavaScript és sovint per utilitzar cometes simples, però podríem utilitzar 1384 01:04:49,270 --> 01:04:50,950 cometes dobles en ambdós llocs també. 1385 01:04:50,950 --> 01:04:52,610 >> Així que això és interessant. 1386 01:04:52,610 --> 01:04:56,430 Recordeu l'última vegada que vam haver imatge a la pantalla que va atreure a un arbre 1387 01:04:56,430 --> 01:04:59,720 en què va tenir el node HTML i el el cap node, i el node de cos, 1388 01:04:59,720 --> 01:05:00,800 i després una mica de text. 1389 01:05:00,800 --> 01:05:04,700 Però hi havia un node especial al molt superior que vaig trucar el document. 1390 01:05:04,700 --> 01:05:08,260 Bé, resulta que en JavaScript, qualsevol vegada que s'escriu un programa en JavaScript 1391 01:05:08,260 --> 01:05:11,040 en un navegador, vostè té accés a una variable global especial. 1392 01:05:11,040 --> 01:05:14,130 Similar a la de superglobals de PHP, aquest es diu en 1393 01:05:14,130 --> 01:05:16,050 tot document minúscules. 1394 01:05:16,050 --> 01:05:21,480 >> És com una estructura, però aquesta estructura També té funcions dins d'ella. 1395 01:05:21,480 --> 01:05:23,790 Així que una estructura C només té dades normalment. 1396 01:05:23,790 --> 01:05:29,060 Però un objecte de JavaScript, ja que això tècnicament és també té funcions, 1397 01:05:29,060 --> 01:05:31,830 conegut d'una altra manera com a mètodes, dins d'ella. 1398 01:05:31,830 --> 01:05:35,750 I vostè pot cridar a una funció a l'interior de aquest objecte, literalment, fent el seu 1399 01:05:35,750 --> 01:05:39,610 nom, punt, i després el nom de la funció, o de nou mètode. 1400 01:05:39,610 --> 01:05:41,160 És només un sinònim, de veritat. 1401 01:05:41,160 --> 01:05:42,450 >> I què fa aquesta funció? 1402 01:05:42,450 --> 01:05:43,840 Pot espècie d'endevinar pel seu nom. 1403 01:05:43,840 --> 01:05:45,590 Obtingui element per ID. 1404 01:05:45,590 --> 01:05:50,040 Així que això va a buscar a la pàgina web, buscar aquest arbre, a la recerca de 1405 01:05:50,040 --> 01:05:55,210 qualsevol node, element de AKA, té un ID únic de cotització nom de la cita. 1406 01:05:55,210 --> 01:05:56,560 I llavors, què faré? 1407 01:05:56,560 --> 01:06:00,350 Vaig a obtenir el valor a l'interior de aquest node a l'arbre, i em vaig 1408 01:06:00,350 --> 01:06:02,580 dir d'alguna manera hola a aquest nom. 1409 01:06:02,580 --> 01:06:05,360 >> Així que prendre una conjectura, tot i que no hem vist això encara, què fer en el signe més 1410 01:06:05,360 --> 01:06:07,396 símbols signifiquen aquí i aquí probablement? 1411 01:06:07,396 --> 01:06:08,230 >> AUDIÈNCIA: Concatenar. 1412 01:06:08,230 --> 01:06:09,220 >> DAVID Malan: Concatenar. 1413 01:06:09,220 --> 01:06:11,290 És cert, i aquests són només tipus de decisions de disseny 1414 01:06:11,290 --> 01:06:12,280 la gent va fer fa anys. 1415 01:06:12,280 --> 01:06:15,190 En PHP, concatenar coses amb punts. 1416 01:06:15,190 --> 01:06:18,800 En C, saltar a través de diversos cèrcols i cridar a funcions com strcopy () o 1417 01:06:18,800 --> 01:06:20,600 strcat () o altres funcions similars. 1418 01:06:20,600 --> 01:06:22,060 Però en JavaScript s'utilitza avantatges. 1419 01:06:22,060 --> 01:06:24,770 Així que això és simplement concatenant tres cadenes - 1420 01:06:24,770 --> 01:06:27,850 hola, un nom, i després un signe d'exclamació. 1421 01:06:27,850 --> 01:06:30,390 >> Per això, quan i per què és aquesta funció anomenada però? 1422 01:06:30,390 --> 01:06:33,150 Bé, tenir una pista de l' HTML a la part inferior. 1423 01:06:33,150 --> 01:06:35,810 Per què se saluden () anomenat, o quan? 1424 01:06:35,810 --> 01:06:39,730 1425 01:06:39,730 --> 01:06:44,030 >> Pel que sembla, el millor que puc dir, en presentar, quan s'envia el formulari, 1426 01:06:44,030 --> 01:06:47,200 Vaig a fer el que sigui dins d'aquestes cites. 1427 01:06:47,200 --> 01:06:50,900 I en concret, vaig a trucar a saludar () i després tornar false. 1428 01:06:50,900 --> 01:06:53,090 >> Bé, anem a veure que la xarxa efecte és de primera. 1429 01:06:53,090 --> 01:06:58,290 Així que permetin-me anar endavant i escric en, diguem, Loren, a Envia. 1430 01:06:58,290 --> 01:06:59,440 Hola Loren. 1431 01:06:59,440 --> 01:07:02,990 A veure si potser això era només una implementació de la sort. 1432 01:07:02,990 --> 01:07:03,200 Nope. 1433 01:07:03,200 --> 01:07:05,990 Així que ha d'escriure a terme el que sigui name I realment vaig posar aquí. 1434 01:07:05,990 --> 01:07:07,970 >> Però noti el que no està canviant. 1435 01:07:07,970 --> 01:07:10,360 La URL és encara dg-0.html. 1436 01:07:10,360 --> 01:07:11,820 No hi ha register.php. 1437 01:07:11,820 --> 01:07:13,110 No hi ha segon arxiu. 1438 01:07:13,110 --> 01:07:14,930 No hi ha atribut action. 1439 01:07:14,930 --> 01:07:19,720 Llavors, què és aquest fals retorn presumiblement fent? 1440 01:07:19,720 --> 01:07:23,660 Per què estic trucant a saludar () i després tornant falsa probablement? 1441 01:07:23,660 --> 01:07:26,420 El que normalment passa en fer clic Enviar a un formulari que encara tenim 1442 01:07:26,420 --> 01:07:27,854 vist en l'última setmana? 1443 01:07:27,854 --> 01:07:29,900 >> AUDIÈNCIA: [inaudible]. 1444 01:07:29,900 --> 01:07:30,860 >> DAVID Malan: Es va a algun lloc, oi? 1445 01:07:30,860 --> 01:07:32,720 Va a alguna URL de destinació. 1446 01:07:32,720 --> 01:07:34,120 Però jo no vull que això passi aquí. 1447 01:07:34,120 --> 01:07:37,620 Vull que la meva pàgina web per ser completament dinàmic com Gmail, on una vegada que estàs 1448 01:07:37,620 --> 01:07:38,650 allà, et quedes allà. 1449 01:07:38,650 --> 01:07:42,900 La direcció URL no canvia en una forma que indica la pàgina sencera està recarregant. 1450 01:07:42,900 --> 01:07:46,680 Més aviat, només vull canviar alguna cosa com imprimir alguna cosa 1451 01:07:46,680 --> 01:07:48,320 aquí a la pantalla. 1452 01:07:48,320 --> 01:07:49,630 >> Doncs m'ho dius netejar això una mica. 1453 01:07:49,630 --> 01:07:55,370 Permetin-me obro no diu-0, però m'ho dius a mi obro dg-2. 1454 01:07:55,370 --> 01:07:57,350 Perquè ho has vist alguna sintaxi aquí. 1455 01:07:57,350 --> 01:08:02,080 >> Resulta que el que acabem de DID s'utilitza JavaScript primera. 1456 01:08:02,080 --> 01:08:04,420 Així que això és realment l'idioma JavaScript. 1457 01:08:04,420 --> 01:08:07,340 Alguns de vostès podrien saber de una llibreria anomenada jQuery. 1458 01:08:07,340 --> 01:08:09,980 >> Així jQuery no és la mateixa cosa com JavaScript. 1459 01:08:09,980 --> 01:08:14,110 És només una biblioteca que un molt intel · ligent noi va escriure i va popularitzar com 1460 01:08:14,110 --> 01:08:18,100 que gairebé tots en el món ara utilitza jQuery utilitzant JavaScript. 1461 01:08:18,100 --> 01:08:20,890 I a primera vista, honestament, es veu una mica més críptica. 1462 01:08:20,890 --> 01:08:24,990 Però et trobaràs, sobretot si vas allà per al seu projecte final amb la web 1463 01:08:24,990 --> 01:08:29,029 desenvolupament, trobareu que aquest neteja les coses i vos estalvia molt 1464 01:08:29,029 --> 01:08:30,229 poques línies de codi. 1465 01:08:30,229 --> 01:08:33,189 >> Així que anem a fer una ullada a com Aquest formulari està treballant. 1466 01:08:33,189 --> 01:08:35,664 Noti el que em trec aparentment de la meva HTML? 1467 01:08:35,664 --> 01:08:38,240 1468 01:08:38,240 --> 01:08:40,630 No hi ha en enviar gestor per dir-ho. 1469 01:08:40,630 --> 01:08:41,470 No hi ha cap atribut. 1470 01:08:41,470 --> 01:08:43,359 Perquè vostè sap, el que No m'agradava de veritat? 1471 01:08:43,359 --> 01:08:45,640 Em vaig sentir com si estiguéssim caient en vells hàbits allà. 1472 01:08:45,640 --> 01:08:49,340 Igual que estava començant a sentir descuidat en barrejar tant amb CSS 1473 01:08:49,340 --> 01:08:52,149 HTML, perquè ets una mica de tirar diferents idiomes de tot el 1474 01:08:52,149 --> 01:08:56,180 lloc, de la mateixa manera va fer això comença a sentir- com un mal camí per anar cap avall, on 1475 01:08:56,180 --> 01:09:01,069 Vaig a posar el codi JavaScript dins del meu HTML en lloc de factoring a terme. 1476 01:09:01,069 --> 01:09:02,279 >> Així que aquesta és la lliçó aquí. 1477 01:09:02,279 --> 01:09:05,080 En dg-2.html, estic factoring a terme. 1478 01:09:05,080 --> 01:09:07,399 I jo estic fent les coses una mica de manera diferent. 1479 01:09:07,399 --> 01:09:09,630 Per ara, vaig a agitar les mans al que realment 1480 01:09:09,630 --> 01:09:10,590 sota de la caputxa. 1481 01:09:10,590 --> 01:09:14,210 Però només per ara suposar que aquest primer línia de codi en aquesta biblioteca 1482 01:09:14,210 --> 01:09:18,170 jQuery anomenat simplement vol dir que quan el document està llest, feu el següent. 1483 01:09:18,170 --> 01:09:20,080 >> Atès que les pàgines web poden tenir algun temps per carregar. 1484 01:09:20,080 --> 01:09:23,029 Vostè podria estar en un internet lent connexió, i podria estar girant 1485 01:09:23,029 --> 01:09:25,290 i girant, i finalment s'ha carregat. 1486 01:09:25,290 --> 01:09:29,060 Aquesta línia de codi just diu esperar fins tota la pàgina està a punt, el document 1487 01:09:29,060 --> 01:09:31,189 està a punt, abans d'executar aquest codi. 1488 01:09:31,189 --> 01:09:34,390 >> I ara noti, aquest és probablement el més útil primer 1489 01:09:34,390 --> 01:09:36,189 treure de jQuery. 1490 01:09:36,189 --> 01:09:42,140 Aquesta línia aquí és molt similar en esperit a aquesta línia molt més temps aquí. 1491 01:09:42,140 --> 01:09:46,920 Mentre que en el codi JavaScript en brut, hi ha existeix un objecte global document que 1492 01:09:46,920 --> 01:09:50,460 té una funció anomenada getElementById (), la gent que va escriure 1493 01:09:50,460 --> 01:09:55,720 jQuery simplifica dir simplement signe de dòlar, i després dins de 1494 01:09:55,720 --> 01:10:00,250 parèntesi posen dues cites, i després posar un símbol de hash seguida de la 1495 01:10:00,250 --> 01:10:02,250 únic ID que desitgi capturar. 1496 01:10:02,250 --> 01:10:06,170 Així que aquest és equivalent a document.getElementById. 1497 01:10:06,170 --> 01:10:11,090 >> Mentrestant,. Presentar només significa el presentació de la forma que sigui que estiguis 1498 01:10:11,090 --> 01:10:14,240 referint-se a l'esquerra, vagi endavant i executar aquest. 1499 01:10:14,240 --> 01:10:16,600 Però això és ara la curiositat també. 1500 01:10:16,600 --> 01:10:19,560 El rar del que He destacat en aquesta llista? 1501 01:10:19,560 --> 01:10:23,840 1502 01:10:23,840 --> 01:10:28,594 No només és classe de sintàcticament nova, també hi ha alguna cosa que falta. 1503 01:10:28,594 --> 01:10:29,558 >> AUDIÈNCIA: Simplement diu funció? 1504 01:10:29,558 --> 01:10:31,970 No es diu alerta? 1505 01:10:31,970 --> 01:10:32,440 >> DAVID Malan: Si. 1506 01:10:32,440 --> 01:10:35,450 Bé, tan alerta () s'ha reduït aquí, per ser justos. 1507 01:10:35,450 --> 01:10:39,520 Però no hi ha esment d'un nom, com vostè sap, foo o 1508 01:10:39,520 --> 01:10:40,980 alguna cosa aquí. 1509 01:10:40,980 --> 01:10:43,830 I de fet, aquesta és una de les característiques de JavaScript que és bastant 1510 01:10:43,830 --> 01:10:45,370 de gran abast, però també bastant nova. 1511 01:10:45,370 --> 01:10:47,460 I PHP té en realitat això també. 1512 01:10:47,460 --> 01:10:49,500 >> Deixin-me seguir endavant i fer cosa molt ràpid. 1513 01:10:49,500 --> 01:10:52,030 Déjame anar endavant i posar això aquí. 1514 01:10:52,030 --> 01:10:52,600 Déjame fer això. 1515 01:10:52,600 --> 01:10:53,690 Funció. 1516 01:10:53,690 --> 01:10:56,455 Anem a trucar a aquest controlador (). 1517 01:10:56,455 --> 01:10:58,290 Una funció de controlador per dir-ho. 1518 01:10:58,290 --> 01:11:00,110 Una cosa que s'encarrega d'alguna operació. 1519 01:11:00,110 --> 01:11:02,700 Vaig a netejar el meu sagnia. 1520 01:11:02,700 --> 01:11:04,380 I posar això aquí. 1521 01:11:04,380 --> 01:11:06,090 I ja que aquí. 1522 01:11:06,090 --> 01:11:06,470 Sip. 1523 01:11:06,470 --> 01:11:07,060 D'acord. 1524 01:11:07,060 --> 01:11:10,300 >> Així que ara tinc una funció anomenada handler () que no se sap molt bé 1525 01:11:10,300 --> 01:11:10,890 el que fa encara. 1526 01:11:10,890 --> 01:11:12,710 Simplement encara té aquestes coses. 1527 01:11:12,710 --> 01:11:13,900 Vaja. 1528 01:11:13,900 --> 01:11:15,820 Va prendre massa. 1529 01:11:15,820 --> 01:11:18,490 Anem a fer això. 1530 01:11:18,490 --> 01:11:18,990 Està bé. 1531 01:11:18,990 --> 01:11:20,240 Ho sento. 1532 01:11:20,240 --> 01:11:23,140 1533 01:11:23,140 --> 01:11:23,690 Està bé. 1534 01:11:23,690 --> 01:11:24,720 Déjame fer això. 1535 01:11:24,720 --> 01:11:25,020 D'acord. 1536 01:11:25,020 --> 01:11:27,040 Això es veu molt bé i recte enviar ara. 1537 01:11:27,040 --> 01:11:29,090 Déjame fer això. 1538 01:11:29,090 --> 01:11:29,860 Feu això. 1539 01:11:29,860 --> 01:11:30,950 I a D'acord. 1540 01:11:30,950 --> 01:11:33,080 Així que ara, anem a posar això aquí. 1541 01:11:33,080 --> 01:11:35,840 1542 01:11:35,840 --> 01:11:37,270 No més de programació sobre la marxa. 1543 01:11:37,270 --> 01:11:37,900 D'acord. 1544 01:11:37,900 --> 01:11:40,000 >> Així que ara, anem a tornar a on va començar la història. 1545 01:11:40,000 --> 01:11:43,530 Anteriorment, he dit que aquesta línia aquí vol dir que quan el document estigui llest, vagi 1546 01:11:43,530 --> 01:11:44,380 endavant i fer això. 1547 01:11:44,380 --> 01:11:45,660 Què vull fer? 1548 01:11:45,660 --> 01:11:49,070 Bé en concret, vull anar endavant i fer el següent. 1549 01:11:49,070 --> 01:11:53,700 Executar aquesta línia de codi, i després el que vull que facis és trucar a aquest 1550 01:11:53,700 --> 01:11:56,370 funcionar quan s'envia el formulari. 1551 01:11:56,370 --> 01:11:57,730 >> Ara bé, això és l'interessant. 1552 01:11:57,730 --> 01:11:59,170 Això no és en si mateix una funció. 1553 01:11:59,170 --> 01:12:02,540 Notin que no estic posant parèntesis aquí a la forma normal. 1554 01:12:02,540 --> 01:12:06,800 Estic literalment passant una funció anomenada Handler () a una altra funció 1555 01:12:06,800 --> 01:12:10,800 anomenat presentar () com a argument com encara que és com una variable. 1556 01:12:10,800 --> 01:12:14,290 I aquesta és una de les característiques de Javascript és a si mateixos funcions 1557 01:12:14,290 --> 01:12:15,710 són en realitat objectes. 1558 01:12:15,710 --> 01:12:18,350 De fet, són realment només les variables d'algun tipus. 1559 01:12:18,350 --> 01:12:21,340 I si el nom de la funció és handler (), no hi ha cap raó per la qual no pot 1560 01:12:21,340 --> 01:12:23,390 passar-ho com a argument aquí. 1561 01:12:23,390 --> 01:12:27,530 I això vol dir que quan la forma amb la identificació de la demo és 1562 01:12:27,530 --> 01:12:29,320 presentat, cridar a aquesta funció. 1563 01:12:29,320 --> 01:12:32,770 >> Però ara si em desfaig de tot això, Per què llavors em faig potser 1564 01:12:32,770 --> 01:12:34,850 fa d'aquest un moment? 1565 01:12:34,850 --> 01:12:36,840 Bé, aquesta és una funció anònima. 1566 01:12:36,840 --> 01:12:41,080 Perquè, francament, em vaig adonar de per què estic prendre la molèstia de perdre el temps que es declara una 1567 01:12:41,080 --> 01:12:45,540 funció anomenada controlador () només per cridar en un i només un lloc? 1568 01:12:45,540 --> 01:12:48,640 Si jo no necessito el nom, i jo no ho faig hagi de cridar més d'un lloc, 1569 01:12:48,640 --> 01:12:51,200 posarem en pràctica la funció just on ho necessito. 1570 01:12:51,200 --> 01:12:55,190 I així, JavaScript i PHP donen suport al s'anomenen funcions anònimes que 1571 01:12:55,190 --> 01:12:57,900 em permet fer exactament això aquí. 1572 01:12:57,900 --> 01:12:59,570 >> Però només estem esgarrapant la superfície. 1573 01:12:59,570 --> 01:13:02,430 Anem burlen amb només un parell exemples finals aquí. 1574 01:13:02,430 --> 01:13:04,600 >> Si entro a quote.php. 1575 01:13:04,600 --> 01:13:07,160 1576 01:13:07,160 --> 01:13:11,870 Tingueu en compte que això és en realitat un PHP funció, un programa PHP, que vaig escriure 1577 01:13:11,870 --> 01:13:15,270 que espera un paràmetre HTTP anomenat símbol, i puc passar a 1578 01:13:15,270 --> 01:13:16,730 un valor com FB. 1579 01:13:16,730 --> 01:13:20,010 I si en realitat ens fixem en la font codi, això està consultant un lloc web gratuït 1580 01:13:20,010 --> 01:13:23,680 anomenat Yahoo Finances, igual que p-set 07:00, i s'està tornant a mi 1581 01:13:23,680 --> 01:13:26,580 alguna cosa aparentment el format conegut és JSON - 1582 01:13:26,580 --> 01:13:28,010 JavaScript Object Notation. 1583 01:13:28,010 --> 01:13:28,810 És només un objecte. 1584 01:13:28,810 --> 01:13:32,500 Note les claus, les cometes, el còlon, i les comes. 1585 01:13:32,500 --> 01:13:34,720 >> Ara mentrestant, això és molt bo. 1586 01:13:34,720 --> 01:13:38,520 Com que és probable que pugui utilitzar una programació idioma per generar adreces URL 1587 01:13:38,520 --> 01:13:40,370 que s'assemblen a aquesta dinàmica, No? 1588 01:13:40,370 --> 01:13:43,340 Puc canviar això a Google i tornar de Google 1589 01:13:43,340 --> 01:13:47,930 preu de les accions de $ 1017,55. 1590 01:13:47,930 --> 01:13:49,640 Així que anem a veure si no podem usar això ara. 1591 01:13:49,640 --> 01:13:56,590 >> Déjame anar a ajax-0 aquí, el que s'assembla al següent. 1592 01:13:56,590 --> 01:13:59,750 És només un lloc web que té un formulari amb un botó. 1593 01:13:59,750 --> 01:14:05,860 Déjame aquí seguir endavant i escric en YHOO de símbol de cotització de Yahoo, feu clic a Obtenir 1594 01:14:05,860 --> 01:14:10,530 Cita, i ara noto que he rebut un avís amb 32.86. 1595 01:14:10,530 --> 01:14:14,050 >> Déjame anar en realitat a una versió més de luxe d'aquesta pàgina, la versió 2, i 1596 01:14:14,050 --> 01:14:17,530 escrigui en diguem Microsoft, MSFT. 1597 01:14:17,530 --> 01:14:18,410 Rebi una oferta. 1598 01:14:18,410 --> 01:14:19,850 I ara fixeu-vos, no hi ha alerta. 1599 01:14:19,850 --> 01:14:22,770 Avís on diu preu que es determini? 1600 01:14:22,770 --> 01:14:27,060 No és el més simple d'exemples que al · ludeix al Gchat i Facebook 1601 01:14:27,060 --> 01:14:30,070 Xateja, i Gmail, i l'altre tal llocs web estan fent pel fet 1602 01:14:30,070 --> 01:14:31,290 el canvi de la pàgina web. 1603 01:14:31,290 --> 01:14:31,800 >> Note això. 1604 01:14:31,800 --> 01:14:33,120 Permetin-me tornar a carregar la pàgina. 1605 01:14:33,120 --> 01:14:35,080 Permetin-me obro Inspector de Chrome. 1606 01:14:35,080 --> 01:14:36,890 Déjame anar als elements fitxa aquí baix. 1607 01:14:36,890 --> 01:14:42,310 Ara noti si puc ampliar fins aquí i obrir això, observi que aquest és el meu 1608 01:14:42,310 --> 01:14:44,500 HTML DOM - el meu model d'objectes de documents. 1609 01:14:44,500 --> 01:14:45,920 Aquest és el meu HTML. 1610 01:14:45,920 --> 01:14:48,750 Però ara compte, tot i que va a ser una mica difícil de veure, tant en 1611 01:14:48,750 --> 01:14:52,080 llocs alhora, si escric en FB aquí, miri la part inferior 1612 01:14:52,080 --> 01:14:54,110 de la pantalla només. 1613 01:14:54,110 --> 01:14:57,720 >> En realitat està canviant la meva HTML sobre la marxa. 1614 01:14:57,720 --> 01:15:01,670 I ho està fent això, senzillament, fent alguna cosa com això. 1615 01:15:01,670 --> 01:15:06,800 Si obro ajax-2, la notificació implementació una cosa tan sexy com 1616 01:15:06,800 --> 01:15:09,560 que, tot i que és bastant lleig, però tan sofisticat com que 1617 01:15:09,560 --> 01:15:11,910 funcionalment, té alguns HTML a la part inferior. 1618 01:15:11,910 --> 01:15:13,810 Però noto que solia etiquetar. 1619 01:15:13,810 --> 01:15:16,640 Nosaltres no hem fet servir això abans, però això és com una, però no obliga 1620 01:15:16,640 --> 01:15:17,840 tot en una nova línia. 1621 01:15:17,840 --> 01:15:20,830 Simplement té una regió rectangular en la mateixa línia en essència. 1622 01:15:20,830 --> 01:15:22,870 >> Fixa't que jo li vaig donar un ID de preu. 1623 01:15:22,870 --> 01:15:26,800 I resulta que mitjançant l'ús de la mateixa JavaScript biblioteca, tinc una funció 1624 01:15:26,800 --> 01:15:30,440 anomenada cita () que es diu cada vegada que s'envia el formulari. 1625 01:15:30,440 --> 01:15:31,800 I el que faig és la següent. 1626 01:15:31,800 --> 01:15:35,730 Estic declarant una variable en JavaScript anomenat url, guardar el valor 1627 01:15:35,730 --> 01:15:38,650 quote.php? símbol =. 1628 01:15:38,650 --> 01:15:44,220 En altres paraules, jo mateix estic començant per preparar una sol · licitud HTTP, i després 1629 01:15:44,220 --> 01:15:49,250 Estic concatenant en què amb un plus qualsevol que sigui l'element amb l'identificador de 1630 01:15:49,250 --> 01:15:54,190 del símbol és que compta és que camp de text just aquí sota. 1631 01:15:54,190 --> 01:15:56,630 Així que igual que teníem formes en el passat. 1632 01:15:56,630 --> 01:16:01,450 >> I després resulta que en jQuery, si trucar. val (), que crida d'un val 1633 01:16:01,450 --> 01:16:05,900 funció, una funció de valor, que obté qualsevol que sigui l'usuari ha escrit polz 1634 01:16:05,900 --> 01:16:08,920 I llavors tot el trànsit de la xarxa el que passa és això. 1635 01:16:08,920 --> 01:16:11,230 $. GetJSON. 1636 01:16:11,230 --> 01:16:13,720 >> I en un a part, mostra de dòlar és només una notació abreujada. 1637 01:16:13,720 --> 01:16:16,860 És realment jQuery.getJSON. 1638 01:16:16,860 --> 01:16:21,520 Porta-me'n a JSON d'aquesta URL, i quan la sol · licitud torna, truqueu a aquest 1639 01:16:21,520 --> 01:16:26,550 funció i passar com a argument ho va tornar des del servidor. 1640 01:16:26,550 --> 01:16:31,205 >> En altres paraules, si torno a la navegador i torneu a quote.php, 1641 01:16:31,205 --> 01:16:35,590 el que el navegador s'està fent cada vegada aquest fragment de dades. 1642 01:16:35,590 --> 01:16:38,930 I quan vaig a aquesta pàgina web aquí, compte si en lloc d'anar a la xarxa 1643 01:16:38,930 --> 01:16:43,820 fitxa i clar, i després escriviu alguna cosa així com GOOG de Google i obtenir 1644 01:16:43,820 --> 01:16:46,340 Citar, observi la pàgina no ha canviat. 1645 01:16:46,340 --> 01:16:50,990 No obstant això, una sol · licitud HTTP es va fer, i el que tornar aquí si ens fixem en el 1646 01:16:50,990 --> 01:16:56,130 la resposta és un munt de JSON que es va accedir finalment amb 1647 01:16:56,130 --> 01:16:58,070 aquest senzill joc aquí. 1648 01:16:58,070 --> 01:17:00,150 >> Les dades són el que es va arribar des del servidor. 1649 01:17:00,150 --> 01:17:02,120 El preu és el nom de la clau que m'importa. 1650 01:17:02,120 --> 01:17:05,230 Així data.price em fa això. 1651 01:17:05,230 --> 01:17:07,540 >> Ara, per la seva banda, i aquesta és l'últim exemple. 1652 01:17:07,540 --> 01:17:09,280 Vostè pot fer encara més amb la pàgina. 1653 01:17:09,280 --> 01:17:12,440 Una realitat, bé dos. 1654 01:17:12,440 --> 01:17:14,780 Podem portar de tornada el etiqueta, si et recordes d'això. 1655 01:17:14,780 --> 01:17:15,850 És JavaScript. 1656 01:17:15,850 --> 01:17:17,110 Podem fer això. 1657 01:17:17,110 --> 01:17:17,690 Molt emocionant. 1658 01:17:17,690 --> 01:17:18,800 Anem a deixar això com un cliffhanger. 1659 01:17:18,800 --> 01:17:21,590 >> Però el més emocionant, pot fer coses com aquesta. 1660 01:17:21,590 --> 01:17:25,940 Si vaig a la geolocalització-1, resulta que Chrome sap que estem en 1661 01:17:25,940 --> 01:17:30,672 latitud longitud 42.37. -71.10. 1662 01:17:30,672 --> 01:17:32,940 Així que hi ha molt més enllà a la seva disposició. 1663 01:17:32,940 --> 01:17:34,290 Però més sobre això la propera setmana. 1664 01:17:34,290 --> 01:17:35,540 Ens veiem el dilluns. 1665 01:17:35,540 --> 01:17:37,558