[Přehrávání hudby] 

DAVID J. Malan: Dobře. To je CS50. To je začátek týdne osm. A vy si možná vzpomenou, že jsme skončili naposledy při pohledu na nový jazyk úplně. Ve skutečnosti, jeden to je docela lehký a to není ani programovací jazyk. Je to značkovací jazyk, který nám umožňuje vlastně struktura a webových stránek. A když se vám něco jiného ve spojení s tohle-- nebo brzy bude, je-li ještě nemáte. Budeme používat kaskádové Styly, nebo CSS, které je jiný typ jazyka s vlastnostmi a hodnotami , co se děje, aby nám to věci, jako je změna barvy a změnit pozici a tyto druhy vylepšení. Ale dnes, a dál, začneme zaměřit se na silnější jazyků, skutečné programovací jazyky jako PHP. 

Takže PHP již nějakou dobu. A jak uvidíte, je byl určen především brzy na skutečné použití ve vývoji webových aplikací a vlastně generování webových stránek. Co tak druhy funkce dělá jazyk je třeba, aby web stránky dynamicky s tím? 

Jinými slovy, chcete-li vytvořit Obsah dynamically-- jako Facebook je Novinek, které se neustále mění, nebo rychlé zprávy, které se objevují čas od času na time-- jako to, co je klíčovou součástí funkčnosti budete potřebovat v programovacím jazyce které by vás nechal dynamicky vytisknout nové informace na obrazovce? 

STUDENT: Code. DAVID J. Malan: Code. OK. Budeme to brát. Trochu přesnější. Myslím, že bychom mohli dělat to s C, upřímně řečeno. Jednalo by se o bolest v krku. Ale- je tento závazek? 

STUDENT: Jo. Proměnné, možná? DAVID J. Malan: proměnné. OK, jistě. Proměnné mohou nám jistě pomůže ven. A dokonce i něco jednodušší. Použili jsme ji v první Program prvního dne když jsme ve skutečnosti řekl: "hello world". 

STUDENT: Print. 

DAVID J. Malan: Tisk, ne? Tisk, nebo printf v Svět C. Takže celou tu dobu, jsme měli na našem webu Likvidace language-- C, v particular-- a dokonce Scratch když na to přijde, že může vytvářet řetězce textu. 

No, pokud je HTML, jak jsme viděli minulý týden, je jen celá parta řetězce textu i když s otevřenými závorkami a uzavřen držáky a nějaký rým a důvod, proč za ním, Tak jsme mohli opravdu začít vytvářet webové stránky a to buď ručně zadáním je v gedit nebo v aplikaci Microsoft Word, pro které matter-- nám stačí textový editor. 

Nebo bychom mohli psát kód, do svého návrhu dříve, že by nás nechal dynamicky generovat HTML, a to je to, co budeme začít dělat s PHP a nakonec i při jazyk volal JavaScript, je použít jeden jazyk, pro generování druhého. A skutečně, to je to, co Facebook a mnoho, mnoho dalších míst udělat, aby skutečně dynamicky zobrazí nové informace k vám. 

Takže začněme s tohle-- A mystický hledáte line, ale jeden to je vlastně docela silný. Dosud jsme používali C, který je sestaven jazyk. A právě rychlé recap-- sestaven jazyk má co vlastnost? Budete zřejmě muset kompilovat to, ale co to znamená? Jo? 

Student: To musí být sestaveny do strojového kódu. 

DAVID J. Malan: OK. Je třeba sestaven do strojového kódu. Takže budete mít svůj zdrojový kód, což je trochu anglicky podobně. Převést, že pro něco nižší úroveň, který se nakonec nazývá Objekt code-- 0 a 1 je. A to ty 0 a 1 je, že CPU, jako ty vyrobené společností Intel, skutečně pochopit. 

Nyní, PHP a Python a Ruby a JavaScript a kytice ostatní jazyky nejsou sestaveny jazyky, ale interpretovat jazyky, což znamená, že stačí je zadat a pak nemáte proměnit je v 0 a 1 je. Místo toho jen poskytovat následně jako vstup do programu někoho jiného, volal tlumočníka. A tato osoba je Program byl navržen tak, rozumět tomu, co každý a každý symbol v Pythonu nebo PHP nebo Ruby nebo libovolný počet další jazyky znamená. 

A tak vše, co potřebujete, je něco takového. Takže ve skutečnosti, budu přejít na spotřebiče tady, jen do některého staré okno, a my jsme jít dopředu a otevřené soubor s názvem, řekněme, ahoj. Nyní již dříve, mohl jsem zachránil to dokonce s příponou souboru, ale budu dělat ještě něco jednodušší zde. Chystám se jít dopředu a začít Tento soubor s touto mystickém syntaxi. Tak "user, bin, env, pro životní prostředí, php. " 

To je prostě jeden řádek kódu, který je řekne svůj operační systém, jít najít ve vaší místní prostředí, ať je to cokoliv, všude tam, kde PHP je-- na interpreter-- a jděte do toho a používat tento interpret interpretovat následující kód. Nyní, to je druh ošklivý rys PHP. Ale v tomto jazyce, jakýkoli když budete psát PHP kód, musíte mít jeden z těchto ošklivé PHP tagy vymezení začátek vašeho code-- <? php. 

Ale nižší než tady, teď mohu udělat něco poměrně jednoduchá, podobně jako printf ahoj čárka Svět zpětné lomítko n close citace, v blízkosti závorka. A pak už jen pro dobro opatření, jdu pokračovat v blízkosti můj php tag sem tak, že všechno vypadá pěkně pěkně vytisknout. 

A jakmile jsem klepněte na tlačítko Uložit, gedit je dost opravdu chytrý podívat se na tomto prvním řádku a si uvědomit, oh, píšete PHP kód. Dovolte mi zvýraznění syntaxe to s barvami tady, takže to stojí o trochu více. Ale teď jdu dolů do okna mého terminálu. Budu přiblížit. 

Tento program byl nazván "Dobrý den," takže budu dělat tečka lomítko Dobrý den, ale popíral povolení. A bash. Vlastně jsme slyšeli, že Před věc pár týdny v souvislosti s Shellshock, jeden z těch chyb. 

Ale Permission denied jsme viděli dříve, možná v jiném kontextu. Má někdo připomenout, jak můžete opravit něco kde je přístup odepřen takhle? Co je to příkaz, alespoň? 

STUDENT: Chmod. DAVID J. Malan: Jo, chmod, pro změnu režimu souboru. A budete mít o to více používá pro Tato další týden s následným problémem nastavení. Ale teď, budu měnit režim nesmí být čitelný, ale dát každému executeability oprávnění, schopnost spustit tento soubor. A já přiřadit že do souboru Dobrý den. 

Pokud teď mám dot lomítko ahoj ENTER, vidět, ve skutečnosti, můj program, hello world. A co krok udělal já jasně vynechat úplně? Kompilace. Tak jsem běžel tento program jednoduše. 

A ukázalo se, můžete to udělat s hodně syntaxe připomínající C Nech mě jít v dnešní kódu, které jsem dal do mého VHOST adresáře tu, skutečných příčin vrátíme se. A já jdu do, řekněme, podmínky 1. 

A uvidíte tu, první a především, celá parta komentářů. Ale to je ve skutečnosti re-vytvoření v PHP programu jsme v týdnu jeden s názvem podmínky 1.c kde účel Životnost tohoto programu je zřejmě se zeptat uživatel na celé číslo a pak udělat nějaké nadýchané Analýza na to jejímž prostřednictvím říkáte, jestli je to pozitivní nebo záporný nebo roven nule. A uvedu to do jen proto, s výjimkou snad jednoho malého detailu, je to k nerozeznání tak daleko od C 

Co je ta charakteristika tady to možná vyskočí na vás, jak trochu jinak? Možná, že dvě věci. Jo? 

STUDENT: Dollar sign n? 

DAVID J. Malan: Jo. Takže znak dolaru n je přítomen. A dolaru, as uvidíme, jdou být oprava na začátek každé proměnné v PHP. Je to dobré i bad-- dobré že je to něco, co je zřejmé, proměnná, špatný v tom, že je ještě další věc, psát. A je tu ještě jedna další co máme ne tak docela vidět, alespoň tímto hláskování. jo? 

STUDENT: Readline. 

DAVID J. Malan: Readline. Readline jsme neviděli, sama o sobě, v C, i když existuje něco podobný, ale jsme použili getString, a to je jeho protějšek. Takže když jdu do toho adresář, který se stane být, jak já ti to vysvětlím za chvíli v mém VHOST adresáře a můj zdroj adresář, a já se do toho pusťte a udělat dot lomítko conditions-- whoops-- tečka lomítko podmínky 1, uvidíte opět, stejný issue-- přístup odepřen. 

Takže mi dovolte přiblížit a udělat chmod plus x podmínek, tečka lomítko podmínek. Rád bych celé číslo, prosím, 50. A tak bychom mohli hrát to Hra po celý den. Bude se chovat přesně jako tomu bylo v prvním týdnu. 

OK, takže příliš neliší, s výjimkou nejen, že mírné trochu syntaxe, ale nahoře, jsem znovu měl tento řádek, který mi umožnilo vytvořit něco, co vypadá jako C program s názvem Dobrý den, tzv podmínky 1. Ale to není 0 je a ty, Já provádění přímo. Je to místo běží to interpret, jehož jméno se stane, že je totožný s jazykem. Tento program se nazývá PHP, a můj kód pod hranicí jeden je předán do něj. 

Můžeme to udělat další poměrně jednoduchý Příkladem připomínající něco jsme před několika týdny. Znovu, toto je druh libovolný kus kódu to zřejmě dělá co když to běží? Co se to bude tisknout, pravděpodobně? 

Takže zpočátku na lince 16, je to chtěl říct, x je nyní 2, pravděpodobně. % D je stejný jako i $ pro printf. Takže je to cubing, tečka, dot, dot, v souladu 17. A pak Řádek 18 se zobrazí volání funkce kostičky. A kde je Cubed definována? 

No, vypadá to, že v řadě 25, takže to není tak odlišné. Mám nějaké připomínky výše to, ale z větší části, je to docela jednoduché portování nebo konverze z programu C na verzi PHP. Ale tam jsou nyní pár rozdíly, které by možná vyskočit. Co jiného se liší o tom, jak může napsat stejný program v C? 

STUDENT: [neslyšitelné]. 

DAVID J. Malan: tu žádný prototyp up top. Tak PHP-- a upřímně řečeno, Mnoho moderních languages-- jsou mnohem chytřejší a další užitečné než C překladače v tom, že vás může dát funkci tady, si můžete dát funkci tady, a interpret se děje k tomu vám laskavost čtení celý soubor, než se rozhodne, že některé funkce neexistuje. So Nice vylepšení let později. Ale je tu také něco ještě jiný nebo zde chybí. Jo? 

STUDENT: [neslyšitelné]. DAVID J. Malan: Nemáme na deklarovat typy proměnných, tak uvidíme zanedlouho, že existují různé typy v PHP, ale nemusíte je určit, což je také dobré i špatné. A je tu ještě jedna věc chybí. 

Student: Je tu žádné knihovny. 

DAVID J. Malan: nejsou k dispozici žádné knihovny. OK, tak to je hezké. Dostaneme mnohem více po vybalení z krabice. Takže je to vlastně mnohem víc věci, než jsem si myslel, že jsou odlišné. Jak se asi tak v zádech? Co je to? Řekni to ještě jednou? 

STUDENT: Pointer. 

DAVID J. Malan: Bez ukazatele. OK, alespoň v tomto příkladu, ne. To je fér. Takže tam nejsou odkazy PHP vlastně obecně. Existuje něco jako reference, ale nebudeme trávit příliš mnoho času. A co ještě? 

STUDENT: Main. DAVID J. Malan: Main. Tak tohle byl Biggie Myslel jsem, že. Všimněte si, že to není hlavní vstupní bod. Můžete jednoduše začít psát kód. A to je ve skutečnosti Bude výhodné když jsme přechod okamžik skutečně používat tento stejný jazyk pro web-based programování, pro které jsme nechtějí mít pouze jeden vstupní bod. Mohli bychom mít spoustu URL, spoustu různých souborů vše brát v vstup uživatele a zhotovuje výstup. 

Ale tady je velmi skličující příklad, který jsem slíbil minule, a to v této složce zde překlepy. Takže v tomto souboru pravopisu, kterou jsme nebude trávit příliš mnoho času, došlo v podstatě porting-- P-O-R-T. Je to jen slovo, vzhledem k tomu, kdy, řekněme, převodu z jednoho jazyka na druhý ručně obvykle. 

Jedná se o portování na PC verze pravopisu z pset 5. A já jsem v podstatě se snažil převést je řádek po řádku tak přesně, jak jen mohu. Takže pokud máte rádi tento druh věci, ve skutečnosti je hodnota v určitém okamžiku tahem je oba na straně boční a vidět to, co je stejné a to, co je. Ale jsou zatraceně podobné. Pokud si pamatujete, co speller dokonce vypadalo, i když ne muset změnit tento soubor, je to docela podobné konstrukčně jen s pár změn sem a tam. 

Takže je to jen říci, že je to docela jednoduché převést pravopisu z C do PHP. Ale ve slovníku, je tu něco, co ještě přesvědčivější. Nech mě jít dopředu a vytvořit moje vlastní dictionary.php souboru. Takže mírně odlišné v tom, že budeme nazývat .php místo .c. Protože se jedná o soubor PHP, I do-- mírně annoyingly-- mít spusťte soubor php tag takhle. A budu pokračovat a definovat několik funkcí. Funkce volána kontrola, která je bude trvat na slova jako předtím. Ale tento argument je bude mít dolar podepsat, protože jsme opět pomocí PHP. Další funkce z dictionary.c bylo zatížení a to se ve jménu slovníku, takže budu mít tuto funkci připraven jít. 

Jeden v dictionary.c je to, co? Velikost byl jeden z nejhezčích ty se na alespoň pokud jste si nechali nějaké proměnné kolem. takže velikost prostě musí vrátit proměnnou. A pak tu byl vyložit. 

Takže tam byly tyto čtyři funkce v problému nastavení 5 že jste potřebovali, aby s některé struktury nebo struktury dat. Tak jsem slíbil, že v PHP, můžeme prohlásit, hash tabulky, například, to vše snadněji. Ve skutečnosti, pokud chci hash tabulky, Jen jsem jít takhle a tady je moje hash tabulky. A to je poznámka, skličující, že jsme skončili na posledním čase. A víte, co, kdybych chtěl proměnné pro velikost, dobře, tohle není všechno které se liší od C ale já jdu dál a dělat, že. A všimněte si žádný datový typ. A já se vrátím později, a vlastně sem přidat nějaké připomínky. Ale co zatížení? 

Pokud se znak dolaru slovník je název mého souboru a já jsem vlastně chcete načíst slova do této tabulky podnikem, Já si skutečně dělat něco docela jednoduché. One-- a to je minorly annoying-- v PHP, musíte zadat v z funkce, pokud vás chcete přístup k některým globální proměnná, která je definována mimo. 

Ale to není zvlášť zajímavé právě teď. Co je ještě zajímavější je to pro každého postavit, že jsem se zmínil minule. A ukázalo se, že PHP má funkci volal soubor, jehož smysl života je soubor otevřít a číst všechny své linky do pole a předat je zpět. 

Což znamená, že mohu dělat to slovník že nyní efektivně, když volám souboru, to mě vrátit pole slov ze souboru. Není to tak dobrý. Je to stále ještě bude linka slov, něco lineární. Ale můžu pokračovat a opakovat nad každým z těchto slov použití že syntax jsme viděli krátce minule. A uvidíte, že více v nadcházející pset. 

Ale teď mám smyčky iterace po každé slovo ve slovníku. A v každé iteraci, vzpomínám, že jsem volání aktuální slovo "slovo". A všechno to bude trvat, než dát slovo do slovníku je bude slovo hádat "true". To je můj vložka funkce. To je funkce load má pro mého slovníku. Teď je to trochu podvod, protože víš co, je to vlastně zpětné lomítko n na konci slov že bych měl asi zbavit, ale to není problém, protože PHP má funkce volána chop, které doslova kotlety off jeden znak na samém konci. Takže tam žádný problém. Šli jsme dál a vlastně zkrátil, že se právě tento. A teď jsem měl asi sledovat velikosti, tak se pojďme alespoň udělat tohle-- Velikost ++. Můžu to udělat jako předtím. A pak je to pravděpodobně bude fungovat v pohodě, takže to vrátí hodnotu true. Hotovo. Pset 5. 

[SMÍCH] 

DAVID J. Malan: OK. Chystáme se udělat znovu s dalším pset, taky. A co velikost? No, tohle snad je o jak byste očekávali minule, i když musím udělat to hloupé globální věc. Je to jen artefakt od Konstrukce jazyku je. 

Ale kontrola je trochu zajímavější. Takže když jsem prošel v dolaru První podepsat slovo, já Chcete mít přístup ke že globální proměnná stůl. A teď, když chci zkontrolujte, zda slovo je tam, Můžu jen říct, jestli to je pravda, že vkládá se nachází v tabulce, pak jděte do toho a návrat pravda; jinak, vrátí false. Hotovo. Druhá polovina pset 5. 

Dobře, tak ještě jednou, já jsem řezání pár rohů. Upřímně řečeno, měl jsem asi strávit pár vteřin Na této implementace. A já jsem asi neměl zesměšňovat všechny hodin si dát na pset tolik. Takže strtolower je funkce. Něco podobného existencialistický v C, alespoň pro znaky, ale PHP je dostal celou verzi řetězce. 

To bude nutit vše na malá písmena, což někteří z vás mohla udělat, aby se to, co kanonická jste uvedení do slovníku. A teď můžete to udělat v C také. To nemá nic společného s PHP. 

Ale kdykoliv budete mít Boolean stav, jako něco, co na lince 10 tam, což je jen bude hodnotit na hodnotu true nebo falešný, a vaše-li jinde jasně vrací true nebo false, mohl bych prostě opravdu tuto sexy a právě něco takového. Takže tady je moje kontrola funkce. Jasně, pokud Boolean vrací hodnotu true nebo false, řekněme, vrátí jej ihned. 

A je tu pár dalších vylepšení Mohl bych sem a tam. Load-- odlehčení, mimochodem, že to dělá. Nic, co by tam dělal. Vzhledem k tomu, všechny paměti PHP a mnoho dalších jazyků je ve skutečnosti řízena pro vás. A tak vzhledem k tomu, C, jak je jste se naučili bolestně, něco, co malloc nebo calloc nebo realloc, musíte osvobodit se. Vše, co fopen, musíte fclose, tak, že zdroje jsou nakonec osvobozeni a nástroje, jako Valgrind ne Všimněte si, a ne si stěžovat, což je dobrá věc pro provoz na nich. 

Ale jistě, musí zde být nějaký háček, že jo? Jinak jsme trochu zbytečný celá parta týdnů. Takže tam je řada důvodů, Proto jsme tak nějak využít této trajektorii, ale tam je trade-off. Jasně, to bylo tematické. 

Takže to, co by mohlo trade-off zde pohybuje od C do PHP? Cítím se, jako všechno vyhrát, pokud jiný než trochu ošklivosti tady nebo tam. Jo. Co je to? 

STUDENT: [neslyšitelné] paměť. DAVID J. Malan: Speed. OK. No, moje rychlost byla docela rychle. Je to tak? Ale rychlost provádění programu? OK, tak to je spravedlivé místo. 

Tak to by se stalo, já předem cued up i moje zkusit řešení, jeden Měl jsem na velké desce bylo řešení try-based, a mám to v tomto adresáři zde. Tak jsem se ve chvíli, můžu jít dál a běží to na Bibli Kinga Jamese, klávesy Enter. A to je snad správný realizace na konci, mi dává čas celkem 0,38 sekund, které jeden poněkud libovolný příklad. 

A když jsem teď jít do toho druhé okno terminálu tady, kde jsem poprvé otevřel gedit, ať mě jít do dnešní code--, které opět je v tomto adresáři here-- a nech mě jít napřed a spustit pravopisu. Takže jen aby bylo jasno, To je verze PHP. Já jsem jen ukazuje horní část zde. 

Takže pokud mám pravopisu z tilda CS50 Pset 5 textů, King James, zadejte. Je to stále rychlejší než psaní je to v C, ale celkový čas je oznámení, 0,93, zatímco my Implementace C na bázi byla 0,38. Takže je to non-triviální rozdíl. 

A to je jen na jednom souboru. Pokud byste měli spustit dva Programy versus velké desky a má spoustu vstupů testovány, by jistě sčítají. A pokud bychom měli ještě větší datové soubory, i to by přidat víc. Takže ano, platit nějaké cenu rychlosti tak skutečně je. Co ještě? Jo? 

STUDENT: Množství paměti RAM. 

DAVID J. Malan: Množství paměti RAM. Tak jsem se nedal jedna sekunda myslel při psaní tohoto PHP verze o tom, jak moc vzpomínka, že jsem pomocí. Jsem zcela odkládá, že pro PHP sama o sobě, a ten, kdo napsal tento program. A to by mohlo být v pořádku, ale když jsem ve skutečnosti opravdu péče o mačkání tolik výkonu z mého programu, nebo z mé webové stránky nebo z jakéhokoli nástroje Stavím, možná PHP, opravdu, není správný jazyk. 

A ve skutečnosti, že je důvod, proč, pro Například, mnoho web servers-- skutečné programy, které sloužit až webovou content-- nejsou napsaný v PHP nebo v jazyce Python nebo Ruby. Jsou napsané, jako budete teď dělat s pset 6, v C, takže můžete zmáčknout každý kousek výkonu z toho a skutečně vykonávat ovládání jemnozrnná nad tím, co je děje pod kapuce a ne jen brát za samozřejmost, některé vyšší Struktura dat na úrovni. 

Zvažte, po tom všem, kdo v PHP implementována že pojem hash table-- je to vlastně více správně nazývá asociativní array-- dělá on nebo ona má nějakou představu, jaký druh vstupů se bude uvedení do konstrukce? Tak samozřejmě není, že jo? Je to obecný nástroj s motocyklem, který je za předpokladu, pro každého, kdo chce ji používat, a tak jistě nelze optimalizovat nakonec přesně to, co chcete dělat. 

Takže doba vývoje trade-offs-- moc liší, výkon se může lišit, složitost nebo využití paměti se může lišit. A tak to, co najdete stále je, že je tu bude jinak nástroje pro obchod. A ve skutečnosti pro super většinu závěrečných prací lidí v této třídě, věřte tomu nebo ne, C nebude být správný jazyk používat. 

A ve skutečnosti, jeden z stánek s jídlem nakonec pro každou třídu, jako je tento je, aby si myslíš, No, co byste měli vytáhnout police, když chcete vyřešit nějaký problém. A skutečně, budeme přes tento most ještě, jak se díváme na více jazyků i za dnešek. 

Takže pojďme přechod nyní snad známější kontext pro použití jazyka, jako je PHP. Je to poněkud běžné použití v příkazového řádku, psaní skriptů jako já, ale je to mnohem, mnohem častější. A byla určena k použití v forma souborů, které obvykle končí v .php-- ale to je ne prerequisite-- které samy vytvářet webový obsah. 

Tak nech mě jít napřed a otevřít několik příklady jsem si připravil předem. A to jsou vlastně jakési pravda příběhy tím, že jedna z prvních věcí Co jsem kdy dělal sám po dokončení CS50 a možná, myslím, CS51 lety je můj spolubydlící a já jsme byli pomáhat spustit prváku intramurálních sportovní program, který v té době, byl v prváku registraci pro různé sportovní vyplněním kus papíru, jak to bylo voláno, chůze přes dvůr k Wigglesworth, a jeho umístěním v některých Pokles dveře Proctorův. A pak on nebo ona by projít je a pak nás vlastně napište ručně které jsme zaznamenaly nějaký sport. 

Tak jasně, příležitost pro zlepšení. V těchto dnech, můžete se obrátit na právě Formuláře Google, ale zpět v den, jsme měli skutečně dosáhnout for-- to nebyla ani tak dlouho ago-- dosáhnout pro programování jazyk, který nebyl PHP. V té době, to bylo něco jako Perl, který vyšel z módy, protože. Ale princip je stejný. 

A já jsem v podstatě se posadil, aby se pokusila k portu jde verze Perl PHP, ale v plném upozornění, nedal jakákoliv myšlenka estetiky ještě ne. Takže tady je webová stránka. Jedná se o soubor. Kdybych přiblížit, jeho zřejmě volal froshim0.php jen proto, že je to naše první Příklad v této sérii. A všimněte si, že má něco, co vypadá být velmi ošklivý HTML formulář, ale forma je zajímavá protože umožňuje mi poskytnout vstup uživatele do prohlížeče. 

Teď naposledy, když jsme měli formu, aby kterého jsme se předložit své parametr dotazu, fronta parametr jak to bylo voláno? Takže Google, ne? Jsme zcela punted na myšlence dělat něco s tímto vstupem. 

Ale dnes, začneme produkovat výstup. A chování budu vidět zde zpočátku je dost triviální. David, budu odškrtávat pohlaví tady, říkají Matthewse zde. Nebudu se kapitán. Jdu na tlačítko Registrovat. A všimněte si, že URL je změnil se zaregistrovat, 0.php, a pak je tu to ošklivé textu zde. Dal jsem ani pomyšlení na formátování tohoto. 

Ale co je zajímavé, že tři hodnoty byly zřejmě prošel v roce. To je PHP druh ekvivalentní printf-- uvidíme, co se to vlastně s názvem v bit-- že právě vytiskne to, co jste prošel do něj. Takže to naznačuje, že tato forma měl přinejmenším tři pole na to, a ty mě viděl zadejte je do. Jeden z nich byl mé jméno, jeden byl pohlaví, jeden byl koleje. A kapitán ani dostat zaslány server, protože jsem neměl zkontrolovat. 

Takže to znamená, že jak se zdá, když zadáte věci na webu, Nejen, že URL někdy change-- někdy ne. Ve skutečnosti, název souboru změněn, ale to, co chybí z URL že jsme viděli minule s firmou Google. Jo? 

STUDENT: Ne query string 

DAVID J. Malan: Není řetězec dotazu. Není otazník něco. Není pochyb o tom mark q rovná kočky, jako jsme to udělali minule. A není to rozhodně není Název otazník rovná David nebo koleji rovná Matthews, Takže tam, kde se to všechno děje? 

No, dovolte mi vrátit se do gedit zde a otevřít první z těchto souborů v mém VHOST, místní hostitel, veřejné adresář tady a jít do froshim0. Tak to dopadá, že téměř všechny této stránce je jen HTML. A to může být neznámé pro vás, ale brzy bude víc s pset 6 a pset 7 a pset 8. Ale to je jen HTML stránky. 

A zajímavé věci Zdá se, že tady. Formulář značka, jejíž činnost atribut má hodnotu 0 registru. To je důvod, proč, když jsem se předložit to, že jde do tohoto souboru. Ale metoda je jiná today-- příspěvek. Tak to dopadá, že je alespoň dvě metody na webu používají odeslat informace z prohlížeče na server. Get říká v URL. Post říká jinde. A kdy a proč by mohl si skutečně chtějí webové stránky použít příspěvek pak místo ze si jen intuitivně? Jakékoliv webové stránky. Jaké údaje by měly být těsně dedukcí nyní poštou na rozdíl dostat, když jsme viděli dva rozdíly? STUDENT: [neslyšitelné] zajistěte. DAVID J. Malan: Pokud chcete, něco, co se v bezpečí. Takže můžete zadat heslo na webové stránky, kreditní karty na webových stránkách by druh těchto suboptimální v případě, že prohlížeč dal, že hodnota v URL. Proč? Vidíte to, což není Zdá se, že tak velký problém, ale šance jsou si dost často chodit daleko od svého počítače nebo použití počítače laboratoře, a tak někdo jiného, ​​nebo dokonce spolubydlící mohl snadno jít a vidět že soukromé informace. Když odešlete e-mail přes internet, budete pravděpodobně Nechceme, aby údaje, které končí v URL také. A tak je tu řada důvodů, Proto bychom mohli chtít, aby to tady. A photos-- pravdu, nemohu ani zcela Představte si, jak by se na grafiku, jako JPEG, a dát ho do URL. Dalo by se to udělat. Je tu způsoby kódování, ale je to prostě není jednoduché takhle. 

Zaregistrujte 0 je vlastně velmi nezaujatý. Vše, co to říká, že je to doslova. Tiskne se v některých HTML tagy následující. Mám tag PHP zde vnořená uvnitř předem značky. "Pre" prostě znamená, pre-formátovaný text, mono-rozložený, jako psací stroj. 

Printr je tisk rekurzivní funkce. A pak je tu to Zajímavá věc zde. A vrátíme se k tomu protože tam je jiné, ale znak dolaru podtržítko Příspěvek se zdá být proměnné v PHP, ve kterém něco odeslání z prohlížeče na server je uložena pro vás. A uvidíme, jak se dostat na že informace zanedlouho. 

Ale nejdřív, vraťme se k mírně odlišný příklad. Chystáte se do register-- nebo spíše froshims1.php, který vypadá trochu jinak. Vzal jsem si trochu víc úsilí s formátováním, i když je to stále dost ošklivý. Ale budu pokračovat a zadejte "Davide" teď. Male. Budeme kontrolovat "kapitána" tentokrát. Uděláme Matthewse. A zaregistrujte se. 

A tentokrát to říká, hm, opravdu ne. Dobře, takže to, co je zaregistrovat jeden? Nech mě jít do otevřeného registru 1 a- hm. V pořádku, takže to je zajímavé, a to je odrazovým můstkem nyní k další zajímavé programy. 

Všimněte si, v horní části tohoto souboru má PHP tag stejně jako některé komentáře. A to jsou pro tuto chvíli, rozptýlení tak ať to prostě zbavit těchto připomínek stejně, jako by to v C. A tvrdím, tento kus kódu s komentáři že tento kód je ověřování podání. 

No, ukázalo se, že proměnné jako znak dolaru zdůraznit příspěvek je volal flash globals. Jsou jako ty speciální globální proměnné že jsou jen omni-v současné době k dispozici v rámci programu. A můžete použít hranatá závorka notaci index do nich není pomocí čísel jako 0, 1, 2, 3, ale skutečná slova. 

Takže si můžete myslet znak dolaru zdůrazňují příspěvek jako jakési hash tabulky že byste mohli projít klíč do, na vyhledávání slovo, v hranatých závorkách, a to bude vám zpět hodnota, kterou uživatel skutečně poskytnuta. PHP má funkci nazývá prázdná, že právě říká, že ano, nebo ne, to proměnná je prázdná, nebo ne. Máme tyto dvojité tyče, což prostě znamená, nebo, jako v C. 

Takže ve skutečnosti, tato linka 4 je právě říká, v případě, že uživatel nedal jméno nebo nedal pohlaví nebo ne dát koleji, jděte do toho a přesměrovat ho nebo ji prostřednictvím této linky zde. Tak tohle je trochu tajemný, ale to jen znamená doslovně zpět na toto místo, tak to plaví uživatele zpět do místa, kde on nebo ona pochází. Ale je to trochu nevkusný v tom, že jsem tvrdě kódované to. 

Ale co když to, pokud podmínka nelze vyhodnotit na hodnotu true? Co v případě, že uživatel se mi dát jeho nebo její jméno a kolej a pohlaví? Že pokud podmínka není bude hodnotit na hodnotu true, takže si nemyslím, narazila na výstupu v řádku 7. Takže co se stane? A to je to, co je Zajímavé informace o PHP. 

Můžete spadnout do a ven režimu PHP, abych tak řekl. Pokud chcete nějaký kód spustit, můžete otevřít a zavřít tag PHP a dal kódu tam, jako bych tu udělal. Jakmile zavřete tag PHP server se právě chystá vyplivnout co jste tam dal. A skutečně, toto byla část originální design PHP, pro lepší horší, byla tato vzájemným kódu a značení jazyk. A uvidíme, že právě tato rychle přejde do nepořádku. A tak budeme dělat lépe než v konečném důsledku, ale jen Všimněte si, s jakou lehkostí Jsem skutečně schopni provést nějakou logiku. 

Ale ještě trochu nezaujatý. Pojďme otevřít verzi dva Frosh IM, které zřejmě podřizuje register2.php. Takže tento soubor to vlastně děje vypadat téměř stejné. Chystám se jít na Frosh IM 2. Ale v Frosh IM 2, uvidíme, co se stane. 

David, klepněte na příslušný přepínač, as se to jmenuje; Matthews, ne kapitán. Registrovat. Ty jsou registrovány. Ne tak docela. Ale počkejte, jen jsme udělali že příklad, ne my? Dobře, stand by. Uděláme na tři. Je zřejmé, něco to o se stane s Gmail. Dostaneme se tam. 

Takže Frosh IM 3 vypadá takto. Neliší. Ale když jsem to David, muž, Matthews, a registrovat, toto třetí a poslední verze nároky, prostě ti, jsou registrovány ve skutečnosti. To je trochu nevýznamné. Ale tvrdím, s tím Třetí a poslední verze Nyní jsem znovu přesně to, co my spolubydlící a já postaven za Frosh IM Program lety. A to bylo jednoduché. Nebylo databáze, no Excel. Ale mnohem důležitější je, nebylo více papíru protože to, co jsme dělali s tímto programem bylo ve skutečnosti e-mailem Proctor, který byl předtím příjem tyto věci prostřednictvím formulářů. 

A zřejmě jsme naprogramovány na tuto takovým způsobem, že když se někdo registruje, Účet e-maily John Harvardu proctor-- nebo se v tomto případě, John Harvard-- s následujícími text-- "Tento člověk prostě registrován." Jmenuje se David, kapitán je prázdná; pohlaví, samčí; a koleji, Matthews. 

Takže to, co se tam stalo? No, soubor v otázce zde je zřejmě register3.php. A když jsem to otevřít, uvidíte jak moc kódu, jako je tento a také, upřímně řečeno, nejistota systému, jako je e-mailem. Právě jsem skutečně předstíral, že se John Harvard následujícím způsobem. 

Mám php tag otevřít top, který Jen říká, že tady je nějaký PHP kód. Tady dole, ukazuje se, že jsou knihovny v PHP. Vy prostě potřebujete Včetně záhlaví soubory jako moc. Získáte více s kuchyňský dřez, abych tak řekl. 

Ale tentokrát v řádku 4, mám Chcete odborné knihovně s názvem PHP mailer, což je něco, co vás můžete nainstalovat zdarma v mnoha systémech. Tady dole jsem potvrzení podání jen kontrolou se uživatel dá mi jméno, pohlaví a koleji. A pokud ano, jděte do toho a instanci mailer. 

Můžete myslet na to, jak je řádek kódu, který právě přiděluje. Je to jako malloc, ale je to trochu víc sexy v tom, že jste zmínil nejen malloc a některé generické číslo. Říkáte, dej mi jeden z nich, dej mi nový jeden z nich. 

A pokud jste naprogramován v Java nebo C ++ a dalších jazyků, jste mohli vidět to. Ale krátký na to, je-li neznámé, tento řádek uvádí do dolaru mailem speciální struct s názvem objekt, který má vestavěný-in e-mail funkčnost. A ve skutečnosti, všimněte si, a podobné syntaxe. 

To není ukazatel, samo o sobě. PHP právě používá stejnou syntaxi. Tento řádek říká použití SMTP-- Simple Mail Transfer Protokol, který je právě protokol používaný pro odesílání pošty. To je určující použití Harvard je SMTP server, který je někde tady na akademické půdě. 

To je to, co říká, TCP číslo portu mluvit, a já jsem zjistil, že ze strany googling nebo dotazem na help desk. A pak, protože Harvard používá některé Bezpečnostní systém na poštovním server-- alespoň k šifrování komunikace mezi vámi a ním, i když někdo může poslat to-- Jdu zapnout protokolu TLS pro udržení tohoto bezpečí. 

Ale to je místo, kde se věci trochu děsivé. Mohu jen svévolně říci, že jsem jharvard, a mohu jen svévolně e-mail, abych tady. A pak jsem si zadat předmět s tímto zde. 

A to jen vypadá ošklivě, ale je to jen banda zřetězení. Ukázalo se, že PHP má super užitečný symbol, jako některé jazyky, operátor tečka, která se právě doslova zřetězuje řetězec za řetězec po řetězci, a vy nemusíte malloc nebo obrázku z celkové délky řetězce. Vy to prostě udělat. A skutečně, protože jsem zřetězení ve všech těchto věcech s těmito body, To je důvod, proč jsem email poslal podíval, jak to udělal. 

A pak konečně tady, jsem odesílání e-mailů. Takže pokud je to falešný, Já jen, že umřu, což je funkce, která jen tiskne na obrazovce některé chybové zprávy. Ale to je, ve skutečnosti, volání funkce odeslání. V opačném případě, je-li toto vše selže, je zde přesměruje mě zpátky. 

A proč vidím, že Jsem registrovaný ve skutečnosti? No, to se stalo tady. Tak jsem se, aby to se k z několika důvodů. 

Jeden z nich, je to přesně tak, jak, pokud budete stavět některé webové stránky závěrečného projektu nebo v reálném světě, to je jak odesílat e-mailové upomínky pro své zákazníky a vaši odběratelé. To je, jak se Poslat heslo upomínky. To je, jak posílat lidi zprávy že mají novou Facebook Zpráva čeká, nebo něco takového. 

Ale také mluví do skutečnost, že by to mohlo byly velmi dobře od Davin nebo někdo jiný. A já říkám, tento druh s úsměvem, protože jsem zcela jist, co se děje prostřednictvím několik z vašich myslích v tomto bodě. Ale to je jeden z těch, dělat jako já říkají, ne jako já druh věcí, protože je triviální falšovat e-maily, jako je tento. Ale jak můžete vidět nebo číst v Crimson, poslední dobou je to také docela triviální pro lidi dohledat je zpět do jisté původu. A zeptejte se mě nějaký čas, možná na CS50 oběd, jak jsem se poprvé mám velmi úzce seznámeni téměř na ed palubě mnoho let dávno, když jsem zjistil, jak internet funguje. Takže v každém case-- mírně Po vydání desky udělal. 

Takže v každém případě, že je celá parta super globals, jak se jim říká tady, z nichž jedna jsme saw-- znak dolaru podtržítko místo. K dispozici je protějšek s názvem GET, což je místo, kde věci z URL skončí děje. A je tu celá banda dalších, too-- relace a serveru a cookie. Vrátíme se k cookie někdy jindy, ale relace je docela fajn protože právě now-- až do now-- všechno, co jsme udělali s webovým prohlížečem je trochu bez státní příslušnosti, abych tak řekl. I klikněte kolem, přístup soubory na serveru, něco se děje na obrazovce, ale pak se spojení uzavře. Internet Explorer nebo Icon Firefox dotočí a vidíte jen to, co které webová stránka obsahuje. 

Takže HTTP je bez státní příslušnosti v tom, že jakmile je spojení, dostane nějaká data, to je vše. Žádné další spojení, na rozdíl od Skype, Na rozdíl od FaceTime, na rozdíl od GChat, který udržuje konstantní připojení k serveru. Web je v podstatě odpojen, když budeme vidět, než dlouho, jak můžeme simulovat věci jako Facebook chat a GChat, které udržují illusion-- nebo vlastně dělat udržet konstantní připojení pomocí více moderní technologie. 

Ale když jsem se jít do, řekněme, counter.php, To je další jednoduchý příklad, jak uvidíme, že v současné době si myslí, že Navštívil jsem stránky nulovou dobu. Ale když jsem prostě znovu načíst stránku, to nějak ví, že jsem tady předtím. Kdybych znovu načíst, je ví, že jsem tady předtím. A znovu a znovu a znovu a znovu. 

Takže tam je nějaký plus-plussing děje, ale oznámení maličkost točí někdy tak krátkodobě až nahoře a pak se odpojí, takže to není, že bych se konstantní Připojení k mému přístroji. No, když jdu do counter.php, Všimněte si, jak je to jednoduché. Poprvé jsem volat tento zvláštní funkce, které jsme brzy začnete samozřejmost volal spuštění relace. Spusťte relaci. 

A relace dále jen bude kbelík, jako nakupování vozík, ve kterém si můžete dát hodnoty a trochu věřit jako programátor že budeš tady, až se že uživatel přijde back-- druhý později, o hodinu později, a to i o rok později, tak dlouho, jak on nebo ona není jasné, jejich cookies, jak budeme nakonec vidět. A teď už jen mít pokud podmínka zde. Takže pokud v následujícím klíči, volal počítadlo je nastaveno v v tomto super global-- tento hash stůl, pokud will-- názvem relace, pak jděte do toho a chytit hodnota z session-- think to jako nakupování cart-- a uložte jej v dočasné proměnné nazvané čítač. 

V opačném případě, pokud je to hodnota čítače se není nastaven na tzv nákupního košíku, jen inicializovat na 0. Konečně, tady dole, jít a dát zpět do nákupních vozíků nebo zasedání hodnota čítače +1. Tak to dopadá, že tato speciální kontejner here-- který, opět, je jedním z nich spojen pole, pole, které můžete index do slov místo numbers-- přetrvává i poté, co uživatel zmizí. Opět platí, že půjdu zpět na stránku nyní. Bylo to minutu nebo tak. Ale to si pamatuje, že jsem zde bylo 19 krát předtím. To je můj 20. návštěva. 

A tak to bude klíčem k provádění jakékoliv webové stránky, které si pamatuje že jste přihlášeni, že jste dal něco doslovný do vašeho nákupního košíku koupit, nebo že máte některé Počet zpráv probíhá. Kdykoliv budete chtít zapamatovat si informace, uvidíme, že PHP, stejně jako několik jiných jazyků, nám poskytuje iluzi státu i když, jak uvidíte v pset 6, jak jste odesílání HTTP požadavků z klienta na server, to je vše. Jakmile se dostanete zpět, že odpověď, nic víc vrací ze serveru ve výchozím nastavení. Ale uvidíme, jak obejít to. 

No tak, pojďme se pokusit vyčistit to se trochu. Viděli jsme několik různých příkladech. Jo, a jak stranou, pro ty, kteří znají nebo neznají, z důvodu, že Frosh IM příklad šel z pohledu opravdu ošklivý dobře slightly--, stále ugly-- mírně méně ošklivá i když stále ošklivá Je to proto, podíváme-li se na zdrojový kód zde Ukazuje se, že to mám na samém začátku souboru. 

Ukazuje se, že bootstrap je jedním z mnoha volně dostupné knihovny venku že existují ne pro programovací jazyky vždy, ale pro CSS nebo JavaScript nebo HTML nebo libovolný počet jazyků. 

A tito lidé here-- původně vyšel z Twitter-- prostě celá parta stylů. Je to obrovský soubor zde, že někdo psal, nebo někdo to psal, v průběhu času, že určuje barvy a formátování a kdoví co ještě, takže mohu druh půjčit jejich syntaxe a nebudou se muset přijít na to, jak vyložit svůj formulář. To je také minified tak, že počítač může pochopit to, ale ne nutně člověk. Tak to je právě důvod, proč stylizace tam změnilo. 

Ale pojďme teď udělat lépe pokud jde o design, protože pokud zůstaneme dole tato cesta příliš dlouhá, náš kód to bude dostat chaotický a Messier. Tak se pojďme zaměřit na tyto příklady zde. Poslední pro dnešek. 

Takže tady je super jednoduché verze 1.0 internetových stránek CS50 je. Má pouze odkazy na přednášky a učební osnovy, a to pomocí tohoto výčtu tag-- značku UL, že jsme použili naposledy. A je-li ve skutečnosti, když jsem otevřít Zobrazit zdrojový kód stránky, uvidíte, že to je opravdu, ale opravdu jednoduchý HTML. A ve skutečnosti, i když je to soubor PHP pod kapotou, je to stále jen plivat provádět pouze HTML pro tuto chvíli. 

Takže když jsem klikněte na přednáškách, vidíme to stalo. A když jsem klikněte na týden nula, to vidíme. A když jsem klikněte na Středa, vidíme to. A to zřejmě byl PDF snímky z onoho dne. Všechno, co jsem udělal, je spojení s kotva tag na tuto adresu URL zde. 

Takže je to jen říci, je to docela jednoduchá verze stránek CS50 je. Pojďme se podívat, jak to provést. Pokud jdu do adresáře mvc0, uvidíme několik souborů. Jedním z nich je README, takže pokud Částečně je to příliš rychle, stačí strčit kolem klidnější později. A upozornění zde je soubor index.php. Ukazuje se, že v případě, Vy sám, člověk, nezadáte konečný název URL, webový server obvykle vyvozuje nějaké výchozí název pro Vás. Index tečka něco je obecně nastavena jako výchozí. 

Takže to je důvod, proč před chvílí když jsem navštívil tuto adresu URL zde žádný soubor, žádný soubor rozšíření, žádné období v URL. Je to prostě věděl, že nějak magicky hledat index.php. Je to jen konvence. By se dalo nazvat cokoliv. 

Takže když jsem teď jít do index.php, uvidíte že indeed-- pojďme zbavit komentářů tady, protože je to opravdu nic zajímavého na to-- To je jen pevný kódované HTML. Tak to je v souladu, když se mé žaloby že můžete mísit HTML a PHP. Neexistuje žádný skutečný programování logiky zde. 

A ostatní soubory jsou docela hodně stejně nezajímavé. Je to jen pevně týden jeden zde týden jeden metr a týden jeden watt, na pondělí a ve středu. A pak když jsem otevřít týden nula, Všimněte si, že je to téměř totožné. 

A to je něco jako klíčové stánek s jídlem. Všimněte si, jak je to nadbytečné. Tyto soubory stěží změnit, a přesto jsem vytáhl jednu z těchto copy / paste pracovních míst kde jsem vzal jednu file-- pravděpodobně v týdnu zero-- zkopírovali když jeden týden obešel, a vylepšil několik hodnot. Měli bychom být schopni dělat lépe než tohle. 

Takže se vraťme do MVC a jít do verze jedna. A všimněte si mám několik souborů, protože to, co bylo společné pro všechny tyto soubory moment ago-- pokud se vrátím k verzi 0, vraťme se do indexu, a jen postulate-- Jednou jsem se zbavit comments-- jaká část této stránky Zřejmě je v každém z mých souborů? Stačí zavolat na to. Které řádky jsou duplikovány pravděpodobně přes všechny tyto stránky? Jo? 

STUDENT: [neslyšitelné]. 

DAVID J. Malan: 1 až 9. Jo, určitě. 1 až 9, snad s výjimkou 8 změní trochu z následujících důvodů CS50 stává přednášky nebo týden nula, nebo tak něco. Ale téměř totožné. Takže tohle všechno je jen druh zkopírovat a vložit. A je tu pár jiné linky Neumím si z toho jsou pravděpodobně stejné ve všech souborů. 

STUDENT: 12 a 13. DAVID J. Malan: Jo. Jistě, 12, 13, 14 a pravděpodobně jen proto, že se zajímavé věci se děje na tratích 11 a 10, takže by se mohlo zdát. Takže pojďme se podívat na verzi 1, který se snaží zlepšit to. Ve verzi 1 tohoto MVC example-- potkáme vysvětlit, co mvc prostředky v moment-- když půjdu do indexu, je to druh teď vypadá trochu matoucí. Není to tak jednoduché jako dřív. 

Ale jakmile začnete pozorně si ji přečtěte, je to velice jednoduché, co to dělá. Zřejmě řádek 1 a linka 8 byly nahrazeny všechny věci, které jste právě identified-- i když jen na správnou míru, Nechal jsem ULS tam jen v případě, že některé dnů neměl seznam věcí. A to vyžaduje, je něco jako libry zahrnout do C. Tato volba zkopíruje a pasty Obsah účinně tady do tohoto souboru. 

Takže header.php, jako vy lze usoudit z jeho názvu, bude záhlaví stránky. Je to tady trochu kopie. Má jen odshora, ale už není obsah níže. 

A pokud se podívám na zápatí mezitím, který byl jiný soubor mentioned-- tohle je ještě méně zajímavé, ale zase je to běžné na všechno. Tak tohle je zápatí. Toto je záhlaví. Jedná se o soubor, který je mění, tak proč ne se snaží vytknout commonality s těmito dvěma linkami tady? 

Ale můžeme vyčistit to se trochu dál. Chystám se jít dopředu a otevřít verze dvě, kde uvidíme, že je tu nový soubor, helpers.php. Uvidíme, co to je za chvíli. Pojďme do indexu, jak vstupní bod jako předtím. 

A teď si všimnout jsem vyžadující helpers.php, ne záhlaví nebo zápatí. Ale pomocníci je něco jako helpers.c a helpers.h z pset 2 nebo pset 3 dávno, když jste vlastně se hledat a najít pro tuto pset, a vy jste museli všechny své kód pro třídění a vyhledávání v samostatném souboru. To je to, co se tady děje. 

A teď řádek 3 vypadá trochu jinak. A to je jen jeden řádek. Aby to bylo ještě více jasné, mohl jsem jen to, že se tento stylisticky konzistentní se vším jsme udělali. Ale ve skutečnosti to není změně funkce. Je to jen jeden řádek skutečného kódu. 

Zdá se, že je tu funkce někam volal činí záhlaví, a to je místo, kde se věci pěkně silný. Všimněte si, že uvnitř jeho závorkách Je to, co jiný kus syntaxe? Je to asi trochu těžké říci, ale Všimněte si there's-- Dám nějaký bílý prostor. K dispozici je hranaté závorky. 

A hranaté závorky jsme viděli před trochu v souvislosti s asociativních polí, které jsou, opět, stejně jako stoly mřížky. A pokud si myslíte, že teď na C, pořadí argumentů do funkce musí být vždy stejná. Musíte si uvědomit, co se objednat je-- X, Y, Z nebo Z, Y, x-- a vy budete muset vždy poskytnout jim ve stejném pořadí, nebo je vyhledat Pokud jste zapomněli. 

Ale to se zdá být chytrý způsob, předávání libovolnou hodnotu klíče páry, přičemž název je název argumentu, v tomto případě a CS50 je jeho hodnota. A skutečnost, že jsem Tyto hranaté závorky zde znamená, že jsem mohl také projít do něčeho jako týden je 1 nebo 0, nebo 2 nebo 3. Proto jsme parametrizovat Tato funkce tak, aby že to může trvat několik vstupů, ale teď je to jen jeden. 

Pokud bych teď jít do helpers.php, Všimněte si, co to dělá. To je trochu nové funkce, ale teď jen se na víře, že je to syntax, se kterou definovat funkci v PHP. Doslova říkají funkce. Nezadáte návrat typu, a to v souladu s proměnnou detail dříve kde nemáte opravdu silně typu. 

To jen určuje, to, že ve výchozím nastavení tato vezme asociativní pole jako argument. A víte co? V případě, že uživatel neprojde jeden v předpokládejme, že výchozí hodnotu. 

To je funkce, která C nemá pro nás, což je příjemné, protože teď údaje, i když nedávají to nic, bude pole, ale prázdná. A jako stranou, extrakt jen dělá něco funky kde to má všechny klíče z toho asociativní pole, všechny ty věci, byste mohli dát v hranatých závorkách, a vytváří proměnné z nich takže můžeme mít přístup nakonec na ně footet.php a header.php. To je trochu abstraktní, tak mi dovolte upozornit na to. 

V index.php, všimněte si, že jsem projde v hodnotě páru klíčů vlastnictví s hodnotou CS50. Pokud se teď podíváte na helpers.php, Všimněte si, že RenderHeader je extrahování, že údaje, které jsem procházejícího , a pak vyžaduje header.php. To, co jsem udělal, je trochu chudý člověk je Provádění nyní z následujících. 

Pokud otevřu header.php, Všimněte si, že jsem už těžko kódované slovo CS50 v tomto hlavičkovém souboru. Dal jsem to sice ukrutně s názvem funkce, speciální znaky HTML, tam. Povšimněme si ale, co jsem udělal. Mám otevřený HTML. Pak mám otevřenou hlavu a otevřené titul. 

A pak uvnitř názvu je otevřený a zavřít značky, mám trochu PHP kódu. A to je pěkné, ale syntaxe, což prostě znamená, echo ven. To doslova znamená tohle-- echo following-- ale to je svůdnější psát. Echo z titulu která byla předána v. 

Ale co si myslíte, že HTML speciální char je o, zvláště pokud máte některé předchozí HTML zkušenost? Jaké znaky by mohly být nebezpečné předat na stránku kam dynamicky generovat webové stránky s kódem, jako je tento? Nech mě jít do tohoto souboru, verze dva, a uvidíme, jestli nemůžu vyvolat to. 

Verze dvě je to. A všimněte si vše je v pořádku, funguje dobře. Ale předpokládám, že jdu do index.php a I upřesnil, že název mé stránky není CS50. Je otevřena držák skript upozornění hello world, blízko jeden citát, v blízkosti závorka, středník, otevřený držák, lomítko skript. 

Script, jak jsme to nakonec vidět, je tag které můžete použít k použití jiného programovací jazyk nazvaný JavaScript uvnitř webové stránky. A teď si všimnout tu logiku. Zde je klíčovým nazývá titulu. Zde je, že je to šílené dlouhé hodnoty nyní. 

Ale když jdu do pomocníků Page- nebo spíše, záhlaví stránky, Volám tuto funkci na tento titul jako první. Takže když jsem teď tuto stránku znovu načíst, I vidět, který vypadá směšně, ale je to bezpečné. Je to prostě vypadá hloupě. 

Předpokládejme však, že místo toho, Zapomněl jsem, že to. A má slova, nenulové číslo z vás se zapomenout, jak to udělat a budete mít nějaký pracovitý student nebo přítel přijde pro vás na CS50 veletrhu nebo anonymně v noci šťourat na vašich webových stránkách a v podstatě injekční kód unbeknownst vám do vašich stránek nějak. 

Protože když jsem prostě plivat z titulu zde a titul there-- dobře, pokud titul doslovně vypadá takto a PHP jako jazyk, který může plivat z jiných jazyků textu, to je doslova děje nahradit tuto značku, Samozřejmě, to, co jsem dal jinde. 

Takže když jsem teď jít sem a znovu po rozepnul ty bezpečnostní mechanismy, teď mám ahoj svět zde. Teď to není vše tak velký řešit, ale můžete udělat něco trochu nebezpečný tu, jako by to další tags-- jak uvidíme, až budeme trávit více času JavaScript-- jako umístění dot href dostane, citace, konec citátu, HTTP business.com, ale opak toho z druhého dne. A teď můžete navodit web strana skutečně jít okamžitě na této webové stránce zde. 

A vlastně, já nechci dokonce jít do business.com protože nechci vědět, co to je. Ale i to, spustí kód být aplikován na této stránce. Takže je to jen říci, že i když představujeme výborný brzy na některých těchto složitějších struktur, to vše ke konci roku ujistěte se, že váš kód není využitelný. 

Takže teď třetí verze zde. Začíná to být trochu obsáhlejší. Já jsem opravdu like-- anální strana o mně byl už trochu naštvaný Skutečnost, že jsem se funkce nazývá RenderHeader a RenderFooter že jsou téměř totožné. Tak mě napadlo, proč ne I parametrizaci těchto funkcí na jen jeden volal činí, mají trvat i druhý argument jako jméno šablony, konečný na render-- buď záhlaví nebo zápatí? A potom případně, pokud chci předat v některých párů klíčových hodnot jako já o titul pro header ale ne pro zápatí, Nemohl jsem to udělat. 

A tak teď, když půjdu do helpers.php, je to trochu složitější. A já budu mávat své ruce na detaily, ale je to jen jedna funkce. Takže je to krok směrem k lepšímu designu. 

Můžeme si vzít ještě o krok dál. Pokud jdu do své čtvrté verze toho všimnete nyní že dělám něco ještě trochu tajemný. A vím, že to je Mnoho absorbovat najednou, ale my jsme tak nějak čištění věci. Teď dávám své pomocníky soubor do složky s názvem includes-- jen libovolná jméno, kde chci, aby věci že chci include-- a pak Zbytek je stejný. 

Ale když se podívám teď gedit, Všimněte si, že jsem se dostal zbavit ze všech těch ostatních souborů a jsem přesunula například na zde. A pak se v šablonách, Mám to tady taky. A tak to je vše nyní k krok použití mnohem lepší návrhový vzor. A my jsme se velmi rychle chystá odejít z výchozího funkce PHP, které jsme zde začali s, kde stačí mísit PHP, a vaše HTML, CSS a vaše, a vy prostě vyplivnout a jdete o vaší cestě. Není to bude velmi udržovatelný. Stejně jako v C, jsme začali používat více souborů a více funkcí a factoring věci, že z. Uděláme tu totéž. A ve skutečnosti, v páté a poslední verze zde, jsem udělal jednu věc. Můžete dokonce použít dot dot, který znovu, je jen nadřazený adresář. Chcete-li být ještě větší bezpečnost při vědomí, protože když se podívám na poslech zde pátý a poslední verze, oznámení že mám jeden adresář s názvem zde veřejnost, a pak na stejné úrovni, abych tak řekl, Mám zahrnuje a šablony a pak, že textový soubor readme. 

A důvod, proč jsem se strukturovanou to rád tohle-- a tolik web hostitelé, zejména těch, které 5dolar měsíc ty nebo ty 10 dolarů měsíc, pokud jste někdy měl jeden z nich services-- co tak mnohé z nich je prostě očekávají, že budete vypsat všechny vaše soubory do jednoho adresáře, jako jsme to udělali už s Tento první příklad. 

Ale jakmile začnete stavět více sofistikované stránky, které právě uložit Data vám záleží, a soubory, které jste péče o, vlastně organizovat věci správně a větší bezpečnost vědomí v mysli může začneme se bránit proti všem přátelům že máte buď nebo mimo této třídy, který, Jakmile začnete dělat programy sami na webu, se chystáte začít výběrem na vás a na nich. 

A tak se podíváme nakonec se na tento návrh. To je jen obrázek který znázorňuje následující. Chystáme se dát všechny naše programování logiky v jednom nebo více souborů, a budeme jen začít volání těchto řadičů. To je místo, kde mozek Naše webové stránky ve skutečnosti jsou. Pak jedeme do mají výhled a výhled jsou tak jednoduché, jak jen samostatné files-- tzv šablony, často. Oni prostě mají estetika mé stránce, to, co chci stránka vypadat like-- barvy a rozvržení a pozice všechny proměnné. 

A pak ještě zajímavější že budeme nakonec dostat je model, který se bude jen slovo, které plácnout na jiných technologiích že přinášíme do obrázek, stejně jako aktuální databází, takže když budete chtít uložit informace, nemusíte jen poslat e-mail do svého prokuristy nebo sami sobě, skutečně uložit do databáze použít jiný jazyk, známý jako SQL. A tak jsme si dnes tu nechat a vyzvednout s tím ve středu a zavést databází poté. 

[Přehrávání hudby]