DAVID MALAN: W porządku. Jest CS50, a to Koniec tygodnia dziewięciu. Minęło ponad wicher w ciągu ostatnich kilku dni. I problemu ustawić siedem, jeśli kolano głęboko w to, uświadomić sobie, że to dość nieco nowy, że tam jest. Ale zobaczmy, czy nie możemy poskładać wszystko razem tutaj w skrócie wcześniej skręcając się w jeszcze inny kierunek i widzenie gdzie indziej możemy iść. Tak jak dotąd, rozmawialiśmy o HTML. Rozmawialiśmy o CSS. Rozmawialiśmy o PHP. Już zaczęli doświadczać SQL. Dzisiaj porozmawiamy trochę o JavaScript. Ale w jaki sposób wszystkie te rozbieżne języki do siebie pasują? Więc rozmawialiśmy w zeszłym tygodniu o Pojęcie o serwer. Więc po prostu wyciągnąć ten prostokąt jako serwer WWW tutaj. I serwer WWW służy pewno pliki. A niektóre z tych plików mogą być pliki HTML. Tak więc jedną z rzeczy, które serwer WWW może wypluć może być plik, który my tak po prostu narysować zawierający niektóre HTML. Więc w laika, co nie HTML pozwalają robić? PUBLICZNOŚCI: Strona ładnie wyglądać. DAVID MALAN: OK, aby strona wygląda ładnie, choć myślę, że udowodnione że inaczej. Więc HTML nie pozwalają rozłożyć strony strukturalnie, i to pozwala na rodzaj estetycznie oznaczyć strony, oznaczyć zawartość statyczną, tak aby można następnie wyświetlić go w przeglądarce internetowej. Ale to jest klucz. To zawartość statyczna. Piszesz, masz go zapisać, a następnie wysłać go. I serwer WWW, a następnie zaprasza to do użytkowników. Ale stylizować za pomocą różne rzeczy języka w ogóle. Zaczęliśmy korzystać z atrybutu stylu na niektórych tagów. I atrybut stylu Ustawmy rzeczy takie jak rozmiar i kolor czcionki. I to prawdopodobnie zacząłem odkrywać, lub wkrótce do finału projekty, jeszcze innych potencjalnie właściwości, które można używać w CSS. I tak w laika, co Naprawdę to jest CSS zrobić? To są ich tylko przykłady. Jaki jest na to pozwolić HTML Nie wydaje się od tego, co widzieliśmy do tej pory? PUBLICZNOŚCI: Definiowanie stylów samodzielnie. DAVID MALAN: Definiowanie stylów samodzielnie. Więc określić takie rzeczy jak klasy, jak ty może nie spotkałem, lub wyjątkowo identyfikacji węzłów w dokumencie tak że można je stylizować. Ale konkretnie, to powiedziałbym, że CSS naprawdę pozwala robić rzeczy ostatniej mili i pozwala określić wiele dokładniej estetyka, natomiast HTML dla większości pozwala Ci uporządkować swoje strony. I mimo, że istnieją pewne wartości domyślne, jak widzieliśmy, dla tagu pozycji tag, który z grubsza rzecz biorąc wykonane rzeczy i śmiały. To dość ogólne określenie z tagiem - i śmiały. Jaki rozmiar czcionki jest to, że? Jakiego koloru jest to, że? Jak pogrubione to jest? I CSS pozwala Ci bardziej subtelnie dostroić takie rzeczy. Jak również układ, jak niektórzy z widzieliście. I szczerze mówiąc, CSS jest nieco języka bałagan. Jest to bardzo potężny, że można zrobić dosłownie każda strona internetowa, która masz widziałem w internecie dzisiaj z nim, ale jest to rodzaj bólu w szyi. I niektórzy z was uderzył głową na ścianach już tylko uwagi coś głupiego jak menu w centrum Problem ustawić siedem, jeśli dotarłeś do że punkt już. Ale sobie sprawę, te rzeczy się łatwiejsze z czasem. Zaczniesz dostrzegać wzory. I znowu, Google będzie twoim przyjacielem na różne sposoby, w którym można rozwiązywaniu tego rodzaju problemów. I śmiem twierdzić z CSS i HTML więcej ogólnie, można rozwiązywać problemy w wiele więcej sposobów, z których każdy może bardzo dobrze być poprawne, niż mógłbyś w coś jak C, nawet teraz PHP lub JavaScript. Są po prostu wiele różnych sposoby świeckich rzeczy. Ale to zaczęło się niechlujny, powiedzieliśmy. Tylko rodzaj przemieszania kod HTML i Twój CSS z atrybutem stylu było trochę zaniedbany. I tak zamiast powiedział, jakby abstrakcyjnie mówiąc, że powinien przynajmniej zacząć czynnika z Twojego CSS prawdopodobnie. Nie Twój styl atrybuty, ale przynajmniej użyć znacznika style wewnątrz, co część strony internetowej? PUBLICZNOŚCI: Kierownik. DAVID MALAN: W głowie. Do tej pory mieliśmy tylko tytuł się nie, ale można też dodać styl tag, można umieścić swój CSS z grubsza Mówiąc w kierunku górnej strony. Ale potem wzięliśmy rzeczy jeden krok dalej i uwzględnić, że się więcej w osobnym pliku. I tak te dwa pliki były jakoś teraz połączone. I rzeczywiście tak było tag, który to zrobił. I to, co było jednym z nadrzędnych motywacje do faktoringu naszą CSS Wszystkie więcej? PUBLICZNOŚCI: Ponowne. DAVID MALAN: Ponowne. Prawda? Można było zaobserwować w p-set siedem już że wiele stron, strona kupowanie, strona sprzedaży, strona portfolio, są prawdopodobnie skonstruowany nieco podobnie. Jest logo CS50 finansów na szczycie chyba, że ​​postanowiła to zmienić. Jest stopka na dole strony. I CSS pozwala następnie go na czynniki to w osobnym pliku, tak, że jeśli chcesz coś zmienić na świecie w poprzek całej witryny, można naprawdę po prostu zmienić go w jednym miejscu. Ale jest cena, jaką płacisz potencjalnie przez które zbitek CSS z mojego pliku HTML do oddzielnego złożyć odwołanie go z Znacznik, który widzieliśmy w poniedziałek. Co może minusem jest to? Wracając tydzień temu, gdy jesteśmy mówić o HTTP i TCP / IP i jak internet działa. Coś tutaj? PUBLICZNOŚCI: To zajmuje więcej czasu. DAVID MALAN: To zajmuje więcej czasu. Dlaczego? PUBLICZNOŚCI: [niesłyszalne]. DAVID MALAN: Tak. Więc to zapewne zajmuje trochę więcej czasu. Ponieważ jeden, CSS jest oczywiście nie w tym samym pliku. Więc teraz masz nie robić jeden, ale dwa wnioski. I każdy z tych wniosków, jak widzieliśmy w Chrome w tzw Inspektora, i patrzyliśmy na karcie sieciowej, każdy z tych plików wymaga jeden HTTP Wniosek, który widzieliśmy trwa pewną ilość czasu. Teraz, być może to nie jest dużo. Może to tylko 20 milisekund. Może to 200 milisekund. Ale myślę o stronie, takich jak Facebook, lub CNN, czy Google, które są znacznie większa niż przykładach ve wyglądał w pory. Strony te mogą mieć kilkadziesiąt plików, z których każdy może wymagać pobieranie pliku. Więc rzeczy mogą potencjalnie zaczynają zwalniać. A szczególnie w tych dniach, gdy wszyscy posiada telefony komórkowe w kieszeniach i wolnego połączenia internetowego, konieczności poczekać kilka milisekund, kilka więcej milisekund dla dodatkowego Pliki mogą być w rzeczywistości powoli. Opóźnienie jest słowo, które opisuje jakby czekając, że masz, że ci wystąpić podczas oczekiwania na niektóre informacja. Ale jest odwrotnie. Więc nie jest to wszelkiego rodzaju - faktycznie jest trochę huśtawce tutaj. Minusem teraz, ale co może zrobić przeglądarek jeśli jesteś mądry, aby uniknąć konieczności ubiegania się o ten sam styles.css plik może być ponownie do czego? Buforować go. Więc buforowanie - C-C-H-E - ogólnie oznacza tutaj po prostu zapisać plik, którego szukasz po raz pierwszy, i następnie sprawdzić pamięć podręczną dla niego. Sprawdź jesteś rodzaju pojemniku, a jeśli masz już Kopia styles.css, nawet jeśli niektóre inne strona w p-set, lub stronie internetowej, prosi go ponownie, tylko dać Użytkownik, który sam w pamięci podręcznej kopii. Nie przejmuj się o nią. Minusem jest jednak, jak niektórzy z was nie potknąć się w p-set. Jeśli dokonasz zmian na serwerze i wrócić do przeglądarki i przeładować, czasami robi przeglądarki Ci przysługę i nie przeszkadza ponownie pobierając plik styles.css ponieważ, dalej, jakie są szanse że te style, które używa Facebook zamierzasz zmienić godzinę na godzinę lub z dnia na dzień? Jest to dość niski. Mogą zmieniać się w czasie, ale nie przez minutę lub przez godzinę. Tak więc podstęp, po prostu FYI, gdy robi internetowej rozwój, jest często przytrzymaj przesunięciem na przykład, a następnie kliknij przeładować w przeglądarce, i że będzie zazwyczaj powiedzieć reload przeglądarki wszystko, nawet jeśli masz już że w pamięci podręcznej. Więc znowu, Plusy i minusy, jednak wszystkie ostatecznie projekt decyzji. Więc teraz, że nie tylko zakończyć historię tutaj. Gdybym teraz wrócić i do tyłu i do tyłu i wstecz, zaczęliśmy wprowadzać nie tylko HTML, ale PHP. Więc w laika, co nie PHP zróbmy? PUBLICZNOŚCI: [niesłyszalne]. DAVID MALAN: Co to jest? PUBLICZNOŚCI: Wprowadzenie logiki w kodzie. DAVID MALAN: Tak, wprowadzenie logiki w kodzie. Więc to prawda, język programowania z pętli i zmiennych oraz Funkcje i warunki, i wszystkie rzeczy używaliśmy powrotem kiedy od podstaw. I PHP, widzieliśmy, można stosować albo w linii poleceń - to nie musi mieć nic wspólnego z sieci, nawet jeśli to jest naprawdę jej początki i co to ma tendencję być dobry i sprzyja - ale można korzystać jedynie przez naturę PHP z tym, że ma nadruk () Funkcja i printf () funkcja, Funkcja lub echo (). Jest bukiety sposobów można może drukować tekst z PHP. W związku z tym, można użyć tego programowania język do wyjścia dokładnie co mówiliśmy wcześniej. Można dynamicznie generować Twój HTML. Może nie wszystko. Może twarde rzeczy, jak kod Nagłówek i stopka, a logo, i arkusze stylów, i to wszystko. Ale czegoś takiego jak p-set siedmiu, dokąd się wybierasz, zapasów i manipulowania pokazano portfel użytkownika, który jest będzie dynamicznie zmieniać, można na pewno korzystać z PHP i logikę to daje Państwo jako język programowania dla Wyjście dynamicznie podgrupach strony. Więc kiedy mówisz o dynamicznych stron internetowych, lub programowania WWW, to co tak naprawdę chodzi. Jak za pomocą języka PHP lub rzeczy nazywa Python lub Ruby lub Java, lub jeszcze inne języki, do kwerendy bazy danych Często lub innego serwera i następnie dynamicznie wypluć HTML. Teraz efekt końcowy, jak na bok, jest że większości stron internetowych w formacie HTML, w tym swoje p-set siedem, to prawdopodobnie będzie ogromny bałagan, jeśli spojrzeć na źródła Kod w przeglądarce. To nie jest wielka sprawa. W tym momencie, gdy zależy nam na styl, dbamy o rzeczy, które piszesz. Nie będziemy dbać o rzeczy że co się wyjść kod. Więc nie martw się o wcięcia tutaj, czy jest to PHP faktycznie wyprowadzania rzeczy. Po tym wszystkim, przeglądarka nie będzie obchodziło, i człowiek nie będzie szukał u źródła i tak. Mamy zespół, na przykład, by być patrząc na PHP. Więc pozwól mi dać szybkie przykład teraz dlaczego jeszcze to może być przydatne. Tak szczerze mówiąc, nie pamiętam, ostatni razem użyłem C do rozwiązania problemu w prawdziwy świat. To było chyba na studiach, kiedy Musiałem użyć języka, który był dość niski poziom i dał mi okazja do zrobienia czegoś bardzo wysoki wykonywania naprawdę zaoszczędzić jak najwięcej CPU cykli, jak mogłem, w dużej części bo przy użyciu ogromnych zbiorów danych, i każdy cykl CPU liczy. I szczerze mówiąc, nawet w takie rzeczy jak telefony te dni i inne urządzenia gdzie nie dość mają tyle pamięci i nie bardzo mają jak wiele procesorów, używając szybszych językach nadal jest atrakcyjne. Ale w prawdziwym świecie, jeśli tylko chcą rzucić jakiś program wraz z analizy niektórych danych, lub zebraniu cała masa rejestracji dla niektóre grupy studentów i chcesz bardzo szybko zautomatyzować wysyłanie e-maili jeden po drugim, aby każdy z tych rejestrujący, masz zamiar dotrzeć do wyższy poziom języka niż C tak powiem. Coś jak PHP lub Python lub Ruby, lub a które istnieją pół tuzina innych te dni. Ale te trzy są prawdopodobnie Najbardziej modne teraz. I co to oznacza, że ​​można otworzyć się edytorem tekstu takim jak gedit lub najbardziej cokolwiek innego i po prostu zacząć pisania kodu, nie martwiąc o kompilacji, bez konieczności naprawdę martwić o zarządzanie pamięcią, pamiętając jednak, że mało niechlujstwo w końcu wrócić ugryźć, czy zestaw danych staje się większy lub problemem dostaje duże. Ale co to oznacza dla us jest następujące. Pozwólcie mi iść do przodu i uruchamiania Speller z problemem ustawić sześć. Więc to jest moja realizacja opartego Trie że stosowane na duże zarządu, w którym nie przeprowadza się tak dobrze. Wrócimy w ciągu tygodnia i ponownie tych, którzy nie kończą się na szczycie wielka płyta w naszym ostatnim wykładzie. Ale teraz, pozwól mi iść do przodu i po prostu uruchomić moje rozwiązanie w tekście, i zrobimy Biblia Króla Jakuba, i jedziemy. To są podobno wszystkie błędnie napisane słowa z Biblia Króla Jakuba. Wdrożenie trwało i mój pół sekundy w sumie. Więc nie jest tak źle na tym szczególności komputera. Ale pomyśl, jak bardzo Kod miałem napisać. Pomyśl, jak wiele kodu trzeba było napisać. Pomyśl, ile godzin spędził w D-hol lub akademika lub gdziekolwiek faktycznie kodowania się to rozwiązanie. Cóż, jeśli rzeczywiście mają wyższy poziom język jak PHP, zapoznać się z co można zrobić tutaj. Najpierw załóżmy, że jest raczej Twój kod dystrybucji. Jest to plik o nazwie ortografii. Jest on dostępny jako część dzisiejszego Kod dystrybucji. I mam zamiar pomachać ręką w najbardziej o szczegółach, ale to jest rzeczywiście Ciekawym przykładem na to, jak to polubisz portu język jak C nad PHP. I dosłownie otwarte dwa okna tekstowe, jeden z moich wersji C speller.c, i po prostu zacząłem tłumaczyć to w moim udać się do PHP i wpisując go przy użyciu najbliższe równoważne funkcje. Więc niektóre z tych rzeczy są różne. Widzieliśmy ostatni raz, że nie korzysta z PHP uwzględnić w bardzo podobny sposób. Wykorzystuje wymaga zazwyczaj, choć obejmują nie istnieje. Define jest trochę inny od # Define w C, ale to jak zrobić stałą. $ Argc się okazuje istnieje w PHP, więc widzieliśmy, że przed. Są to tylko zmienne, wszystkie które zaczynają się dolara. Przypomnijmy, to tylko kilka pływających punktów. Więc krótko mówiąc, to serdecznie zapraszamy do przerzucać tego, czy ciekawy, to jest prawie line-dla-line konwersji C wersja speller.c do PHP. I można to zrobić ponownie na pół tuzina innych języków. Ale co ciekawe, jest to. Lub co szczerze przygnębiające to jest. Pozwól mi iść dalej i wpisz temat dictionary.php, i twierdzą, że jestem zamiar iść do przodu i ponownie wdrożyć Problem ustawić sześć tutaj. Więc proponuję najpierw, że w tym Plik, który będzie realizowany w PHP, więc pozwól mi otworzyć moje tagi, jak to. Pozwól mi dać sobie globalny zmienna $ rozmiar dostaje zero. I mam zamiar dać ja tabeli mieszania. Będę korzystać z tabeli mieszania dla tej rzeczy. Jak mogę zadeklarować tabeli mieszania w PHP? Gotowe. OK. Tak otwarty uchwyt Uchwyt stanowi blisko co w PHP, jak widzieliśmy? Tablicy, ale tablica może być tablicą asocjacyjną. Tablica asocjacyjna jest Struktura danych kojarzy klucze z wartościami. Teraz w najprostszy indeksowane numerycznie tablicy, te klucze są co? Zero, jeden, dwa, trzy, prawda? Stara szkoła rzeczy z powrotem z C, ale może być jak Foo, łańcuchy i barze, lub Maxwell, czy każdy taki ciąg. Tak, że mogę wykorzystać za chwilę. Pozwólcie mi iść do przodu i deklarują Funkcja jak - zróbmy load () w pierwszej kolejności. Więc obciążenie function (). I PHP jest trochę inaczej w tym dosłownie wpisać funkcję, ale nie wpisz typ zwracany. Mam zamiar iść dalej i powiedzieć, że funkcji load () powinna podjąć w Argument $ słowniku, po prostu jak wersja C nie. Robię, że z pamięci. I proponuję, że jestem zamierza to zrobić. Jestem po prostu zrobić foreach. Mam zamiar wywołać funkcję o nazwie file (), przekazując w imieniu, które Plik, który jest zmienny $ $ Słowa jako słownik. A następnie wewnątrz mój pętli tu jestem zamiar iść do przodu i przechowywać w moim $ Tabela $ word dostaje prawdziwe. Gotowe. Oh, wait. Gotowe. OK. To jest funkcja () obciążenie powiedzieć w PHP. Teraz, dlaczego to działa? A ja tu trochę oszukuje. Tak, jeden, foreach widzieliśmy krótko ostatnio. To po prostu oznacza, że ​​można iteracyjnego Tablica z I nie przeszkadza i n i Plus Plus, i to wszystko. Słownik jest oczywiście nazwa pliku, coś jak duże lub małe, dwa słowniki użyliśmy po raz ostatni. Plik jest funkcja, która otwiera tekst plik, odczytuje go linia po linii, a ręce Tobą ogromny wachlarz, której każdy z elementów jest linia z tego pliku. Więc to połączenie fopen i fread i pętla, oraz fclose, i to wszystko. Wreszcie, jako słowo oznacza po prostu, że jest Zmienna będę mieć dostęp do na każdej iteracji w tej pętli. Tak w skrócie, to oznacza tutaj jeden liniowej otworzyć plik, którego nazwa jest w Słownik, zmienna, iteracyjnego to linia po linii, i za każdym razem można dostać Linia, przechowywać w zmiennej o nazwie słowa, a następnie zrobić coś z wyrazu. Co chcę zrobić? Chcę umieścić słowo do mojego tabeli mieszania. Cóż, mogę umieścić coś w moim hash tabeli tak jak w C w nawiasach kwadratowych. Jest to nazwa dla mojego tabeli mieszania. Idę do tego indeksu hash Tabela w tym miejscu. Więc nie wspornik do zera, nie nawias jeden. Uchwyt cytat coś cytatu, cokolwiek to słowo. I jak możesz mieć w telefonie trie hash tabeli pracy, po prostu sklep skutecznie logiczna, w sposób dorozumiany lub jawnie. Gotowe. Jestem przechowywania wartość prawda. Teraz jest kilka rzeczy, Jestem na skróty tutaj. Technicznie, nie będzie przykry nowej linii, / n, w końcu każde z tych słów. Więc powinienem chyba wywołać funkcję PHP nazywa kotlet (), która będzie dosłownie posiekać, że off. I rzeczywiście trzeba zrobić jedną rzecz. Powinienem chyba na każdym zwiększyć rozmiar iteracji, więc jestem śledzenie na całym świecie z tego, co to jest. I szczerze mówiąc, i to jest jeden z głupsze aspekty PHP, jeśli jesteś za pomocą zmiennej globalnej, trzeba wyraźnie powiedzieć, że jesteś. Więc mam zamiar faktycznie wpisz w globalnym $ Rozmiar, $ table globalny, a teraz moja funkcja jest zakończona. Więc nie jest tak proste, jak wcześniej, ale prawdopodobnie trwało krócej niż C wersji, może być? OK. Więc teraz zróbmy kontrolę działania (). Zobaczmy, czy to trwało co najmniej godzin na koniec, że zabrał nas w C tak, pozwól mi iść do przodu i deklarują sprawdź w funkcji. Odbywa się w słowa argumentu, który jest będzie pochodzić z speller. I mam zamiar sprawdzić, czy następujące zmienne isset, tabela Uchwyt strtolower słowa - niech zrównoważyć wszystkie moje nawiasach - następnie powrócić prawda. Inny - że było naprawdę ciężko częścią tego programu. Indziej, return false. Gotowe. To wyboru (). Teraz, dlaczego to działa? Cóż, jeden zdałem w słowie, który jest ciągiem. Dwa, mam kontroli wewnątrz hash Stół, który się nazywa $ tabela. Jestem zmuszając go na małe, dzwoniąc Funkcja bardzo podobna tolower () w C, ale to nie całe słowo, nie pojedynczy znak. A jeśli jest ustawiony, to znaczy tam jest ustawiona wartość, innymi słowy jeśli to prawda, to tak, jest to słowo. Bo ja je tam z obciążeniem (). A jeśli nie, mam zamiar wrócić fałszywe. Teraz gdy inne są proste. Rozmiar function (), jak mogę to zrobić? I w zasadzie nie zwróci $ rozmiar. Ale technicznie trzeba zrobić to irytujące rzeczy. I faktycznie się usłyszeć, byłem cięcia jeden róg zbyt wiele. I naprawdę trzeba global $ tabela. Ale powiedział, że jest rozładować). Rozładować () jest niesamowite. Wyładować function (). Jak chcę wdrożyć unload ()? Gotowe. OK. Tak rozładować (), zarządzanie pamięcią jest całkowicie pod opieką dla Ciebie w coś jak PHP i wiele języków wyższego poziomu. Tak, to jest niesamowite. Jak, dlaczego, do cholery, spędziliśmy przeszłość osiem dodatkowo tygodni na piśmie C najwyraźniej bardzo wolno, naprawdę czas spożywających problemy z kilkudziesięciu godzin z pracy w ramach naszych pasów? Cóż, z jednej strony, to może działać grzywny dla małych programów. To na pewno przyspieszyło mój czas rozwoju. Ale zobaczymy, co się stanie, w świecie rzeczywistym. Pozwól mi wejść do tego katalogu w oknie terminala. Jest ortografii. I zauważyć, jak na bok, a może spotkałem tego problemu ustawić w Problem zestaw sześciu lub siedmiu. Nie muszą ściśle końca pliki PHP z. php. Jeśli umieścisz linię jak ten pierwszy w bardzo góry, to specjalna linia składni, które zasadniczo oznacza znaleźć Program nazywa się PHP i użyć go do interpretować ten plik. Teraz nikt nie wie, że Używam programu PHP. I można go uruchomić po prostu tak, jakby zostały opracowane w C coś Ale chodzi o to. Właściwie, zróbmy to jeszcze raz. Dropbox/pset6 /. Jest ortografii. OK, 0,44 sekundy. Zrobiło się szybciej ten czas. Teraz idziemy do wersji PHP. Miły akcent. Ale pomyśl, ile czasu I zapisane w godzinach urzędowania. OK. Więc 3,59 sekundy, które w rzeczywistości nie brzmi dokładne albo. Ale to dlatego, że długie opowiadanie, kiedy drukując ogromną ilość rzeczy do ekranu, to Sam spowalnia rzeczy w dół. Co tak naprawdę wziął w CPU Urządzenie było 3,59 sekundy, w przeciwieństwie do C, który odbył 0,44 sekund ostatnio. To naprawdę kolejność skala inna. Więc gdzie jest ta cena dochodzi? Dlaczego jest tak dużo wolniej? Dlaczego PHP wykonać tak słabo? Danielle? PUBLICZNOŚCI: Ty naprawdę nie użyć tabeli mieszania. DAVID MALAN: tak naprawdę nie użyć tabeli mieszania. Więc niby nie. Więc to jest tablica asocjacyjna. Najprawdopodobniej, jeśli ludzie w PHP są bardzo inteligentny, kiedyś pod kaptur rzeczywiste tabeli mieszania realizowany w coś jak C lub C + +. Ale. Tak. PUBLICZNOŚCI: [niesłyszalne]. DAVID MALAN: Tak. Tak więc każdy z funkcji napisałem teraz - Właściwie można powiedzieć, że po raz kolejny trochę głośniej? PUBLICZNOŚCI: Każda z tych funkcji, które Czy uwzględniono ma dużo więcej do pełna pojemność niż - DAVID MALAN: Więc to jest bardzo prawdziwe. Tam jest dużo więcej, że jesteśmy nad głową naprawdę nie widząc, koncentrując się tylko na dictionary.php, który właśnie napisał. Natomiast jest cała tłumacz dzieje się w tle. Rzeczywiście, kiedy prowadził ten program, to nie został uruchomiony skompilowane zer i jedynek zaprojektowany dla mojego procesora Intel. Raczej, że został uruchomiony wiersz po wierszu Kod PHP, który wygląda dokładnie jak mamy wpisane. I tak przy każdym użyciu interpretowany język, ty faktycznie zapłacić tę cenę. To zajmie trochę czasu, aby przeczytać plik od góry do dołu, od lewej do w prawo, a następnie wykonać każdy linia znowu i znowu. Teraz w rzeczywistości, szczególnie w internecie, rzeczywiście można przyspieszyć ten proces poprzez buforowanie wyników Kod PHP jest interpretowany. I to ma sens w Internecie, ponieważ jeśli nie ma jednego użytkownika, jak mnie tutaj, ale 1000 lub 10000 użytkowników, a następnie być może po raz pierwszy plik jest dostępne jest powolne, ale potem to o wiele szybciej. Ale to też, ponownie, jest kompromis. I na coś w danych badawczych ustaw, a nawet jak coś duża tego, użytkownicy będą ostatecznie zaczynasz czuć, że spowolnienie. Tak w skrócie, są interpretowane języki bardzo w modzie, bardzo popularne, a szczerze mówiąc to prawdopodobnie wy języki należy sięgnąć po rozwiązania problemów Po CS50. Ale sobie sprawę, jak wiele jesteś naprawdę biorąc za pewnik, pod maską naprawdę te kilka ostatnich tygodni w hash stoły, i drzewa, i próbuje, które są stosowane w końcu faktycznie wdrożyć takie rzeczy otwartym uchwytem, nawias kwadratowy, co możemy teraz wdzięcznością przyjąć za pewnik. Warto więc przyjrzeć się teraz W tym kontekście internetowej. I ostatni raz wspominałem, że jest Pęczek superglobals w PHP, że tak naprawdę nie są istotne w wierszu poleceń. Są bardziej istotne w kontekście z wykorzystaniem PHP w kontekście internetowej. Więc PHP działa na serwerze WWW w celu do generowania rzeczy jak HTML. A my spojrzał na $ _GET i $ _POST i to tam automatycznie użytkownicy " Wejście kończy się po prostu, jeśli przedłoży tworzyć w pliku z rozszerzeniem. php na internecie Serwer jak urządzenia. Ale załóżmy na chwilę spojrzeć na $ _COOKIE I tablicy $ _SESSION. W laika, co to jest plik cookie, jak można zrozumieć w kontekście korzystając z internetu? PUBLICZNOŚCI: Plik na komputerze. DAVID MALAN: Tak. Jest to plik na komputerze użytkownika obsadzony przez co strona zdarzy ci się odwiedzić. Tak więc, gdy idziesz do Facebook, kiedy go do bankofamerica.com, gdy idziesz do google.com, gdy idziesz do niemal każdego Strona www na świecie w tych dniach, tym cs50.net, plik cookie jest obsadzone na komputerze, który jest albo wartość przechowywana w pamięci RAM w telefonie Komputer w pamięci przeglądarki, lub czasami rzeczywiście przechowywany plik na dysku twardym. I co się zazwyczaj przechowywane w tym pliku nie jest nazwą użytkownika, a nie swoje hasło, zazwyczaj nie jest to coś wrażliwe chyba strona nie jest tak dobre z ich bezpieczeństwa, ale jest to unikalny identyfikator między duży innych rzeczy. To duża liczba losowych zasadzone na swoje komputer, ale można myśleć, jak jakby pieczęć ręka jak z wirtualnego Klub lub park rozrywki, że niektóre pozwala pracownicy, właściciele, że usługi, aby pamiętać, kim jesteś. Więc jeśli duża liczba losowa jest jak 12345678, choć to oczywiście nie zbyt losowe, pomyśl o tym, jak pieczęć ręka podczas wizyty facebook.com po raz pierwszy, że pieczęć ten numer na ręku. A potem, ponieważ po HTTP, można jest przeglądarka, a ponieważ Facebook Oczywiście mówi sama jak sieci serwera, mówi, że protokół HTTP kiedy tylko następnie odwiedzić facebook.com, czy to drugie później godzinę później, nawet na następny dzień, tak długo, jak nie mają wyraźnie zalogować się, które skutecznie jest jak mycie rąk. HTTP mówi, należy przedstawić swoje Znaczek za każdym razem ręcznie powrócić do tej strony. Co Facebook to nie jest to, że spójrz na tego ręki i pieczęć mówią, oh, 123456789. Nie wiem, na pierwszy rzut oka, że ​​to jest David Malan w Cambridge, Massachusetts, ale mogą sprawdzić ich Baza danych i powiedzieć, oh, osoba , na którego komputerze posadziliśmy 123456789 jest David Malan z Cambridge, Massachusetts. Pokażmy, że to jego profil użytkownika Strona lub jego News Feed. Ale jest pewien problem, jeśli to jest to, jak web rzeczywiście działa. Rzućmy okiem na szybki przykład. Niech rzeczywiście iść powiedzieć facebook.com. Ale zanim będziemy mogli pójść tam, pozwól mnie śmiało i otwarcie Chrome Inspektor tutaj. Pozwól mi spojrzeć na karcie sieciowej. A teraz idź i wpisz w https://facebook.com. I robię to tak, że nie widzimy tych wszystkich przekierowań i odpadów czas patrząc przez te. Pozwól mi wciśnij enter. Dobrze. Widzimy całą masę wniosków. Przychodzi Facebook. Jest cała masa plików. I tutaj, na moje wspomnienie z latency ostatni raz, to Wiele żądań HTTP. Jednak pierwsza jest prawdopodobnie najbardziej interesujące. Więc przewiń tutaj, a Będę powiększyć w sekundy. To będzie rodzaj bałagan, ale zobaczymy. Facebook jest wysłanie do nas cała masa rzeczy. Ale zaraz, ciekawe. Oni sadzenia nie jedną, ale cztery znaczki ręki na rękę tutaj. Set-Cookie, Set-Cookie, set-cookie, set-cookie. I istnieje kilka funkcji tutaj. Wszystkie z nich wspomnieć o niektórych rodzaj wydechu. I wygląda na to Facebook ma nadzieję pamiętali o mnie, aż do 2015 roku. Więc to zapewne czas, w którym Muszę się wylogować albo będziesz po prostu automatycznie zakładać, że jestem nie wraca. Więc to jest naprawdę przyzwoity czas. A są jakieś inne co się tutaj dzieje. Plik ten wydaje się być siłą usunięta, mówiąc, że wygasł w 1970 roku przed ciasteczka istniał. Tak więc przeglądarka jest po prostu będzie założyć, OK, to jak mycie pieczęć ręce. Ale teraz, gdy moja przeglądarka robi kolejny wniosek - pozwól mi iść dalej i zrobić ponownie i ponownie. Teraz pozwól mi przejść z powrotem do top wniosek i zejść tutaj, nagłówki żądania. To zauważyć. Więc teraz nie jestem pod nagłówki odpowiedzi, nie zauważyć, że mówi nagłówki żądania. I zauważył, że moja przeglądarka w ramach jego wniosek po uderzeniu reload ma wysyłane co najmniej następujące informacje. Nie set-cookie, ale ciasteczko. Więc to jest linia, nagłówek HTTP tak mówić, gdzie moja przeglądarka jest swego z bez mojej wiedzy to przedstawienie moja ręka do wglądu Facebooka. Więc te ciasteczka mogą być wykorzystywane następnie do czego? Aby pamiętać, kim jesteś, czy pamiętam, jak wiele razy byłem tam, lub naprawdę nic. Więc tutaj jest counter.php. I pozwól mi powiększyć czcionki. I za każdym razem przeładować stronę, zawiadomienia to pamiętać, ile razy Byłem tam. Dobrze, że nie wszystko jest tak imponujące. Po prostu zamknąć tę kartę, a teraz wróćmy do http://localhost/counter.php. O, to ciekawe. Wciąż pamiętał, nawet choć zamknąłem kartę. I szczerze mówiąc, jeśli zamknąć przeglądarkę, jeśli realizowane w odpowiedni sposób, I mogą jeszcze pamiętać, że ta osoba jest , kim był pierwszy raz, a tylko raz idę do menu Chrome, które tutaj jest tutaj, i przejść do Historia, a następnie kliknij przycisk Wyczyść dane przeglądarki, jak niektórzy z was mogą mieć w przeszłości, tylko wtedy będzie pliki cookie faktycznie zostać usunięte podczas internecie rozwój. Tak więc, jeśli mamy go - niech bliska gedit tutaj. A jeśli już iść do tego pliku. Pozwólcie mi odejść do naszego vhosts / localhost / public i pozwól mi zrobić counter.php. Zauważ, że jest to dość prosty program. Jest to dość prosta strona. Tak więc w górnej części pliku Zaledwie komentarzy. Ale tutaj jest nowa linia, którą może widziałem już w p-set siedem, session_start (). To jest linia kodu PHP, który zasadniczo opowiada serwer WWW, należy Upewnij się, że pieczęć ręce i zrobić sprawdź znaczki rąk. To wszystko, że linia ma, i to to wszystko z tego procesu dla nas. Następnie zauważył Mam tylko dwa oddziały tutaj. Jeśli licznik wewnątrz tego klucza Zmienna globalna zwany specjalny $ _SESSION Jest - innymi słowy, czy jest jakaś wartość nie - zabierzmy go i przechowywać go w lokalnym zmienna o nazwie $ licznik. Else, niech przypisać $ licznik Domyślna wartość 0. Teraz tutaj jest jeden aspekt PHP to zarówno błogosławieństwem, jak i przekleństwem. PHP jest trochę zaniedbany. Tak więc podczas gdy w C, co Zakres licznika zostały tutaj albo tutaj? To były ograniczone z tymi klamrami. Wiesz co? W PHP istnieje nawet poza te nawiasy klamrowe, tutaj i tutaj, i tu, i tu, i nawet na dole. Więc mówię, to jest szczęście w tym sensie, że nie trzeba myśleć, jak ciężko jak my tydzień temu. Ale jest to również trochę przekleństwo w które nie ważne gdzie użyć zmiennej w PHP, co najmniej takiego programu, to ogólnie dostępne dla lepsze lub na gorsze. Więc trzeba pamiętać, że teraz zmienne mogą być niezdefiniowane. Mogłeś określono je gdzie indziej. Ale co ja mam zrobić, w końcu? Idę do przechowywania wewnątrz, że globalne zmienna jako wartość Counter wynik robi licznik plus 1. Więc to jest tylko arytmetyka że nie inkrementacji tego licznika. A fakt, że jestem przechowywania że wartość z powrotem tutaj, jest środkiem do zasadniczo aktualizacji bazy danych do pamiętać, że użytkownik 123456789 było tutaj dwa razy. A kiedy to ponownie następnym razem Odśwież stronę, to będzie sprawdzić moja ręka pieczęć i powiedzieć, oh, Użytkownik 123456789 ma teraz tu trzy razy. I co z tego i podobnych języków PHP robią dla nas jest to, że są pojęciami się, jak i gdzie i na jak długo do przechowywania wartości w tym specjalne superglobalna. I to superglobalna następnym razem odwiedzić stronę jest jakby magicznie wstępnie wypełnione, wypełnione wartościami, które byliśmy tam ostatni raz odwiedził, czy to było drugie temu, tydzień temu, czy w 2013 roku i jesteśmy obecnie rozmowy około 2015. PHP i serwera WWW zadba wszystkich, że dla Ciebie. PUBLICZNOŚCI: [niesłyszalne]. DAVID MALAN: Zmienne w PHP są w zasadzie zawsze, chyba że globalna Oświadczam je wewnątrz funkcji, a następnie są lokalne do tylko funkcję. Ale dlatego, że nie napisałem każdy funkcje, są teraz skutecznie globalna w całym moim pliku tutaj. PUBLICZNOŚCI: Czy istnieje sposób do ich lokalnych? DAVID MALAN: Czy istnieje sposób, aby ich lokalny? Tylko przez owinięcie ich w funkcji. Który w najnowszej wersji PHP, możesz to zrobić za pomocą anonim funkcja. Ale o tym w kontekst JavaScript. Ale Krótka odpowiedź brzmi: nie. Dłuższa odpowiedź jest twierdząca. Ładne. Dobry quizu pytanie. Dobrze. Tak więc na koniec, sama strona rzeczywiście bardzo proste. Zauważ, że po I wyjść z trybu PHP, wycofanie że wszystkie te rzeczy w dół poniżej jest po prostu będzie się pluć z surowego do przeglądarki. Co jest w porządku, ponieważ chcę, aby wysłać Użytkownik niektóre HTML, ale chcę dynamicznie aktualizować że HTML. A jednym ze sposobów można to zrobić jest do sortowania bardzo szybko wracać do PHP tryb, korzystanie otwarty nawias znak zapytania znak równości, a następnie wyjście wartość licznika. Lub jeśli to wygląda trochę tajemnicze, to Znak równości jest w rzeczywistości tylko niektóre za to cukier syntaktyczny printf ($ licznik). Ale szczerze mówiąc, to trochę brzydki i trochę irytujące, aby wpisać. Więc PHP bardzo ładnie oferuje tę funkcję gdzie można po prostu powiedzieć, że więcej zwięźle w taki sam sposób. Więc co się dzieje pod spodem kaptur? Niech szybko zajrzeć na sieci Zakładka tu na counter.php. I pozwól mi iść do przodu i pierwszy niech wyczyścić pliki cookie. Wyjaśnijmy od przeglądania danych Początek czasu. Teraz wróćmy tutaj. Teraz przeładuj stronę. I jestem z powrotem na zero. Bo moja ręka została pieczęć myte, Mam teraz nowy plik cookie. Rzeczywiście, jeśli spojrzeć na karcie sieciowej i spojrzeć na nagłówki odpowiedzi, ogloszenia że urządzenie wysyła mnie ciasteczko, którego nazwa jest nieco arbitralnie, ale rodzaj rozsądnie, PHPSESSID. I to mi naprawdę to wysyłanie duża liczba losowa. To nie jest całkiem sporo. To nie jest całkiem szesnastkowym. Jest to pewnego rodzaju ciąg alfanumeryczny, ale prawdopodobnie jest to przypadkowe. I to jest tak, aby ręka stempel mówią, że mam na myśli. Tymczasem jeśli reload, a następnie kliknij spojrzeć na ten drugi dla mojej drugiej linii wniosek, zawiadomienie, że mój wniosek teraz Nagłówki zawierają PHPSESSID równa to, nie set-cookie, ale tylko ciasteczka. I to prezentacja mojej przeglądarki mojego znaczka stronie. Więc teraz jak teaser, a porozmawiamy więcej o tym w tygodniu lub tak, ale W jaki sposób to zrobić ci wrażliwe, konto Facebook podatne i inne takie Rachunki narażone? PUBLICZNOŚCI: Jeśli ktoś ma plik cookie. DAVID MALAN: Tak, jeśli ktoś ma swoje ciasteczko. Mam na myśli naprawdę, podobnie jak niektórzy z was może próbowali w jak klub lub park rozrywki, jeśli spróbujesz czegoś tak, aby skopiować znaczek, choć do tyłu na ręce innej osoby, a następnie on lub ona prezentuje to jako własne, czy to rzeczywiście nie wygląda identyczne, 123456789, a internetowej Serwer jest najwyraźniej po prostu się do zaufanie, że użytkownik jest tobą. I to jest rzeczywiście podstawowym zagrożenie w dowolnym momencie korzystania z plików cookie bo jeśli ktoś tak po prostu fałszuje mówić swoje ciasteczko, domyśla się, co to jest, albo naprawdę kopiowanie patrząc na komputerze i jest jak, OK. Ciasteczko Dawida jest JJ3JIK i tak dalej, a następnie są one wystarczająco inteligentny, aby wiedzieć, Jak sortować ręcznie wysłać, że plik cookie z przeglądarki lub z Program piszą, mogą całkowicie zalogować się na stronie internetowej, jak ty. To nie jest trudne, aby udawać, że ktoś inny, chyba że ponownie p-set dwa, które wprowadzono, co? PUBLICZNOŚCI: Kryptografia. DAVID MALAN: trochę trochę kryptografii. Proste kryptografii przynajmniej Standard Edition, ale krypto jednak. mniej. Okazuje się, czy szyfrować wszystkie te nagłówki za pomocą czegoś, co mogą teraz wiedzieć więcej swojsko jak SSL, Secure Socket Layer, lub https:// adresy URL, wtedy wszystkie te rzeczy, które już zerkając na faktycznie szyfrowane, co oznacza, że ​​jest to jak ty nie może odczytać znaczek ręki. Tylko facebook.com może lub google.com, lub w tym przypadku, urządzenie może Przeczytaj tę pieczęć ręki. Tragicznie, choć i znowu, to jest zbyt właściwe z rzeczy NSA późno, nawet SSL jest łamliwe. I nie jest to w rzeczywistości, że trudno nawet złamać to szyfrowanie. Nie tyle złamanie szyfrowania, ale przez oszukiwanie przeglądarka do odszyfrowania Dane przedwcześnie. Ale znowu, będziemy cię drażnić się, że przed długi. Na razie tylko się bać. To tragicznie rodzaj prawda. Dobrze. Więc skąd to się nas opuścić? Dobrze, zróbmy to. Idziemy do przodu i podjąć szybkie Teaser przed przerwę. I myślę, że trochę dłużej pozostawać dzisiaj, ale jedziemy do nurkowania w coś zupełnie nowy i sexy, które będą zaostrzy apetyt na jeszcze więcej. Więc to jest zapowiedź. Więc SQL, zaczęliśmy rozmawiać o zawsze tak krótko ostatni raz. Będziesz naprawdę ubrudzić sobie ręce niektóre z nich w p-set siedmiu. I laika, co robi SQL - S-Q-L - dla Ciebie zrobić? Co to jest? Tak. PUBLICZNOŚCI: niech Ci dane dostępu. DAVID MALAN: Tak. To pozwala ci uzyskać dostęp do danych w bazie danych. Structured Query Language. I to jest w zasadzie język programowania. Są to cechy, które nie będzie nawet w klasie. Ale skutecznie mogą zdefiniować funkcje. Nazywa się je przechowywać procedur w języku SQL. Ale będziemy trzymać go w stosunkowo prosty i po prostu używać go do kilku podstawowych operacji jak wybranie danych, wprowadzanie danych, aktualizowanie danych i usuwania danych. I naprawdę można myśleć o bazy danych, jak bazy danych SQL, jak tylko jest program Microsoft Excel. Ponieważ SQL odnosi się do relacyjnej baza danych, w której relacja po prostu oznacza, tabele. Wierszy i kolumn. Więc wszystko można umieścić w arkuszu kalkulacyjnym tak czy Dokumenty Google, można umieścić w bazie danych SQL oświadczając tabeli. Teraz, w jaki sposób jest ona dostępna że informacje? Cóż, z polecenia lub pytania, takie jak to. SELECT, INSERT, UPDATE i DELETE. I w przeważającej części, to są cztery tylko składniki trzeba zrobić coś całkiem mocno w błąd ustawić siedem. Teraz z powrotem w dzień, to faktycznie interakcji z bazą danych w czarno-biały w okno terminalu migający znak zachęty tak. I bazy danych mamy uruchomiony na Urządzenie to zwane MySQL, który jest Aparat bazy danych wolne i otwarte. Jeśli Google i przeczytać w Wikipedii artykuł, będziesz wiedzieć, że nazwa jest nieco przejścia dla niektórych wersje Linuksa. Baza danych jest w rzeczywistości Maria widelec więc mówić o MySQL. Krótko mówiąc, Oracle kupił MySQL. Oracle jest duża firma. Ludzie są martwi, że byłoby nie pozostają zupełnie jak open source, tak, to jest po prostu kopia MySQL to jeszcze wolne, wciąż open source, oraz zainstalowany w Fedora Linux domyślnie. Ale to jest rodzaj bólu szyi do zapoznania się z bazy danych w ten sposób. Więc m.in. w urządzenia CS50 darmowe narzędzie open source o nazwie phpMyAdmin. Tylko zbieg okoliczności, że jest napisane w PHP. Nie ma fundamentalne znaczenie Potrzebujemy dla PHP tutaj. Ale to tylko narzędzie internetowe, które możemy pobrać za darmo, zainstalowane w Urządzenie, które pozwala nam na graficzny interfejs użytkownika, z którym zbadać siedem p-set z bazy danych które do tworzenia nowych baz danych, powiedzieć do własnego ostatecznego projektu gdybyś jak i ostatecznie stworzyć dynamiczne strony internetowe, takie jak CS50 Finansów które pozwalają na wyszukiwanie danych i aktualizuje dynamicznie dane. Nie zamierzamy użyć tylko prosty plik tekstowy lub CSV. Rzeczywiście można korzystać z bazy danych inteligentnych Program, dzięki czemu można wykonać więcej wyrafinowanych zapytań niż tylko czytanie przez wszystko liniowo. Tak na przykład, to jest to, co daje Ci z pudełka dla p-set siedmiu. To jest stół z pozoru przynajmniej Trzy kolumny, z których jeden jest użytkownika, z których jeden jest ziemniaczane i którego drugi ID. Ale ciekawa rzecz, i tylko wydobyć jedną myśl tutaj, nazwa użytkownika jest przypuszczalnie już wyjątkowy, prawda? To znaczy, większość każdej strony, jeśli masz nazwy użytkownika, nie Nie może być dwóch Caesars. Nie może być dwóch Malans. Nie może być dwóch jharvards. Jego unikalna. W przeciwnym razie, nie wiedzą, które jharvard jest w rzeczywistości. Więc co może być motywacją również ma trzecią kolumnę, po lewej tam nazwie ID, który wygląda Numer, który jest podobnie wyjątkowa? Czuje się trochę zbędny do mnie na pierwszy rzut oka. Dlaczego to może być atrakcyjne, aby mieć nie tylko unikalne nazwy użytkowników, ale również unikalne numery? PUBLICZNOŚCI: Mogli samo hasło. DAVID MALAN: Ludzie mogą mieć samo hasło, na pewno. Które mogą absolutnie zdarzyć. Ale jeśli ma to unikalny login, ja twierdzą, że tak naprawdę nie ma sprawa, bo jeśli wpisać swoje nazwa użytkownika, tylko trzeba sprawdzić ich hasło, tym ich mieszania. Dlaczego jeszcze? PUBLICZNOŚCI: Szybsze wyszukiwanie. DAVID MALAN: Szybsze wyszukiwanie. Dlaczego? PUBLICZNOŚCI: ID jest tylko jeden. DAVID MALAN: ID jest tylko jeden znak, lub dokładniej, jest to liczba, tak to chyba 32 bity lub coś w tym stylu. Natomiast nazwa użytkownika, najwyraźniej Jason Się Hirschhorn tam jest coś w rodzaju absurdalnie długi, a to będzie zajmie mi dużo więcej czasu na ciąg porównaj H-I-R-S-C-H-H-O-R-N i może / 0 lub coś w tym stylu, w celu zajrzeć do Jasona, a nie tylko mówiąc mi dać numer użytkownika dwa. To jest 32 bitów. To, że jeden INT trzeba porównać. I rzeczywiście, to jest dokładnie, dlaczego baz danych mają tendencję do przypisywania niepowtarzalnych identyfikatorów Wiersze w nich. Teraz to, co inne typy danych są tam oprócz INT i najwyraźniej ciągi takie jak ten? Cóż, być bardziej właściwe, Baz danych SQL, takie jak MySQL, mają pola char. A CHAR trochę myląco nie jest wolny CHAR. CHAR pole w bazie danych MySQL jest jeden lub więcej znaków, ale to stałą liczbę znaków. Tak na przykład, jeśli pójdę na celu phpMyAdmin, jak może masz już, lub wkrótce będzie problemu ustawić siedem, a ja go do mojej bazy danych i tylko dla zabawy, stwórzmy nową tabelę o nazwie test z zaledwie dwóch kolumn. Będę następnie kliknij przycisk Przejdź. I to staje się dość znajomo, zwłaszcza jak majstrować okolice na własną rękę. Tutaj mogę wpisać ID, aby utworzyć Nowa tabela typu INT. Ale tutaj mogę wpisać nazwę użytkownika, aby odtworzyć tę wcześniejszą tabelę. I zauważyć, mam całą masę rodzajów do wyboru. I to też jest dlaczego phpMyAdmin jest miłe. Jest to rodzaj samo-nauczania w które może po prostu rodzaj punktu i kliknij przycisk, a spojrzeć na menu rozwijanych i wnioskować z że to, co uprawnienia SQL daje. I rzeczywiście, jeśli wybiorę CHAR, I następnie muszą określić długość, lub jak wiele wartości, jak wiele znaków. Tak bardzo wspólne wartości są takie rzeczy jak 255, ale to trochę długo. Powszechnie jest osiem o nazwę użytkownika. Ale to trochę małe te dni. Więc to jest decyzja projektowa. Czy jest to 8 max znaków, 32, 255, 1000? To naprawdę zależy od ciebie. Ale CHAR pole jest stała liczba. Wybierz więc zbyt mało i jesteś rodzaju skręcane, jeśli chcesz dłuższą nazwę użytkownika. Wybierz zbyt wiele, a co minusem? PUBLICZNOŚCI: [niesłyszalne]. DAVID MALAN: To marnotrawstwo. Podobnie jak w C, jeśli masz większe fragment pamięci niż trzeba, jesteś tylko marnowanie czasu i marnowanie miejsca. Tak więc, jako alternatywa, istnieje VARCHAR, które rozwiązuje ten problem Długość leczenia nie w stałej długości, ale jako maksymalnej długości i przy użyciu zmienna liczba znaków, które następnie ma tendencję do korzystania tylko tyle znaków, jak ty rzeczywiście trzeba. Brzmi idealnie. Dlaczego nie możemy się pozbyć Char data wpisz wtedy? Co może być minusem używając varchars, który brzmi jak to jest ładne zwycięstwo? Tak? PUBLICZNOŚCI: [niesłyszalne]. DAVID MALAN: OK, dobrze. Tak więc, jeśli wszystkie dane są takie same długości, co jest problemem? PUBLICZNOŚCI: Bo marnujesz dane, mówiąc im wszystko. DAVID MALAN: Więc jeśli wszystkie dane są samą długość, jednak jestem zdania, określenie, że maksymalna rozpiętość na VARCHAR nie różni się od określając stałą długość na Char, jeśli wiesz, że numer w góry. Ale jest rzeczywiście, a ja coś w rodzaju wyciąg z tej odpowiedzi rzeczywistości że jest jeszcze max, które mogłyby być irytujące, zwłaszcza jeśli napotkać nazwisko osoby, która jest niezwykle długi, że nie zrobił przewidywania. I to jest też trochę mniej wydajny faktycznie wyszukiwać varchars jako przeciwieństwie do poszukujących znaki, zwłaszcza na długich stołach, które mają dużą i wiele danych. Tak więc również tutaj ponownie tematyczna no oczywistym wyborem. Tak po prostu, aby dać poczucie inne typy danych, które mogą być interesujące albo dla p-set siedmiu lub przyszłość, jest INT. Jest BIGINT, które to jak długo, długo. To wydaje się być 64 bity. Jest dziesiętny, który można zobaczyć w Zestaw problemem, który jest znacznie Odpowiedź cleaner do problemów, które spotkałem się z pływaka i pływające nieścisłości punkt. A wtedy nie DATETIME. Jest dosłownie typ danych, który ma wyglądać jak rok, miesiąc, dzień, i godziny, minuty i sekundy. Ale mają również baz danych SQL rzeczy, nazwijmy indeksów. A index jest coś, co określić podczas tworzenia tabeli do dokonać wyszukiwania i inne operacje bardziej wydajne. W szczególności, jest coś, co nazywa indeks podstawowy, że można oświadczam co następuje. Zrobiliśmy to dla ciebie z tabela użytkowników dajemy ci. Zauważmy jednak, gdybym ręcznie odtwarzając Stół użytkownicy tutaj dając to nazwa użytkownika. I już określone ID. I podano INT. I podano nazwy użytkownika z maksymalnie 32 znaków. Ale jeśli będziemy się przesuwać w ten dość szerokie okno, zauważysz Kilka innych rzeczy mogę określić. One, można określić atrybuty jak, wiesz co, to INT powinien być podpisany. Nie chcę liczb ujemnych, więc zróbmy to UNSIGNED. Null, nie ma znaczenia tutaj, bo Chcę każdego użytkownika ma niepowtarzalny numer. I nie ma to być null. Ale to jest ciekawe. Można określić, że ID jest albo Klucz podstawowy z tej bazy danych, czy to wyjątkowy, lub to indeksowane, albo pełny tekst. Tak więc dla dzisiejszych potrzeb, długa historia krótkie, pierwotna oznacza, że ​​musi to być zarówno koncepcyjnie i technicznie Pole, które możemy użyć, aby jednoznacznie identyfikacji użytkowników. Więc kiedy patrzymy się użytkowników, to sort z obietnicą, aby znaleźć je w większości przez to unikalny identyfikator. A baza danych zapewnia, że ​​jeśli posiada numer użytkownika 3, nie można fizycznie wstawić innego użytkownika z tym samym 3 nr. Baza danych będzie po prostu odmówić , aby zapisać zmiany. Która jest dobra rzecz, ponieważ można chronić się przed siebie. ja Alternatywnie, dla nazwy użytkownika. Więc drugi rząd, przypomnijmy, jest pole nazwa użytkownika. Więc tu jest drugi rząd nazwę użytkownika, jak my się po lewej stronie tam. Więc co jeszcze może chcę podać? Nie wolno mi, zgodnie z SQL, określić dwa klucze podstawowe. można określić wspólny klucz, w którym spojrzeć na obu polach, ale nie mogą indywidualnie za klucze podstawowe. Więc to nie wchodzi w rachubę. Więc co może chcę wybrać? Cóż, jest wyjątkowe w duchu podobnym do klucz podstawowy, w którym określenie to Pole musi być unikalny, ale nie będzie jeden Używam cały czas. I nie będziemy korzystać z tego jednego wszystko Czas jakiego powodu jeszcze raz? To potencjalnie jeśli wolniej to długa nazwa użytkownika. To tylko strata czasu. INDEKS, w międzyczasie, określa, że ​​jest to nie będzie wyjątkowy, ale chcę pracę pod swoją magię kaptur zrobić to szybciej dla mnie szukaj w tej dziedzinie. Więc to chyba nie jest tutaj istotne. Dla użytkownika, chciałbym twierdzić, że UNIQUE jest dobra odpowiedź. Ale załóżmy, że zrobiliśmy więcej użytkowników interesujące niż tylko nazwy użytkowników, skróty i numery identyfikacyjne. Co zrobić, jeśli daliśmy ludziom pełne nazwy? Co zrobić, jeśli daliśmy im adresy i inne dane o nich? Cóż, jeśli można określić, że kolumna w Baza danych jest indeksowana, co oznacza, że MySQL lub Oracle, lub cokolwiek w bazie używasz, powinien pracować jej magii i użyć jakiegoś ozdobnego danych Struktura jak drzewo, albo, albo trie hash tabeli, lub coś w celu zagwarantowania że podczas wyszukiwania danych za pomocą wybierz na tej konkretnej dziedzinie - jak mi pokazać wszystkim, że mieszka na Oxford Street. Zapytanie tak. Jeśli z góry określone, że chcesz indeks na tym polu, wyszukiwania będzie o wiele szybciej. Jeśli nie określisz indeksu, najlepiej można zrobić, to wyszukiwanie liniowe, jeśli to nie jest klasyfikowane. Ale jeśli podasz INDEX, inteligentny ludzie, którzy się do bazy danych - ludzie tacy jak ty, którzy teraz wiedzą drzewa i stara i tabele z cebulą - automatycznie zbudować taki dane Struktura w pamięci RAM, aby upewnić się, że te pytania są o wiele szybsze. PEŁNOTEKSTOWE tymczasem jest podobny w duchu, ale pozwala zrobić wieloznacznego pytania, jak mi pokazać wszystkim, że mieszka na ulicach, które zaczynają się litera O z jakiegokolwiek powodu. Możesz zrobić wyszukiwań wieloznacznych tak. Lub, bardziej istotne rzeczy, jak pokazują mnie każdy, kto posiada słowo - pokaż mi wszystkich, których nazwa zaczyna się od w szczególności list. Możesz wyszukać słów kluczowych w ten sposób. Dobrze. Tak więc, możliwości projektowe istnieje potencjalnie. Są inni, że będę fala w swoje ręce. Okazuje się, że można mieć różne silniki do przechowywania. I to jest więcej niż potrzebujemy Arcane na pewno do problemu ustawić siedem. Domyślnie wy korzystania coś, co nazywa InnoDB. Zobaczysz wzmiankę o tym gdzieś w interfejs phpMyAdmin najbardziej prawdopodobne. Ale wiem, że są inne projekty Decyzje, które mają potencjał odsetek projektów końcowych, jeśli się coś zrobić na stronie internetowej. Ale zróbmy to. Idziemy do przodu i umieścić to na Ekran jak teaser do historii udziałem cię, współlokator, i szklankę mleka. Weźmy dwie minuty lub tak złamać tutaj. I czy można trzymać się, niech się wstecz, spojrzeć nieco bardziej na SQL i następnie nieco JavaScriptu z p-set osiem w umyśle. Dobrze. Więc przejdźmy planujesz Sprawa, która może rogu pojawiają się bardzo łatwo W związku z zastosowaniem bazy danych, czy szczerze mówiąc, nawet przy użyciu prawdziwego świata rzeczy jak bankomaty, aby zdobyć pieniądze. Tak tu jest lodówka. Załóżmy, że masz też w jednym Twój akademiku lub domu. I masz jedną współlokatorkę, a obie naprawdę lubisz mleka, na przykład. Więc wróciłem do domu z klasy jeden dzień. On lub ona nie jest jeszcze powrotem. Otwierasz lodówkę. Naprawdę chcesz dużą szklankę mleka. Nie ma mleka. Więc co zrobić? Zamykasz lodówkę. Chwycić kluczy. Udać się na plac. I można dostać w kolejce w CVS w tych rzeczy na własny Checkout, które zawsze trwać dłużej niż w rzeczywistości mając kasjerów. Tak czy inaczej. Tak więc, w międzyczasie, dot dot dot, twój współlokator wróci do domu, a on lub ona podobnie ma tęsknota jakiegoś mleka. Więc on otwiera lodówkę, wygląda w środku, i oh, cholera. Bez mleka. Więc on kieruje się, dzieje się udać drugiej CVS, który był jedynym blokują wyjazd z jakiegoś powodu, a on lub ona się w kolejce, aby kupić trochę mleka. Tymczasem, można dojść do domu, lub ona wraca do domu, i co zrobić ostatecznie mają? Dwa razy tyle mleka. Ale tak naprawdę nie lubię mleka tyle. Więc teraz masz tyle mleka, że ​​teraz jeden z nich jest po prostu pójdzie kwaśny ostatecznie. Więc to jest bardzo złe problem. Prawda? Więc co się stało? Więc zasadniczo, jest to rodzaj od śmiesznej przykład. Ale pod maską, co mieliśmy stało tu jest oboje sprawdzone stan niektórych części pamięci, lodówka. Oboje sprawdzili stan pewnej zmiennej. Oboje wyciągnął wniosek, że wtedy działał dalej. Ale niestety, podczas gdy twój współlokator był w sklepie, że stan Zmienna zmienił, on wrócił i teraz chce zmienić stan, ale to już zmienił na niego. I oczywiście, on lub ona nie miałaby poszedł do sklepu, gdyby wiedzieli, które były już w drodze. Tak w świecie rzeczywistym, jak mogłeś uniknąć tego problemu, zakładając, że masz lodówka, masz współlokatora, i rzeczywiście lubią mleko? PUBLICZNOŚCI: Komunikacja. DAVID MALAN: Komunikacja. OK. Ale jak można komunikować? PUBLICZNOŚCI: Zostaw notatkę. DAVID MALAN: Zostaw uwagę, prawda? Zawsze zostawić notatkę, na fanów serialu. W porządku, więc zawsze zostawić notatkę, lub umieścić naprawdę jak na kłódkę lub coś w lodówce, który utrzymuje współlokator z kontroli stanu że zmienna. Teraz, dlaczego to może być germane do Problem ustawić siedem lub do bankomatów. Cóż, wyobraź sobie świat, w którym w bankomacie może być w stanie pójść do bankomatu Maszyna tutaj, a inny ATM tutaj. A to zdarza się dość często. I załóżmy, że miał dwie karty bankomatowe, jaki jest możliwy do uzyskania. I zalogować się do obu maszyn skutecznie jednocześnie, miejmy nadzieję, , podczas gdy nikt nie patrzy. A następnie wpisać kod PIN mniej więcej jednocześnie. A następnie zrobić kwerendę balansu aby zobaczyć ile pieniędzy masz. I powiedzmy, że masz 100 dolarów pozostawił na koncie. Więc w zasadzie jednocześnie, można powiedzieć, jeden, zero, zero, wprowadź. I mam nadzieję, że wrócę trochę pieniędzy. Ale ile pieniędzy można dostać z powrotem? Obecnie komputery na koniec dnia zwłaszcza jeśli rozmawiasz serwery, nie muszą robić rzeczy w kolejności oczekuje. Tak więc przypuszczać, co dzieje się z powodu niezależnie od prędkości sieci tam problemy to, czy są problemy z procesorem, lub coś nie tak, przypuszczam, że Pierwszy bankomat sprawdza równowagę i widzi, och, ta osoba ma 100 dolarów. Ale wtedy zostanie rozproszony, ponieważ może backup się dzieje i dlatego spowolnienie. A może podczas sprawdzania, sieci gra się trochę wolniej, bo to się po prostu dzieje. Są urządzenia fizyczne. Tak więc w międzyczasie, drugi ATM zadaje to samo pytanie. Ile pieniędzy David ma? 100 dolarów jest odpowiedź. Ale dlatego, że pierwszy jeszcze nie bankomat wysłana wiadomość odejmij $ 100, zarówno Bankomaty są kontrolowane skarbca banku, widząc tam 100 dolarów tam, i teraz obie maszyny są potencjalnie będzie wypluwać odpowiedź. Teraz, to jest dobre dla ciebie w pewnym sensie czy to, co bank robi ostatecznie jest zmienić ilość do minus 100 przez ustawienie zmiennej równa Twój rachunek bankowy równa 0, w przeciwieństwie do robienia minus 100. Teraz w najgorszym przypadku dla banku - lub w najlepszym dla banku, w międzyczasie, dają ci 200 dolarów, a konta bankowego pokazuje teraz ujemna 100 dolarów, które tak naprawdę nie korzystać ci w ogóle. Ale chodzi o to, że ten wyścig Stan dwóch współlokatorów coraz mleko, lub dla dwóch bankomatów próbujących zdobyć gotówkę i zmienić stan skarbca w tym samym czasie istnieje jakiekolwiek czas masz bazę danych. Teraz w błąd ustawić siedem, ten problem pojawia się w tym sensie, że jeśli kupisz Udział Facebooka magazynie, a następnie na Instancja kupić drugą część Facebook photography, musisz dokonać decyzja programisty. W celu podjęcia decyzji, jak zaktualizować bazy danych, kursy będziesz mają jeden wiersz dla tego stada, a to jest jeden sposób, aby go wdrożyć. I masz zamiar mieć jeden udział FB, która jest symbolem ich giełdowy dla tej nazwy użytkownika lub użytkownika ID, unikalny identyfikator. Ale sama historia może się zdarzyć tutaj. Jeśli do SELECT w SQL, jak zobaczysz w błąd ustawić siedem, gdy widzisz, Och, David ma jedna akcja z Facebooka magazynie. Chciałbym teraz zmienić na dwa akcji, w bo chce kupić Drugi akcji. Ale załóżmy, że rzeczywiście miał dwa David otwarte okna przeglądarki, a przypuszczam, że to wspólne konto z małżonków, i jak z nich starają się wykonać sama operacja, tam też potencjał istnieje dla decyzji, które mają być wykonane w oparciu o poprzednie stan świata - konto ma jedną akcję - i obie osoby, lub oba serwery, teraz spróbuj powiedzieć zwiększyć go do dwóch akcji. Ale w tym przypadku, może być pobierana mi pieniądze zarówno dla akcji, ale zwiększany tylko ten jeden raz. Tak w skrócie, podstawowy problem tutaj, jak z dowcipu o opuszczeniu pamiętać, wprowadzanie kłódkę na nim, jest jeśli dwie osoby lub dwa wątki - że powrót do podstaw - Można sprawdzić stan jakiejś zmiennej , a następnie spróbować zmienić tę zmienną, ale te dwie rzeczy nie zdarzają się w w tym samym czasie, ale może się przerwać przez innych, co dzieje się, dane mogą dostać się do stanu bardzo dziwne. I można korzystać lub możesz cierpieć w sensie przykładu pieniędzy. Więc w błąd ustawić siedem, dajemy ta jedna linia kodu, który długo opowiadanie, rozwiązuje ten Problem w MySQL. To bardzo długa instrukcja, która nie nawet zmieścić się na jednej linii na Ekran zapewnia, że ​​tu praca jest to, co się nazywa atomowej. To wszystko dzieje się na raz, lub to nie zdarza się w ogóle. To bardzo długa fraza nie może się przerwał częściowo. I co robi to dosłownie to co mówi. Wstawić do jakiejś tabeli następujące trzy pola te szczególne wartości, ale na duplikatu klucza, nie rób wkładkę. Wykonać aktualizację. Tak to jest jak robi SELECT i INSERT niejako w tym samym czasie. I to, co jest kluczem, który prawdopodobnie są określone tutaj? Okazuje się, i zobaczysz to w Problem ustawić siedem w specyfikacji, ponieważ mamy zadeklarowane tam być unikalny klucz na tym właśnie stole tak, że nie można mieć wiele wierszy dla tego samego użytkownika z sam symbol stock penny - w tym przykładzie tutaj, DVN.V jest głupie, że czas grosza znajdują się w specyfikacji. Ponieważ mamy oświadczył, że jest wyjątkowy, oznacza to, że jeśli próby wstawienia duplikat wiersz, jesteś zamiast iść do aktualizacji bez ktoś jeszcze ma szansę na zmianę stan świata albo. Tak więc, w skrócie, co zapewnia rzeczy są atomowej. Bardziej ogólnie chociaż, bazy danych jak MySQL - i nie trzeba tę funkcję p-set siedem, ale zachować je w pamięci na przyszłość - obsługuje tak zwane transakcje, , gdzie można powiedzieć, Rozpoczęcie transakcji dosłownie. Następnie można wykonać dwa SQL. A SQL, jak zobaczysz w p-zestaw siedmiu, wygląda trochę coś takiego. Aktualizacja tabeli o nazwie konta. Ustaw kolumnę równowagi równą co Obecnie kolumna Saldo jest minus 1000, gdy liczba, tym Numer konta, jak identyfikator użytkownika, wynosi 2, a następnie zaktualizować konto dot dot dot. Więc w laika, co te dwa pytania wydają się robić w prawdziwy sens świata bankowości? PUBLICZNOŚCI: Transfer do oszczędności. DAVID MALAN: Dokładnie. Przeniesienie środków z jednego konto do innego. I to jest kolejny przykład, w którym naprawdę chcesz te dwie rzeczy się zdarzyć czy nie stało. Nie chcesz coś dostać w środkowy z nich i potencjalnie zepsuć matematyka lub bałagan, ile masz pieniędzy, ani ile pieniędzy bank ma. Więc co jest naprawdę ładny o transakcjach w MySQL jest to, że i Bazy ogólnie, jest to, że i inteligentnych ludzi, którzy już wdrożone cechy te dowiedzieć się jak zrobić upewnić się, że obie te rzeczy się lub wcale. A jeśli jesteś naprawdę aspiruje do Strona, która jest używana przez ludzi na campus, ludzie w rzeczywistym świecie, robi coś na starcie sensie Wśród nich jest rodzaj decyzje projektowe, które się jeszcze tak ważna. W przeciwnym razie, zaczniesz tracić dane, tracą użytkowników, lub w najgorszym przypadku, jak widzieliśmy tutaj, potencjalnie stracić pieniądze. Więc znowu, więcej o tym w problemu ustawić siedem, a także być może w niektórych Ci w ostatnich projektów. Warto więc zmienić ten obraz mieliśmy chwilę temu tylko w jeden sposób. Więc pozwól mi faktycznie zobaczyć, czy mogę - Nie, że nie ma. Jest. Tak to jest, gdy wyszliśmy ostatni. I okazuje się, mamy zamiar wrzucić jeszcze jedno w mix tutaj - Język nazywa JavaScript. Więc JavaScript rzeczywiście pasuje w tym kawałku - a ja nie bardzo pozostawić wystarczającą ilość miejsca, więc to nie jest teraz w skali. OK, to jest naprawdę żałosne. OK, więc to jest JavaScript. Dobrze. Jestem naprawdę robi to krzywdę. Dobrze. Więc JavaScript jest inny programowania język, a ostatni, jeśli pomaga zapewnić, że nie ma wiele więcej z hydrantów przeciwpożarowych tutaj. Więc JavaScript jest interpretowany język, co oznacza, że ​​nie skompilować go do zer i jedynek. Wystarczy go uruchomić. Ale co zasadniczo różni się JavaScript zwykle jest to, że nie uruchomić go na serwerze WWW. Nie ma się uruchomić w Urządzenie takie. Raczej robi pobrany przez użytkownika poprzez HTTP do przeglądarki - Chrome, Safari, Internet Explorer, Firefox, co - i to jest przeglądarka, która wykonuje to szczególności język programowania. Tak więc stało się jasne, PHP dotąd nie było wykonywane zarówno w linii poleceń w nasze czarno-białe okna, na serwerze jak urządzenia, komputer jak urządzenia, albo to było wykonywane przez serwer WWW uruchomiony na komputerze. Ale tematem jest to, że do tej pory PHP została wykonana po stronie serwera, tak użytkownika i przeglądarka użytkownika nigdy linii kodu PHP widzi. W rzeczywistości, jeśli kiedykolwiek otworzyć przeglądarkę Twoja strona lub inny i ty rzeczywiście zobaczyć kod PHP w oknie, ktoś spieprzył. Bo to nie miał być wysłana do przeglądarki bezpośrednio. To ma być wykonany i zwrócił w coś HTML. Ale JavaScript jest zasadniczo przeciwnie. To ma być uruchamiane typowo wewnątrz od użytkownika okna przeglądarki. A jakie rodzaje witryn używać JavaScript to te dni? Podobnie jak dosłownie każdą popularną stronę internetową. Każda strona, że ​​chłopaki prawdopodobnie używać codziennie używać JavaScript dla Najprostszym, a nawet najseksowniejszych funkcje. Więc coś w Facebook Czat jeśli użyć. Jak to właściwie działa? Cóż do tej pory, wszystkie rzeczy mamy wykonane z HTML i PHP zakłada, że można wyciągnąć adres URL, i naciśnij klawisz Enter, i widzisz jakieś treści HTML. I kliknij na link, który zmienia URL, zmienia stronę i ładuje niektóre nowe treści. Kliknij inny adres URL lub złożyć formularz, się wymknąć do innej strony i widzisz jakieś nowe treści. Ale za pomocą coś jak Facebook Chat, lub Gchat lub Google Maps, rzadko nie cała strona odświeżyć takie, że widzisz biały ekran na chwilę i to nowa treść. Raczej, strony internetowe są dziś dynamicznie zaczyna aktualizacja ponownie i znowu i znowu wszystko sort z za kulisami. I okazuje się, że gdy pójdziesz do coś jak Facebook lub Gchat, lub Gmail, oraz aktualizacje strony automatycznie bez przeładowywania cały ekran, co się stało jest to, że Twoja przeglądarka uczynił rodzaj tajemnicy - dodatkowe żądania HTTP nie dla całych stron internetowych, ale tylko dla małe porcje danych, takie jak wiadomości błyskawicznej, że twój przyjaciel tylko cię przysłał, lub aktualizację statusu, ktoś po prostu cię przysłał, lub ćwierkanie , że ktoś po prostu wysłana. To właśnie czyni mało wniosków o danych, a następnie przy użyciu JavaScript, twoja język programowania, aby zmienić to, co strona wygląda bez Serwer pomoc, bez serwera generowania tego kodu HTML. Tak w skrócie, JavaScript może być stosowany wtedy nie tylko pobrać nowe dane z serwer bez przeładowywania całej strona lub przesłanie formularza. Może być również użyty do zmiany tzw DOM - Document Object Model - który jest tylko fantazyjny sposób na mówiąc drzewo HTML , które widzieliśmy ostatnio. Tak więc, aby zapewnić, JavaScript jest składniowo tak podobny do C, jak również. Nie ma główną funkcją. Po prostu zacząć pisać kod i zostanie on wykonany, lub interpretowane bardziej prawidłowo. Warunki będą wyglądać tak. Nie różni się od C lub PHP dla tej sprawy. Wyrażenia logiczne lub-ed razem będzie wyglądać tak. AND razem wyglądać. Przełączniki będzie wyglądać tak. Na pętli będzie wyglądać tak. Podczas okrążenia będzie wyglądać tak. Czy podczas pętli będzie wyglądać tak. Jest to nowa. Więc JavaScript nie foreach skonstruowania per se, ale to skonstruowania dla i zmiennej w tablicy, a ja w tym Sprawa staje się wartość indeksu. Więc to jest trochę inna od foreach, choć nowe wersje JavaScript wychodzą cały czas, więc nawet te język dysponuje ewoluują. A na marginesie, JavaScript tych dni Można również stosować na serwerze, tak jak PHP za pomocą ramy nazwie Node.js. Jednym z TF CS50 jest, Kevin, doprowadziło Seminarium na Node.js, które są dostępne w cs50.net/seminars. Więc jeśli jesteś ciekaw, wiem, że jesteś mogą korzystać z tego po stronie serwera, jak dobrze, ale to jest dość niedawno tendencja, ale potężny na tym. To jest trochę inaczej. To jest tablica w języku JavaScript. I co uderza cię w inny w porównaniu z C lub PHP? Istnieje kilka szybkich historie możemy powiedzieć tutaj. Czego brakuje w porównaniu z PHP? PUBLICZNOŚCI: [niesłyszalne]. DAVID MALAN: Tak? Niestety, powtarzam jeszcze raz? PUBLICZNOŚCI: Nie deklarując typ zmiennej. DAVID MALAN: My nie deklarując typ zmiennej. Więc całkiem jak PHP, nie jesteśmy określenia rodzajów tej zmiennej. Raczej jesteśmy bardziej ogólnie mówiąc var dla zmiennej. Nie mamy uciążliwości z PHP znak dolara, który podczas żmudnego typ, czyni bardziej jasne, że coś jest zmienna. Podczas gdy tutaj, jesteśmy jakby z powrotem do C podejście po prostu dzwoniąc zmienna o nazwie chcemy dać to, jak liczby. A także, jak PHP, mamy nawiasy kwadratowe dla wartości wewnątrz tablicy. Tak więc zmienne w JavaScript również może wyglądać tak. Zauważcie, że jest to ciąg nazywa s, ale podobnie nie możemy określić że jest to ciąg. Tu jednak jest to funkcja, która nie istnieją w taki sam sposób, w PHP, ale trochę podobnie. Jest to obiekt w JavaScript. I obiekty są rodzajem Armii Szwajcarskiej Nóż struktury danych, w które Można ich używać do dowolnej liczby rzeczy. Tutaj, na przykład, mamy deklarowania zmienną ofertę. Typ zmiennej jest obiekt. Można myśleć o tym, jak struct C , który ma klucze i wartości. Symbol jest kluczem. FB jest wartość, widocznie symbol stock. Przecinek. Cena jest kolejnym kluczowym, a jego wartość jest najwyraźniej zmiennoprzecinkowe, lub liczba ogólnie w JavaScript, z 49,26 dolarów. Więc PHP nie ma - nie widzieliśmy w obiektach PHP dość tak, ale widzieliśmy analogowej, co było, co? PUBLICZNOŚCI: [niesłyszalne]. DAVID MALAN: Tablice asocjacyjne. Tak więc podczas gdy PHP ma tablic asocjacyjnych , którego składnia jest zawsze nieco tak inny - widzieliśmy nawiasów kwadratowych. Widzieliśmy dziwne strzałki symbole. JavaScript ma obiektów, ale jest to głównie różnica semantyczna i inna synonimem teraz. Jednak, jak na bok, PHP ma również obiektów w sposób, który Java i inne języki mają obiekty w programowanie obiektowe. Ale będziemy z nich korzystać tylko dla typów danych do teraz. Obiekty i tablice asocjacyjne. Ta jedna może zrobić to trochę bardziej jasne. Oto dlaczego obiekt jest przydatny. Jeśli chcesz zadeklarować ucznia, jak Zamyla, możemy rzeczywiście symbolizować niejako wewnątrz że Obiekt przy użyciu nawiasów wsporniki jak zanim cały pęk kluczy i wartości w tutaj. Mamy ID, dom, i nazwę Zamyla, a po nim średnik jako Zazwyczaj pod koniec. Tu też jest nieznacznie inna, ale również bardzo silny te dni. Oto tablica, i wiem, że z powodu tam jest plac się uchwyt top i nawias kwadratowy u dołu. I to jest tablica, jakie dane wpisz najwyraźniej w JavaScript? To jest tablica wygląda jak trzech obiektów. I wiem, że to tylko obiekt ze względu na klamrach. I zauważysz otwarta klamra kręcone, niektóre rzeczy, blisko klamra kręcone, przecinek, następnie kilka, przecinek, i jeszcze trochę więcej. Więc to trzy argumenty oddzielone dwoma przecinkami. Więc to jest tablica z trzech obiektów. I każdy z tych obiektów wydaje się być członek student lub pracownicy niektórych sort, każdy z identyfikatorem, dom i nazwa. Ale ja nazywa to coś nazywa JSON - JavaScript Object Notation. I jest to format danych, które w rzeczywistości Jest więc bardzo popularne w vogue te dni, że jeśli piszesz Aplikacja korzystająca z Facebooka API, Twitter API, naprawdę prawie każdy API tam tych dni, w tym niektóre z własnego CS50 jest, Dane wrócisz nie jest w old school w formacie CSV. Ponieważ przypomnieć, że CSV jest bardzo prosta. To jest zaledwie kolumny oddzielone przecinkami. JSON danych daje więcej metadanych. Skupia Klucz z każdej wartości, tak nie trzeba zakładać, że Kolumna zerowe jest jedna wartość, kolumna z nich jest inna, kolumna dwa jest inny. Wszystko w obiekcie JSON tutaj jest swego z samo-opisujący, ponieważ każdy jedno z nazwisk w tym pliku ma dosłownie Nazwa przed nim jako cudzysłowiu. Warto więc przyjrzeć się Kilka przykładów tutaj. Pozwól mi wejść do urządzenia. I pozwól mi odejść do naszego vhost do katalogu publicznego. I pozwól mi iść do Katalog JavaScript. I idziemy dalej i otworzyć dom-0.html, gdzie DOM tylko oznacza Document Object Model. Jest to drzewo, do którego stuff I, o którym mowa wcześniej. I pozwól mi zaproponować następujące. Oto strona internetowa, której Ciało jest dość prosta. Więc tu, na dole, zawiadomienia Mam formularz. Widzieliśmy te przed. Posiada dwa wejścia, z których jeden ma Numer nazwy, z których jeden ma typ przedstawienia, a pierwszy czyjaś typ jest tekst. Więc to rzeczywiście brzmi dość prosta. Chodźmy tutaj. Wróćmy do tej strony tutaj. Chodźmy na localhost, i przejść do nasz katalog JavaScript, i przejść do dom-0, a tu mamy ten formularz. Więc to jest najwyraźniej wszystko to strona robi. Ma pole nazwy z przycisk Prześlij. Ale ja nie zamierzam używać PHP tutaj. Zamierzam zrobić wszystko po stronie klienta że tak powiem w JavaScript w następujący sposób. Zauważ, że ja rzeczywiście otrzymał nazwę Pole tego wejścia unikalnej identyfikator, który będzie rzeczywiście zapisać mi trochę czasu w jednej chwili. I zauważyć, że wprowadziliśmy inny znacznik w głowie mojej stronie internetowej,  tag. Więc jest to w tym sensie, że JavaScript jest client-side język programowania. W tym przypadku, podobnie jak CSS, wrzuciłem to proste wewnątrz mojego HTML. Zauważmy jednak, mam zadeklarowanych funkcji , który wygląda trochę jak PHP składniowo, ale w rzeczywistości jest to JavaScript, bo znowu, to jest po stronie klienta w przeglądarce. I weź wiecie co to będzie zrobić, nawet jeśli niektóre z składni tutaj jest nowy. PUBLICZNOŚCI: Przywitaj się z kimkolwiek. DAVID MALAN: To się przywitać aby każdy, kto odwiedza tę stronę. Więc jak? Więc uprzedzenia, okazuje się w JavaScript jest funkcja alert (). To jest bardzo rodzaj smutnego funkcji, tak naprawdę ma tendencję do drażnić użytkowników. To nie jest jeden naprawdę powinieneś użyć zazwyczaj, ale szybkie i brudne sposób coś w rodzaju drukowania do graficznego użytkownika Interfejs, podobnie jak przeglądarki. Zauważcie, że mam Łańcuch w pojedynczych cudzysłowach. Okazuje się, że w przeciwieństwie do C, JavaScript może faktycznie nie używasz single cytaty, i szczerze mówiąc to tylko rodzaj w konwencji stylistycznej między Programiści JavaScript używać apostrofów. PHP, rzeczywiście mają lekko inne znaczenie. Ale teraz, po prostu wiem, że to jest jedyny powód. Konwencja w JavaScript jest często używać apostrofów, ale możemy użyć cudzysłów w obu miejscach. Więc to jest interesujące. Przypomnijmy, ostatni raz, że mieliśmy, że obraz na ekranie, dzięki którym drzewo gdzie miał węzeł HTML oraz węzeł głowy i węzeł ciała, a potem jakiś tekst. Ale był jeden węzeł w specjalnej górze, że zadzwoniłem do dokumentu. Cóż, okazuje się, w JavaScript, każdy Czas napisać program w JavaScript w przeglądarce, użytkownik ma dostęp do specjalny zmienna globalna. W duchu podobnym do superglobals PHP, ten nazywa się wszystkie małe dokument. To jak struktury, ale to struct posiada również funkcje wewnątrz niego. Więc struct C ma tylko dane zazwyczaj. Ale jak ten obiekt JavaScript technicznie jest również wyposażony w funkcje, zwie metod, w jej wnętrzu. I można wywołać funkcję wewnątrz ten obiekt dosłownie robi swoje nazwa, kropka, a następnie nazwę funkcja lub kolejny sposób. To jest po prostu synonimem, naprawdę. I co ta funkcja zrobić? Można trochę domyślić z nazwy. Pobierz elementu przez ID. Więc to będzie sprawdzić na stronie internetowej, sprawdzić to drzewo, szuka bez względu na węzeł, AKA elementem, ma unikatowy identyfikator z nazwą Koniec cytatu. I co ja mam teraz zrobić? Zamierzam uzyskać wartość wewnątrz że węzeł w drzewie, i mam zamiar jakoś przywitać się tą nazwą. Więc zgadywać, chociaż nie mam widziałem tego jeszcze, co zrobić oraz symbole oznaczają tutaj i tutaj chyba? PUBLICZNOŚCI: Łączy. DAVID MALAN: Łączy. Prawo, i to tylko rodzaj projektowania decyzje ludzie się lata temu. W PHP można łączyć rzeczy z kropkami. W C, skakać przez kilka obręcze i funkcje, takie jak strCopyDatabaseOK () lub zadzwoń strcat () lub inne takie funkcje. Ale w JavaScript, używasz plusy. Więc to jest po prostu łącząc trzy ciągi - witam, nazwisko, a następnie wykrzyknik. Tak więc, kiedy i dlaczego jest to funkcja nazywa chociaż? No, zgadnij z HTML na dole. Dlaczego pozdrawiam () nazywa się, lub kiedy? Podobno, jak najlepiej mogę powiedzieć, na złożyć, gdy formularz jest złożony, Zamierzam zrobić wszystko, co jest wewnątrz tych cytatów. A konkretnie, zamierzam zadzwonić pozdrawiam (), a następnie zwraca wartość false. Cóż, zobaczymy, co netto Efekt tego jest pierwszy. Więc pozwól mi iść do przodu, a następnie wpisz w, powiedzmy, Loren, Zatwierdź. Witaj Loren. Zobaczmy, czy może to była tylko szczęście wdrożenie. Nie. Więc to, co wpisywać się nazwa faktycznie umieścić tam. Jednak zauważyć, co nie zmienia. Adres URL jest jeszcze dom-0.html. Nie ma register.php. Nie ma drugiego pliku. Nie ma atrybut działania. Więc co to jest return false przypuszczalnie robi? Dlaczego dzwoni pozdrawiam (), a następnie powrót fałszywe prawdopodobnie? Co zwykle dzieje się po kliknięciu Złożyć na formularzu, że nawet mamy widziałem w zeszłym tygodniu? PUBLICZNOŚCI: [niesłyszalne]. DAVID MALAN: To idzie gdzieś, prawda? To idzie do pewnego docelowego adresu URL. Ale nie chcę, żeby to się stało tutaj. Chcę, aby moja strona internetowa jest całkowicie dynamiczny jak Gmail, gdzie, kiedy jesteś tam, tam. Adres URL nie zmienia się w sposób, który wskazuje, cała strona jest przeładunek. Raczej, po prostu chcę coś zmienić coś jak drukowanie tutaj na ekranie. No to niech mi sprzątać się trochę. Pozwól mi otworzyć się nie dom-0, ale pozwól mi otworzyć Dom-2. Po prostu tak, że widziałem jakieś składni tutaj. Okazuje się, że to, co my właśnie nie korzysta z surowego JavaScript. Więc jest to naprawdę język JavaScript. Niektórzy z was mogą znać z Biblioteka nazywa jQuery. Tak więc jQuery jest sam coś jak JavaScript. To jest po prostu biblioteka naprawdę mądry facet napisał i spopularyzował takie że prawie każdy na świecie teraz wykorzystuje jQuery, gdy za pomocą JavaScript. I na pierwszy rzut oka, szczerze mówiąc, to wygląda trochę bardziej tajemnicze. Ale przekonasz się, szczególnie jeśli go nie dla końcowego projektu z sieci rozwój, przekonasz się, że to czyści rzeczy i zaoszczędzić dość kilka linii kodu. Więc jak tylko okiem na ta forma działa. Zauważ, co ja usunąć pozornie z mojego HTML? Nie ma on złożyć obsługi że tak powiem. Nie ma atrybut. Bo wiesz, co I tak naprawdę nie podoba? Czułem się jak my spadały do starych nawyków nie. Podobnie jak to było zaczynam czuć niechlujstwa do przenikają zarówno CSS z HTML, ponieważ jesteś trochę rzucanie różnych językach na całym miejsce, podobnie to się zaczęło odczuwać jak zły drogi zejść gdzie Kładę kodu JavaScript wewnątrz mojego HTML niż faktoring to. Więc to jest lekcja. W DOM-2.html, jestem faktoring to. I robię rzeczy lekko inaczej. Na razie mam zamiar pomachać ręce na to, co to naprawdę pod wyciągiem. Ale tylko na razie zakładamy, że pierwsza linii kodu w tej bibliotece nazywa jQuery po prostu oznacza, gdy Dokument jest gotowy, wykonaj następujące czynności. Ponieważ stron internetowych mogą trochę czasu do załadowania. Możesz być na wolnym internecie zasilania, a to może być przędzenia i spinning, a na końcu jest załadowana. Że linia kodu po prostu mówi, poczekaj, aż cała strona jest gotowa, dokument jest gotowy, przed wykonaniem tego kodu. A teraz zauważyć, że jest to prawdopodobnie Najbardziej użyteczne pierwszy zabrać z jQuery. Linia ta tutaj jest bardzo podobny w duchu do tego znacznie dłuższy linii tutaj. Natomiast w surowego kodu JavaScript, tam istnieje globalny obiekt dokumentu, który ma funkcję o nazwie getElementById (), ludzie, którzy pisali jQuery uproszczone, aby po prostu powiedzieć, że znak dolara, a następnie wewnątrz nawiasy umieścić dwa cytaty, a następnie umieścić symbol hash następnie unikatowy identyfikator, chcesz złapać. Tak więc jest równoważna document.getElementById. Tymczasem. Złożyć tylko oznacza na Złożenie jakiejkolwiek formie jesteś powołując się na lewej stronie, przejdź dalej i wykonać to. Ale teraz jest to ciekawość też. Co dziwne, o tym, co Mam podkreślił tutaj? Nie tylko jest to rodzaj składniowo nowy, nie ma też czegoś brakuje. PUBLICZNOŚCI: To właśnie nazywa się funkcja? To nie nazywa się powiadomienie? DAVID MALAN: Tak. Cóż, tak alert () jest w dół tutaj, aby być uczciwym. Ale nie ma wzmianki o Nazwa, jak wiesz, bla lub coś się tutaj. I rzeczywiście, jest to jedna z cech języka JavaScript, który jest dość potężnym, ale także całkiem nowy. I PHP faktycznie ma to jak dobrze. Pozwólcie mi iść do przodu i robić coś bardzo szybko. Pozwólcie mi iść do przodu i umieścić to tutaj. Pozwól mi to zrobić. Funkcja. Nazwijmy ten moduł obsługi (). Funkcja obsługi tak powiem. Coś, co zajmuje jakieś działanie. Pozwól mi posprzątać mój wcięcia. I umieścić to tutaj. I umieścić to tutaj. Tak. OK. Więc teraz mam funkcji o nazwie Ładowarka (), że tak naprawdę nie wiemy co robi jeszcze. To po prostu ciągle ma te rzeczy. Ups. Wziął za dużo. Zróbmy to. Dobrze. Przepraszam. Dobrze. Pozwól mi to zrobić. OK. Że wygląda ładnie i prosto przekazania teraz. Pozwól mi to zrobić. To zrobić. I OK. Więc teraz, zróbmy to tutaj. Nie więcej programowania w locie. OK. Więc teraz, wróćmy do gdzie historia zaczęła. Wcześniej powiedziałem, że ta linia tutaj Oznacza, gdy dokument jest gotowy, przejdź naprzód i to zrobić. Co chcę zrobić? No dokładnie, chcę iść do przodu i wykonaj następujące czynności. Wykonanie tej linii kodu, a następnie co masz zrobić, to nazywamy to działa, gdy formularz jest składany. Teraz to, co jest interesujące. To samo nie jest funkcją. Zauważ, nie jestem wprowadzenie nawiasów tutaj w zwykły sposób. Jestem dosłownie przejściu funkcję o nazwie Ładowarka () do innej funkcji nazywa przedstawienia () jako argument, jak choć to jak zmienna. A jest jedną z cech JavaScript, to sami Funkcje są tak naprawdę obiekty. W rzeczywistości, oni są naprawdę Zmienne pewnego rodzaju. A jeśli nazwa funkcji jest Ładowarka (), nie ma powodu, nie mogę przekazać ją jako argument tutaj. A to oznacza, gdy formularz z ID jest demo złożone, wywołać tę funkcję. Ale teraz, jeśli mogę cofnąć wszystko, dlaczego to ja może zrobić to przed chwilą? Cóż, to jest anonimowa funkcja. Bo szczerze mówiąc, zdałem sobie sprawę, dlaczego jestem przeszkadza, by tracić czas deklarowania Funkcja o nazwie obsługi () tylko zadzwonić to w jednym i tylko w jednym miejscu? Jeśli nie potrzebujesz nazwy, a ja nie trzeba nazwać to więcej niż jedno miejsce, niech tylko realizacji funkcji dokładnie tam, gdzie go potrzebuję. I tak, JavaScript i PHP obsługuje co nazywane są anonimowi, że funkcje pozwoli mi zrobić dokładnie to tutaj. Ale jesteśmy tylko zarysowania powierzchni. Miejmy dokuczać z tylko kilka Ostateczne przykłady tutaj. Jeśli pójdę do quote.php. Zauważ, że jest to rzeczywiście PHP funkcja, program PHP, że napisałem że oczekuje parametr HTTP o nazwie Symbol i mogę przekazać w wartość jak FB. A jeśli rzeczywiście spojrzymy na źródła Kod ten jest odpytywanie darmową stronę zwany Yahoo Finance, podobnie jak zestaw p siedem, i to wraca do mnie Najwyraźniej coś w znany jest w formacie JSON - JavaScript Object Notation. To tylko przedmiot. Zwróć uwagę na nawiasy klamrowe, cytaty, dwukropek i przecinki. Teraz zaś, to jest całkiem fajne. Prawdopodobnie dlatego, że mogą korzystać z programowania języka do generowania adresów URL że wyglądać tak dynamicznie, prawda? Mogę zmienić na Google i wrócić Google'a cena akcji w wysokości $ 1,017.55. Zobaczmy więc, jeśli nie możemy użyć tego teraz. Pozwólcie mi odejść do ajax-0 o, które wygląda następująco. To tylko strona, która ma formularz z przyciskiem. Pozwól mi tutaj śmiało wpisać Yhoo dla Yahoo symbolem stanie, kliknij przycisk Pobierz Cytat, a teraz zauważyć, stałam powiadomienie o 32.86. Pozwól, że faktycznie go do wersji hodowcy z ta strona, wersja dwa, a wpisz powiedzmy Microsoft, MSFT. Get Quote. A teraz zauważyć, nie ma wpisu. Zauważ, gdzie jest napisane cena należy określić? Jest to najprostsze przykładach wskazuje na jakim Gchat i Facebook Czat i Gmail i inne takie strony internetowe robią przez właściwie zmiana strony internetowej. To zauważyć. Pozwól mi odświeżyć stronę. Pozwól mi otworzyć Chrome inspektorze. Pozwólcie mi odejść do elementów Zakładka tutaj. Teraz zauważył, gdybym powiększyć tu i otworzyć to się zauważyć, że jest to mój HTML DOM - Document Object Model moje. To jest mój HTML. Ale teraz zauważyć, chociaż to będzie być trochę trudne, aby zobaczyć go w obu miejscach na raz, jeśli wpisać FB tutaj, obserwować dno ekranu tylko. To rzeczywiście się zmienia moja HTML w locie. I robi to po prostu robiąc coś takiego. Jeśli otworzyć ajax-2, informacja realizacji coś tak sexy jak , że choć jest to dość brzydki, ale jako wyrafinowane, jak funkcjonalnie, posiada pewne HTML na dole. Ale zauważ Kiedyś oznaczyć. Nie używałem tego wcześniej, ale jest to jak, ale nie na siłę wszystko na nowej linii. To właśnie sprawia, że ​​obszar prostokątny w jednej linii zasadniczo. Zauważ, że dałem mu identyfikator cenie. Okazuje się przy użyciu tego samego JavaScript biblioteki, mam funkcji nazywa cytat (), która jest wywoływana, gdy tylko formularza. I co ja robię to. Jestem deklarowanie zmiennej w JavaScript nazywa url, wartość oszczędności quote.php? symbol =. Innymi słowy, ja zaczynam przygotowanie żądania HTTP, a następnie Jestem złączenie na które z plusem co element o ID z symbolem jest, która to informacja, że pole tekstowe aż tutaj. Więc tak jak mieliśmy formy w przeszłości. A potem okazuje się, w jQuery, jeśli zadzwonić. val (), która wywołuje z val funkcja, funkcja wartości, które pobiera co użytkownik wpisał w. A potem ruchu sieciowego że dzieje się to. $. GetJSON. I jak na bok, znak dolara jest tylko skrótowym zapisem. To naprawdę jQuery.getJSON. Zabierz mnie do JSON z tego adresu URL, a gdy Wniosek wraca, nazywamy to Funkcja i przekazać jako argument w co wrócił z serwera. Więc innymi słowy, jeśli wrócę do przeglądarki, a ja wrócę do quote.php, co moja przeglądarka robi to coraz ten fragment danych. A kiedy idę do tej strony tutaj, zauważyć, gdybyśmy zamiast iść do sieci Zakładka i wyczyścić go, a następnie wpisz coś GOOG dla Google i dostać Cytat, zawiadomienia strona nie zmieniła. Ale żądania HTTP powstał, a co wrócił tutaj, jeśli spojrzymy na Odpowiedź jest cała masa JSON że dostęp wreszcie ta prosta linia tutaj. Danych jest to, co dostał z serwera. Cena jest nazwa dbam o klucz. Więc data.price daje mi to. Teraz zaś, co jest ostatnim przykładem. Można zrobić jeszcze więcej ze strony. Jeden faktycznie, dobrze dwa. Możemy przywrócić tag, jeśli pamiętam. To JavaScript. Możemy to zrobić. Bardzo ekscytujące. Zostawimy to jako cliffhanger. Ale bardziej emocjonująco, można robić takie rzeczy. Jeśli pójdę do geolokalizacji-1, okazuje się, że Chrome wie, że jesteśmy w Szerokość Długość 42.37. -71,10. Więc jest jeszcze nie do Państwa dyspozycji. Ale o tym w przyszłym tygodniu. Do zobaczenia w poniedziałek.