>> Pentru a începe să pod ce ar putea fi singura ta experiență
cu programare web, ceea ce am gândit să faceți este să fure un cuplu
de exemple pe care le poate fi văzut în 50
dacă ați luat-o în trecut an, doi sau poate să nu aibă
dacă l-ați luat în urmă cu câțiva ani
că sunt pași mici spre o piridină, stiu ca MBC,
Model View Controller, și ce înseamnă acest lucru?
Acest lucru este vom vedea din nou, probabil, este doar un mod de pornire
pentru a curăța proiectarea unor piesă web-based de software,
sau ar putea fi partea de client bazat, de asemenea, dar o vom folosi
în contextul PHP, astfel încât să putem începe
pentru a face mai complex proiecte și sortare
de tipuri distincte diferite de cod în aplicare;
în particular, astfel încât atunci când ne avea mai multe persoane care lucrează
pe un proiect este mult mai ușor pentru a desena linii.
Deci, în primul rând, haideți să aruncăm o uita-te la un mod suboptimal
de punere în aplicare a ceva.
Să presupunem că am vrut să fac un super- site-ul curs simplu pentru 50
sau orice altă clasă, și clasa are lucruri
cum ar fi prelegeri și o programă.
Am putea face ceva ca un tag-ul H1 în partea de sus a paginii mele
și o listă neordonată cu elemente de listă li în vederea
pentru a avea doar o listă cu marcatori de opțiuni de meniu, așa super-simplu.
Deci, cum am putea face asta?
Ei bine, lasă-mă să merg în mea fereastră de terminal aici,
și observați că am o citire mine și ne vom lega de acest cod
pe site-ul cursului într-un pic,
și observați că am index punct htm - index punct php.
Deci, lasă-mă să merg mai departe și deschide că, și destul de sigur că e un fel
din prostie că acest numit chiar php
pentru că tot ce am este un comentariu php
și apoi orice altceva este pur și simplu cod html prime.
Dar, din nou, aceasta este versiunea de zero,
astfel un pas spre ceva mai interesant,
dar observa am codificate greu CS50 ca titlu, CS50 în H1,
și acum am prelegeri link-ul,
acum am link-ul de programă.
În regulă, astfel că nu par toate că nerezonabile
până să urmați un link ca prelegeri, și-ți dai seama
că bine că e diferit de conținut, dar e un fel
de același lucru; este un titlu a paginii și lista neordonată.
Am faceți clic pe săptămână de la zero, anul trecut, și e un fel
de același lucru, un h1 tag-ul și o listă neordonată
și apoi în cele din urmă am faceți clic pe acest lucru, și am ajunge la niște frunze,
care este slide-uri de la că curs special.
Deci, ceva mi-a spus Sunt pe cale de a se piti.
Dacă am deschide prelegeri dot notificare php
că e destul de mult copie și lipiți de la fisierul anterior;
Am schimbat doar titlul h1, și ceea ce aceste link-uri sunt.
Mai rău încă, dacă mă duc în săptămâna de zero punct php,
E același loc de muncă copy paste
cu doar un pic de conținut optimizat.
Deci, cu siguranță există o oportunitate aici pentru a îmbunătăți,
și cu siguranță acest lucru ar trebui să să fie o regulă bună de degetul mare;
oricand te simti te copierea
și lipirea ceva mai mult decât poate o dată,
steaguri roșii ar trebui să sperăm că începe să fie schimbat.
Dar cum putem merge despre îmbunătățirea aceasta?
Ei bine, există câteva moduri, și tehnicile care le puteți utiliza
în php au evoluat în timp, dar hai să încercăm asta.
Lasă-mă să intru în versiunea unul, astfel încât următoarea formulare a acestui,
și lasă-mă să încerc să curățați-l un pic.
Drept, unul din PHP simple mecanisme
pentru rezolvarea acestei probleme este vechi de școală necesita funcție,
ceea ce face destul de mult o copie și pastă a conținutului
de unele fișier aici, ca c este ascuțit includ,
și alte limbi au constructe foarte similare.
Deci, se pare un pic ciudat acum,
cu siguranta nu este o finalizeze căutarea pagină web,
dar, probabil, ceea ce este în interiorul de antet punct php.
Toate celelalte lucruri, corect, tag-ul HTML, tag-ul cap,
tag-ul titlu, toate lucrurile că a fost de mai sus esența principal
a paginii, care este, fără îndoială, doar lista neordonate,
și în subsol este, probabil, cum ar fi tag-ul caroserie închisă,
tag-ul html închis de; destul de neinteresant
dar lucruri redundante.
Bine, și sigur suficient dacă mă duc
în antet punct php este doar un fel de fragmentul orfan
din partea de sus, și dacă am du-te în subsol punct php,
e orfani fragment din partea de jos,
și eu sunt, folosind aceleași fragmente din alte fișiere mele,
cum ar fi prelegeri dot php.
Bine, deci ce e mai bine despre acest lucru i-ai spune?
Da?
>> Simplitate.
>> Simplitate?
Nu știu acest tip de priviri o mult mai infricosator pentru mine acum, nu?
>> Dacă aș fi vrut să vă schimbați antet, nu ar trebui
să-l schimbe în toate anterior ca fișiere.
Tocmai ai schimba în antet.
>> Exact, așa că poate în acest sens, este mai simplu,
Poate mi-ar încadra ca este doar că e mai ușor să-l actualizeze.
Este poate un pic mai curat
pentru că vă actualizați se într-un singur loc.
Deci, asta e destul de convingătoare; ceea ce este un dezavantaj
acestei abordări sau care-i problema rămâne
că nu am cu adevărat rezolvat?
Da?
[Comentariu Off Mic]
Da, exact, vreau să spun, eu sunt încă copiere și lipire;
este un pic mai puțin, dar numai eu tras două dintre aceste fișiere,
și ei destul de mult încă arăta identic.
Nu a fost o nevoie de cel sus, o cere în partea de jos,
și un neordonat Lista de la mijloc
care în sine a fost încă structural la fel.
Mai mult decât atât, observa acest lucru, dacă am de fapt poti vedea asta exemplu,
lasă-mă să merg la versiunea One acum,
și observați am CS50 Curs Programa.
Uh oh, CS50 Săptămâna Zero Săptămâna Unul și CS50 miercuri vineri,
Am un fel de tăiat un colț.
Ceea ce a fost - care au fost aceste titluri anterior?
[Comentariu Off Mic]
Ei au fost ca prelegeri în Săptămâna Zero, ca a fost un fel
de sexy, și este de fapt a avut un dinamism să-l,
și acest lucru este un fel de - Sunt doar un fel de punting acum
și chiar presupunând că tot site-ul este CS50
și funcționează bine, dar e cu siguranță nu la fel de elegant
sau ca un fel de drept transmite cum a fost odata,
dar care are sens, pentru că daca te uiti la index dot php
și prelegeri dot php și săptămâna punct php la zero,
toate acestea sunt, inclusiv același fișier,
așa cum putem îmbunătăți acest lucru?
Care este urmatoarea iteratie a acest cod, probabil, de gând să faci?
[Comentariu Off Mic]
Da, exact, așa că, dacă - și lasă-mă să rezuma
cu ne-o dorim, în esență, pentru parametrizarea că antet
așa că da, există încă o tag-ul H1 greu codificate, dar lucrurile
în între, aer liber și tag-ul de aproape,
este probabil dinamic, și care vine de la altceva.
Poate "Get string" sau lucru după semnul de întrebare
în URL-ul a fost undeva altceva, așa că haideți să aruncăm o privire.
Deci, dacă mă duc în versiunea Two,
acum observa că am primit un fișier suplimentar,
se pare ca ajutoare dot php.
Eu nu știu cu adevărat în cazul în care a începe așa că am de gând să înceapă doar
la index ca și întotdeauna, și acum observați că este un pic diferit,
asa ca am luat o linie necesita
în partea de sus care necesită ajutoare dot php,
dar eu pot numi ce vreau eu,
dar acum observa linie trei există un apel de funcție
pentru a face antet, care este interesant decât în ​​măsura
ca ceea ce se trece în aparent, titlul personalizat
pentru aceasta pagina special.
Între timp, există face subsol în partea de jos,
și nu am nevoie de nici o parametrizare nu este doar
un subsol, dar acum se pare că există
pentru a fi un pas spre o mai bună soluție, face antet are,
și ceea ce face piata paranteze indica pentru cei
care nu au văzut php vreodată sau într-o vreme?
[Comentariu Off Mic]
Da, este un tablou.
Este un tablou asociativ sau un hash care asociază chei
cu valori; e ca Java Script-uri, notație obiecție,
sau alte limbi, syntaxs similare.
Bine, deci ceea ce este în ajutoare dot php?
În ajutoare dot php este doar o pereche de funcții,
face antet și subsol face.
Deci, un cuplu de detalii în cazul în care mai puțin familiarizați,
astfel încât în ​​primul rând faptul
care face antet are o argument de date care este aparent
atribuit gol matrice nu înseamnă ce?
Ce înseamnă a face egali Suport deschis închis suport
ca un parametru în php?
Este valoarea implicită.
Deci, dacă eu nu trec în matrice sau orice fel de argument
la antetul face sau face funcția de subsol,
Pot cel puțin încredere ca autor al acestor funcții
că datele vor minim fi un array gol;
acesta nu va fi nedefinit sau fals, sau ceva de genul asta,
acesta va fi exact ceea I-am dat ca un default.
Acum, acest lucru este un pic de un fel de un mod hackish de încărcare simboluri
în spațiu numele dvs. ca să spunem așa,
dar funcționează destul de bine spre acest scop
de punere în aplicare a propriului nostru fel de motor de templating om sărac.
Bine, există o mulțime de instrumente de acolo pentru Python Ruby
și php pe care le da capabilități templating
și că este exact ceea ce ne dorim.
Vrem un șablon care are o tag-ul deschis H1, un H1 închis etichetă,
și un fel de loc titular la mijloc,
și vrem să umple cele loc titularilor prin intermediul acestei funcții,
astfel încât această funcție extrage doar așa se întâmplă
pentru a vă oferi următoarele capabilități.
Dacă v-ați luat o asociativ de array cu perechi de valori-cheie
cum ar fi foo este egal cu bar, extract va crea o variabilă locală
numit semn eficient dolar foo și îi conferă o valoare de bar
așa că explodează asociativ ta array de perechi de valori-cheie
în noi variabile cu valorile corespunzătoare.
Și apoi cere antet punct punct php este la fel ca înainte,
deci ce am, probabil, va pentru a vedea în interiorul de antet punct php?
Este, probabil, are ca tag-ul H1 și tag-ul de aproape; ceea ce se întâmplă
să fie în interiorul de ea probabil în între ea?
[Comentariu Off Mic]
Exact, nu e, probabil, unele mențiune de dolar titlu semn
și destul de sigur dacă am mări în acest există tag meu titlu,
există tag-ul meu H1, și în interior din aceasta este o inserare dinamică
de titlu semn dolar, dar doar pentru o bună măsură,
Fac asta html special taxa atroce numit
funcție, dar este util; ce face
sau ce nu-l protejează împotriva?
Aceasta este de fapt o soluție pentru o amenințare pe care aluzie;
ne-ar fi dus la.
[Comentariu Off Mic]
Exact, așa că, dacă un malware utilizator sau o victimă neavizat
de un atac de tip phishing clic pe un link
care în sine a avut un semn de întrebare și ceva de genul foo egal,
și apoi valoarea de foo a fost de fapt
ca suport deschis script, suport închis,
și apoi unele cod JavaScript;
dacă nu te-am sunat această Funcția principală lung,
v-ar fi de fapt infectarea html prime în pagina dvs. de web,
al cărei rezultat este că ați putea fi păcălit.
S-ar putea fi pacalirea utilizatorului în executarea de cod JavaScript
că el sau ea a făcut de fapt, nu intenționează.
Și chiar dacă, de obicei, tu doar te doare,
ca doar stii o prost este de gând să tastați
în script suport deschis, suport închis, și spune alertă
sau ceva de genul asta și de a face el sau ea
cu unele rezultate ciudate, daca te lasa pacalit
într-un click pe un link care are JavaScript brut încorporat în ea
ca valoare de atribut care,
puteți, printre altele, fura cookie-urile cuiva
pentru că există o proprietate numit documentul dot cookie
în JavaScript, care vă permite pentru a apuca cookie de sesiune a unui utilizator,
și dacă vă amintiți ceea ce un sesiune atac deturnarea este,
Pe scurt, asta e una mod de a păcăli pe cineva de fapt,
în oferindu-vă că virtuală ștampila de mână și apoi luând
pe contul lor de Facebook sau un alt tip de cont.
Bine, deci acest este un pic cam lung,
dar e doar folosind cod html crud.
Acesta este echivalentul de asteptare ecou
sau imprima în mod eficient, și ne introduce în esență,
care dinamic.
Deci, ce mai rămâne aici?
Ei bine, lasă-mă să merg în Trei versiune aici,
și vom vedea o oarecum diferit -
același aspect fișier exact dar aviz
că de această dată vom generaliza antet și subsol
ca template-uri, astfel încât ceea ce vreau să spun cu asta?
Care este singurul lucru asta e diferit aici?
Ce sa schimbat de atunci ultima versiune?
Subtil, dar este, fără îndoială, doar un design mai curat.
Da?
[Comentariu Off Mic]
Da, există doar un singur standard, face funcția;
Nu am face caz special header sau footer face,
ambele din care, dacă rechemare de ajutoare punct php,
suntem destul de mult identice cu excepția pentru numele lor
și template-uri au inclus.
De ce nu doar parametrizarea funcția face
și să ia un argument, care este numele șablonului,
și un al doilea argument opțional care sunt perechile de valori cheie
pe care doriți să conectați inch
Deci, dacă acum mă uit la ajutoare dot notificare php
că am fi o pic crescator acum.
Sunt de fapt de verificare nu fișier există și în cazul în care merge atât de departe
și-l cere; doar în cazul în utilizatorului accidental tipurile
în unele nume șablon fals te Nu vreau să arunce o eroare
în programul astfel încât să putem minim ele face acest lucru
favoriza aici.
Bine, dar putem ia aceasta un pas mai departe?
În această versiune aici observă următoarele.
Tocmai am scris ls, și ce sare imediat
out este oarecum diferită.
Deci, există două directoare, dreapta,
și așa mai departe acest lucru este acum un pas spre ceea ce va fi în cele din urmă o mai
cadru adecvat.
Aceasta este un fel de desfundat de mine să fie aruncat tot
conținutului meu în interiorul unei directorul public accesibil
care literalmente se numește publice.
Și chiar dacă, din păcate, o mulțime de cadre,
cele vechi mai ales, și chiar unele posturi de web,
Vis Host printre ele, forțele vă pentru a pune toate fișierele
în echivalentul unui director public chiar
dacă fișierele s-ar putea includ parole de baze de date
și nume de utilizator sau alte astfel de acreditări,
care nu e deloc bun design.
Mult mai bine este pus numai
în directorul publice ceea ce nu are absolut
să fie accesibilă utilizatorului, și orice altceva
ca esti, inclusiv ca ajutoare dot php,
nu există niciun motiv că ar trebui să fie accesibile prin intermediul unui web
Browser-ul cu un URL.
Ar putea fi complet inofensive în cazul în care utilizatorul dorește să vadă poate
care perechi, dar e doar principiul acesta,
și Doamne ferește de fapt nu au un nume de utilizator sau parola;
tu nu vrei utilizatorul accidental
sau fiind în mod intenționat capabil să-l acces.
Deci nu suntem chiar la un abordare perfecta aici,
dar observa următoarele acum.
În index punct php, observați că Sunt încă necesită ajutoare,
dar o fac într-un mod că eu sunt un fel de organizare a tuturor
din fișierele pe care vor fi incluse
într-un subdirector numit convențional include,
și apoi am face apel pentru antet și subsol ca înainte.
Deci, singurul lucru Am facut un fel
a reorganiza directoare mele pentru a fi un pic mai mult anal
despre structura fișierului.
Dar dacă acum vom merge la acest al cincilea exemplu,
observa aici că noi acum au un trio de dosare,
iar acest lucru este un pic înșelătoare în acest moment
deoarece pentru simplitate de dragul de clasă,
Tocmai am aruncat totul
în John Harvard Director publice doar
astfel încât să putem naviga prin un browser, dar aviz -
ignora această parte pentru o clipă,
faptul că sunt acolo.
Observați că am trei subdirectoare: publice,
template-uri, și include.
Ideea acum este că într-o configurat corect serverul de web I
ar spune că acest Apache site-ul are la dispoziția publicului
fișiere aici, și nicăieri în altă parte.
Deci, ce fișier crezi Mă duc să văd în interiorul
publice în cazul în care am de tip E?
Care e cel puțin un fișier asta e, probabil acolo?
[Comentariu Off Mic]
Bine index punct php, și ceea ce fișier nu este, evident,
acolo, printre altele?
Ca ajutoare dot php, header dot php, subsol punct php;
toate fragmentele, toate funcționalitățile
care nu are într-adevăr nevoie de să fie accesibile publicului,
aceasta trebuie să fie ușor de utilizat de fișierele
care sunt accesibile publicului, dar ei înșiși,
nici un utilizator are nevoie pentru a vedea sau cor o adresă URL pentru ajutoare dot php.
Observați că în schimb, dacă mă duc
în include există ajutoare dot php,
și dacă mă duc în șabloane,
nu e subsol și header punct php.
Sincer, am fi putut pune le în același director,
dar eu încerc să fiu chiar mai multe anal despre păstrarea fișierelor
că sunt doar un fel de template-uri statice diferit
de la fișiere funcționale ca ajutoare dot php,
și eu sunt doar aderarea la unele convenții destul de comune
asteptare directoarele include și șabloane.
Deci, singurul lucru care schimbat apoi este din nou calea.
Dacă vom merge aici observa că am acum doar
să includă un director relativă,
dot dot slash include ajutoare dot php,
sau pot fi un pic mai mult corespunzătoare și de fapt a face ceva
ca aceasta, php și o mulțime
de limbi au aceste simboluri speciale
care reprezintă directorul de fișiere curent,
astfel de subliniere subliniere dir subliniere subliniere reprezintă
indiferent de director este din acest fișier,
și așa că, dacă doar înlănțui cu operatorul punct, că,
care ar putea atinge același rezultat,
și tinde să fie un pic mai mult robust pentru că puteți obține
în situații cu relativă directoare au fost doar ca punct
sau dot dot poate de fapt vă aduce la locul nepotrivit,
astfel încât acest lucru tinde să fie un pic mai robust.
Bine, deci ce deși mai rămân?
Ce face încă nu ca despre asta?
Ce ar putea fi îmbunătățit și tu a comentat pe ea mai devreme cred
că există încă unele probleme?
[Comentariu Off Mic]
Drept, cu siguranță, nu avem pentru a începe să scrie cum ar fi site-uri
care arata ca asta, nu?
Acest lucru nu se simte tot atât de mult mai bine,
există încă Copy Paste.
Eu încă mai au necesita linie în partea de sus.
Mai am face antet face subsol.
Există o mulțime de duplicare.
Da?
[Comentariu Off Mic]
Da, exact, așa că am luat un pas spre un fel de divizare
sus "c" de la "V", așa MVC este modelul View Controller;
controler este un fel de creierul a cererii.
Modelul tinde să fie date sau unele funcționalități în comun,
și vedere tinde să fie estetica, șablonul,
așa că am făcut un pas în direcția separarea "c" de la "v"
pentru că noi acum, cel puțin au Directorul acest șablon,
dar chiar și acolo ne-am în esență, au un controler pentru fiecare fișier.
Acesta nu arata ca nu exista mult logica merge pe aici,
dar index dot php este în mod eficient un controler.
Atunci când vizitați un URL și se încheie în index dot php,
toate logica care pune în aplicare această pagină este corect
în index dot php, și aceeași pentru prelegeri dot php.
La fel de punct php saptamana zero.
Deci, ne-am cam strone noastre logică peste tot,
și se simte ca acest lucru nu se întâmplă
la scară foarte bine, odată ce vom nu au patru, dar patruzeci de pagini
în cazul în care fiecare pagină începe cu mi copierea o versiune mai veche
a fișierului și doar tweaking unele
a conținutului în interiorul său.
Așa că am luat doar un pas spre acest lucru,
și unul dintre instrumentele vom introduce
miercuri este o Framer numite "Laravel"
iar acest lucru este foarte cadru php populare,
altele includ "Fuelphp."
Există o unul mai vechi numit "CodeIgniter."
Nu e unul numit "Cake".
Nu e unul numit "Symphony".
Adică, dacă ai Google cadre php,
există o atroce număr de cadre, cum ar fi
că oamenii care a implementat.
Laravel este unul dintre mai sus și veniți;
este una dintre cele mai curat cele, și veți găsi
că în cele din urmă ajută salva destul de un pic
de timp, chiar dacă nu există un pic de o curbă de învățare,
dar care ne va ghida te peste miercuri.
Mai mult decât atât, vom prezenta ceea ce se numește o "ORM."
În acest caz, vom folosi ceva care vine
cu acest cadru numit Laravel.
Se numește "Elocvent" și acest lucru este doar un strat de cod
care vă permite să printre alte lucruri vorbesc cu baze de date.
Și aici, lasă-mă să fure un exemplu, care este fie recent
sau o intoarcere pentru unii dintre voi de la 50.
Dacă ai lua 50, și ai făcut "CS50 Finance,"
s-ar putea aminti de fișiere care scrii sau rescris care arata
ca aceasta, aceasta a fost de conectare php punct, iar la momentul respectiv,
mai ales din moment ce nu petrec prea mult timp
pe fundamente php de timpuriu,
acest lucru ar putea avea în sine a fost destul de provocator,
și așa am făcut, de fapt, încerca să simplifice proiectare.
Noi nu prea separat "M" de la "V" de la "C", tot atât de mult
pentru problemele care "Șapte CS50 Finance,"
dar observa un lucru că ar trebui să sperăm înceapă
pentru a freca curând greșit Astfel, este ceva de genul asta.
Adică, nu numai că a fost acest conecta php dot un controler.
Acesta a fost, de asemenea, vorbind direct
la o bază de date specific folosind sequel, care nu se va
la scară foarte bine atunci când de a începe să lucreze cu un
sau doi sau trei parteneri.
De exemplu, în cazul în care unul dintre parteneri este responsabil
pentru crearea de dvs. tabele de baze de date și vin
cu indici de și imaginind
ce ar trebui să fie cheia, chei primare, chei străine,
și toate acestea, decide cu privire la numele de masă și toate astea.
Acum ai o altă persoană în grupul trebuie să știe tot
a deciziilor de proiectare el sau ea a făcut, și acum ai nevoie de
la codul de greu aceste decizii în fișierul dvs., asa ca acum el
sau ea este destul de mult constrâns
nu pentru a schimba din nou aceste nume de tabelă.
Nu din nou pentru a schimba aceste nume depuse
fără a vă informa.
Mai mult decât atât, nu se poate într-adevăr lucra cu ușurință pe același fișier
fără a se lovi între ele, dacă el
sau ea este în mod constant schimbare de nume,
și aveți vechi versiuni și așa mai departe,
Deci, aceasta este doar invitat o mulțime de dureri de cap.
Mai mult decât atât, așa cum vom a se vedea înainte de mult timp,
chiar dacă nu ai nevoie de
pentru a face deosebit de interogări sofisticate aici,
odată ce începe cu multiple mese, două mese, trei, cinci,
zece mese într-o MySQL sau în general, o bază de date relațională,
trebuie să adere la aceste tabele de multe ori în cazul în care familiar, și aveți
de a combina date de la una cu cealaltă,
și sincer întrebările dumneavoastră sequel începe pentru a obține mai mult, și mai mult,
și mai mult, și mai mult complexă, și tocmai începe
pentru a obține o mult mai ușor pentru a face greșeli
și mult mai greu de a obține lucrurile.
Și astfel de instrumente, cum ar fi Elocvent și ORM se întâmplă
pentru a ne ajuta sa modeleze datele noastre și este, de asemenea, merge în mod eficient
pentru a genera codul de care ne-am nevoie pentru a începe interogarea bazelor de date
în moduri mai sofisticate.
Deci, dacă ai o cheie primară pe aici și o cheie externă
pe aici, tot ce ai nevoie să faceți este să învețe că ORM,
Obiect Relația Mapper, ce această relație este
și-l va da seama ce interogări pentru a executa pentru tine.
Și numai în rare cazuri, ai nevoie
pentru a scrie în mod necesar cod sequel-te.
Dacă doriți cu adevărat să ton ceva fin,
dar pentru cea mai mare parte, se poate doar începe tratarea persoanelor
în bazele de date ca fiind adevărate obiecte și nu aceste rânduri plate
de care aveți nevoie într-un fel de reconstrui și de normalizare.