[MUSIC JOC] 

DAVID J. MALAN: În regulă. Acest lucru este CS50. Acesta este începutul săptămânii opt. Și vă amintiți că am rămas Ultima dată se uită la o nouă limbă cu totul. De fapt, una care e destul de ușor și nu e chiar un limbaj de programare. Este un limbaj de marcare care ne permite structura de fapt și de a face pagini web. Iar atunci când altceva în legătură cu asta: sau în curând vei face, dacă nu ați făcut deja. Am de gând să utilizeze Cascading Foi de stil, sau CSS, care este un alt tip de limbaj cu proprietăți și valori care va să ne facem lucrurile se vrea a schimba culoarea și schimba poziția iar aceste tipuri de trucuri. Dar astăzi și mai departe, vom începe să se concentreze pe limbi mai puternice, limbaje de programare actuale, cum ar fi PHP. 

Deci, PHP a fost în jur de ceva timp. Și, după cum veți vedea, ea a fost proiectat în primul rând, timpuriu pentru real utilizați în dezvoltare web și de fapt, generatoare de pagini web. Deci, ce tipuri de Caracteristici face o limbă nevoie pentru a face web Pagini dinamic cu ea? 

Cu alte cuvinte, dacă vrei să genereze dynamically-- conținut cum ar fi Facebook Newsfeed, care se schimbă în mod constant, sau mesaje instant care pop-up din timp a time-- ca ceea ce este piesă cheie de funcționalitate aveți nevoie într-un limbaj de programare care le-ar permite în mod dinamic imprima informații noi la ecran? 

STUDENT: Cod. DAVID J. MALAN: Cod. OK. Vom lua asta. Un pic mai precis. Adică, am putea face acest lucru cu C, sincer. Ar fi o durere în gât. Dar-- este acest angajament? 

STUDENT: Da. Variabile, poate? DAVID J. MALAN: Variabile. OK, sigur. Variabile ne poate ajuta cu siguranță. Și chiar ceva mai simplu. L-am folosit în prima Programul de prima zi când de fapt ne-a spus "Hello World". 

STUDENT: Print. 

DAVID J. MALAN: Print, nu? Imprimare, sau printf în lume de C. Deci tot acest timp, am avut la noastre de eliminare a language-- C, în particular-- și chiar Scratch pentru care contează că poate genera șiruri de text. 

Ei bine, în cazul în HTML, așa cum am văzut săptămâna trecută, este doar o grămadă de siruri de caractere textului deși cu paranteze deschise și închise paranteze și un fel de rimă și un motiv în spatele ei, Ei bine, atunci am putea într-adevăr începe generatoare de pagini web, fie manual prin tastarea ei în gedit sau în Microsoft Word, pentru că matter-- avem nevoie doar de un editor de text. 

Sau am putea scrie cod, la sugestia mai devreme, care ne-ar permite genera dinamic HTML, și asta e ceea ce vom pentru a începe să faci cu PHP și în cele din urmă chiar și cu o limbaj numit JavaScript, Este folosiți un limbaj pentru a genera altul. Și într-adevăr, aceasta este ceea ce Facebook si multe, multe alte site-uri face să de fapt dinamic afișa informații noi pentru tine. 

Deci, haideți să începem cu asta: o line în căutarea criptic, dar una care este de fapt destul de puternic. Până acum, am fost folosind C, care este un limbaj compilat. Și doar un recap-- rapid o compilat Limba are ce caracteristic? În mod evident, aveți nevoie pentru a compila ea, dar ce înseamnă asta? Da? 

STUDENT: Acesta trebuie să fie asamblate în cod mașină. 

DAVID J. MALAN: OK. Acesta trebuie să fie asamblate în cod mașină. Deci, luați codul sursă, care este un fel de limba engleză-ca. Poti converti care să nivel inferior ceva, care este în cele din urmă numit obiect code-- lui 0 și 1. Și e acele 0 și 1, conform căreia un procesor, cum ar fi cele realizate de Intel, de fapt, înțeleg. 

Acum, PHP si Python și Ruby și JavaScript și ciorchini de alte limbi nu sunt elaborate Limbi dar interpretate de limbi, ceea ce înseamnă că doar le scrieți și apoi nu le transforma în 0 și 1 a lui. Tu în schimb oferă doar atunci ca Intrare la programul altcuiva, numit un interpret. Și că persoane program a fost conceput pentru a înțelege ceea ce fiecare și fiecare simbol în Python sau PHP sau Ruby sau orice număr de alte limbi înseamnă. 

Și atunci tot ce avem nevoie este ceva de genul asta. Deci, în fapt, am de gând să du-te pe la aparatul aici, doar în orice fereastră vechi, și noi suntem O să mergeți mai departe și deschis un fișier numit, spune, salut. Acum anterior, s-ar putea fi salvat acest lucru chiar și cu o extensie de fișier, dar am de gând să fac ceva mai simplu aici. Am de gând să mergeți mai departe și să înceapă acest fișier cu acest sintaxă criptic. Așa că "utilizator, bin, env, pentru mediu, php ". 

Acest lucru este pur și simplu o linie de cod care este O să spuneți sistemul meu de operare, du-te găsi în reprezentanța locală mediu, indiferent că este, ori de câte ori PHP este-- interpreter-- și mergeți mai departe și de a folosi ca interpret de a interpreta codul de mai jos. Acum, aceasta este un fel de o caracteristică urât de PHP. Dar în această limbă, orice dată când scrie cod PHP, aveți nevoie pentru a avea una dintre aceste urât Tag-uri PHP care delimitează începutul a ta code-- <? php. 

Dar mai jos de aici, eu pot face acum ceva destul de simplu, cum ar fi printf salut virgulă lume backslash n close citat, aproape paranteze. Și apoi doar pentru bun măsură, am de gând a merge mai departe și de aproape tag-ul meu php aici astfel încât totul arată frumos destul de imprimat. 

Și, de îndată ce am faceți clic pe Salvare, gedit este suficient de inteligent, de fapt să se uite la acea prima linie și realiza, oh, esti scrierea de cod PHP. Lasă-mă să evidențiați sintaxă se cu culorile aici astfel încât să stea un pic mai mult. Dar acum am de gând să merg până la fereastra mea terminal. Voi mări. 

Acest program a fost numit "hello", așa că am de gând să fac slash punct salut, dar permisiune a negat. Și bash. Am auzit de fapt de care în urmă lucru câteva săptămâni în contextul Shellshock, una dintre aceste bug-uri. 

Dar permisiunea a negat le-am văzut înainte, poate că într-un context diferit. Are cineva amintesc cum s-ar putea repara ceva în cazul în care permisiunea este refuzat ca aceasta? Care este comanda, cel puțin? 

STUDENT: chmod. DAVID J. MALAN: Da, chmod, pentru schimbarea modului de un fișier. Și veți obține cu atât mai mult folosit pentru a această săptămâna viitoare cu o problemă ulterioară setat. Dar pentru acum, am de gând să se schimbe modul de a nu fi citite, dar pentru a oferi tuturor executeability privilegii, abilitatea pentru a rula acest fișier. Și am de gând să atribui că la dosar salut. 

Dacă fac acum slash punct salut intra, voi a se vedea, de fapt, programul meu, salut lume. Și ce pas am făcut clar sări cu totul? Compilarea. Așa că am fugit acest program destul de simplu. 

Și se pare că puteți face acest lucru cu o mulțime de sintaxă care amintește de C. Lasă-mă să merg în codul de astăzi, pe care mi-am pus în directorul meu vhost aici, din motive reale ne vom întoarce la. Și am de gând să meargă în, să zicem, condițiilor 1. 

Și veți vedea aici, în primul rând și în primul rând, o grămadă de comentarii. Dar aceasta este de fapt o re-creație în PHP a unui program am făcut în săptămână unul numit condiții 1.c în cazul în care scopul în de viață a acestui program este aparent de a cere utilizatorul pentru un număr întreg și apoi face unele pufos Analiza pe ea, prin care you say dacă este pozitiv sau negativă sau egală cu zero. Și eu aduc asta numai pentru că, cu excepția, poate, un mic detaliu, e imposibil de distins pana acum de la C. 

Care este caracteristica unul aici că poate sare la tine ca un pic diferit? Poate că două lucruri. Da? 

STUDENT: Dolar semn n? 

DAVID J. MALAN: Da. Deci, semn dolar n este prezent. Și semne dolar, ar fi vom vedea, vom să fie un fix la începutul a oricărei variabile în PHP. E atât de bine bine și bad-- în că este un fel de evident ceea ce este o variabilă, rău în asta e încă un alt lucru de tip. Și mai există un altul lucru pe care nu au destul văzut, cel puțin de această ortografie. da? 

STUDENT: Readline. 

DAVID J. MALAN: Readline. Readline nu ne-am văzut, în sine, în C, chiar dacă există ceva similar, dar ne-am folosit getstring, și acesta este echivalentul său. Așa că, dacă mă duc în această director, care se întâmplă să fie, cum voi explica într-un pic în vhost mea director și sursa mea A director, și am merge mai departe și de a face slash dot conditions-- punct slash whoops-- Condiții de 1, veți vedea, din nou, În același permisiunea issue-- negat. 

Așa că lasă-mă să zoom in și de a face chmod un plus x privind condițiile, condițiile slash dot. Aș dori un număr întreg, vă rog, 50. Și am putea juca acest Joc pe tot parcursul zilei. O să se comporte exact așa cum a făcut-o într-o săptămână. 

OK asa ca nu tot ce diferit, cu excepția Nu doar că usoara pic de sintaxă, dar în partea de sus, am din nou a avut această linie care mi-a permis de a crea ceva care Se pare ca un program C numit salut, numitele condiții 1. Dar nu este 0 și cele Sunt de executare direct. Este în schimb rulează acest interpret al cărui nume se întâmplă să fie identică cu limba. Programul se numeste PHP, și codul meu de mai jos o linie este trecut în ea. 

Putem face o altă destul de simplu exemplu amintește de ceva am făcut acum câteva săptămâni. Din nou, aceasta este un fel de bucată arbitrară de cod care se pare că nu ceea ce atunci când îl rulați? Ce se întâmplă acest lucru pentru a imprima, probabil? 

Deci, inițial, pe linia 16, e O să spun X este acum de 2, probabil. % D este același ca i $ pentru printf. Deci, atunci este cubaj, punct, dot, dot, în linie 17. Și apoi linia 18 apare pentru a apela o funcție Cubed. Și în cazul în care este definit Cubed? 

Ei bine, se pare că în linia 25, astfel încât nu e tot ce diferit. Am unele comentarii de mai sus ea, dar pentru cea mai mare parte, este o destul de simplu portare sau de conversie din programul C la versiunea PHP. Dar există în prezent un cuplu de Diferențele că poate ar trebui să sari. Ce altceva este diferit despre modul în care s-ar putea scrie acest fel de program in C? 

STUDENT: [inaudibil]. 

DAVID J. MALAN: Nu nici un prototip până sus. Deci, PHP-- și sincer, un mulțime de languages-- moderne sunt mult mai deștept și mai mult de ajutor decât compilatoare C, în care poate pune funcția de aici, puteți pune o funcție de aici, iar interpretul se întâmplă să faci favoarea de lectură întregul dosar înainte de a decide că unele funcții nu există. Deci îmbunătățiri frumos ani mai târziu. Dar există, de asemenea, ceva altceva diferit sau absent aici. Da? 

STUDENT: [inaudibil]. DAVID J. MALAN: Noi nu trebuie să declara tipurile de variabile, așa, vom vedea înainte de mult timp că există diferite tipuri în PHP, dar nu trebuie să le precizeze, care, de asemenea, este și bine și rău. Și mai e un lucru care lipsește. 

STUDENT: Nu sunt biblioteci. 

DAVID J. MALAN: Nu este nici o biblioteci. OK, așa că e drăguț. Am obține o mulțime mai mult din cutie. Deci nu e de fapt mult mai mult lucruri decât am crezut au fost diferite. Ce zici de drum în spate? Ce-i asta? Spune-o încă o dată? 

STUDENT: Pointer. 

DAVID J. MALAN: Nu pointer. OK, cel puțin în acest exemplu, nr. Asta-i corect. Deci, nu există indicii în PHP de fapt, în general. Există ceva numit referințe, dar nu vom cheltui prea mult timp acolo. Și ce altceva? 

STUDENT: Main. DAVID J. MALAN: Main. Deci, aceasta a fost Biggie Mă gândeam. Observați nu există nici un punct de intrare principal. Pur și simplu începe să scrie codul. Și aceasta este, de fapt Va fi avantajos când ne-am tranziție momentan la de fapt, folosind aceeași limbă pentru web-based programare, pentru care noi Nu vreau să aibă doar un singur punct de intrare. S-ar putea dori să aibă o grămadă de URL-uri, o grămadă de fișiere diferite toate luând în datele introduse de utilizator și ieșire producătoare. 

Dar aici este foarte deprimant exemplu pe care am promis data trecută, și anume în acest dosar aici, greșeli de ortografie. Deci, în acest abecedar dosar, pe care noi nu va petrece prea mult timp pe, există în esență, o porting-- P-O-R-T. E doar cuvântul dat atunci când, să zicem, conversia dintr-o limbă într-un alt manual de obicei. 

Aceasta este o portare de PC-uri Versiunea de pronuntie din PSET 5. Și am încercat, în esență, să convertească line prin linie la fel de strâns ca pot. Deci, dacă vă place acest tip de lucru, el de fapt este în valoare de la un moment dat trăgând-le atât în ​​sus partea de laterale și a vedea ceea ce este la fel și ceea ce este diferit. Dar sunt destul de darn similare. Dacă vă amintiți ceea ce pronuntie chiar arata ca, chiar dacă nu a făcut- trebuie să se schimbe acest fișier, e destul de asemănătoare structural cu doar un cuplu de modificări aici și acolo. 

Deci, aceasta este doar să spun că e destul de simplu pentru a converti descifrează de la C la PHP. Dar în dicționar, nu e ceva chiar mai convingătoare. Lasă-mă să mergeți mai departe și de a crea propria ta dosar dictionary.php. Deci, ușor diferite în care vom numi .php în loc de .c. Deoarece acesta este un fișier PHP, I do-- ușor annoyingly-- avea pentru a începe dosarul cu o etichetă php de genul asta. Și am de gând să merg mai departe și defini câteva funcții. Funcție numită de validare, care este de gând să ia într-un cuvânt ca înainte. Dar acest argument lui va avea un dolar Înregistrează că suntem, din nou, folosind PHP. O altă funcție din dictionary.c a fost de sarcină și a luat în numele unui dicționar, așa că vom primi această funcție gata de plecare. 

Un altul în dictionary.c a fost ce? Dimensiune a fost unul dintre cele mai frumoase, la cel puțin dacă ai păstrat unele variabile în jurul valorii. astfel încât dimensiune trebuie doar să se întoarcă o variabilă. Și apoi a fost de descărcare. 

Deci, au existat aceste patru funcții în problemă seta 5 care ai nevoie pentru a pune în aplicare cu unele structuri de date sau structuri. Așa că am promis că, în PHP, putem declara o tabelă de dispersie, de exemplu, tot ce mai ușor. De fapt, dacă vreau un tabel hash, Mă duc să meargă așa și nu e masa mea hash. Și asta e nota, evoluat destul de timid, că am rămas pe ultima oara. Și știi ce, dacă am vrut o variabilă de dimensiune, ei bine, asta nu e tot că diferit de C, dar am de gând să merg mai departe și de a face asta. Și observați nici un tip de date. Și Mă voi întoarce mai târziu și de fapt, adauga cateva comentarii aici. Dar ceea ce despre sarcină? 

În cazul în dicționarul semn dolar este numele fișierului meu și eu de fapt vreau să se încarce Cuvinte în acest tabel acum, Eu pot face de fapt ceva destul de simplu. Unu și acest lucru este minorly annoying-- în PHP, trebuie să specificați interior a unei funcții, dacă doresc sa acceseze unele global variabilă care este definit afară. 

Dar asta nu e deosebit de interesant chiar acum. Ce e mai interesant este acest lucru pentru fiecare construi pe care am menționat data trecută. Și se pare că PHP are o funcție numitul dosar al cărui scop în viață este de a deschide un fișier și se citesc în toate liniile sale de într-o matrice și să le restituie la. 

Care este de a spune ce pot face în dicționarul astfel care acum în mod eficient, atunci când eu numesc dosar, acest lucru se întâmplă să-mi dai înapoi o serie de cuvinte din dosar. Nu e tot atât de bun. Este încă va fi o linie de cuvinte, ceva liniar. Dar eu pot merge mai departe și repeta peste fiecare dintre aceste cuvinte, folosind că sintaxa am văzut pe scurt ultima dată. Și veți vedea mai mult în PSET viitoare. 

Dar acum am o iterarea buclă peste fiecare cuvânt în dicționar. Și pe fiecare iterație, amintesc eu sunt de asteptare cuvântul curent "cuvânt". Și tot ce va fi nevoie pentru a a pus un cuvânt în dicționar este Va fi cuvântul ghici "adevărat". Asta e funcția mea de inserție. Asta e funcția mea de sarcină pentru dicționarul meu. Acum e un pic de ieftin, deoarece, Știi ce, nu e de fapt backslash n la sfârșitul cuvintelor că eu ar trebui sa scape, probabil, de, dar asta nu-i o problemă, deoarece PHP are o funcție numită cotlet de care literalmente cotletul de off un caracter la sfârșit. Deci, nici o problema acolo. Am mers mai departe și de fapt scurtat că la doar aceasta. Și acum ar trebui probabil să țină evidența de mărime, deci haideți să facem cel puțin asta: dimensiune ++. Eu pot face asta la fel ca înainte. Și atunci acest lucru este, probabil, va funcționează foarte bine, în așa fel încât revenim adevărat. Efectuat. PSET 5. 

[Râsete] 

DAVID J. MALAN: OK. Noi o să facem asta din nou cu PSET următor, de asemenea. Deci, ce despre mărimea? Ei bine, acesta sperăm este gata așa cum v-ați aștepta ultimul timp, deși am să fac acest lucru global stupid. E doar un artefact de la de design limba lui. 

Dar de verificare este un pic mai interesant. Deci, dacă am trecut la dolar Înregistrează cuvânt, eu în primul rând doresc să aibă acces la că tabelul Global variabilă. Și acum, dacă vreau să verifica dacă un cuvânt este acolo, Pot să spun pur și simplu, dacă este adevărat că următoarele este stabilit în tabel, apoi mergeți mai departe și retur adevărat; altfel, return false. Efectuat. Cealaltă jumătate a PSET 5. 

În regulă, deci din nou, eu sunt de tăiere câteva colțuri. În corectitudine, eu ar trebui, probabil, petrece câteva secunde pe această punere în aplicare. Și eu, probabil, nu ar trebui să Mock toate ore ai pus pe PSET atât de mult. Deci strtolower este o funcție. Ceva existențialist similare în C, cel puțin pentru caractere, dar a PHP are o versiune șir întreg. 

Asta se întâmplă pentru a forța tot la litere mici, pe care unii dintre voi ar fi putut face pentru a canonic ceea ce ai fost punerea în dicționarul ta. Și acum poți să faci acest lucru în C, de asemenea. Acest lucru nu are nimic de-a face cu PHP. 

Dar de fiecare dată când aveți o condiție booleană, ca și cum ceva on-line 10 acolo, care este de numai O să evalueze la adevărat sau fals, iar dacă mai clar se întoarce adevărat sau fals, am putut pur și simplu face într-adevăr acest lucru mai sexy și la fel face ceva de genul asta. Așa că nu e funcția mea de verificare. Dreapta, în cazul în care Boolean returnează un adevărat sau fals o, hai să-l întoarcă imediat. 

Și există câteva alte trucuri Am putea face aici și acolo. Descărcare Load--, de altfel, că a făcut. Nimic de a face acolo. Din moment ce toate de memorie în PHP și multe alte limbi este, de fapt gestionat pentru tine. Deci întrucât în ​​C, ca care le-ați învățat dureros, tot ce malloc sau calloc sau realloc, trebuie să te elibereze. Tot ceea ce fopen, trebuie să fclose, astfel încât resursele sunt eliberate în cele din urmă și instrumente, cum ar fi Valgrind nu observă și nu se plâng, care este un lucru bun pentru a rula pe ele. 

Dar, cu siguranță, nu trebuie să fie o captură, nu? În caz contrar, ne-am cam pierdut de o grămadă de săptămâni. Deci, nu există nici un număr de motive de ce am un fel de a lua această traiectorie, dar există un compromis. Dreapta, acest lucru a fost tematică. 

Deci, ce s-ar putea un compromis aici se deplasează, de la C la PHP? Se simte la fel ca toate câștiga până acum, altele decât un pic de urâțenie aici sau acolo. Da. Ce-i asta? 

STUDENT: [neauzit] memorie. DAVID J. MALAN: Viteză. OK. Ei bine, viteza mea a fost destul de repede. Dreapta? Dar viteza de execuție a programului? OK, așa că e un punct corect. 

Deci, cum s-ar întâmpla, am anticipat cued up atât soluția mea încercare, cea Am avut pe placa mare a fost o soluție pe bază de încercare, și am că în acest director aici. Așa că am într-un moment, pot merge mai departe și rula acest lucru pe Biblia King James, apăsarea Enter. Și acest lucru este, sperăm corect punerea în aplicare la sfârșitul anului, dă-mi timp în total de 0.38 secunde pentru ca un exemplu oarecum arbitrară. 

Și dacă acum mă duc în această în al doilea rând fereastră de terminal aici unde am deschis primul gedit, permiteți- mă să merg în code-- de astăzi care, din nou, este în acest director here-- și lasă-mă să merg mai departe și a alerga abecedar. Deci, doar pentru a fi clar, aceasta este versiunea PHP. Eu doar arată în partea de sus a acesteia aici. 

Deci, dacă am face Speller de tilda CS50 PSET 5 texte, King James, introduceți. E încă mai rapid decât scris l în C, dar timpul total este, aviz, 0,93, în timp ce mea Punerea în aplicare a C pe baza de a fost 0,38. Deci, este o diferență non-trivial. 

Și acesta este doar pe un singur fișier. Dacă ar fi să executați cele două Programele față de placa mare și au o grămadă de factori de producție testat, acest lucru ar adăuga cu siguranță în sus. Și dacă am avea și mai mari seturi de date, aceasta, de asemenea, s-ar aduna tot mai mult. Deci da, plătind unele preț de viteză este într-adevăr cazul. Ce altceva? Da? 

STUDENT: Suma de utilizare RAM. 

DAVID J. MALAN: Suma de utilizare RAM. Așa că nu a dat o secundă crezut că atunci când scris acest PHP Versiunea cu privire la cât de mult memorie Am fost folosind. Sunt complet de amânare care să PHP în sine și cine a scris acest program. Și care ar putea fi OK, dar dacă am de fapt într-adevăr pasă de stoarcere la fel de mult de performanță din programul meu sau din site-ul meu sau din orice instrument Sunt clădire, poate PHP, într-adevăr, nu este limba corect. 

Și, de fapt, de aceea, pentru exemplu, mulți servers-- web programele reale care servi content-- web nu sunt scrise în PHP sau în Python sau Ruby. Ele sunt scrise, cum ar fi vei face acum cu PSET 6, în C, astfel încât să puteți stoarce fiecare bit de performanță din ea și într-adevăr exercita Controlul fin-de cereale peste ceea ce este merge pe sub capota și nu doar ia- pentru a acordat unele mai mari structură de date de nivel. 

Luați în considerare, la urma urmei, oricine în PHP puse în aplicare că noțiunea de un hash table-- este de fapt mai mult numit în mod corespunzător o array-- asociativ face el sau ea au nici o idee despre ce fel de intrări aveți de gând să fi punerea în structura? Așa că, evident, nu, nu? Este un instrument generic în setul de instrumente care este prevăzut pentru oricine care vrea să-l folosească, și așa cu siguranță nu poate fi optimizat în cele din urmă pentru exact ceea ce vrei sa faci. 

Deci, timpul de dezvoltare, comerț offs-- s-ar putea diferă, performanta ar putea diferi, complexitate sau utilizarea memoriei poate diferi. Și ce veți găsi din ce în ce este că nu există Va fi diferit Unelte pentru comerțul. Și, de fapt, de o majoritate super oamenilor de proiecte finale în această clasă, crezi sau nu, C nu este de gând să fie limba dreptul de a utiliza. 

Și, de fapt, una dintre cele takeaways în cele din urmă pentru orice clasă de genul asta este să te gândești, bine, ceea ce ar trebui să te scoate raft atunci când doriți pentru a rezolva unele probleme. Și într-adevăr, vom trece acest pod chiar mai mult cu cât ne uităm la mai multe limbi chiar dincolo de ziua de azi. 

Deci, haideți să tranziție acum la probabil, un context mult mai familiar pentru utilizarea unui limbaj cum ar fi PHP. E ceva obișnuit să folosească la linia de comandă, scrierea de scripturi cum am făcut-o, dar e mult, mult mai frecvente. Și a fost destinat a fi utilizat în sub formă de fișiere care se încheie de obicei în .php-- dar asta e nu o prerequisite-- care se generează conținut web. 

Așa că lasă-mă să merg mai departe și deschide o gamă exemple-am pregătit în prealabil. Și acestea sunt de fapt un fel de adevărate texte în care unul din primele lucruri Mi-am făcut vreodată după terminarea CS50 și poate, cred, Ani în urmă CS51 este meu coleg de cameră și cu mine am fost de ajutor pentru a rula intramural student în anul întâi program sportiv, care, la momentul respectiv, a student în anul întâi înregistrare pentru diverse sport prin completarea unui bucată de hârtie, așa cum a fost numit, de mers pe jos prin curte la Wigglesworth, și o scădere în unele derulează ușa Proctor lui. Și atunci el sau ea va trece prin ei și apoi de fapt, ne e-mail manual care ne-au fost înregistrate pentru unele sport. 

Deci, în mod clar, o oportunitate pentru îmbunătățire. În aceste zile, s-ar putea întoarce la doar Formulare Google, dar din nou în a doua zi, am avut de a ajunge de fapt for-- acest nu a fost ajunge chiar atât de mult ago-- pentru o programare limbă care nu a fost PHP. La acea vreme, ea a fost ceva numit Perl, care a ieșit din modă atunci. Dar ideea este aceeași. 

Și, în esență, m-am așezat să încerc în port se duce versiuni Perl pentru PHP, dar în disclaimer complet, nu a dat orice gandit sa estetica încă. Deci, aici este o pagină web. Acesta este un fișier. Dacă aș zoom in, aparent ei numit froshim0.php doar pentru că este primul nostru exemplu în această serie. Și observați că are ceea ce pare a fi o formă HTML foarte urât, dar un formular este interesant deoarece permite mă să ofere informații de utilizator pentru browser-ul. 

Acum, ultima dată când am avut o formă, pentru pe care ne-am prezenta parametru noastre de interogare, parametrul coadă așa cum a fost numit? Deci, pentru Google, nu? Ne degajată în totalitate pe ideea de a face ceva cu acea intrare. 

Dar astăzi, vom începe producerea de ieșire. Și comportamentul mă duc să văd aici inițial este destul de banal. David, voi verifica off de gen aici, spune Matthews aici. Nu voi fi căpitan. Am de gând să faceți clic pe Înregistrare. Și observați că adresa URL a schimbat de înregistrare-0.php, și apoi există din acest text urât aici. I-am dat nici un gând de formatarea acest lucru. 

Dar ceea ce este interesant este faptul că trei Valorile au fost aparent a trecut în. Aceasta este un fel de PHP echivalent cu printf-- vom vedea ce se numește în realitate într-un bit-- care tocmai imprimă ceea ce a trecut în el. Deci, acest lucru sugerează că această formă a avut cel puțin trei domenii de ea, și ai văzut pe mine să le introduceți în. Unul era numele meu, unul a fost gen, unul a fost dormitor. Și căpitanul nu sa trimis chiar la serverul pentru că nu l-am verificat. 

Deci, acest lucru este de a spune aparent, atunci când prezintă lucrurile pe web, nu numai că URL-ul, uneori, change-- uneori nu. De fapt, numele de fișier schimbat, dar ceea ce este absent de la adresa URL că am văzut ultima dată cu Google. Da? 

STUDENT: Nu șir de interogare 

DAVID J. MALAN: Nu e nici un șir de interogare. Nu e nici semn de întrebare ceva. Nu e nici semn de întrebare q este egal cu pisici, așa cum am făcut data trecută. Și nu există cu siguranță nici o Numele semn de întrebare este egal David sau camin egal Matthews, astfel în cazul în care se întâmplă ca toate? 

Ei bine, lasă-mă să mă întorc la gedit aici și deschide prima dintre aceste dosare în vhost mea, gazda locală, publică Director aici și du-te în froshim0. Deci, se dovedește că aproape toate acestea pagină este doar HTML. Și acest lucru ar putea fi necunoscut pentru tine, dar în curând va fi cu atât mai mult cu PSET 6 și PSET 7 și 8 PSET. Dar aceasta este doar o pagina HTML. 

Și interesant chestii pare să fie aici. O etichetă formular a carui actiune atribut are o valoare de registru 0. De aceea, atunci când am inscrieti aceasta, se duce la acel fișier. Dar metoda este diferit după today--. Deci, se dovedește că e cel puțin două metode pe web second hand pentru a trimite informații de la browser la server. Ia-l pune în URL-ul. Arata-l pune în altă parte. Și când și de ce s-ar putea tine doresc de fapt un site web de a utiliza posta apoi în schimb de a obține, doar intuitiv? Orice site web. Ce fel de date ar trebui să fie trecut puțin prin deducție acum prin poștă, spre deosebire de pentru a obține, dacă ne-am văzut cele două diferențe? STUDENT: [neauzit] sigur. DAVID J. MALAN: Daca vrei ceva pentru a fi sigur. Deci, s-ar putea introduce o parolă într-un site web, un card de credit într-un site web ar un fel de acestea suboptimal în cazul în care browser-ul încearcă că Valoarea interiorul URL-ul. De ce? Tu-l vezi, care nu par a fi o astfel de afacere mare, dar tu cote de pariuri sunt destul de frecvent de mers pe jos departe de calculator sau utilizarea computerului laboratoare, și așa cineva altceva sau chiar un coleg de cameră ar putea ajunge cu ușurință în sus și a vedea că informații private. Atunci când trimiteți un e-mail prin intermediul web, probabil că Nu vreau asta se încheie de date în URL-ul, de asemenea. Și deci nu e orice număr de motive de ce ne-am putea dori să-l puneți aici. Și chiar photos--, eu nu pot chiar foarte imaginați-vă cum v-ar lua un grafic, ca un JPEG, și pune-l într-o adresă URL. Ai putea face acest lucru. E modalități de codificare ea, dar e Pur și simplu nu simplu ca asta. 

Deci, inscrieti-0 este de fapt foarte underwhelming. Tot ce spune literalmente este aceasta. Se imprimă în interiorul unor HTML tags următoarele. Am o etichetă PHP aici imbricate in interiorul unui tag pre. "Pre" înseamnă doar un text pre-formatat, mono-spațiate, cum ar fi o mașină de scris. 

Printr este o funcție recursivă de imprimare. Și apoi există această lucru interesant aici. Și vom reveni la acest pentru că există alții, dar subliniere semn dolar poștă pare a fi o variabilă în PHP în care nimic voi trimite de la browser la server este stocat pentru tine. Și vom vedea cum să obțineți de la aceste informații înainte de mult timp. 

Dar, mai întâi, să ne întoarcem la un ușor diferită exemplu. Mergând în register-- sau mai degrabă, froshims1.php, care arată un pic diferit. Mi-am luat un pic mai mult efort cu formatare, chiar dacă este încă destul de urât. Dar am de gând să merg mai departe și tastați "David" acum. De sex masculin. Vom verifica "căpitan" de data asta. Vom face Matthews. Și înregistrați. 

Și de această dată se spune, hm, nu într-adevăr. Bine, deci ce a înregistra o? Lasă-mă să merg în registrul deschis 1 hm si--. În regulă, deci aceasta este interesant, și această este o piatră de temelie acum spre mai multe programe interesante. 

Observați în partea de sus a acestui fișier are un Tag PHP, precum și unele comentarii. Și acestea sunt, de acum, o distragere a atenției Să tocmai a scăpa de aceste observații la fel ca ei sunt în C. Și am revendicati cu această bucată de cod cu un comentariu că acest cod este validarea prezentarea. 

Ei bine, se pare că variabile, cum ar fi semnul dolar subliniere mesaj sunt numit Super globals. Sunt ca acestea variabile globale speciale că sunt doar omni-prezent disponibile în cadrul programului. Și vă puteți folosi notatia placuta gradină să indice în ele nu utilizează numere cum ar fi 0, 1, 2, 3, dar cuvintele reale. 

Deci, vă puteți gândi la semnul dolar subliniere post de un fel de tabel hash că ați fi putut trece o cheie într-o căutare cuvânt în-între paranteze pătrate, și o să vă dau spate Valoarea pe care utilizatorul efectiv furnizat. PHP are o funcție denumit gol pe care tocmai spune da sau nu, acest variabilă este gol sau nu. Avem aceste bare duble, ceea ce înseamnă doar sau, ca în C. 

Deci, în fapt, această linie 4 este doar declarând în cazul în care utilizatorul nu a dat un nume sau nu a dat un gen sau nu a făcut- da un camin, mergeți mai departe și să-l redirecționeze sau ei prin intermediul acestei linii de aici. Deci, acest lucru este un pic criptic, dar acest lucru înseamnă doar literalmente du-te înapoi la această locație, așa că punts utilizatorului înapoi la oriunde el sau ea a venit de la. Dar e un pic putin elegant în care am de greu codificate. 

Dar ce se întâmplă dacă această condiție în cazul în care nu se evaluează la adevărat? Ce se întâmplă dacă utilizatorul mi-a dat lui sau numele ei și cămin și de gen? Că dacă starea nu e O să evalueze la adevărat, așa că nu a lovit ieșirea din linia 7. Deci, ce se întâmplă? Și aceasta este ceea ce este interesant despre PHP. 

Aveți posibilitatea să picătură în și în afara de modul PHP, ca să spunem așa. Dacă doriți un cod pentru a executa, puteți deschide și închide o etichetă PHP și a pus codul acolo ca am facut aici. De îndată ce vă închideți tag PHP, serverul este doar de gând să scuipe orice ai pus acolo. Și într-adevăr, aceasta a fost parte din designul original de PHP, pentru mai bine pentru rău, a fost aceasta amestecare de cod și marcare limbă. Și vom vedea că acest lucru foarte revine rapid într-o mizerie. Și așa vom face mai bine decât aceasta în cele din urmă, dar doar observă ușurința cu care eu sunt de fapt, în măsură să execute o anumită logică. 

Dar, totuși, un pic underwhelming. Să deschidem versiune două de Frosh AI, care aparent transmite register2.php. Deci, acest fișier se intampla de fapt pentru a arata aproape la fel. Am de gând să merg la Frosh AI 2. Dar, în Frosh AI 2, Să vedem ce se întâmplă. 

David, faceți clic pe butonul radio, ca Se numește; Matthews, nu căpitan. Inregistreaza-te. Sunteți înregistrat. Nu chiar. Oh, așteptați, tocmai am făcut- acest exemplu, nu-i așa? Bine, așteptați. Vom face trei. În mod evident ceva nu e despre să se întâmple cu Gmail. Vom ajunge acolo. 

Deci, Frosh AI 3 arata ca acest lucru. Nu este diferit. Dar când am făcut David, de sex masculin, Matthews, și înregistrați, această a treia și ultima versiune creanțe, pur și simplu te, sunt înregistrate într-adevăr. Asta e un fel de imaterial. Dar eu susțin cu acest Versiunea a treia și ultima Am recreat acum exact ceea ce-mi coleg de cameră și am construit pentru AI Frosh program de ani în urmă. Și a fost simplu. Nu a fost nici o bază de date, nici o foaie de calcul Excel. Dar, mai important, nu a existat nici mai mult hârtie pentru că ceea ce am făcut cu acest program a fost de a trimite un email de fapt Proctor, care a fost primit anterior aceste lucruri prin forme. 

Și se pare că ne-am programat acest lucru în așa fel încât atunci când cineva înregistrează, Contul e-mailuri John Harvard lui proctor-- sau față în acest caz, Ioan Harvard-- cu următorul text text-- "Această persoană doar înregistrat." Nume este David, căpitanul este necompletat; gen, masculin; și cămin, Matthews. 

Deci, ce sa întâmplat acolo? Ei bine, dosarul în cauză aici este aparent register3.php. Și dacă am deschis acest lucru, veți vedea atât puterea de cod de genul asta și, de asemenea, sincer, insecuritatea de un sistem ca e-mail. Am pretins doar în mod eficient la John Harvard fi în felul următor. 

Am tag-ul php deschis până sus, care spune doar aici vine un cod PHP. Aici, se pare că acolo sunt biblioteci din PHP. Tu chiar nu trebuie să includ fișiere antetul mult. Veți obține mai mult cu chiuveta de bucatarie, ca să spunem așa. 

Dar de data aceasta, în linia 4, fac vrei sa bibliotecă special numit PHP Mailer, care este tu ceva poate instala gratuit în multe sisteme. Aici am validarea prezentarea doar prin verificarea a da utilizatorului mi un nume, un gen, și un cămin. Și dacă este așa, mergeți mai departe și instantiate-o cutie. 

Vă puteți gândi la acest lucru ca fiind o linie de cod care tocmai alocă. E ca si cum malloc, dar e un pic mai sexy în care nu menționa doar malloc și unele număr generic. Tu spui da-mi unul dintre acestea, da-mi un nou una dintre acestea. 

Și dacă v-ați programat în Java sau C ++ sau alte limbaje, s-ar putea fi văzut acest lucru. Dar scurt de ea, în cazul în care nefamiliar, această linie pune în e-mail prin semnul dolar o struct special numit un obiect care a construit-in- funcționalitate de e-mail. Și, de fapt, observa și sintaxă similară. 

Acesta nu este un pointer, în sine. PHP foloseste doar aceeași sintaxă. Această linie spune utilizare SMTP-- Simple Mail Transfer Protocol, care este doar protocol folosit pentru a trimite e-mail. Acest lucru este specificarea utilizare Serverul SMTP Harvard, care este undeva aici, în campus. 

Acest lucru este de a spune ceea ce TCP Numãr port pentru a vorbi cu, și M-am gândit că de googling sau de a cere biroul de asistență. Și apoi pentru că Harvard foloseste unele sistemul de securitate de pe server-- e-mail cel puțin pentru a cripta trafic între tine și el, chiar dacă oricine poate trimite la it-- Am de gând să porniți protocolul TLS pentru păstrarea acestui securizat. 

Dar acest lucru este în cazul în care lucrurile obține un pic înfricoșător. Eu pot doar arbitrar spun că sunt jharvard, și eu pot doar arbitrar eu de e-mail aici. Și atunci pot specifica un subiect cu această linie aici. 

Și aceasta doar arată urât, dar e doar o adunatura de concatenare. Se pare că PHP are un simbol foarte util, cum ar fi unele limbi, operatorul punct, care doar literalmente concateneaza șir după șir după șir, și nu trebuie să malloc sau figura din lungimea totală a șirului. Trebuie doar so fac. Și într-adevăr, pentru că eu sunt concatenarea în toate aceste lucruri cu aceste puncte, de aceea e-mail I trimite privit așa cum a făcut. 

Și apoi în cele din urmă aici, mă trimiterea de e-mail. Deci, în cazul în care acest lucru este fals, Mă duc să moară, care este o funcție care doar printuri la ecranul unele mesaj de eroare. Dar este, de fapt, apelul funcției de trimitere. În caz contrar, dacă toate acestea eșuează, ma redirecționează înapoi aici. 

Și de ce am văzut că Am înregistrat într-adevăr? Ei bine, sa întâmplat chiar aici. Așa că am aduc asta pentru un cuplu de motive. 

Unul, acest lucru este exact cum, dacă vă construi unele site-ul pentru un proiect final sau pentru lumea reală, acest lucru este cum ai trimite memento-uri de e-mail pentru clientii dvs. sau abonați. Acesta este modul în care trimite memento-uri de parolă. Acesta este modul în care trimite mesaje de oameni că ei au un nou Facebook mesaj în așteptare sau ceva de genul asta. 

Dar ea vorbește, de asemenea, faptul că acest lucru ar putea au fost foarte bine de la Davin sau oricine altcineva. Și spun acest tip de cu un zâmbet pentru că eu sunt destul de sigur că ceea ce se întâmplă prin mai multe dintre mințile voastre de la acest punct. Dar aceasta este una dintre cele faceți cum am spun, nu ce fac eu fel de lucruri, pentru că este trivial să falsifica e-mailuri de acest gen. Dar cum este posibil să fi văzut sau de a citi în Crimson, de întârziere este de asemenea destul de banal pentru oameni pentru a le urmări înapoi la unele origine. Și-mi ceva timp, probabil, la prânz CS50, cum am mai întâi a luat cunoștință îndeaproape aproape la bord ed multe ani Acum, când am descoperit modul în care internetul a lucrat. Deci, în orice case-- ușor după ce consiliul ed făcut-o. 

Deci, în orice caz, nu există o grămadă de super globals, cum se numesc aici, dintre care unul am saw-- post-dolar semn de subliniere. E o contrapartidă numit GET, care este în cazul în chestii de la o adresă URL sfârșește merge. Și există o grămadă de alții, sesiune too-- și de server și cookie. Ne vom întoarce la de Cookie altă dată, dar sesiune este un fel de rece deoarece chiar now-- până now-- tot ceea ce am făcut cu un browser web este un fel de apatrid, ca să spunem așa. Pot să faceți clic în jurul, acces fișierele de pe server, ceva se întâmplă pe ecran, dar apoi conexiunea se închide. Internet Explorer sau Firefox icon oprește filare și veți vedea doar ceea ce că pagina web conține. 

Deci, HTTP este apatrid în care după ce face o conexiune, devine unele date, asta este. Nu mai mult sens, spre deosebire de Skype, spre deosebire de FaceTime, spre deosebire de Gchat, care menține o constantă conexiune la server. Web-ul este fundamental deconectat, deși vom a se vedea cât de mult timp înainte putem simula lucruri cum ar fi Facebook chat-ul și Gchat, care menține iluzie sau de fapt, nu să mențină o legătură permanentă cu ajutorul mai mult tehnologia modernă. 

Dar dacă mă duc la, să zicem, counter.php, acesta este un alt exemplu simplu, așa cum vom vedea, că se gândește în prezent Am vizitat site-ul timp de zero. Dar dacă pur și simplu am să reîncărcați pagina, stie cumva am fost aici înainte. Dacă aș reincarca din nou, știe Am fost aici înainte. Și din nou și din nou și din nou și din nou. 

Deci, există niște plus, plussing întâmplă, dar aviz mic lucru pe care se învârte foarte scurt până sus și apoi deconectează, deci nu e ca și cum am avea o constantă conexiune la aparat mea. Ei bine, dacă mă duc în counter.php, observați cât de simplu este. Eu numesc în primul rând această special Funcția pe care o vom curând a începe să luați de la sine numit de pornire sesiune. Porniți o sesiune. 

Și o sesiune de acum înainte este doar Va fi o găleată, ca o lista de cumparaturi cart în care puteți pune valori și un fel de încredere ca un programator că ei vor fi aici când care vine utilizator back-- un al doilea mai târziu, o oră mai târziu, chiar și un an mai târziu, atât timp cât el sau ea nu dispare cookie-urile lor, așa cum vom vedea în cele din urmă. Și acum doar am o condiție dacă aici. Deci, în cazul în care următoarea cheie, numit contra, este stabilită în interiorul din acest super-global-- acest hash masă, dacă will-- sunat sesiune, apoi mergeți mai departe și apuca Valoarea de think session-- de acest lucru ca pe o lista de cumparaturi cart-- și depozitați-l într-o variabilă temporară numită contra. 

În caz contrar, în cazul în care contra valoare a fost nu sunt setate în așa-numita cosul de cumparaturi, doar inițializa la 0. În cele din urmă, aici, du-te și pune înapoi în cărucioarele de cumpărături sau sesiunii valoarea contra 1. Deci, se dovedește că această here-- special container care, din nou, este una dintre acestea asociate matrice, un tablou pe care le poti index în cuvinte în loc de Numere persistă chiar și după ce utilizatorul dispare. Din nou, voi reveni la pagina acum. A fost un minut sau cam asa ceva. Dar își amintește că n-am fost aici de 19 de ori înainte. Aceasta este vizita mea 20. 

Și astfel aceasta va fi cheia pentru de punere în aplicare orice site care isi aminteste că sunteți conectat, pe care le pune ceva literal in cosul de cumparaturi pentru a cumpara sau pe care le au unele Numărul de mesaje în așteptare. Oricand vrei sa amintiți-vă de informații, vom vedea că PHP, cum ar fi mai multe alte limbi, ne oferă această iluzie de stat chiar dacă, așa cum veți vedea în PSET 6, cum faci cereri HTTP de la client la server, asta este. Odată ce te-ai întors ca Ca răspuns, nu este nimic mai mult vine înapoi de la serverul implicit. Dar vom vedea cum să lucreze în jurul valorii de asta. 

Ei bine, acum, să încercăm să curăța asta un pic. Am văzut câteva diferite exemple de acolo. Oh, și ca o parte, pentru cei familiarizați sau nefamiliare, motivul că Exemplu Frosh AI dus de la căutarea într-adevăr urât la slightly-- bine, încă ugly-- la ușor mai puțin urât, deși încă urât este că dacă ne uităm la codul sursă aici, se pare că am această la foarte de sus a fișierului. 

Se pare că bootstrap este una din multele biblioteci primare acolo care nu exista in limbaje de programare mereu, dar pentru CSS sau pentru JavaScript sau HTML sau orice număr de limbi. 

Si acesti oameni here-- inițial a ieșit de Twitter-- au doar o grămadă de stiluri. Este un fișier masiv aici că cineva a scris, sau scris cuiva, în timp că specifică culori și formatarea și fleacuri astfel încât să pot fel de a împrumuta sintaxa lor și nu trebuie să dau seama cum să se stabilească în forma mea. Acest lucru este, de asemenea, minified astfel încât un calculator poate înțelege acest lucru, dar nu în mod necesar un om. Deci, asta e doar de ce stilizare acolo sa schimbat. 

Dar hai sa facem acum mai bine în termeni de design, pentru că dacă am sta jos acest drum prea lung, codul nostru va obține murdar și Messier. Deci, haideți să se concentreze pe aceste exemple aici. Ultimul pentru ziua de azi. 

Deci, aici este un super-simplu Versiunea 1.0 a site-ului CS50 lui. Ea are doar link-uri către cursuri și programe analitice, și se folosește ca lista neordonata tag-- eticheta UL pe care am folosit ultima dată. Și dacă, de fapt, dacă mă deschide View Page Source, veți vedea că acest lucru este într-adevăr, foarte simplu HTML. Și, de fapt, chiar dacă acest lucru este un fișier PHP sub capota, este încă doar scuipa out HTML doar pentru acum. 

Deci, dacă am faceți clic pe Lectures, vom vedea acest lucru. Și dacă dau click pe săptămână la zero, vom vedea acest lucru. Și dacă faceți clic pe Miercuri, vedem aceasta. Și acest lucru se pare că a fost de PDF lamelelor din acea zi. Tot ce am făcut este link-ul cu un ancora tag-ul pentru această adresă URL aici. 

Deci, aceasta este doar să spun acest lucru este o destul de versiune simpla a site-ului CS50 lui. Să vedem cum se puse în aplicare. Dacă mă duc în directorul mvc0, vom vedea câteva fișiere. Una dintre ele este un README, așa că, dacă o parte din acest lucru este prea rapid, puteți sa faceți doar în jurul valorii de mai pe îndelete mai târziu. Și aviz aici este un fișier index.php. Se pare că în cazul în care te, omul, nu specificați un nume de finală în un URL, serverul de web, de obicei, deduce unele nume implicit pentru tine. Un ceva index dot este, în general, implicit. 

Deci, de aceea o clipă în urmă când am vizitat această adresă URL aici, nici un nume de fișier, nici un fișier prelungire, nici o perioadă în URL-ul. Pur și simplu știa într-un fel magic să caute index.php. E doar o convenție. Ar putea fi numit nimic. 

Așa că, dacă acum mă duc în index.php, veți vedea că, indeed-- să scăpa de comentarii aici, pentru că nu există cu adevărat nimic interesant la it-- aceasta este doar greu codificate HTML. Deci, asta e consistent, deși, cu revendicarea mea pe care le puteți amesteca HTML și PHP. Nu e nici real programare logică aici. 

Și alte fișiere sunt destul de mult la fel de neinteresant. E doar o saptamana hard-coded aici pentru o saptamana m și o greutate săptămână, pentru luni și miercuri. Și apoi, dacă am deschide săptămână la zero, observați că e aproape identic. 

Și asta e un fel de Takeaway cheie. Observați cât de redundant acest lucru este. Aceste fișiere abia se schimbe, și totuși am tras una dintre aceste copy / paste de locuri de muncă unde am luat o file-- probabil în săptămâna zero-- copiat când a venit o saptamana în jurul valorii de, și optimizat câteva valori. Noi ar trebui să fi probabil în măsură pentru a face mai bine decât acest lucru. 

Așa că hai să mergem înapoi la MVC și du-te într-o versiune. Și observați Am o câteva fișiere, pentru că ceea ce a fost comună pentru toate aceste fișiere doar un clipă ago-- dacă mă întorc la versiunea 0, Să mergem înapoi în index, și doar postulate-- o dată ce am scăpa de comments-- ce parte a acestei pagini este probabil în fiecare dintre fisierele mele? Doar striga. Care liniile sunt duplicate probabil peste toate aceste pagini? Da? 

STUDENT: [inaudibil]. 

DAVID J. MALAN: de la 1 la 9. Da, absolut. 1 la 9, cu excepția, poate, 8 schimbă un pic pentru că CS50 devine prelegeri sau Săptămâna zero sau ceva. Dar aproape identice. Deci, toate aceste lucruri este doar fel de copiat și inserat. Și există un cuplu alte linii pot să cred că din care sunt probabil identice în toate fișierele. 

STUDENT: 12 și 13. DAVID J. MALAN: Da. Sigur, 12, 13, și 14, probabil, doar pentru că interesant chestii se întâmplă pe liniile 11 și 10, așa s-ar părea. Deci, să ne uităm la versiunea 1, care încearcă să îmbunătățească în acest sens. În versiunea 1 a acestui example-- MVC noi vom explica ce înseamnă MVC într-un moment-- dacă mă duc în index, este un fel de Se pare un pic confuz acum. Nu e chiar așa de simplu ca înainte. 

Dar, odată ce începe să citiți-l cu atenție, e destul de simplu ce face. Linia aparent 1 și linia 8 au înlocuit toate lucrurile pe care tocmai ați identified-- deși doar pentru o bună măsură, Am plecat de la ULS acolo doar în cazul în care unele zile, nu a avut o listă de lucruri. Și impun acest lucru este un fel de lire să includă în exemplare C. și paste conținutul efectiv chiar aici, în acest dosar. 

Deci, în header.php, în timp ce s-ar putea deduce din numele său, va fi antetul paginii. E un fel de orfani aici. Ea are doar partea de sus la ea, dar nu e nici mai mult conținut de mai jos. 

Și dacă mă uit la subsol între timp, care era celălalt fișier mentioned-- asta e chiar mai puțin interesant, dar din nou, este comun pentru tot. Deci, acest lucru este notele de subsol. Acesta este antetul. Acesta este fișierul pe care-i schimbare, asa ca de ce nu încercați să factor în caracterul comun cu aceste două linii de aici? 

Dar putem curăța acest un pic mai departe. Am de gând să merg mai departe și deschide Versiune două în cazul în care vom vedea că nu există un nou dosar, helpers.php. Vom vedea despre ce este într-o clipă. Să mergem la index, ca punct de intrare la fel ca înainte. 

Și acum observați eu care necesită helpers.php, nu antet sau subsol. Dar ajutoare este un fel de helpers.c și helpers.h de la PSET 2 sau PSET 3 mult timp în urmă, atunci când de fapt a căuta și găsi pentru că PSET, si tu ai avut tot de codul de sortare și căutarea într-un fișier separat. Asta e ceea ce se întâmplă aici. 

Și acum linia 3 arată un pic diferit. Și e doar un singur rând. Pentru a face acest lucru chiar mai mult clar, aș putea doar face acest lucru pentru a fi consecvent stilistic cu tot ceea ce am făcut. Dar asta nu e adevărat schimbarea funcționalitatea. E doar o linie de cod reale. 

Aparent, există o funcție undeva numit face în afara, și acest lucru este în cazul în care lucrurile a obține destul de puternic. Observați că în interiorul paranteze sale este ceea ce altă piesă de sintaxă? Este, probabil, un pic cam greu de spus, dar observați there's-- Voi pune niște alb spațiu. Nu e paranteze pătrate. 

Și paranteze drepte am văzut un pic în urmă în contextul tablouri asociative, care sunt, din nou, la fel ca tabele de dispersie. Și dacă credeți acum la C, Pentru a argumentelor într-o funcție trebuie să fie mereu la fel. Trebuie să ne amintim ceea ce comanda x este--, y, z sau z, y, X- și va trebui să le ofere mereu în aceeași ordine sau uite-le în sus dacă ați uitat. 

Dar acest lucru pare a fi un mod inteligent a trece o valoare cheie arbitrară perechi în care titlul este numele de un argument în acest caz și CS50 este valoarea sa. Și faptul că am aceste paranteze pătrate înseamnă aici că am putut De asemenea, trece în ceva ca o săptămână este 1 sau 0 sau 2 sau 3. Așa că ne-am parametrizate această funcție în așa fel care poate dura mai multe intrări, dar de acum e doar unul. 

Dacă acum mă duc în helpers.php, observați ce face. Acesta este un pic de noi funcționalități, dar de acum ia doar pe credința că acest lucru este sintaxa cu care defini o funcție în PHP. Tu spui literalmente funcție. Tu nu specificați o întoarcere tip, și asta e consecvent cu Detalii variabila anterioară în cazul în care nu prea puternic tastați. 

Acesta indică doar că, în mod implicit, această are o asociativ matrice ca argument. Și știi ce? În cazul în care utilizatorul nu trece o in, presupune o valoare implicită. 

Aceasta este o caracteristică care C nu are pentru noi, ceea ce este frumos, pentru că acum date, chiar dacă nu dau nimic, va fi o matrice ci unul gol. Și, ca o paranteza, extract doar face ceva funky, în cazul în care este nevoie de toate cheile de la această tablou asociativ, toate lucrurile ai putea pune între paranteze drepte, și creează variabile din ele astfel încât să putem avea în cele din urmă acces la acestea în footet.php și header.php. Asta e un pic abstract, Să-mi să subliniez acest lucru. 

În index.php, observați că eu sunt care trece într-o pereche valoare-cheie din titlu cu o valoare de CS50. Dacă acum mă uit la helpers.php, observați că RenderHeader Se extragere că datele pe care am trece în, și apoi necesită header.php. Ceea ce am făcut este un fel de om sărac punerea în aplicare acum de mai jos. 

Dacă aș deschide header.php, Notă că eu nu mai am greu codificate CS50 cuvânt în acest fișier antet. Am pus acest adevăr atroce funcție numită, caractere speciale HTML, acolo. Dar observați ce am făcut. Am deschis HTML. Atunci am cap deschis și titlul deschis. 

Și apoi în interiorul a titlului de deschis și Tag-uri apropiate, am un pic de cod PHP. Iar acest lucru este un frumos dar de sintaxă, ceea ce înseamnă doar ecou afară. Aceasta înseamnă literalmente asta: ecou following-- dar acest lucru este mai sexy de a scrie. Ecou din titlu care a fost adoptată în. 

Dar ce crezi HTML char special este vorba, mai ales dacă aveți ceva experiență în HTML? Ce caractere pot fi periculos pentru a trece într-o pagină în cazul în care sunteți generatoare de dinamic pagina de web cu cod ca aceasta? Lasă-mă să merg la acest dosar, versiunea doi, și a vedea dacă nu pot induce acest lucru. 

Versiunea doi este aceasta. Și observați tot este bine, funcționează bine. Dar să presupunem că mă duc în index.php și Am precizat că titlul de pagina mea nu este CS50. Este placuta deschis alerte de script salut lume, aproape citat singur, închidere paranteză, punct și virgulă, Suport deschis, script-ul slash. 

Script-ul, cum vom a se vedea în cele din urmă, este o etichetă pe care le puteți utiliza pentru a utiliza de un alt limbaj de programare numit JavaScript in interiorul unei pagini web. Și acum observați logica aici. Aici este o cheie numit titlu. Iată că e valoare în adâncime nebun acum. 

Dar dacă mă duc la ajutoarele de pagină sau, mai degrabă, pagina antet, Sun această funcție pe acest titlu în primul rând. Deci, dacă am reincarca acum această pagină, am a se vedea acest lucru, ceea ce pare ridicol, dar e sigur. Pur și simplu pare stupid. 

Dar să presupunem în schimb Am uitat acest lucru. Și marca cuvintele mele, un număr diferit de zero de va uita să facă acest lucru și veți obține niște harnic elev sau un prieten vine la tine, la târg CS50 sau anonim pe timp de noapte poking în jurul valorii de pe site-ul tau și, în esență, injectarea de cod fără știrea voastră în site-ul dvs. într-un fel. 

Pentru că dacă pur și simplu am scuipat din titlu aici și titlul there-- bine, în cazul în care titlul propriu Se pare ca acest lucru și PHP ca o limbă care poate scuipa din alt text limbi, acest lucru se întâmplă literalmente pentru a înlocui această etichetă cu, desigur, ceea ce mi-am pus în altă parte. 

Așa că, dacă acum, intră aici și reîncărcați după desfacerea acestor mecanisme de siguranță, acum am salut lume aici. Acum, asta nu e tot atât de mare de o a face, dar ai putea face ceva un pic mai mult rău intenționat aici, ca și cum nu există alte tags-- așa cum vom vedea când vom cheltui mai mult timp în JavaScript-- ca locație dot href devine, citat, citatul, HTTP business.com, dar opusul care de ieri. Și acum vă poate induce un web Pagina a merge de fapt, imediat la aceasta pagina web aici. 

Și, de fapt, nu vreau pentru a merge chiar la business.com pentru că nu vreau să știe ce este asta. Dar aceasta, de asemenea, se va declanșa cod care urmează să fie injectat în această pagină. Deci, aceasta este doar să spun că, chiar dacă suntem introducerea super-devreme pe unele dintre aceste structuri mai complexe, totul este spre un scop de a face sigur acest cod nu este exploatat. 

Deci, acum un al treilea versiune aici. Se face un pic crescator. Nu am într-adevăr like-- partea anal de mine a fost obtinerea un pic deranjat de fapt că am o funcție numită RenderHeader și RenderFooter care au fost aproape identice. Deci, m-am gândit, de ce nu face Am parameterize aceste funcții în doar unul numit face, l-au să ia un al doilea argument cum ar fi numele șablonului, în finală a render-- fie antet sau subsol? Și apoi, eventual, dacă vreau pentru a trece în niște perechi de valori-cheie ca și cum aș face pentru titlu header dar nu pentru subsol, Am putea face asta. 

Și așa că acum, dacă mă duc în helpers.php, e un pic mai complex. Și voi val mâinile mele de la detalii, dar e doar o singură funcție. Așa că e un pas spre un design mai bun. 

Putem lua acest un pas mai departe. Dacă mă duc în al patrulea mea Versiunea de acest lucru, observați acum care fac ceva chiar mai mult un fel de criptice. Și știu că acest lucru este o lot pentru a absorbi dintr-o dată, dar suntem doar un fel de curățare lucrurile. Acum am pune tovarășii mei fișier într-un folder numit includes-- doar o arbitrar utilizatorului în cazul în care vreau să pun lucrurile că vreau să include-- și apoi restul este aceeași. 

Dar dacă mă uit acum la gedit, Notă că am scăpat de toate aceste alte fișiere și n-am le-a mutat, de exemplu, în aici. Și apoi în șabloane, Am acest aici, de asemenea. Și astfel aceasta este tot acum spre un pas a folosit un model de design mult mai bine. Și noi suntem foarte repede de gând să se mute departe de la funcționalitatea implicit PHP, care am început aici cu, în cazul în care tocmai ați amesteca PHP, și HTML, CSS și dumneavoastră, și pe care tocmai ați scuipat afară și tu du-te despre drumul tau. Aceasta nu va fi foarte ușor de întreținut. La fel ca în C, am inceput sa folosesc mai multe fișiere și funcții multiple și factoring lucrurile asta. Vom face același lucru aici. Și, de fapt, în a cincea și ultima Versiunea aici, am făcut un alt lucru. Puteți utiliza chiar punct punct, care, din nou, este doar directorul părinte. Pentru a fi și mai conștient de securitate, pentru că dacă mă uit la ascultare aici pentru al cincilea și versiunea finală, aviz că am un director numit aici publică, iar apoi pe același nivel, ca să spunem așa, Am include și șabloane și apoi că fișier text readme. 

Și motivul pentru care l-am structurat mi place asta: și atât de multe web gazde, în special a celor 5 dolari o cei luni sau cele 10 dolari pe lună, dacă ați avut vreodată una dintre acestea services-- ce atât de mulți dintre ei fac este că se așteaptă doar să arunce toate fișierele într-un singur director, așa cum am făcut-o deja cu acest lucru foarte prim exemplu. 

Dar, de îndată ce începe construirea mai mult site-uri sofisticate care stochează doar Date îți pasă și la fișierele pasă, organizarea de fapt lucrurile corect și cu mai multă securitate conștiință în minte poate vom începe să-și apere împotriva tuturor prietenilor pe care le au în cadrul sau în afara de această clasă care, de îndată ce începe a face programe de tine pe web, sunt de gând să înceapă cules pe tine și pe ele. 

Și așa ne vom uita în cele din urmă la acest design. Aceasta este doar o imagine care descrie următoarele. Ne vom pune toate noastre programare logică în unul sau mai multe fișiere, și vom începe doar de asteptare aceste controlere. E în cazul în care creierul site-urile noastre sunt de fapt. Apoi, vom au vederi și opinii sunt la fel de simplu ca doar separat files-- numit template-uri, de multe ori. Ei au doar estetica pe pagina mea, ceea ce vreau paginii pentru a privi like-- culorile și aspectul și pozițiile toate variabilele. 

Și apoi mai interesant că vom ajunge în cele din urmă la este modelul, care va fi doar Cuvântul ne palmă pe alte tehnologii pe care le aduce în imagine, cum ar fi baze de date reale, astfel încât atunci când doriți pentru a salva informații, nu doar trimite un e-mail pentru Proctor sau la tine, de fapt se păstrează într-o bază de date folosind un alt limbaj cunoscut sub numele de SQL. Și așa vom pleca astăzi aici și ridica cu acest miercuri și să introducă baze de date atunci. 

[MUSIC JOC]