1 00:00:00,000 --> 00:00:11,330 2 00:00:11,330 --> 00:00:12,360 >> DAVID MALAN: În regulă. 3 00:00:12,360 --> 00:00:15,970 Aceasta este CS50, iar acest lucru este la sfârșitul săptămânii nouă. 4 00:00:15,970 --> 00:00:18,560 A fost un vârtej de vânt de peste în ultimele câteva zile. 5 00:00:18,560 --> 00:00:21,580 Și problema stabilit șapte, dacă ești genunchi adânc în el, dai seama ca este destul de 6 00:00:21,580 --> 00:00:23,340 bit nou că e acolo. 7 00:00:23,340 --> 00:00:26,660 Dar să vedem dacă nu putem pune cap totul împreună aici pe scurt 8 00:00:26,660 --> 00:00:29,230 înainte de apoi schimbare a direcției de pe la încă o altă direcție și văzând 9 00:00:29,230 --> 00:00:30,510 unde altundeva putem merge. 10 00:00:30,510 --> 00:00:32,630 >> Deci, până acum, am vorbit despre HTML. 11 00:00:32,630 --> 00:00:33,740 Am vorbit despre CSS. 12 00:00:33,740 --> 00:00:34,705 Am vorbit despre PHP. 13 00:00:34,705 --> 00:00:36,520 Ai început să se confrunte SQL. 14 00:00:36,520 --> 00:00:38,360 Astăzi, vom vorbi un pic despre JavaScript. 15 00:00:38,360 --> 00:00:41,230 Dar cum a face toate acestea disparate limbi se potrivesc impreuna? 16 00:00:41,230 --> 00:00:44,970 >> Așa că am vorbit săptămâna trecută despre Noțiunea de a avea un server. 17 00:00:44,970 --> 00:00:48,470 Așa că haideți să atragă doar acest dreptunghi ca un server web aici. 18 00:00:48,470 --> 00:00:52,200 Și un server de web servește cu siguranță fișiere. 19 00:00:52,200 --> 00:00:54,640 Iar unele dintre aceste dosare pot fi fișiere HTML. 20 00:00:54,640 --> 00:00:58,270 Deci unul dintre lucrurile pe care un server web poate scuipa ar putea fi un fișier care 21 00:00:58,270 --> 00:01:01,290 vom trage la fel ca aceasta conține unele HTML. 22 00:01:01,290 --> 00:01:04,786 Deci, în termeni de nespecialist, ceea ce nu HTML lasa sa faci? 23 00:01:04,786 --> 00:01:06,036 >> Audiența: Page arata frumos. 24 00:01:06,036 --> 00:01:09,670 25 00:01:09,670 --> 00:01:12,310 >> DAVID MALAN: OK, face o pagină arate frumos, deși cred că am dovedit 26 00:01:12,310 --> 00:01:13,370 care altfel. 27 00:01:13,370 --> 00:01:18,250 Deci, HTML nu permite să se stabilească în paginile structural, și vă permite să 28 00:01:18,250 --> 00:01:22,410 un fel de punct de vedere estetic marca o pagină, marca de conținut static, astfel încât să 29 00:01:22,410 --> 00:01:23,640 atunci se poate vizualiza cu un browser web. 30 00:01:23,640 --> 00:01:24,690 >> Dar asta e cheia. 31 00:01:24,690 --> 00:01:26,130 Este conținut static. 32 00:01:26,130 --> 00:01:28,590 Ai scrie, să-l salvați, și apoi le expedieze. 33 00:01:28,590 --> 00:01:31,130 Și serverul de web servește apoi l pentru vizitatori. 34 00:01:31,130 --> 00:01:35,700 >> Dar noi stiliza lucruri folosind un alt limbă cu totul. 35 00:01:35,700 --> 00:01:40,150 Am început să utilizeze un atribut de stil pe anumite etichete. 36 00:01:40,150 --> 00:01:43,400 Și atributul style să ne stabilite lucruri cum ar fi dimensiunea și culoarea fontului. 37 00:01:43,400 --> 00:01:46,460 Și probabil ați început să descoperi, sau în curând va fi pentru finală 38 00:01:46,460 --> 00:01:50,160 proiecte potențial, dar alte proprietăți pe care le puteți utiliza în CSS. 39 00:01:50,160 --> 00:01:54,710 Și astfel, în termeni de nespecialist, ceea ce Chiar atunci se CSS face? 40 00:01:54,710 --> 00:01:57,810 Acestea sunt doar câteva exemple cu privire la aceasta. 41 00:01:57,810 --> 00:02:00,730 Ce nu-l lasa sa faci asta HTML nu pare să din ce 42 00:02:00,730 --> 00:02:02,606 am văzut până acum? 43 00:02:02,606 --> 00:02:04,850 >> Audiența: Definirea stiluri de unul singur. 44 00:02:04,850 --> 00:02:06,700 >> DAVID Malan: Definirea stilurilor de unul singur. 45 00:02:06,700 --> 00:02:10,280 Deci defini lucruri cum ar fi clase ca tine le-au întâmpinat, sau unic 46 00:02:10,280 --> 00:02:13,800 identifica nodurile dintr-un document, astfel pe care le puteți stiliza. 47 00:02:13,800 --> 00:02:16,890 Dar, mai precis, aș spune că CSS într-adevăr vă permite să luați lucrurile 48 00:02:16,890 --> 00:02:20,790 last mile și vă permite să specificați mult mai precis de estetica, 49 00:02:20,790 --> 00:02:24,340 în timp ce HTML pentru cea mai mare parte permite te structura paginile dvs.. 50 00:02:24,340 --> 00:02:27,310 >> Și, chiar dacă există unele implicite, cum am văzut eticheta de 51 00:02:27,310 --> 00:02:30,690 o etichetă titlu, care în linii mari a făcut lucruri mari și îndrăzneț. 52 00:02:30,690 --> 00:02:34,250 Aceasta este o definiție destul de generic de tag-ul - mare și îndrăzneț. 53 00:02:34,250 --> 00:02:35,260 Ce dimensiunea fontului este asta? 54 00:02:35,260 --> 00:02:36,080 Ce culoare este asta? 55 00:02:36,080 --> 00:02:36,890 Cum îndrăzneț este asta? 56 00:02:36,890 --> 00:02:39,830 Si CSS vă permite să mai fin ton lucruri de genul asta. 57 00:02:39,830 --> 00:02:42,150 Precum și aspectul, ca unii de ce au văzut. 58 00:02:42,150 --> 00:02:45,180 >> Și sincer, CSS este un pic de un limbaj murdar. 59 00:02:45,180 --> 00:02:48,370 Este foarte puternic, în care puteți face literalmente orice site pe care le-ați 60 00:02:48,370 --> 00:02:51,880 văzut de pe web astăzi cu ea, dar E un fel de durere în gât. 61 00:02:51,880 --> 00:02:54,440 Și unii dintre voi au lovit la cap împotriva pereți deja doar pentru a face 62 00:02:54,440 --> 00:02:58,560 ceva stupid ca centru de un meniu pe Problema stabilit șapte Dacă ați ajuns la 63 00:02:58,560 --> 00:02:59,470 acel punct deja. 64 00:02:59,470 --> 00:03:01,530 >> Dar dau seama, acele lucruri ajunge mai ușor în timp. 65 00:03:01,530 --> 00:03:02,820 Începi să observi tipare. 66 00:03:02,820 --> 00:03:06,020 Și din nou, Google va fi prietenul tău pentru diferitele moduri în care puteți 67 00:03:06,020 --> 00:03:07,220 rezolva aceste tipuri de probleme. 68 00:03:07,220 --> 00:03:11,520 >> Și îndrăznesc să spun cu CSS, HTML și mai mult în general, puteți rezolva problemele în 69 00:03:11,520 --> 00:03:15,910 mult mai multe feluri, toate din care s-ar putea foarte bine să fie corecte, decât ai putea 70 00:03:15,910 --> 00:03:18,900 în ceva de genul C, chiar acum PHP, sau JavaScript. 71 00:03:18,900 --> 00:03:21,080 Există doar mai multe diferite modalități ca să pună lucrurile. 72 00:03:21,080 --> 00:03:22,570 >> Dar acest lucru a început să se murdar, am spus. 73 00:03:22,570 --> 00:03:26,480 Doar un fel de confuzie HTML și CSS-ul cu atributul stil a fost 74 00:03:26,480 --> 00:03:27,590 un pic neglijent. 75 00:03:27,590 --> 00:03:31,460 Și așa am spus în schimb, un fel de abstract vorbind, că ar trebui să 76 00:03:31,460 --> 00:03:34,050 cel puțin începe să factor în CSS-ul, probabil. 77 00:03:34,050 --> 00:03:37,430 Nu atributele de stil, dar cel puțin folositi tag-ul stilul interior ce 78 00:03:37,430 --> 00:03:38,840 parte a paginii web? 79 00:03:38,840 --> 00:03:39,560 >> Audiența: Cap. 80 00:03:39,560 --> 00:03:40,120 >> DAVID MALAN: În cap. 81 00:03:40,120 --> 00:03:43,270 Până acum, am avut doar titlul în sus acolo, dar puteți adăuga, de asemenea, un stil 82 00:03:43,270 --> 00:03:47,230 tag-ul, și vă pot pune CSS aproximativ vorbind spre partea de sus a paginii. 83 00:03:47,230 --> 00:03:52,550 Dar apoi am luat lucrurile un pas mai departe și am luat ca mai multe 84 00:03:52,550 --> 00:03:54,130 într-un fișier separat. 85 00:03:54,130 --> 00:03:57,240 >> Și astfel aceste două dosare au fost cumva acum legat. 86 00:03:57,240 --> 00:03:59,550 Și într-adevăr a fost tag-ul care a făcut asta. 87 00:03:59,550 --> 00:04:02,920 Și ceea ce a fost unul dintre primordial motivații pentru factoring afară CSS noastre 88 00:04:02,920 --> 00:04:04,057 tot mai mult? 89 00:04:04,057 --> 00:04:05,280 >> Audiența: Reutilizarea. 90 00:04:05,280 --> 00:04:05,785 >> DAVID MALAN: reutilizare. 91 00:04:05,785 --> 00:04:06,150 Dreapta? 92 00:04:06,150 --> 00:04:09,470 Este posibil să fi văzut în p-set de șapte deja că o mulțime de pagini, 93 00:04:09,470 --> 00:04:12,260 cumpara pagină, pagina de vânzare, pagina de portofoliu, sunt, probabil, 94 00:04:12,260 --> 00:04:13,550 structurat oarecum similar. 95 00:04:13,550 --> 00:04:17,579 Există un logo finanțe CS50 la partea de sus dacă te-ai decis să-l schimbe. 96 00:04:17,579 --> 00:04:19,839 Există un subsol la partea de jos a paginilor. 97 00:04:19,839 --> 00:04:24,315 Si CSS vă permite apoi să-l factor de l într-un fișier separat, astfel încât, dacă 98 00:04:24,315 --> 00:04:27,780 doriți să schimbați ceva la nivel global pe întreg site-ul dvs., puteți într-adevăr 99 00:04:27,780 --> 00:04:29,390 doar se schimbă într-un singur loc. 100 00:04:29,390 --> 00:04:32,750 >> Dar există un preț pe care îl plătiți potențial de care au luat în 101 00:04:32,750 --> 00:04:38,380 CSS din dosarul meu HTML într-o separat fișier corelarea cu 102 00:04:38,380 --> 00:04:40,650 tag-ul, pe care am văzut-o pe luni. 103 00:04:40,650 --> 00:04:43,850 Ceea ce ar putea fi dezavantaj al acestui? 104 00:04:43,850 --> 00:04:48,830 Gândire înapoi în urmă cu o săptămână, atunci când suntem vorbesc despre HTTP și TCP / IP și modul în care 105 00:04:48,830 --> 00:04:52,070 pe internet funcționează. 106 00:04:52,070 --> 00:04:53,530 Ceva pe aici? 107 00:04:53,530 --> 00:04:54,730 >> Audiența: Este nevoie de mai mult timp. 108 00:04:54,730 --> 00:04:55,470 >> DAVID MALAN: E nevoie de mai mult timp. 109 00:04:55,470 --> 00:04:56,750 De ce? 110 00:04:56,750 --> 00:04:59,450 >> Audiența: [inaudibil]. 111 00:04:59,450 --> 00:04:59,750 >> DAVID MALAN: Da. 112 00:04:59,750 --> 00:05:01,240 Deci, este nevoie de timp, fără îndoială, un pic mai mult. 113 00:05:01,240 --> 00:05:04,290 Pentru că unul, CSS este, evident, nu în același fișier. 114 00:05:04,290 --> 00:05:06,920 Deci, acum trebuie să nu facă unul, ci două cereri. 115 00:05:06,920 --> 00:05:11,230 Și fiecare dintre aceste cereri așa cum am văzut în Chrome în așa-numitul Inspector, 116 00:05:11,230 --> 00:05:15,740 și ne-am uitat la tab-ul de rețea, fiecare din aceste fișiere necesită un HTTP 117 00:05:15,740 --> 00:05:18,360 cerere, pe care am văzut-are o anumită cantitate de timp. 118 00:05:18,360 --> 00:05:19,290 Acum, poate că nu e mult. 119 00:05:19,290 --> 00:05:20,670 Poate e doar 20 de milisecunde. 120 00:05:20,670 --> 00:05:22,260 Poate e de 200 de milisecunde. 121 00:05:22,260 --> 00:05:25,530 >> Dar gândiți-vă o pagină cum ar fi Facebook, sau CNN, sau Google, care sunt mult 122 00:05:25,530 --> 00:05:28,060 mai mare decât exemplele care le-am sa uitat la până acum. 123 00:05:28,060 --> 00:05:32,070 Aceste pagini ar putea avea zeci de dosare, fiecare dintre acestea ar putea necesita o 124 00:05:32,070 --> 00:05:33,550 descărcare a unui fișier. 125 00:05:33,550 --> 00:05:35,800 Deci, lucrurile pot potențial începe să încetinească. 126 00:05:35,800 --> 00:05:39,280 >> Și mai ales în aceste zile atunci când noi toți au telefoane mobile în buzunarele noastre și 127 00:05:39,280 --> 00:05:43,010 conexiunile internet mai lente, având la așteaptă alte câteva milisecunde, câteva 128 00:05:43,010 --> 00:05:46,110 mai multe milisecunde pentru suplimentare fișierele pot fi de fapt lent. 129 00:05:46,110 --> 00:05:50,430 Latență este cuvântul care descrie un fel de așteptare pe care le au pe care le 130 00:05:50,430 --> 00:05:53,110 experimenta atunci când așteptare pentru unele bucată de informații. 131 00:05:53,110 --> 00:05:54,430 >> Dar există și o parte bună. 132 00:05:54,430 --> 00:05:56,600 Deci, nu e tot un fel de - 133 00:05:56,600 --> 00:05:58,170 este de fapt un pic de un balansoar aici. 134 00:05:58,170 --> 00:06:02,970 Dezavantaj acum, dar ceea ce browsere se poate face în cazul în care acestea sunt inteligente, în scopul de a evita 135 00:06:02,970 --> 00:06:08,870 a trebui să solicite același styles.css fișier din nou, poate fi de a face ce? 136 00:06:08,870 --> 00:06:09,390 >> Cache-l. 137 00:06:09,390 --> 00:06:10,370 Așa cache - 138 00:06:10,370 --> 00:06:11,690 C-A-C-H-E - 139 00:06:11,690 --> 00:06:15,810 în general, înseamnă aici doar pentru a salva fișierul pe care a solicitat pentru prima dată, și 140 00:06:15,810 --> 00:06:17,440 apoi verificați cache-ul pentru ea. 141 00:06:17,440 --> 00:06:20,400 Verificați dacă ești un fel de container de depozitare, și, dacă aveți deja o 142 00:06:20,400 --> 00:06:24,520 copie de styles.css, chiar dacă o altă Pagina în p-set, sau orice site web, 143 00:06:24,520 --> 00:06:28,560 solicită din nou, doar pentru a da utilizator care aceeași copie memorată în cache. 144 00:06:28,560 --> 00:06:30,140 Nu te obosi îl solicită. 145 00:06:30,140 --> 00:06:32,560 >> Dezavantaj acolo, deși, așa cum unii dintre voi s-au împiedicat de la p-set. 146 00:06:32,560 --> 00:06:35,870 Dacă ați face o schimbare pe server și te duci înapoi la browser-ul și vă 147 00:06:35,870 --> 00:06:39,250 reîncărcați, uneori, browser-ul nu vă o favoare și nu deranjează 148 00:06:39,250 --> 00:06:43,660 re-a descărca fișierul styles.css pentru că, haide, care sunt sansele 149 00:06:43,660 --> 00:06:47,620 că aceste stiluri care utilizează Facebook se vor schimba la oră la oră sau 150 00:06:47,620 --> 00:06:48,140 zi de zi? 151 00:06:48,140 --> 00:06:48,800 E destul de scăzut. 152 00:06:48,800 --> 00:06:52,260 S-ar putea schimba în timp, dar nu de minute sau de oră. 153 00:06:52,260 --> 00:06:55,810 >> Deci, un truc, doar FYI atunci când faci web dezvoltare, este de multe ori țineți apăsat 154 00:06:55,810 --> 00:06:59,500 cheie de schimbare, de exemplu, și apoi faceți clic pe reîncărcați în browser-ul dvs., și că voința 155 00:06:59,500 --> 00:07:03,280 spune de obicei reload browser totul, chiar dacă aveți deja 156 00:07:03,280 --> 00:07:04,180 se în cache. 157 00:07:04,180 --> 00:07:06,630 Deci, din nou, upsides și dezavantaje, dar toate acestea 158 00:07:06,630 --> 00:07:08,260 în cele din urmă de proiectare decizii. 159 00:07:08,260 --> 00:07:11,520 >> Deci, acum, nu am făcut-o doar termina povestea aici. 160 00:07:11,520 --> 00:07:15,790 Dacă acum mă duc înapoi și înapoi și înapoi și înapoi, am început să introducă nu numai 161 00:07:15,790 --> 00:07:18,060 HTML, dar PHP. 162 00:07:18,060 --> 00:07:20,786 Deci, în termeni de nespecialist, ce PHP are să ne facem? 163 00:07:20,786 --> 00:07:22,770 >> Audiența: [inaudibil]. 164 00:07:22,770 --> 00:07:24,258 >> DAVID MALAN: Ce-i asta? 165 00:07:24,258 --> 00:07:25,250 >> Audiența: Introducerea logică în codul. 166 00:07:25,250 --> 00:07:26,620 >> DAVID MALAN: Da, să introducă logică în codul. 167 00:07:26,620 --> 00:07:29,570 Deci, este un adevărat limbaj de programare cu bucle, și variabile, și 168 00:07:29,570 --> 00:07:32,620 funcții și condiții, și toate de lucrurile pe care le-am folosit drumul înapoi 169 00:07:32,620 --> 00:07:33,780 când de la zero. 170 00:07:33,780 --> 00:07:36,780 Și PHP, am văzut, poate fi utilizat fie de la linia de comandă - aceasta 171 00:07:36,780 --> 00:07:39,190 nu trebuie să aibă nimic de a face cu web-ul, chiar dacă e 172 00:07:39,190 --> 00:07:43,150 într-adevăr originile sale și ceea ce tinde pentru a fi bun la și să conducă la - 173 00:07:43,150 --> 00:07:47,130 dar puteți folosi PHP pur și simplu de natură de faptul că acesta are o imprimare () 174 00:07:47,130 --> 00:07:49,660 funcția, și a (funcție) printf, sau un (funcție) ecou. 175 00:07:49,660 --> 00:07:52,440 Există buchete de modalități în care poate imprima text cu PHP. 176 00:07:52,440 --> 00:07:56,540 >> Prin urmare, puteți folosi această programare Limba de ieșire exact 177 00:07:56,540 --> 00:07:58,460 ce vorbeam mai înainte. 178 00:07:58,460 --> 00:08:01,360 Puteți genera dinamic HTML dumneavoastră. 179 00:08:01,360 --> 00:08:02,300 Poate că nu toate de ea. 180 00:08:02,300 --> 00:08:06,460 Poate că lucrurile cod greu, ca antet și subsol, și logo-ul, 181 00:08:06,460 --> 00:08:07,950 și foile de stil, și toate astea. 182 00:08:07,950 --> 00:08:11,190 Dar pentru ceva de genul set-p șapte, unde te manipularea stocurilor și 183 00:08:11,190 --> 00:08:14,690 arătând portofoliul utilizatorului, care este va schimba dinamic, ai putea 184 00:08:14,690 --> 00:08:18,960 folosi cu siguranță PHP și logica dă tine, ca un limbaj de programare a 185 00:08:18,960 --> 00:08:22,320 ieșire subseturi dinamic paginii. 186 00:08:22,320 --> 00:08:25,900 >> Deci, atunci când vorbim despre site-uri web dinamice, sau de programare web, care este 187 00:08:25,900 --> 00:08:27,200 ceea ce sunteți cu adevărat vorba. 188 00:08:27,200 --> 00:08:31,450 Folosind un limbaj cum ar fi PHP, sau lucruri numit Python, sau Ruby, sau Java, sau 189 00:08:31,450 --> 00:08:35,900 încă alte limbi, pentru a interoga o bază de date de multe ori, sau un alt server, și 190 00:08:35,900 --> 00:08:38,580 apoi dinamic scuipa HTML. 191 00:08:38,580 --> 00:08:42,470 >> Acum, rezultatul final, ca o paranteza, este că HTML de cele mai multe site-uri web, 192 00:08:42,470 --> 00:08:45,970 inclusiv dvs. șapte set-p, este, probabil, Va fi un dezastru imens, dacă 193 00:08:45,970 --> 00:08:48,060 te uiti la sursă cod într-un browser. 194 00:08:48,060 --> 00:08:49,010 Asta nu este o afacere mare. 195 00:08:49,010 --> 00:08:51,550 În acest moment, când ne pasă stil, ne pasă de 196 00:08:51,550 --> 00:08:52,740 lucrurile pe care le scrie. 197 00:08:52,740 --> 00:08:56,240 Noi nu va pasa de chestii că ceea ce ieșirile de cod. 198 00:08:56,240 --> 00:08:59,520 Deci, nu vă faceți griji cu privire la indentare aici, în cazul în care este PHP că e 199 00:08:59,520 --> 00:09:01,190 scoate de fapt lucrurile. 200 00:09:01,190 --> 00:09:04,430 La urma urmei, browser-ul nu va pasa, și un om nu va fi uitat 201 00:09:04,430 --> 00:09:05,400 la sursă, oricum. 202 00:09:05,400 --> 00:09:09,000 Noi personal, de exemplu, ar fi se uita la dvs. PHP. 203 00:09:09,000 --> 00:09:13,440 >> Deci, permiteți-mi să dau un exemplu rapid acum de altfel de ce acest lucru ar putea fi util. 204 00:09:13,440 --> 00:09:18,620 Deci, sincer, nu-mi amintesc ultima timp am folosit C pentru a rezolva o problemă în 205 00:09:18,620 --> 00:09:19,620 lumea reală. 206 00:09:19,620 --> 00:09:22,330 Acesta a fost, probabil, în facultate, atunci când Am nevoie pentru a folosi un limbaj care 207 00:09:22,330 --> 00:09:26,710 a fost de nivel destul de scăzut și mi-a dat posibilitatea de a face ceva foarte mare 208 00:09:26,710 --> 00:09:30,720 performante pentru a salva într-adevăr cât mai multe CPU cicluri cum am putut, în mare parte 209 00:09:30,720 --> 00:09:33,990 pentru că am fost folosind seturi imense de date, și fiecare ciclu CPU numărate. 210 00:09:33,990 --> 00:09:37,750 Și sincer, chiar și în lucruri, cum ar fi telefoanele aceste zile și alte dispozitive 211 00:09:37,750 --> 00:09:39,910 în cazul în care nu prea au la fel de mult memorie și nu au destul ca 212 00:09:39,910 --> 00:09:44,160 mult CPU, folosind limbi rapide este încă atrăgătoare. 213 00:09:44,160 --> 00:09:47,290 >> Dar în lumea reală, atunci când doar Vreau să arunce unele programe împreună la 214 00:09:47,290 --> 00:09:50,340 analiza unor date, sau le-ați colectat o grămadă de înregistrări pentru 215 00:09:50,340 --> 00:09:53,330 un grup de student si vrei sa foarte automatiza rapid trimiterea de e-mailuri 216 00:09:53,330 --> 00:09:56,240 unul câte unul pentru fiecare dintre cei înregistrării, ai de gând să ajungă pentru 217 00:09:56,240 --> 00:09:59,240 un limbaj de nivel superior C decât ca să spunem așa. 218 00:09:59,240 --> 00:10:04,060 Ceva de genul PHP sau Python sau Ruby, sau o jumătate de duzină de alții care există 219 00:10:04,060 --> 00:10:04,550 aceste zile. 220 00:10:04,550 --> 00:10:07,200 Dar cei trei sunt, probabil, cele mai la modă acum. 221 00:10:07,200 --> 00:10:10,840 >> Și ce înseamnă acest lucru este că puteți deschide un editor de text cum ar fi gedit sau 222 00:10:10,840 --> 00:10:14,030 cele mai multe orice altceva și apoi doar începutul scrierea de cod fără a fi nevoie să vă faceți griji 223 00:10:14,030 --> 00:10:17,800 despre compilarea, fără a fi nevoie să într-adevăr vă faceți griji cu privire la gestionarea memoriei, 224 00:10:17,800 --> 00:10:20,820 ținând cont de faptul că, deși un pic o anumită superficialitate va veni în cele din urmă înapoi 225 00:10:20,820 --> 00:10:24,790 să te muște dacă setul de date devine mai mare sau problema devine mare. 226 00:10:24,790 --> 00:10:27,230 Dar ce înseamnă acest lucru pentru ne este următoarea. 227 00:10:27,230 --> 00:10:29,860 >> Lasă-mă să merg mai departe și a alerga speller de la problema stabilit șase. 228 00:10:29,860 --> 00:10:33,480 Deci, acest lucru este punerea în aplicare meu bazate pe trie pe care am folosit pe marele 229 00:10:33,480 --> 00:10:35,500 bord în cazul în care nu am efectuat atât de bine. 230 00:10:35,500 --> 00:10:38,720 Ne vom întoarce într-o săptămână și revizuiască cei care au ajung în vârful 231 00:10:38,720 --> 00:10:40,430 bord mare de la ultima noastră conferință. 232 00:10:40,430 --> 00:10:44,520 Dar pentru acum, permiteți-mi să mergeți mai departe și doar rula soluția mea în text, și vom face 233 00:10:44,520 --> 00:10:48,460 Biblia King James, și aici vom merge. 234 00:10:48,460 --> 00:10:51,080 >> Deci, acestea sunt toate de presupus cuvintele scrise greșit din 235 00:10:51,080 --> 00:10:52,240 Biblia King James. 236 00:10:52,240 --> 00:10:55,560 Și punerea în aplicare a mea a luat o jumătate de secundă, în total. 237 00:10:55,560 --> 00:10:58,270 Deci, nu prea rău în acest special de calculator. 238 00:10:58,270 --> 00:11:01,540 Dar cred că de cât de mult cod am avut de a scrie. 239 00:11:01,540 --> 00:11:02,880 Gândiți-vă cât de mult cod trebuia să scrie. 240 00:11:02,880 --> 00:11:06,170 Gândiți-vă cât de multe ore pe care le petrecute în D-sala sau camin sau ori de câte ori 241 00:11:06,170 --> 00:11:07,890 de fapt, de codificare pe această soluție. 242 00:11:07,890 --> 00:11:11,850 >> Ei bine, dacă am de fapt, un nivel mai ridicat limbă ca PHP, să ia notă de 243 00:11:11,850 --> 00:11:13,350 ce pot face aici. 244 00:11:13,350 --> 00:11:16,410 În primul rând, să presupunem că acest lucru este în schimb codul de distribuție. 245 00:11:16,410 --> 00:11:17,790 Acesta este un fișier numit abecedar. 246 00:11:17,790 --> 00:11:20,220 Este disponibil ca parte a de astăzi cod de distribuție. 247 00:11:20,220 --> 00:11:22,670 Și am de gând să facă cu mâna mea la cel mai a detaliilor, dar acest lucru este de fapt 248 00:11:22,670 --> 00:11:25,500 un exemplu interesant cum s-ar putea de port-o limbă 249 00:11:25,500 --> 00:11:28,870 cum ar fi C, pe la PHP. 250 00:11:28,870 --> 00:11:33,420 Am literalmente deschis două ferestre de text, una cu versiunea mea C de speller.c, 251 00:11:33,420 --> 00:11:36,960 și am început-o în traducerea mea cap de PHP și tastați-l cu ajutorul 252 00:11:36,960 --> 00:11:38,840 cele mai apropiate funcții echivalente. 253 00:11:38,840 --> 00:11:40,100 >> Astfel încât unele dintre aceste lucruri sunt diferite. 254 00:11:40,100 --> 00:11:43,730 Am văzut ultima dată pe care PHP nu utilizează includ în destul de același fel. 255 00:11:43,730 --> 00:11:47,050 Se foloseste de obicei nevoie, deși includ nu exista. 256 00:11:47,050 --> 00:11:50,330 Defini este un pic diferit de la # Define în C, dar asta e 257 00:11:50,330 --> 00:11:51,890 cum putem face o constantă. 258 00:11:51,890 --> 00:11:55,860 $ Argc se pare că există în PHP, așa că am văzut că, înainte. 259 00:11:55,860 --> 00:11:58,650 Acestea sunt doar variabile, toate de care începe cu semne dolar. 260 00:11:58,650 --> 00:12:00,590 Amintiți-acestea sunt doar o adunatura de puncte plutitoare. 261 00:12:00,590 --> 00:12:03,970 >> Deci, pe scurt, ești binevenit să flip prin acest lucru, dacă curios, acest lucru este 262 00:12:03,970 --> 00:12:10,010 aproape o conversie linie-pentru-line a Versiunea C de speller.c în PHP. 263 00:12:10,010 --> 00:12:12,630 Și ai putea face acest lucru din nou pentru o jumătate de duzină de alte limbi. 264 00:12:12,630 --> 00:12:14,910 >> Dar ceea ce este interesant este acest lucru. 265 00:12:14,910 --> 00:12:16,910 Sau ceea ce este sincer evoluat destul de timid este acest lucru. 266 00:12:16,910 --> 00:12:20,790 Lasă-mă să merg mai departe și de tip cu privire la dictionary.php, și susțin că sunt 267 00:12:20,790 --> 00:12:23,670 O să mergeți mai departe și re-punerea în aplicare a problema stabilit șase aici. 268 00:12:23,670 --> 00:12:27,530 >> Deci, haideți propune în primul rând că, în acest dosar, care va fi implementat în 269 00:12:27,530 --> 00:12:30,550 PHP, așa că lasă-mă să deschid Tag-urile mele de genul asta. 270 00:12:30,550 --> 00:12:34,780 Permiteți-mi să mă dau un nivel global variabilă, $ dimensiune devine zero. 271 00:12:34,780 --> 00:12:36,710 Și am de gând să dea am un tabel hash. 272 00:12:36,710 --> 00:12:38,110 Voi folosi un tabel hash pentru acest lucru. 273 00:12:38,110 --> 00:12:42,070 Cum pot declara un tabel hash in PHP? 274 00:12:42,070 --> 00:12:42,990 Efectuat. 275 00:12:42,990 --> 00:12:43,980 OK. 276 00:12:43,980 --> 00:12:48,870 >> Suport atât de deschisă suport aproape reprezintă ceea ce în PHP, așa cum am văzut? 277 00:12:48,870 --> 00:12:51,850 O matrice, ci o matrice care ar putea fi un tablou asociativ. 278 00:12:51,850 --> 00:12:54,320 Un tablou asociativ este o structură de date care 279 00:12:54,320 --> 00:12:55,860 asociază chei cu valori. 280 00:12:55,860 --> 00:12:59,430 >> Acum, în cele mai simple indexate numeric matrice, aceste chei sunt ceea ce? 281 00:12:59,430 --> 00:13:02,250 282 00:13:02,250 --> 00:13:03,960 Zero, unu, doi, trei, nu? 283 00:13:03,960 --> 00:13:08,780 Old School chestii înapoi de la C. Dar se poate fi, de asemenea, siruri de caractere, cum ar fi foo și bar, 284 00:13:08,780 --> 00:13:12,210 sau Maxwell, sau orice astfel de șir. 285 00:13:12,210 --> 00:13:14,240 Deci, eu pot pârghie că într-o clipă. 286 00:13:14,240 --> 00:13:17,550 >> Lasă-mă să merg mai departe și să declare o funcție cum ar fi - 287 00:13:17,550 --> 00:13:19,020 hai sa facem sarcină () întâi. 288 00:13:19,020 --> 00:13:20,690 Astfel de sarcină funcție (). 289 00:13:20,690 --> 00:13:23,440 Și PHP este un pic diferit în care tastați literalmente funcție, dar tu 290 00:13:23,440 --> 00:13:24,930 nu tastați un tip de revenire. 291 00:13:24,930 --> 00:13:28,760 Am de gând să merg mai departe și spun că (funcție de sarcină), ar trebui să ia în 292 00:13:28,760 --> 00:13:31,000 argument $ dicționar, doar ca versiunea C a făcut. 293 00:13:31,000 --> 00:13:32,510 Fac asta din memorie. 294 00:13:32,510 --> 00:13:34,910 >> Și eu propun ca eu sunt de gând să facă acest lucru. 295 00:13:34,910 --> 00:13:37,080 Eu pur și simplu de gând să faci foreach. 296 00:13:37,080 --> 00:13:40,710 Am de gând pentru a apela o funcție numită fișier (), trecând în numele care 297 00:13:40,710 --> 00:13:44,990 fișier, care este variabila $ Dicționar ca $ cuvânt. 298 00:13:44,990 --> 00:13:49,410 Și apoi în interiorul meu pentru buclă aici, eu sunt merge mai departe și stoca în mea 299 00:13:49,410 --> 00:13:57,440 $ Tabel care $ cuvânt devine adevărat. 300 00:13:57,440 --> 00:13:57,918 Efectuat. 301 00:13:57,918 --> 00:14:01,264 Oh, așteptați. 302 00:14:01,264 --> 00:14:02,422 Efectuat. 303 00:14:02,422 --> 00:14:02,760 OK. 304 00:14:02,760 --> 00:14:04,970 >> Care este funcție de sarcină () spune în PHP. 305 00:14:04,970 --> 00:14:05,865 Acum, de ce face asta? 306 00:14:05,865 --> 00:14:07,010 Și eu sunt un fel de înșelăciune aici. 307 00:14:07,010 --> 00:14:09,980 >> Deci, o, foreach am văzut pe scurt ultima dată. 308 00:14:09,980 --> 00:14:13,680 Aceasta înseamnă doar că puteți repeta peste o matrice fără a se deranja cu I 309 00:14:13,680 --> 00:14:16,150 și n și, plus, plus, și tot de ce. 310 00:14:16,150 --> 00:14:21,350 Dicționar este, desigur, numele de fișier, ceva de genul mari sau mici, cele două 311 00:14:21,350 --> 00:14:22,830 dicționare am folosit ultima dată. 312 00:14:22,830 --> 00:14:26,715 Fisier este o funcție care se deschide textul fișier, se citește în linie cu linie, și 313 00:14:26,715 --> 00:14:29,840 mâini te-ai întors-o gamă foarte mare, fiecare dintre elementele a căror este un 314 00:14:29,840 --> 00:14:31,340 linie de la acel fișier. 315 00:14:31,340 --> 00:14:36,040 Astfel că este o combinație de fopen, și fread, și în timp ce bucla, și fclose, 316 00:14:36,040 --> 00:14:37,080 și toate că. 317 00:14:37,080 --> 00:14:40,150 În cele din urmă, ca și cuvânt înseamnă doar că e variabilă am de gând să aibă acces la 318 00:14:40,150 --> 00:14:41,890 pe fiecare iterație în această buclă. 319 00:14:41,890 --> 00:14:46,910 >> Deci, pe scurt, aceasta linie înseamnă aici deschide fișierul al cărui nume este în 320 00:14:46,910 --> 00:14:50,750 dicționar, variabila, repeta peste o linie cu linie, și de fiecare dată când se 321 00:14:50,750 --> 00:14:54,290 o linie, magazin într-o variabilă numită cuvânt, și apoi face ceva cu cuvânt. 322 00:14:54,290 --> 00:14:55,280 Ce vreau să fac? 323 00:14:55,280 --> 00:14:58,110 Vreau să pun cuvântul în masa mea hash. 324 00:14:58,110 --> 00:15:00,860 >> Ei bine, eu pot pune ceva în mea tabela de dispersie la fel ca în C 325 00:15:00,860 --> 00:15:02,140 cu paranteze pătrate. 326 00:15:02,140 --> 00:15:03,660 Acesta este numele pentru masa mea hash. 327 00:15:03,660 --> 00:15:07,180 Am de gând să indice în care hash tabelul de la această locație. 328 00:15:07,180 --> 00:15:08,920 Deci, nu suport de zero, nu suport unul. 329 00:15:08,920 --> 00:15:11,990 Suport Citat încheiat citatul ceva, indiferent ce cuvânt este. 330 00:15:11,990 --> 00:15:15,200 Și, la fel ca tine s-ar putea avea în dumneavoastră tabelul hash trie de lucru, stocați doar 331 00:15:15,200 --> 00:15:17,650 în mod eficient un Boolean, implicit, sau explicit. 332 00:15:17,650 --> 00:15:18,260 Efectuat. 333 00:15:18,260 --> 00:15:20,000 Am stocarea adevărata valoare. 334 00:15:20,000 --> 00:15:23,150 >> Acum, există o serie de lucruri Sunt de tăiere colțuri pe aici. 335 00:15:23,150 --> 00:15:27,720 Punct de vedere tehnic, nu va fi o linie nouă enervant, / n, la sfârșitul anului 336 00:15:27,720 --> 00:15:28,820 fiecare dintre aceste cuvinte. 337 00:15:28,820 --> 00:15:31,770 Deci, ar trebui să sun, probabil, o funcție PHP numit CHOP (), care va 338 00:15:31,770 --> 00:15:33,460 taie destul de literalmente aia. 339 00:15:33,460 --> 00:15:35,020 Și de fapt, am nevoie să face un alt lucru. 340 00:15:35,020 --> 00:15:38,380 Probabil ar trebui să incrementa dimensiuni pe fiecare iterație, așa că ține evidența 341 00:15:38,380 --> 00:15:39,560 la nivel global de ceea ce este. 342 00:15:39,560 --> 00:15:43,180 Și sincer, și acesta este unul din Aspecte stupid de PHP, daca esti 343 00:15:43,180 --> 00:15:46,950 folosind o variabilă globală, aveți nevoie de pentru a spune în mod explicit că ești. 344 00:15:46,950 --> 00:15:51,670 Așa că am de gând să scrie de fapt la nivel mondial Dimensiune $, $ masă la nivel mondial, iar acum 345 00:15:51,670 --> 00:15:52,690 Funcția mea este completă. 346 00:15:52,690 --> 00:15:57,475 >> Deci, nu la fel de simplu ca înainte, dar Probabil a luat mai puțin timp decât C 347 00:15:57,475 --> 00:15:58,220 versiune, poate? 348 00:15:58,220 --> 00:15:58,730 OK. 349 00:15:58,730 --> 00:16:00,390 >> Deci, acum hai sa facem check () funcția. 350 00:16:00,390 --> 00:16:04,300 Să vedem dacă acest lucru cel puțin a ore în șir pe care ne-a luat în C. Deci, 351 00:16:04,300 --> 00:16:06,500 lasă-mă să merg mai departe și să declare verifica ca funcție. 352 00:16:06,500 --> 00:16:09,070 Ia în cuvânt argument, care este Va veni din abecedar. 353 00:16:09,070 --> 00:16:13,410 Și am de gând doar pentru a verifica dacă după variabila isset, de masă 354 00:16:13,410 --> 00:16:18,400 strtolower suportul de cuvânt - 355 00:16:18,400 --> 00:16:20,590 să echilibreze toate paranteze mele - 356 00:16:20,590 --> 00:16:24,275 apoi reveni adevărat. 357 00:16:24,275 --> 00:16:27,020 358 00:16:27,020 --> 00:16:28,460 Altele - 359 00:16:28,460 --> 00:16:30,330 că a fost foarte greu parte din acest program. 360 00:16:30,330 --> 00:16:31,940 Altfel, întoarce false. 361 00:16:31,940 --> 00:16:32,630 Efectuat. 362 00:16:32,630 --> 00:16:33,460 Asta-i verificare (). 363 00:16:33,460 --> 00:16:34,520 >> Acum, de ce face acest lucru? 364 00:16:34,520 --> 00:16:37,040 Ei bine, l-am trecut într-un cuvânt, care este un șir. 365 00:16:37,040 --> 00:16:41,400 Doi, am verificat interiorul hash masă, care se numește $ masă. 366 00:16:41,400 --> 00:16:45,470 Am fortandu-l sa litere mici de apel o funcție tolower destul de asemănătoare () în 367 00:16:45,470 --> 00:16:48,580 C, dar acest lucru nu tot cuvântul, nu un singur caracter. 368 00:16:48,580 --> 00:16:52,680 Și în cazul în care este stabilit, în alte cuvinte, acolo este un set de valori, cu alte cuvinte, 369 00:16:52,680 --> 00:16:54,880 dacă e adevărat, atunci da, acesta este un cuvânt. 370 00:16:54,880 --> 00:16:56,530 Pentru că l-am pus acolo cu sarcina (). 371 00:16:56,530 --> 00:16:59,100 Și dacă nu, am de gând să se întoarcă false. 372 00:16:59,100 --> 00:17:00,090 >> Acum, altele sunt ușor. 373 00:17:00,090 --> 00:17:03,570 Dimensiunea funcția (), cum fac asta? 374 00:17:03,570 --> 00:17:05,230 Am în esență, se întorc dimensiune $. 375 00:17:05,230 --> 00:17:07,770 Dar am punct de vedere tehnic trebuie să face acest lucru enervant. 376 00:17:07,770 --> 00:17:10,640 Și de fapt, auzi, am fost de tăiere un colț prea multe. 377 00:17:10,640 --> 00:17:12,920 Am într-adevăr nevoie pentru a face $ masă la nivel mondial. 378 00:17:12,920 --> 00:17:16,260 >> Dar, acestea fiind spuse, descărcarea). 379 00:17:16,260 --> 00:17:17,380 Descărcare () este uimitor. 380 00:17:17,380 --> 00:17:20,500 Funcție descărca (). 381 00:17:20,500 --> 00:17:23,990 Cum vreau să pună în aplicare descarce ()? 382 00:17:23,990 --> 00:17:25,079 Efectuat. 383 00:17:25,079 --> 00:17:25,450 OK. 384 00:17:25,450 --> 00:17:28,900 >> Deci descărca (), managementul memoriei este grija complet luate de la tine în 385 00:17:28,900 --> 00:17:31,800 ceva de genul PHP și o mulțime de limbi de nivel superior. 386 00:17:31,800 --> 00:17:32,600 Deci, acest lucru este uimitor. 387 00:17:32,600 --> 00:17:36,080 Ca ce naiba am petrecut ultimii opt săptămâni, plus la scrierea C 388 00:17:36,080 --> 00:17:41,030 se pare foarte lent, într-adevăr timp probleme consumatoare cu zeci de ore 389 00:17:41,030 --> 00:17:42,530 de muncă în temeiul cureaua? 390 00:17:42,530 --> 00:17:46,110 >> Ei bine, pentru un singur lucru, acest lucru se poate lucra amendă pentru programe mici. 391 00:17:46,110 --> 00:17:47,840 Este cu siguranță accelerat meu timpul de dezvoltare. 392 00:17:47,840 --> 00:17:49,790 Dar să vedem ce se întâmplă în lumea reală. 393 00:17:49,790 --> 00:17:52,370 >> Lasă-mă să merg în acest director într-un terminal. 394 00:17:52,370 --> 00:17:53,370 Există scrie corect. 395 00:17:53,370 --> 00:17:56,570 Si observa ca o parte, și s-ar putea au întâmpinat această problemă în set 396 00:17:56,570 --> 00:17:58,190 șase sau șapte problema stabilit. 397 00:17:58,190 --> 00:18:01,610 Nu trebuie strict la termina fișierele PHP cu. PHP. 398 00:18:01,610 --> 00:18:05,250 Dacă ați pus o linie de genul asta prima la foarte de sus, care este o linie specială 399 00:18:05,250 --> 00:18:10,980 de sintaxă care, în esență înseamnă găsi program numit PHP și să-l utilizați pentru a 400 00:18:10,980 --> 00:18:12,270 interpreta acest fișier. 401 00:18:12,270 --> 00:18:15,410 Deci, acum nimeni nu știe cu adevărat care Sunt rulează un program de PHP. 402 00:18:15,410 --> 00:18:19,860 Eu pot rula doar ca și cum ar au fost compilate ceva în C. 403 00:18:19,860 --> 00:18:20,650 >> Dar aici e de lucru. 404 00:18:20,650 --> 00:18:21,600 De fapt, hai să facem asta din nou. 405 00:18:21,600 --> 00:18:23,530 Dropbox/pset6 /. 406 00:18:23,530 --> 00:18:25,390 Există scrie corect. 407 00:18:25,390 --> 00:18:26,720 OK, 0.44 secunde. 408 00:18:26,720 --> 00:18:28,080 A ajuns mai repede de data asta. 409 00:18:28,080 --> 00:18:29,745 >> Acum, să mergem în versiunea PHP. 410 00:18:29,745 --> 00:18:43,070 411 00:18:43,070 --> 00:18:44,320 Frumos atinge. 412 00:18:44,320 --> 00:18:50,830 413 00:18:50,830 --> 00:18:53,285 Dar gândește-te cât de mult timp I-am salvat de la orele de birou. 414 00:18:53,285 --> 00:18:56,990 415 00:18:56,990 --> 00:18:57,790 OK. 416 00:18:57,790 --> 00:19:01,020 >> Deci 3.59 secunde, care de fapt Nu precisă a sunetului, fie. 417 00:19:01,020 --> 00:19:03,710 Dar asta pentru ca povestea pe scurt, atunci când imprimați o cantitate mare 418 00:19:03,710 --> 00:19:06,840 de chestii pe ecran, care se încetinește lucrurile jos. 419 00:19:06,840 --> 00:19:11,260 Ceea ce a luat într-adevăr CPU în aparat a fost de 3.59 secunde, în 420 00:19:11,260 --> 00:19:15,260 Spre deosebire de C, care a avut 0,44 secunde cel mai recent. 421 00:19:15,260 --> 00:19:17,620 Care este cu adevărat un ordin de magnitudine diferită. 422 00:19:17,620 --> 00:19:20,280 >> Deci, unde este acest preț vine de la? 423 00:19:20,280 --> 00:19:21,790 De ce este atât de mult mai lent? 424 00:19:21,790 --> 00:19:24,220 De ce efectua atât de slab PHP? 425 00:19:24,220 --> 00:19:25,242 Danielle? 426 00:19:25,242 --> 00:19:26,550 >> Audiența: N-ai făcut într-adevăr utilizați un tabel hash. 427 00:19:26,550 --> 00:19:27,710 >> DAVID MALAN: Eu nu prea utilizați un tabel hash. 428 00:19:27,710 --> 00:19:28,760 Așa că am un fel de făcut. 429 00:19:28,760 --> 00:19:29,870 Deci, este un tablou asociativ. 430 00:19:29,870 --> 00:19:33,650 Cel mai probabil, în cazul în care cei de la PHP sunt foarte inteligent, au folosit sub 431 00:19:33,650 --> 00:19:39,520 capota un tabel hash real implementate în ceva de genul C sau C + +. 432 00:19:39,520 --> 00:19:41,290 Dar. 433 00:19:41,290 --> 00:19:42,760 Da. 434 00:19:42,760 --> 00:19:44,010 >> Audiența: [inaudibil]. 435 00:19:44,010 --> 00:19:46,690 436 00:19:46,690 --> 00:19:47,080 >> DAVID MALAN: Da. 437 00:19:47,080 --> 00:19:50,780 Astfel încât fiecare dintre funcțiile-am scris acum - de fapt, poți spune că o dată mai mult o 438 00:19:50,780 --> 00:19:51,480 pic mai tare? 439 00:19:51,480 --> 00:19:54,509 >> Audiența: Fiecare din funcțiile pe care ați inclus are o mult mai complet 440 00:19:54,509 --> 00:19:56,610 capacitate mare de - 441 00:19:56,610 --> 00:19:57,550 >> DAVID MALAN: Deci, asta e foarte adevărat. 442 00:19:57,550 --> 00:20:01,490 Există o mult mai mult deasupra capului că suntem Nu prea văd de concentrându-se numai pe 443 00:20:01,490 --> 00:20:03,730 dictionary.php, pe care eu doar scris. 444 00:20:03,730 --> 00:20:08,020 Prin contrast, există o întreagă interpret merge în fundal. 445 00:20:08,020 --> 00:20:12,040 Într-adevăr, atunci când am fugit acest program, se nu a fost difuzate zerouri compilate și cele 446 00:20:12,040 --> 00:20:14,290 concepute pentru procesorul meu Intel. 447 00:20:14,290 --> 00:20:19,270 Mai degrabă, acesta a fost de funcționare linie cu linie Cod PHP care arata exact 448 00:20:19,270 --> 00:20:20,350 ca și cum l-am scris. 449 00:20:20,350 --> 00:20:22,475 Și astfel fiecare dată când utilizați un limbaj interpretat, te 450 00:20:22,475 --> 00:20:23,850 de fapt, nu plătească acest preț. 451 00:20:23,850 --> 00:20:27,010 O să ia ceva timp pentru a citi top fișierul în jos, la stânga la 452 00:20:27,010 --> 00:20:30,740 dreapta, și apoi executa fiecare linie din nou și din nou. 453 00:20:30,740 --> 00:20:34,250 >> Acum, în realitate, mai ales pe internet, puteți accelera de fapt, acest proces 454 00:20:34,250 --> 00:20:38,660 de cache rezultatele ale Cod PHP fiind interpretate. 455 00:20:38,660 --> 00:20:41,640 Și care are sens pe web, deoarece dacă nu aveți un singur utilizator cum ar fi 456 00:20:41,640 --> 00:20:46,300 mine aici, dar 1.000 sau 10.000 de utilizatori, atunci Poate pentru prima dată fișierul este 457 00:20:46,300 --> 00:20:49,050 accesat este lent, dar, ulterior, este mult mai rapid. 458 00:20:49,050 --> 00:20:51,000 >> Dar asta, din nou, este un off comercial. 459 00:20:51,000 --> 00:20:53,870 Și de ceva de genul o de date de cercetare set, sau chiar ceva de mare ca 460 00:20:53,870 --> 00:20:58,330 aceasta, utilizatorii vor în cele din urmă începeți să vă simțiți că încetinirea. 461 00:20:58,330 --> 00:21:02,670 >> Deci, pe scurt, interpretat de limbi sunt foarte mult în vogă, foarte populare, și 462 00:21:02,670 --> 00:21:06,710 sincer sunt, probabil, limbile te ar trebui să ajungă de la rezolvarea problemelor 463 00:21:06,710 --> 00:21:08,200 ulterior CS50. 464 00:21:08,200 --> 00:21:12,720 Dar dau seama cat de mult esti cu adevarat ia pentru a acordat sub capota 465 00:21:12,720 --> 00:21:15,910 într-adevăr cele mai multe săptămâni trecute în hash tabele, și copaci, și încearcă, 466 00:21:15,910 --> 00:21:20,770 care sunt utilizate în cele din urmă la efectiv punerea în aplicare a lucruri, cum ar fi suport deschis, 467 00:21:20,770 --> 00:21:24,200 suport pătrat, pe care putem acum ia cu recunoștință de la sine. 468 00:21:24,200 --> 00:21:26,360 >> Deci, haideți să aruncăm o privire acum în acest context web. 469 00:21:26,360 --> 00:21:29,890 Și am menționat ultima dată că nu există o grămadă de superglobals în PHP care 470 00:21:29,890 --> 00:21:32,490 nu sunt cu adevărat relevante la linia de comandă. 471 00:21:32,490 --> 00:21:36,210 Acestea sunt mai relevante în contextul de utilizarea PHP într-un context web. 472 00:21:36,210 --> 00:21:41,220 Deci, care rulează PHP pe un server de web, în ​​scopul de pentru a genera chestii de genul HTML. 473 00:21:41,220 --> 00:21:44,540 >> Și ne-am uitat la $ _GET și $ _POST, și care este în cazul în care în mod automat utilizatorii " 474 00:21:44,540 --> 00:21:49,100 de intrare se termină pur și simplu, dacă trimiteți un constituie într-un fișier care se termină în. php pe un web 475 00:21:49,100 --> 00:21:50,460 Server ca aparatul. 476 00:21:50,460 --> 00:21:53,310 Dar să ne uităm pe scurt la $ _COOKIE Și $ _SESSION. 477 00:21:53,310 --> 00:21:56,670 >> În termeni simpli, ceea ce este un cookie ca ați înțeles în contextul 478 00:21:56,670 --> 00:21:58,220 folosind web-ul? 479 00:21:58,220 --> 00:21:59,450 >> Audiența: fișier de pe computer. 480 00:21:59,450 --> 00:21:59,920 >> DAVID MALAN: Da. 481 00:21:59,920 --> 00:22:03,500 Este un fișier de pe computerul utilizatorului plantate prin orice site-ul web 482 00:22:03,500 --> 00:22:04,410 se întâmplă pentru a vizita. 483 00:22:04,410 --> 00:22:07,334 Deci, atunci când te duci la Facebook, atunci când te duci la bankofamerica.com, atunci când te duci 484 00:22:07,334 --> 00:22:10,330 la google.com, atunci când te duci la aproape orice site-ul în lume în aceste zile, 485 00:22:10,330 --> 00:22:14,850 inclusiv cs50.net, un cookie este plantată pe computer, care este 486 00:22:14,850 --> 00:22:19,800 fie o valoare stocată în RAM în ta calculator în memoria browser-ului, sau 487 00:22:19,800 --> 00:22:22,800 , uneori, într-adevăr, un fișier stocat de pe hard disk. 488 00:22:22,800 --> 00:22:26,960 >> Și ceea ce este de obicei stocat în acel fișier nu este numele dvs. de utilizator, nu dvs. 489 00:22:26,960 --> 00:22:31,060 parola, de obicei, nu ceva sensibil decât dacă site-ul nu este atât 490 00:22:31,060 --> 00:22:35,040 bine cu securitatea lor, ci mai degrabă acesta este un mare identificator unic printre 491 00:22:35,040 --> 00:22:35,680 alte lucruri. 492 00:22:35,680 --> 00:22:38,920 Este un număr mare aleator plantate pe dvs. calculator, dar vă puteți gândi ca 493 00:22:38,920 --> 00:22:42,740 un fel de ștampilă mână virtuală ca de la un club sau un parc de distracții, care 494 00:22:42,740 --> 00:22:47,160 permite personalului, proprietarii care serviciu, să-și amintească cine ești. 495 00:22:47,160 --> 00:22:51,030 Deci, dacă numărul mare aleator este ca 12345678, deși e evident 496 00:22:51,030 --> 00:22:54,180 nu prea aleatoriu, cred că, în calitate ștampila mână că, atunci când vizitați 497 00:22:54,180 --> 00:22:57,930 facebook.com, pentru prima dată, aceștia ștampila că numărul pe mâna ta. 498 00:22:57,930 --> 00:23:01,510 Și apoi pentru că vorbești HTTP, te fiind un browser, și pentru că Facebook 499 00:23:01,510 --> 00:23:06,440 în mod evident, vorbește la fel ca un web de server, HTTP protocol spune că 500 00:23:06,440 --> 00:23:09,930 oricând vizita ulterior facebook.com, indiferent dacă este un al doilea 501 00:23:09,930 --> 00:23:13,560 mai târziu, o oră mai târziu, chiar a doua zi, atât timp cât nu au în mod explicit 502 00:23:13,560 --> 00:23:17,050 deconectat, care în mod eficient este ca spălarea mâinilor. 503 00:23:17,050 --> 00:23:20,280 HTTP spune că ar trebui să prezinte dvs. ștampila de mână de fiecare dată când 504 00:23:20,280 --> 00:23:22,020 a reveni la acel site. 505 00:23:22,020 --> 00:23:24,390 >> Ce Facebook, atunci nu este de ei uita-te la faptul că ștampila de mână și 506 00:23:24,390 --> 00:23:26,850 spun ei, oh, 123456789. 507 00:23:26,850 --> 00:23:30,260 Nu știu la prima vedere că această este David Malan în Cambridge, 508 00:23:30,260 --> 00:23:34,690 Massachusetts, dar ele pot verifica lor baze de date și spune, oh, persoana 509 00:23:34,690 --> 00:23:39,930 pe al cărui calculator am plantat 123456789 este David Malan de la Cambridge, 510 00:23:39,930 --> 00:23:40,440 Massachusetts. 511 00:23:40,440 --> 00:23:46,000 Să le arătăm că utilizatorul atunci profilul pagină sau de alimentare său News. 512 00:23:46,000 --> 00:23:49,660 >> Dar există o problemă aici în cazul în care acest lucru este modul în care într-adevăr funcționează pe web. 513 00:23:49,660 --> 00:23:51,390 Să aruncăm o privire la un exemplu rapid. 514 00:23:51,390 --> 00:23:55,190 Să mergem de fapt să spună facebook.com. 515 00:23:55,190 --> 00:23:58,130 Dar, înainte de a putea merge acolo, să mă să merg mai departe și de a deschide Chrome 516 00:23:58,130 --> 00:23:59,790 Inspector aici. 517 00:23:59,790 --> 00:24:01,140 Să mă uit la tab-ul de rețea. 518 00:24:01,140 --> 00:24:06,020 Și acum să mergem mai departe și tastați în https://facebook.com. 519 00:24:06,020 --> 00:24:09,410 Și eu fac asta pentru ca nu vedem toate aceste redirecționări și deșeuri 520 00:24:09,410 --> 00:24:10,660 timp în căutarea prin intermediul celor. 521 00:24:10,660 --> 00:24:12,690 Lasă-mă să apăsați enter. 522 00:24:12,690 --> 00:24:13,130 >> Bine. 523 00:24:13,130 --> 00:24:14,580 Vom vedea o grămadă de cereri. 524 00:24:14,580 --> 00:24:15,640 Vine Facebook. 525 00:24:15,640 --> 00:24:16,930 Există o grămadă de fișiere. 526 00:24:16,930 --> 00:24:19,290 Și aici, pe mențiune meu de ultima latenta timp, asta-i 527 00:24:19,290 --> 00:24:21,240 o mulțime de cereri HTTP. 528 00:24:21,240 --> 00:24:23,700 Dar primul este, probabil, cele mai interesante. 529 00:24:23,700 --> 00:24:26,420 >> Așa că haideți să defilați în jos de aici, și Voi mări într-o secundă. 530 00:24:26,420 --> 00:24:29,090 Acest lucru va fi un fel de o mizerie, dar să vedem. 531 00:24:29,090 --> 00:24:31,660 Facebook ne-o trimite grămadă de lucruri. 532 00:24:31,660 --> 00:24:33,490 >> Dar hei, interesant. 533 00:24:33,490 --> 00:24:37,880 Ei plantare nu unul, ci patru timbre de mână pe mână mea aici. 534 00:24:37,880 --> 00:24:40,400 Set-cookie, cookie-Set, set-cookie, set-cookie. 535 00:24:40,400 --> 00:24:44,030 Și există câteva caracteristici aici. 536 00:24:44,030 --> 00:24:46,170 Toate acestea menționăm unele fel de expirare. 537 00:24:46,170 --> 00:24:50,090 Si se pare ca Facebook este in speranta de pentru a aminti de mine până în 2015. 538 00:24:50,090 --> 00:24:53,670 Deci, asta e, probabil, la momentul la care Trebuie să ieșiți sau ei vor pur și simplu 539 00:24:53,670 --> 00:24:55,710 presupune în mod automat că sunt Nu se mai întoarce. 540 00:24:55,710 --> 00:24:57,840 Deci, asta e de fapt o decent sumă de timp. 541 00:24:57,840 --> 00:24:59,170 >> Și există câteva alte merg lucrurile pe aici. 542 00:24:59,170 --> 00:25:03,036 Acest cookie pare a fi forțat șterse de către spunând că a expirat în 1970 543 00:25:03,036 --> 00:25:04,460 înainte de a existat cookies. 544 00:25:04,460 --> 00:25:06,510 Deci, browser-ul este doar de gând să-și asume OK, e ca și cum 545 00:25:06,510 --> 00:25:07,910 spălarea ștampila pe mâini. 546 00:25:07,910 --> 00:25:11,240 >> Dar acum, când browser-ul meu face o cerere ulterioară - 547 00:25:11,240 --> 00:25:14,340 lasă-mă să merg mai departe și a face acest lucru din nou și reîncărcare. 548 00:25:14,340 --> 00:25:18,170 Acum, lasă-mă să derulați înapoi la cererea de sus și du-te în jos 549 00:25:18,170 --> 00:25:20,760 aici, solicita antete. 550 00:25:20,760 --> 00:25:21,390 Observa acest lucru. 551 00:25:21,390 --> 00:25:25,280 Deci acum sunt sub nu anteturile de răspuns, dar observați că spune antetele cerere. 552 00:25:25,280 --> 00:25:29,220 Și observați că browser-ul meu, ca parte a cererea acestuia după ce a lovit reload are 553 00:25:29,220 --> 00:25:32,780 a trimis cel puțin următoarele informații. 554 00:25:32,780 --> 00:25:34,670 Nu set-cookie, dar cookie. 555 00:25:34,670 --> 00:25:38,750 Deci, aceasta este linia, antetul HTTP, astfel de a vorbi, în cazul în care browser-ul meu este un fel 556 00:25:38,750 --> 00:25:43,340 fără a mea știe prezentarea mâna mea pentru inspecție Facebook. 557 00:25:43,340 --> 00:25:46,020 >> Deci, aceste cookie-uri pot fi folosit atunci pentru ce? 558 00:25:46,020 --> 00:25:49,420 Să-și amintească cine ești, sau să vă amintiți cum de multe ori ai fost acolo, sau 559 00:25:49,420 --> 00:25:50,280 într-adevăr ceva. 560 00:25:50,280 --> 00:25:52,742 >> Deci, aici este counter.php. 561 00:25:52,742 --> 00:25:53,780 Și lasă-mă să măriți fontul. 562 00:25:53,780 --> 00:25:58,380 Și de fiecare dată când reîncărcați această pagină, aviz este amintindu-și de câte ori 563 00:25:58,380 --> 00:25:59,250 Am fost acolo. 564 00:25:59,250 --> 00:26:00,570 Ei bine, asta nu e tot atât de impresionantă. 565 00:26:00,570 --> 00:26:03,140 Să închidem doar că filă, și acum să ne întoarcem la 566 00:26:03,140 --> 00:26:07,860 http://localhost/counter.php. 567 00:26:07,860 --> 00:26:08,970 >> Oh, asta e interesant. 568 00:26:08,970 --> 00:26:10,960 Ea încă amintit, chiar deși am închis fila. 569 00:26:10,960 --> 00:26:14,010 Și sincer, dacă am închide browserul, dacă puse în aplicare în mod corect, am 570 00:26:14,010 --> 00:26:18,950 ar putea aminti, totuși, că acest utilizator este de care el sau ea a fost prima dată, și 571 00:26:18,950 --> 00:26:22,840 numai o dată ce am intra în meniul Chrome, care aici este aici, și du-te la 572 00:26:22,840 --> 00:26:25,990 Istorie, și faceți clic pe Ștergeți datele de navigare, ca unii dintre voi ar putea avea în 573 00:26:25,990 --> 00:26:33,050 din trecut, doar atunci va cookie-urile de fapt, să fie șterse în timpul web 574 00:26:33,050 --> 00:26:33,970 dezvoltare. 575 00:26:33,970 --> 00:26:35,340 >> Deci, dacă vom merge - 576 00:26:35,340 --> 00:26:37,080 hai aproape gedit aici. 577 00:26:37,080 --> 00:26:38,910 Și dacă mergem acum la acest dosar. 578 00:26:38,910 --> 00:26:44,210 Lasă-mă să intru în nostru vhosts / localhost / publice, și lasă-mă să fac 579 00:26:44,210 --> 00:26:46,340 counter.php. 580 00:26:46,340 --> 00:26:48,350 Observați că aceasta este o destul de program simplu. 581 00:26:48,350 --> 00:26:50,250 Este un site destul de simplu. 582 00:26:50,250 --> 00:26:51,770 >> Deci, partea de sus a fișierului este doar comentarii. 583 00:26:51,770 --> 00:26:54,930 Dar aici este o nouă linie pe care s-ar putea s-au văzut deja în set-p șapte, 584 00:26:54,930 --> 00:26:56,000 session_start (). 585 00:26:56,000 --> 00:27:00,380 Aceasta este o linie de cod PHP care spune, în esență, serverul de web, face 586 00:27:00,380 --> 00:27:03,400 Asigurați-vă că ștampila mâini și să facă vă că pentru a verifica timbre de mână. 587 00:27:03,400 --> 00:27:06,810 Asta e tot ce face linie, și-l face tot de acest proces pentru noi. 588 00:27:06,810 --> 00:27:09,510 Apoi observa tocmai am două ramuri aici. 589 00:27:09,510 --> 00:27:14,150 Dacă cheia contra interiorul acestui variabilă globală special numit 590 00:27:14,150 --> 00:27:18,010 $ _SESSION Este stabilit - cu alte cuvinte, în cazul în care există o anumită valoare acolo - 591 00:27:18,010 --> 00:27:22,440 să-l și păstrați-l într-un local, variabilă numită $ contra. 592 00:27:22,440 --> 00:27:27,000 Altfel, să atribuie $ counter valoarea implicită a 0. 593 00:27:27,000 --> 00:27:30,320 >> Acum, aici e un aspect al PHP care este atât o binecuvântare și un blestem. 594 00:27:30,320 --> 00:27:32,080 PHP este un pic neglijent. 595 00:27:32,080 --> 00:27:35,160 Deci, în timp ce în C, ceea ce ar fi domeniul de aplicare a contra au fost 596 00:27:35,160 --> 00:27:36,725 ori aici sau aici? 597 00:27:36,725 --> 00:27:39,270 598 00:27:39,270 --> 00:27:41,690 >> Ar fi fost limitat la aceste acolade. 599 00:27:41,690 --> 00:27:42,090 Ghici ce? 600 00:27:42,090 --> 00:27:46,920 În PHP, ea exista chiar în afara celor acolade, aici, și aici, 601 00:27:46,920 --> 00:27:49,120 și aici, și aici, și chiar și în jos de mai jos. 602 00:27:49,120 --> 00:27:52,400 Deci, eu spun acest lucru este o binecuvântare în sensul că nu trebuie să ne gândim cum 603 00:27:52,400 --> 00:27:54,070 tare așa cum am făcut acum câteva săptămâni. 604 00:27:54,070 --> 00:27:56,880 Dar este, de asemenea, un pic de un blestem în care indiferent de locul unde se utilizează o variabilă în 605 00:27:56,880 --> 00:28:00,020 PHP, cel puțin într-un program de genul asta, la, este accesibil la nivel global pentru 606 00:28:00,020 --> 00:28:01,170 mai bine sau pentru rău. 607 00:28:01,170 --> 00:28:06,130 Deci, va trebui să țină cont de faptul că acum variabilele nu poate fi nedefinit. 608 00:28:06,130 --> 00:28:07,640 S-ar putea le-au definit în altă parte. 609 00:28:07,640 --> 00:28:09,460 >> Dar ceea ce am de gând să fac în cele din urmă? 610 00:28:09,460 --> 00:28:13,160 Am de gând pentru a stoca în interiorul că la nivel mondial variabilă ca o valoare a 611 00:28:13,160 --> 00:28:17,060 contra cheie rezultatul face contra plus 1. 612 00:28:17,060 --> 00:28:18,910 Deci, aceasta este doar aritmetica care face 613 00:28:18,910 --> 00:28:20,590 incrementare de care contra. 614 00:28:20,590 --> 00:28:24,850 Și faptul că eu sunt stocarea că Valoarea înapoi aici înseamnă a 615 00:28:24,850 --> 00:28:29,970 actualiza, în esență, baza de date a amintiți-vă că 123456789 utilizator a fost 616 00:28:29,970 --> 00:28:31,010 aici de două ori. 617 00:28:31,010 --> 00:28:33,780 Și când o fac din nou, data viitoare am reîncărca pagina, se va verifica 618 00:28:33,780 --> 00:28:36,710 ștampila mâna mea și spune, oh, 123456789 utilizatorul are acum 619 00:28:36,710 --> 00:28:38,410 aici de trei ori. 620 00:28:38,410 --> 00:28:43,390 >> Și ce PHP și limbi similare fac pentru noi este ca ei sunt imaginind 621 00:28:43,390 --> 00:28:47,720 cum și unde și pentru cât timp pentru a stoca valori în această special 622 00:28:47,720 --> 00:28:48,830 superglobale. 623 00:28:48,830 --> 00:28:52,750 Și acest superglobale data viitoare am vizitați pagina este un fel de magic 624 00:28:52,750 --> 00:28:57,440 pre-populate, umplut cu valori care au fost acolo ultima dată când ați vizitat, 625 00:28:57,440 --> 00:29:02,310 dacă asta a fost acum un al doilea, o săptămână acum, sau în 2013 și suntem acum vorbim 626 00:29:02,310 --> 00:29:03,790 despre 2015. 627 00:29:03,790 --> 00:29:07,600 PHP si serverul de web aveti grija de toate astea pentru tine. 628 00:29:07,600 --> 00:29:08,850 >> Audiența: [inaudibil]. 629 00:29:08,850 --> 00:29:11,900 630 00:29:11,900 --> 00:29:15,760 >> DAVID MALAN: Variabile în PHP sunt în esență, întotdeauna la nivel mondial, dacă nu 631 00:29:15,760 --> 00:29:18,400 le declare în interiorul unei funcții, și apoi sunt locale să 632 00:29:18,400 --> 00:29:19,420 numai funcția. 633 00:29:19,420 --> 00:29:22,300 Dar, pentru că eu nu am scris nici o funcții, acestea sunt acum în mod eficient 634 00:29:22,300 --> 00:29:25,090 la nivel mondial de-a lungul întregului dosarul meu aici. 635 00:29:25,090 --> 00:29:26,040 >> Audiența: Există o modalitate pentru a le face locale? 636 00:29:26,040 --> 00:29:28,470 >> DAVID MALAN: Există vreo modalitate de a le face locale? 637 00:29:28,470 --> 00:29:30,680 Numai de ambalaj-le în funcții. 638 00:29:30,680 --> 00:29:32,790 Care în cea mai recentă versiune a PHP, puteți face acest lucru cu 639 00:29:32,790 --> 00:29:34,130 o funcție anonim. 640 00:29:34,130 --> 00:29:35,930 Dar mai mult pe faptul că, în contextul JavaScript. 641 00:29:35,930 --> 00:29:37,260 Dar răspunsul scurt este nu. 642 00:29:37,260 --> 00:29:40,888 Un răspuns mai este da. 643 00:29:40,888 --> 00:29:42,380 Frumos. 644 00:29:42,380 --> 00:29:43,380 Bună întrebare test. 645 00:29:43,380 --> 00:29:43,930 Bine. 646 00:29:43,930 --> 00:29:47,760 >> Deci, în cele din urmă, pagina în sine este de fapt destul de simplu. 647 00:29:47,760 --> 00:29:51,470 Observați că odată ce am ieși din modul PHP, rechemare că toate aceste lucruri în jos 648 00:29:51,470 --> 00:29:53,700 de mai jos este doar de gând să se scuipe de prime la browser-ul. 649 00:29:53,700 --> 00:29:57,050 Ceea ce este bine, pentru că eu nu vreau să trimiteți utilizatorul unele HTML, dar eu nu vreau 650 00:29:57,050 --> 00:29:59,140 pentru a actualiza în mod dinamic ca HTML. 651 00:29:59,140 --> 00:30:03,930 Și un mod în care pot face acest lucru este de a sorta a scădea foarte repede înapoi în PHP 652 00:30:03,930 --> 00:30:07,730 Mod, utilizare suport deschis semn de întrebare semnul egal, iar apoi de ieșire valoarea 653 00:30:07,730 --> 00:30:08,650 din contra. 654 00:30:08,650 --> 00:30:12,360 >> Sau în cazul în care acest lucru pare un pic criptic, acest semnul egal este de fapt doar o parte 655 00:30:12,360 --> 00:30:16,190 zahăr sintactic pentru această printf ($ contor). 656 00:30:16,190 --> 00:30:19,160 Dar, sincer, asta e doar un pic urât și un pic de enervant de tip. 657 00:30:19,160 --> 00:30:23,660 Deci, PHP foarte frumos oferă această caracteristică în cazul în care puteți să-l spun mai mult 658 00:30:23,660 --> 00:30:25,450 succint în același mod. 659 00:30:25,450 --> 00:30:26,940 >> Deci, ce se întâmplă sub capota? 660 00:30:26,940 --> 00:30:31,210 Să ne uităm rapid la rețea Fila aici pentru counter.php. 661 00:30:31,210 --> 00:30:35,090 Și lasă-mă să merg mai departe și în primul rând să ștergeți cookie-urile. 662 00:30:35,090 --> 00:30:38,670 Să datele de navigare clare din la începutul timpului. 663 00:30:38,670 --> 00:30:39,680 Acum, să ne întoarcem aici. 664 00:30:39,680 --> 00:30:41,340 Acum, haideți să reîncărcați pagina. 665 00:30:41,340 --> 00:30:42,170 Și m-am întors de la zero. 666 00:30:42,170 --> 00:30:44,810 Deoarece ștampila mea mână a fost spălat, Primesc acum un nou cookie. 667 00:30:44,810 --> 00:30:48,780 >> Într-adevăr, dacă mă uit la tab-ul de rețea și uita-te la anteturile de răspuns, o notificare 668 00:30:48,780 --> 00:30:51,960 că aparatul mă trimite un cookie al cărui nume este oarecum 669 00:30:51,960 --> 00:30:55,820 arbitrar, ci un fel de rezonabil, PHPSESSID. 670 00:30:55,820 --> 00:30:58,440 Și mă trimite acest adevăr număr aleator mare. 671 00:30:58,440 --> 00:30:59,440 Nu e destul de un număr. 672 00:30:59,440 --> 00:31:00,390 Nu e destul de hexazecimal. 673 00:31:00,390 --> 00:31:03,600 E un fel de șir alfanumeric, dar probabil că e aleator. 674 00:31:03,600 --> 00:31:06,830 Și că este ștampila mână, astfel încât să spune că mă refer la. 675 00:31:06,830 --> 00:31:11,960 >> Între timp, dacă faceți clic pe reîncărcare și apoi uita-te la această a doua linie pentru a doua mea 676 00:31:11,960 --> 00:31:17,600 solicitare, aviz acum că cererea mea anteturile includ PHPSESSID este egal cu aceasta, 677 00:31:17,600 --> 00:31:19,390 nu set-cookie, dar doar cookie. 678 00:31:19,390 --> 00:31:22,950 Și asta e prezentarea a browserului meu de timbru mâna mea. 679 00:31:22,950 --> 00:31:28,820 >> Deci, acum ca un teaser, și vom vorbi mai mult despre acest lucru într-o săptămână sau cam asa ceva, dar 680 00:31:28,820 --> 00:31:31,590 în ce mod acest lucru face , contul vulnerabil dvs. Facebook 681 00:31:31,590 --> 00:31:34,137 vulnerabile, și alte astfel de conturi vulnerabil? 682 00:31:34,137 --> 00:31:35,510 >> Audiența: Dacă cineva are cookie-ul. 683 00:31:35,510 --> 00:31:36,750 >> DAVID MALAN: Da, în cazul în care cineva are cookie-ul. 684 00:31:36,750 --> 00:31:39,920 Vreau să spun cu adevărat, la fel ca unii dintre voi ar fi încercat, la fel ca un club sau un 685 00:31:39,920 --> 00:31:44,030 parc de distracții, dacă încerci ceva ca aceasta a copia ștampila, deși 686 00:31:44,030 --> 00:31:47,560 înapoi pe mâna altei persoane, și atunci el sau ea o prezintă ca 687 00:31:47,560 --> 00:31:53,250 propria lor, în cazul în care de fapt nu arata identice, 123456789, atunci web 688 00:31:53,250 --> 00:31:57,980 server este aparent doar de gând să încredere că utilizatorul este de tine. 689 00:31:57,980 --> 00:32:01,450 >> Și acest lucru este într-adevăr un fundamental amenințare orice dată când folosesc cookie-uri 690 00:32:01,450 --> 00:32:05,420 pentru că dacă cineva doar Parodii astfel de vorbesc cookie-ul, seama ce se 691 00:32:05,420 --> 00:32:08,660 este, fie prin copierea cu adevărat aceasta uitandu-se la computer 692 00:32:08,660 --> 00:32:09,890 și fiind ca, OK. 693 00:32:09,890 --> 00:32:14,520 Cookie lui David este JJ3JIK și așa mai departe, și apoi acestea sunt destul de inteligent să știe 694 00:32:14,520 --> 00:32:18,080 cum să fel de a trimite manual care cookie dintr-un browser sau dintr-o 695 00:32:18,080 --> 00:32:22,350 Programul ei scriu, ei ar putea total conectați la un site web ca tine. 696 00:32:22,350 --> 00:32:28,560 Nu este așa de greu să se prefacă a fi altcineva dacă nu ne revizuim p-set 697 00:32:28,560 --> 00:32:30,790 doi, care a introdus ce? 698 00:32:30,790 --> 00:32:32,065 >> Audiența: Criptografie. 699 00:32:32,065 --> 00:32:33,860 >> DAVID MALAN: Un pic bit de criptografie. 700 00:32:33,860 --> 00:32:36,550 Criptografie simplu, cel puțin în ediția standard, dar Crypto 701 00:32:36,550 --> 00:32:36,870 cu toate acestea. 702 00:32:36,870 --> 00:32:37,410 mai puțin. 703 00:32:37,410 --> 00:32:41,440 Deci, se dovedește, dacă cripta toate aceste antete folosesc ceva care vă 704 00:32:41,440 --> 00:32:48,770 s-ar putea știu acum mai familiar ca SSL, secure socket layer, sau https:// URL-uri, 705 00:32:48,770 --> 00:32:51,890 atunci toate aceste lucruri am fost uite la sunt de fapt criptate, 706 00:32:51,890 --> 00:32:54,800 ceea ce înseamnă că e ca tine nu pot citi ștampila de mână. 707 00:32:54,800 --> 00:32:59,350 Numai facebook.com poate, sau google.com, sau, în acest caz, aparatul poate 708 00:32:59,350 --> 00:33:00,550 citit că ștampila mână. 709 00:33:00,550 --> 00:33:04,020 >> În mod tragic, deși, și, din nou, acest lucru este prea potrivit cu chestii NSA 710 00:33:04,020 --> 00:33:06,410 de întârziere, chiar SSL este spart. 711 00:33:06,410 --> 00:33:09,850 Și nu este de fapt atât de greu pentru a sparge chiar că de criptare. 712 00:33:09,850 --> 00:33:12,040 Nu atât de mult de cracare criptare, dar prin pacalirea 713 00:33:12,040 --> 00:33:15,720 browser-ul în decriptarea datele prematur. 714 00:33:15,720 --> 00:33:17,880 Dar, din nou, o să te tachineze cu care, înainte de mult timp. 715 00:33:17,880 --> 00:33:21,242 Pentru moment, fie doar frică. 716 00:33:21,242 --> 00:33:23,070 Este tragic fel de adevărat. 717 00:33:23,070 --> 00:33:23,760 >> Bine. 718 00:33:23,760 --> 00:33:27,910 Deci, în cazul în care face acest lucru acum ne lasă? 719 00:33:27,910 --> 00:33:29,010 Ei bine, hai să facem asta. 720 00:33:29,010 --> 00:33:31,790 Să mergem mai departe și să ia o rapidă teaser înainte de a lua o pauză. 721 00:33:31,790 --> 00:33:33,790 Și cred că vom zabovi un pic mai mult azi, dar vom arunca cu capul în 722 00:33:33,790 --> 00:33:37,850 , care a ceva nou si sexy va vă deschide apetitul pentru mai mult. 723 00:33:37,850 --> 00:33:38,950 Deci, asta e teaser. 724 00:33:38,950 --> 00:33:41,520 >> Deci SQL, am început să vorbim despre foarte scurt ultima dată. 725 00:33:41,520 --> 00:33:44,670 Veți obține cu adevărat mainile murdare cu o parte din ea în set-p șapte. 726 00:33:44,670 --> 00:33:46,480 Și în termeni de nespecialist, ceea ce face SQL - 727 00:33:46,480 --> 00:33:47,110 S-Q-L - 728 00:33:47,110 --> 00:33:49,850 face pentru tine? 729 00:33:49,850 --> 00:33:50,310 Ce este asta? 730 00:33:50,310 --> 00:33:51,546 Da. 731 00:33:51,546 --> 00:33:53,240 >> AUDIENTA: Sa datele pe care le acces. 732 00:33:53,240 --> 00:33:53,360 >> DAVID MALAN: Da. 733 00:33:53,360 --> 00:33:55,120 Se lasa datele de care aveți acces de într-o bază de date. 734 00:33:55,120 --> 00:33:56,710 Structured Query Language. 735 00:33:56,710 --> 00:33:59,890 Și acest lucru este în esență o limbaj de programare. 736 00:33:59,890 --> 00:34:03,400 Există caracteristici ale acestuia, care nu vom folosi, chiar și în clasă. 737 00:34:03,400 --> 00:34:04,710 Dar vă poate în mod eficient defini funcții. 738 00:34:04,710 --> 00:34:06,870 Se numesc stocate procedurilor în SQL. 739 00:34:06,870 --> 00:34:09,860 Dar vom ține destul de simplu și doar să-l utilizați pentru anumite operații de bază 740 00:34:09,860 --> 00:34:14,320 cum ar fi selectarea de date, introducerea datelor, actualizarea datelor, și ștergerea datelor. 741 00:34:14,320 --> 00:34:17,400 >> Și vă puteți gândi într-adevăr de o bază de date, cum ar fi o bază de date SQL, ca doar 742 00:34:17,400 --> 00:34:18,800 fiind Microsoft Excel. 743 00:34:18,800 --> 00:34:21,989 Deoarece SQL se referă la o relațională baza de date, unde 744 00:34:21,989 --> 00:34:23,480 ceea ce înseamnă doar tabele. 745 00:34:23,480 --> 00:34:24,739 Rânduri și coloane. 746 00:34:24,739 --> 00:34:27,929 Deci, tot ce se poate pune într-o foaie de calcul cum ar fi acest lucru sau Google Docs, 747 00:34:27,929 --> 00:34:32,460 ai putea pune într-o bază de date SQL declarându-un tabel. 748 00:34:32,460 --> 00:34:34,800 >> Acum, cum a face tu de fapt, accesați aceste informații? 749 00:34:34,800 --> 00:34:38,239 Ei bine, cu comenzi sau interogări, cum ar fi acest lucru. 750 00:34:38,239 --> 00:34:40,199 SELECT, INSERT, UPDATE, și DELETE. 751 00:34:40,199 --> 00:34:44,489 Și pentru cea mai mare parte, acestea sunt patru numai ingrediente de care aveți nevoie pentru a 752 00:34:44,489 --> 00:34:47,370 face ceva destul de puternic în problema stabilit șapte. 753 00:34:47,370 --> 00:34:49,940 >> Acum, înapoi în a doua zi, ai face de fapt interacționează cu o bază de date într-un 754 00:34:49,940 --> 00:34:52,730 fereastră de terminal alb-negru la un prompt intermitent ca aceasta. 755 00:34:52,730 --> 00:34:56,370 Și baza de date nu mai avem pe aparat este numit MySQL, care este 756 00:34:56,370 --> 00:34:58,560 motor de baze de date gratuit și open source. 757 00:34:58,560 --> 00:35:02,240 Dacă Google și citit Wikipedia articol, veți ști că numele este 758 00:35:02,240 --> 00:35:05,060 un pic de tranziție pentru unele versiuni de Linux. 759 00:35:05,060 --> 00:35:10,460 Baza de date Maria este de fapt o furculiță ca să spunem așa de MySQL. 760 00:35:10,460 --> 00:35:12,740 >> Pe scurt, Oracle a cumparat MySQL. 761 00:35:12,740 --> 00:35:13,870 Oracle o companie mare. 762 00:35:13,870 --> 00:35:17,010 Oamenii au fost îngrijorat de faptul că acesta ar fi nu mai rămâne la fel de open source, 763 00:35:17,010 --> 00:35:20,930 astfel încât aceasta este doar o copie de MySQL care este încă liber, încă open source, și 764 00:35:20,930 --> 00:35:23,550 instalat în Fedora Linux implicit. 765 00:35:23,550 --> 00:35:26,130 >> Dar aceasta este un fel de durere în gât să se familiarizeze cu o 766 00:35:26,130 --> 00:35:27,310 Baza de date în acest fel. 767 00:35:27,310 --> 00:35:30,560 Deci, am inclus în aparat CS50 un instrument gratuit open source numit 768 00:35:30,560 --> 00:35:31,700 phpMyAdmin. 769 00:35:31,700 --> 00:35:33,940 Doar o coincidență faptul că este scris în PHP. 770 00:35:33,940 --> 00:35:36,450 Nu e nici un fundamental nevoie de PHP aici. 771 00:35:36,450 --> 00:35:40,090 Dar acest lucru este doar un instrument bazat pe web care am descărcat gratuit, instalat în 772 00:35:40,090 --> 00:35:43,850 aparatul, care ne permite să avem o interfață grafică de utilizator cu care 773 00:35:43,850 --> 00:35:48,610 pentru a explora șapte baza de date set-p cu care să creeze noi baze de date, 774 00:35:48,610 --> 00:35:51,980 spune pentru proiectul dumneavoastră final propriu, dacă te-ai fi cum ar fi, și în cele din urmă a crea 775 00:35:51,980 --> 00:35:55,900 site-uri web dinamice, cum ar fi CS50 Finanțe care vă permit să interogare de date și 776 00:35:55,900 --> 00:35:58,140 Actualizati-va datele dinamic. 777 00:35:58,140 --> 00:36:01,420 >> Nu sunteți de gând să aibă de a utiliza doar un fișier text simplu sau CSV. 778 00:36:01,420 --> 00:36:05,950 Puteți folosi de fapt, o bază de date inteligente program, astfel încât să puteți executa mai mult 779 00:36:05,950 --> 00:36:10,240 interogări sofisticate decât doar de lectură prin tot liniar. 780 00:36:10,240 --> 00:36:14,150 >> Deci, de exemplu, aceasta este ceea ce ne da ai scos din cutie pentru set-p șapte. 781 00:36:14,150 --> 00:36:18,280 Acesta este un tabel cu cel puțin aparent trei coloane, dintre care unul este 782 00:36:18,280 --> 00:36:21,450 numele de utilizator, dintre care unul este hash, și celălalt dintre care este ID. 783 00:36:21,450 --> 00:36:26,200 >> Dar cel mai interesant lucru, și doar pentru a tachineze un singur gând aici, numele de utilizator 784 00:36:26,200 --> 00:36:29,270 Este probabil deja unic, corect? 785 00:36:29,270 --> 00:36:31,190 Vreau să spun, cel mai orice site-ul, în cazul în care aveți un nume de utilizator, acolo 786 00:36:31,190 --> 00:36:32,370 nu pot fi două Caesars. 787 00:36:32,370 --> 00:36:33,440 Nu pot fi două Malans. 788 00:36:33,440 --> 00:36:34,950 Nu pot fi două jharvards. 789 00:36:34,950 --> 00:36:35,600 Unic sale. 790 00:36:35,600 --> 00:36:38,610 În caz contrar, ei nu știu ce jharvard este de fapt. 791 00:36:38,610 --> 00:36:42,710 Deci, ceea ce ar putea fi motivația de asemenea, având o a treia coloană din stânga 792 00:36:42,710 --> 00:36:46,970 acolo numit ID, ceea ce arata ca un număr care este la fel de unic? 793 00:36:46,970 --> 00:36:51,300 Se simte un pic redundant la mine la prima vedere. 794 00:36:51,300 --> 00:36:54,910 De ce s-ar putea fi convingătoare pentru a avea nu numai nume de utilizator unic, 795 00:36:54,910 --> 00:36:56,837 dar, de asemenea, numere unice? 796 00:36:56,837 --> 00:36:59,460 >> Audiența: Ar putea avea aceeași parolă. 797 00:36:59,460 --> 00:37:01,720 >> DAVID MALAN: Oamenii ar putea avea aceeași parolă, sigur. 798 00:37:01,720 --> 00:37:03,900 Care ar putea întâmpla absolut. 799 00:37:03,900 --> 00:37:08,270 Dar dacă au acest nume de utilizator unic, I ar argumenta că nu are într-adevăr 800 00:37:08,270 --> 00:37:11,630 chestiune, pentru că în cazul în care tipul de la lor numele de utilizator, am nevoie doar pentru a verifica lor 801 00:37:11,630 --> 00:37:15,060 parola, hash lor cu privire la aceasta. 802 00:37:15,060 --> 00:37:15,970 De ce altceva? 803 00:37:15,970 --> 00:37:17,950 >> Audiența: Mai repede căutare. 804 00:37:17,950 --> 00:37:18,680 >> DAVID MALAN: Mai repede căutare. 805 00:37:18,680 --> 00:37:19,548 De ce? 806 00:37:19,548 --> 00:37:21,460 >> Audiența: ID-ul este doar unul. 807 00:37:21,460 --> 00:37:24,040 >> DAVID MALAN: ID-ul este doar un personaj, sau pentru a fi mai precis, acesta este un număr, 808 00:37:24,040 --> 00:37:26,910 așa că, probabil, 32 de biți sau ceva de genul asta. 809 00:37:26,910 --> 00:37:30,270 În timp ce numele de utilizator, aparent Jason Up Hirschhorn acolo este un fel de 810 00:37:30,270 --> 00:37:33,900 ridicol de lung, și se va ia-mă o mult mai mult timp pentru a string 811 00:37:33,900 --> 00:37:40,910 compara H-I-R-S-C-H-H-O-R-N, și poate o / 0 sau ceva de genul că, în vederea 812 00:37:40,910 --> 00:37:45,100 să se uite în sus Jason, spre deosebire de doar spune da-mi numarul de utilizator două. 813 00:37:45,100 --> 00:37:46,510 Asta e 32 de biți. 814 00:37:46,510 --> 00:37:48,550 Este un singur INT care va trebui să compare. 815 00:37:48,550 --> 00:37:52,150 Și într-adevăr, asta este exact de ce bazele de date au tendința de a atribui ID-uri unice pentru a 816 00:37:52,150 --> 00:37:53,710 rânduri în ele. 817 00:37:53,710 --> 00:37:56,280 >> Acum, ce alte tipuri de date sunt acolo în afară de INT și aparent 818 00:37:56,280 --> 00:37:57,160 siruri de caractere, cum ar fi aceasta? 819 00:37:57,160 --> 00:37:59,700 Ei bine, pentru a fi mai buna, Baze de date SQL, cum ar fi 820 00:37:59,700 --> 00:38:02,060 MySQL, au câmpuri CHAR. 821 00:38:02,060 --> 00:38:05,320 Și char un pic înșelător nu este un singur CHAR. 822 00:38:05,320 --> 00:38:10,290 Un câmp CHAR într-o bază de date MySQL este unul sau mai multe caractere, dar este o 823 00:38:10,290 --> 00:38:11,780 număr fix de caractere. 824 00:38:11,780 --> 00:38:15,710 >> Deci, de exemplu, dacă mă duc pe la phpMyAdmin cum este posibil să aveți deja, sau 825 00:38:15,710 --> 00:38:21,340 in curand se va stabili o problemă de șapte, și mă duc la baza mea de date, și doar pentru distracție, 826 00:38:21,340 --> 00:38:25,700 să creeze un nou tabel numit testa cu doar două coloane. 827 00:38:25,700 --> 00:38:27,160 Voi apoi faceți clic pe Salt. 828 00:38:27,160 --> 00:38:30,070 Și acest lucru va deveni destul de familiar, mai ales pe măsură ce se joace 829 00:38:30,070 --> 00:38:31,130 în jurul pe cont propriu. 830 00:38:31,130 --> 00:38:34,140 Aici s-ar putea de tip ID-ul pentru a crea un nou tabel de tip INT. 831 00:38:34,140 --> 00:38:37,770 Dar aici s-ar putea de tip nume de utilizator pentru a recrea masa mai devreme. 832 00:38:37,770 --> 00:38:40,700 Și observați Am o grămadă de tipuri de a alege de la. 833 00:38:40,700 --> 00:38:43,610 >> Și acest lucru este de asemenea motivul pentru phpMyAdmin este un fel de frumos. 834 00:38:43,610 --> 00:38:46,770 Este un fel de auto-predare în care vă poate doar un fel de punct și faceți clic, și 835 00:38:46,770 --> 00:38:50,730 uita-te la meniurile derulante, și deduce din că ceea ce puteri SQL vă oferă. 836 00:38:50,730 --> 00:38:54,090 >> Și într-adevăr, dacă aleg CHAR, apoi am Trebuie să specificați durata, sau cum 837 00:38:54,090 --> 00:38:55,940 multe valori, cât de multe caractere. 838 00:38:55,940 --> 00:39:00,090 Valorile astfel foarte frecvente sunt lucruri cum ar fi 255, dar că este un pic cam lung. 839 00:39:00,090 --> 00:39:02,250 De obicei este de opt pentru un nume de utilizator. 840 00:39:02,250 --> 00:39:03,590 Dar asta e un pic mai mic in aceste zile. 841 00:39:03,590 --> 00:39:05,430 Deci, aceasta este o decizie de design. 842 00:39:05,430 --> 00:39:08,630 Este de 8 caractere max, 32, 255, 1000? 843 00:39:08,630 --> 00:39:09,830 Este într-adevăr până la tine. 844 00:39:09,830 --> 00:39:12,350 Dar un câmp CHAR este un număr fix. 845 00:39:12,350 --> 00:39:16,420 Asa ca alege prea puține și ești un fel de înșurubată dacă vrei un nume de utilizator mai mult. 846 00:39:16,420 --> 00:39:19,132 Alege prea multe și ceea ce este dezavantaj? 847 00:39:19,132 --> 00:39:20,820 >> Audiența: [inaudibil]. 848 00:39:20,820 --> 00:39:21,620 >> DAVID MALAN: Este risipitoare. 849 00:39:21,620 --> 00:39:24,835 La fel ca în C, în cazul în care aveți o mai mare bucată de memorie de care aveți nevoie, esti 850 00:39:24,835 --> 00:39:27,190 doar pierdem timpul și pierdem spațiu. 851 00:39:27,190 --> 00:39:31,430 Deci, ca o alternativă, există VARCHAR, care rezolvă această problemă prin 852 00:39:31,430 --> 00:39:36,390 tratarea lungime nu ca o lungime fixă, ci ca o lungime maximă, și cu ajutorul unui 853 00:39:36,390 --> 00:39:40,990 număr variabil de caractere, care apoi tinde să folosească numai ca de multe caractere ca tine 854 00:39:40,990 --> 00:39:42,710 de fapt nevoie. 855 00:39:42,710 --> 00:39:43,670 Asta sună perfect. 856 00:39:43,670 --> 00:39:45,640 >> De ce nu ne scapa de Date CHAR tip atunci? 857 00:39:45,640 --> 00:39:48,500 Ceea ce ar putea fi dezavantaj al folosind VARCHARs, care sună 858 00:39:48,500 --> 00:39:51,644 ca este o victorie frumoasă? 859 00:39:51,644 --> 00:39:52,596 Da? 860 00:39:52,596 --> 00:39:53,846 >> Audiența: [inaudibil]. 861 00:39:53,846 --> 00:39:57,360 862 00:39:57,360 --> 00:39:57,790 >> DAVID MALAN: OK, bine. 863 00:39:57,790 --> 00:40:01,101 Deci, dacă toate datele este aceeași lungimea, ceea ce este preocuparea? 864 00:40:01,101 --> 00:40:05,250 >> Audiența: Pentru că pierzi Datele de spunându-le pe toate. 865 00:40:05,250 --> 00:40:09,060 >> DAVID MALAN: Deci, dacă toate datele sunt aceeași lungime, deși, aș argumenta 866 00:40:09,060 --> 00:40:12,300 specificând că o lungime maximă pe VARCHAR nu este diferită de 867 00:40:12,300 --> 00:40:16,070 specificând o lungime fixă ​​pe CHAR dacă știți că numărul în avans. 868 00:40:16,070 --> 00:40:19,500 Dar există într-adevăr, și eu voi un fel de extrage din acest răspuns realitatea 869 00:40:19,500 --> 00:40:22,610 că există încă un maxim, care ar putea fi enervant, mai ales dacă 870 00:40:22,610 --> 00:40:25,920 confruntați cu numele unei persoane care este neobisnuit de mult timp că nu ai făcut- 871 00:40:25,920 --> 00:40:26,860 anticipa. 872 00:40:26,860 --> 00:40:31,420 Și este, de asemenea, un pic mai puțin eficient pentru a căuta de fapt, pe VARCHARs ca 873 00:40:31,420 --> 00:40:35,620 spre deosebire de caractere de căutare, mai ales pentru mese lungi, care au o mulțime și 874 00:40:35,620 --> 00:40:36,510 o mulțime de date. 875 00:40:36,510 --> 00:40:40,060 Deci aici, tematic este din nou nici o alegere evidentă. 876 00:40:40,060 --> 00:40:42,870 >> Deci, doar pentru a vă oferi un sentiment de alte tipuri de date care ar putea fi de interes 877 00:40:42,870 --> 00:40:45,400 fie pentru set-p șapte sau în viitor, nu e INT. 878 00:40:45,400 --> 00:40:47,270 Există BIGINT, care este ca de mult timp. 879 00:40:47,270 --> 00:40:48,880 Acesta tinde să fie 64 de biți. 880 00:40:48,880 --> 00:40:51,640 Există DECIMAL, pe care le veți vedea în setul problemă, care este o mult 881 00:40:51,640 --> 00:40:55,300 răspuns curat la problemele pe care le întâlnit cu flotor și plutitoare 882 00:40:55,300 --> 00:40:55,980 punctul imprecizie. 883 00:40:55,980 --> 00:40:57,390 Și apoi există DATETIME. 884 00:40:57,390 --> 00:41:01,530 Există literalmente un tip de date care are să arate ca un an, o lună, o zi, 885 00:41:01,530 --> 00:41:03,730 și o oră, minut, și în al doilea rând. 886 00:41:03,730 --> 00:41:07,470 >> Dar au, de asemenea, baze de date SQL lucruri pe care le vom numi indici. 887 00:41:07,470 --> 00:41:11,630 Și un indice este ceva care vă specifica atunci când creați tabelul de 888 00:41:11,630 --> 00:41:15,720 face căutări și alte operațiuni mai eficient. 889 00:41:15,720 --> 00:41:18,550 În mod specific, există ceva numit indicele principal pe care ai putea 890 00:41:18,550 --> 00:41:19,440 declară după cum urmează. 891 00:41:19,440 --> 00:41:22,330 >> Am făcut acest lucru pentru tine, cu masă de utilizatori noi da. 892 00:41:22,330 --> 00:41:26,160 Dar observați dacă am fost recrearea manual tabelul utilizatorilor aici oferindu- 893 00:41:26,160 --> 00:41:27,110 un nume de utilizatori. 894 00:41:27,110 --> 00:41:28,125 Am specificat deja de identitate. 895 00:41:28,125 --> 00:41:29,330 Am specificat INT. 896 00:41:29,330 --> 00:41:32,000 Am specificat numele de utilizator cu maxim 32 de caractere. 897 00:41:32,000 --> 00:41:36,140 Dar dacă ținem defilare în acest destul de fereastră larg, notificare e un 898 00:41:36,140 --> 00:41:38,260 grămadă de alte lucruri pe care le poate specifica. 899 00:41:38,260 --> 00:41:40,950 >> O, eu pot specifica atribute ca și, știi ce, acest 900 00:41:40,950 --> 00:41:42,190 INT ar trebui să fie nesemnate. 901 00:41:42,190 --> 00:41:45,510 Nu vreau numere negative, așa că hai să-l UNSIGNED. 902 00:41:45,510 --> 00:41:48,660 Null nu este relevant, deoarece aici Eu vreau de fiecare utilizator să 903 00:41:48,660 --> 00:41:49,640 să aibă un număr unic. 904 00:41:49,640 --> 00:41:50,830 Nu vreau să fie nul. 905 00:41:50,830 --> 00:41:52,330 >> Dar acest lucru este interesant. 906 00:41:52,330 --> 00:41:57,780 Pot specifica faptul că ID-ul este fie cheie primară a acestei baze de date, sau este 907 00:41:57,780 --> 00:42:00,620 unic, sau e indexate, sau full-text. 908 00:42:00,620 --> 00:42:05,630 Deci, în scopul de azi, poveste lungă scurt, PRIMAR înseamnă că aceasta trebuie 909 00:42:05,630 --> 00:42:10,570 să fie atât conceptual și tehnic domeniul pe care le folosim pentru a unic 910 00:42:10,570 --> 00:42:12,140 identifica utilizatorii. 911 00:42:12,140 --> 00:42:16,140 >> Așa că atunci când ne uităm în sus de utilizatori, aceasta este un fel de o promisiune de a le privi în sus cea mai mare parte de 912 00:42:16,140 --> 00:42:17,370 ca identificator unic. 913 00:42:17,370 --> 00:42:21,930 Și baza de date se va asigura că, dacă au un număr de utilizator 3, nu se poate 914 00:42:21,930 --> 00:42:25,400 introduceți fizic un alt utilizator cu același număr de 3. 915 00:42:25,400 --> 00:42:28,380 Baza de date va refuza pur și simplu pentru a salva modificările. 916 00:42:28,380 --> 00:42:32,310 Ceea ce este un lucru bun, pentru că puteți te protejezi de la tine. auto 917 00:42:32,310 --> 00:42:34,270 >> Alternativ, pentru numele de utilizator. 918 00:42:34,270 --> 00:42:37,670 Astfel al doilea rând, retragerea, este câmpul nume de utilizator. 919 00:42:37,670 --> 00:42:41,860 Astfel al doilea rând aici este numele de utilizator, așa cum am făcut-o pe extrema stângă acolo. 920 00:42:41,860 --> 00:42:43,940 >> Deci, ce altceva ar putea să vreau să specificați? 921 00:42:43,940 --> 00:42:47,840 Nu am voie, în funcție de SQL, pentru a specifica două chei primare. 922 00:42:47,840 --> 00:42:50,750 aveți posibilitatea să specificați o cheie comună în cazul în care uita-te la ambele domenii, dar acestea nu pot 923 00:42:50,750 --> 00:42:52,260 fie individual cheile primare. 924 00:42:52,260 --> 00:42:54,750 Deci, asta e din cauză. 925 00:42:54,750 --> 00:42:56,040 Deci, care ar putea să vreau să aleg? 926 00:42:56,040 --> 00:42:59,710 >> Ei bine, unic este similară în spirit la un Cheia primară în care să specificați acest lucru 927 00:42:59,710 --> 00:43:03,570 domeniu trebuie să fie unic, dar e Nu va fi o 928 00:43:03,570 --> 00:43:04,410 Eu folosesc tot timpul. 929 00:43:04,410 --> 00:43:08,450 Și noi nu vom folosi asta tot timp ce nou motiv? 930 00:43:08,450 --> 00:43:10,490 Este mai lent posibil, dacă E un nume de utilizator de mult. 931 00:43:10,490 --> 00:43:11,740 E doar o pierdere de timp. 932 00:43:11,740 --> 00:43:16,140 >> INDEX, între timp, se specifică faptul că este nu va fi unic, dar mi-ar plăcea 933 00:43:16,140 --> 00:43:19,470 să lucreze magia sub capota pentru a face mai repede pentru mine să 934 00:43:19,470 --> 00:43:21,420 căutare pe acest domeniu. 935 00:43:21,420 --> 00:43:23,320 Deci, probabil, acest lucru nu este relevant aici. 936 00:43:23,320 --> 00:43:26,500 Pentru numele de utilizator, aș spune că UNIQUE este un răspuns bun. 937 00:43:26,500 --> 00:43:31,200 Dar să presupunem că am făcut mai mulți utilizatori interesant decât doar numele de utilizator, 938 00:43:31,200 --> 00:43:32,430 hash, și numerele de identificare. 939 00:43:32,430 --> 00:43:33,860 Ce se întâmplă dacă am dat de oameni numele complet? 940 00:43:33,860 --> 00:43:37,700 Ce se întâmplă dacă am dat li se adresează și alte date despre ei? 941 00:43:37,700 --> 00:43:43,360 >> Ei bine, dacă specificați că o coloană într-o Baza de date este indexată, ceea ce înseamnă că 942 00:43:43,360 --> 00:43:47,730 MySQL, Oracle sau, sau orice bază de date pe care îl utilizați, ar trebui să lucreze magia 943 00:43:47,730 --> 00:43:51,300 și de a folosi un fel de date de lux structură ca un copac, sau un trie, sau un 944 00:43:51,300 --> 00:43:55,940 tabel hash, sau ceva pentru a garanta că atunci când căutați pentru date utilizând 945 00:43:55,940 --> 00:43:58,150 selectați pe acel domeniu - 946 00:43:58,150 --> 00:44:01,310 ca-mi arate tuturor că trăiește de pe Oxford Street. 947 00:44:01,310 --> 00:44:02,540 O interogare de genul asta. 948 00:44:02,540 --> 00:44:06,250 Dacă ați specificat în prealabil că vrei un index pe acel câmp, 949 00:44:06,250 --> 00:44:09,050 căutări va fi mult, mult mai rapid. 950 00:44:09,050 --> 00:44:12,090 >> Dacă nu specificați un indice, cel mai bun puteți face este o căutare liniară, în cazul 951 00:44:12,090 --> 00:44:13,030 nu este sortat. 952 00:44:13,030 --> 00:44:16,220 Dar, dacă specificați INDEX, inteligent oameni care au făcut baza de date - 953 00:44:16,220 --> 00:44:19,340 oameni ca tine care știu acum copaci și încearcă și tabele hash - 954 00:44:19,340 --> 00:44:23,220 se va construi în mod automat astfel de date Structura în RAM pentru a vă asigura că 955 00:44:23,220 --> 00:44:26,050 aceste căutări sunt mult mai rapide. 956 00:44:26,050 --> 00:44:29,660 >> FULLTEXT Între timp, este similară în spirit, dar vă permite să faceți wildcard 957 00:44:29,660 --> 00:44:35,480 căutări, ca-mi arate tuturor că viața la strazile care incep cu 958 00:44:35,480 --> 00:44:36,960 O scrisoare pentru orice motiv. 959 00:44:36,960 --> 00:44:38,850 Puteți face căutări wildcard place asta. 960 00:44:38,850 --> 00:44:45,880 Sau, lucruri mai convingătoare, cum ar fi spectacol ma toată lumea care are cuvântul - 961 00:44:45,880 --> 00:44:49,400 arată-mi toți aceia al căror nume începe cu o anumită literă. 962 00:44:49,400 --> 00:44:51,880 Puteți căuta cuvinte cheie în acest mod. 963 00:44:51,880 --> 00:44:52,630 Bine. 964 00:44:52,630 --> 00:44:55,760 >> Deci, oportunități de proiectare acolo potențial. 965 00:44:55,760 --> 00:44:57,740 Mai sunt si altii ca voi legene mâinile mele la. 966 00:44:57,740 --> 00:45:00,530 Se pare că poți avea Motoarele de stocare diferite. 967 00:45:00,530 --> 00:45:04,390 Și acest lucru este mai mult decât avem nevoie Arcane cu siguranță pentru problema stabilit șapte. 968 00:45:04,390 --> 00:45:06,920 În mod implicit, voi folosiți ceva numit InnoDB. 969 00:45:06,920 --> 00:45:10,910 Veți vedea o mentiune a acestui undeva în interfata phpMyAdmin cel mai probabil. 970 00:45:10,910 --> 00:45:14,130 Dar știu că există alt model decizii care sunt de potențial 971 00:45:14,130 --> 00:45:18,030 interes vin proiecte finale, dacă faci ceva bazate pe web. 972 00:45:18,030 --> 00:45:19,330 >> Dar hai sa facem acest lucru. 973 00:45:19,330 --> 00:45:23,130 Să mergem mai departe și a pus acest lucru pe ecran ca un teaser pentru o poveste 974 00:45:23,130 --> 00:45:26,330 te-a implicat, o colega de camera, și un pahar de lapte. 975 00:45:26,330 --> 00:45:28,240 Să aruncăm o două minute sau așa rupe aici. 976 00:45:28,240 --> 00:45:31,060 Și dacă se poate lipi în jurul, să vină înapoi, uite un pic mai mult la SQL, și 977 00:45:31,060 --> 00:45:35,160 apoi un pic de JavaScript cu p-set opt ​​în minte. 978 00:45:35,160 --> 00:45:36,120 >> Bine. 979 00:45:36,120 --> 00:45:40,420 Deci, hai să te gândești la o cazul de colț, ce pot apărea foarte ușor 980 00:45:40,420 --> 00:45:44,240 în contextul folosind o bază de date, sau sincer, chiar cu lucruri din lumea reală 981 00:45:44,240 --> 00:45:46,280 ca ATM-uri pentru a obține bani. 982 00:45:46,280 --> 00:45:47,640 Deci, aici e un frigider. 983 00:45:47,640 --> 00:45:50,040 Să presupunem că ai o prea în cămin sau casa ta. 984 00:45:50,040 --> 00:45:54,990 Și ai un coleg de cameră, și atât de vă place foarte mult lapte, de exemplu. 985 00:45:54,990 --> 00:45:57,210 >> Deci, ai venit acasă de la clasa de o zi. 986 00:45:57,210 --> 00:45:58,490 El sau ea nu este încă înapoi. 987 00:45:58,490 --> 00:45:59,180 Ai deschis frigiderul. 988 00:45:59,180 --> 00:46:00,870 Chiar vrei un pahar mare de lapte. 989 00:46:00,870 --> 00:46:01,820 Nu e nici lapte. 990 00:46:01,820 --> 00:46:02,920 Deci, ce faci? 991 00:46:02,920 --> 00:46:03,840 Vă închideți frigider. 992 00:46:03,840 --> 00:46:04,670 Te apuca cheile. 993 00:46:04,670 --> 00:46:05,930 Te duci la piață. 994 00:46:05,930 --> 00:46:09,240 Și veți obține, în linie la CVS de la cei lucruri de sine checkout, care întotdeauna 995 00:46:09,240 --> 00:46:11,180 dura mai mult decât de fapt, având casieri. 996 00:46:11,180 --> 00:46:11,820 Oricum. 997 00:46:11,820 --> 00:46:15,490 >> Deci, între timp, dot dot dot, dvs. coleg de cameră vine acasă și el sau ea 998 00:46:15,490 --> 00:46:17,440 are un fel de dor pentru niște lapte. 999 00:46:17,440 --> 00:46:20,380 Astfel încât el sau ea deschide frigider, arată în interiorul, și Oh, la naiba. 1000 00:46:20,380 --> 00:46:21,160 Nici lapte. 1001 00:46:21,160 --> 00:46:24,750 Astfel încât el sau ea capetele afară, se întâmplă să meargă la alte CVS, care a fost doar o 1002 00:46:24,750 --> 00:46:27,900 bloc distanță pentru un motiv oarecare, și el sau ea devine, în linie pentru a cumpăra niște lapte. 1003 00:46:27,900 --> 00:46:30,480 >> Între timp, ai venit acasă, el sau ea vine acasă, și ceea ce fac 1004 00:46:30,480 --> 00:46:31,980 la urma trebuie? 1005 00:46:31,980 --> 00:46:33,080 De două ori mai mult lapte. 1006 00:46:33,080 --> 00:46:34,620 Dar nu vă place foarte mult lapte atât de mult. 1007 00:46:34,620 --> 00:46:37,300 Deci, acum aveți lapte atât de mult încât acum una dintre ele este doar de gând să meargă acru 1008 00:46:37,300 --> 00:46:37,820 în cele din urmă. 1009 00:46:37,820 --> 00:46:39,370 Deci, aceasta este o problemă foarte rău. 1010 00:46:39,370 --> 00:46:39,900 Dreapta? 1011 00:46:39,900 --> 00:46:41,990 >> Deci, ce sa întâmplat? 1012 00:46:41,990 --> 00:46:44,810 Deci fundamental, aceasta este un fel unui exemplu ridicol. 1013 00:46:44,810 --> 00:46:48,580 Dar sub capota, ceea ce am avut întâmplă aici este atât de ai verificat 1014 00:46:48,580 --> 00:46:52,390 starea de unele bucata de memorie, frigider. 1015 00:46:52,390 --> 00:46:54,420 Amândoi verificat de stat unor variabile. 1016 00:46:54,420 --> 00:46:57,360 Ai atât de tras o concluzie care apoi a acționat pe. 1017 00:46:57,360 --> 00:47:01,420 Dar, din păcate, în timp ce colegul tău de cameră a fost la magazin, starea de care 1018 00:47:01,420 --> 00:47:05,670 variabila schimbat, el sau ea a venit înapoi și acum vrea să schimbe de stat, dar 1019 00:47:05,670 --> 00:47:07,480 acesta a fost deja schimbat pe el sau ea. 1020 00:47:07,480 --> 00:47:11,120 Și, desigur, el sau ea nu ar fi plecat la magazin dacă au știut 1021 00:47:11,120 --> 00:47:13,010 care au fost deja pe drum. 1022 00:47:13,010 --> 00:47:16,430 >> Deci, în lumea reală, cum ai putut evita această problemă, presupunând că aveți 1023 00:47:16,430 --> 00:47:18,940 un frigider, ai un coleg de cameră, si iti place de fapt lapte? 1024 00:47:18,940 --> 00:47:19,760 >> Audiența: Comunicarea. 1025 00:47:19,760 --> 00:47:20,580 >> DAVID MALAN: Comunicarea. 1026 00:47:20,580 --> 00:47:21,160 OK. 1027 00:47:21,160 --> 00:47:22,500 Dar cum ar putea comunica? 1028 00:47:22,500 --> 00:47:23,990 >> Audiența: Lăsați-o notă. 1029 00:47:23,990 --> 00:47:25,480 >> DAVID MALAN: Lasă un bilet, nu? 1030 00:47:25,480 --> 00:47:28,025 Lăsați întotdeauna o notă, pentru fani de spectacol. 1031 00:47:28,025 --> 00:47:31,580 Bine, lasă astfel încât întotdeauna o notă, sau a pus cu adevărat ca un lacăt sau ceva 1032 00:47:31,580 --> 00:47:35,440 pe frigider care ține dvs. coleg de cameră de la inspectarea starea de 1033 00:47:35,440 --> 00:47:36,540 că variabila. 1034 00:47:36,540 --> 00:47:40,800 >> Acum, de ce ar fi acest Germane de problema stabilit șapte, sau la ATM-uri. 1035 00:47:40,800 --> 00:47:46,780 Ei bine, imaginați-vă o lume într-un ATM în care s-ar putea fi capabil de a merge până la un ATM 1036 00:47:46,780 --> 00:47:48,920 masina de aici, și un alt ATM aici. 1037 00:47:48,920 --> 00:47:50,680 Și acest lucru se întâmplă destul de des. 1038 00:47:50,680 --> 00:47:54,150 Și să presupunem că a avut două cărți de ATM-uri, care este posibil să se obțină. 1039 00:47:54,150 --> 00:47:57,420 Și vă conectați la ambele masini în mod eficient în același timp, sperăm 1040 00:47:57,420 --> 00:47:58,660 în timp ce nimeni nu se uită. 1041 00:47:58,660 --> 00:48:01,260 Și apoi tastați codul PIN aproximativ simultan. 1042 00:48:01,260 --> 00:48:06,280 Și apoi faci o interogare sold pentru a vedea cât de mult bani ai. 1043 00:48:06,280 --> 00:48:08,920 Și să presupunem că aveți 100 dolari a plecat în contul dumneavoastră. 1044 00:48:08,920 --> 00:48:13,310 Deci, în esență, în același timp, vă spune unu, zero, zero introduceți. 1045 00:48:13,310 --> 00:48:16,000 Și tu sperăm mă întorc niște bani. 1046 00:48:16,000 --> 00:48:18,440 >> Dar cati bani s-ar putea să te întorci? 1047 00:48:18,440 --> 00:48:21,710 Acum calculatoare la sfârșitul zilei, mai ales dacă acestea sunt vorbesc cu 1048 00:48:21,710 --> 00:48:27,360 servere, nu fac neapărat lucruri în ordinea în care este de așteptat. 1049 00:48:27,360 --> 00:48:30,860 >> Deci, să presupunem că ceea ce se întâmplă, din cauza indiferent de rețea de viteză probleme acolo 1050 00:48:30,860 --> 00:48:34,530 sunt, sau problemele de CPU există, sau ceva de genul asta, presupunem că 1051 00:48:34,530 --> 00:48:38,530 Primul ATM verifică echilibrul și vede, oh, această persoană are 100 dolari. 1052 00:48:38,530 --> 00:48:41,840 Dar apoi devine distras, deoarece poate o copie de rezervă se întâmplă și așa este 1053 00:48:41,840 --> 00:48:42,500 încetinirea. 1054 00:48:42,500 --> 00:48:45,080 Sau poate în timp ce verificarea, rețeaua conexiune luat un pic mai lent, deoarece 1055 00:48:45,080 --> 00:48:45,910 acest lucru se întâmplă. 1056 00:48:45,910 --> 00:48:47,100 Sunt dispozitive fizice. 1057 00:48:47,100 --> 00:48:49,330 Deci, între timp, a doua ATM-uri este cere aceeași întrebare. 1058 00:48:49,330 --> 00:48:53,030 Câți bani are pe David? 100 dolari este răspunsul. 1059 00:48:53,030 --> 00:48:58,930 Dar, pentru că primul ATM nu a fost încă trimis mesajul scade 100 de dolari, atât 1060 00:48:58,930 --> 00:49:03,000 ATM-urile au inspectat seiful băncii, văzând există 100 dolari acolo, și acum 1061 00:49:03,000 --> 00:49:07,160 ambele masini sunt potențial O să scuipe un răspuns. 1062 00:49:07,160 --> 00:49:12,240 >> Acum, acest lucru este mare pentru tine într-un sens în cazul în care banca nu în cele din urmă 1063 00:49:12,240 --> 00:49:17,200 se schimba suma de minus 100 de setarea variabilă egală cu dvs. 1064 00:49:17,200 --> 00:49:21,570 cont bancar egal cu 0, spre deosebire de pentru a face minus 100. 1065 00:49:21,570 --> 00:49:24,410 Acum, în cel mai rău caz pentru banca - 1066 00:49:24,410 --> 00:49:27,470 sau în cel mai bun pentru banca, între timp, ei vă dau 200 dolari, și 1067 00:49:27,470 --> 00:49:31,690 contul dvs. bancar acum arată negativ 100 de dolari, care într-adevăr nu 1068 00:49:31,690 --> 00:49:32,950 puteți beneficia la toate. 1069 00:49:32,950 --> 00:49:36,500 Dar ideea este că această cursă condiție pentru două colege de cameră obtinerea 1070 00:49:36,500 --> 00:49:40,660 lapte, sau pentru două bancomate încercarea de a obține bani și de a schimba starea de o boltă 1071 00:49:40,660 --> 00:49:44,510 în același timp există nicio timp aveți o bază de date. 1072 00:49:44,510 --> 00:49:48,290 >> Acum, în problema stabilit șapte, această problemă apare în sensul că, dacă ați cumpărat un 1073 00:49:48,290 --> 00:49:52,110 cota de Facebook stoc, și apoi pentru exemplu, cumperi un al doilea cotă de 1074 00:49:52,110 --> 00:49:55,160 Facebook stoc, aveți nevoie pentru a face o decizie ca programator. 1075 00:49:55,160 --> 00:49:58,710 În scopul de a decide cum să se actualizeze baze de date, cotele sunt ai de gând să 1076 00:49:58,710 --> 00:50:02,250 au un rând pentru acest stoc, iar acest lucru este o modalitate de a-l pună în aplicare. 1077 00:50:02,250 --> 00:50:06,640 Și ai de gând să aibă o acțiune din FB, care este de simbol bursier 1078 00:50:06,640 --> 00:50:10,120 pentru acest nume de utilizator, sau acest utilizator ID, identificatorul unic. 1079 00:50:10,120 --> 00:50:12,340 >> Dar aceeași poveste se poate intampla aici. 1080 00:50:12,340 --> 00:50:15,800 Daca faci un SELECT din SQL, după cum veți vedea în problema set de șapte, când veți vedea, 1081 00:50:15,800 --> 00:50:18,460 oh, David are o parts de Facebook stoc. 1082 00:50:18,460 --> 00:50:23,240 Permiteți-mi schimba acum acest lucru pentru a fi două acțiuni, pentru că vrea să cumpere un 1083 00:50:23,240 --> 00:50:24,120 a doua acțiune. 1084 00:50:24,120 --> 00:50:27,860 Dar să presupunem că David a avut de fapt două ferestre de browser deschise, sau să presupunem că 1085 00:50:27,860 --> 00:50:32,150 este un cont comun cu doi soți, și ambele sunt încercarea de a efectua 1086 00:50:32,150 --> 00:50:36,770 aceeași operație, acolo, de asemenea, există potențial pentru o decizie de a fi 1087 00:50:36,770 --> 00:50:39,670 face pe baza anterioare de stat din lume - 1088 00:50:39,670 --> 00:50:41,290 contul are o parts - 1089 00:50:41,290 --> 00:50:45,630 și ambele persoane, sau ambele servere, acum încercați să spun incrementa-l la două acțiuni. 1090 00:50:45,630 --> 00:50:49,020 Dar, în acest caz, s-ar putea fi taxat mi bani pentru ambele acțiuni, dar 1091 00:50:49,020 --> 00:50:50,830 crește doar că o singură dată. 1092 00:50:50,830 --> 00:50:54,730 >> Deci, pe scurt, problema fundamentală aici, ca și cu gluma despre lăsând o 1093 00:50:54,730 --> 00:50:58,750 nota, sau pune un lacat pe ea, este în cazul în care doi oameni, sau două fire - 1094 00:50:58,750 --> 00:50:59,930 cred că înapoi la zero - 1095 00:50:59,930 --> 00:51:03,220 poate inspecta starea unor variabile și apoi să încerce să schimbe că variabila, 1096 00:51:03,220 --> 00:51:07,950 dar aceste două lucruri nu se întâmplă la același timp, dar pot obține întreruptă 1097 00:51:07,950 --> 00:51:11,500 de alte lucruri care se întâmplă, datele pot intra într-o stare foarte ciudat. 1098 00:51:11,500 --> 00:51:15,450 Și puteți beneficia sau puteți suferi în sensul de exemplu bani. 1099 00:51:15,450 --> 00:51:18,110 >> Deci, în problema stabilit șapte, vă oferim aceasta linie de cod, care de mult 1100 00:51:18,110 --> 00:51:21,000 nuvelă, rezolvă această problemă în MySQL. 1101 00:51:21,000 --> 00:51:24,950 Această instrucțiune foarte mult timp că nu are se potrivesc chiar și pe o linie pe 1102 00:51:24,950 --> 00:51:30,370 ecran aici asigură că operație este ceea ce se numește atomic. 1103 00:51:30,370 --> 00:51:33,720 Totul se întâmplă dintr-o dată, sau nu se întâmplă deloc. 1104 00:51:33,720 --> 00:51:37,530 Această frază foarte mult timp, nu se poate te întreruptă parțial. 1105 00:51:37,530 --> 00:51:39,840 >> Și ceea ce face este literalmente ceea ce spune ea. 1106 00:51:39,840 --> 00:51:44,200 Introduceți în unele masa următoarele trei domenii aceste valori specifice, 1107 00:51:44,200 --> 00:51:47,280 dar pe cheie duplicat, nu fac un insert. 1108 00:51:47,280 --> 00:51:48,280 Face o actualizare. 1109 00:51:48,280 --> 00:51:52,450 Deci, acest lucru este ca face un SELECT și o INSERT ca să spunem așa, în același timp. 1110 00:51:52,450 --> 00:51:55,150 Și ceea ce este cheia care este, probabil, fiind menționată aici? 1111 00:51:55,150 --> 00:51:58,300 1112 00:51:58,300 --> 00:52:01,380 >> Se pare, și veți vedea acest lucru în problema set spec. șapte, pentru că 1113 00:52:01,380 --> 00:52:06,040 am declarat că există o cheie unică în acest tabel special, astfel încât 1114 00:52:06,040 --> 00:52:08,480 nu poate avea mai multe rânduri pentru același utilizator cu 1115 00:52:08,480 --> 00:52:10,150 același simbol penny stoc - 1116 00:52:10,150 --> 00:52:13,780 în acest exemplu de aici, DVN.V este un stoc penny prostie pe care le 1117 00:52:13,780 --> 00:52:14,980 se referă la spec.. 1118 00:52:14,980 --> 00:52:17,860 Pentru ca ne-am declarat-o a fi unic, Ce înseamnă acest lucru este că, dacă 1119 00:52:17,860 --> 00:52:23,580 încercați să introduceți un rând duplicat, ești în loc de gând să-l actualizeze fără 1120 00:52:23,580 --> 00:52:27,020 oricine altcineva are o șansă de a schimba starea lumii, fie. 1121 00:52:27,020 --> 00:52:29,400 Deci, pe scurt, acest lucru asigură lucrurile sunt atomic. 1122 00:52:29,400 --> 00:52:32,530 >> Mai mult, în general, deși, baze de date cum ar fi MySQL - 1123 00:52:32,530 --> 00:52:35,460 și nu aveți nevoie de această funcție pentru p-set de șapte, dar păstrați-l în minte pentru 1124 00:52:35,460 --> 00:52:36,200 viitor - 1125 00:52:36,200 --> 00:52:38,870 sprijini ceea ce sunt numite tranzacții, în cazul în care vă pot spune 1126 00:52:38,870 --> 00:52:40,990 START TRANSACTION literalmente. 1127 00:52:40,990 --> 00:52:43,270 Puteți executa apoi două declarații SQL. 1128 00:52:43,270 --> 00:52:45,710 Și o declarație SQL, după cum veți vedea în șapte set-p, arată un pic 1129 00:52:45,710 --> 00:52:46,750 ceva de genul asta. 1130 00:52:46,750 --> 00:52:48,820 Actualizați un tabel numit cont. 1131 00:52:48,820 --> 00:52:52,550 Setați coloana echilibru egal cu orice coloana de echilibru în prezent 1132 00:52:52,550 --> 00:52:57,280 este de minus 1.000 cazul în care numărul, numărul de cont, cum ar fi ID-ul de utilizator, 1133 00:52:57,280 --> 00:53:00,830 este egal cu 2, și apoi să actualizeze Contul dot dot dot. 1134 00:53:00,830 --> 00:53:04,350 >> Deci, în termeni de nespecialist, ce aceste două interogări par să faci în 1135 00:53:04,350 --> 00:53:05,840 sentiment real lume de banking? 1136 00:53:05,840 --> 00:53:07,440 >> Audiența: Transferul de economii. 1137 00:53:07,440 --> 00:53:08,020 >> DAVID MALAN: Exact. 1138 00:53:08,020 --> 00:53:10,470 Transferul de fonduri de la un cont la altul. 1139 00:53:10,470 --> 00:53:14,400 Și acest lucru este un alt exemplu în cazul în care într-adevăr doresc aceste două lucruri să se întâmple 1140 00:53:14,400 --> 00:53:15,570 sau să nu se întâmple. 1141 00:53:15,570 --> 00:53:18,880 Nu vrei ceva pentru a obține în mijloc de ei și potențial mizerie 1142 00:53:18,880 --> 00:53:22,220 matematica, sau mizerie cât de mult bani ai, sau cât de mult 1143 00:53:22,220 --> 00:53:23,170 bani banca are. 1144 00:53:23,170 --> 00:53:26,890 Deci, ceea ce este foarte frumos despre tranzacțiile în MySQL este faptul că, și 1145 00:53:26,890 --> 00:53:30,160 baze de date, mai general, este faptul că acestea și oameni inteligenti care au implementat 1146 00:53:30,160 --> 00:53:33,670 aceste caracteristici dau seama cum de a face sigur că aceste două lucruri se întâmplă 1147 00:53:33,670 --> 00:53:35,120 sau nu la toate. 1148 00:53:35,120 --> 00:53:38,580 >> Și dacă sunteți cu adevărat aspiră să facă un site web care este folosit de oameni de pe 1149 00:53:38,580 --> 00:53:41,490 campus, oameni din lumea reală, face ceva în sensul de pornire, 1150 00:53:41,490 --> 00:53:43,300 acestea sunt tipurile de deciziile de design care 1151 00:53:43,300 --> 00:53:45,020 devin tot atât de important. 1152 00:53:45,020 --> 00:53:48,240 În caz contrar, de a începe să-și piardă de date, pierde utilizatori, sau în cel mai rău caz ca 1153 00:53:48,240 --> 00:53:51,800 am vazut aici, potențial pierde bani. 1154 00:53:51,800 --> 00:53:56,180 Deci, din nou, mai mult pe faptul că, în problema stabilit șapte, precum și, poate, pentru unii dintre 1155 00:53:56,180 --> 00:53:57,530 te în proiecte finale. 1156 00:53:57,530 --> 00:54:01,870 >> Deci, haideți să schimbe această imagine am avut un moment în urmă cu doar într-un mod mai mult. 1157 00:54:01,870 --> 00:54:04,070 Deci, lasă-mă să văd de fapt, dacă pot - 1158 00:54:04,070 --> 00:54:06,030 nope, asta a plecat. 1159 00:54:06,030 --> 00:54:06,690 Nu este. 1160 00:54:06,690 --> 00:54:09,020 >> Deci, acest lucru este în cazul în care am plecat ultima dată. 1161 00:54:09,020 --> 00:54:12,390 Și se pare că am de gând să arunce un lucru mai mult în amestec aici - 1162 00:54:12,390 --> 00:54:14,510 un limbaj numit JavaScript. 1163 00:54:14,510 --> 00:54:18,060 Deci, JavaScript potriveste de fapt în această piesă - 1164 00:54:18,060 --> 00:54:22,086 și nu am destul lăsați suficient loc, deci acest lucru nu este acum la scară. 1165 00:54:22,086 --> 00:54:23,900 OK, aceasta este cu adevărat patetic. 1166 00:54:23,900 --> 00:54:27,075 OK, așa că e JavaScript. 1167 00:54:27,075 --> 00:54:27,340 Bine. 1168 00:54:27,340 --> 00:54:28,760 Sunt într-adevăr o fac un deserviciu. 1169 00:54:28,760 --> 00:54:29,390 Bine. 1170 00:54:29,390 --> 00:54:34,790 >> Deci, JavaScript este un alt programare limba, și ultima, dacă ajută 1171 00:54:34,790 --> 00:54:37,770 asigur că nu e mult mai mult dintre hidranții de incendiu aici. 1172 00:54:37,770 --> 00:54:41,100 Deci JavaScript este, de asemenea, un interpretată limbă, ceea ce înseamnă că nu 1173 00:54:41,100 --> 00:54:42,670 compilați-l în zerouri și cele. 1174 00:54:42,670 --> 00:54:43,690 Tocmai ai fugi. 1175 00:54:43,690 --> 00:54:47,680 Dar ceea ce este fundamental diferit cu JavaScript, de obicei, este că 1176 00:54:47,680 --> 00:54:49,815 nu-l rula pe serverul de web. 1177 00:54:49,815 --> 00:54:52,570 Ea nu se executa în aparat în sine. 1178 00:54:52,570 --> 00:54:57,490 Mai degrabă, acesta devine descărcate de către un utilizator prin HTTP în browser-ul lor - 1179 00:54:57,490 --> 00:55:00,260 Chrome, Safari, Internet Explorer, Firefox, indiferent de - 1180 00:55:00,260 --> 00:55:03,860 și este browser-ul care execută această special limbaj de programare. 1181 00:55:03,860 --> 00:55:08,000 >> Astfel încât să fie clar, PHP a fost până acum executate fie la linia de comandă în 1182 00:55:08,000 --> 00:55:11,290 fereastra de negru și alb, pe un server de cum ar fi aparatul, un calculator 1183 00:55:11,290 --> 00:55:14,490 ca aparatul, sau acesta a fost executate de un server web 1184 00:55:14,490 --> 00:55:15,860 rulează pe un calculator. 1185 00:55:15,860 --> 00:55:20,490 Dar tema de aici este că PHP până acum a fost executat pe partea de server, așa 1186 00:55:20,490 --> 00:55:24,820 utilizatorului și browser-ul utilizatorului nu vede o linie de cod PHP. 1187 00:55:24,820 --> 00:55:28,530 >> De fapt, dacă deschideți vreodată un browser pentru site-ul sau un alt dumneavoastră și vă 1188 00:55:28,530 --> 00:55:32,400 a se vedea de fapt codul PHP în fereastra, cineva a dat-on bară. 1189 00:55:32,400 --> 00:55:34,950 Pentru că nu este menit să fie trimis la un browser direct. 1190 00:55:34,950 --> 00:55:38,150 Ar trebui să fie executat și transformat în ceva de genul HTML. 1191 00:55:38,150 --> 00:55:40,120 >> Dar JavaScript este, în esență, opusul. 1192 00:55:40,120 --> 00:55:44,350 Este menit să fi rulat de obicei, în interiorul a ferestrei browser-ului unui utilizator. 1193 00:55:44,350 --> 00:55:46,840 Și ce fel de site-uri web utilizează JavaScript atunci aceste zile? 1194 00:55:46,840 --> 00:55:49,640 1195 00:55:49,640 --> 00:55:52,180 >> Cum ar fi literalmente fiecare site-ul web populare. 1196 00:55:52,180 --> 00:55:55,430 Fiecare site-ul care voi probabil folosi de zi cu zi folosesc JavaScript pentru 1197 00:55:55,430 --> 00:55:57,330 mai simplă și chiar mai sexy caracteristici. 1198 00:55:57,330 --> 00:55:59,800 >> Deci, ceva de genul Facebook Chat daca folosi. 1199 00:55:59,800 --> 00:56:01,040 Cum că, de fapt locul de muncă? 1200 00:56:01,040 --> 00:56:05,090 Ei bine, până acum, toate lucrurile pe care le-am face cu HTML și PHP presupune că 1201 00:56:05,090 --> 00:56:08,750 te trage în sus un URL, și te-a lovit Enter, și veți vedea o parte a conținutului HTML. 1202 00:56:08,750 --> 00:56:11,970 Și faceți clic pe link-ul, care se schimbă URL-ul, schimba pagina, și reîncarcă 1203 00:56:11,970 --> 00:56:12,740 unele conținut nou. 1204 00:56:12,740 --> 00:56:16,340 Faceți clic pe un alt URL sau să prezinte un formular, se whisked la o altă pagină și 1205 00:56:16,340 --> 00:56:17,420 veți vedea unele conținut nou. 1206 00:56:17,420 --> 00:56:22,710 >> Dar folosind ceva de genul Facebook Chat, sau Gchat, sau Google Maps, rareori 1207 00:56:22,710 --> 00:56:27,350 nu toată pagina refresh astfel încât veți vedea un ecran alb momentan și 1208 00:56:27,350 --> 00:56:28,470 apoi conținut nou. 1209 00:56:28,470 --> 00:56:32,610 Mai degrabă, pagini web de astăzi sunt dinamic obtinerea actualizate din nou și 1210 00:56:32,610 --> 00:56:35,570 din nou și din nou tot felul din spatele scenei. 1211 00:56:35,570 --> 00:56:38,560 Și se pare că, atunci când te duci la ceva de genul Facebook, sau Gchat, 1212 00:56:38,560 --> 00:56:43,050 sau Gmail, și actualizările de pagină automat, fără reîncărcare 1213 00:56:43,050 --> 00:56:47,630 ecran întreg, ceea ce sa întâmplat este că browser-ul a făcut un fel de secret 1214 00:56:47,630 --> 00:56:49,410 cereri HTTP suplimentare - 1215 00:56:49,410 --> 00:56:52,740 nu pentru pagini web întregi, ci doar pentru bucati mici de date, cum ar fi 1216 00:56:52,740 --> 00:56:55,740 mesaj instant că prietenul tău tocmai tu, sau actualizarea de stare trimis 1217 00:56:55,740 --> 00:56:58,210 cineva doar tu, sau tweet trimis că cineva tocmai a trimis. 1218 00:56:58,210 --> 00:57:02,120 Este doar a face cereri de mici pentru date, și apoi folosind JavaScript, aceasta 1219 00:57:02,120 --> 00:57:06,370 limbaj de programare, pentru a schimba ceea ce pagina web arata ca fără 1220 00:57:06,370 --> 00:57:09,860 serverul ajuta, fără serverul care generează HTML. 1221 00:57:09,860 --> 00:57:13,820 >> Deci, pe scurt, JavaScript poate fi utilizat apoi să-i aducă nu numai de noi date de la 1222 00:57:13,820 --> 00:57:16,750 server fără a reîncărca un întreg pagină sau de a depune un formular. 1223 00:57:16,750 --> 00:57:20,060 Acesta poate fi de asemenea utilizat pentru a schimba așa-numita DOM - 1224 00:57:20,060 --> 00:57:21,520 Document Object Model - 1225 00:57:21,520 --> 00:57:24,620 care este doar modul de lux pentru spunând că pomul HTML 1226 00:57:24,620 --> 00:57:26,220 că am văzut ultima dată. 1227 00:57:26,220 --> 00:57:31,640 >> Deci, pentru a reasigura, JavaScript este sintactic atât de asemănătoare cu C, la fel de bine. 1228 00:57:31,640 --> 00:57:32,820 Nu e nici o funcție principală. 1229 00:57:32,820 --> 00:57:35,430 Trebuie doar începe să scrie codul și acesta va fi executat, sau 1230 00:57:35,430 --> 00:57:36,900 interpretate mai mult în mod corespunzător. 1231 00:57:36,900 --> 00:57:38,660 Condiții va arata aceasta. 1232 00:57:38,660 --> 00:57:41,230 Nu este diferit de la C sau PHP pentru care contează. 1233 00:57:41,230 --> 00:57:43,890 Expresii boolean sau-ed împreună va arata aceasta. 1234 00:57:43,890 --> 00:57:45,590 Anded împreună arata ca aceasta. 1235 00:57:45,590 --> 00:57:47,750 >> Switch-uri va arata aceasta. 1236 00:57:47,750 --> 00:57:49,440 Pentru bucle va arata astfel. 1237 00:57:49,440 --> 00:57:51,060 În timp ce buclele va arata aceasta. 1238 00:57:51,060 --> 00:57:53,316 Face în timp ce buclele va arata aceasta. 1239 00:57:53,316 --> 00:57:54,780 >> Acest lucru este nou. 1240 00:57:54,780 --> 00:57:58,753 Deci, JavaScript nu are o foreach construi în sine, dar acest construct 1241 00:57:58,753 --> 00:58:03,870 pentru variabila i în matrice, și am în acest caz devine o valoare index. 1242 00:58:03,870 --> 00:58:06,880 Deci, este un pic diferită de cea foreach, deși noi versiuni ale 1243 00:58:06,880 --> 00:58:10,280 JavaScript ies tot timpul, astfel încât chiar și aceste caracteristici de limbă 1244 00:58:10,280 --> 00:58:10,880 evoluează. 1245 00:58:10,880 --> 00:58:16,920 >> Și, ca o paranteza, JavaScript în aceste zile poate fi de asemenea utilizat pe un server la fel ca 1246 00:58:16,920 --> 00:58:19,920 PHP cu ajutorul unui cadru denumit Node.js. 1247 00:58:19,920 --> 00:58:24,670 Unul dintre CS50 lui TFS, Kevin, a condus un seminar pe Node.js care este disponibil la 1248 00:58:24,670 --> 00:58:26,440 cs50.net/seminars. 1249 00:58:26,440 --> 00:58:28,830 Deci, dacă ești curios, știi că se poate folosi acest lucru pe partea de server ca 1250 00:58:28,830 --> 00:58:33,870 bine, dar asta este o tendință destul de recent, dar un unul puternic la asta. 1251 00:58:33,870 --> 00:58:35,270 >> Acesta este un pic diferit. 1252 00:58:35,270 --> 00:58:37,910 Aceasta este o matrice in JavaScript. 1253 00:58:37,910 --> 00:58:40,115 Și ceea ce se pare diferit față de C sau PHP? 1254 00:58:40,115 --> 00:58:43,890 1255 00:58:43,890 --> 00:58:47,420 Există câteva povești rapid putem spune aici. 1256 00:58:47,420 --> 00:58:49,367 Ce lipsește față de PHP? 1257 00:58:49,367 --> 00:58:51,652 >> Audiența: [inaudibil]. 1258 00:58:51,652 --> 00:58:52,110 >> DAVID MALAN: Da? 1259 00:58:52,110 --> 00:58:53,322 Ne pare rău, spun din nou? 1260 00:58:53,322 --> 00:58:54,740 >> Audiența: Nu declararea tipul variabilei. 1261 00:58:54,740 --> 00:58:56,390 >> DAVID MALAN: Noi nu suntem de declarare tipul variabilei. 1262 00:58:56,390 --> 00:58:59,630 Deci, de fapt, destul ca PHP, nu suntem specificând tipurile de această variabilă. 1263 00:58:59,630 --> 00:59:02,670 Mai degrabă, suntem mai mult generic var spune pentru variabila. 1264 00:59:02,670 --> 00:59:06,690 Noi nu avem pacoste PHP a semn dolar, care în timp ce plictisitor pentru 1265 00:59:06,690 --> 00:59:09,160 tip, nu face mai clar că ceva este o variabilă. 1266 00:59:09,160 --> 00:59:11,830 În timp ce aici, suntem un fel de înapoi la Abordarea C este de doar un apel 1267 00:59:11,830 --> 00:59:14,500 variabilă de numele pe care il dorim să-l dau, cum ar fi numere. 1268 00:59:14,500 --> 00:59:17,170 Și, de asemenea, cum ar fi PHP, avem paranteze pătrat pentru 1269 00:59:17,170 --> 00:59:19,170 valori în interiorul că matrice. 1270 00:59:19,170 --> 00:59:22,490 >> Deci variabile în JavaScript, de asemenea, ar putea arata ca aceasta. 1271 00:59:22,490 --> 00:59:26,900 Observați aici este un șir denumit s, dar au în mod similar, nu se specifică 1272 00:59:26,900 --> 00:59:28,750 că este un șir. 1273 00:59:28,750 --> 00:59:33,160 Aici, deși este o caracteristică care nu există în exact același fel în PHP, 1274 00:59:33,160 --> 00:59:34,460 dar un pic similar. 1275 00:59:34,460 --> 00:59:36,530 Acesta este un obiect în JavaScript. 1276 00:59:36,530 --> 00:59:42,110 Și obiectele sunt un fel de armata elvețiană Cuțit de o structură de date în care vă 1277 00:59:42,110 --> 00:59:43,900 le pot folosi pentru orice număr de lucruri. 1278 00:59:43,900 --> 00:59:46,860 >> Aici, de exemplu, suntem declarând o variabilă numită citat. 1279 00:59:46,860 --> 00:59:49,110 Tipul acelei variabile este un obiect. 1280 00:59:49,110 --> 00:59:53,550 Vă puteți gândi la acest lucru ca o struct C care are chei și valori. 1281 00:59:53,550 --> 00:59:55,250 Simbolul este o cheie. 1282 00:59:55,250 --> 00:59:57,350 FB este o valoare, aparent un simbol stoc. 1283 00:59:57,350 --> 00:59:57,930 Virgulă. 1284 00:59:57,930 --> 01:00:02,180 Pretul este un alt cheie, iar valoarea sa este aparent un punct plutitoare, sau un 1285 01:00:02,180 --> 01:00:06,510 număr mai general, în JavaScript, de 49.26 dolari. 1286 01:00:06,510 --> 01:00:09,030 >> Deci, PHP nu are - 1287 01:00:09,030 --> 01:00:12,980 nu ne-am văzut în obiecte PHP destul de ca acest lucru, dar ne-am vedea un analog, 1288 01:00:12,980 --> 01:00:14,093 care a ceea ce a fost? 1289 01:00:14,093 --> 01:00:14,980 >> Audiența: [inaudibil]. 1290 01:00:14,980 --> 01:00:16,110 >> DAVID MALAN: tablouri asociative. 1291 01:00:16,110 --> 01:00:19,990 Deci, în timp ce PHP are tablouri asociative a cărei sintaxă este tot atât de ușor 1292 01:00:19,990 --> 01:00:20,370 diferit - 1293 01:00:20,370 --> 01:00:21,780 am văzut parantezele pătrate. 1294 01:00:21,780 --> 01:00:23,860 Am văzut ciudate săgeți simboluri. 1295 01:00:23,860 --> 01:00:27,330 JavaScript a obiectelor, dar acest lucru este cea mai mare parte o diferență semantică și o 1296 01:00:27,330 --> 01:00:29,260 alt sinonim pentru acum. 1297 01:00:29,260 --> 01:00:35,060 Cu toate acestea, ca o paranteza, PHP are, de asemenea, obiecte într-un mod care Java și alte 1298 01:00:35,060 --> 01:00:37,810 limbi au obiecte în orientat-obiect de programare. 1299 01:00:37,810 --> 01:00:40,440 Dar vom folosi acestea doar pentru tipuri de date de acum. 1300 01:00:40,440 --> 01:00:42,170 Obiecte și tablouri asociative. 1301 01:00:42,170 --> 01:00:44,140 >> Aceasta s-ar putea face un pic mai clar. 1302 01:00:44,140 --> 01:00:45,890 Iată de ce un obiect este util. 1303 01:00:45,890 --> 01:00:48,760 Când doriți să declarați un student, ca Zamyla, putem de fapt 1304 01:00:48,760 --> 01:00:52,630 îngloba ca să spunem așa interiorul că obiect folosind acolade la fel ca 1305 01:00:52,630 --> 01:00:55,060 înainte de o grămadă de chei valorile de aici și. 1306 01:00:55,060 --> 01:00:59,150 Avem o identitate, o casă, și un nume pentru Zamyla, urmat de un punct și virgulă ca 1307 01:00:59,150 --> 01:01:00,690 de obicei, la sfârșitul anului. 1308 01:01:00,690 --> 01:01:04,840 >> Pe aici, acest lucru este ușor diferite, dar, de asemenea, foarte puternic 1309 01:01:04,840 --> 01:01:05,690 aceste zile. 1310 01:01:05,690 --> 01:01:08,780 Iată un tablou, și știu că din cauza există o paranteză în sus 1311 01:01:08,780 --> 01:01:11,090 top și o paranteză în partea de jos. 1312 01:01:11,090 --> 01:01:16,050 Și aceasta este o serie de date ce tip aparent în JavaScript? 1313 01:01:16,050 --> 01:01:21,260 Aceasta este o serie de se pare ca trei obiecte. 1314 01:01:21,260 --> 01:01:24,580 Și știu că e doar un obiect din cauza acolade. 1315 01:01:24,580 --> 01:01:28,760 Și observați există acoladă deschisă, unele lucruri, aproape acoladă, virgulă, 1316 01:01:28,760 --> 01:01:31,180 apoi ceva mai mult, virgulă, și apoi ceva mai mult. 1317 01:01:31,180 --> 01:01:33,800 Deci, asta e trei argumente separate prin doua virgule. 1318 01:01:33,800 --> 01:01:36,810 >> Deci, aceasta este o serie de trei obiecte. 1319 01:01:36,810 --> 01:01:39,940 Și fiecare dintre aceste obiecte pare să fie un membru student sau personalului de unele 1320 01:01:39,940 --> 01:01:42,370 fel, fiecare cu un act de identitate, casă, și nume. 1321 01:01:42,370 --> 01:01:45,060 Dar am numit acest ceva numit JSON - 1322 01:01:45,060 --> 01:01:47,450 JavaScript Object Notation. 1323 01:01:47,450 --> 01:01:52,060 Și acest lucru este un format de date care de fapt este atât de foarte popular și în 1324 01:01:52,060 --> 01:01:55,100 vogă în aceste zile că, dacă scrie o aplicație care utilizează Facebook 1325 01:01:55,100 --> 01:01:59,150 API, API-ul Twitter, foarte aproape orice API acolo in aceste zile, 1326 01:01:59,150 --> 01:02:02,820 inclusiv unele din proprie CS50 lui, Datele te întorci, nu este în 1327 01:02:02,820 --> 01:02:04,720 format CSV școală veche. 1328 01:02:04,720 --> 01:02:06,780 >> Deoarece amintesc că CSV este foarte simplu. 1329 01:02:06,780 --> 01:02:10,230 Acesta este la doar coloane separate prin virgule. 1330 01:02:10,230 --> 01:02:13,190 Datele JSON vă oferă mai multe metadate. 1331 01:02:13,190 --> 01:02:17,800 Se asociază o cheie cu fiecare valoare atât de ei nu trebuie să-și asume doar că 1332 01:02:17,800 --> 01:02:22,460 coloana de grad zero este o valoare, coloană unul este altul, coloana doi este alta. 1333 01:02:22,460 --> 01:02:26,790 Totul într-un obiect JSON aici este un fel de auto-descrie, pentru că fiecare 1334 01:02:26,790 --> 01:02:30,940 unul dintre numele din acest fișier are literalmente numele în fața lui ca o 1335 01:02:30,940 --> 01:02:32,510 șir citat. 1336 01:02:32,510 --> 01:02:34,950 >> Deci, haideți să aruncăm o privire la un câteva exemple aici. 1337 01:02:34,950 --> 01:02:36,800 Lasă-mă să merg în aparat. 1338 01:02:36,800 --> 01:02:41,000 Și lasă-mă să merg în vhost nostru director în public. 1339 01:02:41,000 --> 01:02:45,590 Și lasă-mă să merg în JavaScript director. 1340 01:02:45,590 --> 01:02:49,610 Și să mergem mai departe și să se deschidă dom-0.html, unde DOM înseamnă doar 1341 01:02:49,610 --> 01:02:51,010 Document Object Model. 1342 01:02:51,010 --> 01:02:53,490 Este chestii copac la care M-am referit mai devreme. 1343 01:02:53,490 --> 01:02:54,950 >> Și permiteți-mi să propun următoarele. 1344 01:02:54,950 --> 01:02:57,720 Iată o pagină web a cărui corpul este destul de simplu. 1345 01:02:57,720 --> 01:03:00,170 Deci, aici, în partea de jos, Am observat un formular. 1346 01:03:00,170 --> 01:03:01,500 Ne-am văzut pe cei înainte. 1347 01:03:01,500 --> 01:03:07,600 Ea are două intrări, dintre care una are un ID-ul de nume, dintre care unul are un tip de 1348 01:03:07,600 --> 01:03:09,830 prezenta, iar primul tip cuiva este un text. 1349 01:03:09,830 --> 01:03:11,900 Deci, acest lucru pare de fapt destul de simplu. 1350 01:03:11,900 --> 01:03:13,090 >> Să mergem de aici. 1351 01:03:13,090 --> 01:03:15,390 Să ne întoarcem la această pagină aici. 1352 01:03:15,390 --> 01:03:21,030 Să mergem în localhost, și du-te în directorul nostru JavaScript, și du-te la 1353 01:03:21,030 --> 01:03:24,640 dom-0, și aici avem acest formular. 1354 01:03:24,640 --> 01:03:26,550 Deci, asta e aparent toate această pagină nu. 1355 01:03:26,550 --> 01:03:28,740 Ea are un câmp de nume cu un buton Submit. 1356 01:03:28,740 --> 01:03:30,340 Dar eu nu am de gând să utilizați PHP aici. 1357 01:03:30,340 --> 01:03:34,310 Am de gând să fac partea de client tot ca să spunem așa, în JavaScript, după cum urmează. 1358 01:03:34,310 --> 01:03:39,100 >> Observați că am dat într-adevăr numele domeniu de această intrare un unic 1359 01:03:39,100 --> 01:03:42,350 identificator, care vor efectiv economisi-mi ceva timp într-o clipă. 1360 01:03:42,350 --> 01:03:45,480 Și observați am introdus un alt tag-ul în capul pagina mea de web, 1361 01:03:45,480 --> 01:03:46,565  tag-ul. 1362 01:03:46,565 --> 01:03:50,120 >> Deci, este în acest sens că JavaScript este un limbaj de programare client-side. 1363 01:03:50,120 --> 01:03:55,020 În acest caz, la fel ca CSS, am pus l drept în interiorul HTML meu. 1364 01:03:55,020 --> 01:03:58,810 Dar observați am declarat o funcție care arată un pic ca PHP 1365 01:03:58,810 --> 01:04:01,530 punct de vedere sintactic, dar acest lucru este, de fapt JavaScript, pentru că, din nou, că este 1366 01:04:01,530 --> 01:04:03,920 client-side în browser-ul. 1367 01:04:03,920 --> 01:04:07,590 Și să ia o ghici ce acest lucru se întâmplă la face, chiar dacă o parte din sintaxa 1368 01:04:07,590 --> 01:04:09,338 aici este nou. 1369 01:04:09,338 --> 01:04:11,760 >> Audiența: Salut-o pe oricine. 1370 01:04:11,760 --> 01:04:14,020 >> DAVID MALAN: Va salut pentru oricine vizitează această pagină. 1371 01:04:14,020 --> 01:04:15,120 Deci, cum? 1372 01:04:15,120 --> 01:04:18,070 >> Deci observați, se dovedește în JavaScript există o alertă (funcție). 1373 01:04:18,070 --> 01:04:22,840 Aceasta este o funcție foarte fel de trist că într-adevăr doar tinde sa enerveze utilizatorii. 1374 01:04:22,840 --> 01:04:25,440 Nu e una pe care ar trebui să utilizeze într-adevăr de obicei, dar este un rapid și murdar 1375 01:04:25,440 --> 01:04:27,710 mod de fel de imprimare ceva la un utilizator grafică 1376 01:04:27,710 --> 01:04:29,180 interfață, cum ar fi un browser. 1377 01:04:29,180 --> 01:04:31,400 Observați aici că am un șir în ghilimele simple. 1378 01:04:31,400 --> 01:04:36,010 Se pare că, spre deosebire de C, JavaScript poate avea de fapt, să utilizați singur 1379 01:04:36,010 --> 01:04:38,730 citează, și sincer e doar un fel a convenției stilistic între 1380 01:04:38,730 --> 01:04:41,180 JavaScript programatori de a folosi ghilimele simple. 1381 01:04:41,180 --> 01:04:43,750 PHP, ei de fapt au ușor sens diferit. 1382 01:04:43,750 --> 01:04:45,810 Dar de acum, știu doar că asta e singurul motiv. 1383 01:04:45,810 --> 01:04:49,270 Convenția în JavaScript este de multe ori la Folosiți ghilimele simple, dar am putea folosi 1384 01:04:49,270 --> 01:04:50,950 ghilimele duble în ambele locuri. 1385 01:04:50,950 --> 01:04:52,610 >> Deci, acest lucru este interesant. 1386 01:04:52,610 --> 01:04:56,430 Amintesc ultima dată că am avut ca imagine de pe ecran, care a atras un copac 1387 01:04:56,430 --> 01:04:59,720 în cazul în care ați avut nodul HTML, și cap de nod și nodul corp, 1388 01:04:59,720 --> 01:05:00,800 și apoi un text. 1389 01:05:00,800 --> 01:05:04,700 Dar a existat un nod special la foarte de sus pe care am numit documentul. 1390 01:05:04,700 --> 01:05:08,260 Ei bine, se pare că în JavaScript, orice dată când scrie un program în JavaScript 1391 01:05:08,260 --> 01:05:11,040 într-un browser, aveți acces la o variabilă globală special. 1392 01:05:11,040 --> 01:05:14,130 Similar, în spirit de superglobals PHP, acesta este numit în 1393 01:05:14,130 --> 01:05:16,050 toate documentele cu litere mici. 1394 01:05:16,050 --> 01:05:21,480 >> E ca o struct, dar acest struct are, de asemenea, funcții în interiorul vehiculului. 1395 01:05:21,480 --> 01:05:23,790 Deci, un struct C are doar date de obicei. 1396 01:05:23,790 --> 01:05:29,060 Dar un obiect JavaScript ca aceasta punct de vedere tehnic este, de asemenea, are funcții, 1397 01:05:29,060 --> 01:05:31,830 altfel cunoscut ca metode, în interiorul de ea. 1398 01:05:31,830 --> 01:05:35,750 Și puteți apela o funcție în interiorul acest obiect destul de literalmente face sa 1399 01:05:35,750 --> 01:05:39,610 nume, punct, iar apoi numele funcția, sau din nou metoda. 1400 01:05:39,610 --> 01:05:41,160 E doar un sinonim, într-adevăr. 1401 01:05:41,160 --> 01:05:42,450 >> Și ce face această funcție? 1402 01:05:42,450 --> 01:05:43,840 Puteți fel de ghici de la numele său. 1403 01:05:43,840 --> 01:05:45,590 Ia elementul de identitate. 1404 01:05:45,590 --> 01:05:50,040 Deci, acest lucru se întâmplă pentru a căuta în pagina de web, caută acel copac, căutarea 1405 01:05:50,040 --> 01:05:55,210 orice nod, elementul AKA, are o ID-ul unic de citat nume încheiat citatul. 1406 01:05:55,210 --> 01:05:56,560 Și atunci ce am de gând să fac? 1407 01:05:56,560 --> 01:06:00,350 Mă duc pentru a obține valoarea interiorul care nod în arborele, și am de gând 1408 01:06:00,350 --> 01:06:02,580 a spus într-un fel de salut acest nume. 1409 01:06:02,580 --> 01:06:05,360 >> Astfel încât să ia o presupunere, chiar dacă noi nu am văzut încă acest lucru, ceea ce face plus 1410 01:06:05,360 --> 01:06:07,396 înseamnă semnele aici și aici probabil? 1411 01:06:07,396 --> 01:06:08,230 >> Audiența: înlănțui. 1412 01:06:08,230 --> 01:06:09,220 >> DAVID MALAN: înlănțui. 1413 01:06:09,220 --> 01:06:11,290 Drept, și acestea sunt doar un fel de proiectare a deciziilor 1414 01:06:11,290 --> 01:06:12,280 oameni au făcut cu ani în urmă. 1415 01:06:12,280 --> 01:06:15,190 În PHP, te înlănțui lucruri cu puncte. 1416 01:06:15,190 --> 01:06:18,800 În C, sa sari prin mai multe cercuri și apela funcții cum ar fi strcopy () sau 1417 01:06:18,800 --> 01:06:20,600 strcat () sau alte astfel de funcții. 1418 01:06:20,600 --> 01:06:22,060 Dar în JavaScript, utilizați plusuri. 1419 01:06:22,060 --> 01:06:24,770 Deci, aceasta este doar concatenarea trei siruri de caractere - 1420 01:06:24,770 --> 01:06:27,850 Bună ziua, un nume, și apoi un semn de exclamare. 1421 01:06:27,850 --> 01:06:30,390 >> Deci, atunci când și de ce este această funcție numit deși? 1422 01:06:30,390 --> 01:06:33,150 Ei bine, să ia o ghici de la HTML în partea de jos. 1423 01:06:33,150 --> 01:06:35,810 De ce se saluta (), numit, sau atunci când? 1424 01:06:35,810 --> 01:06:39,730 1425 01:06:39,730 --> 01:06:44,030 >> Se pare că, în calitate de cel mai bun am putea spune, pe să prezinte, atunci când se prezintă această formă, 1426 01:06:44,030 --> 01:06:47,200 Am de gând să fac tot ceea ce este în interiorul acestor citate. 1427 01:06:47,200 --> 01:06:50,900 Și, în special, am de gând pentru a apela salut () și apoi să se întoarcă false. 1428 01:06:50,900 --> 01:06:53,090 >> Ei bine, să vedem ce pe net efect aici este în primul rând. 1429 01:06:53,090 --> 01:06:58,290 Deci, lasă-mă să merg mai departe și tastați în, să zicem, Loren, Trimiteti. 1430 01:06:58,290 --> 01:06:59,440 Salut Loren. 1431 01:06:59,440 --> 01:07:02,990 Să vedem dacă poate că aceasta a fost doar o punere în aplicare norocos. 1432 01:07:02,990 --> 01:07:03,200 Nope. 1433 01:07:03,200 --> 01:07:05,990 Asa ca este tastarea afară, indiferent de nume am pus de fapt acolo. 1434 01:07:05,990 --> 01:07:07,970 >> Dar observați ce nu se schimbă. 1435 01:07:07,970 --> 01:07:10,360 URL-ul este încă dom-0.html. 1436 01:07:10,360 --> 01:07:11,820 Nu e nici o register.php. 1437 01:07:11,820 --> 01:07:13,110 Nu e nici un al doilea fișier. 1438 01:07:13,110 --> 01:07:14,930 Nu e nici un atribut acțiune. 1439 01:07:14,930 --> 01:07:19,720 Deci, ce este acest fals returnare probabil faci? 1440 01:07:19,720 --> 01:07:23,660 De ce am sunat salut () și apoi întoarce false, probabil? 1441 01:07:23,660 --> 01:07:26,420 Ce se întâmplă în mod normal, atunci când faceți clic Să prezinte pe un formular care chiar avem 1442 01:07:26,420 --> 01:07:27,854 văzut în ultima săptămână? 1443 01:07:27,854 --> 01:07:29,900 >> Audiența: [inaudibil]. 1444 01:07:29,900 --> 01:07:30,860 >> DAVID MALAN: Se merge undeva, nu? 1445 01:07:30,860 --> 01:07:32,720 Se merge la o anumită adresă URL de destinație. 1446 01:07:32,720 --> 01:07:34,120 Dar nu vreau să se întâmple aici. 1447 01:07:34,120 --> 01:07:37,620 Vreau ca pagina mea web pentru a fi complet dinamic cum ar fi Gmail, în cazul în care odată ce ești 1448 01:07:37,620 --> 01:07:38,650 acolo, stai acolo. 1449 01:07:38,650 --> 01:07:42,900 URL-ul nu se schimbă într-un mod care indică toată pagina este reîncărcare. 1450 01:07:42,900 --> 01:07:46,680 Mai degrabă, eu vreau doar să se schimbe ceva cum ar fi imprimarea ceva 1451 01:07:46,680 --> 01:07:48,320 aici pe ecran. 1452 01:07:48,320 --> 01:07:49,630 >> Ei bine, lasa-ma sa curat asta un pic. 1453 01:07:49,630 --> 01:07:55,370 Lasă-mă să deschid nu dom-0, dar lasă-mă să deschid dom-2. 1454 01:07:55,370 --> 01:07:57,350 Doar ca ai vazut ceva sintaxa aici. 1455 01:07:57,350 --> 01:08:02,080 >> Se pare că ceea ce tocmai am a este folosirea JavaScript crud. 1456 01:08:02,080 --> 01:08:04,420 Deci, acest lucru este cu adevărat limba JavaScript. 1457 01:08:04,420 --> 01:08:07,340 Unii dintre voi s-ar putea ști de o bibliotecă numit jQuery. 1458 01:08:07,340 --> 01:08:09,980 >> Deci jQuery nu este același lucru ca JavaScript. 1459 01:08:09,980 --> 01:08:14,110 E doar o bibliotecă care o foarte inteligent tip a scris și popularizat astfel de 1460 01:08:14,110 --> 01:08:18,100 că aproape toți oamenii din lume acum foloseste jQuery atunci când se utilizează JavaScript. 1461 01:08:18,100 --> 01:08:20,890 Și la prima vedere, sincer, ea arata un pic mai criptic. 1462 01:08:20,890 --> 01:08:24,990 Dar veți găsi, mai ales dacă te duci acolo pentru proiectul final cu web 1463 01:08:24,990 --> 01:08:29,029 dezvoltare, veți găsi că acest curata lucrurile și vă economisește destul de un 1464 01:08:29,029 --> 01:08:30,229 câteva linii de cod. 1465 01:08:30,229 --> 01:08:33,189 >> Așa că hai să privire la modul în care acest formular este de lucru. 1466 01:08:33,189 --> 01:08:35,664 Observați ce am elimina aparent din HTML mea? 1467 01:08:35,664 --> 01:08:38,240 1468 01:08:38,240 --> 01:08:40,630 Nu e nici pe prezenta handler ca să spunem așa. 1469 01:08:40,630 --> 01:08:41,470 Nu e nici un atribut. 1470 01:08:41,470 --> 01:08:43,359 Pentru ca stii, ce Nu-mi place cu adevărat? 1471 01:08:43,359 --> 01:08:45,640 M-am simțit ca și cum am fost în scădere în vechile obiceiuri acolo. 1472 01:08:45,640 --> 01:08:49,340 La fel ca ea a inceput sa se simta desfundat să se întrepătrund atât CSS cu 1473 01:08:49,340 --> 01:08:52,149 HTML, pentru ca esti un fel de a arunca limbi diferite peste tot 1474 01:08:52,149 --> 01:08:56,180 loc, la fel a început să se simtă acest lucru ca un drum prost pentru a merge în jos în cazul în care 1475 01:08:56,180 --> 01:09:01,069 Pun codul JavaScript in interiorul meu HTML, mai degrabă decât de factoring-l afară. 1476 01:09:01,069 --> 01:09:02,279 >> Deci, asta e lecția aici. 1477 01:09:02,279 --> 01:09:05,080 În dom-2.html, eu o factoring afară. 1478 01:09:05,080 --> 01:09:07,399 Și eu fac lucruri ușor diferit. 1479 01:09:07,399 --> 01:09:09,630 Pentru moment, am de gând să val mâinile mele la ceea ce aceasta are într-adevăr 1480 01:09:09,630 --> 01:09:10,590 sub capota. 1481 01:09:10,590 --> 01:09:14,210 Dar, doar pentru acum presupune că primul linie de cod în această bibliotecă 1482 01:09:14,210 --> 01:09:18,170 numit jQuery înseamnă doar atunci când document este gata, faceți următoarele. 1483 01:09:18,170 --> 01:09:20,080 >> Deoarece paginile web pot lua de ceva timp să se încarce. 1484 01:09:20,080 --> 01:09:23,029 S-ar putea fi pe un internet lent conexiune, care poate fi filare 1485 01:09:23,029 --> 01:09:25,290 și filare, și în cele din urmă e încărcată. 1486 01:09:25,290 --> 01:09:29,060 Această linie de cod spune doar așteptați până când toată pagina este gata, documentul 1487 01:09:29,060 --> 01:09:31,189 este gata, înainte de a executa acest cod. 1488 01:09:31,189 --> 01:09:34,390 >> Și acum observați, aceasta este, probabil, cele mai utile în primul rând 1489 01:09:34,390 --> 01:09:36,189 ia de jQuery. 1490 01:09:36,189 --> 01:09:42,140 Această linie de aici este foarte similară în spirit la această linie de mai mult timp aici. 1491 01:09:42,140 --> 01:09:46,920 Întrucât, în cod JavaScript brut, acolo există un obiect global document care 1492 01:09:46,920 --> 01:09:50,460 are o funcție numită getElementById (), cei care au scris 1493 01:09:50,460 --> 01:09:55,720 jQuery simplificat care să spun doar semn dolar, și apoi în interiorul 1494 01:09:55,720 --> 01:10:00,250 paranteze pune două citate, și apoi pune un simbol hash urmat de 1495 01:10:00,250 --> 01:10:02,250 ID-ul unic pe care doriți să apuca. 1496 01:10:02,250 --> 01:10:06,170 Deci, acest lucru este echivalent cu document.getElementById. 1497 01:10:06,170 --> 01:10:11,090 >> Între timp,. Să prezinte înseamnă doar pe prezentarea indiferent de forma esti 1498 01:10:11,090 --> 01:10:14,240 referindu-se la stânga, du-te înainte și executa acest lucru. 1499 01:10:14,240 --> 01:10:16,600 Dar aceasta este acum curiozitatea prea. 1500 01:10:16,600 --> 01:10:19,560 Ce e ciudat despre ceea ce Am subliniat aici? 1501 01:10:19,560 --> 01:10:23,840 1502 01:10:23,840 --> 01:10:28,594 Nu numai ca este un fel de punct de vedere sintactic noi, există, de asemenea, ceva lipsește. 1503 01:10:28,594 --> 01:10:29,558 >> Audiența: E doar numește funcție? 1504 01:10:29,558 --> 01:10:31,970 Nu se numește alertă? 1505 01:10:31,970 --> 01:10:32,440 >> DAVID MALAN: Da. 1506 01:10:32,440 --> 01:10:35,450 Ei bine, așa alert () este în jos aici, pentru a fi corect. 1507 01:10:35,450 --> 01:10:39,520 Dar nu există nici o mențiune a unui nume, ca stii, foo sau 1508 01:10:39,520 --> 01:10:40,980 ceva aici. 1509 01:10:40,980 --> 01:10:43,830 Și într-adevăr, aceasta este una dintre caracteristicile de JavaScript care este destul de 1510 01:10:43,830 --> 01:10:45,370 puternic, dar, de asemenea, destul de nou. 1511 01:10:45,370 --> 01:10:47,460 Și PHP are de fapt aceasta, de asemenea. 1512 01:10:47,460 --> 01:10:49,500 >> Lasă-mă să merg mai departe și face ceva foarte repede. 1513 01:10:49,500 --> 01:10:52,030 Lasă-mă să mergeți mai departe și a pus asta aici. 1514 01:10:52,030 --> 01:10:52,600 Lasă-mă să fac asta. 1515 01:10:52,600 --> 01:10:53,690 Funcție. 1516 01:10:53,690 --> 01:10:56,455 Să numim acest handler (). 1517 01:10:56,455 --> 01:10:58,290 O funcție handler ca să spunem așa. 1518 01:10:58,290 --> 01:11:00,110 Ceva care se ocupă de unele operație. 1519 01:11:00,110 --> 01:11:02,700 Lasă-mă să curețe indentare mea. 1520 01:11:02,700 --> 01:11:04,380 Și a pus asta aici. 1521 01:11:04,380 --> 01:11:06,090 Și a pus asta aici. 1522 01:11:06,090 --> 01:11:06,470 Da. 1523 01:11:06,470 --> 01:11:07,060 OK. 1524 01:11:07,060 --> 01:11:10,300 >> Așa că acum am o functie numita handler (), care nu știu cu adevărat 1525 01:11:10,300 --> 01:11:10,890 ceea ce face încă. 1526 01:11:10,890 --> 01:11:12,710 Ea doar are încă chestia asta. 1527 01:11:12,710 --> 01:11:13,900 Hopa. 1528 01:11:13,900 --> 01:11:15,820 A luat prea mult. 1529 01:11:15,820 --> 01:11:18,490 Să facem asta. 1530 01:11:18,490 --> 01:11:18,990 Bine. 1531 01:11:18,990 --> 01:11:20,240 Scuze. 1532 01:11:20,240 --> 01:11:23,140 1533 01:11:23,140 --> 01:11:23,690 Bine. 1534 01:11:23,690 --> 01:11:24,720 Lasă-mă să fac asta. 1535 01:11:24,720 --> 01:11:25,020 OK. 1536 01:11:25,020 --> 01:11:27,040 Care pare frumos și drept înainte acum. 1537 01:11:27,040 --> 01:11:29,090 Lasă-mă să fac asta. 1538 01:11:29,090 --> 01:11:29,860 Face acest lucru. 1539 01:11:29,860 --> 01:11:30,950 Și OK. 1540 01:11:30,950 --> 01:11:33,080 Deci, acum, hai să punem asta pe aici. 1541 01:11:33,080 --> 01:11:35,840 1542 01:11:35,840 --> 01:11:37,270 Nici o programare mai mult pe zbor. 1543 01:11:37,270 --> 01:11:37,900 OK. 1544 01:11:37,900 --> 01:11:40,000 >> Deci, acum, să ne întoarcem la unde a început povestea. 1545 01:11:40,000 --> 01:11:43,530 Anterior, am spus că această linie aici înseamnă că atunci când documentul este gata, du-te 1546 01:11:43,530 --> 01:11:44,380 înainte și de a face acest lucru. 1547 01:11:44,380 --> 01:11:45,660 Ce vreau să fac? 1548 01:11:45,660 --> 01:11:49,070 Ei bine, în mod special, vreau să merg înainte și de a face următoarele. 1549 01:11:49,070 --> 01:11:53,700 Executa această linie de cod, și apoi ceea ce vreau să faceți este să numim această 1550 01:11:53,700 --> 01:11:56,370 funcționeze atunci când formularul este depus. 1551 01:11:56,370 --> 01:11:57,730 >> Acum, acest lucru este ceea ce este interesant. 1552 01:11:57,730 --> 01:11:59,170 Acest lucru nu este ea însăși o funcție. 1553 01:11:59,170 --> 01:12:02,540 Observați că nu sunt punerea paranteze aici, în mod obișnuit. 1554 01:12:02,540 --> 01:12:06,800 Trec literalmente o funcție numită manipulare () la o altă funcție 1555 01:12:06,800 --> 01:12:10,800 numit prezenta () ca un argument ca deși e ca o variabilă. 1556 01:12:10,800 --> 01:12:14,290 Și aceasta este una dintre caracteristicile JavaScript, este înșiși funcții 1557 01:12:14,290 --> 01:12:15,710 sunt de fapt doar obiecte. 1558 01:12:15,710 --> 01:12:18,350 De fapt, ele sunt de fapt doar variabile de un anumit fel. 1559 01:12:18,350 --> 01:12:21,340 Și dacă numele functiei este handler (), nu există nici un motiv pentru care nu pot 1560 01:12:21,340 --> 01:12:23,390 trece-l într-ca un argument aici. 1561 01:12:23,390 --> 01:12:27,530 Iar acest lucru înseamnă că atunci când forma cu ID-ul de demo este 1562 01:12:27,530 --> 01:12:29,320 a prezentat, numesc această funcție. 1563 01:12:29,320 --> 01:12:32,770 >> Dar acum, dacă am anula toate acestea, atunci de ce am făcut, probabil, 1564 01:12:32,770 --> 01:12:34,850 acum acest moment? 1565 01:12:34,850 --> 01:12:36,840 Ei bine, aceasta este o funcție anonim. 1566 01:12:36,840 --> 01:12:41,080 Pentru că, sincer, am realizat de ce sunt eu deranjează să pierdeți timpul declararea 1567 01:12:41,080 --> 01:12:45,540 Funcția numit handler () doar pentru a apela l în unul și numai un singur loc? 1568 01:12:45,540 --> 01:12:48,640 Dacă nu am nevoie de numele, și eu nu fac trebuie să-l mai mult de un loc, suna 1569 01:12:48,640 --> 01:12:51,200 să pună în aplicare doar funcția chiar în cazul în care am nevoie de ea. 1570 01:12:51,200 --> 01:12:55,190 Și astfel JavaScript și PHP suport ce se numesc functii anonime care 1571 01:12:55,190 --> 01:12:57,900 permiteți-mi să fac exact acest lucru aici. 1572 01:12:57,900 --> 01:12:59,570 >> Dar noi suntem doar zgarierea suprafetei. 1573 01:12:59,570 --> 01:13:02,430 Să tachineze cu doar o pereche Exemple finale aici. 1574 01:13:02,430 --> 01:13:04,600 >> Dacă merg în quote.php. 1575 01:13:04,600 --> 01:13:07,160 1576 01:13:07,160 --> 01:13:11,870 Observați că aceasta este de fapt un PHP funcție, un program de PHP, pe care am scris 1577 01:13:11,870 --> 01:13:15,270 care asteapta un parametru numit HTTP simbol, iar eu pot trece în 1578 01:13:15,270 --> 01:13:16,730 o valoare ca FB. 1579 01:13:16,730 --> 01:13:20,010 Și dacă ne uităm de fapt la sursă cod, acest lucru este interogarea un site web gratuit 1580 01:13:20,010 --> 01:13:23,680 numit Yahoo Finance, ca p-set șapte, și se întoarce la mine 1581 01:13:23,680 --> 01:13:26,580 ceva aparent Formatul cunoscut este JSON - 1582 01:13:26,580 --> 01:13:28,010 JavaScript Object Notation. 1583 01:13:28,010 --> 01:13:28,810 E doar un obiect. 1584 01:13:28,810 --> 01:13:32,500 Observați acolade, ghilimele, colon, și virgule. 1585 01:13:32,500 --> 01:13:34,720 >> Acum, între timp, acest lucru este destul de rece. 1586 01:13:34,720 --> 01:13:38,520 Pentru că pot folosi, probabil, o programare Limba pentru a genera URL-uri 1587 01:13:38,520 --> 01:13:40,370 care arata ca aceasta dinamic, dreapta? 1588 01:13:40,370 --> 01:13:43,340 Eu pot schimba acest lucru la Google și mă întorc Google 1589 01:13:43,340 --> 01:13:47,930 prețul de stoc de $ 1,017.55. 1590 01:13:47,930 --> 01:13:49,640 Așa că haideți să vedem dacă nu putem folosi asta acum. 1591 01:13:49,640 --> 01:13:56,590 >> Lasă-mă să merg la Ajax-0 aici, care arată în felul următor. 1592 01:13:56,590 --> 01:13:59,750 E doar un site care are un formular cu un buton. 1593 01:13:59,750 --> 01:14:05,860 Lasă-mă aici merge mai departe și de tip în YHOO pentru simbol de acțiuni Yahoo, faceți clic pe Get 1594 01:14:05,860 --> 01:14:10,530 Citat, iar acum observăm am ajuns o alertă cu 32.86. 1595 01:14:10,530 --> 01:14:14,050 >> Lasă-mă să merg de fapt la o versiune crescator de această pagină, versiunea a doua, și 1596 01:14:14,050 --> 01:14:17,530 Tipul de la, să zicem Microsoft, MSFT. 1597 01:14:17,530 --> 01:14:18,410 Cotatia. 1598 01:14:18,410 --> 01:14:19,850 Și acum observați, nu alertă. 1599 01:14:19,850 --> 01:14:22,770 Observați unde se spune preț urmează să fie stabilită? 1600 01:14:22,770 --> 01:14:27,060 Există mai simplă de exemple care aluzii la ceea ce Gchat, și Facebook 1601 01:14:27,060 --> 01:14:30,070 Chat-ul, și Gmail, și alte astfel de site-uri fac de fapt, 1602 01:14:30,070 --> 01:14:31,290 schimba pagina de web. 1603 01:14:31,290 --> 01:14:31,800 >> Observa acest lucru. 1604 01:14:31,800 --> 01:14:33,120 Permiteți-mi să reîncărcați pagina. 1605 01:14:33,120 --> 01:14:35,080 Lasă-mă să deschid inspectorul Chrome. 1606 01:14:35,080 --> 01:14:36,890 Lasă-mă să merg la elementele fila aici. 1607 01:14:36,890 --> 01:14:42,310 Acum, observa dacă zoom-ul în jos aici și deschide asta, observă că acest lucru este meu 1608 01:14:42,310 --> 01:14:44,500 HTML DOM - modelul meu Document Object. 1609 01:14:44,500 --> 01:14:45,920 Aceasta este HTML meu. 1610 01:14:45,920 --> 01:14:48,750 Dar acum observa, chiar dacă se va pentru a fi un pic cam greu să-l văd în ambele 1611 01:14:48,750 --> 01:14:52,080 locuri deodată, dacă tastați în FB aici, ma uit la partea de jos 1612 01:14:52,080 --> 01:14:54,110 a ecranului numai. 1613 01:14:54,110 --> 01:14:57,720 >> Este de fapt schimbare HTML meu din mers. 1614 01:14:57,720 --> 01:15:01,670 Și face acest lucru destul de simplu de a face ceva de genul asta. 1615 01:15:01,670 --> 01:15:06,800 Dacă am deschide Ajax-2, observa implementarea ceva la fel de sexy ca 1616 01:15:06,800 --> 01:15:09,560 că, deși e destul de urât, dar la fel de sofisticat ca acea 1617 01:15:09,560 --> 01:15:11,910 funcțional, acesta are unele HTML în partea de jos. 1618 01:15:11,910 --> 01:15:13,810 Dar observa am folosit pentru a eticheta. 1619 01:15:13,810 --> 01:15:16,640 Noi nu am folosit acest lucru înainte, dar acest lucru este ca o, dar ea nu forțează 1620 01:15:16,640 --> 01:15:17,840 totul pe o linie nouă. 1621 01:15:17,840 --> 01:15:20,830 Se face doar o regiune dreptunghiulară pe aceeași linie, în esență. 1622 01:15:20,830 --> 01:15:22,870 >> Observați că i-am dat un ID de preț. 1623 01:15:22,870 --> 01:15:26,800 Și se pare că, prin utilizarea aceluiași JavaScript bibliotecă, am o funcție 1624 01:15:26,800 --> 01:15:30,440 numit citat (), care se numește ori de câte ori formularul este depus. 1625 01:15:30,440 --> 01:15:31,800 Și ceea ce fac este aceasta. 1626 01:15:31,800 --> 01:15:35,730 Am declararea unei variabile în JavaScript numit URL-ul, salvarea valoarea 1627 01:15:35,730 --> 01:15:38,650 quote.php? simbol =. 1628 01:15:38,650 --> 01:15:44,220 Cu alte cuvinte, eu însumi am început pentru a pregăti o cerere HTTP, și apoi 1629 01:15:44,220 --> 01:15:49,250 Sunt concatenarea pe care, cu un plus oricare ar fi elementul cu ID-ul de 1630 01:15:49,250 --> 01:15:54,190 de simbol, care a observat este faptul că câmpul din dreapta jos aici textul. 1631 01:15:54,190 --> 01:15:56,630 Deci, doar ca am avut forme în trecut. 1632 01:15:56,630 --> 01:16:01,450 >> Și apoi se dovedește în jQuery, dacă te apel. val (), care solicită de un val 1633 01:16:01,450 --> 01:16:05,900 Funcția, o funcție de valoare, care devine indiferent de utilizatorul a tastat inch 1634 01:16:05,900 --> 01:16:08,920 Și apoi toate de trafic de rețea că se întâmplă este aceasta. 1635 01:16:08,920 --> 01:16:11,230 $. GetJSON. 1636 01:16:11,230 --> 01:16:13,720 >> Și, ca o paranteza, semnul dolar este doar o notație prescurtare. 1637 01:16:13,720 --> 01:16:16,860 Este într-adevăr jQuery.getJSON. 1638 01:16:16,860 --> 01:16:21,520 Du-mă la JSON de la această adresă URL, și când cererea revine, numesc acest 1639 01:16:21,520 --> 01:16:26,550 funcție și să treacă în ca argument indiferent de s-au întors de la server. 1640 01:16:26,550 --> 01:16:31,205 >> Deci, cu alte cuvinte, dacă mă întorc la browser-ul, și mă întorc la quote.php, 1641 01:16:31,205 --> 01:16:35,590 ceea ce browser-ul meu este de a face este obtinerea această bucată de date. 1642 01:16:35,590 --> 01:16:38,930 Și când mă duc la această pagină web aici, observa dacă în loc să mergem la rețeaua de 1643 01:16:38,930 --> 01:16:43,820 tab și clar-l, și apoi tastați ceva de genul GOOG pentru Google și te 1644 01:16:43,820 --> 01:16:46,340 Citat, observa pagina nu sa schimbat. 1645 01:16:46,340 --> 01:16:50,990 Dar o solicitare HTTP a fost făcut, și ce s-au întors aici, dacă ne uităm la 1646 01:16:50,990 --> 01:16:56,130 Răspunsul este o grămadă de JSON că ne-am accesat în cele din urmă cu 1647 01:16:56,130 --> 01:16:58,070 această linie simplu aici. 1648 01:16:58,070 --> 01:17:00,150 >> De date este ceea ce a fost primit de la server. 1649 01:17:00,150 --> 01:17:02,120 Prețul este numele cheie îmi pasă. 1650 01:17:02,120 --> 01:17:05,230 Astfel data.price îmi dă asta. 1651 01:17:05,230 --> 01:17:07,540 >> Acum între timp, și această este ultimul exemplu. 1652 01:17:07,540 --> 01:17:09,280 Puteți face încă mai mult cu pagina. 1653 01:17:09,280 --> 01:17:12,440 Unul de fapt, bine doi. 1654 01:17:12,440 --> 01:17:14,780 Ne poate aduce înapoi tag-ul, dacă vă amintiți acest lucru. 1655 01:17:14,780 --> 01:17:15,850 Asta-i JavaScript. 1656 01:17:15,850 --> 01:17:17,110 Putem face asta. 1657 01:17:17,110 --> 01:17:17,690 Foarte interesant. 1658 01:17:17,690 --> 01:17:18,800 Vom lăsa ca pe un Cliffhanger. 1659 01:17:18,800 --> 01:17:21,590 >> Dar mai tulburator, puteți fac lucruri de genul asta. 1660 01:17:21,590 --> 01:17:25,940 Dacă mă duc să-geolocalizare 1, se dovedește că Chrome știe că suntem la 1661 01:17:25,940 --> 01:17:30,672 longitudine latitudine 42.37. -71.10. 1662 01:17:30,672 --> 01:17:32,940 Deci, există chiar mai mult acolo la dispoziția dumneavoastră. 1663 01:17:32,940 --> 01:17:34,290 Dar mai mult pe faptul că săptămâna viitoare. 1664 01:17:34,290 --> 01:17:35,540 Ne vedem luni. 1665 01:17:35,540 --> 01:17:37,558