>> DAVID Malan: U redu.
Ovo je CS50, a to je Kraj tjedna devet.
Prošlo je više od vrtlog u posljednjih nekoliko dana.
A problema postaviti sedam, ako ste koljena duboko u njemu, shvaćam da je sasvim
Malo novo što je unutra.
No, da vidimo možemo li komad sve zajedno ovdje ukratko
prije toga skreće off u još drugi smjer i vidim
gdje drugdje možemo ići.
>> Tako je do sada, mi smo govorili o HTML-u.
Razgovarali smo o CSS.
Razgovarali smo o PHP.
Počeli ste doživjeti SQL.
Danas ćemo razgovarati malo o JavaScript.
No, kako se sve to u raskoraku jezici idu zajedno?
>> Tako smo razgovarali prošlog tjedna o tome Ideja ima poslužitelj.
Pa neka je samo nacrtati ovu pravokutnik kao web server ovdje.
I web poslužitelja služi sigurno datoteke.
A neki od tih datoteka može biti HTML datoteke.
Dakle, jedna od stvari koje web poslužitelj može ispljunuti može biti datoteka koja
samo mi ćemo privući ovako sadrži neke HTML.
Dakle, laički rečeno, ono što nema HTML neka vam je činiti?
>> PUBLIKA: Page izgledati lijepo.
>> DAVID Malan: OK, bi stranica izgledati lijepo, iako mislim da sam dokazao
da je drugačije.
Dakle, HTML ne dopustiti da stavi van stranice strukturno, a to vam omogućuje da se
svojevrsni estetski obilježavati stranicu, obilježavati statički sadržaj, tako da
Možete ga tada vidjeli s web pregledniku.
>> No, to je ključ.
To je statički sadržaj.
Možete ga napisati, da ga spasi, a onda ga brod.
I web poslužitelja tada služi je do svoje posjetitelje.
>> Ali mi stilizira stvari koriste različite jezik uopce.
Počeli smo koristiti stil atribut o određenim oznakama.
A stil atribut stavimo stvari kao što su veličina fonta i boje.
I vjerojatno ste počele otkrivati, ili će uskoro za konačni
projekti potencijalno, ali druga svojstva koja možete koristiti u CSS.
I tako laički rečeno, ono što Stvarno onda ne CSS učiniti?
Oni su samo njihovi primjeri.
Što se ti to dopustiti HTML ne čini se da od onoga
koje smo dosad vidjeli?
>> PUBLIKA: Definirajte stilove od sebe.
>> DAVID Malan: Definiraj stilove po sebi.
Dakle definirati stvari poput klase kao i vi možda ste naišli, ili jedinstveno
identificirati čvorove u dokumentu, tako da ih možete stilizira.
No, točnije, ja bih rekao da CSS stvarno vam omogućuje da se stvari
posljednji kilometar i omogućuje vam da odredite koliko točnije estetika,
dok je HTML za najveći dio omogućuje što strukturirati svoje stranice.
>> I premda postoje neke zadane, kao što smo vidjeli oznaku za
tarifni tag, koji grubo rečeno napravio stvari velika i hrabra.
To je prilično generički definicija od krpa - veliki i hrabar.
Što font je to?
Koje boje je to?
Kako bold je to?
I CSS vam omogućuje preciznije Tune takve stvari.
Kao i izgleda, kao što neki od koje ste vidjeli.
>> I iskreno, CSS je bitna od neredu jeziku.
To je vrlo moćan u koje možete napraviti doslovno bilo koju web stranicu da ste
vidjeti na webu danas s njim, ali to je vrsta boli u vratu.
A neki od vas su se zalupila glavu na zidovima već samo raditi
nešto glupo kao centar izbornika na Problem postaviti sedam, ako ste došli do
ta točka već.
>> Ali shvatite, one stvari se lakše s vremenom.
Možete početi primjećivati ​​obrasce.
I opet, Google će biti tvoj prijatelj za razne načine na koje možete
rješavanje ove vrste problema.
>> I usudio bih se reći s CSS, HTML i više Općenito, možete riješiti probleme u
mnogo više načina, od kojih su svi mogli vrlo dobro biti točna, nego što bi
u nešto poput C, čak i Sada PHP ili JavaScript.
Postoje samo mnogo različitih načina da postave stvari.
>> No, ovaj je počeo da se neuredan, rekao mi.
Samo vrsta commingling svoj HTML i Vaš CSS sa stilom atribut je
Malo neuredan.
I tako smo, umjesto rekao, svojevrsni apstraktno gledano, da li bi trebalo
barem početi faktor iz svog CSS vjerojatno.
Nije tvoj stil atribute, ali barem koristite stil oznaku unutar onoga što
dio web stranice?
>> Ivanković: voditelj.
>> DAVID Malan: U glavi.
Do sada smo imali samo naslov do postoje, ali također možete dodati stil
označiti, a možete staviti svoj CSS grubo gledano prema vrhu stranice.
No, onda mi je uzeo stvari jedan korak dalje i mi uzete da se više
u zasebnu datoteku.
>> I tako su te dvije datoteke su bile nekako povezana.
I doista je bilo tag koji je to učinio.
I ono što je bio jedan od sveobuhvatnu motivacije za faktoring našu CSS
sve više?
>> PUBLIKA: višekratnog.
>> DAVID Malan: višekratnog.
Točno?
Možda ste vidjeli u p-set sedam već da puno stranica,
Kupnja stranica, stranica prodaje, portfolio stranica, vjerojatno
strukturiran nešto slično.
Postoji CS50 financije logo na vrhu osim ako ste odlučili to promijeniti.
Postoji footer na dnu stranice.
I CSS vam omogućuje zatim ga uzeti iz je u zasebnu datoteku, tako da ako
Želite li promijeniti nešto na globalnoj razini preko svoje cijele stranice, možete stvarno
samo ga promijeniti na jednom mjestu.
>> No, tu je cijenu koju plaćate potencijalno od strane nakon uzete iz
CSS iz mog HTML datoteke u zasebne podnijeti ga usporedbe s
tag, što smo vidjeli u ponedjeljak.
Što bi moglo biti od minus ovo?
Osvrčući se prije tjedan dana, kada smo govori o HTTP i TCP / IP i kako
internet funkcionira.
Nešto ovamo?
>> Publika: Potrebno je više vremena.
>> DAVID Malan: Potrebno je više vremena.
Zašto?
>> PUBLIKA: [nečujan].
>> DAVID Malan: Da.
Tako da vjerojatno ima još malo vremena.
Budući da je jedan, CSS je očito ne u istoj datoteci.
Tako sada imate, kako bi ne jedan, nego dva zahtjeva.
I svaki od tih zahtjeva, kao što smo vidjeli u Chrome u tzv inspektora,
a mi smo gledali na kartici mreže, svaka od tih datoteka zahtijeva jedan HTTP
Zahtjev, koji smo vidjeli traje neki iznos od vrijeme.
Sad, možda to nije puno.
Možda je to samo 20 milisekundi.
Možda je to 200 milisekundi.
>> Ali mislim o stranici kao što su Facebook, ili CNN ili Google, koji su mnogo
veći od primjera koje smo pogledao dosad.
Te stranice mogu imati desetke datoteka, od kojih svaki može zahtijevati
preuzimanje datoteke.
Dakle, stvari mogu potencijalno početi usporiti.
>> A pogotovo ovih dana kada smo svi imaju mobitele u džepovima i
sporiji internet veze, da se pričekati još nekoliko milisekundi, malo
više milisekundi za dodatni slika zapravo može biti spor.
Latencija je riječ koja opisuje vrsta čeka da imate da vam
doživjeti kada čeka neki dio informacije.
>> No, tu je naopako.
Dakle, to nije sve vrsta -
to je zapravo malo klackalicu ovdje.
Negativni sada, ali ono što mogu učiniti preglednici ako su pametni, kako bi se izbjegla
moraju zatražiti istu styles.css podnijeti opet može biti učiniti što?
>> Cache ga.
Dakle caching -
C-C-H-E -
općenito znači ovdje samo spasiti datoteku koju je zatražio prvi put, i
zatim provjerite cache za to.
Provjerite da ste svojevrsni spremnik, i ako već imate
kopija styles.css, čak i ako neka druga stranica u p-set, ili bilo koju web stranicu,
zamolbe opet, samo da daju Korisnik taj isti spremljena kopija.
Ne smetaju ga traži.
>> Negativni postoji, iako, kao što neki od vas su se spotaknuo u p-seta.
Ako napravite promjene na poslužitelju i idete natrag u pregledniku, a vi
reload, ponekad preglednik ne ti milost i ne smetaju
ponovno skidanje vaš styles.css sliku jer, hajde, što su izgledi
da su ti stilovi koji Facebook koristi će se promijeniti sata u sat ili
iz dana u dan?
To je prilično niska.
Oni se mogu mijenjati tijekom vremena, ali ne i po minuti ili po satu.
>> Dakle trik, samo za Vašu informaciju kada radiš web razvoj, često se držite
pomak ključ za primjer, a zatim kliknite reload u vašem pregledniku, te da će
obično reći preglednika reload sve, čak i ako već imate
je u cache.
Pa opet, upsides i mane, ali sve od njih
konačnici dizajn odluke.
>> Tako sada, nismo baš završiti priču ovdje.
Ako ja sada ići natrag i naprijed i natrag i natrag, počeli smo uvesti ne samo
HTML, ali PHP.
Dakle, laički rečeno, ono što nema PHP činimo?
>> PUBLIKA: [nečujan].
>> DAVID Malan: Što je to?
>> PUBLIKA: Uvesti logiku u kodu.
>> DAVID Malan: Da, uvođenje Logika u kodu.
Dakle, to je istina programski jezik s petlje, i varijable i
funkcije, i uvjete, a sve stvari koje smo koristili put natrag
kada je od nule.
I PHP, vidjeli smo, može se koristiti bilo na zapovjednoj liniji - to
ne moraju imati veze s weba, iako je to
zapravo svoje korijene i što je sklon biti dobar u i pogodan za -
, ali možete koristiti PHP samo po prirodi od činjenice da je otisak ()
Funkcija i printf () funkciju, ili echo () funkcija.
Postoji grozdovima načina na koje može ispisati tekst s PHP.
>> Dakle, možete koristiti ovaj program jezik za izlaz točno
o čemu smo razgovarali o tome prije.
Ti dinamički može generirati Vaš HTML.
Možda nisu svi za to.
Možda ste hard code stvari, kao što su header i footer, i logo,
i tvoj stil listova, i sve to.
No, za tako nešto p-set sedam, gdje ste manipulira dionice i
pokazujući korisnika portfelja, što je će se dinamički mijenjati, što bi moglo
sigurno koristiti PHP i logiku koju pridaje ti kao programski jezik za
izlazni dinamički podskupa stranice.
>> Dakle, kada govorimo o dinamičkim web stranicama, ili web programiranja, to je
ono što stvarno govoriš.
Korištenje jezika kao PHP ili stvari zove Python, ili Ruby, ili Java, ili
Još drugim jezicima, kako bi ispitivanje baze podataka Često, ili neki drugi server, te
zatim dinamički ispljunuti HTML.
>> Sada je krajnji rezultat, kao na stranu, je da HTML većine web stranica,
uključujući vaš p-set sedam, vjerojatno će biti veliki nered, ako
pogledate izvoru koda u pregledniku.
To nije velika stvar.
U ovom trenutku, kada nam je stalo stil, mi je stalo
stvari koje ste napisali.
Nećemo brinuti o stvarima da je ono što vaš kod izlaza.
Dakle, ne brinite o razvedenosti Ovdje ako je PHP koji je
zapravo izlaza stvari.
Uostalom, preglednik nije briga, i ljudska neće biti baza
na izvoru svejedno.
Mi osoblje, primjerice, bi se gleda na PHP.
>> Pa neka mi dati brzi primjer sada zašto drugi ne bi to moglo biti korisno.
Pa iskreno, ja se ne mogu sjetiti zadnji put Vrijeme Koristio sam C riješiti problem u
stvarni svijet.
To je vjerojatno bio u srednjoj školi, kada Morao sam koristiti jezik koji
bio je prilično niska razina i dao mi prilika da učinite nešto vrlo visoku
obavlja se stvarno spasiti što više CPU ciklusima kao što sam mogao, u velikom dijelu
jer sam bio koristeći velike skupove podataka, i svaki CPU ciklusa broje.
I iskreno, čak i na stvari kao što su telefoni ovih dana i drugih uređaja
gdje ne sasvim imati koliko memorije i ne sasvim imati
koliko procesora, korištenjem brže jezika je još uvijek privlačan.
>> No, u stvarnom svijetu, kad se samo želite baciti neki program zajedno
analizirati neke podatke, ili ste prikupili cijela hrpa registracija za
neki student grupa i želite vrlo brzo automatizirati slanje e-pošte
jedan po jedan na svakoga od onih registracije, vi ćete posegnuti za
jezik više razine od C da se tako izrazim.
Nešto poput PHP ili Python ili Ruby, ili pola tuceta drugih koje postoje
ovih dana.
No, ta tri su vjerojatno najviše trendy upravo sada.
>> I što to znači da možete otvoriti do uređivač teksta kao što je gedit ili
najviše bilo što drugo i onda samo početak pisanja koda, bez brige
o sastavljanju, bez stvarno brinuti o upravljanje memorijom,
imajući na umu da iako malo aljkavost na kraju će se vratiti
ugristi ako skup podataka dobiva veće ili problem dobiva veliki.
No, što to znači za nam je sljedeći.
>> Pustite me da idem naprijed i pokrenuti Speller od problema postaviti šest.
Dakle, ovo je moj provedba trie-based koji sam koristio na veliko
odbora u kojima nisam izvodi tako dobro.
Vratit ćemo se u tjedan dana i ponovno onih koji nisu završili na vrhu
velika ploča na našem zadnjem predavanju.
No, za sada, dopustite mi da ide naprijed i samo pokrenuti moje rješenje u tekstu, a mi ćemo učiniti
King James Biblije, a ovdje mi ići.
>> Dakle, to su sve navodno pogrešno napisane riječi iz
King James Bible.
I moja je provedba pola sekunde ukupno.
Dakle, nije loše o tome Posebno računalo.
Ali mislim o tome koliko koda sam morao napisati.
Razmislite koliko je kod vas morao napisati.
Razmislite koliko sati ste proveli u D-dvorana ili vaša spavaonica ili gdje god
zapravo kodiranje se da je rješenje.
>> Pa, ako sam zapravo imaju višu razinu jezik poput PHP, uzeti na znanje
ono što ja mogu učiniti ovdje.
Prvo, pretpostavimo da je to umjesto distribucija koda.
To je spis pod nazivom bukvar.
To je dostupan kao dio današnjih Raspodjela code.
A ja ću mahati ruku na većini pojedinosti, ali to je zapravo
Zanimljiv je primjer kako možda luka jezik
kao C preko za PHP.
Doslovno sam otvorio dvije tekstualne prozore, jedan s mojim C verziji speller.c,
a ja tek počeo prevodeći ga u mom glavu na PHP i tipkanje pomoću
najbliži ekvivalent funkcije.
>> Dakle, neke od tih stvari su drugačije.
Vidjeli smo posljednji put da PHP ne koristi uključiti u sasvim isti način.
Ona koristi zahtijevaju obično, iako su zaista postoji.
Definirajte je malo drugačiji od # Define u C, ali to je
Kako ćemo napraviti konstantu.
$ Argc ispada postoji u PHP-u, pa vidjeli smo to i prije.
Ovo su samo varijable, svi koje počinju s znakove dolara.
Sjetite se to su samo hrpa lebdenja bodova.
>> Dakle, ne duljimo, na čemu se prođite kroz to, ako znatiželjni, ovo je
Gotovo linija-za-line pretvorba C verzija speller.c u PHP-u.
A što bi to ponoviti za pola tuceta drugih jezika.
>> No, ono što je zanimljivo je to.
Ili ono što je iskreno obeshrabrujuće je to.
Pustite me da idem naprijed i upisati about dictionary.php, i tvrdnja da sam
ići naprijed i ponovno provesti Problem postaviti šest ovdje.
>> Dakle, neka prvi predložio da se u to file, koji će se provoditi u
PHP, pa neka mi otvoriti moje oznake kao što je to.
Dopustite mi da se daju globalni varijabla, veličina $ dobiva nulu.
I ja ću dati Osobno hash tablicu.
Ja ću koristiti hash tablicu za tu stvar.
Kako mogu proglasiti hash tablice u PHP-u?
Gotovo.
OK.
>> Tako otvorena zagrada u neposrednoj blizini zagrada predstavlja ono što je u PHP-u, kao što smo vidjeli?
Niz, ali niz koji bi biti asocijativni niz.
Asocijativno polje je struktura podataka koja
suradnika tipke sa vrijednostima.
>> Sada u najjednostavniji brojčano indeksirana polje, te tipke su ono?
Nula, jedan, dva, tri, zar ne?
Stara škola stvari natrag iz C. No, to može također biti nizovi poput Foo, i bara,
ili Maxwell, ili bilo koji takav niz.
Dakle, ja mogu utjecati da u samo nekoliko trenutaka.
>> Dopustite mi da ide naprijed i proglasiti funkcija kao što su -
neka je to opterećenje (prvo).
Dakle funkcija opterećenja ().
I PHP je malo drugačija u tome doslovno upišete funkciju, ali
ne upisati povratnu vrstu.
Ja ću ići naprijed i reći da load () funkcija treba uzeti u
Argument $ rječnik, samo kao što je C verzija učinio.
Radim to iz memorije.
>> A ja predlažem da sam će to učiniti.
Ja sam jednostavno učiniti foreach.
Ja ću pozvati funkciju nazvanu datoteku (), prolazi u ime koje
podnijeti, što je promjenjiva $ Rječnik kao $ riječ.
A onda je unutar moja za petlje ovdje, ja sam ići naprijed i pohraniti u mom
$ $ Tablica koja se pročuje istina.
Gotovo.
Oh, čekaj.
Gotovo.
OK.
>> To je opterećenje () funkcija kažu u PHP-u.
Sada, zašto to rade?
I ja sam vrsta varanja ovdje.
>> Dakle, jedan, foreach smo vidjeli Kratko zadnji put.
To samo znači da se može ponoviti više Niz bez gnjavi s i
i n i plus plus, i sve to.
Rječnik je, naravno, ime datoteke, nešto kao veliki ili mali, dva
rječnici koriste smo posljednji put.
Datoteka je funkcija koja otvara tekst file, navodi se u red po red, i
Ruke te natrag veliki niz, svaki od elemenata čija je je
linija iz tog spisa.
Dakle, to je kombinacija fopen, a fread, a while petlja, a fclose,
i sve to.
Konačno, što je riječ samo znači da je promjenjiva ću imati pristup
na svakoj iteraciji u ovoj petlji.
>> Dakle, ukratko, to je jedan brod ovdje znači otvoriti datoteku čije ime je u
rječnik, promjenjiva, ponoviti tijekom to redak po redak, a svaki put kada se
linija, pohraniti u varijablu riječi, a zatim učinite nešto s riječju.
Što želim učiniti?
Želim staviti riječi u moj hash tablicu.
>> Pa, ja mogu staviti nešto u mom hash tablicu kao u C
uglatoj zagradi.
To je naziv za moj hash tablicu.
Idem indeks u tom mljeveno meso Tablica na ovoj lokaciji.
Dakle, ne zagrada nula, ne zagrada jedan.
Nosač quote završiti citat nešto, što god ta riječ.
I baš kao što bi mogli imati u svom hash tablicu rad trie, samo trgovina
učinkovito Boolean, implicitno ili eksplicitno.
Gotovo.
Ja spremanje vrijednost true.
>> Sada postoji nekoliko stvari Ja sam rezanje uglova ovdje.
Tehnički, tamo će biti neugodno nova linija, / n, na kraju
svaki od tih riječi.
Tako sam vjerojatno trebao nazvati PHP funkciju zove kotlet (), koja će se
doslovno nasjeckajte koji off.
A ja zapravo trebaju napraviti jednu drugu stvar.
Vjerojatno bih trebao povećavati veličinu na svakoj iteracija, pa sam praćenje
na globalnoj razini što je to.
I iskreno, a to je jedan od gluplje aspekti PHP, ako ste
koristeći globalnu varijablu, trebate izričito reći da ste.
Tako da ću se zapravo tip u globalnom $ Veličina, globalni $ stol, a sada
moja je funkcija završena.
>> Pa nije baš tako jednostavno kao i prije, ali Vjerojatno je manje vremena nego C
verzija, možda?
OK.
>> Dakle, sada ćemo napraviti ček () funkciju.
Da vidimo je li to barem uzeo sati na kraju da nas je odveo u C. Dakle
neka mi ići naprijed i proglasiti provjeriti kao funkcija.
Uzeti u argument riječi, što je će doći iz Speller.
A ja sam samo ide da biste provjerili Sljedeća varijabla isset, stolni
Nosač strtolower riječi -
neka je ravnotežu sve moje zagradi -
zatim se vratiti točno.
Drugo -
to je zapravo bilo teško dio ovog programa.
Drugo, vrati false.
Gotovo.
To je provjera ().
>> Sada, zašto to rade?
Pa, jedan prošao sam u riječi, što je niz.
Dvije, da provjeravam unutar mljeveno meso stol, koji se zove $ stol.
Ja sam ga tjeraju u mala slova pozivom funkcija vrlo slični tolower () u
C, ali to ne cijelu riječ, Ne jedan znak.
A ako je to postavljeno, drugim riječima postoji vrijednost je postavljena, odnosno
ako je to točno, onda da, to je riječ.
Zato sam ga stavio tamo s opterećenjem ().
A ako ne, ja ću se vratiti false.
>> Sada su ostali jednostavno.
Veličina Funkcija (), kako mogu to učiniti?
Ja u biti to povratak $ veličinu.
Ali ja tehnički trebaju učiniti ovu neugodnu stvar.
A zapravo se čuje, sam rezao jedan kutak previše.
Ja stvarno trebate učiniti globalno $ stol.
>> No, to se, rekao je, iskrcati).
Pražnjenje () je nevjerojatna.
Funkcija prebacivanja ().
Kako želim provesti iskrcati ()?
Gotovo.
OK.
>> Dakle rasteretiti (), upravljanje memorijom je u potpunosti brine za vas u
nešto poput PHP i puno od više razine jezika.
Dakle, ovo je nevjerojatno.
Kao i zašto dovraga smo proveli prošlost Osam plus tjedna na C pisanja
očito jako sporo, doista vrijeme konzumiranje problemi s desecima sati
rada pod pojasevi?
>> Pa, kao prvo, to može raditi u redu za male programe.
To svakako ubrzala moj vrijeme razvoja.
No, da vidimo što će se dogoditi u stvarnom svijetu.
>> Pusti me u ovaj imenik u prozor terminala.
Tu je bukvar.
I primijetiti kako je u stranu, a možda naišli ovo u problemu postaviti
šest ili sedam set problema.
Vi ne striktno moraju završiti PHP datoteke s nastavcima. php.
Ako ste stavili liniju kao onaj prvi na samog vrha, to je posebna linija
sintakse koja u osnovi znači pronaći Program se zove PHP i koristiti ga
interpretirati ovu sliku.
Tako da sada nitko ne zna kako Ja sam trčanje PHP programa.
Mogu ga pokrenuti baš kao da je bili nešto sastavio u C.
>> No, ovdje je stvar.
Zapravo, hajdemo to učiniti opet.
Dropbox/pset6 /.
Tu je bukvar.
OK, 0.44 sekundi.
On je dobio brže ovaj put.
>> Sada idemo u PHP verziji.
Nice touch.
No, samo mislim kako je puno vremena Spasio sam na radno vrijeme.
OK.
>> Dakle 3.59 sekundi, što je zapravo ne zvuči točno bilo.
Ali to je zato što ne duljimo, kada ste ispis ogroman
stvari na ekran, da Sama usporava stvari dolje.
Ono što je stvarno je CPU u Uređaj je 3,59 sekundi, u
kontrast na C, koja je 0,44 sekunde nedavno.
To je doista redoslijed Magnituda drugačije.
>> Pa gdje je ta cijena dolazi?
Zašto je to tako puno sporije?
Zašto PHP izvesti tako loše?
Danielle?
>> PUBLIKA: Vi zapravo nije koristiti hash tablicu.
>> DAVID Malan: Nisam stvarno koristiti hash tablicu.
Tako nekako sam učinio.
Tako da je asocijativni niz.
Najvjerojatnije, ako su ljudi na PHP su jako pametno, oni koriste ispod
napa stvarna hash tablicu provodi u nešto poput C ili C + +.
No.
Da.
>> PUBLIKA: [nečujan].
>> DAVID Malan: Da.
Dakle, svaka od funkcija sada sam napisao - Zapravo, može li se reći da još jednom
malo glasnije?
>> Ivanković: Svaka od funkcija koje ste uključeni ima puno više puna
kapacitet od -
>> DAVID Malan: Dakle, to je vrlo istinito.
Tu je puno više iznad glave da smo Stvarno ne vidim fokusirajući se samo na
dictionary.php, što sam upravo napisao.
Za razliku od toga, tu je cijeli tumač ide u pozadini.
Doista, kad sam vodio ovaj program, to nije bio pokrenut sastaviti jedinica i nula
dizajniran za moj Intel procesora.
Umjesto toga, on je trčao redak po redak PHP kod koji izgleda baš
kao što smo ga upisali.
I tako svaki put kada koristite tumačiti jezik, što
zapravo plaćaju tu cijenu.
To će potrajati neko vrijeme za čitanje Vaš sliku od vrha do dna, lijevo
Pravo, a zatim izvršiti svaki linija opet i opet.
>> Sada je u stvarnosti, pogotovo na webu, zapravo možete ubrzati ovaj postupak
by caching rezultate PHP kod se interpretira.
I to ima smisla na webu, jer Ako niste jedan korisnik kao
ja ovdje, ali 1.000 ili 10.000 korisnika, a zatim možda prvi put da je datoteka
pristupljeno je spor, ali su nakon toga to je puno brže.
>> Ali ovo previše, opet, je trade off.
A za nešto poput podacima istraživačke postaviti, ili čak nešto veliko poput
to, korisnici će na kraju početi osjećati da usporavanje.
>> Tako je u kratkom, tumači jezici su jako u modi, vrlo popularan, a
iskreno, vjerojatno su ti jezici treba posegnuti za kada rješavanju problema
nakon CS50.
Ali shvatite koliko ste stvarno uzimanje zdravo za gotovo ispod haube
stvarno ti posljednjih nekoliko tjedana u mljeveno meso tablice, i drveće, i napad,
koji se koriste u konačnici zapravo provedbu stvari poput otvorenog zagrada,
uglata zagrada, što sada možemo zahvalnošću uzimaju zdravo za gotovo.
>> Tako ćemo pogledati sada u ovom web kontekstu.
I sam spomenuo posljednji put da postoji hrpa superglobals u PHP da
zapravo nisu relevantni na zapovjednoj liniji.
Oni više relevantna u kontekstu korištenja PHP u web kontekstu.
Dakle trčanje PHP na web poslužitelju kako bi generirati stvari kao HTML.
>> I mi pogledala $ _GET i $ _POST, a to je mjesto gdje se automatski korisnik '
Ulaz završi jednostavno ako podnese formirati u datoteku koja završava u. php na webu
poslužitelj poput aparata.
Ali neka je kratko pogledati $ _COOKIE I $ _SESSION.
>> Laički rečeno, ono što je kolačić kao što ga razumjeti u kontekstu
korištenjem weba?
>> PUBLIKA: File na računalu.
>> DAVID Malan: Da.
To je datoteka na korisnikovom računalu zasadio god web
vam se dogoditi da posjetite.
Dakle, kada idete na Facebooku, kada idete da bankofamerica.com, kada idete
na google.com, kad idete u gotovo bilo Web stranica u svijetu ovih dana,
uključujući cs50.net, kolačić je posađeno na računalu, što je
ili vrijednost koja je pohranjena u RAM-u Računalo u memoriji vašeg preglednika, ili
Ponekad doista datoteke pohranjene na tvrdom disku.
>> I što je obično pohranjena u toj datoteci Nije svoje korisničko ime, a ne na
lozinkom, obično nije nešto osjetljiva, osim web stranice nije tako
dobro s njihove sigurnosti, već to je velika jedinstveni identifikator među
druge stvari.
To je veliki slučajni broj zasađena na vašem Računalo, ali možete misliti kako je
svojevrsni virtualni ruku pečat kao iz klub ili neki zabavni park koji
omogućuje osoblje, vlasnici koji usluga, kako bi se sjetiti tko ste.
Dakle, ako je veliki slučajni broj je poput 12345678, iako to je očito
ne previše slučajni, mislim da je kao Ruka pečat da prilikom posjete
facebook.com po prvi put, da unište taj broj na ruci.
I onda zato što govore HTTP, što se preglednik, a zbog Facebook
očito govori isto kao webu poslužitelja, HTTP protokola kaže da
kad god kasnije posjetiti facebook.com, bilo da je drugi
poslije, sat vremena kasnije, čak i sljedeći dan, tako dugo dok imate nije izričito
odjavljen, koji učinkovito je kao pranje ruku.
HTTP kaže da bi trebali predstaviti svoje Ruka žig svaki put kad
vratite na tu web stranicu.
>> Što Facebook tada se je da pogled na tu ruku i pečatom
kažu, oh, 123456789.
Ne znam na prvi pogled da je to David Malan u Cambridgeu,
Massachusetts, ali oni mogu provjeriti svoje Baza podataka i reći, oh, osoba
na čijem računalne smo posadili 123456789 David Malan od Cambridgea,
Massachusetts.
Pokažimo da korisniku onda mu profil stranica ili njegov News Feed.
>> No, tu je problem ako je to je kako je web zapravo radi.
Uzmimo pogled na brzi primjer.
Idemo zapravo ići reći facebook.com.
No, prije nego što smo mogli ići tamo, neka ja ići naprijed i otvoriti Chrome-a
Inspektor ovdje.
Dopustite mi pogledati karticu mreže.
A sada idemo naprijed i upisati u https://facebook.com.
I radim to tako da ne vidimo sve te preusmjeravanja i otpada
Vrijeme gleda kroz njih.
Dopustite mi pogodak ulaziti.
>> U redu.
Vidimo hrpu zahtjeva.
Tu dolazi Facebook.
Postoji cijela hrpa datoteka.
I ovdje, po mom spomena latencija zadnji put, to je
Mnogo HTTP zahtjeva.
No, prvi je vjerojatno najzanimljiviji.
>> Tako ćemo dođite ovamo, i Ja ću zumirati u sekundi.
To će biti neka vrsta nered, ali vidjet ćemo.
Facebook je nam šaljete cijela hrpa stvari.
>> Ali, hej, zanimljivo.
Oni sadnju ne jedan, nego četiri ruku pečata na mojoj ruci ovdje.
Set-Cookie, Set-Cookie, set-cookie, set-kolačić.
I postoji nekoliko mogućnosti ovdje.
Svi oni spomenuti neke vrsta isteka.
I izgleda da Facebook se nada da me se do 2015.
Dakle, to je vjerojatno put kojim Moram se odjaviti ili će jednostavno
automatski pretpostavljaju da sam ne vraća.
Dakle, to je zapravo pristojan Količina vremena.
>> A tu su i neki drugi stvari koje se ovdje događa.
Ovaj kolačić se čini prisilno brišu rekavši je istekao 1970
Prije kolačiće postojala.
Dakle browser samo ide pretpostaviti OK, to je kao
pranje ruku pečat.
>> No, sada kad je moj browser čini Sljedeći upit -
neka mi ići naprijed i učiniti opet i reload.
Sad neka mi dođite natrag top zahtjev i silaze
Ovdje, zatražiti zaglavlja.
Primijetiti.
Sada sam pod ne zaglavlja odgovora, ali primijetiti da kaže zaglavlja zahtjeva.
I primjetite da se moj browser kao dio njegov zahtjev nakon udarca reload ima
poslala najmanje sljedeće informacije.
Ne set-cookie, ali kolačić.
Dakle, ovo je linija, HTTP zaglavlja, tako govoriti, gdje je moj browser je vrsta
je bez mog znanja što prezentiranja moja ruka za Facebook inspekcije.
>> Tako su ti kolačići mogu biti koristi onda što?
Da bi se sjetiti tko ste, ili se ne sjećaju kako je mnogo puta sam bio tamo, ili
stvarno ništa.
>> Dakle, ovdje je counter.php.
I neka mi povećavanje fonta.
I svaki put sam ponovno odaberete ovu stranicu, obavijest to je prisjećajući se koliko puta
Ja sam bio tamo.
Pa, to nije sve što je impresivno.
Ajmo zatvoriti tu karticu, a sad idemo natrag
http://localhost/counter.php.
>> Oh, to je zanimljivo.
Ona još uvijek pamti, pa čak i iako sam zatvorila karticu.
I iskreno, ako zatvorite preglednik, ako se provodi na pravi način, ja
mogao se još uvijek sjećaju kada je ovaj korisnik tko je on ili ona je prvi put, a
samo jednom sam ići u izborniku Chrome, koji ovdje je ovdje, i idite na
Povijest i kliknite Obriši podatke, kao što neki od vas svibanj imati u
prošlosti, tek tada će vaše kolačiće zapravo će izbrisani tijekom webu
razvoj.
>> Dakle, ako ćemo ići -
neka je izbliza gedit ovdje.
A ako idemo sada na ovu datoteku.
Pusti me u našu vhosts / localhost / javno, i neka mi to
counter.php.
Uočite da je ovo prilično jednostavan program.
To je prilično jednostavan web stranice.
>> Dakle vrhu datoteke je samo komentari.
No, ovdje je nova linija koje ste svibanj Vidio je već u p-set sedam,
session_start ().
To je linija PHP koda koji suštini govori web poslužitelj, provjerite
sigurni da unište ruke i napraviti pročitajte ruke markice.
To je sve što je linija radi, i to čini sve da proces za nas.
Zatim primijetite Upravo sam dobio dvije grane ovdje.
Ako brojač ključ unutar toga posebna globalna varijabla zove
$ _SESSION Postavljen - drugim riječima, ako ima neke vrijednosti postoji -
uzmimo je i pohraniti ga u lokalnu varijabla zove $ brojač.
Inače, neka je dodijeliti $ brojač Zadana vrijednost je 0.
>> Sada ovdje je jedan aspekt PHP koji je i blagoslov i prokletstvo.
PHP je malo neuredan.
Dakle, dok je u C, što bi Opseg pulta bili
bilo ovdje ili ovdje?
>> To bi bila ograničena onim vitičastim zagradama.
Pogodite što?
U PHP-u, ona postoji i izvan onih vitičastim zagradama, ovdje i ovdje,
i ovdje, i ovdje, i ni dolje.
Zato kažem to je blagoslov u smislu da ne morate razmišljati kao
teško kao što smo učinili prije nekoliko tjedana.
No, to je također malo prokletstvo u koje bez obzira na to gdje se koristiti varijablu u
PHP, barem u programu kao što je ovaj, to je globalno dostupan za
bolje ili na gore.
Dakle, morate imati na umu da sada Vaši varijable ne mogu biti nedefiniran.
Možda ste ih definirati i drugdje.
>> No, ono što ću učiniti u konačnici?
Idem za pohranu unutar koje globalna varijabla kao vrijednost
Brojač utipkati rezultat radi brojač plus jedan.
Dakle, ovo je samo aritmetička da ne
incrementation od pulta.
I činjenica da sam pohranjivanje da vrijednost natrag u ovdje je znači
bitno ažurirati bazu podataka kako bi sjetite se da korisnik 123456789 je
ovdje dva puta.
I kad sam to učiniti opet sljedeći put ću ponovno učitati stranicu, to će provjeriti
moja ruka pečat i reći, oh, Korisnik 123456789 ima sada
bio ovdje tri puta.
>> I što PHP i slično jezici rade za nas je da se figurica
kako i gdje i na koliko dugo za spremanje vrijednosti u ovo posebno
superglobal.
A to superglobal sljedeći put ću posjetite stranice je vrsta magično
pre-naseljena, popunjena s vrijednostima koje bili tamo posljednji put posjetila,
je li to bio drugi prije tjedan Prije, ili u 2013, a mi sada pričamo
o 2015.
PHP i web poslužitelja brine za sve to za vas.
>> PUBLIKA: [nečujno].
>> DAVID Malan: varijable u PHP-u su suštini uvijek globalna ako vas
ih proglasiti unutar funkciju, , a zatim su se lokalni
Funkcija jedini.
Ali zato sam nije zapisano bilo funkcija, oni su sada praktično
Globalna tijekom cijele moje datoteke ovdje.
>> PUBLIKA: Da li postoji način kako bi ih domaćini?
>> DAVID Malan: Je li bilo način da ih lokalno?
Samo ih umatanje u funkcijama.
Koji je u najnovijoj verziji PHP, možete to učiniti s
anonimni funkciju.
, Ali više o tome u kontekst JavaScript.
No, kratki odgovor je ne.
Duži odgovor je potvrdan.
Nica.
Dobro kviz pitanje.
U redu.
>> Dakle, na kraju, sama stranica je zapravo prilično jednostavan.
Obavijest da je jednom sam izlaz iz PHP način, prisjetiti da sve ove stvari dolje
u nastavku je samo ide da biste dobili pljuvačku iz sirovog u pregledniku.
Koji je u redu, jer ne želim poslati Korisnik neke HTML, ali ja ne želim
se dinamički ažurirati HTML tu.
A jedan od načina da mogu to učiniti je riješiti vrlo brzo pasti natrag u PHP-u
Način, koristite otvorena zagrada upitnikom znak jednakosti, a zatim vrijednost izlaza
od pulta.
>> Ili, ako to izgleda pomalo zagonetan, ovaj znak jednakosti je zapravo samo neke
sintaktička šećera za to printf ($ counter).
Ali iskreno, to je samo malo ružno i malo neugodno upisati.
Dakle PHP vrlo lijepo nudi tu mogućnost gdje se samo mogu reći više
sažeto na isti način.
>> Dakle, ono što se dešava ispod napa?
Idemo brzo pogledati na mreži Kartica ovdje counter.php.
I neka mi ići naprijed i prvi put neka je izbrisali svoje kolačiće.
Idemo Obriši podatke od početak vremena.
Sada ćemo se vratiti ovamo.
Sada ćemo se ponovno učitati stranicu.
I ja sam se vratio na nulu.
Budući da moja ruka marka je oprana, Ja sada dobiti novi kolačić.
>> Doista, ako sam pogled na mrežnoj kartici, a pogledajte odgovor zaglavlja, primijetit
da aparat me slanje Cookie čije ime je nešto
samovoljno, već vrsta razumno, PHPSESSID.
I to me slanje ovo stvarno Veliki slučajni broj.
To nije dosta.
To nije sasvim heksadecimalni.
To je neka vrsta alfanumerički niz, ali vjerojatno je slučajna.
I to je ruka pečat, tako da govore da sam se odnosi na.
>> U međuvremenu, ako kliknem ponovno učitavanje, a zatim pogledajte ovaj drugi red za moj drugi
Zahtjev, primijetite da je sada moj zahtjev zaglavlja su PHPSESSID jednaka ovo,
Ne set-cookie, ali samo kolačića.
I to je moj preglednik prezentacija moje ruke pečata.
>> Tako sada kao teaser, a mi ćemo govoriti više o tome za tjedan dana ili tako, ali
na koji način to napraviti od vas ranjiva, vaš Facebook račun
ranjiva, kao i druge računi ranjivi?
>> PUBLIKA: Ako netko ima svoj kolačić.
>> DAVID Malan: Da, ako je netko ima svoj kolačić.
Mislim stvarno, baš kao i neki od vas Možda su pokušali na poput klubu ili
Zabavni park, ako pokušate nešto ovako kopirati pečat, doduše
natrag na tuđe ruke, i onda on ili ona to predstavlja kao
vlastitu, ako se to zapravo ne izgleda identični, 123456789, a zatim web
poslužitelja očito je samo ide vjerujem da je taj korisnik je li.
>> A to je doista temeljno Prijetnja svaki put kad koristimo kolačiće
jer ako netko samo parodije, tako da Govorimo svoje cookie, figure out što
je, bilo je doista da ga kopirate gledanjem na vašem računalu
i da kao, u redu.
Davidov Cookie je JJ3JIK i tako dalje, i onda su oni dovoljno pametan da zna
kako sortirati od ručno poslati da Cookie u pregledniku ili iz
Program oni pišu, oni bi potpuno prijavite u web stranice kao i vi.
Nije da je teško pretvarati se da netko drugi, osim ako smo ponovno p-set
dvojica, koji je uveo što?
>> PUBLIKA: Kriptografija.
>> DAVID Malan: Malo Malo kriptografije.
Jednostavan kriptografije, barem u Standard Edition, ali kripto
svejedno.
manje.
Tako ispada ako šifriranje sve ove zaglavlja koriste nešto što
Možda sada znamo više familijarno kao SSL, secure socket layer, ili https URL-ova,
onda sve ove stvari koje smo bili Bacimo li pogled zapravo su šifrirani,
što znači da je kao ti Ne mogu pročitati pečat ruku.
Samo facebook.com mogu, ili google.com, ili u ovom slučaju, uređaj može
pročitao taj pečat ruku.
>> Tragično ipak, i opet, ovo je predobro potrebi s NSA stvari
u posljednje vrijeme, čak i SSL je lomljiva.
I to je zapravo nije tako teško čak i ispucati taj enkripciju.
Nije toliko pucanja enkripciju, ali tricking
preglednik u dekriptiranje podatke preuranjeno.
Ali opet, mi ćemo vas zafrkavati s tim ne zadugo.
Za sada, samo se bojati.
To je tragično vrsta istina.
>> U redu.
Dakle, gdje se ovaj sada nam preostaje?
Pa, neka je to učiniti.
Idemo naprijed i uzeti brzi teaser prije nego što smo se odmoriti.
I mislim da ćemo ostati malo duže danas, ali ćemo zaroniti u
nešto potpuno novo i seksi, što će oštriti apetit za još više.
Dakle, to je teaser.
>> Dakle, SQL, počeli smo govoriti o uvijek je tako nakratko posljednji put.
Stvarno ćete dobiti vaše ruke prljave s nekim od njega u p-set sedam.
I u laik uvjete, što se SQL -
S-Q-L -
učiniti za vas?
Što je to?
Da.
>> PUBLIKA: Idemo li pristupiti podacima.
>> DAVID Malan: Da.
To neka je pristup podacima u bazi podataka.
Ustrojeni upitni jezik.
A to je u biti programskom jeziku.
Postoje mogućnosti za to da nismo ni koristiti u razredu.
No, možete učinkovito definirati funkcije.
Nazivaju se pohranjuju Postupci u SQL.
No, mi ćemo ga zadržati prilično jednostavan i jednostavno ga koristiti za neke osnovne operacije
kao i odabirom podataka, umetanje podataka, ažuriranje podataka, i brisanje podataka.
>> I zaista možete sjetiti baze podataka, kao SQL baze podataka, kao tek
što Microsoft Excel.
Budući da se odnosi na SQL relacijske baze podataka, gdje je
Odnos samo znači tablice.
Redaka i stupaca.
Dakle, sve što se može staviti u tablicu ovakav ili Google Docs,
mogli staviti u SQL bazu podataka proglašavajući tablicu.
>> Sada, kako se zapravo pristupili ta informacija?
Pa, s naredbi ili upite kao što je ovaj.
SELECT, INSERT, UPDATE i DELETE.
I za najveći dio, oni su Četiri jedini sastojci morat ćete
učinite nešto sasvim snažno u problemu postavili sedam.
>> Sada natrag u dan, što bi zapravo interakciju s bazom podataka u
crno-bijeli prozor terminala na treptati brz kao što je ovaj.
I baze vodimo na Uređaj se zove MySQL, što je
besplatan i open source baza podataka motor.
Ako Google i pročitati Wikipediju članak, znat ćete da je ime
malo tranziciji za neke verzije Linuxa.
Maria je zapravo baza tanjura tako govoriti o MySQL.
>> Da ne duljimo, Oracle kupio MySQL.
Oracle je velika tvrtka.
Ljudi su zabrinuti da bi više ostati sasvim kao open source,
pa to je samo kopija MySQL to je još uvijek slobodni, uvijek open source, a
instaliran u Fedora Linux po defaultu.
>> No, to je vrsta boli u Vrat da se upoznaju s
baze podataka na taj način.
Dakle, mi uključiti u CS50 aparata besplatni open source alat koji se zove
phpMyAdmin.
Samo slučajnost da to je napisano u PHP-u.
Ne postoji temeljna potrebno za PHP ovdje.
No, to je samo web-based alat koji možemo skinuti besplatno, instaliran u
aparata, koji nam omogućava da Grafičko sučelje s kojom
istražiti p-set sedam baza podataka s za izradu novih baza podataka,
kažu za svoj završni rad ako bih sviđa, te u konačnici stvoriti
dinamičke web stranice kao što CS50 financija koji vam omogućuju da upita podatke i
ažuriranje podataka dinamično.
>> Nećeš se morati koristiti samo jednostavne tekstualne datoteke ili CSV.
Vi zapravo možete koristiti Smart baze podataka Program tako da možete izvršiti više
sofisticirane upiti nego samo čitati kroz sve linearno.
>> Tako na primjer, to je ono što mi daje što iz kutije za p-set sedam.
Ovo je stol s naizgled najmanje tri stupca, od kojih je jedan
korisničko ime, od kojih je jedan hash, a drugi od kojih je ID.
>> Ali zanimljiva stvar, i samo se izmamili jedna misao ovdje, korisničko ime
vjerojatno je već jedinstveno, zar ne?
Mislim, najviše bilo koju web stranicu, ako je imate korisničko ime, postoji
ne mogu biti dva Caesars.
Tu ne može biti dva Malans.
Tu ne može biti dva jharvards.
Njegov jedinstveni.
Inače, oni ne znaju što jharvard što zapravo jest.
Dakle, ono što bi moglo biti motivacija za također ima i treći stupac na lijevoj
postoji zove ID, koja izgleda kao broj koji je sličan jedinstveni?
Ona se osjeća malo suvišnim mi se na prvi pogled.
Zašto bi to biti uvjerljiv imati Ne samo jedinstvena korisnička imena,
ali i jedinstveni brojevi?
>> PUBLIKA: Mogli bi imati ista lozinka.
>> DAVID Malan: Ljudi bi mogli imati ista lozinka sigurni.
To apsolutno moglo dogoditi.
Ali ako su ovo jedinstveno korisničko ime, sam će tvrditi da je to zapravo ne
stvar, jer ako se upišete u njihovom korisničko ime, da je potrebno provjeriti njihovu
lozinku, njihove hash tome.
Zašto drugdje?
>> PUBLIKA: brže pretraživanje.
>> DAVID Malan: brže pretraživanje.
Zašto?
>> PUBLIKA: ID je samo jedan.
>> DAVID Malan: ID je samo jedan znak, ili, da budemo precizniji, to je broj,
tako da je vjerojatno 32 bita ili nešto slično.
Dok korisničko ime, očito Jason Hirschhorna tamo je vrsta
smiješno dug, a to će mi se puno više vremena na žici
usporediti H-I-R-S-C-H-H-O-R-N, a možda / 0 ili nešto slično, da bi
potražiti Jasona, za razliku od samo govoreći mi dati upute broj dva.
To je 32 bita.
To je jedan INT da imate za usporedbu.
I doista, to je točno zašto baze podataka imaju tendenciju da se dodijeliti jedinstveni ID za
redovi u njima.
>> Sada ono što drugi tipovi podataka su tu Osim INT i očito
žice kao što je ovaj?
Pa, da se više pravilno, SQL baza podataka, kao što su
MySQL, ima CHAR polja.
I CHAR malo misleadingly nije jedan CHAR.
Polje CHAR u MySQL bazu podataka je jedan ili više znakova, ali to je
fiksni broj znakova.
>> Tako na primjer, ako idem na to phpMyAdmin kao što ste možda već, ili
Uskoro će se problem postaviti sedam, i idem mojoj bazi podataka, i samo za zabavu,
neka je stvoriti novu tablicu pod nazivom testirati sa samo dva stupca.
Ja ću onda kliknite Idi.
A to će biti prilično poznato, posebno kao što prtljati
okolo na svoju vlastitu.
Evo ja mogu upisati ID stvoriti Nova tablica tipa int.
No, ovdje bih mogao upisati korisničko ime za ponovno da je ranije stol.
I primijetiti imam hrpu vrsta koje možete izabrati.
>> I ovo je razlog zašto phpMyAdmin je baš lijepo.
To je vrsta self-nastave u tom vas može samo vrsta točku i kliknite, a
pogled na padajući izbornici, i zaključiti iz da je ono što pokreće SQL vam daje.
>> I doista, ako se odlučim CHAR, onda sam moraju odrediti dužinu, ili kako
mnoge vrijednosti, koliko znakova.
Dakle, vrlo zajedničke vrijednosti su stvari poput 255, ali to je malo dugo.
Obično je osam za korisničko ime.
No, to je malo mali ovih dana.
Dakle, ovo je dizajn odluka.
Je li 8 znakova max, 32, 255, 1000?
To je stvarno na vama.
Ali polje CHAR je stalnu vrijednost.
Dakle, odabrati premalo i da ste vrsta pijan ako želite dužu korisničko ime.
Odaberite previše, a ono što je nedostatak?
>> PUBLIKA: [nečujan].
>> DAVID Malan: To je rastrošna.
Baš kao u C, ako imate veći komad memorije nego što je potrebno, da si
samo gubljenje vremena i rasipanje prostora.
Dakle, kao alternativa, postoji VARCHAR, koja rješava ovaj problem
duljinu tretiranja ne kao fiksne duljine, ali kao maksimalne duljine, i pomoću
varijabla broj znakova, koji se potom sklon koristiti samo onoliko znakova kao ti
zapravo potrebno.
To zvuči savršeno.
>> Zašto ne možemo riješiti Char podaci tipa onda?
Ono što bi moglo biti downside pomoću VARCHARs, što zvuči
kao da je lijepo pobijediti?
Da?
>> PUBLIKA: [nečujan].
>> DAVID Malan: U redu, dobro.
Dakle, ako sve vaše podatke je isti duljinom, ono što je problem?
>> PUBLIKA: Budući da ste gubit Podaci po njima sve govori.
>> DAVID Malan: Dakle, ako sve vaše podatke je iste duljine, međutim, ja bih rekao
koji određivanju maksimalne duljine Na VARCHAR se ne razlikuje od
određivanjem fiksne duljine na CHAR ako vi znate da je broj unaprijed.
No, tu je doista, a ja ću nekako izvuci iz tog odgovora stvarnost
da ima još max, što bi moglo biti neugodno, pogotovo ako
naići na ime osobe koja je neuobičajeno dugo da nisi
predvidjeti.
I to je također nešto manje učinkovita zapravo traži na VARCHARs kao
razliku u potrazi znakova, pogotovo za duge stolove koji imaju puno i
puno podataka.
Tako i ovdje, tematski je opet nema očiti izbor.
>> Dakle, samo da vam dati osjećaj drugog vrste podataka koji bi mogli biti od interesa
bilo za p-set sedam ili u Budućnost, postoji INT.
Postoji BIGINT, koji je kao dugo dugo.
To teži biti 64 bita.
Postoji DECIMAL, što ćete vidjeti u zadataka, koji je mnogo
čišći odgovor na probleme s kojima se susreo s float i pluta
ukazuju nepreciznost.
A onda je tu DATETIME.
Tu je doslovno tip podataka koji ima izgledati kao godinu, mjesec, dan,
i sat, minute i sekunde.
>> No, SQL baza podataka također imaju stvari koje ćemo nazvati indekse.
I index je nešto što odrediti prilikom izrade tablicu
napraviti pretrage i druge operacije učinkovitiji.
Naime, postoji nešto što se zove OSNOVNA indeks da bi mogao
izjavljujem kako slijedi.
>> Učinili smo to za vas s Korisnici stol ćemo vam dati.
Ali primijetite da sam ručno su ponovno Korisnici stol ovdje davanja
to ime korisnika.
Ja već odredili ID.
Specificirano sam INT.
Specificirano sam korisničko ime s maksimalno 32 znaka.
No, ako se držimo pomicanje u to prilično široki prozor, obavijest postoji
hrpa drugih stvari koje mogu odrediti.
>> Jedan od njih, ja mogu navesti atribute kao, znaš ono, to
INT trebao biti nepotpisana.
Ne želim negativne brojeve, pa neka je to učiniti bez predznaka.
Null nije relevantan jer ovdje Ja želim svakom korisniku da
imati jedinstveni broj.
Ja ne želim da to bude nula.
>> No, to je zanimljivo.
Mogu navesti da ID je bilo Primarni ključ ove baze podataka, ili je to
jedinstveno, ili je to indeksirane, ili cijeli tekst.
Tako je za današnje potrebe, duga priča Ukratko, osnovni način da se to mora
biti i konceptualno i tehnički Polje koje ćemo koristiti za jedinstveno
identificirati korisnike.
>> Dakle, kada gledamo up korisnike, ovo je neka vrsta obećanja da im se izgled uglavnom
taj jedinstveni identifikator.
I baza podataka će osigurati da, ako vam imati korisnički broj 3, ne možete
fizički umetanje novog korisnika sa istim brojem 3.
Baza će samo odbiti Za spremanje promjena.
Koja je dobra stvar, jer možete zaštitili sebe od sebe. sam
>> Alternativno, za korisničko ime.
Dakle, drugi red, podsjetimo, je polje username.
Dakle, drugi red ovdje je username, kao što smo učinili na krajnje lijevo tamo.
>> Pa što bi još moglo želim navesti?
Ne smijem, prema SQL, navesti dvije primarne ključeve.
možete odrediti zajednički ključ gdje pogledajte oba polja, ali ne mogu
pojedinačno biti primarni ključevi.
Tako da je dolazilo u obzir.
Dakle, što bi moglo želim odabrati?
>> Pa, unikat je u sličnom duhu Primarni ključ u kojem ste naveli ovo
Polje će biti jedinstven, ali to je ne će biti jedan
Ja koristiti sve vrijeme.
I nećemo koristiti ovaj sve Vrijeme iz kojeg razloga opet?
To je potencijalno sporije ako je to je dugo ime.
To je samo gubljenje vremena.
>> INDEX, u međuvremenu, navodi da je neće biti jedinstven, ali ja bih
da rade svoj magiju ispod napa kako bi ga brže za mene
traži na tom području.
Dakle, to vjerojatno nije relevantno ovdje.
Za korisničko ime, ja bih se tvrditi da Jedinstvena je dobar odgovor.
No, pretpostavimo da smo napravili korisnici više Zanimljivo nego samo korisnička imena,
sasjecka, i identifikacijskim brojevima.
Što ako mi je dao ljudima puna imena?
Što ako mi je dao im se obraća i drugih podataka o njima?
>> Pa, ako ste odredili da je stupac u baze indeksira, to znači da
MySQL ili Oracle, ili što god baze podataka koju koristite, trebali raditi svoje čari
i koristiti nekakav fancy podataka struktura kao drvo, ili trie ili
hash tablicu, ili nešto da se jamči da kada ste traženje podataka pomoću
odabrati na tom području -
sviđa mi pokazati svima da je živi na Oxford Streetu.
Upita kao što je to.
Ako ste unaprijed određen da želite indeksa na tom području,
pretrage će biti puno, puno brže.
>> Ako ne odredite indeksa, najbolje možete učiniti je linearna ako traži
to nije riješeno.
Ali, ako ste naveli INDEX, pametna ljudi koji su u bazu podataka -
ljudi poput tebe koji se sada znaju stabala i napad i hash tablice -
će automatski graditi takve podatke struktura u RAM kako bi bili sigurni da
ti pretraživanja su mnogo brže.
>> Cjeloviti tekst međuvremenu je u sličnom duhu, , ali vam omogućuje da učinite zamjenski
pretraga, sviđa mi pokazati svima da je živi na ulicama koje počinju s
O pismu iz bilo kojeg razloga.
Možete napraviti zamjenske pretraga svidjelo.
Ili, još uvjerljivi stvari kao što pokazuju mene svatko tko ima riječ -
mi pokazati svima čije ime počinje s posebnim pismom.
Možete tražiti ključne riječi na ovaj način.
U redu.
>> Dakle, dizajn prilike potencijalno postoji.
Postoje drugi koji ću mahati moje ruke na.
Ispada da možete imati različite priče motor.
A to je više nego što nam je potrebno kompliciranih Sigurno problema za postavljanje sedam.
Po defaultu, ti dečki su pomoću nešto što se zove InnoDB.
Vidjet ćete spomen ovog negdje u phpMyAdmin sučelje najvjerojatnije.
No, znamo da postoje i drugi dizajn Odluke koje su potencijalno
Kamatna dolaze završne projekte, ako li učiniti nešto web-based.
>> Ali neka je to učiniti.
Idemo naprijed i staviti to na Zaslon kao teaser za priču
uključuje vas, cimer, i čašu mlijeka.
Uzmimo dvije minute ili tako razbiti ovdje.
I ako možete staviti oko, neka dođe natrag, izgleda malo više na SQL, i
onda malo JavaScripta s p-postavili osam na umu.
>> U redu.
Dakle, krenimo razmišljaš kutak slučaj da vrlo lako mogu nastati
u kontekstu korištenja baze podataka, ili iskreno, čak i koristeći stvarnom svijetu stvari
kao bankomati dobiti novac.
Dakle, ovdje je hladnjak.
Pretpostavimo da ste je dobio jedan previše u Vaš studentski dom ili tvoja kuća.
A ti imaš jednu cimericu, a obojica vi stvarno vole mlijeko za primjer.
>> Dakle, dođete kući iz razreda jedan dan.
On ili ona još uvijek nije vratio.
Možete otvoriti frižider.
Stvarno želim veliku čašu mlijeka.
Nema mlijeka.
Dakle, što ćete učiniti?
Možete zatvoriti frižider.
Vi iskoristite svoje ključeve.
Možete otići na trg.
A ti u redu u CVS na onima self-checkout stvari, koja uvijek
potrajati dulje nego što je zapravo ima blagajnama.
Bilo kako.
>> Dakle, u međuvremenu, dot dot dot, vaš cimer dolazi kući, a on ili ona
Slično je žudnja za malo mlijeka.
Dakle, on ili ona otvara frižider, izgleda iznutra, i oh, damn.
Ne mlijeko.
Tako je na čelu out, dogodi otići na drugim CVS, što je samo
blok dalje iz nekog razloga, a on ili ona dobiva u skladu kupiti mlijeko.
>> U međuvremenu, dođete kući, on ili ona dolazi kući, i što učiniti
što u konačnici ima?
Dvostruko više mlijeka.
Ali stvarno ne sviđa mlijeko toliko.
Tako sada imate toliko mlijeka da je sada jedan od njih će otići kiselo
na kraju.
Dakle, ovo je stvarno loše problem.
Točno?
>> Dakle, što se dogodilo?
Dakle, iz temelja, to je vrsta od smiješan primjer.
No, ispod poklopca motora, ono što smo imali dogoditi ovdje je i za vas provjeriti
stanje nekog komada memorije, hladnjak.
Obojica provjerio stanje neke varijable.
Obojica su izvukli zaključke da onda je djelovao na.
No, na žalost, dok je tvoj cimer bio u trgovini, država koja
varijabla promijenila, on ili ona se vratila a sada želi promijeniti stanje, ali
to je već promijenio na njega ili nju.
I naravno, on ili ona neće imati otišao u dućan, ako su znali
da ste već bili na putu.
>> Dakle, u stvarnom svijetu, kako si mogao izbjegli taj problem, uz pretpostavku da su
hladnjak, imate cimera, a vi zapravo kao mlijeko?
>> PUBLIKA: Komuniciranje.
>> DAVID Malan: Komuniciranje.
OK.
No, kako bi vi komunicirate?
>> PUBLIKA: Ostavite poruku.
>> DAVID Malan: Ostavite znanje, zar ne?
Uvijek ostavite napomenu, za ljubitelji showa.
U redu, tako da uvijek ostavite napomenu, ili mu doista poput lokot ili tako nešto
na hladnjaku koji čuva cimerica iz Uvidom u stanje
da je promjenjiva.
>> Sada, zašto bi to biti povezan s Problem set od sedam, ili bankomata.
Pa, zamislite svijet u bankomatu gdje možda ćete biti u mogućnosti otići do bankomata
Stroj ovdje, a drugi ovdje ATM.
I to se događa prilično često.
A pretpostavljam da ste imali dva ATM kartice, što je moguće dobiti.
A što se prijavite u obje strojeva učinkovito istovremeno, nadamo se
dok nitko ne gleda.
I onda upisati svoj PIN otprilike istovremeno.
A onda napraviti bilancu upit vidjeti koliko novca imate.
I recimo da imate 100 dolara ostavio na računu.
Dakle, u biti isto, što recimo jedan, nula, nula, upišite.
I nadamo se vratiti nešto novca.
>> No, koliko novca mogu li se vratiti?
Sada računala na kraju dana, pogotovo ako ste u razgovoru s
poslužitelji, ne mora nužno raditi stvari u cilju da se očekuje.
>> Dakle, pretpostavimo da ono što se događa, zbog bez obzira na brzinu mreže problemi postoje
su, ili CPU problemi su tu, ili bilo što slično, pretpostavimo da
Prvi ATM provjerava stanje i vidi, oh, ta osoba ima 100 $.
No, tada dobiva rastresen, jer možda backup se događa i tako je
usporava.
Ili možda, a provjere, mrežu Priključak je dobio malo sporije, jer
to jednostavno dogodi.
Oni su fizički uređaji.
Dakle, u međuvremenu, drugi je ATM postavljam isto pitanje.
Koliko novaca nema David ima? 100 dolara je odgovor.
Ali zato što je prva ATM još nije poslao poruku oduzmite 100 dolara, i
Bankomati su pregledane banke trezor, kad postoji 100 dolara postoji, a sada
Oba stroja su potencijalno ide ispljunuti odgovor.
>> Sada, ovo je super za vas u nekom smislu ako je ono što banka radi u konačnici
se promijeniti iznos na minus 100 do postavljanjem varijable jednake vašoj
bankovni račun jednaka 0, nasuprot se radi minus 100..
Sada u najgorem slučaju za banke -
ili u najbolje za banku, u međuvremenu, oni vam dati 200 $, a
Vaš bankovni račun pokazuje negativan $ 100, što doista nije
imati koristi uopće.
No, poanta je da je ova utrka Uvjet za dobivanje dvije cimerice
mlijeko, odnosno za dva bankomata pokušavaju dobiti novac i promijeniti stanje u trezor
u isto vrijeme postoji bilo Vrijeme imate bazu podataka.
>> Sada je u problemu postavili sedam, ovo pitanje nastaje u smislu da ako kupite
Udio Facebook skladištu, a zatim za instanca li kupiti drugi dio
Facebook dionica, što je potrebno napraviti Odluka kao programer.
Kako bi se odlučiti kako ažurirati baze podataka, izgledi su da ćeš
ima jedan redak za tu skladištu, i ovo je jedan od načina kako to provesti.
A ti ćeš imati jedan udio FB, što je njihov burzovni simbol
za ovu korisničkim imenom, ili ovog korisnika ID, jedinstveni identifikator.
>> No, ista priča se može dogoditi ovdje.
Ako ne SELECT u SQL, kao što ćete vidjeti u problemu postavili sedam kad vidite,
Oh, David ima udio od Facebook skladištu.
Dopustite mi da se to promijeni kako bi se dvije dionice, jer on želi kupiti
Drugi udjela.
Ali pretpostavimo da je David zapravo imao dvije browser prozore otvorene ili pretpostavimo da
to je zajednički račun s dva supružnika, i obojica pokušavaju izvesti
Isto operacije, postoji, također, postoji mogućnost odluka bila
napravljena je na temelju prethodnih stanje u svijetu -
računu ima jednu dionicu -
a obje osobe, ili oba poslužitelja, sada pokušati reći to povećajte na dvije dionice.
No, u ovom slučaju, možda ste naplaćuje ja para za obje dionice, ali
porastao samo to jedno vrijeme.
>> Tako je u kratkom, temeljni problem Ovdje, kao i sa šalom oko izlaska
umu, ili stavljajući lokot na njoj, je Ako se dvoje ljudi, ili dvije teme -
prisjetim se ispočetka -
Možete provjeriti stanje neke varijable a zatim pokušati promijeniti tu varijablu,
ali te dvije stvari se ne dešavaju na isto vrijeme, ali mogu dobiti prekinuta
od strane drugih stvari koje se dešavaju, podaci se mogu se u vrlo čudnom stanju.
I možete imati koristi ili može trpjeti u smislu novca primjer.
>> Tako je u sedam set problema, možemo vam dati ova linija koda, koji je dugo
Ukratko, to rješava Problem je u MySQL.
Ovaj jako dugo upute da se ne čak i stati na jednoj liniji na
Zaslon ovdje osigurava da vaš rad je ono što se zove atomska.
Sve se događa odjednom, ili to se ne događa na sve.
Ovaj jako dugo fraza ne mogu dobiti prekinuta djelomično.
>> A što to je doslovno ono što govori.
Stavite ga u nekoj tablici sljedeće tri stavke one određene vrijednosti,
ali na duple tipke, nemojte učiniti umetak.
Da li ažurirati.
Dakle, ovo je kao radiš SELECT i INSERT takoreći u isto vrijeme.
I ono što je ključno da je vjerojatno se spominju ovdje?
>> Ispada, a to ćete vidjeti u Problem postaviti sedam je spec., jer
smo izjavio da postoji jedinstveni ključ Na ovom stolu, kao da je
ne može imati više redaka za istog korisnika s
Isto penny stock simbol -
u ovom primjeru ovdje, DVN.V je glupo penny stock da smo
odnose se na spec..
Budući da smo proglasili da bude jedinstvena, što to znači da, ako vam
pokušati umetnuti duplikat red, ti si umjesto da ću ga ažurirati bez
bilo tko drugi ima priliku promijeniti stanje svijeta bilo.
Dakle, ukratko, to osigurava stvari su atomska.
>> Općenitije ipak, baze podataka kao što je MySQL -
a vi ne trebate ovu značajku za p-set od sedam, ali imajte to na umu za
Budućnost -
podržati ono što se naziva transakcije, gdje možete reći
START transakcije doslovno.
Nakon toga možete izvršiti dva SQL izraza.
I SQL, kao što ćete vidjeti u p-set sedam, izgleda malo
nešto kao što je ovaj.
Ažurirati tablicu pod nazivom računa.
Postavite balans stupac jednak bez obzira na Stupac trenutno
je minus 1.000, gdje je broj, broj računa, kao i korisnika ID,
iznosi 2, a zatim ažurirati Račun dot dot točku.
>> Dakle, laički rečeno, što ove dvije upite čini se da se radi u
stvarni svijet osjećaj bankarstva?
>> PUBLIKA: Prijenos na štednju.
>> DAVID Malan: Točno.
Prijenosom sredstava s jednog računa na drugi.
I ovo je još jedan primjer gdje se stvarno želite ove dvije stvari dogoditi
ili ne dogoditi.
Vi ne želite nešto da se u Srednji od njih i potencijalno zabrljati
matematike, ili zabrljati koliko novca imate, ili koliko
Novac banka ima.
Dakle, ono što je stvarno lijepo o transakcijama u MySQL je da, i
baze općenito, da su i pametni ljudi koji su implementirani
ove značajke shvatiti kako bi sigurni da su i od onih stvari dogoditi
ili uopće ne.
>> I ako doista su teže napraviti web stranica koja se koristi od strane ljudi na
kampus, ljudi u stvarnom svijetu, radi nešto u smislu pokretanja,
To su vrste dizajnerske odluke koje
postaju sve tako važno.
Inače, što počnete gubiti podatke, izgubit Korisnici, ili u najgorem slučaju kao
vidjeli smo ovdje, potencijalno izgubiti novac.
Pa opet, više o tome u problemu postavili sedam, te možda i za neke
što je u završnim projektima.
>> Tako ćemo promijeniti tu sliku smo imali Prije trenutak samo u još jedan način.
Zato mi dopustite da se zapravo vidjeti ako mogu -
Nope, koji je otišao.
Tamo je.
>> Dakle, ovo je mjesto gdje smo ostavili zadnji put.
I ispostavilo se da ćemo bacanje još jedna stvar u mix ovdje -
jezik zove JavaScript.
Dakle JavaScript zapravo uklapa u ovom komadu -
i nisam sasvim ostavljaju dovoljno prostora, tako da to nije sada na ljestvici.
OK, ovo je stvarno jadno.
U redu, tako da je JavaScript.
U redu.
Ja sam stvarno to rade loša.
U redu.
>> Dakle JavaScript je još jedan programski jezik, i naša posljednja, ako to pomaže
uvjeriti da ne postoji mnogo više od požara hidranti ovdje.
Dakle JavaScript je također tumačiti jezik, što znači da ne
sastaviti ga u nula i jedinica.
Vi samo ga pokrenuti.
No, ono što je bitno različita s JavaScript obično je da vam
ne može se pokrenuti na svoj web poslužitelj.
To ne bi raditi u Uređaj po sebi.
Umjesto toga, on dobiva skinuti korisnik putem HTTP u preglednik -
Chrome, Safari, Internet Explorer, Firefox, bilo što -
i to je preglednik koji izvršava ovo Posebno programski jezik.
>> Dakle, da bude jasno, PHP je dosad bio izvršiti bilo na zapovjednoj liniji u
naša crna i bijela prozor, na poslužitelju poput uređaja, računala
Sviđa aparat, ili je to bio izvršiti na web poslužitelju
radi na računalu.
No, tema je da PHP dosad izvršen server-side, pa
Korisnik i korisnikov preglednik nikada ne vidi liniju PHP koda.
>> U stvari, ako ste ikada otvoriti preglednik za druga vaše web stranice ili i vi
zapravo vidjeti PHP kod u prozoru, netko je zajebao.
Budući da to nije značilo da se poslao u pregledniku izravno.
To je trebao biti izvršen i okrenuo u nešto kao HTML.
>> Ali JavaScript je u suštini suprotno.
To je značilo da će se izvoditi u pravilu unutar od korisnikovom prozora preglednika.
A što vrste web stranica koristite JavaScript pa ovih dana?
>> Kao i doslovno svaki popularne web stranice.
Svaka web stranica da ti dečki vjerojatno koristite svakodnevno koriste JavaScript za
Najjednostavniji i čak najseksi značajke.
>> Dakle, nešto poput Facebook Chat, ako ste to iskoristiti.
Kako se to zapravo radi?
Pa do sada, sve stvari s kojima sam učinio s HTML i PHP pretpostavlja da
li podići URL, a što pritisnete tipku Enter, a vidiš neke HTML sadržaja.
A što kliknete na link, koji se mijenja URL, mijenja stranicu, i ponovo učitava
neki novi sadržaj.
Kliknite na drugi URL ili poslati obrazac, što se tuče drugu stranicu i
vidite neke nove sadržaje.
>> No, s nečim poput Facebook Chat, ili Gchat ili Google Maps, rijetko
ne cijela stranica osvježiti tako da vidite bijeli zaslon na trenutak i
zatim novi sadržaj.
Umjesto toga, web stranice danas su dinamičko uzimajući opet obnovljeno i
i opet svi vrsta od iza kulisa.
I ispada da kada idu u nešto poput Facebooka ili Gchat,
ili Gmail, a ažuriranja stranica automatski bez ponovnog
cijeli zaslon, što se dogodilo je da Vaš preglednik je napravio svojevrsni potajno
dodatni HTTP zahtjeva -
ne za cijelih web stranicama, ali samo za male komade podataka, kao što su
instant poruka da je vaš prijatelj samo ti, ili promjenu statusa poslao da
netko samo ti, ili cvrkut poslana da je netko upravo poslao.
To je samo što malo zahtjeve za podatke, a zatim pomoću JavaScript, ovo
programski jezik, za promjenu, što Web stranica izgleda, bez
poslužitelja pomaže, bez poslužitelja generira taj HTML.
>> Tako je u kratkom, JavaScript može se koristiti onda dohvatiti ne samo nove podatke iz
poslužitelja bez pretovara cjelinu stranica ili podnošenjem obrasca.
Također se može upotrijebiti za promjenu tzv DOM -
Document Object Model -
koji je samo fancy način za rekavši drvo HTML
koje smo vidjeli zadnji put.
>> Tako se uvjeriti, kako je JavaScript sintaktički toliko slični C, kao dobro.
Nema glavna funkcija.
Vi samo početak pisanja koda i to će se izvršiti, ili
više ispravno interpretirati.
Uvjeti će izgledati ovako.
Ne razlikuje se od C ili PHP za tu stvar.
Boolean izrazi ili-ed zajedno će izgledati ovako.
Anded zajedno izgledati ovako.
>> Prekidači će izgledati ovako.
Za petlje će izgledati ovako.
Dok petlje će izgledati ovako.
Učiniti dok petlje će izgledati ovako.
>> To je nova.
Dakle JavaScript nije se foreach konstruirati po sebi, ali ovaj konstrukt
za varijablu i na polju, a ja se u to Slučaj postaje vrijednost indeksa.
Dakle, to je malo drugačije od onoga foreach, iako nove verzije
JavaScript dolaze iz svih vremena, Pa čak i ove jezične značajke
se razvija.
>> I Kao na stranu, JavaScript ovih dana Također se može koristiti na poslužitelju poput
PHP koristite okvir nazvan Node.js.
Jedan od CS50 je TFS, Kevin, dovela Seminar o Node.js koji je dostupan na
cs50.net/seminars.
Dakle, ako vas zanima, znam da vam Možete koristiti ovaj na strani poslužitelja kao
dobro, ali to je prilično nedavno trend, ali moćan u to.
>> Ovaj je malo drugačiji.
To je polje u JavaScript.
A što vam se čini drugačije u odnosu na C ili PHP?
Postoji nekoliko brzih priče možemo reći ovdje.
Ono što nedostaje u odnosu na PHP-u?
>> PUBLIKA: [nečujan].
>> DAVID Malan: Da?
Žao nam je, opet reći?
>> Ivanković: Ne proglašenje tip varijable.
>> DAVID Malan: Nećemo proglašenje tip varijable.
Tako je zapravo prilično poput PHP, nismo pojašnjenje vrsta ove varijable.
Umjesto toga, mi smo više generički rekavši var za varijablu.
Nemamo PHP neprilike znak za dolar, koji je dok je zamorno
tipa, ne bi više jasno da nešto što je promjenjiva.
Dok je ovdje, mi smo nekako vratiti u C-ov pristup prema samo poziv
promjenjiva po imenu želimo da ga dati, kao što su brojevi.
I isto kao što su PHP, imamo uglate zagrade za
vrijednosti unutar tog polja.
>> Dakle varijabli u JavaScriptu također može izgledati ovako.
Obavijest ovdje je to niz naziva s, , ali isto tako imamo nije navedeno
da je niz.
Ovdje je ipak značajka koja ne postoje u točno na isti način u PHP-u,
ali pomalo sličan.
To je objekt u JavaScript.
A predmeti su vrsta švicarske vojske Nož na strukturu podataka na taj vas
Možete ih koristiti za bilo koji broj stvari.
>> Evo, na primjer, mi smo progla varijabla zove citat.
Vrsta te varijable je objekt.
Možete misliti na to kao C struct koji ima ključeve i vrijednosti.
Simbol je ključ.
FB je vrijednost, očito Oznaka dionice.
Zarez.
Cijena je još jedan ključni, a njegova je vrijednost očito s pomičnim zarezom, ili
Broj općenito u JavaScript, od 49,26 dolara.
>> Dakle, PHP nema -
nismo vidjeli u PHP objekata prilično kao što je ovaj, ali nismo vidjeli analognu,
što je ono?
>> PUBLIKA: [nečujan].
>> DAVID Malan: Asocijativne matrice.
Dakle, dok je PHP ima asocijativne nizove čija je sintaksa je ikad nešto tako
drugačija -
Vidjeli smo u uglate zagrade.
Vidjeli smo čudne strelice simbole.
JavaScripta predmete, ali to govore semantička razlika i
drugačija sinonim za sada.
Međutim, kao što je na stranu, PHP također ima predmete na način da je Java i druge
jezici imaju objekte u objektno-orijentirano programiranje.
No, mi ćemo ih koristiti samo za vrste podataka za sada.
Objekti i asocijativne nizove.
>> To bi se moglo to napraviti malo jasnije.
Evo zašto predmet je korisno.
Kada želite proglasiti studenta, kao Zamyla, možemo zapravo
zatvoriti u kućište takoreći unutar koje protive korištenju vitičastim zagradama baš kao
Prije nego cijela hrpa ključeva i vrijednosti u ovdje.
Imamo ime, svoju kuću, i naziv Zamyla, nakon čega se kao zarez
obično na kraju.
>> Ovdje previše, to je nešto drugačija, ali i vrlo moćan
ovih dana.
Evo polje, i znam da je zbog postoji uglata zagrada gore
vrhu i uglata zagrada na dnu.
A to je ono što niz podataka tip je očito u JavaScriptu?
To je niz izgleda kao i tri predmeta.
I znam da je samo objekt zbog vitičastim zagradama.
I primijetiti da postoji otvoreni kovrčava brace, neke stvari, u neposrednoj blizini kovrčava brace, zarez,
onda još malo, zarez, i onda još malo.
Dakle, to je tri argumenti je dva tipkovnici.
>> Dakle, to je niz od tri predmeta.
I svaki od tih predmeta, kako se čini student ili osoblje član neke
sortiranje, svaki s osobnom iskaznicom, Kuća, i ime.
Ali ja sam nazvao nešto zove JSON -
JavaScript Object zapis.
A to je format podataka koji zapravo je tako vrlo popularna iu
modi ovih dana da ako pišete aplikacija koja koristi Facebook
API, Twitter API, stvarno je gotovo bilo API vani ovih dana,
uključujući i neke od CS50 vlastiti, Podaci se vratiš nije u
old school CSV formatu.
>> Budući da je opoziv CSV je super jednostavna.
To je samo stupovi odvojeni zarezom.
JSON podatke daje vam više metapodataka.
To suradnicima ključ sa svake vrijednosti, tako oni ne moraju samo pretpostaviti da
nultoga stupac je jedna vrijednost, stupac jedan je još jedan stupac dva je još jedan.
Sve u JSON objekt ovdje je vrsta self-opisujući, jer svaka
jedno od imena u ovoj datoteci je doslovno ime ispred njega kao
citirao niz.
>> Tako ćemo pogledati a Nekoliko primjera ovdje.
Pusti me u aparat.
I da me pusti u naš vhost imenik u javnosti.
I da me pusti u JavaScript imenik.
I idemo naprijed i otvoriti DOM-0.html, gdje DOM samo znači
Document Object Model.
To je stablo stvari na koje se I iz ranije.
>> I neka mi predložiti sljedeće.
Evo web stranica čije Tijelo je prilično jednostavan.
Dakle, ovdje dolje na dnu, Primijetit imam formu.
Vidjeli smo one prije.
Ima dva ulaza, od kojih jedan ima ID imena, od kojih jedan ima vrstu
podnijeti, a prva nečiji tip je tekst.
Dakle, ovo je zapravo zvuči prilično jednostavno.
>> Idemo ovdje.
Vratimo se na ovoj stranici ovdje.
Idemo u localhost, i otići u naša JavaScript imenik, i otići u
DOM-0, a ovdje imamo ovaj obrazac.
Dakle, to je očito sve to stranica radi.
To je polje ime s gumb Pošalji.
Ali ja neću koristiti PHP ovdje.
Ja ću učiniti sve što je strani klijenta takoreći u JavaScriptu kako slijedi.
>> Obavijest da sam doista sam dao ime Polje tog ulaza jedinstveno
identifikator, koji će zapravo spasi me neko vrijeme u trenutak.
I primijetiti sam upoznao još jednu oznaku u glavi mojoj web stranici,
tag.
>> Tako da je u tom smislu da je JavaScript programski jezik na strani klijenta.
U ovom slučaju, kao što su CSS, ja sam stavio to ravno u mome HTML.
No, obavijest sam proglašen funkciju da izgleda nešto poput PHP
sintaktički, ali to je zapravo JavaScript, jer opet, to je
klijenta u pregledniku.
I pokušajte pogoditi što se to događa na to, iako neki od sintakse
Ovdje je nova.
>> PUBLIKA: Pozdravi tko.
>> DAVID Malan: Bit će to pozdraviti onome tko posjeti ovu stranicu.
Pa kako?
>> Dakle primjetiti, ispada u JavaScriptu postoji alert () funkcija.
To je vrlo tužno vrsta funkcija koja zapravo samo teži smetati korisnicima.
To nije ona koju stvarno treba koristiti obično, ali je brz i prljave
način vrsta ispisa nešto na grafičkom korisnika
sučelje, poput pregledniku.
Uočite da se ovdje imam niz u jednostrukim navodnicima.
Ispada da je za razliku od C, JavaScript zapravo može imati koristite jednu
citira, a iskreno, to je samo neka vrsta od stilske konvencije među
JavaScript programera koristiti jednostruke navodnike.
PHP, oni zapravo imaju malo drugačije značenje.
No, za sada, samo znam da je to je jedini razlog.
Konvencija u JavaScriptu je često Koristite jednostruke navodnike, ali smo mogli koristiti
dupli navodnici u obje zemlje, kao dobro.
>> Dakle, ovo je interesantno.
Sjetite se posljednji put da smo imali da Slika na zaslonu koji je nacrtao drvo
gdje ste imali HTML čvor, te Glavni čvor, a tijelo čvor,
i onda neki tekst.
No, postojao je jedan poseban čvor na Sam vrh koji sam nazvao dokument.
Pa, ispada u JavaScriptu, bilo put napisati program u JavaScriptu
u pregledniku, imate pristup posebna globalna varijabla.
Slično u duhu u PHP-a superglobals, ovo se zove u
sve su mala slova dokument.
>> To je kao struct, ali ovaj struct također ima funkcije unutar nje.
Dakle C rekonstruirati samo ima podatke obično.
Ali JavaScript objekt, jer to tehnički je također ima funkcije,
inače poznat kao metoda unutar nje.
A možete pozvati funkciju unutar ovaj objekt doslovno radi svoj
naziv, točka, a zatim ime funkcije, ili pak način.
To je samo sinonim, stvarno.
>> A što je ova funkcija je činiti?
Možete vrsta pogoditi iz njegova imena.
Nabavite elementa po ID.
Dakle, ovo će pretražiti web stranicu, traži to drvo, u potrazi za
god čvor, AKA elementa, ima jedinstveni ID quote Citat završen imena.
I onda ono što ću učiniti?
Ja ću dobiti vrijednost unutar da je čvor u stablu, a ja ću
nekako pozdraviti tim imenom.
>> Dakle uzeti pogodak, iako smo si ne ovo vidio još, što učiniti plus
simboli znače ovdje i ovdje vjerojatno?
>> PUBLIKA: spojite.
>> DAVID Malan: spojite.
Točno, i to su samo vrsta dizajn odluke
ljudi su prije mnogo godina.
U PHP-u, što spojite stvari s točkicama.
U C, skočiti kroz nekoliko obruč i poziv funkcije poput strCopyDatabaseOK () ili
strcat () ili druge takve funkcije.
No, u JavaScript, koristite pluses.
Dakle, ovo je samo nadovezivanjem tri žice -
Pozdrav, ime i prezime, a zatim uskličnik.
>> Dakle, kada i zašto je ova funkcija zove iako?
Pa, pokušajte pogoditi iz HTML na dnu.
Zašto je pozdraviti () zove, ili kada?
>> Očito, kao najbolje što mogu reći, na podnijeti, kada se ovaj oblik podnosi,
Ja ću učiniti sve što je unutar tih citata.
I konkretno, idem zvati pozdraviti (), a zatim se vratiti false.
>> Pa, da vidimo što je neto Učinak ovdje je na prvom mjestu.
Pa neka mi ići naprijed i upišite u, recimo, Loren, Podnijeti.
Pozdrav Loren.
Da vidimo je li možda to bio samo sretan provedba.
Nope.
Pa to je da upišete što god ime zapravo sam tamo stavio.
>> Ali primijetiti ono što ne mijenja.
URL je još uvijek dom-0.html.
Nema register.php.
Nema drugi file.
Nema action atribut.
Pa što je ovo povratak false valjda radi?
Zašto sam pozivom pozdraviti (), a zatim povratka vjerojatno lažna?
Ono što se obično događa kad kliknete Slanje u obliku koji još imamo
Vidio je u posljednjih tjedan dana?
>> PUBLIKA: [nečujan].
>> DAVID Malan: To ide negdje, zar ne?
To vrijedi i za neke odredišni URL.
Ali ja ne želim da se to dogodi ovdje.
Želim da moja web stranica se u potpunosti dinamična kao što su Gmail, gdje nakon što ste
postoji, ti ostani tamo.
URL ne mijenja na način da ukazuje cijela stranica pretovara.
Umjesto toga, ja samo želim da se nešto promijeni kao što je tiskanje nešto
Ovdje na zaslonu.
>> Pa neka mi to očistiti do malo.
Dopustite mi da se otvori a ne Dom-0, ali neka mi se otvori DOM-dva.
Samo tako da ste vidjeli neku sintaksu ovdje.
>> Ispada da je ono što smo upravo nisam se koriste sirovu JavaScript.
Dakle, ovo je uistinu jezik JavaScript.
Neki od vas možda znaju Knjižnica zove jQuery.
>> Tako jQuery nije ista stvar kao i JavaScript.
To je samo knjižnica koja stvarno pametna momak je napisao i popularizirao kao
da gotovo svi u svijetu danas jQuery koristi prilikom korištenja JavaScript.
I na prvi pogled, iskreno, izgleda malo više zagonetan.
Ali što ćete, pogotovo ako idete ima svoj konačni projekt s weba
Razvoj, vidjet ćete da je to čisti stvari i štedi vam dosta
nekoliko linija koda.
>> Pa neka je samo pogledao kako ovaj oblik radi.
Obavijest što sam očito ukloniti iz HTML-a?
Nema na dostavi rukovatelj da se tako izrazim.
Nema atributa.
Jer znate, ono Ja stvarno ne sviđa?
Osjećao sam se kao da mi je padala u stare navike postoji.
Baš kao što je počeo osjećati neuredan to izmiješati obje CSS s
HTML, jer ste vrsta bacanje različitih jezika diljem
mjesto, na sličan je počelo osjećati kao loš put da ide prema dolje, gdje
Dajem JavaScript kod unutar mojih HTML umjesto da ga factoring out.
>> Dakle, to je pouka ovdje.
U DOM-2.html, ja sam ga factoring out.
I ja radim stvari malo drugačije.
Za sada, ja ću mahati ruke na što to zapravo radi
ispod poklopca motora.
Ali samo za sada pretpostavljaju da je taj prvi linija koda u ovoj biblioteci
zove jQuery samo znači kada Dokument je spreman, učinite sljedeće.
>> Budući da web stranice može potrajati neko vrijeme za učitavanje.
Možda ćete biti na spor internet veza, a to bi moglo biti vrti
i vrti, a na kraju ga je napunjena.
To linija koda samo kaže čekati do cijela stranica je spremna, dokument
je spreman, prije izvršenja ovaj kod.
>> I sada primijetiti, ovo je vjerojatno Najkorisniji prvi
oduzeti jQuery.
Ova linija je ovdje vrlo sličan u duhu na ovo mnogo dulje linije.
Dok je u sirovom JavaScript kod, postoji postoji dokument globalni objekt koji
ima funkciju nazvanu getElementById (), ljudi koji su pisali
jQuery pojednostavljena da bi samo reći znak za dolar, a zatim unutar
zagrade stavio dva citati, a zatim staviti ljestve simbol slijedi
jedinstveni ID želite zgrabiti.
Tako da je jednak document.getElementById.
>> U međuvremenu,. Podnijeti samo znači da se na podnošenje bilo kojem obliku si
pozivajući se na lijevoj strani, idite naprijed i izvršiti to.
No, to je sada znatiželja previše.
Ono što je čudno o tome što Ja sam istaknuo ovdje?
Ne samo da je to neka vrsta sintaktički Nova, tu je i nešto nedostaje.
>> Ivanković: To je samo nazvao funkcija?
To se ne zove na oprezu?
>> DAVID Malan: Da.
Pa, tako alert () je dolje ovdje, da bude fer.
No, tu se ne spominje ime, kao što znate, Foo ili
nešto ovdje.
I doista, to je jedna od značajki JavaScript da je sasvim
moćan, ali i sasvim novo.
I PHP zapravo ima to kao dobro.
>> Pustite me da idem naprijed i učiniti nešto na brzinu.
Dopustite mi da ide naprijed i staviti to ovdje.
Dopustite mi da to učinite.
Funkcija.
Nazovimo ovu rukovatelj ().
Rukovatelj funkcija da se tako izrazim.
Nešto što obrađuje neku operaciju.
Dopustite mi počistiti moj uvlačenje.
I staviti to ovdje.
Yep.
OK.
>> Tako sada imam funkciju nazvanu rukovatelj () da ja stvarno ne znam
što to još.
To je samo još uvijek ima takve stvari.
Ups.
Uzeo previše.
Učinimo to.
U redu.
Oprostite.
U redu.
Dopustite mi da to učinite.
OK.
To izgleda lijepo i ravno proslijediti sada.
Dopustite mi da to učinite.
Učinite to.
I OK.
Tako sada, neka je stavi ovo ovdje.
Nema više programiranja u letu.
OK.
>> Pa sad, idemo natrag gdje je počeo priču.
Prije toga, rekao sam da je ovo crta znači kada je dokument spreman, otići
naprijed i to učiniti.
Što želim učiniti?
Pa konkretno, želim ići naprijed i učiniti sljedeće.
Izvršiti ovu liniju koda, a zatim ono što želim učiniti je nazvati ovo
funkcionirati kada se obrazac podnosi.
>> Sada je to ono što je interesantno.
To nije samo po sebi funkciju.
Obavijest Ja ne stavljajući zagrade Ovdje na normalan način.
Ja sam doslovno prolazi funkciju nazvanu vodič () na drugu funkciju
zove podnijeti () kao argument kao iako je kao varijable.
I ovo je jedna od značajki JavaScript je funkcija sami
su zapravo samo objekte.
U stvari, oni su zapravo samo varijable neke vrste.
A ako je naziv funkcije je rukovatelj (), nema razloga da ne mogu
to prođe u kao argument ovdje.
A to znači kad se oblik s ID demo je
podnesen, poziva ovu funkciju.
>> Ali sada, ako sam poništiti sve to, zašto onda sam možda napraviti
Prije ovog trenutka?
Pa, ovo je anonimna funkcija.
Jer iskreno, shvatio sam zašto sam ja gnjavi gubiti vrijeme proglašenja
funkcija zove rukovatelj () samo nazvati je u jednom i samo jednom mjestu?
Ako mi ne treba ime, a ja ne treba ga zvati više od jednog mjesta,
neka je samo implementirati funkciju upravo tamo gdje mi je potrebna.
I tako JavaScript i PHP podržati ono što nazivaju anonimne funkcije koje
dopustite mi da učinite upravo to ovdje.
>> No, mi samo grebanje po površini.
Idemo zafrkavati sa samo par Konačni primjeri ovdje.
>> Ako odem u quote.php.
Uočite da je ovo zapravo PHP funkcija, PHP program, koji sam napisao
da očekuje HTTP parametar zove simbol, a ja mogu proći u
vrijednost kao i FB.
A ako ćemo zapravo gledati na izvoru broj, to je upite free website
zove Yahoo Finance, baš kao p-set sedam godina, a to je povratak na meni
nešto što na prvi pogled format poznat je JSON -
JavaScript Object zapis.
To je samo objekt.
Obavijest vitičastim zagradama, citati, debelog crijeva, a zarezi.
>> Sada je u međuvremenu, ovo je baš fora.
Budući da sam vjerojatno može koristiti za programiranje jezik za stvaranje URL-ova
da izgleda ovako dinamično, zar ne?
Ja to ne mogu promijeniti na Google i vratiti Google-a
cijena dionica od 1,017.55 $.
Tako ćemo vidjeti, ako ne možemo koristiti ovaj sada.
>> Pusti me da Ajax 0 ovdje, koji izgleda ovako.
To je samo web stranica koja ima Obrazac s gumb.
Dopustite mi ovdje ići naprijed i upisati YHOO za Yahoo dionica simbol, kliknite Get
Citat, a sada primijetiti sam stečen upozorenje s 32.86.
>> Dopustite mi zapravo ide na ljubitelj verziji ovo stranica, verzija dva, a
upisati recimo Microsoft, MSFT.
Dobiti Citat.
I sada primjetiti, nema upozorenja.
Obavijest gdje piše cijena da se određuje?
Tu je najjednostavniji od primjera koji upućuje na ono što Gchat i Facebook
Chat, i Gmail, a drugi kao Web stranice su radili tako da su stvarno
mijenja web stranicu.
>> Primijetiti.
Dopustite mi da se ponovno učitati stranicu.
Dopustite mi da se otvori inspektore Chromea.
Pusti me na elemente tab ovdje.
Sada primijetiti ako sam zumirati ovdje i otvoriti ovaj gore, primijetiti da je ovo moj
HTML DOM - moj Document Object Model.
Ovo je moja HTML.
Ali sada primjetiti, iako to ide biti malo teško vidjeti u oba
mjesta u isto vrijeme, ako sam upisati FB ovdje gore, gledati dno
zaslona samo.
>> To je zapravo mijenja moja HTML u letu.
I to je to vrlo jednostavno radiš nešto poput ovoga.
Ako sam otvoriti Ajax 2, obavijest o provedbi nešto kao seksi kao
da je, iako je to prilično ružno, ali kao sofisticiran kao da
Funkcionalno, to ima neke HTML na dnu.
Ali primijetite sam se označiti.
Nismo koristili ovo prije, ali ovo je kao što je, ali to ne prisiljava
sve na novoj liniji.
To samo čini pravokutni regiju Na istoj liniji bitno.
>> Obavijest da sam dao mu je ID cijeni.
I ispostavilo se pomoću istog JavaScript knjižnica, imam funkciju
zove citat () koja se zove kad god Obrazac se podnosi.
A ono što ja radim je to.
Ja sam proglašenja varijablu u JavaScriptu zove url, štedi vrijednost
quote.php? simbol =.
Drugim riječima, ja sam na početku pripremiti HTTP zahtjev, a zatim
Ja sam nadovezivanjem na koji s plus sve što je element s ID
od simbol, koji obavijest je da Tekstualno polje pravo ovdje.
Dakle, baš kao što smo imali oblike u prošlosti.
>> I onda ispada u jQuery, ako nazvati. Val (), koji se poziva od Val
funkcija, funkcija vrijednost, koja dobiva god korisnik unese
I onda sve mrežnog prometa što se događa je to.
$. GetJSON.
>> I kao stranu, znak za dolar je Samo stenogram notacija.
To je stvarno jQuery.getJSON.
Pusti me da JSON s ovim-om, a kad Zahtjev se vrati, to nazivamo
Funkcija i proći u kao argument što se vratio s poslužitelja.
>> Dakle, drugim riječima, ako idem natrag preglednik, i ja vratiti u quote.php,
ono što je moj browser radi je dobivanje Ovaj blok podataka.
I kad idem na ovu web stranicu ovdje, primijetiti ako smo umjesto toga ići na mrežu
Kartica i to jasno, a zatim upišite nešto kao GOOG za Google i dobiti
Citat, primijetili stranica nije promijenio.
No HTTP zahtjev podnesen, a što Vratio sam se ovdje, ako gledamo
odgovor je cijela hrpa JSON da smo konačno pristupiti s
ova jednostavna crta ovdje.
>> Data je ono što je stečen s poslužitelja.
Cijena je naziv Ključ mi je stalo.
Dakle data.price mi daje da.
>> Sada međuvremenu, i to je posljednji primjer.
To možete učiniti još više sa stranice.
One zapravo, i dvije.
Mi može vratiti tag, ako se sjećate to.
To je JavaScript.
Možemo to učiniti.
Vrlo uzbudljivo.
Ostavit ćemo to kao Cliffhanger.
>> No, uzbudljivije, možete raditi stvari kao što je ovaj.
Ako idem na Geolocation-1, ispada Chrome da zna da smo na
zemljopisna duljina širina 42.37. -71,10.
Dakle, postoji još postoji na raspolaganju.
No, više o tome sljedeći tjedan.
Vidimo se u ponedjeljak.