>> [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]