[MUZYKA GRY] 

David J. MALAN: Wszystko w porządku. To CS50. To jest początek tygodnia osiem. A może pamiętacie, że skończyliśmy Ostatnim razem, patrząc na nowy język w ogóle. W rzeczywistości, jeden to dość lekkie i to nie jest nawet język programowania. Jest to język znaczników, który pozwala nam rzeczywiście struktury i stron internetowych. A kiedy ci coś jeszcze w połączeniu z this-- lub wkrótce będzie, jeśli ty nie masz. Zamierzamy wykorzystać kaskadowe Arkusze stylów lub CSS, który jest inny rodzaj języka z właściwościami i wartościami że zamierza zróbmy rzeczy, jak zmienić kolor i zmienić pozycję i tego rodzaju usprawnień. Ale dziś i dalej, zaczynamy skupić się na bardziej wydajnych językach, Rzeczywiste języki programowania takie jak PHP. 

Więc PHP jest już od jakiegoś czasu. A jak zobaczysz, to został zaprojektowany przede wszystkim wcześnie na rzeczywiste wykorzystać w rozwoju internetowych i faktycznie generowania stron internetowych. I co z tego rodzaju funkcje nie język konieczne w celu internecie strony dynamicznie z nim? 

Innymi słowy, jeśli chcesz, aby wygenerować Zawartość dynamically-- jak Facebooka Kanał informacyjny, który ciągle się zmienia, lub wiadomości błyskawicznych, które pojawiają się od czasu do time-- jak co kluczowym elementem funkcjonalności musisz w języku programowania które pozwoli Ci dynamicznie wydrukować nowe informacje na ekranie? 

STUDENT: Kod. David J. MALAN: Kod. OK. Weźmiemy to. Trochę bardziej precyzyjny. Chodzi mi o to, co mogliśmy zrobić to z C, szczerze mówiąc. Byłoby ból w szyi. Ale- jest to zobowiązanie? 

UCZEŃ: Tak. Zmienne, może być? David J. MALAN: Zmienne. OK, na pewno. Zmienne z pewnością może nam pomóc. A nawet coś prostsze. Użyliśmy go w pierwszym Program pierwszego dnia kiedy tak naprawdę powiedział "hello world". 

STUDENT: Drukuj. 

David J. MALAN: Drukuj, prawda? Drukuj lub w printf Świat C. Więc cały ten czas, mieliśmy w naszym zbycie language-- C, w szczególności do: a nawet Scratch o to chodzi, że może generować ciągi tekstowe. 

Cóż, jeśli HTML, jak widzieliśmy w zeszłym tygodniu, jest po prostu cała masa ciągów tekstu choć z zamkniętymi i otwartymi nawiasami wsporniki i jakiś wierszyk a powodem tego, no więc mogliśmy naprawdę rozpoczęcie generowania stron internetowych albo ręcznie, wpisując je w gedit lub w programie Microsoft Word, za które matter-- musimy tylko edytora tekstu. 

Albo możemy napisać kod, na sugestię wcześniej, że będzie nam na to dynamicznego generowania kodu HTML, i to, co mamy zamiar zacząć robić z PHP i ostatecznie nawet z Język nazywa obsługa JavaScript, jest korzystanie z jednego języka do generowania drugiego. I rzeczywiście, to właśnie Facebook i wiele, wiele innych miejsc zrobić, aby rzeczywiście dynamicznie wyświetlić nowe informacje do Ciebie. 

Więc zacznijmy this-- a Linia tajemnicze spojrzenie, ale jeden to jest rzeczywiście bardzo silny. Do tej pory używaliśmy C, który jest skompilowany języka. I właśnie szybkie recap-- skompilowany język ma co charakterystyczne? Najwyraźniej trzeba kompilować to, ale co to znaczy? Tak? 

Student: To musi być zamontowane na kod maszynowy. 

David J. MALAN: OK. Musi być zmontowane na kod maszynowy. Więc wziąć swój kod źródłowy, który jest rodzajem angielsko-podobne. Można przekonwertować do coś niższego poziomu, które nazywane jest ostatecznie Obiekt code-- 0 i 1 roku. I to te 0 i 1, że CPU, jak te wykonane przez firmę Intel, właściwie zrozumieć. 

Teraz, PHP i Python i Ruby i JavaScript i kiście inne języki nie są kompilowane języków, ale interpretowane języki, co oznacza, że ​​po prostu wpisz je, a następnie nie włączyć je do 0 i 1 roku. Zamiast tego po prostu zapewnić następnie jako Wejście do programu kogoś innego, nazywa tłumacza. I że osoby Program został zaprojektowany zrozumieć, co każdy i każdy symbol w Pythonie i PHP lub Ruby lub dowolną liczbę innych języków oznacza. 

I tak musimy to wszystko coś takiego. Tak więc w rzeczywistości, mam zamiar przejść do urządzenia tutaj, tylko do jednej Stare okna, a my jesteśmy zamiar iść do przodu i otwarte plik o nazwie, powiedzmy, witam. Teraz wcześniej, mogę uratować to nawet z rozszerzeniem, ale mam zamiar zrobić tu coś jeszcze prostsze. Mam zamiar iść do przodu i zacząć ten plik z tym tajemniczym składni. Tak "użytkownik, bin, env, dla środowiska, php. " 

To jest po prostu jedna linia kodu, która jest powie systemu operacyjnego, znajdź w lokalnym środowisko, co to jest, gdziekolwiek na interpreter-- PHP is-- i śmiało użyć tego tłumacza interpretować następujący kod. Teraz jest to rodzaj brzydka cecha PHP. Ale w ten język dowolny czas pisania kodu PHP, trzeba mieć jedną z nich brzydkie Tagi PHP wyznaczającymi początek Twojego code-- <? php. 

Ale poniżej tutaj, mogę teraz zrobić coś dość proste, jak printf komentarzy przecinek Świat backslash n pobliżu cytat, blisko nawias. A potem po prostu na dobre miara, zamierzam iść do przodu i blisko my tu tag PHP tak, że wszystko wygląda ładnie całkiem wydrukowany. 

I jak tylko kliknij przycisk Zapisz, gedit jest rzeczywiście na tyle sprytny spojrzeć na tej pierwszej linii i sobie sprawę, och, piszesz kod PHP. Niech mi podświetlanie składni to z kolorami tutaj tak, że stoi się trochę więcej. Ale teraz mam zamiar iść w dół do mojego okna terminala. Będę powiększyć. 

Program ten nazywa się "cześć" tak mam zamiar zrobić dot ukośnik witam, ale odmówiono zgody. A bash. My rzeczywiście słyszał, że co kilka tygodni temu w kontekście Shellshock, jeden z tych błędów. 

Ale Permission denied widzieliśmy przed, być może w innym kontekście. Czy ktoś przypomnieć, jak coś można naprawić gdzie odmówiono zezwolenia, jak to? Co znajduje się komenda, co najmniej? 

STUDENT: chmod. David J. MALAN: Tak, chmod, zmiany trybu pliku. I dostaniesz bardziej używane do to w przyszłym tygodniu z kolejnym problemem ustawiona. Ale teraz, mam zamiar zmienić Tryb nie być czytelne, ale dać każdemu executeability przywileje, umiejętność do uruchomienia tego pliku. I mam zamiar przypisać że do pliku komentarzy. 

Jeśli teraz nie dot ukośnik komentarzy wejść, ty zobaczyć, w rzeczywistości, mój program, hello world. A co ja zrobiłem krok wyraźnie pominąć całkowicie? Kompilacja. Więc po prostu prowadził ten program po prostu. 

I okazuje się, można to zrobić z Wiele składni przypomina C Pozwólcie mi iść do dzisiejszego kodu, które mogę umieścić w moim katalogu vhost tutaj, na rzeczywistych przyczyn wrócimy do. I mam zamiar iść do, powiedzmy, warunki 1. 

A zobaczysz tutaj, pierwszy i najważniejsze, cała masa komentarzy. Ale to jest w rzeczywistości odtworzenie w PHP programu zrobiliśmy w tym tygodniu jedno zwane warunki 1.c. gdzie celem w życie tego programu jest najwyraźniej zapytać użytkownika do liczby całkowitej a następnie zrobić kilka puszyste Analiza na nim, zgodnie z którą można powiedzieć, czy to pozytywne czy ujemna lub równa zero. I Wspominam o tym, tylko dlatego, z wyjątkiem być może jeden mały szczegół, to jest nie do odróżnienia tej pory z C. 

Co znajduje się jedna cecha tutaj, że może wyskakuje na ciebie jak trochę inaczej? Może dwie rzeczy. Tak? 

STUDENT: Znak dolara n? 

David J. MALAN: Tak. Więc znak dolara n jest obecny. I znaki dolara, jak zobaczymy, będziemy być fix do początku każdej zmiennej w PHP. Jest to dobra i bad-- dobry w że jest to coś w rodzaju, co jest oczywiste, zmienna, złe, że jest to kolejna rzecz do pisania. I jest jeszcze jedna co nam się nie mieć dość widać, przynajmniej przez ten pisowni. tak? 

STUDENT: Readline. 

David J. MALAN: Readline. Readline nie widzieliśmy, sam w sobie, w C, mimo że istnieje coś podobne, ale używaliśmy getString, i to jest jego odpowiednikiem. Więc jeśli pójdę do tego Katalog, który dzieje się, jak wytłumaczę się trochę w moim vhost Katalog i moje źródło katalogu, i zrób dot ukośnik conditions-- whoops-- kropka ukośnik Warunki 1, zobaczysz, znowu, zaprzeczył sam issue-- zgody. 

Więc pozwól mi przybliżyć i zrobić chmod plus x na warunkach, dot warunkach slash. Chciałbym liczbę całkowitą, proszę, 50. I mogliśmy grać tego Gra cały dzień. To będzie dokładnie zachowywać jak to miało miejsce w ciągu jednego tygodnia. 

OK, więc nie wszystko, co różni, z wyjątkiem nie tylko, że niewielki kawałek składni, lecz w górnej części, znowu ten wiersz, który miał pozwoliło mi stworzyć coś, co wygląda jak C programu o nazwie hello, zwane warunki 1. Ale to nie jest 0 ', a te, Jestem wykonywania bezpośrednio. To, a nie działa to tłumacza, którego nazwa okazuje się być identyczny z językiem. Program nazywa się PHP, a mój kod poniżej jednej linii jest przekazywana do niego. 

Możemy zrobić kolejny dość prosty Przykładem przypomina coś zrobiliśmy tygodnie temu. Ponownie, jest to coś w rodzaju dowolna fragment kodu że najwyraźniej nie co gdy go uruchomić? Co to będzie drukować, prawdopodobnie? 

Więc początkowo na linii 16, to powie x jest teraz 2, prawdopodobnie. % D jest taki sam jak $ i do printf. Więc to organizowania kostek, kropka, kropka, kropka, w linii 17. A następnie pojawi się linia 18 wywołać funkcję Cubed. A gdzie jest Cubed zdefiniowane? 

Cóż, wygląda na to, w linii 25, tak, że nie wszystko, co różni. Mam kilka uwag powyżej to, ale dla większości jest to dość proste Przenoszenie lub konwersji z programu C do wersji PHP. Ale są teraz kilka różnice, które być może należy przeskoczyć. Co jeszcze jest inny temat, w jaki sposób może napisać ten sam program w C? 

STUDENT: [niesłyszalne]. 

David J. MALAN: Jest Prototyp do góry nie. Więc PHP-- i szczerze mówiąc, Wiele nowoczesnych languages-- są o wiele mądrzejszy i bardziej pomocny niż C kompilatory w które was można umieścić funkcję tutaj, można umieścić funkcję tutaj, i tłumacz będzie zrobić ci przysługę czytania cały plik zanim zdecyduje że niektóre funkcje nie istnieje. Tak miło ulepszenia lat później. Ale jest też coś jeszcze inny albo nieobecny tutaj. Tak? 

STUDENT: [niesłyszalne]. David J. MALAN: Nie mamy do Oświadczam, typy zmiennych, Widzimy więc, że wkrótce istnieją różne typy w PHP, ale nie trzeba ich określić, co również jest zarówno dobre i złe. I jest jeszcze jedna rzeczą, której brakuje. 

Student: Nie ma biblioteki. 

David J. MALAN: Nie ma biblioteki. OK, więc to miłe. Dostajemy dużo więcej po wyjęciu z pudełka. Więc jest rzeczywiście dużo więcej rzeczy niż myślałem były różne. Jak o sposób w plecy? Co to jest? Powiedz to jeszcze raz? 

STUDENT: Pointer. 

David J. MALAN: Brak wskazówek. OK, przynajmniej w tym przykładzie, no. To jest uczciwe. Więc nie są wskaźnikami w PHP właściwie w ogóle. Istnieje coś takiego jak referencje, ale nie spędzać zbyt dużo czasu. I co jeszcze? 

STUDENT: Główny. David J. MALAN: Główny. Więc to był Biggie Myślałem o. Zauważ, że nie ma główny punkt wejścia. Po prostu zacząć pisać kod. I to jest rzeczywiście Będzie korzystne gdy przejście na chwilę do rzeczywistości za pomocą ten sam język dla sieci opartych programowania, dla których nie chcę mieć tylko jeden punkt wejścia. Może chcemy mieć kilka Adresy URL, kilka różnych plików wszystko biorąc w danych wejściowych użytkownika i wytwarza kopie. 

Ale tutaj jest bardzo przygnębiające Przykładem, że obiecałem ostatnio, a mianowicie w tym folderze tutaj, błędy ortograficzne. Tak więc w tym pliku speller, które nie spędzają zbyt wiele czasu na nie jest zasadniczo porting-- P-O-R-T. To tylko słowo, biorąc pod uwagę, gdy, powiedzmy, konwersji z jednego języka Zwykle na drugi ręcznie. 

To Przenoszenie komputera wersja speller z Pset 5. A ja w zasadzie próbował konwertować linia po linii to tak dokładnie, jak tylko mogę. Więc jeśli lubisz tego rodzaju rzeczy, to faktycznie jest warte w pewnym momencie ciągnąc je do siebie przez oba bok i widząc co się samo a co innego. Ale są cholernie podobne. Jeśli pamiętasz, co ortografii nawet wyglądało, nawet jeśli nie zmienić ten plik, to jest bardzo podobne strukturalnie z zaledwie kilku zmian tu i tam. 

Więc jest to tylko powiedzieć, że jest to dość proste do konwersji Speller od C do PHP. Ale w słowniku, nie coś jeszcze bardziej atrakcyjne. Pozwólcie mi iść do przodu i tworzyć mój własny plik dictionary.php. Tak, że nieco inaczej w nazwijmy go .php zamiast .c. Ponieważ jest to plik PHP, I do-- mają nieco annoyingly-- aby uruchomić plik tag php tak. I mam zamiar iść do przodu i zdefiniować kilka funkcji. Funkcja zwana kontrola, która jest zajmie słowem jak dawniej. Ale ten argument na będzie miał dolara podpisać, bo jesteśmy znów za pomocą PHP. Inną funkcją z dictionary.c było obciążenie i zajęło w imię słowniku, więc będę miał tej funkcji gotowy do pracy. 

Kolejny w dictionary.c było co? Rozmiar był jeden z najfajniejszych, w Przynajmniej jeśli trzymane jakieś zmiennej wokół. więc rozmiar po prostu musi wrócić zmienną. A potem nie było rozładować. 

Więc nie było tych czterech funkcje problemu zestaw 5 że potrzebne do realizacji z niektóre struktury danych lub struktury. Więc obiecałem, że w PHP, możemy zadeklarować tabeli mieszania, na przykład, wszystko to łatwiej. W rzeczywistości, jeśli chcę tabeli mieszania, Jestem po prostu pójdzie tak i tam jest mój tabeli mieszania. I to jest uwaga, przygnębiające, że skończyliśmy na ostatnim czasie. I wiesz co, gdybym chciał zmienna do wielkości, dobrze, to nie jest wszystko jedno który różni się od C ale mam zamiar iść do przodu i zrobić. I nie zauważyć, typ danych. I wrócę później i rzeczywiście tu dodać kilka uwag. Ale co z ładunkiem? 

Jeśli znak dolara Słownik to nazwa mojego pliku a ja naprawdę chcę, aby załadować słowa w tej tabeli teraz, Mogę właściwie zrobić coś dość proste. Jedno- i jest minorly annoying-- w PHP, należy określić w środku z funkcji, jeśli Aby uzyskać dostęp do niektórych światowy Zmienna, która jest określona na zewnątrz. 

Ale to nie jest szczególnie ciekawe teraz. Co bardziej interesujące jest to dla każdego budowy, które wspomniałem poprzednio. I okazuje się, że PHP ma funkcję nazwie pliku, którego celem w życiu jest, aby otworzyć plik i przeczytać z jego liniami na tablicę i przekazuje je z powrotem do. 

To znaczy mogę zrobić słownika tak że teraz skutecznie gdy zgłoszę pliku, to będzie mnie z powrotem do rąk tablica słów z pliku. To nie wszystko, co dobre. To wciąż będzie linia słów, coś liniowych. Ale mogę śmiało iteracji nad każdym z tych słów za pomocą że składnia widzieliśmy krótko ostatni. I zobaczysz go więcej w nadchodzącym Pset. 

Ale teraz mam iteracji pętli w ciągu każdego słowa w słowniku. I na każdej iteracji, przypominam, że jestem wywołanie bieżące słowo "słowo". A wszystko to będzie podjąć, aby umieścić słowo do słownika będzie odgadnąć słowo "prawda". To moja funkcja insert. To moja funkcja obciążenia dla mojego słownika. Teraz to trochę oszustwo, ponieważ, wiesz co, nie ma właściwie backslash n na koniec słów że powinienem chyba pozbyć, ale to nie jest problem, ponieważ PHP Funkcja o nazwie kotlet który dosłownie kotlety off jeden znak na samym końcu. Więc nie ma problemu. Przeszliśmy dalej i rzeczywiście skrócona, że ​​tylko to. A teraz mam chyba śledzić od wielkości, więc niech przynajmniej zrobić this-- Wielkość ++. Mogę to zrobić, jak wcześniej. I wtedy to prawdopodobnie będzie działa dobrze, więc to zwróci true. Gotowe. PSET 5. 

[Śmiech] 

David J. MALAN: OK. Mamy zamiar zrobić to jeszcze raz z następnym Pset też. A co z rozmiarem? Cóż, mam nadzieję, że jest to o jeden jak można się spodziewać po raz ostatni, chociaż muszę zrobić ten głupi globalna sprawa. To tylko artefakt od konstrukcja języka jest. 

Ale kontrola jest trochę bardziej interesująca. Więc gdybym przeszedł w dolara podpisać słowo, po raz pierwszy Aby mieć dostęp do że zmienna globalna tabela. A teraz, jeśli chcę sprawdzić, czy słowo jest tam, Mogę tylko powiedzieć, że jeśli prawdą jest, że Poniżej znajduje się w tabeli, następnie iść do przodu i powrót true; innego, return false. Gotowe. Drugą połowę PSET 5. 

W porządku, więc ponownie, jestem cięcia kilka zakrętów. W uczciwości, powinienem chyba spędzić kilka sekund w tej realizacji. I prawdopodobnie nie powinien kpić wszystko godziny można umieścić na Pset tyle. Więc strtolower jest funkcją. Coś podobnego egzystencjalizm w ° C, co najmniej znaków ale PHP dostał całą wersję napisów. 

To będzie wszystko na siłę na małe litery, które niektórzy z was może zrobić, co do canonicalize pan umieszczenie w słowniku. I teraz można to zrobić w C, zbyt. To nie ma nic wspólnego z PHP. 

Ale za każdym razem trzeba Boolean warunkiem, jak coś na linii 10 tam, który jest tylko będzie ocenić na true lub fałszywe, a jeśli jeszcze jasno swoje zwraca prawdę lub fałsz, mogłem po prostu naprawdę to bardziej sexy i po prostu zrobić coś takiego. Tak, że nie jest moją funkcją wyboru. Prawo, jeśli Boolean zwraca true lub false niech po prostu odesłać go od razu. 

I jest kilka innych poprawek Mogłem tu i tam. Load-- wyładowania, przy okazji, że się robi. Nic nie robić. Ponieważ wszystkie pamięci w PHP i wielu innych języków jest rzeczywiście udało dla Ciebie. Tak więc, podczas gdy w C, jak nauczyłem się boleśnie, cokolwiek malloc lub calloc lub realloc, trzeba uwolnić się. Cokolwiek fopen, musisz fclose, tak, że zasoby są ostatecznie uwolniony i narzędzia, takie jak Valgrind nie zauważyć i nie narzekam, co jest dobrą rzeczą, aby uruchomić na nich. 

Ale na pewno nie musi być jakiś haczyk, prawda? W przeciwnym razie, możemy rodzaju marne cała masa tygodni. Więc jest jakaś liczba powodów Dlatego jakby przy tej trajektorii, ale jest to kompromis. Racja, to było tematyczny. 

Więc co może kompromis tutaj, w ruchu, z C do PHP? Czuje się jak do tej pory wszystko wygrać inne niż nieco brzydoty tu czy tam. Tak. Co to jest? 

STUDENT: [niesłyszalne] pamięci. David J. MALAN: Prędkość. OK. Cóż, moja prędkość była dość szybka. Prawda? Ale szybkość realizacji programu? OK, więc to słuszna uwaga. 

Więc jak to się stało, ja z góry cued się zarówno moje rozwiązanie try, jeden Miałem na wielkim pokładzie była próba rozwiązania oparte i muszę, że w tym katalogu tutaj. Tak więc w chwili, mogę śmiało uruchomić to w Biblii Króla Jakuba, nacisnąć Enter. I mam nadzieję, że to jest poprawne Realizacja na końcu, daje mi w sumie czas 0,38 sekund, które jeden nieco arbitralne przykład. 

I jeśli teraz przejść do tego drugie okno terminala tutaj, gdzie po raz pierwszy otworzył gedit, niech mi iść do dzisiejszej code--, które ponownie, jest w tym katalogu here-- i pozwól mi iść do przodu i uruchamiania Speller. Tak po prostu, aby być jasne, to jest wersja PHP. Jestem po prostu pokazując szczyt tutaj. 

Więc jeśli ja Speller z tyldy CS50 Pset 5 tekstów, King James, wprowadź. To jeszcze szybciej niż pisanie w C, a całkowity czas jest informacja, 0,93, podczas gdy mój Realizacja C oparte wynosiła 0,38. Więc jest to nietrywialne różnica. 

A to tylko na jednym pliku. Jeśli było uruchomienie dwóch programy porównaniu wielkim pokładzie i mają całą masę wejść przetestowane, to z pewnością dodać. I gdybyśmy mieli jeszcze większych zbiorów danych, to też będzie dodać jeszcze bardziej. Więc tak, płacąc pewną cenę prędkości jest w istocie. Co jeszcze? Tak? 

STUDENT: Kwota wykorzystania pamięci RAM. 

David J. MALAN: Kwota wykorzystania pamięci RAM. Więc nie dać jedna sekunda że podczas pisania tego PHP wersja jak dużo Pamięć byłem korzystania. Jestem kompletnie odroczenie że do PHP Sam i kto napisał ten program. I to może być OK, Ale jeśli rzeczywiście bardzo dbają o wyciskanie tyle wydajność z mojego programu lub na mojej stronie internetowej lub z jakiegokolwiek narzędzia Jestem budynku, może PHP, rzeczywiście, nie jest właściwym językiem. 

A w rzeczywistości, dlatego, dla przykład wiele internetowej servers-- rzeczywiste programy służyć internetowej content-- nie są napisane w PHP lub w Pythonie lub Ruby. Są one napisane, jak będziesz teraz robić z Pset 6, w C tak, że można wycisnąć każdy kawałek z niej wydajności i naprawdę sprawuje drobnoziarnista kontrola nad tym, co jest dzieje się pod spodem kaptur, a nie tylko brać je za pewnik niektóre wyższe Struktura danych poziom. 

Zastanów się, mimo wszystko, kto w PHP realizowane że pojęcie hash table-- to rzeczywiście więcej poprawnie nazywa asocjacyjną array-- Czy on lub ona ma jakiś pomysł, jaki rodzaj wejść masz zamiar być wprowadzenie do struktury? Tak oczywiście nie jest, prawda? To narzędzie ogólny w zestaw narzędzi, który jest pod warunkiem, dla każdego, kto chce z niego korzystać, a więc na pewno nie nie mogą być optymalizowane ostatecznie o dokładnie to, co chcesz zrobić. 

Więc czas rozwoju handlu offs-- moc różnić, wydajność może się różnić, złożoność lub wykorzystanie pamięci może się różnić. A więc to, co znajdziesz w coraz większym stopniu jest to, że nie ma będzie inna narzędzia dla handlu. I rzeczywiście, w większości super Ostateczne projekty ludzi w tej klasie, wierzcie lub nie, C nie będzie być prawo używać języka. 

I rzeczywiście, jedną z wynos ostatecznie dla każdej klasy jak ten jest, aby myślisz, dobrze, co należy zdjąć półka, gdy chcesz rozwiązać jakiś problem. I rzeczywiście, to przekroczymy ten most nawet więcej, jak patrzymy na kilku językach nawet po dzień dzisiejszy. 

Więc teraz do przejścia być może bardziej zaznajomieni kontekst za pomocą języka, takich jak PHP. To dość powszechne w użyciu na wiersz poleceń, pisania skryptów tak jak ja, ale to wiele, wiele więcej wspólnego. I miał być stosowany w postaci plików, które zazwyczaj kończą w .php-- ale to nie prerequisite-- że sami generują treści internetowych. 

Więc pozwól mi iść do przodu i otworzyć kilka Przykłady I przygotowana. I są to właściwie rodzaj prawda historie w tym jedna z pierwszych rzeczy, I kiedykolwiek się po zakończeniu CS50, a może, jak sądzę, Lat CS51 temu jest mój współlokator i ja pomoc do uruchomienia studiów stacjonarnych Program sportowa, która w tym czasie, był studentem pierwszego roku rejestracji dla różnych sport, wypełniając kartkę papieru, jak go nazywano, spacery przez podwórze do Wigglesworth, i upuszczenie go w niektórych Proctora drzwi spadek. A następnie on lub ona przejść przez je, a następnie ręcznie rzeczywiście napisz do nas które zostały zarejestrowane przez jakiś sport. 

Tak wyraźnie, okazja do poprawy. Te dni, można włączyć tylko Formy Google, ale już w dzień, musieliśmy to rzeczywiście osiągnąć for-- nawet nie tak dawno ago-- dotrzeć do programowania język, który nie został PHP. W tym czasie było coś, co nazywa Perl, który wyszedł z mody, ponieważ. Jednak chodzi o to, same. 

I zasadniczo usiadł spróbować do portu idzie wersje Perla na PHP ale w pełni zrzeczenie się, nie daje każdy myśli do estetyki jeszcze. Więc tutaj jest strona internetowa. Ten plik jest. Jeśli powiększać, jego pozornie nazywa froshim0.php tylko dlatego, że jest to nasz pierwszy Przykładem w tej serii. I zauważył, że ma to, co wydaje być bardzo brzydki formularza HTML, ale forma jest ciekawa ponieważ umożliwia mnie o dostarczenie danych użytkownika do przeglądarki. 

Teraz ostatni raz, kiedy mieliśmy formularz, aby którego nie możemy przedstawić naszą parametr zapytania, Parametr kolejki jak go nazywano? Więc do Google, prawda? Całkowicie punted na idei cokolwiek z tego wejścia. 

Ale dziś, że rozpocznie produkcję wyjście. I zachowanie Idę zobaczyć tutaj początkowo jest dość banalna. David, będę zaznaczać płeć tu powiedzieć Matthews tutaj. Nie będę kapitanem. Zamierzam kliknij Register. I zauważyć, że adres URL jest zmienił się zarejestrować-0.php, i to nie jest to brzydki tekst tutaj. I nie dał do myślenia Formatowanie tego. 

Ale co ciekawe, trzy wartości zostały najwyraźniej przeszedł w. To jest rodzaj z PHP równoważne printf-- zobaczymy co to naprawdę nazywa w bit-- że po prostu wypisuje co przeszedł do niego. Więc to sugeruje, że tej formie miał co najmniej trzy pola do tego, i zobaczył mnie wpisać je w. Jednym z nich było moje imię, był płci, był internat. I kapitan nawet nie wysyłane do serwer, bo nie to sprawdzić. 

Więc to znaczy, najwyraźniej, w momencie składania rzeczy w internecie, nie tylko czasami robi URL change-- czasem nie. W rzeczywistości, zmienioną nazwą ale to, co nie ma w adresie URL które widzieliśmy ostatnio z Google. Tak? 

Student: Nie łańcuch zapytania 

David J. MALAN: Nie ma znaków zapytania. Nie ma znaku zapytania coś. Nie ma znaku zapytania q równa się koty, jak ostatnim razem. I na pewno nie Nazwa znak zapytania jest równa David lub akademiku wynosi Matthews, więc gdzie jest, że wszystko zmierza? 

Cóż, pozwól mi wrócić do gedit tutaj i otworzyć pierwszą z tych plików w moim vhost, hosta lokalnego, publicznego Katalog tutaj i przejdź do froshim0. Okazuje się, że prawie wszystkie strony tylko HTML. A to może być dla ciebie obce, ale wkrótce będzie bardziej z Pset 6 i PSET 7 i PSET 8. Ale to tylko strona HTML. 

I ciekawe rzeczy wydaje się być tutaj. Tag atrybut formularza, którego akcja ma wartość rejestru 0. Dlatego, kiedy złożyć to, to idzie się do tego pliku. Metoda różni today-- ale po. Tak więc okazuje się, że jest co najmniej dwie metody stosowane w sieci do przesyłania informacji z przeglądarki do serwera. Get stawia go w URL. Napisz stawia go w innym miejscu. A kiedy i dlaczego może Cię rzeczywiście chcesz na stronie internetowej używać stanowisko to zamiast z dostać, po prostu intuicyjnie? Każda strona internetowa. Jakie dane powinny być przekazywane tylko przez wnioskowanie teraz pocztą, w przeciwieństwie dostać, jeśli widzieliśmy dwie różnice? STUDENT: [niesłyszalne] zabezpieczyć. David J. MALAN: Jeśli chcesz coś się bezpieczne. Więc można wpisać hasło na stronie internetowej, karty kredytowej na stronie internetowej będzie rodzaj to optymalna jeśli przeglądarka umieścić że wartość wewnątrz adresu URL. Dlaczego? Widzisz to, co nie wydaje się być taka wielka sprawa, ale kursy są bardzo często chodzić ci z dala od komputera lub korzystania z komputera laboratoria, a więc ktoś, innego lub nawet współlokator można łatwo dojść i zobaczyć że prywatne informacje. Podczas wysyłania wiadomości e-mail za pośrednictwem Internetu, to prawdopodobnie nie chce, że zakończenie danych w adresie URL. I tak tam dowolną ilość powodów Dlatego może chcemy umieścić go tutaj. I photos-- rację, nie mogę nawet dość sobie wyobrazić, jak można wziąć grafikę, jak JPEG, i umieścić go w URL. Możesz to zrobić. Jest sposoby kodowania, ale to po prostu nie proste tak. 

Więc zarejestruj 0 jest rzeczywiście bardzo rozczarowująca. Wszystko mówi, dosłownie jest to. Drukuje się wewnątrz niektórych HTML tagi następujące. Mam tu znacznik PHP zagnieżdżone wewnątrz pre tag. "Pre" oznacza po prostu wstępnie sformatowany tekst, pojedynczo rozmieszczone, jak maszyna do pisania. 

Printr jest funkcja rekurencyjna druku. I jest jeszcze ten Ciekawostką tutaj. I wrócimy do tego bo nie ma innych, ale znak dolara podkreślenia Wydaje się, że po zmienne w PHP, w którym wszystko wysyłanych z przeglądarki do serwera zostanie zapisane dla Ciebie. I zobaczymy, jak się na że informacje wkrótce. 

Ale najpierw wróćmy do nieco inny przykład. Wchodząc register-- lub raczej froshims1.php, które wygląda trochę inaczej. Wziąłem trochę więcej wysiłek z formatowaniem, choć wciąż dość brzydki. Ale mam zamiar iść do przodu i wpisz "David" teraz. Mężczyzna. Sprawdzimy "kapitan" tym razem. Zrobimy Matthews. I zarejestrować się. 

I tym razem mówi, hm, nie bardzo. W porządku, więc co zarejestrować jeden? Pozwól mi wejść do otwartego rejestru 1 and-- hm. W porządku, więc jest to ciekawe, a to jest krokiem w kierunku teraz więcej ciekawych programów. 

Zauważ górze ten plik ma PHP tag jak również niektóre komentarze. I to są, na razie, rozproszenia więc niech po prostu pozbyć się tych uwag tak jak oni w C. I twierdzą, z tego kawałka kodu z komentarzem że ten kod jest walidacji złożenia. 

Cóż, okazuje się, że zmienne, takie jak znak dolara podkreślenia stanowiska są zwany Super globalnych. Są jak te specjalne zmienne globalne które są obecnie tylko wielokierunkowy dostępne w ramach programu. I można użyć notacji nawiasu kwadratowego do indeksu do nich nie przy użyciu numerów jak 0, 1, 2, 3, ale rzeczywiste słowa. 

Tak więc można myśleć o znak dolara podkreślenia stanowiska jako rodzaj tabeli mieszania że można przekazać klucz do odnośnika, a słowo-w nawiasach kwadratowych, i to będzie oddać wartość, że użytkownik faktycznie świadczona. PHP posiada funkcję że tak zwana pusta mówi tak lub nie, to zmienna jest pusta lub nie. Mamy te podwójne paski, co oznacza po prostu, lub jak w C. 

Więc w efekcie, to jest tylko linia 4 mówiąc, jeśli użytkownik nie podał nazwy lub nie dać lub nie płeć dać akademiku, iść do przodu i przekierować go lub jej pośrednictwem tej linii tutaj. Więc to jest trochę tajemnicze, ale to tylko oznacza dosłownie wrócić do tego miejsca, więc Punts użytkownika z powrotem tam, gdzie on pochodzi. Ale to trochę nieeleganckie się, że trudno kodowane go. 

Ale co, jeśli to, czy stan nie ocenia się prawdziwe? Co zrobić, jeśli użytkownik podał mi jego lub jej imię i akademik i płeć? Że jeśli warunek nie jest będzie ocenić wartość true, więc nie trafić do wyjścia w linii 7. Więc co się dzieje? I to jest to, co jest ciekawe o PHP. 

Możesz wpaść i się z trybu PHP, że tak powiem. Jeśli chcesz jakiś kod do wykonania, można otworzyć i zamknąć tag PHP i umieścić kod tam jak zrobiłem tutaj. Jak najszybciej zamknąć tag PHP, serwer jest po prostu będzie wypluwać cokolwiek umieścić tam. I rzeczywiście, była to część Oryginalny projekt PHP, na lepsze na gorsze, to było przemieszania kodu i znaczników język. I zobaczymy, że to bardzo szybko nakładanych na bałagan. I tak zrobimy lepiej niż to ostatecznie, ale tylko zauważyć, łatwość, z jaką jestem faktycznie w stanie wykonać jakąś logikę. 

Ale wciąż nieco rozczarowująca. Otwórzmy się wersja dwa Frosh IM, które najwyraźniej przedkłada register2.php. Więc ten plik rzeczywiście dzieje wyglądać prawie tak samo. Mam zamiar iść do Frosh IM 2. Ale w Frosh IM 2, Zobaczmy, co się dzieje. 

David, kliknij przycisk opcji, jak to się nazywa; Matthews, nie kapitan. Zarejestruj. Jesteś zarejestrowany. Nie bardzo. Oh wait, po prostu nie że przykład, nie możemy? Dobrze, stand by. My zrobimy trzy. Najwyraźniej coś jest o się stało z Gmail. Będziemy się tam dostać. 

Więc Frosh IM 3 wygląda tak. Nie inaczej. Ale kiedy robię David, mężczyzna, Matthews i Zarejestruj się, to trzeci i ostatni wersja roszczenia, po prostu ci, są zarejestrowanymi naprawdę. To jakby nieistotne. Ale twierdzą, ze to Trzecia i ostatnia wersja Mam teraz odtworzyć dokładnie to, co my współlokator i zbudowany dla Frosh IM lat temu. programu I to było proste. Nie ma bazy danych, nie arkusza kalkulacyjnego Excel. Ale co ważniejsze, nie było więcej pracy bo to, co zrobiliśmy z tym programem było rzeczywiście email Proctor, który poprzednio odbioru te rzeczy za pośrednictwem formularzy. 

I najwyraźniej mamy zaprogramowane w ten taki sposób, że gdy ktoś zarejestruje, Maile konto John Harvardu proctor-- lub sam w tym przypadku, John Harvard-- z następujących text-- "Ta osoba po prostu zarejestrowany." Nazywam się Dawid, kapitan jest puste; płci, mężczyzna; i akademik, Matthews. 

Więc co się stało? No cóż, w pytaniu o pliku jest najwyraźniej register3.php. A jeśli otworzę to zobaczysz zarówno moc jak ten kod a także, szczerze mówiąc, niepewność systemu, takich jak e-mail. Właśnie skutecznie udawał być John Harvard w następujący sposób. 

Mam otwarte tag php się góry, które tylko mówi tutaj jest trochę kodu PHP. Tu, okazuje się, że są biblioteki w PHP. Po prostu nie trzeba Dołącz nagłówek plików tyle. Dostajesz więcej z zlewozmywak, że tak powiem. 

Ale tym razem w wierszu 4, zrobić chcą specjalnej biblioteki nazwie PHP program pocztowy, który jest coś Cię można zainstalować za darmo w wielu systemach. Tu jestem walidacji Złożenie tylko poprzez sprawdzenie czy użytkownik dają mi nazwisko, płeć, i akademik. A jeśli tak, to śmiało instancji programu pocztowego. 

Możesz myśleć o tym jako linii kodu, które po prostu przydziela. To jak malloc, ale to trochę bardziej sexy się, że po prostu nie wspominając malloc, a niektóre liczba generycznych. Mówisz mi dać jedną z nich, dać mi nowy jednego z nich. 

A jeśli już zaprogramowany w Java lub C ++ lub innych językach, może widzieliście to. Jednak krótkie na to, czy nieznane, ta linia stawia pod znakiem dolara mailem Specjalna struktura zwana Obiekt, który ma wbudowany Funkcjonalność e-mail. I rzeczywiście, zauważyć i podobna składnia. 

Nie jest to wskaźnik, per se. PHP po prostu używa tej samej składni. Ta linia mówi korzystania SMTP-- Simple Mail Transfer Protokół, który jest po prostu Protokół używany do wysyłania poczty. To określenie korzystania Serwer SMTP Harvardu, który jest gdzieś tutaj, na terenie kampusu. 

Ten mówi, co TCP numer portu, aby rozmawiać, a ja pomyślałem, że przez googlowania lub prosząc help desk. A potem, ponieważ wykorzystuje niektóre z Harvard bezpieczeństwo systemu poczty na server-- przynajmniej szyfrowania Ruch między tobą a nim, nawet jeśli ktoś może wysłać do it-- Mam zamiar włączyć protokół TLS za utrzymanie tego bezpieczeństwa. 

Ale to jest, gdy wszystko trochę przerażające. Mogę tylko arbitralnie powiedzieć, że jestem jharvard, i mogę tylko arbitralnie e-mail się tutaj. I wtedy można określić Temat z tej linii tutaj. 

A to po prostu wygląda brzydko, ale to tylko kilka konkatenacji. Okazuje się, że PHP ma bardzo użyteczną symbol, tak jak w niektórych językach, kropka, które po prostu dosłownie skleja ciąg po ciągu znaków po ciągu znaków, i nie masz do malloc lub rysunku na całej długości łańcucha. Po prostu zrób to. I rzeczywiście, bo jestem złączenie we wszystkich tych rzeczy z tych punktów, dlatego e-mail ja wysłana wyglądał tak jak. 

I wtedy wreszcie tutaj, jestem wysyłania poczty. Więc jeśli to jest fałszywe, Jestem po prostu umrzeć, która jest funkcją tylko odbitki na ekranie jakiś komunikat o błędzie. Jest to jednak w rzeczywistości wywołanie funkcji wysyłania. W przeciwnym razie, jeśli to wszystko zawiedzie, przekierowuje mnie z powrotem tutaj. 

I dlaczego widzę, że Jestem zarejestrowany naprawdę? Cóż, stało się właśnie tutaj. Więc przynieść to dla Kilka powodów. 

Jeden z nich, to jest dokładnie tak, jak w przypadku budowy niektóre strona ostatecznego projektu lub do realnego świata, jest to jak wysyłać przypomnienia e-mail do swoich klientów lub subskrybentów. W ten sposób można wysyłać przypomnienia hasła. W ten sposób można wysyłać wiadomości ludzi że mają nowego Facebooka Komunikat czasu lub coś w tym stylu. 

Ale mówi też Fakt, że może to zostały bardzo dobrze z Davin lub ktokolwiek inny. I mówię to rodzaj z uśmiechem, bo jestem pewien, co się dzieje przez kilka z waszych umysłach w tym momencie. Ale jest to jeden z tych, jak ja zrobić powiedzieć, nie tak jak ja rodzaju rzeczy, bo jest trywialny wykuć maile jak ten. Ale jak może widzieliście lub przeczytać w Crimson, późno to również dość trywialne dla ludzi prześledzenia wstecz do pewnego pochodzenia. I zadać mi trochę czasu, być może w CS50 lunchu, jak pierwszy raz zapoznał się bardzo ściśle prawie do płyty ed wielu lat temu, kiedy odkryłem, jak działa internet. Więc w żadnym case-- nieznacznie po pokładzie red zrobił. 

Tak więc w każdym przypadku jest cała masa super globalnych, jak nazywa się tutaj, z których jeden my saw-- znak dolara podkreślenia post. Jest odpowiednikiem nazywa get, czyli tam, gdzie rzeczy z adresu URL kończy się dzieje. I jest cała masa innych, too-- sesji i serwer i ciasteczko. Wrócimy do plik cookie innym razem, ale sesja jest rodzaj chłodnym ponieważ prawo now-- aż now-- wszystko, co mamy zrobić z przeglądarki internetowej jest rodzajem bezpaństwowcem, że tak powiem. Mogę kliknąć ok, dostęp plików na serwerze, coś dzieje się na ekranie, ale następnie połączenie zostanie zamknięte. Internet Explorer lub Ikona Firefox przestaje się obracać i po prostu zobaczyć, co że strona internetowa zawiera. 

Więc HTTP jest bezpaństwowcem w które raz to sprawia, że ​​połączenia, dostaje jakieś dane, to jest to. Koniec połączenia, w przeciwieństwie do Skype, w przeciwieństwie do FaceTime, w przeciwieństwie GChat, który utrzymuje stałą połączenie z serwerem. W internecie jest zasadniczo odłączone, choć będziemy patrz przed długo, jak możemy symulować rzeczy jak Facebook Chat i GChat, które utrzymują illusion-- lub faktycznie utrzymać stałe połączenia za pomocą bardziej nowoczesne technologie. 

Ale jeśli pójdę do, powiedzmy, counter.php, jest to kolejny prosty przykład, jak zobaczymy, że obecnie uważa Odwiedziłem stronę zerowy czas. Ale jeśli po prostu odświeżyć stronę, jakoś wie, że był tu wcześniej. Gdybym ponownie załadować, to wie, że był tu wcześniej. I znowu i znowu i znowu i znowu. 

Więc jest jakiś plus plussing dzieje, ale informacja maleństwo kręci zawsze tak krótkotrwała do góry, a następnie rozłącza się, więc to nie jest tak, że mają stałe Podłączenie do mojego urządzenia. Cóż, jeśli pójdę do counter.php, zauważyć, jak łatwo jest. I najpierw wywołać ten specjalny Funkcja, że ​​będziesz wkrótce rozpocząć przyjmowanie za pewnik zwany początek sesji. Rozpoczęcie sesji. 

I od tej pory jest tylko sesja będzie wiadro, jak zakupy koszyk, w którym można umieścić wartości i rodzaj zaufania jako programista że będziemy się tutaj, kiedy że użytkownik będzie back-- sekundę później godzinę później, nawet rok później, tak długo, jak on lub ona nie zniknie ich ciasteczka, jak my w końcu zobaczyć. A teraz mam tylko jeśli stan tutaj. Więc jeśli w następującym kluczu, zwany licznik, jest ustawiony w środku z tego super global-- ten hash stół, jeśli will-- nazwie sesji następnie przejść do przodu i złapał Wartość z session-- think Z tego jak zakupy cart-- i przechowywać w tymczasowej zmiennej o nazwie licznik. 

W przeciwnym razie, jeśli to była wartość licznika nie jest ustawiona w tak zwanym koszyka, tylko zainicjować 0. Wreszcie, na dół, przejść i umieścić z powrotem do koszyków lub sesji wartość licznika 1. Tak więc okazuje się, że to Pojemnik specjalny here-- który, ponownie, jest jednym z nich związana tablice, tablica, że ​​można indeksu słowami zamiast numbers-- utrzymuje się nawet, gdy użytkownik odchodzi. Znowu wrócę do strony teraz. Minęło minut lub tak. Ale pamięta, że ​​mam tu 19 razy. To jest mój 20th wizyta. 

I tak to będzie kluczem do realizacji każdej strony, że pamięta że nie jesteś zalogowany, które można umieścić coś dosłowne w koszyku kupić lub masz jakieś liczba wiadomości w toku. Kiedy tylko chcesz zapamiętać informacje, zobaczymy, że w PHP, jak kilka innych języków, dostarcza nam tej iluzji stanie chociaż, jak zobaczysz w Pset 6, jak robisz żądania HTTP od klienta do serwera, to wszystko. Gdy wrócisz, że odpowiedź, nie ma nic więcej wracając z serwera domyślnie. Ale zobaczymy, jak obejść to. 

No cóż, spróbujmy to posprzątać trochę. Widzieliśmy kilka różne przykłady. Aha, i tak na marginesie, dla tych znanych lub nieznanych, Dlatego, że Przykładem Frosh IM poszedł patrząc naprawdę brzydki dobrze slightly--, nadal ugly-- nieznacznie mniej brzydki choć nadal brzydka Jeśli bowiem spojrzymy co tu kodu źródłowego, okazuje się, że mam to na samym początku pliku. 

Okazuje się, że bootstrap jest jednym z wielu swobodnie dostępne biblioteki tam że nie istnieją dla języków programowania zawsze, ale dla CSS lub JavaScript lub HTML lub dowolną liczbę języków. 

I ci ludzie here-- pierwotnie wyszedł z Twitter-- prostu cała masa stylów. To ogromny plik tutaj, że ktoś napisał, czy ktoś napisał, że w czasie określa kolory i formatowanie i cokolwiek, tak, że mogę rodzaj pożyczyć ich składni i nie dowiedzieć się, jak leżał mój formularz. Jest to również minified tak, że komputer może to rozumiem, ale nie koniecznie człowiek. Więc to tylko dlatego stylizacja nie zmieniło. 

Ale niech już lepiej w zakresie projektowania, bo jeśli pobyt w dół to droga zbyt długa, nasz kod będzie do bałagan i bałaganu. Więc skupmy się na tych przykładach tutaj. Ostatni na dziś. 

Więc tutaj jest bardzo prosta wersja 1.0 stronie CS50 jest. Ma tylko linki do wykłady i program nauczania, i to przy użyciu tej listy nieuporządkowanej tag-- tag UL, że używany ostatnio. A jeśli w rzeczywistości, jeśli otworzyć Pokaż źródło strony, zobaczysz, że jest to bardzo, bardzo prosty HTML. I rzeczywiście, chociaż jest to plik PHP pod maską, to jeszcze tylko plucie się tylko HTML do teraz. 

Więc jeśli klikam na wykłady, widzimy to się stało. A jeśli klikam na tydzień zero, widzimy to. A jeśli kliknę Środa, widzimy to. I to najwyraźniej był PDF slajdy z tego dnia. Wszystko robiłem to związek z kotwica znacznik URL tutaj. 

Więc jest to tylko powiedzieć, że jest to dość prosta wersja strony CS50 jest. Zobaczmy, jak to realizowane. Jeśli pójdę do katalogu mvc0, zobaczymy kilka plików. Jednym z nich jest README, więc jeśli niektórych jest to zbyt szybko, można tylko grzebać bardziej spokojnie później. I tu uwaga plik index.php jest. Okazuje się, że w przypadku Ty sam, ludzkie, nie określają ostateczną nazwę w Adres URL, serwer WWW zazwyczaj wnioskuje pewną domyślną nazwę dla Ciebie. Wskaźnik kropka coś jest na ogół domyślne. 

Więc dlatego chwilą kiedy odwiedziłem ten adres tutaj, nie nazwa pliku, nie ma pliku rozszerzenie, żaden okres w adresie URL. Po prostu wiedziałem, jakoś magicznie szukać index.php. To tylko konwencja. Można nazwać niczego. 

Więc jeśli teraz przejść do index.php, zobaczysz że indeed-- niech pozbyć komentarzach tutaj, bo tam naprawdę nic ciekawego do it-- to jest po prostu ciężko kodowane HTML. Więc to jest spójne, jednak z mojego roszczenia że można mieszać HTML i PHP. Nie ma rzeczywisty programowanie logiki tutaj. 

I inne pliki są dość dużo tak nieciekawe. To jest po prostu zakodowane w tydzień tutaj na tydzień jeden mi tydzień jeden w, w poniedziałek i środę. A potem, jeśli otworzy tygodniu zero, zauważyć, że to prawie identyczne. 

I to rodzaj klucza wynos. Zauważ, jak zbędne jest. Pliki te ledwo zmienić, a jednak wyciągnął jeden z tych miejsc pracy kopiuj / wklej gdzie wziąłem jeden file-- przypuszczalnie w tym tygodniu zero-- go skopiować kiedy przyszedł około jednego tygodnia, i manipulowane kilka wartości. Prawdopodobnie powinniśmy być w stanie zrobić lepiej niż to. 

Więc wróćmy do mvc i przejść do wersji pierwszej. I zauważyć, mam Kilka plików, ponieważ to, co był wspólny dla wszystkich tych plików po prostu Chwilę ago-- jeśli wrócę do wersji 0, wróćmy do indeksu, i po prostu postulate-- raz pozbyć comments-- jaka część tej strony jest zapewne w każdym z moich plików? Wystarczy zadzwonić go. Które linie są duplikowane Prawdopodobnie we wszystkich tych stron? Tak? 

STUDENT: [niesłyszalne]. 

David J. MALAN: 1 do 9. Tak, absolutnie. 1 do 9, z wyjątkiem być może 8 zmienia trochę ponieaz CS50 staje się wykłady lub tydzień zero lub coś. Ale prawie identyczne. Tak więc wszystkie te rzeczy są po prostu rodzaj kopiować i wklejać. I jest kilka inne linie mogą myślę tego są prawdopodobnie identyczne we wszystkich plikach. 

STUDENT: 12 i 13. David J. MALAN: Tak. Jasne, 12, 13, i 14 prawdopodobnie, tylko dlatego, że w ciekawych rzeczy dzieje się na linii 11 i 10, tak to wygląda. Więc spójrzmy na wersji 1, która stara się poprawić w tej sprawie. W wersji 1 niniejszego mvc example-- my będziemy wyjaśnić, co mvc w moment-- środki jeśli pójdę do indeksu, to niby wygląda trochę mylące teraz. To nie jest takie proste, jak wcześniej. 

Ale gdy zaczniesz Przeczytaj ją dokładnie, to bardzo proste, co robi. Linia 1 i pozornie Linia 8 zastąpiły wszystkie rzeczy po prostu identified-- choć tak na dokładkę, Wyszedłem z ULS nie tylko w przypadku niektórych dni nie miał listę rzeczy. A więc wymaga to trochę jak funta to w kopii C. i past zawartość skutecznie tutaj do tego pliku. 

Więc w header.php, jak ty można wywnioskować z nazwy, ma być nagłówek strony. To rodzaj osierocone tutaj. Ma tylko szczyt do niego, ale nie ma więcej treści poniżej. 

A jeśli spojrzeć na stopce w międzyczasie, który był inny plik mentioned-- ten jest jeszcze mniej ciekawe, ale znowu, to jest wspólne dla wszystkich. Więc to jest stopka. To jest nagłówek. Jest to plik, który jest zmienia, więc dlaczego nie spróbuj czynnik poza wspólność z tych dwóch linii tutaj? 

Ale to można wyczyścić się nieco dalej. Mam zamiar iść do przodu i otworzyć wersję dwóch gdzie zobaczymy, że nie ma Nowy plik, helpers.php. Zobaczymy, co to za chwilę. Chodźmy do indeksu, jak punkt wejścia, jak wcześniej. 

A teraz zauważyć jestem wymagający helpers.php nie nagłówek lub stopkę. Ale pomocnicy jest trochę jak helpers.c i helpers.h z Pset 2 lub PSET 3 dawno temu, gdy w rzeczywistości nie szukać i znaleźć dla tego Pset, i trzeba było cały kod do sortowania i szukając w oddzielnym pliku. To, co się tutaj dzieje. 

A teraz linia 3 wygląda nieco inaczej. A to tylko jedna linia. Aby to jeszcze bardziej jasne, mogłem po prostu ma to być spójne stylistycznie ze wszystkim, co zrobiliśmy. Ale to naprawdę nie jest zmiana funkcjonalności. To tylko jedna linia z prawdziwego kodu. 

Najwyraźniej istnieje funkcja gdzieś nazywa uczynić nagłówek, i to, gdzie rzeczy uzyskać bardzo mocny. Zauważ, że wnętrze jego nawiasach jest to, co inny kawałek składni? To chyba trochę trudno powiedzieć, ale zauważyć there's-- włożę jakiś biały miejsca. Jest nawiasy kwadratowe. 

I nawiasy kwadratowe widzieliśmy nieco temu w związku z tablic asocjacyjnych, które są, ponownie, jak tabele hash. I jeśli myślisz, że teraz do C, Kolejność argumentów do funkcji musi być zawsze takie same. Trzeba pamiętać, co się zamówić is-- X, Y, Z lub Z, Y, x-- i trzeba zawsze zapewnić im w tej samej kolejności, lub szukać ich Jeśli zapomniałeś. 

Ale to wydaje się być sprytny sposób przekazywania dowolną wartość klucza pary której tytuł to nazwa argumentu w tym przypadku i CS50 jest jego wartość. A fakt, że mam te nawiasy kwadratowe oznacza tu, że mogłem również przejść w coś jak tydzień jest 0 lub 1 lub 2 lub 3. Więc my parametryzowane Funkcja ta w taki sposób, że może to potrwać wiele wejść, ale na razie to tylko jeden. 

Gdybym teraz przejść do helpers.php, zauważyć, co robi. To jest trochę nowych funkcjonalności, ale teraz po prostu wziąć na wierze, że jest to Składnia, z którym zdefiniować funkcję w PHP. Dosłownie znaczy funkcję. Nie podasz powrót typu, a to zgodne ze zmienną szczegół wcześniej gdzie tak naprawdę nie mocno wpisać. 

To właśnie określa że domyślnie to trwa asocjacyjną Tablica jako argument. I wiesz co? Jeśli użytkownik nie przechodzi jeden w, przyjąć wartość domyślną. 

Jest to funkcja, która nie ma C dla nas, co jest dobre, bo teraz danych, nawet jeśli nie dać niczego, będzie pusta tablica, ale jeden. A na marginesie, wyciąg po prostu robi coś Funky gdzie wykonuje wszystkie klawisze z tego asocjacyjna, wszystkie rzeczy, można umieścić w nawiasach kwadratowych, oraz tworzy się z nich zmienne tak, że możemy mieć dostęp ostatecznie do nich w footet.php i header.php. To trochę abstrakcyjny, więc pozwól mi zwrócić na to uwagę. 

W pliku index.php, zauważysz, że jestem przechodząc w parę wartości klucza tytułu o wartości CS50. Jeśli teraz spojrzeć na helpers.php, zauważyć, że RenderHeader jest wyodrębnianie tych danych, że jestem przechodzącej w, wówczas wymóg header.php. Co zrobiłem to rodzaj biedaka Realizacja teraz z poniższych. 

Gdybym otworzyć header.php, Ogłoszenie, że już nie mam ciężko zakodowane w CS50 słowo w tym pliku nagłówkowym. Wrzuciłem to prawda potwornie nazwie funkcji, HTML znaki specjalne, tam. Zauważmy jednak, co zrobiłem. Mam otwarty HTML. Potem mają otwartą głowę i otwarte tytuł. 

A następnie wewnątrz Open i tytuł close tagi, mam trochę kodu PHP. I to jest miłe, ale składni, co oznacza po prostu echo się. Dosłownie oznacza this-- echo following-- ale to jest bardziej sexy napisać. Echo na tytuł które zostało przekazane w. 

Ale co myślisz HTML Specjalny znak jest o, zwłaszcza jeśli masz niektóre wcześniejsze doświadczenie HTML? Jakie znaki mogą być niebezpieczne, aby przejść na stronę gdzie jesteś dynamicznie generując strona z kodem jak to? Pozwólcie mi iść do tego pliku, wersja dwa, i zobacz, czy nie mogę wywołać tego. 

Jest to wersja dwa. I zauważyć wszystko jest w porządku, działa dobrze. Ale załóżmy, że idę do index.php i I określić, że tytuł mojej stronie nie jest CS50. Jest czujny skrypt otwarty nawias Witaj świecie, blisko apostrof, blisko nawias, średnik, otwarty nawias, scenariusz ukośnik. 

Skrypt, a my będziemy w końcu zobaczyć, jest znacznik że można użyć do korzystania z innego język programowania o nazwie JavaScript wewnątrz strony. A teraz dostrzec logikę tutaj. Oto klucz o nazwie tytuł. Tutaj jest to szalony długą wartość teraz. 

Ale jeśli pójdę do pomocników PAGE- lub raczej, nagłówek strony, Dzwonię z tej funkcji na pierwszej tego tytułu. Więc jeśli teraz załadować tę stronę, ja zobaczyć, co wygląda śmiesznie, ale jest to bezpieczne. To po prostu wygląda głupio. 

Ale załóżmy, że zamiast Zapomniałem tego. I zapamiętaj moje słowa, liczba niezerowe od zapomnisz to zrobić i dostaniesz jakiś pracowity student lub przyjaciel wymyślanie do ciebie na targach CS50 lub anonimowo w nocy wywiercenie na swojej stronie internetowej i zasadniczo wstrzykiwanie kodu wiemy o was na swojej stronie jakoś. 

Bo jeśli po prostu splunąć z tytułu tutaj i tytuł there-- dobrze, jeśli tytuł dosłownie wygląda i PHP jako język, który może pluć z innym tekstem językach, dzieje się to dosłownie zastąpić ten tag z, Oczywiście, to, co umieścić w innym miejscu. 

Więc jeśli teraz go tutaj i odświeżyć po odkręcenie tych mechanizmów bezpieczeństwa, teraz mam cześć świata tutaj. Teraz to nie wszystko, że duże z czynienia, ale można zrobić coś trochę złośliwy tutaj, podobnie jak nie ma inne tags-- jak zobaczymy raz spędzamy więcej czasu w JavaScript-- jak lokalizacji kropka href dostaje, cytuję, koniec cytatu, HTTP business.com, ale przeciwny że od drugiego dnia. I teraz można wywołać internecie strona rzeczywiście iść natychmiast na tej stronie tutaj. 

I rzeczywiście, nie chcę nawet iść do business.com bo nie chcę wiedzieć, co to jest. Ale to też wywoła kod być wstrzykiwane do strony. Więc jest to tylko powiedzieć, że chociaż wprowadzamy bardzo wcześnie na niektóre z tych bardziej złożonych struktur to wszystko w kierunku końca upewniając że kod nie jest wykorzystanie. 

Więc teraz trzecia wersja tutaj. Robi się trochę hodowcy. I tak naprawdę nie like-- strona o mnie analny był już trochę zirytowany Fakt, że funkcja nazywa się RenderHeader i RenderFooter że były niemal identyczne. Więc przyszło mi do głowy, to dlaczego nie zrobić I parametryzacji tych funkcji do tylko jednej nazwie render, mają zająć drugi argument jak nazwą matrycy, końcowy do render-- albo nagłówek lub stopkę? A następnie ewentualnie, jeśli chcę przejść w niektórych kluczowych par wartości jak ja o tytuł dla header ale nie dla stopki, Mógłbym to zrobić. 

A więc teraz, jeśli pójdę do helpers.php, jest to trochę bardziej skomplikowane. I będę machać w swoje ręce szczegóły, ale to tylko jedna funkcja. Więc to jest krok w kierunku lepszego designu. 

Możemy o krok dalej. Jeśli pójdę do mojej czwartej wersja to zauważyć teraz że robię coś jeszcze trochę tajemnicze. I wiem, że jest to Wiele wchłonąć na raz, ale jesteśmy po prostu rodzaj czyszczenia rzeczy. Teraz jestem umieszczenie moich pomocników plik w folderze o nazwie includes-- tylko arbitralne wymienić, gdzie chcę umieścić rzeczy że chcę obejmować: a następnie Reszta jest taka sama. 

Ale teraz, gdy patrzę w gedit, Ogłoszenie, że stałam się pozbyć z tych wszystkich innych plików i mam przeniesiono je na przykład do tutaj. A następnie w szablonach, Mam to także tutaj. I tak to wszystko jest teraz w kierunku kroku z użyciem o wiele lepszy wzorzec projektowy. A my jesteśmy bardzo szybko zamierza odejść z domyślnej funkcjonalności PHP, które zaczęliśmy tutaj z, gdzie po prostu mieszać PHP, a HTML, a CSS i po prostu wypluć i go o drogę. To nie będzie bardzo utrzymaniu. Podobnie jak w C, zaczęliśmy używać wiele plików i wiele funkcji i rzeczy faktoringowych spełnienia. Zrobimy tu sama. I faktycznie, w piątym i ostatnim wersja tutaj, zrobiłem jedną rzecz. Można nawet użyć kropki kropki, które, ponownie, jest tylko katalog nadrzędny. Aby być jeszcze bardziej bezpieczeństwo świadomy, bo jeśli spojrzeć na słuchanie tu na piątym i wersja ostateczna, uprzedzenia że mam jeden katalog o nazwie publicznej, a następnie na sam poziom, że tak powiem, Mam obejmuje i szablony a następnie, że plik tekstowy readme. 

A powód mam zorganizowany to jak this-- i tak wiele sieci Gospodarze, zwłaszcza tych 5 dolarów miesiąc te lub $ 10 miesięcy te, jeśli kiedykolwiek miał jeden z nich services-- co tak wielu z nich zrobić jest po prostu oczekiwać, aby zrzucić wszystko z plików do jednego katalogu, jak my już z to pierwszy przykład. 

Ale jak tylko zacząć budować więcej wyszukane miejsca, które po prostu przechowywać Dane Ci zależy i plików obchodzi, faktycznie organizuje rzeczy prawidłowo i więcej bezpieczeństwa świadomość w umyśle może zaczynamy się bronić wobec wszystkich przyjaciół że masz albo w lub na zewnątrz z tej klasy, który jak najszybciej zacząć Programy siebie na internecie, zamiar rozpocząć zbieranie na ciebie i na nich. 

I tak będziemy wyglądać ostatecznie w tym projekcie. To tylko obraz przedstawiający następujący. Mamy zamiar umieścić wszystkie nasze programowanie logiki w jeden lub więcej plików, i będziemy po prostu zacząć nazywając te kontrolery. To gdzie mózgi nasze strony rzeczywistości. Następnie jedziemy do mają widoki i widoki są tak proste, jak tylko oddzielne files-- zwane szablony często. Oni po prostu mają estetyka mojej stronie, co chcę wyglądać strona like-- kolory i układ i pozycje wszystkie zmienne. 

A następnie bardziej interesujące że uda nam się w końcu dostać się do jest model, który będzie po prostu Słowo to uderzenie na innych technologiach które wprowadzają w obraz, jak rzeczywistych baz danych, tak, że gdy chcesz aby zapisać informacje, nie po prostu wysłać e-mail do Proctora lub do siebie, rzeczywiście przechowywać go w bazie danych za pomocą innego języka znany jako SQL. I tak my dzisiaj tutaj i zostawić podnieść się z tym w środę i wprowadzenie bazy danych, a następnie. 

[MUZYKA GRY]