[MUSIC nagpe-play] David MALAN: Ito ang CS50, at ito ay ang simula ng linggo alas-otso. At kami ay kaya nasasabik na welcome likod, malaking sorpresa, sariling Ramon CS50 Galvan, isang tumataas na mga senior na ay naging paggastos sa nakalipas na ilang buwan mula noong Hulyo sa LA, sa Hollywood, literal na nagtatrabaho sa isang bagong tatak ng TV palabas na tinatawag Colony, taga-gawa ng kung saan ay talagang isang Harvard alum kanyang sarili. At kaya kami ay napaka nasasabik upang makita ito pasinaya sa USA ang network na ito ng Enero. Kaya manatiling nakatutok para sa na, at para sa higit Ramon para sa linggo na dumating. Alamin ngayon na ang wakas ay malapit na. At kung ano ang ibig sabihin nito ay mayroong hindi lahat na marami kaliwa ng CS50, malungkot na sabihin. May tatlong problema lang namin sets left-- mayroong itakda ang problema six-- na nasa ang iyong mga kamay ngayon o sa lalong madaling panahon ay magiging, dahil sa ibang pagkakataon sa week-- ay sinadya upang tulay ang aming mga mundo ng command line, kung saan na ginugol namin ang karamihan ng aming mga oras ng paggamit C, at sa mundo ng web programming. Well, makikita mo ang isang pulutong ng mga ideya hiram mula sa command line trabaho, kundi pati na rin ng maraming bagong at kawili-wiling mga ideya na din ang pagpunta sa maging dyermeyn para mga mobile application at para sa teknolohiya, mas pangkalahatang paraan, na kung saan kayo guys ay ang lahat ng mga pamilyar na sa panahong ito sa mga laptop at phone at ang gusto. Kaya makikita mo ipatupad hindi isang web page, o sa isang website per se, ngunit isang aktwal na web server. Makikita mo isulat ang natitirang bahagi ng isang web server nakasulat sa C, na ang layunin sa buhay ay upang makatanggap ng mga kahilingan ng HTTP, ang mga virtual envelopes panatilihin namin ang pakikipag-usap tungkol sa, at tunay na tumugon sa alinman sa ilang static content-- tulad ng isang tuldok HTML file, o isang tuldok JPEG o anumang iba pang mga bilang ng mga file, o kahit na isang file PHP kung saan ang iyong web server ay pagpunta upang bigyang-kahulugan na PHP code at sabihin ang lahat ng mga resulta. Ngayon, nagbigay kami sa iyo sa lubos na piraso ng framework para it-- katunayan ang distribution code para sa mga problemang itakda anim ay higit sa 1,000 mga linya ang haba, isang pulutong ng mga na kung saan ay ang mga komento, upang maging fair-- ngunit ito ay sinadya talagang upang maging isang pagkakataon upang makuha ang iyong mga kamay marumi diving sa isang medyo malaking proyekto na kami tunay na partikular na inukit out piraso ng para sa iyo, kaya na talagang kapag lumabas ka CS50 at ipasok ang mga tunay na mundo ng programming at gusto sa magwilig sa anumang bilang ng mga proyekto, ikaw ay magkakaroon ng mas higit na kaginhawaan ng pag-download sa ilang source code, ang ilang mga open source project sa web, at diving sa at paggawa ng mga pagbabago na nakikita mong akma. Problema set pitong ay magiging tungkol sa paggawa ng iyong sariling web-based application na tumatagal ng dynamic input at gumagawa dynamic output sa anyo ng isang etrade.com-like website. At itakda problema walong ay tumutok sa pa ibang wika na kilala bilang JavaScript. Samantala, ang huling proyekto ay sa abot-tanaw. Ang tinatawag na pre-proposal ay dahil sa isang linggo mula ngayon. Pre-proposal-- bawat ang mga detalye, na kung saan ay sa website-- CS50 ay isang medyo casual na pagkakataon para sa sa iyo upang magpadala ng isang medyo maikli at malinaw email sa iyong pagtuturo kapwa lamang upang magbigay-alam sa kanya o ang kanyang ng kung ano ang iyong iniisip, upang gamitin siya bilang isang importante board. At magkaroon ng isang katinuan check-- kung pinag-iisipan mo tungkol masakit off masyadong marami o baka masyadong maliit, o baka wala kang mga ideya kung ano pa man at nais na umaakit sa isang pag-uusap. Pagkatapos noon ay isang panukala at mag-ulat ng katayuan, ang tinatawag na CS50 hackathon dito sa Cambridge para sa Harvard at Yale mga mag-aaral magkamukha. Ang huling proyekto ni pagpapatupad ay pagkatapos ay dahil. At pagkatapos ay isang CS50 fair dito, sa Cambridge, pati na rin ang isa pa sa New Haven. Kaya ang panukala, tingnan ang ang website para sa mga detalye. Ngunit mas excitingly, masyadong, ay isang pagkakataon upang makuha ang iyong mga kamay marumi, at bukas para sa isang buong iyong isipan grupo ng mga paksa at mga tool at mga diskarte na nasa mababa sa core syllabus ang kurso na iyon, ngunit gayunman kaugnayan. At din kahanga tuntong bato upang ginagawa talagang cool na huling proyekto na pumunta na rin sa kabila ng materyal na sakop namin pormal sa hanay ng problema o sa panayam. Kaya pumunta sa website CS50 para ang buong hanay ng mga seminar. Kung hindi mo pa register, na multa. Sige at mag-sign up pa rin at kami ay follow up sa isang live streaming link, ang araw at oras ay nasa website. At lahat ng bagay ay naitala at ilagay sa online kung hindi ka maaaring gumawa ng mga partikular na araw at oras. Bilang sa kung ano ang namamalagi maaga thereafter-- rin, siyempre, naroon ang CS50 hackathon. Ang larawang ito, isipin ang, mula sa linggo zero na kinunan sa paligid ng 04:00 sa isang gabi sa nakaraang taon. Ang CS50 fair, na muli ay magdadala sa lugar sa parehong lungsod. At pagkatapos, sa planta lang ang binhi, kahit kami pa rin magkaroon ng isang buwan plus kaliwa ng semestre, kung Gusto mo bang sumali sa sariling pagtuturo CS50 kawani, at nais mong simulan nag-iisip tungkol sa pagiging isang CA, o pagtuturo kasama, alam na Kukunin namin simulan ang pakikipag-usap nang higit pa tungkol na mamaya na ito semestre. Ngunit nakalarawan dito ay karamihan ng koponan sa taong ito. At ito, PHP-- at ako ay kaya malungkot noong nakaraang linggo na [? Allyse?] Mabait napunta sa mga pagsisikap ng pagkuha ng sa amin ang mga kahanga-hangang mga props na hindi ako nag end up gamit, kaya ito talagang lamang tumingin uri ng hangal na nagkaroon kami ng pala nakaupo dito ang lahat araw noong nakaraang Miyerkules, at isang maliit na kutsara. Ngunit ito ay ang aking metaphoric paraan ng sinusubukan upang ipinta mga larawan ng kung bakit kami ay paglipat mula sa C sa isang wika tulad ng PHP. At ang parehong ay maaaring sinabi ng anumang bilang ng mga languages-- Java, Python, Ruby o kumpol na others-- ngunit kung saan sa C, halimbawa, pagsulat ng isang programa sa C Maaaring kadalasang sa tulad ng pagkuha ng isang kutsara nang ganito at paghuhukay ng isang butas sa lupa, sa buhangin o dumi. Pinahihintulutan ng PHP sa iyo na kumuha ng marami mas malaking kagat sa labas ng problema, pagsulat ng higit na mas mababa code gamit ang isang malayo mas maliit na kasangkapan, dahil mayroong kaya marami pang iba functionality pieced in. Ngayon, kung kami ay talagang dramatic, gusto naming magkaroon ng isang bagay na pala dito, ngunit kaya ito. Samantala, ang iba pang mga talinghaga dumating up kami sa ay, siyempre, maaari mong gamitin ang isang bagay tulad ng isang wrench martilyo sa isang bagay tulad ng isang kuko. Ngunit siyempre, ang karapatan kasangkapan upang gamitin ay pagpunta na hindi kaya marami sa wika na tinatawag C-- at ngayon lang inis ko [? Sanders,?] Marahil, kami na ayusin na later-- kaya ang karapatan na kasangkapan na madalas gamitin ay hindi magiging ito pinakamababang antas ng tool. At sa katunayan, C ay hindi isang wika na karamihan sa inyo ay kailanman pagpunta sa paggamit, o dapat palaging gamitin muli. At sa katunayan, sa isang maliit na secret-- ang tanging oras Ako ay gumagamit ng C ang aking sarili ay medyo marami sa pagitan ng Setyembre at Disyembre ng bawat pagkahulog semester. At iyon ay dahil kami ay gamitin ito bilang isang pagkakataon upang turuan ang batayan ng mga programa, at sa mga ito ng computer batayan science, data kaayusan, algorithm at ang like-- ngunit masyadong mabilis ay mo makita ngayon na ang syntax at ang mga ideya pinagbabatayan C ay kaya kamangha-mangha maililipat sa mas modernong mas mataas na antas ng wika, tulad ng PHP at Python at Perl at Java at Layunin-C-- talaga, hindi masyado Layunin-C-- ngunit Swift, ang mga mas bagong wika na marami sa inyo ay pagkatapos wiligan sa iyo huling proyekto. Kaya nang walang karagdagang linggal, sabihin aktwal gamitin ang PHP upang malutas ang ilang mga problema. Alalahanin na sa maagang bahagi, huling linggo, aming ginamit lang CS50 IDE, Isinulat namin ang isang maliit na lokomotora maliit na programa na lang sinabi, "Hello mundo." At pagkatapos ay nai-save ko ito sa isang file na tinatawag hello.php. At pagkatapos ay nagpatakbo ako ng utos na ito. At bakit? Sa Ingles, ano ang nangyayari sa dito? Ano ang ginagawa ko kapag Nagpatakbo ako sa utos na ito? Oo? Madla: May ilang mga function na PHP na bumabasa kung ano ang in-- nauunawaan na. David MALAN: Good, may ilang mga pag-andar PHP-- at ipaalam sa akin maging mas tiyak, mayroong isang programa na tinatawag na PHP, a.k.a. Ang isang interpreter, na nauunawaan ang mga nilalaman ng hello.php, at sinasalin ito sa itaas hanggang sa ibaba, kaliwa hanggang kanan, at ginagawa kung ano ang sinasabi ng mga utos. Ang mga utos sa hello.php, siyempre, ay ang pinagmulan lamang code-- function at mga variable at ang mga loop at ang gusto, na natin ang ating sarili Sinimulan ang pagsusulat sa PHP. Ngunit hindi tulad ng C, na kung saan ay isang naipon wika, PHP isulat mo lang ito, at patakbuhin ito. Laktawan mo na middleman hakbang ng convert ito sa mga zero at mga, at pagkatapos ay tumatakbo ito. At kaya kung ano ang isang bentahe ng ito? Bakit laktaw namin ang mga hakbang? Bakit mas modernong mga wika madalas na laktawan ang hakbang na ito? Ano ang mga benepisyo? O intuitively lamang? Kahit na hindi kami ay hindi nakasulat magkano PHP bago, kung ano ang kapaki-pakinabang tungkol sa hindi kino-compile ang iyong code sa palagay mo? Hindi? Hindi tanggapin ang alok? Scratching iyong ulo? Oo. Madla: pa dynamic. David MALAN: More dynamic? Ang ibig mong sabihin? Madla: [hindi marinig] David MALAN: OK, mabuti, sa gayon depende sa input, Hindi mo na kailangang itala ito sa bawat oras. At ito ay tunay na bilang simpleng bilang na- ano ang punto ng patuloy na upang ipunin ang iyong code? Ito ay isang hakbang lang na making-- na ito ay nangangailangan ng, para sa nakaraang ilang linggo, dalawang beses bilang maraming mga hakbang bilang tumatakbo lamang ang iyong mga program. Naging kapaki-pakinabang sa nakikita na ikaw makita ang ilang mga mensahe ng error at iba pa, ngunit ito lamang ay isang nakakainis na hakbang pa rin. At kaya programmers natanto sa paglipas ng panahon, bakit hindi namin simulan ang pagsusulat ng mga wika na hindi kailangan na medyo mekanikal na hakbang, gayon na lamang maaaring sumulat ang iyong code at patakbuhin ito. Ngunit kung ano ang presyo na nakita natin binayaran namin noong nakaraang linggo, na may isang partikular na halimbawa? Oo? Bilis. Kaya [? ano?] interprete ay isang maliit na mas mabagal, sa na mga zero at iyan ay maganda at mabilis para sa isang computer upang maunawaan, dahil ang Intel CPU, o anumang ito ay, lang naiintindihan kung ano ang nangyayari sa may mga pattern ng bits. Sapagkat ang isang interpreter ay isang programa na talagang ay may na basahin ang source Ascii code na iyong isinulat, at i-convert ito, kaya na magsalita, o malaman kung paano ito nag-convert sa huli sa zero at mga. Kaya ito ay tatagal lamang ng isang maliit na piraso ng isang hit pagganap. Kaya ito ay isang piraso ng isang trade-off. Ngayon kung gagawin namin ito sa paglipas dito, hayaan mo akong sige, at gawin ang isang halimbawa ang mga sumusunod. Kung pupunta ako sa dito, ang mga bagong file, pupuntahan ko upang i-save muli ito ay hello.php. At ngayon ako pagpunta sa sige at sabihin, "print hello world" - at isipin na maaari kong gamitin print, hindi ako kailangang gumamit ng print-F. At ngayon down dito, kung gagawin ko PHP ng hello.php, huh-- ko ay hindi mukhang upang bigyang-kahulugan ito. Ano ang nagawa kong mali? Madla: Ang angled bracelets. David MALAN: Oo, kailangan mo na angle bracket up top. Kaya ito ay uri ng nakakainis na, ngunit ikaw ay makakuha ng mabilis na ginamit dito. Kung mayroon akong sumulat ng code sa PHP, ako pangkalahatan ay kailangan upang sabihin sa programa, o sabihin ang interpreter, hey PHP, heto ang ilang mga code na PHP. At pagkatapos ay para sa mabuting panukala, nais ko isara ito hindi sa mga ito, ngunit sa halip may tanong lang anggulo mark bracket, kaya na ngayon down dito, kung nagpatakbo ako ng ito muli, ngayon Nakukuha ko ang ninanais na resulta. Ngayon sabihin gawin ang isang bahagyang optimization ipaalam, kaya lang na iyong nakita ito bago. Ito ang uri ng mga nakakainis na ako kung tumakbo PHP space hello.php, dahil sa nakaraan ko maaari lamang isulat ang tuldok slash pangalan ng programa, na kung saan ay uri ng nice. Ito ay uri ng isang mas mahusay na karanasan ng user. Kaya ito ay lumiliko out na maaari mong gawin ito sa PHP sa following-- ko maaaring gamitin ang medyo cryptic bulong sa tuktok dito, na kung saan ay karaniwang tinatawag na isang shebang, kung saan ito ay isang matalim na simbolo, wika nga, na ito ay isang putok o isang exclamation point. At ito ngayon ay ang landas sa isang programa sa isang tipikal na sistema ng Linux na ay tinatawag na kapaligiran, o env. At ito line-- mahabang kuwento short-- lamang ng isang linya sabi, hey computer, hanapin ang PHP interpreter para sa akin sa kapaligiran, hanapin ito sa iyong memory, kaya na magsalita. At kung ano ang magaling ngayon, ay na kung pumunta ako pababa dito, Ang maaari kong gawin dot slash kumusta dot php, or-- Hmm. Tinanggihan ang pahintulot. Well, makikita mo ang higit pang mga ito sa hanay ng problema pitong, kung ikaw Mayroon pa nagagawa, na may pahintulot. Ito ay lumiliko out na kailangan ko upang maipatupad ang utos na ito tinatawag na [? chamod?] para sa pagbabago mode-- isang plus x hello.php. Kailangan ko [hindi marinig] ang isang ito ng mga karagdagang hakbang na kung saan ay nagsasabi sa aking computer, gumawa hello.php executable. At ngayon panoorin kung ano happens-- dot slash hello.php, ito lamang ay tumatakbo. Hindi ko na kailangan upang tukuyin ang ang tagapagsalin. At maaari kong gawin itong mas prettier, pa rin, kung palitan ang pangalan ng aking paggawa ng bagay na ito. Kung ilipat ko hello.php sa makatarungan Kaya mapapansin Hello-- sa kaliwang tuktok, pangalan ng program ay sa katunayan ngayon lang Hello. Ngayon ay maaari kong gawin itong parang isang programa C, kahit na ito ay nakasulat sa PHP-- o lantaran anumang bilang ng iba pang mga wika. Kaya marginal enhancement, walang functional pagkakaiba. Ngunit ito ay lamang ng isang maliit usisa ngayon, sa gayon ay maaari kang sumulat ng mga programa sa anumang wika, at ang mga gumagamit ay hindi kung alam o pag-aalaga kung ano ang mga iyon ay. Well, tingnan natin ang isang mas ipaalam nakakahimok halimbawa ngayon na ako wip up nang maaga. At ito ay tinatawag quote.php. At ito ay magagamit online. At mapansin na ito ay medyo short-- ngunit ito ay isang command line program na pagpunta sa maghanap ng mga presyo ng stock para sa akin, na kung saan ay tunay na pagpunta na dyermeyn sa set problema pitong. Kaya sabihin makita kung ano ang ginagawa ko. Sa pinakatuktok na nakuha ko ang bukas bracket tandang pananong PHP. Pagkatapos Mayroon akong linya na ito, kung saan ako na nangangailangan ng isang file na tinatawag na functions.php-- kami ay pagpunta upang makita ang higit pa sa ito sa isang bit, ngunit ito ay tulad ng C ni bersyon ng matutulis na isama, saan mo gustong pumunta isama ng isa pang file. Tawag PHP ito ay nangangailangan ng, kahit na ito mayroon ding isang isama function. At ito ay lumiliko out na function.php ay lamang ng isang bagay ako ay nagsulat bago klase. Ko bang ilagay ito sa parehong directory, dahil Nais kong i-factor ang ibang code na maaaring gusto naming gamitin sa ibang dako. Samantala, maaari mong malamang ipahiwatig kung ano ang nangyayari sa dito. Ito ay isang maliit na naiiba mula C-- ngunit kung ano ang ibig sabihin ako sa pamamagitan ng masiguro ang tamang paggamit? Isalin ang mas technically. Sa anong mga kalagayan ako iniwan ang programa, o sa paglabas? Oo? Madla: Kapag hindi mo na kailangang dalawang argumento command line. David MALAN: Kapag hindi ko na kailangang sa command line argumento. At tandaan na ang isa sa mga argumento ay pangalan ng program mismo. At ang pangalawang ay magiging isa pang salita nagta-type ako pagkatapos ng prompt. Kaya lang tulad C, ito ay ang aking paraan ng pag-check, ay ang gumagamit tumulong at patakbuhin ang programa tulad ng nilayon ko? Ngayon, may isang bagay isang maliit na naiiba sa unang C-- ng lahat ng namin na ito ay may dollar sign, at kung ano ang ginagawa ng isang dolyar mag-sign magpakilala sa PHP? Isang variable lang. Iyan ay all-- isang variable lang na sinusundan ng kahit anong gusto mo sa tunay na tawag dito. Pansinin mayroong isang bagay nawawala mula sa aking program PHP, tulad lamang ito ay nawawala huling linggo, kumpara sa C, na kung saan ay kung ano? A mga uri, ngunit din sa iba pa. Walang bagay function-- pangunahing function. Walang mga pangunahing function. Magsisimula ka sa pagsusulat lamang iyong code nang hindi mag-alala tungkol sa isang medyo arbitrary convention ng pagbibigay ng pangalan ng ilang mga default function na main. Kaya arg C ay talagang lamang isang pandaigdigang variable na ang mga interpreter gumagawa ng magagamit na sa akin. Ngayon, ito ay kawili-wili. Kaya tumingin up stuff. Dollar sign stock ay sa kaliwa, na ang aking variable. Sa kanang bahagi ng kamay, mayroong tila isang function sa PHP tinatawag lookup na Ako makapasa aking huling linya ng command argument to-- ano man ang salita ay. At kami na makita kung paano ito ay gumagana sa isang sandali. At pagkatapos ay sa wakas ako uulat ang presyo. Ako nagpi-print out ang isa magbahagi ng naturang at tulad. At tandaan, ito ay ang paraan sa PHP-- isang paraan sa PHP-- kung saan hindi mo na kailangang gawin ang dollar sign S anymore. Maaari mo lamang gamitin ang kulot tirante at plug sa ilang mga variable. Hindi mo na kailangang mag-alala tungkol sa gamit printf sa parehong paraan. At bilang isang bukod, kapag inilagay mo ang isang variable sa loob ng double quotes na tulad nito, ikaw ay gumagamit ng isang magarbong pamamaraan tinatawag na variable agaw. Ito lamang ay nangangahulugan plug ang variable in dito. At bilang isang bukod, ang ilan sa inyo na pumupunta mula sa iba pang mga background programming, hindi mo maaaring gamitin ang solong quote sa paligid ng mga string upang gawin ito. Kailangan mong gamitin ang double quotes para variable agaw sa trabaho. Kung hindi man makikita mo literal makita ang mga kulot tirante. Kaya sa wakas, sige at patakbuhin ito ipaalam. Hayaan akong gumawa ng aking terminal ng isang maliit na mas malaki. Hayaan akong magpatuloy at patakbuhin sa loob ng aking direktoryo quote. [? CDsource?] [? AM?] [? quote] PHP quote dot PHP, at ako pagpunta sa paghahanap para sa isang bagay tulad GOOG, na kung saan ay ticker symbol nito, at isa share ng kanyang bagong pangalan, Alphabet Inc, nagkakahalaga ng $ 717, bilang ng mga araw na ito. Sige, kung gusto naming tumakbo na ito muli, kahit sino magkaroon ng isa pang stock ticker gusto nilang maghanap? Microsoft sa tingin ko ay ang isang ito, MSFT-- $ 53. Sa tingin ko Yahoo ay marahil na. At Facebook ay na. Kaya kung ano ang program na ito ginagawa? Mukhang naka-embed magic Ang sa na pag-andar lookup. Kaya sabihin kumuha ng isang mabilis na pagtingin. Ito ay lumiliko out na hindi dumating may PHP, ito ay nasa functions.php. At hindi namin ay pumunta sa pamamagitan ito sa mahusay na detalye, ngunit paunawa ang pinaiiral salita dito ay na sa anim na linya ng functions.php-- Literal kong sabihin function. Ako tukuyin ang pangalan ng aking function. Pagkatapos ay tukuyin ko ang anumang argumento, o parameter, Gusto ko na pag-andar upang take-- walang uri. At pagkatapos ay ako ipatupad ito. At makikita ko iwagayway ang aking kamay sa pagpapatupad, dahil ito ay medyo advanced karapatan ngayon, ngunit kami ay makita ito muli aktwal sa isang linggo sa hanay ng problema pitong. Ngunit maaari kong linisin ito up, masyadong. Isinama ko rin sa code ngayon ang isang bersyon ng quote, na walang file dot PHP. Dahil kung ano ay marahil sa itaas ng programa na tinatawag na quote lang? Na tinatawag shebang-- ang medyo misteryosong bulong na nagsasabing mahanap PHP at pagkatapos ay tumakbo ito sa aking code dito. Lahat ng mga karapatan, sa gayon ay nagdudulot sa amin na kung saan namin kaliwa off huling time-- kahit na may ilang mga mas advance na mga halimbawa. Ang anumang mga katanungan kaya ngayon si PHP o kung anong ginagawa namin? No-- lahat ng karapatan. Oo? Madla: Sa loob ng HTML file, gawin you-- [? gagawin mo?] [? tumawag lamang ito?] isang [hindi marinig] file PHP? David MALAN: Magandang katanungan. Sa isang web konteksto, na kung saan hindi namin literal tungkol sa paglipat sa, hindi mo gamitin ang tinatawag na shebang sa itaas, dahil ang web server-- madalas na isang programa na tinatawag na Apache o Microsoft IIS, Internet Information Server, o anumang bilang ng iba pang mga software web server, alam na kapag ito ay nakikita isang file dot PHP, na ito dapat tumakbo ang interpreter sa mga ito. Hindi ito tumingin sa na unang linya. Kaya ito ang unang linya bilis ng kamay lamang kapag ikaw ay pagsulat ng command line programs-- na kung saan hindi namin gawin super madalas, ngunit ito ay ang aming paraan ng bridging aming C halimbawa sa ngayon sa aming PHP. Kaya sabihin sa katunayan tulay mundo mula sa command line mundo sa web sa pamamagitan ng paggawa ng mga sumusunod. Hayaan akong magpatuloy at gumuhit sa paglipas dito para sa isang sandali lamang. Kaya kung kami ay may isang web server, o sa halip kung kami ay may aking laptop sa paglipas dito, na kung saan ko gumuhit tulad nito. At dito kami ay may mga internet sa ilang mga form. At pagkatapos ay sa paglipas dito, kami ay isang server sa isang building-- ito ay kung paano ang internet works-- at in dito ay isang server na may ilang ilaw siguro. Ano ang tunay na nangyayari sa pagitan ng dalawang mga koneksyon? Kaya sa gusaling ito ay isang web server. Iyan ay isang computer lamang na tumatakbo ang ilang mga operating system-- siguro ang libreng software na tinatawag na Apache, na kung saan CS50 IDE ay tumatakbo. Kaya maaari mong aktwal na Sa tingin ng gusaling ito bilang ang gusali sa saan CSt0 IDE ay naka-imbak. Iyon ay kung saan mayroon kayong lahat mga account, na kung saan ang lahat ng sa iyo magkaroon ng iyong sariling web server tumatakbo, kayong lahat magkaroon ng iyong sariling natatanging mga URL, bilang sinimulan namin ang pag-usapan, at makikita mo ang higit pa sa P. set anim. Narito ang aking laptop sa tabi-tabi ibang tao sa internet. At kaya kapag binisita ko ang isang URL na nauukol sa akin, na ang trapiko sa internet ay pagpunta sa ibabaw ng mga server, ang server nakatatanggap ng isang HTTP request-- tulad ng isang makakuha ng index.html at ito ay pagtugon sa web page na iyon. Kaya na ang pangkalahatang tularan. Sapagkat ang lahat ng bagay up hanggang ngayon araw na ito, lahat ng bagay nangyayari lamang sa mga paligid ng gusaling ito. Ako ay gumagamit ng aking laptop, ngunit Ako ay konektado sa CS50 IDE, kaya ang lahat ng mga programa ako ay tumatakbo ay sa loob ng server na, mismo. Ngunit ngayon, ay magsisimulang muling paggamit ng PHP ipaalam sumulat ng ilang mga aktwal na mga programa na Hinahain up sa pamamagitan ng isang web server. At upang gawin ito, ako pagpunta upang pumunta sa isang buong grupo ng mga halimbawa na ipakilala ang mga ideya na ito dito. Kaya ito ay uri ng isang magarbong paraan ng naglalarawan ng isang programming tularan. At sa katunayan, bilang lumabas ka CS50 o gumana sa huling proyekto, o kumuha ng ilang mga sundin sa klase, ikaw ay magsisimulang upang makita na ang world-- lalo pagkakaroon ng lumago hanggang may mga wika tulad ng C na sobrang mababa level-- mapagtanto na mayroong mas mahusay na mga paraan ng pagsulat ng software. May mga tiyak na pattern na maaari mong sundin, tiyak na mga paraan ng pag-aayos ng iyong mga file at mga paraan ng pagbibigay ng pangalan sa iyong mga pag-andar, upang ang mahabang maikling kuwento, mundo ay magkaroon ng may isang buong grupo ng mga acronym at mga pangalan ng mga paraan ng programming. Ang mga ito ay lamang ng mga diskarte na maaari mong gamitin. At ang isa sa mga ito ay tinatawag na MVC, para sa Modelo Tingnan Controller. At ito ay lamang, para sa ngayon, isang labis na kumplikado paraan ng pagsasabi kung gaano ka dapat mag-ipon out isang PHP-based website, sa aming kaso. Paano mo ayusin ang iyong mga file, paano mo ayusin ang iyong mga logic, sa isang paraan na ginagawang mas madali na magsulat ng mas kumplikadong mga website? At sa katunayan, bibigyan namin ng mabilis makarating doon sa p-set pitong. Kaya sa mundo ng MVC, ikaw ay pagpunta pangkalahatan ay upang makita na ang aming mga code ay maaari na matatawag na mag-model code, o controller code, o tingnan ang mga code. At ako pagpunta sa oversimplify ito bilang follows-- ang controller ay ang talino ng iyong programa, ito ay kung saan ang lahat ng mga kagiliw-giliw na lohika mangyayari. Kaya lahat kami nakapunta pagsulat sa gayon ay malayo sa klase, ay uri ng tulad controller code-- ito ay pagkontrol iyong programa, ang iyong mga loop, ang iyong kondisyon, ang iyong mga pag-andar at mga variable at ang lahat na. Views, ngayon, ay magiging isang maliit na mas kitang-kita sa mundo ng web. Ang isang view ay ang aesthetics ng iyong website. Ito ay kung ano sees-- user ang mga imahe, ang mga talahanayan HTML, ang mga tag ng HTML, at ang lahat ng na, ang lahat ng mga fluffy aesthetic bagay-bagay na ay hindi na mahirap na isulat, ngunit lamang kung ano ang iyong pagbuo, ay ang tinatawag na view, ang mga aesthetics. At model, sa huli, ay pagpunta na database stuff-- saan magsisimula kami sa diving sa lahat ang mas maraming mga ito Miyerkules. Kaya controller ay ang logic, view ay ang aesthetic bagay-bagay, at modelo ay magiging kung saan iniimbak namin ang aming mga aktwal na data. Kaya tingnan natin ito nang mas concretely ipaalam sa mga sumusunod na halimbawa. Pupunta ako sa pumunta sa aking directory dito ng pinagmulan ngayon code-- lahat ng na ay magagamit online. At ako pagpunta sa pumunta sa bersyon zero. At dito is-- sabihin tumawag ito ang bersyon zero website CS50 ng. Mayroong hindi magkano dito sa lahat. Ito ay isang napaka-simpleng web page na malamang na gumagamit ng kung ano ang HTML tags-- lamang hulaan mula sa mga nakaraang mga halimbawa? Ano yan? H1-- marahil para sa malaking bold pamagat, na logo up top, CS50. At ano ang iba ay sa pag-play? Oo? Madla: Unordered listahan. David MALAN: Unordered list-- kaya ang Ul tag at marahil isang pares ng li tag. At kung hindi mo matandaan ang mga ito, ito matapat ay hindi mahalaga. Ang mga ito ay malambot na uri ng detalye sa pagpapatupad ng HTML na mabilis kang maghanap ng at ikaw ay bumalik sa iyong paraan. Susubukan naming mas pokus sa programming mga ideya na ang juicier piraso. Kaya sabihin lamang ng isang mabilis tingnan ang HTML-- at sa katunayan kung buksan up ko ang source view dito, yup, na eksakto kung ano ang nangyayari dito. Mayroong isang ul tag. Nested sa loob ng iyon ay upang li tag. At pagkatapos ay hiniram ang URL ko ng aktwal na syllabus dito. At pagkatapos ay sa lectures.php ay tila ibang mga dynamic na binuong pahina na pagpunta na magkaroon, ni see-- ah ipaalam, sa unang dalawang linggo ng panayam. Kaya week zero at ng isang linggo, sabihin tingnan this-- kung titingnan ang pinagmulan ng pahina, din sobrang simple. Ang mga ito ay humahantong sa dalawang pahina tinatawag week0.php, at week1.php. Kaya isaalang-alang na ngayon kung ano ang nangyayari. Kapag nag-click ako sa week0.php, ang aking laptop ay gumawa ng isang kahilingan para sa week0.php. Ang web server, a.k.a., CS50 IDE, ay tumatanggap na virtual sobre. Ito ay nakakakita ng mensahe tulad ng, makakuha week0.php. Pagkatapos Ito ay pagbibigay kahulugan sa mga file, top sa ibaba, kaliwa hanggang right-- ang file tinatawag week0.php-- at pagdura ng mga resulta. Kaya sa loob ng file na ito, week0.php, ay dapat na ang controller logic na ay pagbuo ng ito HTML, at kami sa lalong madaling panahon makita na. Ngunit sa ngayon, hayaan mo akong mag-click sa linggo zero, at ngayon kami ay Miyerkules at Biyernes, at ngayon kami ng mga slide dahan-dahan mula sa linggo zero. At maaari mong isipin na ito mula sa paraan likod kapag. Kaya na ang lahat ng website na ito ay ginagawa. Kaya isaalang-alang ang kung paano ito ginagawa ito hayaan. Pupunta ako sa bumalik sa source code dito, sa CS50 IDE, at ako pagpunta upang buksan ang index.php. Sa tuktok ng file na ito ay isang bungkos ng mga komento. At pagkatapos ay sa gitna ng ang file na ito, ito lumiliko out, ay walang code PHP ano pa man. Dahil kung hindi ka magkaroon ng alinman sa mga bukas bracket tags tandang pananong PHP, ikaw ay libre upang ilagay lamang ang HTML. Dahil kung ano ang PHP interpreter ay dapat na gawin, ay kapag nagbabasa ng mga ito sa ganitong file-- sa itaas hanggang sa ibaba, kaliwa hanggang right-- binibigyang-kahulugan lamang ito code na nakikita ito sa pagitan ng mga anggulo bracket tanong mark. At anumang bagay na ito ay hindi makilala bilang PHP, spits out ito lamang. At HTML Ay kabilang sa mga bagay-bagay ay ito lamang ang sabihin ang lahat. Kaya maaaring magkaroon ang file na ito tinawag index.html, ngunit ako sa pagbibigay ng pangalan sa lahat ng bagay dot PHP bilang isang tuntong bato. Lectures.php-- parehas underwhelming, ito ay lamang ng ilang mga HTML. Week0.php, katulad lamang ng ilang mga HTML. Ngunit ni ilagay sa ngayon hayaan kilalang-kilala sumbrero engineering, at isaalang-alang kung paano namin mapapabuti ito. Ito ay hindi mahirap na gawin ito, ngunit ang uri ko ng devolved sa kopya at i-paste. At sa katunayan, kapag gumawa ako nang dalawang linggo, ikaw ay malaman kung ano marahil ako pagpunta sa gawin? Pupunta ako sa pumunta sa week1.php, Ako pagpunta upang i-highlight ang lahat ng bagay. Pupunta ako sa kopyahin ito, i-paste ito sa isang bagong file na tinatawag na week2.php, mag-tweak ang ilang mga URL, at maging sa aking paraan. Kaya batay sa kung ano na namin makikita sa C na, ito ay hindi pakiramdam karapatan, sana. Kopyahin, i-paste bihira ang tamang solusyon. Kaya kung ano ang maaari naming simulan gawin upang mapabuti ito? Nasaan ang mga oportunidad para sa mas mahusay na disenyo? Sa oras na nakukuha ko na week eight, ito ay pagpunta upang maging talagang nakakainis kung gusto kong baguhin ang font ng bawat isa sa ang aking mga pahina, o kung gusto ko upang baguhin ang istraktura ng layout. Kaya kung saan ay ang pagkakataon para sa mas mahusay na disenyo? Well, sabihin isaalang-alang kung ano ang hahanapin ibinahagi sa lahat ng mga file na ito. Narito ang isang linggo, narito ang week zero, narito ang lectures.php, narito ang index.php-- ano ay pareho at ano ang iba't ibang, halos pagsasalita, sa bawat isa sa mga file na ito? Oo? Madla: [hindi marinig] David MALAN: OK, mabuti. Kaya mayroong isang pattern, tiyak, na sukat sa bawat oras na pinili ko ang lecture ko, Dapat kong maging sa pagbuo ng isang halos katulad na naghahanap ng pahina. At kaya marahil maaari kong pagkilos ang katotohanan na ang tunay, kami kusa ayon sa bilang index aming lectures-- kung ako ay maaaring maglagay ng mas maraming mga salita sa iyong sagot. At kung ano ay ang tanging bagay, talaga, na ang pagbabago sa pagitan ng linggo one-- at hayaan mo akong mag-scroll pababa upang ito ay humigit-kumulang sa parehong place-- kaya dito ay linggo zero, humigit-kumulang sa itaas. Narito ang isang linggo, linggo zero, isang linggo, linggo zero. OK, literal kung alam mo walang programa kung ano pa man, ito ay ngayon tulad ng isang pattern na tumutugma sa laro. Kaya kung ano ang iba't-ibang? Oo? Madla: [hindi marinig] David MALAN: Good, kaya ang pamagat ay nagbabago, napaka bahagyang. Zero ang nangyayari, siyempre, sa isa. Parehong bagay ang nangyayari sa H1 tag. At kami ay hindi lubos na makita ito bilang madali, dahil ang mga URL ay isang maliit na mahaba. Ngunit ang mga URL ay nagbabago nang bahagya. Ngunit kung ano ang hindi nagbabago ay, maglakas-loob ko sabihin, ang karamihan sa mga nilalaman ng page-- mga tag na HTML ay ang parehong, ang pinuno ay ang parehong, ang pamagat ay halos pareho, katawan ay ang parehong, at halos lahat ng iba pa ay pareho maliban para sa ang mga maliit na mga pag-aayos. Kaya kung paano namin pumunta tungkol sa factoring ilan sa mga ito sa labas? Well hayaan mo akong magpanukala eksakto na sa susunod na bersyon. Kaya dito sa bersyon ng isa, kailangan ko ang eksaktong parehong file, kasama ang isang pares ng mga iba. Narito ang index.php-- at kahit na hindi mo na makikita PHP bago, kung ano ang am ako malamang ginagawa upang malutas ito problem-- batay sa kung ano ang nakikita mo dito? Oo, ito ay na ang isang bahagyang pangako? Hindi? Oo, pumunta sa. Madla: [hindi marinig] David MALAN: Yep. Madla: [hindi marinig] David MALAN: Kailangan ko sa iyo upang nagsasalita lamang ng isang maliit na louder. Madla: [hindi marinig] David MALAN: OK, mabuti. At think-- ko ito ay mahirap na marinig you-- ngunit ako isipin kung ano ang nakukuha sa ay na ang mga tag na na-karaniwang up itaas, at ang mga tag na ay karaniwan sa ibaba, na ngayon ay isinasali out, o relegated ano ang mga file? Header.php at footer.php-- at kami ay pagpunta upang gumawa ng ilang mga pag-aayos na harapin ang mga pag-aalala ka na lamang itataas ang tungkol sa pagbabago ng mga numero, Halimbawa, kung narinig ko kayo ng tama. Ngunit na parang ang diwa ng mga ito. Kung nagkaroon ng isang malaking halaga ng kalabisan sa tuktok ng pahina, at ang isang malaking halaga ng kalabisan sa ibaba, hayaan literal lamang highlight ni at pinutol na nilalaman out, ilagay ito sa isang hiwalay na file-- tulad lamang ang ideya ng CSS, kung saan isinasali out namin halos katulad aesthetics, ilagay ito sa isang hiwalay na file dot PHP, gamitin ang mga nangangailangan mechanism-- saan ay tulad ng C sharp include-- saan ay mahalagang tulad ng sinasabi ng pumunta grab ang mga nilalaman ng header.php, at kopyahin at ilagay ito dito. Ngunit ano ang ibig sabihin nito ay na ngayon sa index.php, mayroon akong mga dalawang linya. Sa lectures.php, ako din may mga dalawang linya. Sa week0.php, ako din may mga dalawang linya. Kaya ngayon, kung gusto kong baguhin ang pamagat ng lahat ng aking mga pahina, o gusto ko na baguhin ang pangunahing istraktura, Maaari ko ba itong baguhin sa isang lugar lamang ngayon, o dalawang places-- header at footer, ayon sa pagkakabanggit. Ngayon panimulang ang code upang tumingin ng kaunti pa misteriyoso, right? Pero kung sa tingin mo tungkol sa kung ano ang pahina ay doing-- kung ako humihiling week0.php, tulad lamang sa paglipas ng pagguhit here-- kapag week0.php ay hiniling, kung ano ang ibig sabihin nito? Literal, ang file na ito ay hiniling ng browser. A.k.a. Ang web server-- Grabs ito CS50 ID-- file, week0.php, at bumabasa ito sa itaas hanggang sa ibaba, kaliwa papuntang kanan. On line isa, agad ito ay nakatagpo ng bukas bracket tandang pananong PHP, nangangailangan header dot PHP, at iba ano ang interpreter PHP does-- na ang nakapaloob sa web server, dahil kami preconfigured ito para you-- awtomatikong napupunta sa header.php, kopya ng mga nilalaman, pastes ang mga ito dito. Ngunit pagkatapos ay ang pagkikita interpreter question mark malapit bracket, kaya ang lahat ng ito ay tapos na ang pag-iisip. Ngayon ay walang taros lamang spits out ng dalawang linya sa pamamagitan ng pitong, dahil ito lang raw HTML. Nakakakuha sa line walong, at gumawa parehong magic again-- pagbubukas ng file, daklot ang mga nilalaman, at nangangailangan ng mga ito o i-paste ito sa panahon na iyon o doon. Ngunit ko lang tinutukoy ng isang bug. Ito ay isang bahagyang hakbang pabalik, dahil kung titingnan natin sa header.php, Uri ng ko na hiwa ng isang sulok. Ano ang tampok na sumuko ako sa order upang makakuha ng ito tiyak na mas mahusay na disenyo? Oo? Madla: [hindi marinig] David MALAN: Oo, uri ko ng hiwa ng isang nontrivial sulok. Tulis out mo na kung ano ang pagbabago ng ay ang pamagat, ang bilang sa pamagat, at ang mga numero sa H1. Kaya ang aking mga solusyon ay, OK, palitan ang pangalan ni lamang ang pahina ipaalam, at hindi haharapin ang mga iyon problema kahit ano pa man. Kaya na ang isang bahagyang hakbang paurong para sigurado. Ngunit ano ang kapansin-pansin dito ay na kung ano ang ginawa ko sa kabilang banda ay isinasali ang lahat ng mga karaniwang mga bagay-bagay. At sa footer.php, mapapansin isinasali ko out ang lahat ng iyon, kahit na mas maliit, karaniwang bagay-bagay. Kaya kailangan ko upang kahit papaano ay ngayon magagawang kumuha ng isa pang hakbang pasulong, at ayusin na ang mga isyu na pamagat. Kaya sabihin gawin iyon. Hayaan akong pumunta sa aking pangalawang bersyon dito, kung saan, muli, ay may parehong file maliban sa isang bagong karagdagan. At ito ay isang maliit na mas masyadong masalita, ngunit sabihin makita kung kami ay Maaari manunudyo bukod kung ano ang nangyayari sa dito. Kaya sa halip na nangangailangan header.php, at footer.php, Tila ako ay nangangailangan lamang ng isang file-- tinatawag, siyempre, helpers.php. At hayaan mo akong magtadhana ngayon, ano ang nasa loob ng helpers.php lamang ang isang bungkos ng mga function na sinulat ko, tulad ng dati. Ngunit tinatawag ko ito helpers.php. Ngayon tila, sa tatlong linya at 10, ako pagtawag dalawang functions-- header render, render footer. Yaong ay hindi nanggagaling sa PHP, isinulat ko ang mga sarili ko. At nilagyan ko ang mga ito sa helpers.php. Ngayon, iyong makikita lamang namin ang syntax na ito isang beses, at ito ay sobrang maikling. Ngunit ito ay tila isang argument upang mag-render ng header, ang mga function. Bakit ako malaman na? Well dito ay isang malapit paren, narito ang isang open paren. At siyempre, tulad ng sa C, kahit ano sa pagitan ng mga panaklong ay isang input-- o isang argumento sa function. Ano ang mga uri ng data ng argument na ito, batay sa kung ano nai-highlight ko? Ano ang gagawin sa mga square bracket ipahiwatig, batay sa nakaraang linggo? Oo, ito ay isang array-- sadyang isang nag-uugnay array. At ito syntax tinatanggap ay isang maliit na funky, ngunit ito ay lamang ang pagpasa sa isa key pares ng halaga. Ang susi ay, quote magpanipi pamagat, at ang mga halaga ay CS50. Kung kami ay tapos na ito sa C, ito ay maaring halip Tumingin ng mas maraming tulad nito, lamang quote magpanipi CS50-- o talagang magiging kulot braces, o isang bagay na tulad nang sa C, kung saan ang mga key ay zero, at ang halaga ay CS50. Ngunit muli, sa PHP, kahit na ang syntax ay, muli, ang isang maliit na kakaiba, ito ay nagpapahintulot sa iyo upang pumasa sa mga salita sa halip ng mga numero upang iugnay key na may halaga. Kaya kung ano ang ibig sabihin ng lahat? Kung pumunta ako sa helpers.php, Tingnan natin ang function na ipaalam. renderHeader.php, sa halip renderHeader ay ang aking function, at alam ko na dahil nakikita ko ang function keyword dito. Ito ang bagong mula C-- ito tila tumatagal ng isang argument na tinatawag data-- ngunit ako ay maaaring magkaroon ng tinatawag na ito anumang bagay, ngunit ko na tinatawag na ito ng data, na lamang ng isang maliit na clean-- at tumagal lamang ng isang hulaan, lalo na kung na-program sa ilang iba pang mga mas mataas na antas ng wika bago, isang bagay itaas C, conceptually. Ano ang ibig sabihin ng pantay open bracket malamang na ibig sabihin square bracket? O kung ano ang maaaring ibig sabihin nito? Hindi namin nakita ito sa C. Oo? Ang isang walang laman na array. Partikular, ang ibig sabihin nito na kung ang ang user ay hindi na tawag ay renderHeader may isang argument, hindi pa rin ako pupunta na magkaroon ng isang argument na tinatawag na data, ngunit default na halaga ay magiging isang walang laman na array. Kaya ito ay lamang ng isang magandang kaginhawaan. Hindi ko na kailangang sumigaw sa gumagamit, o sasabihin mo ginagamit ang aking mga pag-andar na mali. Ako ay maaaring magbigay lamang ng gumagamit ang isang default halaga, kung hindi ko lalo na pag-aalaga. Ngayon ang function na ito, ako pagpunta upang iwagayway ang aking mga kamay sa. Ngunit ito Extract function na nagbibigay-daan sa amin na ipasa ang mga variable sa data sa header.php sa mga sumusunod na paraan. At ito ay ang huling piraso, Sa tingin ko, ng funky syntax. Ito ang aking bagong bersyon ng header.php-- ito ginagamit upang sabihin, nang literal, bukas title bracket CS50, at na ito. At parehong bagay para sa H1. Ngayon ay tila sabi isang bagay na medyo funky. At ipaalam sa akin pasimplehin ito para sa isang sandali ang mga sumusunod. Ito ay kung ano na ko nagbago ang aking mga pamagat na. Gayunman, ito ay nakakakuha ng isang maliit na pangit upang patuloy na bukas bracket na may PHP, at pagkatapos ay gamitin ang function print. Lumalabas na may isang shorthand PHP notation para sa mga ito, na kung saan ay lamang equal sign, na kung saan ay technically isang function na tinatawag na echo sa halip na i-print, ngunit ito ay ang mga parehong bagay, mabisa. Iyon lang mukhang mas mahusay. Ito lamang ay isang syntactic asukal, kung ikaw ay, na gumagawa ng hitsura ng isang maliit na mas mahusay ang aking code. Ngunit ito ay lumiliko out, at kami ay makita ito muli bago mahaba, kami ay may sa tawag na ito annoyingly pang function na tinatawag na HTML mga espesyal na karakter sa PHP, dahil ito ay lumiliko out may mga ilang mga input na maaaring bigyan ang mga gumagamit sa amin, o na maaaring magbigay sa amin ng mga gumagamit, na pagpunta sa masira ang aming site. Ngunit kami ay makita na ang susunod na linggo na may JavaScript. Ngunit sa ngayon, lamang malaman na ang file na ito, headers.php, kailangan lang tumatagal ang pamagat na Ako ang pumasa sa, ito ay gumawa ng siguraduhin na ito ay ligtas na iturok sa isang web page, at ito spits ito bilang aking pamagat at bilang aking H1. Kaya kung pumunta ako sa bersyon na ito ngayon, mapapansin na ang mga aralin ay bumalik pamagat nito, week zero ay bumalik pamagat nito, at sa katunayan, ang HTML ako sa pagbuo ng ay kapareho ng kung ano ang unang bersyon ng aking was-- maliban para sa aking whitespace, dahil ko na nagsimula sa pag-format ang aking code ng kaunti naiiba. Ngunit ko na nabuo ko ang lahat ang code sa pag-aalaga tungkol sa. Kaya hayaan mo akong i-pause para sa lamang ng isang sandali at tingnan kung mayroong anumang mga katanungan o pagkalito na aking nilikha. Ni-iba ng kahulugan ang lahat ng karapatan, kaya hayaan isang maliit na mahirap dito upang makita kung may isang pagkakataon para sa pagpapabuti. Nagkaroon din helpers.php ito function, na tinatawag renderFooter. At kung ano ang kapansin-pansin sa renderHeader, at renderFooter? At muli, para sa mga layunin sa ngayon, alam na ang katas function ay lamang ang aking paraan ng pagpasa ng argumento sa header.php at footer.php. Paumanhin? Madla: [hindi marinig] David MALAN: Oo, ako lamang nagbago ang nangangailangan ng linya. Kaya literal, nakatuon ko na ang kasalanan ng pagkopya at pag-paste, pa muli. Ito ay hindi isang malaking bilang ng linya, ngunit dumating on-- kung ako sa pagkopya at pag-paste ng lahat ng bagay lamang upang baguhin ang isang maliit na salita, at ang isang maliit na salita na ang mga puntos Alan out ay footer dito, kumpara sa header dito. Kung hindi man, ang lahat ay magkapareho, maliban para sa, siyempre, mga pangalan ng function ni. Kaya kung ano ang maaari naming gawin mas mahusay? Well hayaan buksan up ako ang bersyon na ito dito, kung saan sa helpers.php, bakit hindi ko na lang makakuha ng isang maliit na mas matalinong tungkol sa mga ito? Sumulat bahagyang mas masalimuot code, ngunit tumawag ito render? Kaya ano pa ako sa panimula ay nagbago? Ito ay tumatagal ng isang argument now-- dalawang argumento, data pa rin. At pagkatapos ay kung ano ang unang pangalan marahil ay ginagamit para sa, batay sa kung ano ang iyong binabasa dito? Kahit na ang ilan sa mga syntax ay bago pa rin. Anong sign template dollar? Paumanhin? Madla: Header o footer. David MALAN: Header o footer. Kaya tila, ako ay nagpasya na kung ang tanging bagay na pagbabago ay kung ano ang template ko gusto upang print-- at sa pamamagitan ng template Ibig kong sabihin na ito ay plano para sa code na gusto kong output, ngunit nais kong mag-plug ng ilang values-- kaya kung ito ay lamang ng header o footer, bakit hindi ko parameterize na at tawagan ang argument dollar sign template? At pagkatapos ay nagbibigay-daan sa akin ang mga funky syntax upang lumikha ng isang landas sa isang variable dito. Kaya dollar sign landas ay isang variable. Ano ang syntax na ito gawin, kung hindi ka pamilyar? Oo? Madla: [hindi marinig] David MALAN: Eksakto. Kung template ay, quote magpanipi, header, o kung template ay, quote magpanipi, footer, na linya doon na nai-highlight ko, walong linya, ay simpleng pagkuha na pangalan, tulad ng header, at concatenating ito sa tuldok PHP. Kaya tayo ay hindi na ito operator sa C. Ito dot operator ay isang kamangha-manghang bagay sa PHP-- kung ikaw ay pamilyar sa JavaScript o Java, maaari mong gamitin ang plus sign na gawin pagdudugtong. Sa C, ito ay isang sakit sa neck-- at ako kaya paumanhin, sa p-set anim, ikaw ay pagpunta sa may sa gawin this-- ito ay isang sakit sa ulo pagdugtungin string. Bakit? Well, dahil kung mayroon ka isang string na ito mahaba, at isa pang string na ito mahaba, hindi mo pwedeng plug ang mga ito nang magkakasama. Ano ang gagawin mo sa halip ay may sa gawin sa C? Oo? Madla: [hindi marinig] David MALAN: Kailangan mong malloc memorya, o gumamit ng isang array sa stack. At tunay na may sa gumawa ng sapat na malaki na array upang magkasya ang plus na ito, plus ang backslash zero. Pagkatapos pagdugtungin ang mga ito nang sama-sama gamit pukawin cat o manu-manong na may isang para sa loop, o anumang bilang ng mga diskarte. At ipapakita namin sa iyo ng isang pares sa p-set anim. Ito ay isang sakit sa ulo. At ito ay tunay na kung ano ang ibig sabihin ko tungkol sa ito kumpara this-- tulad ng C kumpara PHP. Makukuha mo lang kaya marami pang iba pag-andar para sa libre, sa gayon ay maaari kang tumuon, sa isip, sa masaya bahagi ng coding, ang proyekto na nais mong malutas, sa halip na ang mababang antas ng detalye. Kaya ito lang bumubuo header.php o footer.php batay sa kung saan ang isa tawag ko. At sa katunayan kung pumunta ako sa index.php, notice lahat na changed-- halip ng pagtawag render header o render footer, Ako pagtawag render, kasunod ang pangalan ng template na gusto kong gawin. At makikita mo ito, masyadong, sa hanay ng problema pitong, kung saan pinapayagan namin sa iyo na gamitin ang parehong function na gumawa bunches at mga kumpol ng iba't ibang mga pahina ng web. Kaya sa halip na tumira masyadong marami pa sa mga details-- na kung saan makikita mo ang muli sa Tingnan natin problema set seven-- ipaalam sa ngayon ang simula ng isang solusyon sa isang mas kawili-wiling mga problema. Kaya ngayon, wala na namin tapos may naka-save na data. Sa katunayan, ang tanging oras na namin kailanman na-save isang bagay na nagawa namin sa klase na ito ay kapag kami ay isang napaka-simpleng demo saglit back, kung saan ginamit namin file IO sa C, at sa tingin ko ako nag-type sa aking pangalan, at Pangalan Hannah, at pangalan ni Maria, o marahil name Andy, at pagkatapos namin nai-save ng isang file na CSV comma separated values ​​file. At ginamit namin fopen-- tingin ko ginamit namin fprintf bilang ko pagpapabalik, at nai-save namin ang isang file. Ngayon, iyon ay ang pinakasimpleng anyo ng isang database. Kung nais mong gumawa ng isang website para sa mga Frosh IMs program, kung saan freshmen maaaring magrehistro para sa isang sport, ikaw sa isip nais na gawin ang isang bagay na may data. Noong nakaraang linggo, kami ay wala may data-- namin sinabi lamang, ikaw ay nakarehistro, hindi talaga. O baka ako ay nag-email ang proctor, at na ito. Ngunit magiging maganda kung magagawa ko bigyan na proctor isang CSV file, tulad ng isang Excel file. O mas mahusay pa, ay ito magiging maganda kung magagawa ko ilagay ang mga pangalan sa mga gumagamit ng internet at dorm pangalan at lahat ng mga na sa isang database na nabubuhay lang sa habang panahon, hanggang sa piliin kong tanggalin ang data. Ang isang database na nagbibigay-daan ako sa query ng impormasyon. At sa katunayan, iyon ang isang database ay. Kami kitang ipakilala ngayon, at sa susunod na linggo, masyadong, isang technology tinatawag SQL-- isang balangkas na Query Wika, na kung saan ay isa pang wika. Ito ay mahalagang isang programming wika, ngunit para sa mga database. At isang database para sa ngayon, lamang isipin bilang isang super fancy bersyon ng Microsoft Excel, o Google Spreadsheets, o Apple Numero. Ito ay karaniwang isang program na nagbibigay-daan sa iyo na tindahan ng buong bungkos ng data sa hanay at haligi, lubos tulad ng maaari mo sa Excel. Ngunit kung ano ang magaling, lalo na kung hindi pa kami sobrang pamilyar sa Excel, kung ano ang nagbibigay-daan sa SQL mong gawin ay ang query na ito impormasyon sa pamamagitan ng pagsulat ng mga linya ng code kung saan maaari mong, kahit na ang iyong database ay may isang milyong mga hilera sa loob nito, maaari kang makahanap ng napakabilis na mga bagay. Sa katunayan, Excel ay partikular na masama sa malaking hanay ng data. At sa katunayan, hanggang sa ilang taon na ang nakaraan, naka-out Excel ay tanging daan sa iyo upang mag-imbak hanggang sa 65,535 na mga hilera ng data-- saan tunog tulad ng maraming, ngunit sa oras na ako ay isang Grad mag-aaral, at natatandaan ko balakid sa paglipas ng ito dahil ako ay pagbuo ng CSV file para sa aking research at ako nais na suriin ang mga ito nang mabilis sa pamamagitan ng pagbubukas up lang sa Excel. Siyempre, ang aking computer lamang nag-crash, dahil ako ay higit sa 65,000 na mga hilera. Ngunit kung saan ay ang 65,535 nanggaling? Ano ang Microsoft ginagawa, siguro? Kung ikaw ay handa na sa iyong kapangyarihan ng dalawa? Oo, sila ay gumagamit ng isang 16-bit halaga sa kumakatawan sa bilang hilera. At dalawa hanggang 16 ay 65,536-- minus one, dahil kung ikaw zero index ay nangangahulugan na ang pinakamaraming bilang ng mga hilera maaari ba akong magkaroon. At ito ay lamang ng isang desisyon na disenyo. Sa pamamagitan ng pag-save ng 16 bits, limitado sila sa akin sa 16,000 na mga hilera, sa halip ng 4 na bilyon, kung saan maaari ko ay may perpektong. Ngunit sa ngayon, kami ay pagpunta sa ipakilala ito ng higit sa isang web konteksto. At kung ano ang magaling tungkol sa SQL ay na kahit na kahit na ito ay medyo malakas at medyo sopistikadong, ito talagang kahulihan down sa apat na key operasyon, apat pangunahing pag-andar, kung will-- mong piliin, para sa pagkuha ng data, paghahanap para sa data; tanggalin o pagtanggal ng data; ipasok para sa pagdaragdag ng mga hilera sa database; at pag-update. Kaya't kung ikaw ay may kailanman ginamit Google Spreadsheets, Numbers Apple, Microsoft Excel, mo magawa, malamang, lahat ng ng mga operasyon bilang isang tao sa pamamagitan ng lamang gamit ang iyong keyboard at na mouse pagpasok ng data, gamit ang iyong mga mata upang piliin o paghahanap para sa data, o data update, o tanggalin ang data. Kaya kung ano ang ibig sabihin nito? Well, i-pre-install sa CS50 IDE ay isang programa na tinatawag na MySQL. Ito ay isang libre, open-source database na sobrang popular. Facebook, halimbawa, ito ay gumagamit na ito araw, bukod sa iba pang mga kasangkapan na ginagamit nila. At ng maraming mga napaka-tanyag na mga website gamitin ito sa malaking bahagi dahil ito ay mabilis, at dahil ito ay libre. Kahit na tiyak na alternatibo na umiiral. At ang ilan sa inyo ay maaaring magwilig sa alternatibo para sa pangwakas na proyekto. Ito ay isang screenshot, samantala, ng isang web-based tool na tinatawag na phpMyAdmin. Ito ay isang pagkakataon na ang ang kasangkapan na ito na batay sa web ay isa ring nakasulat sa isang wika, PHP, ngunit kung ano ito ay sinadya upang gawin ay bigyan kami ng isang web-based interface sa isang database. Dahil kadalasan MySQL ay isang bagay, kasaysayan, ikaw ay nakikipag-ugnayan na may lamang may isang command line. At magiging super nakakainis at arcane upang magkaroon mag-type ng tekstuwal mga utos upang piliin data, ipasok data, at tanggalin ang data. Kaya ang ilang mga tao sa internet nagsulat ng isang programa batay sa web na ipaalam lamang sa amin pamahalaan ang data sa aming database. Ito ay tulad ng pag-double click sa Excel, at pagpapatakbo ng isang bersyon ng web-based na mga iyon. At kung ano ang iyong pagpunta sa gamitin ito para sa huli sa susunod na linggo, hindi sa p-set anim, ngunit ito ay bumuo ng isang bagay tinatawag CS50 Finance, na ay pagpunta sa may isang database ng mga gumagamit, na may mga pangalan ng user at password, halaga dollar na sila may sa kanilang mga account sa bangko. Ito ay magiging isang bagay na ginagamit mo upang mag-imbak ng mga simbolo at mga dami ng mga stock na mga gumagamit may binili gamit virtual dollars mo na ikaw ang magbibigay sa kanila. At ito ay pagpunta sa payagan ang mga gumagamit upang magrehistro para sa iyong site, upang ang kahit iyong mga kaibigan maaaring tune in sa iyong website at ang tunay na magparehistro, mag-log in, at maglaro sa paligid at subukan upang maghanap ng pula sa iyong code, at subukan upang mahanap ang mga bug sa iyong website. At ang mga ito ay kailangan lang magparehistro sa pamamagitan ng pagdaragdag ng kanilang mga sarili, mabisa, sa pamamagitan ng code isulat mo sa iyong database. Halimbawa, ito ay isang mabilis screenshot ng kung ano ang maaaring hitsura ng isang database. Ito ay mula sa isa sa solutions-- nakaraang taon ito ay tulad ng isang mini Excel maghain, naka-imbak sa aming database, naka-imbak sa software na ito na tinatawag MySQL. Sa kaliwang bahagi, na hindi ko na tila ibinigay sa bawat gumagamit ng isang natatanging numero. Sa ikalawang hanay, ko na ibinigay lahat ng tao sa isang gumagamit name-- aking sariling sa kanila. At sa kanang bahagi ng kamay, Ibinigay ko sa kanila ng isang hash. Ngayon na ito ay talagang isang password, ngunit ito ay hindi isang plain text password. Ito ay isang naka-encrypt na password, kung ikaw, o ang isang hash password. Aling kami ay bumalik sa bago ang haba. Ngunit kung sakaling mo na basahin isang artikulo tungkol sa kung paano ang iyong password sa ilang mga bangko o ilang maaaring nakompromiso website, Maaari itong mangahulugan ng isa sa dalawang mga bagay-bagay sa pangkalahatan. Kaya ito ay lamang ng isang sipi ng anim na mga gumagamit. Lahat ng sa iyo ngayon malaman out sa pamamagitan ng pagha-hack o crack kung ano ang mga password sa aming anim na tao ay. Ngunit kung sakaling mo na tapat na paraan isang alerto o isang paghingi ng tawad mula sa isang kumpanya o kasabihan website, Paumanhin, isang hacker sinira sa aming database, dapat mong malamang na baguhin ang iyong mga password, kung ano ang maaaring sabihin na? Well, isa, maaaring nangangahulugan na ang Ang kumpanya ay higit moronic, at ito ay pag-iimbak ng iyong mga password sa isang haligi na ito, hindi naka-encrypt. Na nangangahulugan na ang kalaban, na balabal ang database, literal na alam ng iyong username at password. Iyan ay ang pinakamasama posibleng sitwasyon. At tulad ng makikita mo sa p-set pitong, kaya madali upang maiwasan. May ay ganap na walang dahilan para sa na anyo ng katangahan sa internet ngayon. Two-- at kami na mahanap ang ilang mga artikulo upang magpatotoo sa katotohanan na ito pa rin mangyayari, nonetheless-- dalawang, marahil ng kalaban nakaagaw ganitong bersyon ng database. Alin pa rin ang uri ng mga masama, dahil ngayon alam nila na ako ay may anim na mga customer, Alam ko ang pangalan ng user ng anim na mga customer sa mga, at alam ko ang mga naka-encrypt bersyon, o ang na-hash na mga bersyon, ng mga password ng mga anim na mga customer '. Ngunit anuman sa iyo na baka nagawa [? Hacker 2?] kung saan ka basag password, o kinuha isang tumingin sa na bersyon ng problema set, kung bakit ito ay pa rin ng isang maliit na nakakaligalig kung alam ng kalaban iyong hash mga password? Madla: Dahil hindi na nila ipasok ang buong diksyunaryo sa hash. At kung ang iyong password ay isang diksyunaryo salita, [? maaari lang nila match--?] David MALAN: Eksakto, ang kalaban maaari lamang isulat ang code, tulad ng ilan sa inyo ginawa para sa [? Hacker?] 2, kung saan umulit ka sa ibabaw lahat ng mga salita sa diksyunaryo, o lahat ng posibleng mga kumbinasyon ng A sa pamamagitan ng Z at isa sa pamamagitan ng nine-- na tunog tulad ng isang pulutong, at ito ay. Ngunit para sa isang computer, ito ay medyo darn mabilis. At sa katunayan, iyon ay ang punto ng [? Hacker 2,?] Ay upang kumuha ng mga bagay-bagay na literal ganito ang hitsura nito, at reverse engineer kung ano ang aktwal na ito ay. Kaya titingnan namin kung paano namin tindahan na ito nang mas mahusay. Ino-out, thankfully sa MySQL, doon ay magiging mga uri ng data. At isa sa mga nakakatuwang bahagi tungkol sa database ng disenyo, upang maging matapat, ay aktwal na pagpapasya para sa iyong sarili kung paano dapat kumatawan sa iyo ang data? Dapat ikaw ay kumakatawan sa isang numero ng telepono bilang isang int, tulad ng isang malaking bilang, o ng isang mahabang? O gawin mo talagang gawin ito bilang isang pagkakasunod-sunod ng mga karakter? At doon ay maaaring maging lubhang di-mahalaga epekto ng mga ito. Sa katunayan, ang isa sa mga pinakamaagang, masaya dyermeyn mga kuwento ay kapag gusali Mark Zuckerberg ay Facebook, orihinal na ito ay nakasulat sa, at pa rin ay higit sa lahat na nakasulat sa PHP. At ang isa sa mga pinakamalaking hamon nahaharap sila sa maagang bahagi ay scaling. Kapag itinatago nila ang pagdaragdag ng paaralan pagkatapos ng paaralan pagkatapos ng paaralan, sa aking kaalaman, ang isa sa mga orihinal na mga solusyon ay mahalagang upang kopyahin at i-paste ang ilan sa mga database at ang ilan sa mga code, kaya na Harvard ay tumatakbo sa kanyang sariling server, at MIT ay tumatakbo sa kanyang sariling server. At ito ang dahilan kung bakit, para sa ilang sa iyo kung sino ang maaaring isipin ang, Hindi ka maaaring magkaroon ng mga kaibigan sa ibang mga network. Ikaw ay malamang na hindi magkaroon ng mga kaibigan sa MIT o Harvard 10 o kaya taon na ang nakaraan, ngunit hindi mo maaaring span networks para sa bahagyang mga na dahilan. At ang isa sa mga pinakamalaking hamon para sa Mark at para sa mga kumpanya tulad ng Facebook ay aktwal na paghawak ng mga daan-daang at libo-libo at milyun-milyon ng mga kahilingan sa bawat segundo. Kaya ang mga bagay na magsisimula kami pakikipag-usap tungkol sa linggong ito ay talagang magiging dyermeyn sa pagsulat ng mahusay na software, at sikat matagumpay na mga tool na maaaring hawakan ng maraming mga gumagamit. Kaya makikita namin makipag-usap tungkol sa mga bagay tulad ng pag-index at paghahanap, ngunit na ito para sa araw na ito. Kami ay makita sa iyo para sa higit sa Miyerkules. [MUSIC - "SEINFELD" TEMA] David MALAN: Maaari mong Upang ito, at mag-alis mula sa mga ito. At hindi mo na kailangang i-stick sa ilang mga pre-natukoy na halaga ng memory. Well, ano ang na pagpunta sa ay tinatawag na? Tagapagsalita 1: Well, ano kaya ang nangyari? Tagapagsalita 2: Ano ang ibig mong sabihin? Siya ang pagbibigay ay isang panayam. David MALAN: At maaari naming gamitin ang isang function na tinatawag malloc sa na memorya Tagapagsalita 1: Bakit ay hindi gumagalaw ang kanyang mga armas? Tagapagsalita 2: Well that's-- alam mo, iyon ang normal. Ito lang ang gusto niya ay may lamang big sausages nakabitin doon. Tagapagsalita 1: Iyan ay normal? Tagapagsalita 2: Oo, ako sa tingin namin ipinapalagay lamang niya sinasadyang pinalitan ang kanyang deodorant na may superglue.