[Muzika] DAVID Malan: Kjo është CS50, dhe ky është fillimi i javës së tetë. Dhe ne jemi të ngacmuar kështu për të mirëpritur prapa, surprizë e madhe, Ramon vetë CS50-së Galvan, një zyrtar i lartë i cili ka qenë në rritje shpenzimet e disa muajve të fundit që nga korriku në LA, në Hollywood, fjalë për fjalë duke punuar në një TV të re shfaqje të quajtur Colony, krijuesi i cili është në fakt një shap vetë Harvardit. Dhe kështu që ne jemi shumë të ngazëllyer për të parë këtë Debutimi në rrjet SHBA këtë janar. Pra, të qëndrojnë tuned për atë, dhe për më shumë Ramon për javët që do të vijnë. E di tani se fundi është afër. Dhe çfarë kjo do të thotë është se nuk ka gjithçka që la shumë prej CS50, i trishtuar për të thënë. Ne kemi vetëm tre probleme vendos left-- ka Problemi vendosur six-- e cila është në duart tuaja tani ose së shpejti do të jetë, për shkak më vonë këtë week-- ka për qëllim për të kapërcyer botëve tona të vija e komandës, ku ne kemi kaluar shumicën e kohës sonë përdorimit C, dhe bota e programimit web. E pra, ju do të shihni shumë ide huazuar nga puna command line, por edhe shumë i ri dhe ide interesante që gjithashtu do të jetë i lidhur ngushtë për aplikacioneve mobile dhe për teknologji, më përgjithësisht, me të cilën ju djema janë të gjithë të njohur në ditët e sotme në laptopët dhe telefonat dhe si. Pra, ju do nuk të zbatojë një faqe web, ose një faqe interneti në vetvete, por një web server aktual. Ju do të shkruajë pjesën tjetër të një web server i shkruar në C, qëllimi i të cilit në jetë është për të marrë HTTP kërkesa, ato zarf virtuale ne vazhdojmë të flasim në lidhje me, dhe në fakt të përgjigjet ose me disa content-- statike si një dot HTML file, ose një pikë JPEG ose ndonjë numër tjetër të dosjeve, apo edhe një skedar PHP ku web tuaj server do të interpretojë atë PHP Kodi dhe nxjerr nga goja e rezultateve. Tani, ne kemi dhënë me mjaft i kuadrit për it-- vërtetë Kodi i Shpërndarjes për problemin vendosur gjashtë është mbi 1000 rreshta të gjatë, një shumë e cila është e komente, të jetë fair-- por kjo është për qëllim me të vërtetë të jetë një mundësi për të marrë në duart tuaja të pista zhytjeje në një projekt mjaft të madhe se ne kemi shumë specifike gdhendur nga copa e për ju, në mënyrë që me të vërtetë kur ju dilni CS50 dhe hyrë në botën e vërtetë të programimit dhe duan të ujit në çdo numër të projekteve, ju do të keni shumë më e madhe rehati shkarkimit disa burim kod, disa burim të hapur projektit në web, dhe zhytjen në dhe duke e bërë Ndryshimet që shihni të arsyeshme. Problemi vendosur shtatë do të jetë për duke e bërë vet web-bazuar kërkesën tuaj që merr të dhëna dhe dinamike prodhon dalje dinamike në formë e një faqe interneti etrade.com-si. Dhe problemi vendosur tetë do të fokusohet në ende një gjuhë tjetër të njohur si JavaScript. Ndërkohë, në finale Projekti është në horizont. I ashtuquajturi para-propozim është për shkak një javë nga sot. Para-proposal-- sipas specifikimit, e cila është në website-- CS50 e është një mundësi mjaft rastësor për që ju të dërgoni një email mjaft të ngjeshur për shokët tuaj të mësimdhënies vetëm për të informoj atë ose të saj të asaj që ju jeni duke menduar për të përdorni atë si një bord. Dhe kanë një mendje e shëndoshë check-- nëse ju jeni duke menduar për thumbues off too shumë ose ndoshta shumë pak, ose ndoshta ju nuk keni ide whatsoever dhe duan të angazhohen në një bisedë. Pas kësaj është një propozim dhe raportin e statusit, e ashtuquajtura hackathon CS50 këtu në Cambridge për Harvardit dhe Yale nxënësve njësoj. Projekti përfundimtar të zbatimi është pastaj për shkak. Dhe pastaj një panair CS50 këtu, në Kembrixh, si dhe një tjetër në New Haven. Pra propozimin, hidhini një sy në Faqja e internetit për këto veçoritë. Por më excitingly, gjithashtu, është një mundësi për të marrë në duart tuaja të pista, dhe mendjet tuaja të hapur në një tërësi bandë e temave dhe mjetet dhe teknika që janë ndihmëse për bazë planin mësimor të kursit, por megjithatë të lidhura. Dhe gjithashtu Shkallaret e mrekullueshme për të duke bërë projekte të vërtetë cool përfundimtare që shkojnë përtej materiale ne kemi mbuluar zyrtarisht në problemin e vendos ose në leksion. Pra shkoni në faqen e internetit CS50 e për tërë regjistri i seminareve. Nëse ju nuk regjistroheni ende, kjo është në rregull. Shkoni përpara dhe të nënshkruajë ende dhe ne do të ndiqni me një lidhje të jetojnë streaming, dita dhe koha është në faqen e internetit. Dhe çdo gjë do të jetë regjistruar dhe të vënë në internet në qoftë se ju nuk mund të bëjë ditë të veçanta dhe herë. Sa për çfarë shtrihet përpara thereafter-- mirë, Sigurisht, nuk është hackathon CS50. Kjo foto, kujtojnë, që nga java e zero marra rreth 04:00 një mbrëmje në vitet e kaluara. CS50 Panairi, i cili përsëri do të zhvillohet në të dy qytetet. Dhe pastaj, vetëm për të mbjellë farë, edhe pse ne ende kanë një muaj plus la të semestrit, në qoftë se ju dëshironi të bashkohet me mësimin e vet CS50-së stafi, dhe ju doni të filloni duke menduar për t'u bërë një AK, ose shokët mësim, e di se ne do të fillojmë të flasim më shumë për këtë më vonë këtë semestër. Por foto këtu është shumica e ekipit të këtij viti. Dhe kështu, PHP-- dhe unë ishte aq i trishtuar javën e kaluar se [? Allyse?] Me mirësi shkoi në përpjekjen e gjetjes ne këto props mrekullueshme se nuk e kam të përfundojë duke përdorur, kështu që ajo vërtetë vetëm dukej si kal i trashë që kemi pasur një lopatë ulur këtu gjithë të mërkurën e kaluar ditë, dhe një lugë të vogël. Por kjo ishte metaforike e mia Mënyra e duke u përpjekur për të pikturuar fotografia e pse ne jemi në tranzicion nga C në një gjuhë si PHP. Dhe e njëjta gjë mund të thuhet edhe për ndonjë Numri i languages-- Java, Python, Ruby ose bunches e others-- por ndërsa në C, për shembull, duke shkruar një program në C mund zakonisht të jetë si duke marrë një lugë si kjo dhe gërmimi një vrimë në terren, në rërë apo të fëlliqur. PHP ju lejon të marrin shumë kafshon më të mëdha nga e problemit, shkruar shumë më pak kodin duke përdorur një mjet shumë më të vogël, sepse nuk ka aq shumë më shumë funksionalitetin pieced në. Tani, në qoftë se ne ishim vërtet dramatike, ne do të kemi diçka për të lopatë këtu, por kështu të jetë ajo. Ndërkohë, të tjera metaforë kemi ardhur me është, natyrisht, ju mund të përdorin diçka si një pikëllim për të arritur në diçka si një gozhdë. Por sigurisht, të drejtën mjet për përdorim po ndodh të jetë jo aq shumë Gjuha e quajtur C-- dhe tani unë vetëm i mërzitur [? Sanders,?] Ndoshta, ne do të rregullojmë se later-- kështu mjet i duhur për të përdorur shpesh nuk do të jetë ky mjet niveli më i ulët. Dhe me të vërtetë, C nuk është një gjuhë që shumica prej jush jeni ndonjëherë do të përdorë, ose duhet patjetër të përdorin përsëri. Dhe në fakt, pak secret-- E vetmja kohë I use C vetë është shumë e shumë në mes Shtator dhe dhjetor të çdo rënies semestër. Dhe kjo është për shkak se ne e përdorin atë si një mundësi për të mësuar bazat e programimit, dhe me atë kompjuter bazat shkencore, të dhënat e strukturat, algoritme dhe like-- por shumë shpejt do të ju shohim tani se sintaksë dhe idetë themelor C janë aq mrekullisht transferueshme në më moderne Gjuhë të nivelit të lartë, si PHP dhe Python dhe Perl dhe Java dhe Objektivi-C-- në fakt, jo aq shumë Objektivi-C-- por Swift, këto të reja gjuhë që shumë prej jush do të pastaj njom me ju projektin përfundimtar. Pra, pa zhurmë më tej, le të vërtetë përdorur PHP për të zgjidhur disa probleme. Kujtojnë se në fillim, e fundit javë, ne kemi përdorur vetëm CS50 IDE, kemi shkruar një program të hollë të vogël që vetëm ka thënë: "Përshëndetje Të Gjithëve". Dhe pastaj kam ruajtur atë në një file i quajtur hello.php. Dhe atëherë unë u zhvillua këtë komandë. Dhe pse? Në anglisht, çfarë po ndodh këtu? Çfarë po bëj kur Unë u zhvillua këtë urdhër? Po? Audienca: Ka disa PHP funksion që lexon atë që in-- kupton se. DAVID Malan: Mirë, ka disa funksion PHP-- dhe më lejoni të jem më specifik, ka një program të quajtur PHP, alias Një përkthyes, i cili e kupton përmbajtja e hello.php, dhe e interpreton atë të lartë për të fund, majta në të djathtë, dhe bën çfarë ato komandat thonë. Komandat në hello.php, natyrisht, është vetëm burim code-- funksione dhe variablave dhe sythe dhe si, që ne vetë kanë filluar shkruar në PHP. Por ndryshe nga C, e cila është një gjuhë hartuar, PHP ju shkruani vetëm atë, dhe drejtuar atë. Ju kaloni këtë hap ndërmjetës i konvertimin atë në zero dhe ato, dhe pastaj drejtimin e tij. Dhe kështu ajo që është një kokë kjo? Pse jemi duke lënë mënjanë hapin? Pse gjuhë më moderne kanë tendencë për të kaloni këtë hap? Cili ishte përfitimi? Apo thjesht intuitive? Edhe në qoftë se ne nuk e kemi shkruar shumë PHP më parë, çfarë është e dobishme për të mos hartimin kodin tuaj mendoni ju? Nuk ka? Jo kryerjen? Kruarje kokën tuaj? Po. Audienca: Më shumë dinamike. DAVID Malan: Më shumë dinamik? Çfarë doni të thoni? Audienca: [padëgjueshme] DAVID Malan: OK, mirë, kështu që në varësi të dhëna, ju nuk keni për të përpilojnë atë çdo herë. Dhe me të vërtetë është si thjeshtë si that-- çfarë është pika e vazhdueshëm të përpilojnë kodin tuaj? Kjo është vetëm një hap që është making-- kjo kërkon, për të kaluarën disa javë, dy herë më shumë hapa si vetëm running programin tuaj. Ka qenë e dobishme në duke parë se ti të shihni disa mesazhet e gabimit dhe kështu me radhë, por kjo është ende vetëm një hap i bezdisshëm. Dhe kështu programuesit realizuar me kalimin e kohës, pse nuk e bëjmë ne filloni të shkruani gjuhë që nuk bëjnë nevojë për këtë hap mjaft mekanike, kështu që mund të shkruani vetëm kodin tuaj dhe drejtuar atë. Por ajo që ishte çmimi që pamë kemi paguar javën e kaluar, me një shembull të veçantë? Po? Shpejtësi. Kështu që [? çfarë është] përkthyesit? pak më ngadalë, në se zero dhe ato janë bukur dhe të shpejtë për një kompjuter për të kuptuar, për shkak se Intel CPU, ose çfarëdo qoftë ajo është, vetëm e kupton se çfarë po ndodh më me ato modelet e bit. Ndërsa një përkthyesi është një program që me të vërtetë ka për të lexuar burimin ascii Kodi që ju keni shkruar, dhe kthyer atë, kështu që të flasin, ose kuptoj se si ajo konverton në fund të fundit në zero dhe ato. Pra, ajo merr vetëm pak pak e një hit të performancës. Pra, kjo është pak e një trade-off. Tani në qoftë se ne bëjmë këtë gjatë këtu, le të më të shkojnë përpara dhe të bëjë një shembull si më poshtë. Nëse unë shkoj në këtu, skedë të re, unë jam duke shkuar për të shpëtuar këtë përsëri është hello.php. Dhe tani unë jam duke shkuar për të shkuar përpara dhe thonë: "print Përshëndetje Të Gjithëve" - dhe kujtojnë se unë mund të përdorni të shtypura, unë nuk e bëj duhet të përdorni print-F. Dhe tani këtu poshtë, në qoftë se unë bëj PHP e hello.php, unë huh-- nuk duket se kanë interpretuar atë. Çfarë të bëj gabim? Audienca: Rrathë angled. DAVID Malan: Po, ju keni nevojë për se lartë kënd kllapa lart. Pra, kjo është lloj i bezdisshëm, por ju të mësohen me të shpejt. Në qoftë se unë duhet të shkruani kodin PHP, unë në përgjithësi duhet të tregoni programin, ose tregoni përkthyes, hej PHP, këtu vjen një kod PHP. Dhe pastaj për masë të mirë, unë do të mbyllet kjo nuk me këtë, por më tepër me vetëm pyetje kënd mark kllapa, kështu që tani këtu poshtë, në qoftë se unë të drejtuar këtë përsëri, tani Kam marrë rezultatin e dëshiruar. Tani le të bëjmë një optimization të lehtë, vetëm kështu që ju kam parë atë më parë. Kjo është lloj i bezdisshëm që I keni për të kandiduar hapësirë ​​PHP hello.php, sepse në I kaluarën mund vetëm të shkruani dot plagë Emri program, që është lloj i bukur. Kjo është lloj i një përvojë përdorues të mirë. Pra, ajo rezulton nga ju mund ta bëni këtë në PHP me I following-- mund të përdorni këtë mjaft i fshehtë yshtje në krye këtu, e cila është quajtur përgjithësisht një mesele, ku kjo është një simbol të mprehtë, kështu që të flasin, kjo është një zhurmë ose një pikë thirrje. Dhe kjo tani është rruga për një program të në një sistem tipik Linux që quhet mjedisin, ose env. Dhe kjo line-- histori të gjatë një linjë short-- vetëm thotë, hej kompjuter, gjeni PHP përkthyes për mua në mjedis, gjeni atë në kujtesën tuaj, kështu që të flasin. Dhe çfarë është e bukur tani, është se nëse unë shkoj poshtë këtu, Unë mund të bëj dot plagë përshëndetje dot php, or-- hmm. Leja e mohoi. E pra, ju do të shihni edhe më shumë nga kjo me problemin e vuri mënjanë shtatë, në qoftë se ju nuk e keni tashmë, me leje. Ajo rezulton se kam nevojë për për të ekzekutuar këtë komandë quajtur [? chamod?] për ndryshim mode-- një plus x hello.php. Unë kam nevojë për [e padëgjueshme] kjo shtesë hap e cila është thënë kompjuterin tim, bëjnë ekzekutues hello.php. Dhe tani të shikojnë atë që happens-- dot çaj hello.php, ajo vetëm shkon. Unë nuk kam nevojë të specifikojë përkthyesi më. Dhe unë mund të bëjë atë edhe prettier, akoma, në qoftë se unë të riemërtoni këtë gjë. Nëse unë të lëvizin hello.php të vetëm Hello-- kështu njoftim të majtë të lartë, emri i programit është në të vërtetë tani vetëm Përshëndetje. Tani unë mund të bëjë atë të duket si një program C, edhe pse është e shkruar në PHP-- ose sinqerisht ndonjë numër e gjuhëve të tjera. Pra zgjerimin margjinale, asnjë ndryshim funksionale. Por kjo është vetëm një kuriozitet të vogël tani, kështu që ju mund të shkruani programe në çdo gjuhë, dhe përdoruesi nuk duhet të dinë se ose intereson se çfarë ata janë. E pra, le të shohim në një më shembull imponues tani që unë whipped deri më parë. Dhe kjo quhet quote.php. Dhe kjo është në dispozicion online. Dhe vini re se kjo është goxha short-- por kjo është një linjë komande program që është do të shikojmë lart çmimet e aksioneve për mua, e cila është në të vërtetë ndodh të jetë i përshtatshëm për problem i vuri mënjanë shtatë. Pra, le të shohim se çfarë unë jam duke bërë. Në krye Unë kam marrë grupim i hapur pikëpyetje PHP. Pastaj unë kam marrë këtë linjë, ku unë jam kërkon një skedar të quajtur functions.php-- ne jemi duke shkuar për të parë më shumë për këtë në një grimë, por kjo është si C-së version i mprehtë përfshijnë, ku ju doni të shkoni përfshijnë një tjetër fotografi. PHP quan ajo të kërkojë, edhe pse ajo gjithashtu ka një funksion të përfshijë. Dhe kjo rezulton se function.php është vetëm diçka kam shkruar para klasës. I vënë atë në të njëjtën directory, sepse Unë të kërkuar për faktor jashtë disa kodin që ne të mund të dëshironi të përdorni diku tjetër. Ndërkohë, ju mund ndoshta konkludoj se çfarë po ndodh këtu. Kjo është pak më ndryshe nga C-- por çfarë dua të them me të siguruar përdorimin e duhur? Translate kjo më teknikisht. Në çfarë rrethanash jam unë ndalohet pirja e duhanit e programit, apo dalja? Po? Audienca: Kur ju nuk keni dy argumente command line. DAVID Malan: Kur unë nuk kam për të komanduar argumente linjës. Dhe mos harroni se një nga ata argumentet është emri i programit në vetvete. Dhe e dyta do të jetë një fjalë tjetër unë lloji pas ftim. Pra, ashtu si C, ky është mënyra ime e të kontrolluar, ka bashkëpunuar përdoruesi dhe drejtuar programin si kam menduar? Tani, ka diçka pak më ndryshe me C-- para së gjithash ne kanë këtë shenjë dollar, dhe çfarë e bën një dollar nënshkruajë treguar në PHP? Vetëm një variabël. Kjo është all-- vetëm një variabël e ndjekur nga çdo gjë që ju doni të vërtetë të telefononi atë. Njoftim ka diçka mungon nga programi im PHP, ashtu si ajo ishte zhdukur fundit javë, kundrejt C, e cila është ajo? Një llojeve, por edhe diçka tjetër. Nuk ka diçka function-- funksionin kryesor. Nuk ka funksion kryesor. Ju vetëm të filloni të shkruani Kodi tuaj pa pasur nevojë për t'u shqetësuar rreth një mjaft arbitrare Konventa e emërtimit disa parazgjedhje Funksioni kryesor. Pra, ARG C është vetëm me të vërtetë një ndryshore globale se përkthyesit vë në dispozicion për mua. Tani, kjo është interesante. Pra, kërkoni gjëra. Aksioneve shenjë dollari është mbi majtas, kjo është e ndryshueshme ime. Në anën e djathtë, nuk ka me sa duket një funksion në PHP quajtur lookup që Unë jam duke kaluar vijën time të fundit command Argumenti to-- çfarëdo fjala është. Dhe ne do të shohim se si kjo punon në një moment. Dhe pastaj në fund unë jam raportimin çmimin. Unë jam shtypje nga një Pjesa e tilla dhe të tilla. Dhe mbani mend, kjo është Mënyra në PHP-- një mënyrë në PHP-- ku ju nuk keni për të bërë shenja e dollarit S më. Ju mund të përdorni vetëm formatimin e teksteve kaçurrel dhe plug në disa ndryshore. Ju nuk duhet të shqetësohen për duke përdorur printf në të njëjtën mënyrë. Dhe si një mënjanë, kur ju vënë një ndryshore brenda kuotat e dyfishtë si kjo, ju jeni duke përdorur një teknikë të dashuroj quajtur interpolation ndryshueshme. Kjo thjesht do të thotë plug ndryshueshme këtu. Dhe si një mënjanë, disa prej jush që vijnë me prejardhje të tjera programore, ju nuk mund të përdorni kuotat e vetme rreth strings për të bërë këtë. Ju duhet të përdorni kuotat e dyfishtë për interpolation ndryshueshme për të punuar. Përndryshe ju do të fjalë për fjalë shohin ato formatimin e teksteve kaçurrel. Pra së fundi, le të shkojnë përpara dhe të drejtuar këtë. Më lejoni të bëj terminal ime më e madhe pak. Më lejoni të shkoj përpara dhe të drejtuar brenda directory tim kuotë. [? CDsource?] [? AM?] [? quote?] PHP quote dot PHP, dhe unë jam duke shkuar për të kërkuar për diçka si GOOG, i cili është simboli i saj Tiker, dhe një pjesa e emrit të saj të ri, Alfabeti Inc, të kushtojë 717 $, që nga sot. Të gjithë të drejtë, në qoftë se ne duam të drejtuar këtë përsëri, dikush kanë një tjetër stock ticker ata duan të shikoni? Microsoft unë mendoj se është kjo, MSFT-- 53 $. Unë mendoj se Yahoo është ndoshta se. Dhe Facebook është ai. Pra, çfarë është ky program duke bërë? Magjia duket të jetë ngulitur në atë lookup funksion. Pra, le të marrin një vështrim të shpejtë. Ajo rezulton se nuk ka ardhur me PHP, kjo është në functions.php. Dhe ne nuk do të kalojnë nëpër këtë në hollësi të madhe, por vini re fjalën operativ këtu është që në përputhje gjashtë e functions.php-- Unë fjalë për fjalë them funksion. Unë specifikoni emrin e funksionit tim. Unë pastaj specifikoni ndonjë argumente, apo parametra, Unë dua që funksioni të take-- asnjë lloje. Dhe pastaj kam zbatuar atë. Dhe unë do të tundë dorën time në zbatim, pasi kjo është e drejtë mjaft e avancuar tani, por ne do të shohim atë përsëri në fakt në një javë në problemin vendosur shtatë. Por unë mund të pastër këtë ide, too. Unë gjithashtu të përfshira në Kodi sotme një version i citatit, e cila nuk ka fotografi dot PHP. Sepse ajo që është me sa duket më së krye të programit të quajtur vetëm të japin kuotën? Se ashtu-quajtur shebang-- yshtje mjaft i fshehtë që thotë se gjeni PHP dhe pastaj drejtuar atë në kodin tim këtu. Të gjithë të drejtë, kështu që sjell ne për të ku ne u ndërpre time-- fundit megjithëse me Disa shembuj më të avancuara. Çdo pyetje deri më tani në lidhje me PHP apo atë që ne jemi duke bërë? No-- të gjithë të drejtë. Po? Audienca: Brenda Fotografi HTML, bëni ju, duke filluar [? bëni ju?] [? vetëm e quajti atë?] një [e padëgjueshme] PHP skedar? DAVID Malan: Pyetje e mirë. Në një kontekst web, të cilin ne jemi fjalë për fjalë gati të kalojnë në, ju nuk e përdorni të ashtuquajturat mesele në krye, sepse web server-- shpesh një Programi i quajtur Apache ose Microsoft IIS, Internet Information Server, ose çdo numër të tjera të software web server, e di se kur ajo e sheh një skedar PHP dot, se ajo duhet të kandidojë përkthyes mbi të. Ajo nuk duket në atë rreshtin e parë. Pra, këtë mashtrim të parë linjë është vetëm kur ju jeni shkrim command line programs-- të cilat ne nuk do të bëjmë super shpesh, por kjo është mënyra jonë për të tejkalimit shembuj për ne C tani PHP tonë. Pra, le të vërtetë të mbushur këtë botë nga bota command line në internet duke bërë në vijim. Më lejoni të shkoj përpara dhe të tërheqë këtu për vetëm një moment. Pra, në qoftë se ne kemi një web server, ose më mirë në qoftë se ne kemi laptop tim gjatë këtu, të cilat unë do të tërheqë si kjo. Dhe këtu ne kemi internet në një formë. Dhe pastaj mbi këtu, ne kemi një server në një building-- kjo është se si interneti works-- dhe në këtu është një server me disa dritat ndoshta. Çfarë po ndodh në të vërtetë në mes të këtyre dy lidhjeve? Pra, në këtë ndërtesë është një web server. Kjo është vetëm një kompjuter kjo është drejtimin disa operative system-- ndoshta software i lirë të quajtur Apache, e cila CS50 IDE po kandidon. Kështu që ju mund të vërtetë mendoj e kësaj ndërtese si ndërtesa në cila CSt0 IDE është ruajtur. Kjo është ku të gjithë ju kanë llogaritë, ku të gjithë ju keni vet web serverin tuaj drejtimin, të gjithë ju kanë URL tuaj unik, si kemi filluar për të diskutuar, dhe ju do të shihni më shumë në P. vendosur gjashtë. Këtu është laptop tim diku tjetër në internet. Dhe kështu kur kam vizituar një URL që i përket për mua, se trafiku në internet është duke shkuar mbi në server, server-së marrjen e një HTTP request-- si një të marrë index.html dhe kjo është duke iu përgjigjur kësaj web faqe. Pra, kjo është paradigma e përgjithshme. Ndërsa çdo gjë lart deri tani Sot, çdo gjë po ndodhte vetëm në kufitë e kësaj ndërtese. Unë kam qenë duke përdorur laptop tim, por Unë kam qenë i lidhur me CS50 IDE, kështu që të gjithë e këtyre programeve unë ishte duke ecur ishte brenda atë server, vetë. Por tani, le të fillojë ripërdorimit PHP për të shkruar disa programe aktuale që janë shërbyer nga një web server. Dhe për të bërë këtë, unë jam duke shkuar për të shkuar në një bandë e tërë e shembujve që të prezantoj këtë ide këtu. Pra, kjo është lloj i një mënyrë e sofistikuar të përshkruar një paradigmë programimit. Dhe në fakt, ashtu si ju dalje CS50 ose të punojnë në projekte finale, ose të marrë disa të ndjekë në klasë, ju do të fillojnë për të parë se world-- veçanërisht ka rritur deri me gjuhë si C që janë level-- super të ulët të kuptojë se nuk është më mirë mënyra e shkrimit software. Nuk janë të sigurt modele ju mund të ndiqni, mënyra të caktuara të organizimit fotografi tuaj dhe mënyrat e emërtimin e funksioneve tuaja, në mënyrë që histori të gjatë të shkurtër, bota ka dalë me një bandë e tërë e akronimeve dhe emra për mënyrat e programimit. Këto janë vetëm teknika që ju mund të përdorni. Dhe një prej tyre është quajtur MVC, për Model Shiko Controller. Dhe kjo është vetëm, për tani, një komplikuar tepër mënyrë për të thënë se si ju duhet të nxjerr një faqe interneti PHP-bazuar, në rastin tonë. Si mund të organizojnë fotografi tuaj, si do të organizojnë logjikën tuaj, në një mënyrë që e bën më të lehtë për shkruaj faqet e internetit më të komplikuara? Dhe me të vërtetë, ne do të shpejt merrni atje me p-vendosur shtatë. Pra, në botën e MVC, ju do të jeni për të parë se kodi ynë mund në përgjithësi të karakterizohet si ose kod model, ose kod kontrollues, ose kod pamje. Dhe unë jam duke shkuar për thjeshtëzoj atë si follows-- kontrollues është trurin e programit tuaj, kjo është ku të gjithë e logjikë interesante ndodh. Pra, çdo gjë që ne kemi qenë shkruar deri më tani në klasë, është lloj i si kontrollues code-- ajo kontrollon programi juaj, sythe e tua, tuaj kushtet, funksionet tuaja dhe variablave dhe të gjitha këto. Views, tani, do të jetë pak më e qartë në botën e web. Një pikëpamje është estetikë e faqen tuaj te internetit. Kjo është ajo që përdoruesi sees-- imazhet, tavolina HTML, tags HTML, dhe të gjitha e që, të gjithë e estetike me gëzof sende që nuk është se e vështirë për të shkruar, por është vetëm ajo që ju jeni duke gjeneruar, është e ashtuquajtura pikëpamje, estetikë. Dhe model, në fund të fundit, po shkon të jetë stuff-- bazës së të dhënave që ne do të fillojmë zhyten në të gjitha aq më shumë këtë të mërkurë. Pra, kontrollues është logjika, pikëpamje është një temë estetike, dhe modeli do të jetë aty ku ne të ruajtur të dhënat tona aktuale. Pra, le të shohim në këtë më konkretisht me shembullin e mëposhtëm. Unë jam duke shkuar për të shkuar në directory time këtu i burimit sotme code-- të cilat është në dispozicion online. Dhe unë jam duke shkuar për të shkuar në versionin zero. Dhe këtu is-- le ta quajmë të Versioni zero e internetit CS50 e. Nuk ka shumë këtu në të gjitha. Kjo është një faqe shumë e thjeshtë web që është ndoshta duke përdorur atë që HTML tags-- vetëm guess nga shembujt e kaluara? Cfare eshte kjo? H1-- ndoshta për atë i madh guximshme titulli, kjo logo deri të lartë, CS50. Dhe çfarë tjetër është në lojë? Po? Audienca: Listë e paorganizuar. DAVID Malan: list-- paorganizuar kështu Tag UL dhe ndoshta disa tags Li. Dhe nëse ju nuk e mbani mend këto, kjo sinqerisht nuk ka rëndësi. Këto janë lloj gëzof të Detajet e zbatimit të HTML që ju të shpejt shikoni lart dhe ju jeni kthyer në rrugën tuaj. Ne do të përqëndrohet më shumë në programimin Idetë që janë copa Fatura. Pra, le të vetëm të marrin një shpejtë shikoni në HTML-- dhe në të vërtetë në qoftë se unë të hapur view burimin këtu, Yup, Kjo është pikërisht ajo që po ndodh këtu. Ka një tag UL. Mbivendosur brenda që është për tags Li. Dhe pastaj kam huazuar URL i syllabus aktuale këtu. Dhe pastaj në lectures.php është me sa duket një tjetër faqe të gjeneruara dinamike që do të ketë, le të see-- ah, dy javët e para të ligjëratës. Pra javë zero dhe një javë, le të shikoni në this-- në qoftë se unë të parë faqe burim, gjithashtu super të thjeshtë. Këto janë çuar në dy faqe quajtur week0.php, dhe week1.php. Kështu që e konsiderojnë tani çfarë po ndodh. Kur unë klikoni mbi week0.php, laptop tim është duke bërë një kërkesë për week0.php. Web server, alias, CS50 IDE, po merr atë zarf virtuale. Është parë një mesazh si, të merrni week0.php. Është pastaj interpreton fotografi, e lartë e deri në fund, e majta në të right-- file quajtur week0.php-- dhe pështyrë nga rezultatet. Pra, brenda kësaj skede, week0.php, duhet të jetë kontrollues logjikë që është gjeneruar kjo HTML, dhe ne do të shpejt të shihni se. Por tani për tani, më lejoni të klikoni në javë zero, dhe tani ne kemi mërkurën dhe të premten, dhe tani ne kemi slides ngadalë nga javë zero. Dhe ju mund të kujtojnë këtë nga mënyrë mbrapa kur. Pra, kjo është e gjitha ky website është duke bërë. Pra, le të shqyrtojmë se si ajo e bën këtë. Unë jam duke shkuar për të shkuar mbrapa në të kod burim këtu, në CS50 IDE, dhe unë jam duke shkuar për të hapur index.php. Në krye të këtij file është një bandë e komenteve. Dhe pastaj në mes të këtij file, atë rezulton, asnjë kod PHP whatsoever. Sepse në qoftë se ju nuk keni ndonjë nga Bracket hapur tags pikëpyetje PHP, ju jeni të lirë për të vënë vetëm HTML. Sepse çfarë PHP përkthyes është menduar për të bërë, është kur ai lexon këtë file-- lart poshtë, e majta në të right-- ajo vetëm interpreton kodin që sheh në mes këto kllapa kënd pikëpyetje. Dhe çdo gjë tjetër që nuk ka njohin si PHP, ajo vetëm pështyn nga. Dhe HTML është ndër më të gjëra ajo vetëm do të nxjerr nga goja. Pra kjo skedë mund të ketë është quajtur index.html, por unë jam emërtimin gjithçka dot PHP si një gur rrit. Lectures.php-- ngjashme underwhelming, kjo është vetëm disa HTML. Week0.php, në mënyrë të ngjashme vetëm disa HTML. Por tani le të vënë mbi proverbial hat inxhinieri, dhe konsiderojnë se si ne mund të përmirësojmë këtë. Nuk është e vështirë për të bërë këtë, por unë lloj i transferuar në të kopjoni dhe ngjisni. Dhe në fakt, në qoftë se unë bëj javë dy, ju e di se çfarë unë jam ndoshta do të bëni? Unë jam duke shkuar për të shkuar në week1.php, unë jam do të nxjerrë në pah gjithçka. Unë jam duke shkuar për të kopje atë, ngjitur në një skedë të re të quajtur week2.php, shkulje disa URL, dhe të jetë në rrugën time. Pra, bazuar në atë që ne kemi parë në C tashmë, kjo nuk do të ndjehen të drejtë, me shpresë. Kopje, paste rrallë zgjidhja e drejtë. Pra, çfarë mund të fillojmë për të bërë për të përmirësuar këtë? Ku janë mundësitë për dizajn të mirë? Deri në kohën që unë të shkoj në Javën e tetë, ajo do të jetë me të vërtetë i bezdisshëm në qoftë se unë dua të ndryshojë font i secilit prej faqet e mia, ose në qoftë se unë dua për të ndryshuar strukturën e layout. Pra, ku është mundësi për dizajn të mirë? E pra, le të konsiderojmë se çfarë është përbashkët nëpër të gjitha këto fotografi. Këtu është një javë, këtu është javë zero, këtu është lectures.php, këtu është index.php-- ajo që është e njëjtë dhe çfarë është e ndryshme, me përafërsi, në secilën nga këto dosjeve? Po? Audienca: [padëgjueshme] DAVID Malan: OK, mirë. Pra, ka një model, me siguri, ku çdo herë që unë zgjedh leksion I, Unë duhet të gjeneruar një shumë të ngjashme faqe kërkim. Dhe kështu që ndoshta unë mund të levave fakti se me të vërtetë, ne qëllimisht numerikisht indeksuar lectures-- tonë në qoftë se unë mund të vënë edhe më shumë Fjalët në përgjigjen tuaj. Dhe çfarë është gjëja e vetme, me të vërtetë, kjo po ndryshon në mes të javës one-- dhe më lejoni të lëvizni poshtë kështu që është afërsisht në të njëjtin place-- kështu që këtu është java zero, afërsisht në krye. Këtu është një javë, java zero, një javë, java zero. OK, fjalë për fjalë në qoftë se ju e dini nuk ka program çfarëdo, kjo tani është vetëm si një model përputhen lojë. Pra, çfarë është e ndryshme? Po? Audienca: [padëgjueshme] DAVID Malan: Mirë, kështu titullin po ndryshon, ndonjëherë në mënyrë pak. Zero po ndodh, natyrisht, në një. E njëjta gjë po ndodh në tag H1. Dhe ne nuk e shohim fare atë aq lehtë, për shkak se URLs janë pak të gjatë. Por ato URL po ndryshojnë pak. Por ajo që nuk është ndryshuar është, guxoj thonë se, shumica e përmbajtjes së page-- HTML tag është e njëjtë, koka është njëjtë, titulli është pothuajse e njëjtë, trupi është i njëjtë, dhe pothuajse çdo gjë tjetër është e njëjtë me përjashtim këto tweaks pak. Pra, si mund të shkoni në lidhje me factoring disa nga këtë gjë? E pra më lejoni të propozojë saktësisht që në versionin e ardhshëm. Kështu që këtu në versionin e parë, unë kam saktë fotografi të njëjta, plus disa të tjerëve. Ja index.php-- dhe madje edhe në qoftë se ju kurrë nuk kam parë më parë PHP, çfarë jam unë ndoshta duke bërë për të zgjidhur këtë problem-- bazuar në atë që ju shihni këtu? Po, është se një angazhim të vogël? Nuk ka? Po, shkojnë në. Audienca: [padëgjueshme] DAVID Malan: Po. Audienca: [padëgjueshme] DAVID Malan: Kam nevojë për ju për të flasin vetëm një Louder pak. Audienca: [padëgjueshme] DAVID Malan: OK, mirë. Dhe unë think-- ishte vështirë për të dëgjuar ju, duke filluar, por unë mendoj se ajo që ju jeni duke marrë në është se tags që ishin të zakonshme deri krye, dhe tags që ishin të zakonshme në fund, tani janë faktorë jashtë, ose të zbresë në atë fotografi? Header.php dhe footer.php-- dhe ne jemi duke shkuar për të bërë disa tweaks të adresuar shqetësimin ju vetëm ngritur mbi numrat ndryshimin, për shembull, në qoftë se unë të dëgjova saktë. Por kjo duket të jetë thelbi i saj. Nëse ka pasur një sasi të madhe të tepricë në majë të faqes, dhe një sasi e madhe e tepricë në fund, le të fjalë për fjalë vetëm pah dhe prerë atë përmbajtje jashtë, vënë atë në një file-- të veçantë vetëm si ideja e CSS, ku ne faktorizohen jashtë estetikë shumë të ngjashme, vënë atë në një skedar të veçantë dot PHP, përdorni kërkojnë mechanism-- që është si C include-- mprehtë që është në thelb si duke thënë se të shkoni kap përmbajtjen e header.php, dhe kopjoni dhe ngjisni ato këtu. Por çfarë kjo do të thotë është se tani në index.php, unë kam këto dy linja. Në lectures.php, edhe unë kanë këto dy linja. Në week0.php, edhe unë kanë këto dy linja. Deri tani, në qoftë se unë dua të ndryshojë titulli i të gjitha faqet e mia, ose unë dua të ndryshojë Struktura themelore, Unë mund të ndryshojë atë tani në vetëm një vend, ose dy kokë places-- dhe futboll, përkatësisht. Tani kodit të filluar të duken pak më i fshehtë, e drejtë? Por në qoftë se ju mendoni se çka faqja është doing-- në qoftë se unë jam duke kërkuar week0.php, ashtu si në hartimin mbi here-- kur week0.php kërkohet, cfare do te thote ajo? Fjalë për fjalë, kjo skedë është kërkohet nga shfletuesi. Web server-- alias CS50 ID-- grabs kjo file, week0.php, dhe lexon kjo lart poshtë, majta në të djathtë. On line njëra, ajo menjëherë ballafaqohet pikëpyetje kllapa e hapur PHP, kërkojnë header dot PHP, dhe kështu çfarë PHP përkthyesi does-- që është ndërtuar në web server, sepse ne preconfigured kjo për ju, duke filluar ajo automatikisht shkon në header.php, kopjet e përmbajtjes, xhel ato këtu. Por pastaj takimeve përkthyes pikëpyetje kllapa të ngushtë, kështu që është bërë të gjithë të menduarit. Tani ajo vetëm verbërisht pështyn jashtë vijave dy deri në shtatë, sepse kjo është vetëm HTML papërpunuara. Merr të vijë tetë, dhe e bën atë njëjtën magji again-- hapjen e file, grabbing përmbajtjen, dhe duke kërkuar që ato apo pasting ato të drejtë atëherë ose atje. Por unë vetëm aludoi për një bug. Ky është një hap i pjesshëm prapa, sepse nëse ne shikojmë në header.php, Unë e kam lloj i prerë një qoshe. Çfarë tipar kam dhënë në mënyrë për të fituar këtë dizajn të argumentueshëm më të mirë? Po? Audienca: [padëgjueshme] DAVID Malan: Yeah, unë lloj i prerë një qoshe nontrivial. Ju theksoi se ajo që po ndryshonte ishte titulli, numri në titull, dhe numri në H1. Pra, zgjidhja ime ishte, në rregull, le të vetëm të riemërtoni faqe, dhe nuk merren me atë Problemi whatsoever. Pra, kjo është një pjesshme hap prapa për sigurt. Por ajo që vlen të përmendet këtu është se atë që kam bërë është faktorë ndryshe nga të gjitha gjëra të përbashkët. Dhe në footer.php, vini re unë faktorë nga të gjithë se, megjithëse më të vogël, gjëra të përbashkëta. Kështu që unë duhet të disi tani jetë në gjendje të të marrë një tjetër hap përpara, dhe të rregulluar që çështjet e titullit. Pra, le ta bëjmë atë. Më lejoni të shkoj në versionin tim të dytë këtu, e cila, përsëri, ka të njëjtat fotografi me përjashtim për një shtesë e re. Dhe kjo është një pak më shumë fjalëshumë, por le të shohim nëse ne mund të vë në lojë përveç se çfarë po ndodh këtu. Pra, në vend të kërkojnë header.php, dhe footer.php, I duket të jetë vetëm kërkojnë një file-- quajtur, natyrisht, helpers.php. Dhe më lejoni të përcaktojnë tani, çfarë është brenda helpers.php është vetëm një bandë e funksioneve të që kam shkruar, ashtu si më parë. Por unë e quajti atë helpers.php. Tani me sa duket, në Linja tre dhe 10, unë jam thirrje dy functions-- bëjnë header, footer bëjnë. Ata nuk vijnë me PHP, kam shkruar ato veten. Dhe kam vënë ato në helpers.php. Tani, ne kemi parë vetëm këtë sintaksë një herë, dhe kjo ishte super i shkurtër. Por kjo është me sa duket një argument që të merr header, funksioni. Pse unë e di se? E pra këtu është një ngushtë paren, këtu është një paren hapur. Dhe sigurisht, ashtu si në C, çdo gjë në mes këtyre kllapa është një input-- ose një Argumenti për funksionin. Çfarë është lloji dhënat e këtij argumenti, bazuar në atë që unë e kam theksuar? Çfarë bëjnë këto kllapa katrore tregojnë, bazuar në javën e kaluar? Po, kjo është një array-- veçanërisht një koleksion asociative. Dhe kjo sintaksë pa dyshim është një shokuar pak, por kjo është vetëm duke kaluar në një palë e vlerës kryesore. Çështja kryesore është, të japin kuotën e mbyll thonjëzat titullin, dhe vlera është CS50. Nëse do të kishte bërë këtë në C, ajo mund në vend duken më shumë si kjo, vetëm quote mbyll thonjëzat CS50-- ose në të vërtetë do të ishte dredhur formatimin e teksteve, ose diçka të tillë në C, ku çelësi është zero, dhe vlera është CS50. Por përsëri, në PHP, edhe pse Sintaksa është, përsëri, pak i çuditshëm, kjo ju mundëson për të kaluar në fjalë në vend të numrave që të lidhen çelësat me vlera. Pra, çfarë do thotë e gjithë kjo? Nëse unë shkoj në helpers.php, le të shohim në këtë funksion. renderHeader.php, në vend renderHeader është funksioni im, dhe unë e di se për shkak se unë shoh fjalen funksion këtu. Kjo është e re nga C-- atë me sa duket merr një argument të quajtur data-- por unë mund të ketë quajtur këtë asgjë, por unë e quajti atë të dhënave, vetëm të jetë një clean-- pak dhe vetëm të marrë me mend, sidomos në qoftë se ju keni programuar në disa të tjera gjuha më i lartë niveli i parë, diçka sipër C, konceptualisht. Çfarë e bën të barabartë parantezë të hapur kllapa katrore ndoshta do të thotë? Ose çfarë mund të thotë? Ne nuk e kemi parë këtë në C. Po? Një grup bosh. Në mënyrë të veçantë, kjo do të thotë se në qoftë se përdoruesi nuk e quan renderHeader me argument, unë jam ende duke shkuar të ketë një argument të quajtur të dhënave, por vlera e saj e parazgjedhur është do të jetë një grup i zbrazët. Pra, kjo është vetëm një lehtësi e bukur. Unë nuk duhet të çirrem në përdoruesit, ose thonë se ju përdorur funksionin tim gabuar. Unë vetëm mund të jep përdoruesit një default Vlera e, në qoftë se unë nuk e veçanërisht të kujdesit. Tani ky funksion, unë jam do të valë duart e mia në. Por ky funksion lejon ekstrakt na për të kaluar këto variabla në të dhëna në header.php në mënyrën e mëposhtme. Dhe kjo është pjesa e fundit, Unë mendoj se, të sintaksës shokuar. Këtu është versioni im i ri i header.php-- atë thoshte, fjalë për fjalë, të hapur kllapa titullin CS50, dhe se ishte ajo. Dhe e njëjta gjë për H1. Tani ajo duket thotë diçka goxha i shokuar. Dhe më lejoni të lehtësuar këtë për një moment si më poshtë. Kjo është ajo që unë kam ndryshuar titullin tim që të jetë. Megjithatë, ajo është duke marrë një pak i shëmtuar në kllapa vazhdimisht të hapura me PHP, dhe pastaj të përdorin funksionin e shtypura. Ajo rezulton se PHP ka një stenografi simbol për këtë, e cila është vetëm një shenjë të barabartë, i cili është teknikisht një Funksioni i quajtur echo në vend të shtypura, por kjo është e njëjta gjë, në mënyrë efektive. Që vetëm duket më mirë. Është vetëm një sintaktik sheqer, në qoftë se ju do të, që e bën kodi im duken pak më të mirë. Por kjo rezulton, dhe ne do të shohim këtë përsëri para se të gjatë, ne kemi për të thirrur këtë annoyingly funksion të gjatë të quajtur Gërma të veçanta HTML në PHP, sepse kjo rezulton ka inputeve të caktuara që përdoruesi mund të na japin, ose që përdoruesit mund të na japin, që do të thyejnë faqen tonë. Por ne do të shohim se ardhshme javë me JavaScript. Por tani për tani, vetëm e di se këtë fotografi, headers.php, thjesht merr titullin që Kam kaluar në, ajo të bëjë i sigurt se është e sigurt që të injektohet në një web faqe, dhe ajo pështyn atë si titull e mia dhe si H1 tim. Pra, nëse unë shkoj në këtë version tani, vini re se leksionet e ka titullin e saj prapa, Javën e zero ka titullin e saj prapa, dhe Në të vërtetë, HTML unë jam gjenerimin është identike me atë versionin tim të parë was-- përveç whitespace tim, sepse unë kam filluar formatimit kodi im pak ndryshe. Por unë e kam gjeneruar tërë kodi më intereson. Pra më lejoni të bëj një pauzë për vetëm një moment dhe të shohim në qoftë se ka ndonjë pyetje ose konfuzion unë kam krijuar. Të gjithë të drejtë, kështu që le të kthesë pak e vështirë këtu për të parë nëse ka një mundësi për përmirësim. Helpers.php gjithashtu kishte kjo funksion, i quajtur renderFooter. Dhe çfarë është i rëndësishëm për renderHeader dhe renderFooter? Dhe përsëri, për qëllime të sotme, e di se funksioni ekstrakt është vetëm mënyra ime e argumenteve kalimin në header.php dhe footer.php. Na vjen keq? Audienca: [padëgjueshme] DAVID Malan: Yeah, unë vetëm ndryshuar kërkojë linjë. Kështu që fjalë për fjalë, unë kam kryer mëkatin i kopjimi dhe pasting, përsëri. Kjo nuk është një numër i madh e linjave, por të vijnë on-- në qoftë se unë jam kopjimi dhe pasting gjithçka vetëm për të ndryshuar një fjalë të vogël, dhe një fjalë e vogël që tregon Alan jashtë është titulli këtu, kundrejt header këtu. Përndryshe, çdo gjë është identik, me përjashtim të: natyrisht, emrat funksioni së. Pra, çfarë mund të bëjmë më mirë? E pra më lejoni të hapur këtë version këtu, ku në helpers.php, pse nuk kam vetëm të marrë një pak më të zgjuar në lidhje me këtë? Shkruaj pak më e komplikuar Kodi, por e quajti atë e bëjnë? Pra, çfarë kam ndryshuar rrënjësisht? Ajo merr një argument now-- dy argumente, të dhënat ende. Dhe pastaj çfarë është e para Emri ndoshta duke u përdorur për të, bazuar në atë që ju jeni duke lexuar këtu? Edhe në qoftë se një pjesë e sintaksës është ende i ri. Çfarë është dollar shenjë template? Na vjen keq? Audienca: Header apo futboll. DAVID Malan: Header apo futboll. Pra me sa duket, unë vendosa se në qoftë se e vetmja gjë që po ndryshon është ajo që unë dua template të print-- dhe nga template Unë do të thotë kjo është plan për Kodi që unë dua të prodhimit, por unë dua të plug në disa values-- kështu që në qoftë se është vetëm header ose futboll, pse nuk e kam parameterize që e quajnë shenjën e dollarit argumenti template? Dhe pastaj kjo sintaksë shokuar lejon mua për të krijuar një rrugë në një variabël këtu. Pra, rruga shenja e dollarit është një variabël. Çfarë e bën këtë sintaksë bëni, në qoftë se ju jeni të njohur? Po? Audienca: [padëgjueshme] DAVID Malan: Pikërisht. Nëse template është, të japin kuotën e mbyll thonjëzat, header, ose nëse template është, quote mbyll thonjëzat, futboll, se linja atje që unë e kam theksuar, linjë tetë, thjesht duke marrë këtë emër, si kokë, dhe concatenating me dot PHP. Pra, ne nuk kemi këtë operator në C. Kjo operator dot është një gjë e mahnitshme në PHP-- nëse ju jeni njohur me JavaScript ose Java, ju mund të përdorni plus nënshkruajë për të bërë varg. Në C, ajo është një dhimbje në neck-- dhe unë jam aq i keq, në p-set gjashtë, ju jeni do të duhet të bëni this-- është një dhimbje në qafës të lidh vargje. Përse? E pra, sepse në qoftë se ju keni marrë një varg që është kjo e gjatë, dhe një tjetër varg që është kjo e gjatë, ju nuk mund vetëm të plug ato së bashku. Çfarë bëni ju në vend të kësaj duhet të bëni në C? Po? Audienca: [padëgjueshme] DAVID Malan: Ju duhet të malloc kujtesës, ose përdorni një rrjet në rafte. Dhe në të vërtetë ju keni për të bëjnë që array mjaft e madhe të përshtaten kësaj plus kësaj, plus backslash zero. Pastaj lidh ata së bashku duke përdorur llokoçis mace apo me dorë me një për lak, ose ndonjë numër të teknikave. Dhe ne t'ju tregojë një çift në p-vendosur gjashtë. Kjo është një dhimbje në qafë. Dhe kjo është me të vërtetë ajo që dua të them në lidhje me kjo kundrejt this-- si C kundrejt PHP. Ju vetëm merr shumë më shumë funksionalitetin për të lira, kështu që ju mund të përqëndrohen, në mënyrë ideale, në fun pjesë e kodim, The projekt ju doni të zgjidhur, në vend se të nivelit të imtësira të ulët. Pra, kjo vetëm gjeneron header.php ose footer.php bazuar të cilën e kam thirrur. Dhe me të vërtetë në qoftë se unë shkoj në index.php, njoftimi të gjithë që e changed-- vend të thirrje bëjnë header ose bëjnë futboll, Unë jam duke e quajtur bëjë, e ndjekur nga emrin e template që unë dua të bëj. Dhe ju do të shihni këtë, gjithashtu, në problemin vendosur shtatë, ku ne të ju lejojnë të përdorni njëjtin funksion për të bërë bunches dhe bunches e faqeve të internetit të ndryshme. Pra, në vend se të banojë shumë shumë më tepër në ato details-- që ju do të shihni përsëri në grup Problemi seven-- le të shohim në tani fillimin e një zgjidhjeje të një problemi më interesante. Deri tani, asgjë ne kemi bërë ka të dhëna të ruajtura. Në fakt, e vetmja kohë që ne kemi ruajtur ndonjëherë diçka që ne kemi bërë në këtë klasë është kur ne kishim një demo shumë të thjeshtë pak kohë prapa, ku kemi përdorur skedarin IO në C, dhe unë mendoj se unë shtypur në emrin tim, dhe Emri i Hanës, dhe emri Maria, ose ndoshta emri i Andy, dhe atëherë ne shpëtuam një file-- CSV nda me presje vlerat file. Dhe kemi qenë fopen-- unë mendoj kemi përdorur fprintf si unë kujtoj, dhe ne shpëtuam një fotografi. Tani, kjo është më e thjeshtë Forma e një bazë të dhënash. Nëse ju doni të bëni një faqe interneti për Programit Frosh IMs, ku freshmen mund të regjistrohen për një sport, ju në mënyrë ideale doni të bëni diçka me këto të dhëna. Javën e kaluar, ne e bëmë asgjë me data-- ne vetëm i tha, ju jeni të regjistruar, jo të vërtetë. Apo ndoshta unë emailed Proctor, dhe se ishte ajo. Por do të ishte mirë nëse unë mund të jep që Proctor një CSV, si një file Excel. Ose më mirë akoma, ajo do të të jetë mirë në qoftë se unë mund të vënë emrat e këtyre përdoruesve dhe fjetore emrat dhe të gjithë që në një bazë të dhënash që vetëm jeton përgjithmonë, derisa unë zgjedh për të fshirë të dhënat. Një bazë të dhënash që ju lejon më të query informacion. Dhe me të vërtetë, kjo është ajo që është një bazë të dhënash. Ne kemi prezantuar sot, dhe javën e ardhshme, gjithashtu, një teknologji quajtur SQL-- një Query strukturuar Gjuha, e cila është një gjuhë tjetër. Kjo është në thelb një programimit gjuhës, por për bazat e të dhënave. Dhe një bazë të dhënash për tani, vetëm e mendojmë si një version super dashuroj e Microsoft Excel, apo Google Spreadsheets, ose numrat Apple. Kjo është zakonisht një program që lejon ju për të ruajtur një bandë e tërë e të dhënave në rreshta dhe kolona, ​​mjaft si ju mund të në Excel. Por ajo që është e bukur, veçanërisht në qoftë se ne nuk jemi super të njohur me Excel, çfarë SQL ju lejon të bëni është query këtë informacion duke shkruar rreshta të kodit ku ju mund të, edhe nëse tuaj bazës së të dhënave ka një milion rreshtave në të, ju mund të gjeni gjëra të super të shpejtë. Në fakt, Excel është veçanërisht keq në të dhënat grupe të mëdha. Dhe në fakt, deri në disa vjet më parë, doli Excel vetëm do të ju lejojnë të ruajtur deri në 65,535 rreshtat e data-- cilat tingëllon si një shumë, por në të kohë isha student grad, dhe Mbaj mend fikje mbi kjo sepse unë u gjeneruar Fotografi CSV për hulumtimet e mia dhe unë donte për të analizuar ato shpejt nga vetëm duke hapur në Excel. Sigurisht, kompjuteri im sapo u rrëzua, sepse kam pasur më shumë se 65.000 rreshtave. Po ku e gjeti 65535 ardhur nga? Çfarë po bënte Microsoft, me sa duket? Në qoftë se ju jeni të mirë me fuqitë tuaja të dy? Po, ata ishin duke përdorur një 16-bit Vlera të përfaqësojnë numrin rresht. Dhe dy të 16 është 65,536-- një minus, sepse në qoftë se ju Indeksi zero do të thotë se ishte Numri më i rreshtave unë mund të ketë. Dhe kjo ishte vetëm një vendim të projektimit. Duke kursyer 16 bit, ata më të kufizuara për 16.000 rreshtave, në vend të 4 miliardë, që unë mund të ketë pasur në mënyrë ideale. Por tani për tani, ne jemi duke shkuar për futur këtë më shumë në një kontekst web. Dhe çfarë është e bukur për SQL është se edhe edhe pse kjo është goxha i fuqishëm dhe mjaft sofistikuar, me të vërtetë vlon poshtë për të katër operacionet kryesore, katër funksionet kryesore, në qoftë se ju zgjidhni will--, për retrieving të dhënave, në kërkim për të dhënat; fshijë ose fshirje të të dhënave; futur për të shtuar rreshta për bazën e të dhënave; dhe përditësimin. Pra, nëse ju keni përdorur ndonjëherë Google Spreadsheets, Numrat Apple, Microsoft Excel, ju kanë ekzekutuar, ka shumë të ngjarë, gjithë e këtyre operacioneve, si një njeri nga vetëm duke përdorur tastierën tuaj dhe mouse-- futjen e të dhënave, duke përdorur sytë tuaj për të zgjedhur ose të kërkuar për të dhëna, ose të dhënat e rinovuar, ose fshini të dhënat. Pra, çfarë do të thotë kjo? E pra, para-instaluar në CS50 IDE është një program i quajtur MySQL. Kjo është një lirë, me burim të hapur bazë të dhënash që është super popullor. Facebook, për shembull, e përdor atë për këtë ditë, në mesin e mjete të tjera që ata përdorin. Dhe një shumë e faqeve shumë popullor përdorur në pjesën më të madhe, sepse është e shpejtë, dhe për shkak se është e lirë. Edhe pse sigurisht alternativa ekzistojnë. Dhe disa prej jush mund të njom me alternativa për projekte finale. Kjo është një screenshot, ndërkohë, i një mjet i web-bazuar quajtur phpMyAdmin. Kjo është një rastësi që ky mjet i web-based është gjithashtu shkruar në një gjuhë, PHP, por ajo që është menduar për të bërë po na jep një web-bazuar ndërfaqe në një bazë të dhënash. Sepse MySQL zakonisht është diçka, historikisht, ju do të ndërveprojnë me vetëm me një command line. Dhe kjo do të jetë super i bezdisshëm dhe të errët që të ketë të tipit komandat tekstuale për të zgjedhur të dhënave, të futur të dhënat, dhe fshirjen e të dhënave. Pra, disa njerëz në internet shkroi një program web-bazuar që vetëm le të menaxhuar të dhënat në database tonë. Është si klikuar dyfishtë mbi Excel, dhe drejtimin e një version web-bazuar tij. Dhe çfarë ju jeni do të përdorni këtë për në fund të fundit javën e ardhshme, jo në p-set gjashtë, por është për të ndërtuar diçka quajtur CS50 Financave, e cila do të ketë një bazë të dhënash të përdoruesit, me emrat e përdoruesit dhe fjalëkalimet, dollar shumat që ata kanë në llogaritë e tyre bankare. Ajo do të jetë diçka që ju përdorni për të ruajtur simbolet dhe sasitë e stoqeve që përdoruesit kanë blerë duke përdorur virtuale dollarë që ju do të jepni atyre. Dhe ajo do të lejojë përdoruesit të regjistroheni për faqen tuaj, kështu që edhe miqtë tuaj mund të akorduar në për faqen tuaj te internetit dhe në fakt të regjistruar, hyni në, dhe luajnë rreth dhe të përpiqen për të gjetur fajin në kodin tuaj, dhe të përpiqen për të gjetur mete në faqen tuaj te internetit. Dhe ata thjesht do të regjistrohen nga duke shtuar veten e tyre, në mënyrë efektive, nëpërmjet kodit të ju shkruani në bazën e të dhënave tuaja. Për shembull, kjo është një screenshot i shpejtë e asaj që një bazë të dhënash mund të duket si. Ky ishte nga një prej solutions-- vitit të kaluar kjo është si një mini Excel fotografi, ruhen në database tonë, ruhet në këtë softuer të quajtur MySQL. Në anën e majtë, unë kam me sa duket jepet çdo përdorues një numër unik. Në kolonën e dytë, unë kam dhënë të gjithë një përdorues name-- timen midis tyre. Dhe në anën e djathtë, Unë e kam dhënë atyre një hash. Tani kjo është në fakt një fjalëkalim, por kjo nuk është një fjalëkalim në formë teksti. Kjo është një fjalëkalim Encrypted, në qoftë se ju do të, apo një fjalëkalim hash. Të cilat ne do të kthehen në para se të gjatë. Por në qoftë se ju keni lexuar ndonjëherë një artikull në lidhje se si fjalëkalimin tuaj në një bankë ose disa Faqja e internetit mund të ketë qenë i komprometuar, kjo në përgjithësi mund të thotë një nga dy gjëra. Pra, kjo është vetëm një fragment i gjashtë përdoruesve. Të gjithë ju tani mund ta kuptoj jashtë nëpërmjet thatë ose plasaritje çfarë fjalëkalime gjashtë persona tanë janë. Por në qoftë se ju keni marrë ndonjëherë një alarm apo një apologji nga një kompani ose faqen e internetit duke thënë, keq, një hacker hyri në database tonë, ju ndoshta duhet të ndryshojë tuaj fjalëkalimin, çfarë mund të thotë kjo? E pra, një, do të thotë Kompania ka qenë më moronic, dhe ka qenë ruajtjen fjalëkalimin tuaj në një kolonë si kjo, unencrypted. Që do të thotë kundërshtar, që vodhi bazën e të dhënave, fjalë për fjalë e di tuaj username dhe password. Ky është skenari më i keq i mundshëm. Dhe si ju do të shihni në p-grup shtatë, në mënyrë të lehtë për të shmangur. Nuk ka absolutisht asnjë justifikim për këtë formë e marrëzi në internet e sotme. Two-- dhe ne do të gjeni disa artikuj për të dëshmuar faktin që kjo ende ndodh, nonetheless-- dy, ndoshta kundërshtari vodhi këtë version të dhënave. E cila është ende lloj i keq, sepse tani ata e dinë se unë kam gjashtë konsumatorët, Unë e di emrat e përdoruesit nga këto gjashtë konsumatorë, dhe unë e di Encrypted versione, apo versionet sheshuar, i fjalëkalimeve këtyre gjashtë klientëve. Por ndonjë prej jush që mund të kam bërë [? Hacker 2?] ku ju plasaritur fjalëkalime, ose mori një vështrim në atë version të problemit vendosur, pse është ende një pak shqetësuese nëse kundërshtari e di hash tuaj fjalëkalimet? Audienca: Për shkak se ata mund të hyjnë të gjithë fjalorin në funksion hash. Dhe nëse fjalëkalimi juaj është një fjalor fjalë, [? ata vetëm mund të match--?] DAVID Malan: Pikërisht, kundërshtari vetëm mund të shkruani kodin, si disa prej jush bëri për [? Hacker?] 2, ku ju iterate mbi të gjitha fjalët në fjalor, ose të gjitha kombinimet e mundshme të një përmes Z dhe një anë nine-- që tingëllon si një shumë, dhe kjo është. Por, për një kompjuter, kjo është goxha i mallkuar shpejt. Dhe në fakt, se ishte pika e [? Hacker 2,?] Ishte për të marrë gjëra që fjalë për fjalë duket si ky, dhe inxhinier kundërt atë që në fakt ishte. Pra, ne do të shohim se si ne mund të ruajë këtë mënyrë më efikase. Rezulton se, fatmirësisht në MySQL, aty do të jenë lloje të të dhënave. Dhe një nga pjesët zbavitëse në lidhje dizajn bazës së të dhënave, të jetë i sinqertë, është në të vërtetë të vendosë për veten tuaj si duhet të përfaqësojë të dhënat? Nëse ju përfaqësojnë një numër telefoni si një int, si një numër i madh, ose një kohë të gjatë? Apo ju në të vërtetë të bëjë atë si një sekuencë e karaktere? Dhe nuk mund të jetë shumë Ndikimet jo të parëndësishme të kësaj. Në të vërtetë, një nga të hershme, tregime fun destruktiv është kur Mark Zuckerberg u ndërtuar Facebook, ajo ishte shkruar fillimisht në, dhe ende është kryesisht shkruar në PHP. Dhe një nga sfidat më të mëdha ata u përballën me herët është shkallë. Kur ata mbahen duke shtuar shkollën pas shkollë pas shkollës, për të njohuri tim, një nga zgjidhjet origjinale ishte në thelb të kopjoni dhe ngjisni disa nga bazat e të dhënave dhe disa të kodit, në mënyrë që të Harvardit ishte kandidon në serverin e vet, dhe MIT ishte duke ecur në serverin e vet. Dhe për këtë arsye, për disa prej jush që mund të kujtojnë, ju nuk mund të ketë miq në rrjetet e tjera. Ju ndoshta nuk keni miq në MIT ose Harvardit 10 apo më shumë vjet më parë, por ju nuk mund të përfshijnë rrjete për këtë arsye pjesërisht. Dhe një nga sfidat më të mëdha për Mark dhe për kompanitë si Facebook është në të vërtetë trajtimi qindra dhe mijëra dhe miliona e kërkesave për sekondë. Pra, gjërat ne do të fillojmë duke folur për këtë javë janë me të vërtetë do të jetë i përshtatshëm për shkrim software të mirë, dhe gjerësisht mjete të suksesshme që mund të trajtojë shumë të përdoruesve. Pra, ne do të flasim për gjëra të si indeksimit dhe kërkim, por kjo është ajo për sot. Ne do të ju shohim për më shumë të mërkurën. [MUSIC - "Seinfeld" TEMA] DAVID Malan: Ju mund të ajo, dhe zbres nga ajo. Dhe ju nuk duhet të rrinë me disa sasi të paracaktuara të kujtesës. E pra, çfarë po që do të quhet? SPEAKER 1: E pra, çfarë po ndodh? SPEAKER 2: Çfarë doni të thoni? Ai është duke i dhënë një leksion. DAVID Malan: Dhe ne mund të përdorim një Funksioni thirrje malloc për memory-- SPEAKER 1: Pse nuk janë duke lëvizur krahët e tij? SPEAKER 2: E pra that's-- ju e dini, kjo është normale. Është vetëm si ai e ka vetëm salcice mëdha varur atje. SPEAKER 1: Kjo është normale? SPEAKER 2: Po, unë mendoj se ne vetëm të supozojmë ai aksidentalisht zëvendësoi deodorant tij me superglue.