[Powered by Google Translate] [Week 8] [David J Malan] [Harvard Universiteit] [Hierdie is CS50.] [CS50.TV] Welkom terug. Dit is CS50, en dit is die begin van die week 8. 'N paar geleenthede hierdie week, onder hulle praat hier, by watter kos sal bedien word. Vir meer besonderhede check die skyfies wat aanlyn is. En ook 'n ander geval hierdie week deur ons eie Thomas Carriero. Hy is een van CS50 se voormalige hoof onderrig genote wat nou by Dropbox, en hy is die man wat ons hooked up met die jy weet wat, so as jy meer wil weet van daardie kop na hul gesprek vanmiddag vir Dropbox en nog baie meer. CS50 middagete is hierdie Vrydag. Doen by ons aansluit as jy in staat is om, 1:15, soos gewoonlik, op Fire and Ice. En nou het ons duik in iets genaamd Seminare. Ons CS50 Seminare, onthou, is hierdie opsionele klasse gelei deur die onderrig genote en natuurlik assistente en vriende van die kursus, mense van 'n groep op die kampus genoem ABCD, wat is 'n groep van technophiles op die kampus, sowel as 'n groep met die naam HCS, die Harvard Computer Society, voorgraadse studente wat insgelyks geïnteresseerd in rekenaar. Hierdie jaar se rooster van seminare sluit seminare op Android en IOS en JavaScript en PHP, Unix, Vim, en nog baie meer, so besef dat hierdie seminare kom. As jy wil om te RSVP vir enige van hulle kop na die URL daar. Ons sal dan die tye en plekke plaas op die kursus se webblad sodra dit gefinaliseer is. Maar weet daar is 5 jaar se moeite werd van vorige seminare aanlyn beskikbaar, baie van wat nog baie stroom in terme van tegnologie jy dalk wil om te speel met jou finale projekte, sodat daar kop vir 'n paar beskikbare video's daarvan. CSS, diegene van julle wat reeds vertroud is met CSS, Wat is dit in 'n neutedop? Wat is CSS? Dit is Cascading Style Sheets, en wat beteken dit? Wat beteken dit vir ons doen, CSS? Alle reg, laat opwarm met 'n makliker een, HTML, HyperText Markup Language. Wat beteken dit vir ons kan doen? Enigeen by almal? Dit is regtig ongemaklik om hierdie vrae te vra. HTML, HyperText Markup Language. Ja? Nie? [Onhoorbaar student reaksie] Goed, goed, dit stel ons in staat om te merk teks te vertoon in 'n webblaaier. Dit is nie 'n programmeertaal. Dit is inderdaad 'n opmaak taal, wat beteken dat dit die leser hoe om te vertoon opdrag inligting, sodat die eenvoudigste inkarnasie van hierdie as ons gesien het is iets super eenvoudig soos boldfacing, oop bracket b gesluit bracket sê hierdie teks vet maak, en dit is eintlik net een van baie maniere waarin ons dit kan doen, en inderdaad, hierdie dae 'n beter benadering jou web bladsy, stylizing om dinge te maak vet en kursief en gesentreer en geregverdig en dies meer, is nie gedoen nie alleen via HTML tags maar eerder met 'n tegniek genaamd CSS, Cascading Style Sheets. Dit is 'n taal op sigself. Dit is ook nie 'n programmeertaal, maar- almal, dit is Dan, wat hou by ons vandag. 'N paar tegniese probleme. Nie 'n probleem. CSS stel ons in staat om 'n bladsy te stiliseren deur die instelling van die sogenaamde eienskappe, so laat ons neem 'n blik op hierdie deur middel van 'n paar basiese voorbeelde. Laat my gaan vandag in die toestel. Ek het die bron 8 Maandag directory in hier, en ek gaan om te gaan na 'n gids met die naam van CSS waar ons 'n hele klomp van lêers wag vir ons hier, en ons het in hierdie gids, byvoorbeeld, search0.html van die laaste tyd. Nou, onthou ons vertrek met search0 op hierdie nota deur soort van die implementering van Google of eintlik net die front-end vir 'n week of so gelede, en let op dat ons het 'n paar nuwe tags daar. Ons het h1 vir 'n groot, vet opskrif, vorm, wat ons toegelaat het om werklik 'n HTML-vorm vir die toevoer van die gebruiker. Aksie, wat was die betekenis van 'n aksie attribuut op die HTML-vorm tag? Wat was die betekenis van hierdie aksie? Ek sal net doen dit vandag. Aksie is die bestemming waar die vorm gaan ingedien word. Die feit dat sê action = "google.com / search" beteken dat wanneer die gebruiker op die submit-knoppie of die ekwivalent watter vorm velde wat hulle ingevul gaan word nie aan ons bediener gestuur of ons toestel maar eerder om daardie spesifieke URL by Google. En die metode wat dit gaan gebruik word genoem kry, en kry, vir nou, is net 'n tegniek vir die inligting deurgee saam na 'n web-bediener deur middel van die URL, so laat ons neem 'n vinnige blik op hoe dit werk. Let daarop dat daar is 'n inset wie se naam is q wie se soort teks en dan 'n tweede inset van die tipe ' waarvan die waarde is CS50 Soek, en inderdaad, as ons hierdie lêer oop te maak, search0.html, dit is 'n super eenvoudige vorm, en as ek soek vir iets soos rekenaarwetenskap en dan druk Enter of kliek op CS50 Search sien dat wat gebeur is buite om te Google Ek het spesifiek op hierdie URL beland op die top, google.com / search q =? rekenaar + wetenskap, en rekenaarwetenskap is natuurlik wat ek getik. Die + beteken net dat is waar 'n spasie karakter was, en dit is gedoen deur die leser net om seker te maak dat daar geen verwarring en wit spasie in die werklike URL. En dan q, natuurlik, is die parameter naam. Ons het nie gesien hoe ons, die programmeerder, kan eintlik toegang q nog. Ons kan aanneem dat Google weet wat om te doen met dit hier, maar ons sal daar vandag op die regte tyd. Maar laat my toe om 'n blik plaas by search1.html, wat lyk 'n bietjie anders, want ek het besluit dat hierdie vorm hier was net 'n bietjie lam. Ek bedoel, dit is by die boonste linkerhoek. Daar is regtig geen estetika, en so ek wil om dit te stileer 'n bietjie meer soos Google, wie se tuisblad, onthou, selfs al is jy nie dit wat dikwels besoek, lyk vandag soos hierdie op Halloween. As ons plaas weergawe 1 van hierdie lêer, soek 1.html oopmaak, het ek dit gesentreer. Nog redelik lelik nie, maar ten minste nou het ek begin om die estetika van hierdie bladsy te beheer, nie net die nasien daarvan. Kom ons neem 'n blik op soek 1, en daar is regtig net een verskil hier, wat kan spring uit by jou, of miskien nie, maar wat is die een lyn of uit van die verskil? Daar is hierdie styl kenmerk, so dit blyk dat in HTML die meeste elemente, kan die meeste tags 'n styl kenmerk op hulle, en binnekant van daardie styl kenmerk is 'n aangehaal string, en dat aangehaal string CSS. Jy kan cascading style sheet daar deur dit as 'n eiendom se naam te spesifiseer gevolg deur 'n dubbelpunt, gevolg deur 'n waarde. Dit is 'n soort van 'n ongelukkige ontwerp-besluit 'n paar jaar gelede dat CSS is 'n taal op sigself, maar dit is sintakties baie verskil van HTML. In hierdie geval, sien ons dat die binnekant van my webblad, wat geskryf is in HTML, Ek het CSS binnekant van hierdie aanhalings, en die Konvensie vir CSS is dat jy wat 'n eiendom, gevolg deur weer 'n kolon genoem word, gevolg deur die waarde van daardie eiendom, dus is daar geen gelyke teken. Daar is geen addisionele aanhalings. Dit is net hierdie dubbelpunt geskei sleutel waardepaar, en teks lyn doen presies wat dit sê. Dit lijnt jy die teks in die liggaam van die bladsy, wat is regtig die guts van die bladsy, in die middel. Okay, die eindresultaat, om duidelik te wees, is dit. Nie alles wat sexier, maar ten minste is dit gesentreer en 'n bietjie meer soos die ware Google. Maar wat as ek plaas oopmaak weergawe 2 van hierdie en wys hier onder om 'n nuwe tag altesaam? Nou in die kop van my bladsy, wat voorheen het net wat tag in alle vorige voorbeelde? Dit moes net die titel. 'N Oomblik gelede het die kop tag kyk soos hierdie. Nou in plaas dit het 'n styl tag binnekant van dit, en dit ook, ek is jammer, lyk sintakties baie verskillende van HTML, maar jy daaraan gewoond te raak, waardeur binnekant van die styl tag Ek kan nou faktor wat 'n oomblik gelede 'n kenmerk van die styl kenmerk, en ek kan sit dit op die top van my bladsy. Hoekom? Wel, dit is 'n stap in die rigting van die skoonmaak dinge, net soos in die C-kode te skryf sou ons soms skryf funksies faktor gemeenskaplike funksionaliteit. Dit is net 'n bietjie skoner factoring te begin uit dinge soos die estetika na 'n sentrale plek eerder as om dit alles deurspek regdeur jou HTML. Dit beteken ook wat dit sê, selfs al is daar is 'n bietjie van die nuwe sintaksis. Dit is hier om 'n keurder, en liggaam beteken net kies die liggaam element en die volgende eienskappe toe te pas om dit te. Wel, die eiendom is presies dieselfde. Vir 'n goeie maatreël Ek het bygevoeg 'n kommapunt aan die einde, wat geneig is om te wees konvensie, en ek het hierdie hele eiendom toegedraai kode tussen krulhakies, want ek kan eintlik verskillende dinge hier. Ek kon eintlik sê iets soos kleur: blou; Nou dit is ook nie van plan om 'n stap in die rigting van enigiets alles wat mooier, maar as ek nou terug gaan na die weergawe 2 het ten minste het ek nou die liggaam van my bladsy se teks al die blou. Die knoppie dieselfde bly, want dit is 'n inset. Dit is nie suiwer teks. Maar alles wat teks, soos CS50 Search tot bo, is in werklikheid blou. Weer, al het ons nou gedoen verwyder uit die liggaam tag, kennisgewing, die styl kenmerk, en ons het ingereken dit hier. Dit is nie 'n groot verbetering, maar as ons hierdie een stap verder neem Let op wat ons kan doen in die derde weergawe hier. In search3.html die webblad is byna identies behalwe vir dit wat nuwe tag nou? Link, so hierdie een is baie gepas nie genoem omdat jy nie met 'n skakel in die sin van 'n klikbare skakel. Nee, jy is soort van die doen van die ekwivalent van # sluit in C waardeur die link tag met 'n href kenmerk en 'n rel kenmerk sê gaan voort en 'n afskrif plak die inhoud van 'n lêer genaamd search3.css reg hier, in wese. Dit maak nie regtig doen nie, maar dit is die gees van dit. Dit sê gaan oop lêer, search3.css, en behandel dit asof die gebruiker ingetik dit reg hier in die kop van die bladsy net soos ek gedoen het in die vorige voorbeeld. Search3.css, intussen, is redelik eenvoudig. Dit is regtig bevat presies wat was 'n oomblik gelede in die styl tag, maar ek ingereken dit hier na sy eie lêer. Selfs al het ons nie spandeer baie tyd in HTML of web ontwikkeling op alle net intuïtief wat is die motivering, miskien, vir factoring uit hierdie klein brokkie selfs van CSS in sy eie lêer en dan dit met hierdie link tag hier? [Onhoorbaar student reaksie] Goed, dit is makliker om te lees in die sin dat jy jou CSS in 'n CSS-lêer. Jy het jou HTML-kode in jou HTML-lêer, dus is dit meer leesbaar in daardie sin nie. Wat anders kan wees dwingende? Ja. [Onhoorbaar student reaksie] Ja, so jy kan sluit dit baie keer, so nou het ons doen hierdie basiese voorbeelde met individuele lêers, maar dink jy werklik jy maak 'n ware webwerf soos jy sal vir pset 7 of jou finale projek miskien, en jy wil verskeie webblaaie te hê, is so seker algemeen op die World Wide Web, en dit sou soort van kreupeles om te kopieer en plak dieselfde blou kleur en dieselfde teks in lyn sentrum in elke een van hierdie bladsye. Inteendeel, dit maak meer sin om faktor, baie soos ons gedoen het in C met die h-lêer, sit dit in 'n sentrale plek, in hierdie geval search3.css, en dan toelaat dat enige lêer in om jou webwerf te sluit in dat lêer deur middel van hierdie tag hier in lyn 16. Soos gewoonlik die geval is, het ons begin met weergawe 0, watter soort van werke maar is nie noodwendig die beste, en met elke stap, soek 1, soek 2, en nou soek 3 het ons hierdie baba stappe geneem na ontwerpe wat is 'n bietjie skoner en meer voorbereidende vir meer komplekse bladsye wat ons kan doen in die pad af. Laat my een laaste voorbeeld hier oop te maak net om te wys 'n selfs meer gestileerde bladsy, maar laat ons kyk na die HTML. Dit is search4.html, en let op dat dit struktureel is amper dieselfde behalwe vir die bekendstelling van 'n nuwe tag, DIV. Div is 'n tag wat stel 'n afdeling van die bladsy. Jy kan dink van hierdie as 'n onsigbare reghoek. Dit skep soort van 'n strook van die gebied in die webblad wat jy kan stiliseren alles op een slag. Wat ek hier gedoen is, is soos volg. Binnekant van my liggaam tag, wat is daar almal saam, Ek sê 'n afdeling van die bladsy hier via lyne 45 deur 47, en dit beteken in wese gee vir my 'n onsigbare reghoek langs die top van die bladsy. Gee my dan 'n tweede reghoek, alhoewel onsigbaar, onder, en identifiseer dit deur die naam inhoud, en dan laastens, gee my 1/3 afdeling aan die onderkant van die bladsy genoem ID. Ons sal sien hoekom ek dit gedoen het in net 'n oomblik, maar konseptueel Ek het 'n kop-afdeling. Ek het 'n inhoud-afdeling, en ek het 'n footer afdeling van die bladsy selfs al is dit net in opmaak. Die gebruiker is nie van plan om 3 reghoeke om te sien, maar soort van struktureel daar agter die skerms hulle is eintlik teenwoordig. Nou, wat omgee? Hoekom eintlik doen? Alles anders op die bladsy is dieselfde as wat ons voorheen gesien het nie. Hier is my vorm. Hier is my insette, my insette, 'n lyn breek en so meer. Hier is 'n beeld, al is, so ons sal sien waar dit vandaan kom in net 'n oomblik. Hier is 'n voet, wat is 'n nuwe, net omdat ek wou te voer sommige meer inhoud. As ons scroll up opmerk dat die ID van hierdie div kop. Die ID van hierdie div inhoud, en die ID van hierdie een is footer. En soos die naam aandui, wanneer jy 'n ID-attribuut in HTML, moet dit per definisie identifiseer een van die elemente, een van die tags in jou bladsy. Die las is heeltemal op jou om te onthou dat jy 'n header ID reeds. Jy het 'n footer. Jy het reeds 'n inhoud-ID. Die rekenaar is nie van plan om uit te vind wat 'n beskikbare ID is vir jou, sodat jy kan gee per ongeluk 2 tags 'n ID van die kop, en dit sou net verkeerd wees. Jy moet in gedagte te hou wat jy geskep het, maar sodra jy dit gedoen het kennis wat ons hier doen. Ek kan nou spesifiseer in my styl tag op die top of gelykerwys in my CSS-lêer, as ek nog steeds met behulp van die weergawe, # Header ek kan sê, en wat dit beteken, is dat alles wat tag in hierdie webblad het 'n ID van die kop en #, net deur menslike konvensie verteenwoordig ID. Die skerp teken of hekje verteenwoordig ID. Selected is die naam wat ek het dit. Dit beteken dat hierdie CSS eiendom toe te pas watter tag op hierdie bladsy 'n ID van die kop dra. Dieselfde deal hier. Dien hierdie eiendom, wat gebeur dieselfde te wees, aan enige element wie se ID is inhoud, en dan af hier sien ek het 'n bietjie Persoon met footer. Enige element wie se ID is footer, waarvan daar kan net een per definisie, gaan voort en maak sy lettergrootte kleiner, sy font gewig vet, sy marge 20 pixels. Wat beteken dit? Dit is net 'n marge op die top, die onderkant, en die linker-en die reg. Dit gee my 'n 20-pixel onsigbare marge rondom dit net alles weg te stoot van dit 'n bietjie, net soos julle dit kan doen in Word, Microsoft Word of bladsye of die wil. En dan teks in lyn sentrum. Kom ons sien die eind resultaat, en dan gaan ons terug tot die een oorblywende snippet van CSS. Dit is weergawe 4, het ons vir die soektog voorbeelde, en dit is baie, baie sexier. Nou, in regverdigheid, ek het net Googled "google font logo generator." En dit het my toegelaat om 'n GIF, 'n beeld-formaat aan te bied, wat lyk soos dat daar te skep. In feite, kan jy dit ook doen. Ons het "google fonts logo generator." Kom ons kyk of ons kan dit doen. Okay, ek dink dit is die webwerf wat ek gebruik. Ons kan sê Ec 10, byvoorbeeld, en hulle maak hul eie. Jy kan speel met dit die hele dag lank en dan regs kliek op dit en dan die werklike GIF, wat is al wat ek gedoen het. En inderdaad, dit is die rede waarom in my HTML, onthou, hier Ek het 'n beeld tag, wat ons kortliks verlede week gesien het wie se bron is logo.gif. En wat weer was die motivering vir die feit dat hierdie alt attribuut, hierdie alternatiewe kenmerk? Ja. [Onhoorbaar student reaksie] Goed, so 2 redes regtig, as die leser kan nie trek die beeld want jy het 'n stadige netwerk verbinding, of die beeld is korrup of iets soos dit ten minste die mens kan sien "CS50 soek," en dan ook vir toeganklikheid redes. As jy 'n gebruiker wat blind is en is met behulp van 'n skermleser en daarom kan natuurlik nie beelde wat hulle kan ten minste sien hoor teks indien hul rekenaar praat dit aan hulle. In die algemeen, is dit die beste praktyk wanneer dit kom by die toeganklikheid van bladsye sodat selfs gebruikers in daardie situasie kan hoor of sien, om so te praat, wat dit is wat op jou bladsy. Daar is 'n ander ding wat ek het hier wat is 'n bietjie interessant, en ons sal sien meer hieroor in probleem gestel 7 via een van die kortbroek gelei deur een van die onderrig-genote. Maar # inhoud verwys na die tag wie se ID is inhoud, maar dan is daar 'n spasie karakter, en dan is daar die woord insette. Wel, wat is interessant oor CSS is dat jy kan verwys na die tags in 'n bladsy soort hiërargies, en wat hierdie brokkie CSS manier is om te vind die tag wie se ID is inhoud, en dan pas die volgende eienskappe aan al die inset tags wat afstammelinge van die inhoud, dit is wat ingekeep binnekant van dit. Inkeping, weer, is net belangrik om die rekenaar, nie na die mens nie, maar deur die konvensie het ons streepje dinge as ons gaan dieper in 'n bladsy, so dit beteken aansoek doen om 'n marge van 5 pixels aan enige inset element wat is iewers in of geneste binnekant van  die element wie se ID inhoud. Wat nie van toepassing? Wel, daar is eintlik net hierdie 2 ouens hier. Let op dat die binnekant van die vorm daar is 2 insette, as daar is vir al hierdie voorbeelde. Maar let op dat diegene wat 2 insette gebeur binne geneste, hoewel 'n bietjie diep, 'n paar lae van inkeping, binnekant van die tag wie se ID is die inhoud. Wat beteken dit? As ons na die leser hier kan jy ooit so iets sien laat my zoom in dat daar 'n bietjie van die padding tussen die knoppie en tussen die teks veld. Laat my tydelik draai dit af. Laat my gaan tot my CSS, en laat my voor en net gaan verander hierdie marge van 5 pixels 0 pixels. Laat my voort te gaan en dan die lêer stoor, gaan terug na die soek-enjin en herlaai, en kyk na die middel van die bladsy. Alles bymekaar gekom saamgepers, en toe ek die eerste keer geklopte hierdie voorbeeld Ek het gedink dat kyk dom met die teks veld en dan die knoppie onmiddellik onder dit. Ek wou pad dit 'n bietjie, sodat ek bekendgestel marges. Wat sal ons doen nie in die lesing gaan deur middel van die paar dosyn CSS eienskappe wat bestaan ​​nie, want, weer, daar is dinge soos lettergrootte, font gewig, marge, teks sluit, en 'n paar dosyn ander, en ons sal jou verwys in probleem gestel 7 aan verskeie tutoriale aanlyn en verwysings wat u toelaat om hierdie dinge af te haal. Maar wat is werklik belangrik is by die einde van die dag is om te verstaan ​​hoe hierdie dinge toegepas word. Weereens, as ons die styl tag binnekant van kan gaan die keurders, die soort van identifiseerders wat spesifiseer wie wil jy hierdie eienskappe toe te pas, en dan kan jy die eienskappe as die sleutel waarde paar geskei deur 'n dubbelpunt en wat op daardie datum geëindig het met 'n kommapunt, of jy kan rip al wat uit en sit dit in 'n aparte CSS-lêer op sigself. Alle reg, enige vrae oor die konsepte of die groot prentjie van CSS? Jy sal weer te sien meer van dit in pset 7, maar ons hou dit in die algemeen redelik eenvoudig. Nie? Alles reg. Dit is tyd vir 'n werklike programmeertaal, en ons sal terug kom in die vorm van 'n voorbeeld om 'n bietjie van CSS. PHP is eintlik 'n wonderlike toeganklike taal in die sin dat dit is sintakties byna gelykstaande aan C. Met ander woorde, as jy weet C, jy weet vir die grootste deel PHP, ten minste sintakties, selfs al is daar 'n paar nuwe funksies en 'n paar nuwe konsepte wat ons sal hê om na te kyk. Maar vir die grootste deel, nou dat ons oorgang vanaf C na PHP die meeste van die nuwe dinge is regtig in die groot prent, hoe jy gebruik om 'n taal te program op die web, in teenstelling met op die command line of in 'n flikkerende prompt as ons het tot dusver te doen. Vir verwysing, veral met pset 7 en die finale projek af, doen om voordeel te trek van hierdie URL hier as jy wil om te lees oor die formaliteite van PHP. Dit is eintlik 'n gratis aanlyn-handboek effektief, en jy sal ook vind dat wat is regtig mooi oor PHP is dat daar honderde funksies wat kom met dit, terwyl jy in C nie noodwendig toegang tot meer funksies as in die wiskunde biblioteek, die CS50 biblioteek. In PHP en het 'n baie van die moderne tale, Python en Ruby onder hulle, kry jy toegang tot soveel meer funksies, wat beteken dat jy kry om te skryf 'n baie minder kode, want jy kan staan ​​op die skouers van ander mense wat reeds geskryf is sekere dinge vir jou. Kom ons neem 'n vinnige toer van die sintaksis van PHP en skryf dan 'n paar voorbeelde. Wat is mooi oor PHP in die eerste plek is daar is geen hooffunksie. As jy wil om 'n program te skryf in PHP jy net begin skryf kode, en jy hoef nie te bekommer oor die hoof. Daar is geen int. Daar is geen terugkeer. Daar is geen bevat SPASIES, argc wat nodig is wanneer jy die program skryf. Eerder kan jy net begin kode skryf, en dit is in die deel want PHP is wat genoem word 'n geïnterpreteer taal. C is opgestel, en dit is saamgestel in die sin dat jy begin met die bronkode, loop dit deur klang, wat is 'n vertaler, en uiteindelik na 'n aantal stappe wat jy object code, 0'e en 1s. PHP en Python en Ruby en Pearl en ander is verskillende tipes van die tale in die sin dat jy dit nie stel nie. Jy gaan nie van die bron-kode 0e en 1e. Jy moet net hardloop die bronkode, en jy loop die bronkode deur te skryf in 'n gewone teks lêer eindig. php in hierdie geval in plaas van c, en wat die program nie op jou rekenaar is dit interpreteer letterlik jou kode lyn reël vir reël. Met ander woorde, eerder as om 'n program skryf en hardloop die program jy direk in plaas skryf 'n program met 'n lêer wat eindig in. php. Dan moet jy loop 'n werklike program genaamd php.exe, as jy op Windows, of net PHP as jy op Mac OS of Linux, en gee jou as inset tot die PHP-program jou eie bronkode, en sy doel in die lewe is om jou kode bo na onder, links na regs te lees, en doen alles wat jy vertel het om dit te doen. Kom ons kyk wat dit gaan sintakties beteken. In PHP ons voorwaardes. Hierdie dia is identies aan wat jy gesien het, terug in week 1 omdat sintakties voorwaardes, ifs en anders ifs en anders in PHP lyk presies soos hierdie. Wanneer dit kom by Boolse uitdrukkings hulle gaan om presies te lyk soos hierdie. Wanneer dit kom by die anding dinge saam as boolse dit gaan om presies te lyk soos hierdie. Skakelaars dieselfde lyk, en jy kry die bykomende voordeel in PHP dat skakelaars in C kan slegs op 'n kar of 'n int skakel. Jy kan nie oorskakel op 'n string waarde. In PHP jy kan eintlik 'n uitdrukking dit is 'n veranderlike waarvan die inhoud is 'n string, en jy kan eintlik doen string vergelyking in die werklike intuïtiewe manier, nie wyser vergelyking, ten einde te besluit of die saak te doen i of j of iets anders. Ons sal sien wat potensieel voor lank. Loops te wonderlik is dieselfde. Vir loops 'n inisialisering, 'n voorwaarde, en 'n paar van updates. Terwyl loops ook bestaan ​​in PHP. Doen terwyl loops ook bestaan ​​in PHP, en skikkings bestaan ​​in PHP, maar hier is waar die sintaksis begin om te kry 'n bietjie anders, maar die konsepte is dieselfde, en die begrippe werklik is dieselfde soos hulle was in Week 0 met Scratch. Die eerste plek is die $ teken. Dit was 'n ontwerp-besluit in PHP waardeur enige veranderlike deur ontwerp in PHP begin met $ teken. Daar is nie meer X, Y, Z Dis nou $ X, $ Y, $ Z net omdat. Dit is iets om in gedagte te hou, en nou op die regterkant dit lyk soortgelyk aan 'n skikking, maar ons gebruik vierkantige hakies hier. In PHP en in JavaScript, soos ons sal uiteindelik sien, 'n skikking wat jy doen plein bracket en gesluit vierkante bracket te verklaar, en dan moet jy 'n deur kommas geskei lys van waardes, of ints of stringe of karakters, wat jy wil, binnekant van daardie uitdrukking daar. Nou, hoe het ons doen iets soos hierdie in C? Wat was die sintaksis vir staties waarby 'n verskeidenheid van bekende nommers? Kode tussen krulhakies, Dit was so 'n klein verskil hier, maar in beide PHP en uiteindelik JavaScript dit gebruik net tussen vierkantige hakies, so werklik die enigste interessante detail hier is die $ teken vir die veranderlike naam en ook die vierkantige hakies, en daar is 'n snaakse ding wat sowel op die linkerkant van die = teken weggelaat. Wat ontbreek wat ons het is wat vir weke nou? Ja. [Onhoorbaar student reaksie] Die grootte, dus is daar geen melding van die grootte van die skikking. Om eerlik te wees, is daar geen melding van vierkantige hakies aan die linkerkant van die = teken, en wat anders ontbreek van die lyn? Ja >> [onhoorbaar student antwoord]. Die tipe, so wat is interessant in die besonder oor PHP is dat dit nie is 'n sterk getikte taal as C is, en dit is sterk in die sin dat jy moet sê char getik, moet jy int sê, moet jy sê float. Wanneer jy wil 'n veranderlike wat jy het geratel te vertel wat sy soort is. PHP is 'n bietjie luier. Dit is losweg getik in die sin dat jy kan dryf en karakters en stringe EN SY en so meer, maar die taal self nie regtig omgee wat jy binnekant van 'n veranderlike. Jy het dit nie vooraf in te lig watter datatipe gaan in 'n veranderlike. Dit is heeltemal aan jou, so dit is lekker in die sin dat jy hoef nie te veel bekommerd wees oor die data te tik en bekommer wat jou argumente is en so meer. Dit beteken ook uiteindelik funksies in PHP gaan in staat wees om terug te keer óf 'n int meeste van die tyd, en miskien een keer in 'n rukkie hulle sal terugkeer 'n Bool, 'n boolean vals, byvoorbeeld, om aan te dui dat iets verkeerd geloop het. Dit gee ons sommige upsides, maar dit sal ook maak ons ​​soort van ontwerp 'n bietjie luier wanneer dit kom by data tik. Wat anders is daar om te hou in gedagte hier? Veranderlikes lyk baie graag, so $ s = "hello, wêreld." Dit is miskien inferable van die vorige voorbeeld, en ons het 'n ander tipe van die lus. Hierdie een sal ons eintlik een keer te sien in 'n tyd, want dit is baie handig, 'n foreach bou. In hierdie geval, die foreach lus neem binnekant van sy hakies 3 woorde tipies, $ Iets eerste, en dit is wat array doen wat jy wil om te itereer oor die lede van dan letterlik die trefwoord as, en dan laastens, 'n ander veranderlike naam wat jy kry om te kies. Dit kan wees foo, bar, of element, en wat hierdie konstruk doen is as die $ array bevat 10 elemente op elke iterasie van hierdie array-jammer, op elke iterasie van hierdie lus die veranderlike genaamd element gaan word opgedateer na die eerste element in die skikking, dan is die tweede element in die skikking te wees, dan die derde element van die skikking, en daardeur die wegneem van die behoefte die effens irriterende vierkante hakienotasie te doen en $ I ten einde na die indeks in 'n skikking. PHP doen al daardie werk vir jou en op elke iterasie oorhandig jy net die volgende element van die skikking sonder dat jy om te weet oor of sorg oor die numeriese indeks plek. En dan laastens, vir nou, daar is 'n ander kenmerk van PHP wat gaan uiters nuttig wees, veral wanneer ons begin programmering op die web, en dit is bekend as 'n associatieve array. Die skikkings wat ons tot dusver weet van 20 sekondes gelede en vir die afgelope 8 weke numeries geïndekseer skikkings, soort van tradisionele skikkings waar die indekse is ints, 0, 1, 2, al die pad op tot. Assosiatiewe skikkings is 'n baie meer kragtig. Hulle toelaat dat jy 'n arbitrêre sleutels te hê, arbitrêre indekse en arbitrêre waardes. AANGESIEN dit in 'n tradisionele skikking dit is 0, 1, 2, in 'n assosiatiewe skikking kan jy 'n indeks of 'n sleutel van foo wie se waarde is bar. Jy kan dan 'n ander sleutel wie se naam is Baz en wie se waarde is qux. Weer, dom rekenaar wetenskap generiese veranderlike name hier, maar die punt is dat die skikking nie bracket 0 of bracket 1. Dit plaas gaan bracket foo en bracket Baz te hê. Dit is 'n baie meer veelsydig is in die sin dat ons gaan om in staat wees om te assosieer woorde met ander woorde, sleutels met waardes heeltemal arbitrêr, en ons gaan in staat wees om hierdie waardes terug te kry in konstante tyd want onder die kap wat 'n associatieve array regtig is 'n hash tafel. Onthou dat 'n hash tafel laat jou toe om te sit in sommige insette graag in die woord Dawid as jy wil om Dawid te voeg in 'n soort van 'n woordeboek, en dan kry jy 'n waarde tipies terug. In die geval van speller, waar of vals is. Dawid of wat ookal woord is of is nie in die woordeboek. 'N associatieve array is regtig net 'n hash tafel, maar dit is 'n baie meer gebruikers vriendelik inkarnasie van. Soos ons sal sien, gaan dit toe te laat ons 'n paar dinge om te doen baie, baie maklik. Kom ons neem 'n blik op 'n paar basiese PHP voorbeelde en kyk wat ons kan doen met hierdie taal. Laat my voort te gaan en maak vandag in ons bron directory n lêer genaamd hello1.php. Hierdie lêer is meer kommentaar as dit is 'n werklike kode, so laat my eintlik al die kommentaar verwyder uit die lêer en die hede jy miskien die eenvoudigste PHP program hier. 5 lyne, en sommige van hulle is wit spasie, so 'n paar belangrike verskille opmerk hier. Die lêer genoem hello1.php. Die heel eerste lyn, al is, , beteken dat dit vir my PHP-kode. Kom ons kyk hoe om dit uit te voer. Ek gaan om terug te gaan na my terminale venster. Ek gaan om te gaan in my PHP gids. Let op dat ons het 'n hele klomp van lêers, die eerste een wat hello.php. Laat my voort te gaan en uit te voer, hello1.php, tik. Toestemming geweier. Okay. Hoe het ons vasgestel dinge soos hierdie in die verlede? Wat is dit >> [onhoorbaar student reaksie]? Ons nodig het lees en skryf, maar laat my doen ls-l. Onthou hierdie ietwat kripties uitset waardeur hello1 blyk te wees leesbaar en skryfbaar nie deur my maar leesbaar is deur almal anders. Dit blyk dit is eintlik nie 'n stap in die regte rigting. Die verskil is weer met 'n geïnterpreteer taal is jy loop nie die program direk. Jy hardloop in plaas van 'n tolk en handig dit die kode wat jy geskryf het sodat dit kan interpreteer dit reël vir reël. In hierdie geval, die tolk of program wat ek eintlik wil uit te voer genoem is letterlik PHP. Iewers op hierdie hardeskyf van die toestel daar is 'n program iemand anders geskryf genaamd PHP, of op Windows php.exe. Wat ek gaan doen is ek gaan eintlik loop PHP maar gee dit as 'n command line argument die kode wat ek geskryf het, en dan sal ek zoom uit en druk Enter. Dit loop my program vir my, van bo na onder, links na regs. Laat my voort te gaan en maak 'n effense afwyking van hierdie. In hello2.php kennisgewing dat dit ook is meestal kommentaar, so laat my ontslae te raak van die mense as 'n afleiding, en wat is nou duidelik anders oor hierdie lêer? Daar is hierdie nuwe lyn, ietwat kripties aan die bokant. Dit is in lyn 1 #! / Bin / PHP. Bin is 'n konvensie op Linux en Mac OS vir binaries, / bin beteken dit is 'n gids met 'n klomp van die binaries wat is geprogrammeer, waarvan een is PHP. Die #! is die bynaam kaboedel, wat is die vinnige manier om dit te sê, en wat dit beteken is dat wanneer jy hierdie program nou daar is 'n wenk aan die top van die lêer wat vertel die rekenaar wat die tolk te gebruik. Dit raak 'n bietjie irriterend as jy moes jou gebruikers en jou kliënte te vertel "Hey, ons hierdie program genaamd hello1.php geskryf het." Al wat jy hoef te doen, is vir ewig loop PHP en dan die naam van hierdie program. Om eerlik te wees, dit sou net lekkerder te voer hello1.php, en inderdaad, kan ons as ons doen die volgende. Laat my gaan voort en doen ls-l, en kennis in hello2 dit is net nog lees, skryf en lees dan gelees, so ek kan nog nie dit doen, hello2.php. Maar ons het hierdie ooit so kortliks die laaste keer, die chmod opdrag. As ek dit doen chmod a + x, wat beteken dat alle plus executability, en dan hello2.php en dan ls-l Let weer op wat verander het. Een, is Linux wys my die lêernaam in die groen om die idee oor te dra dat dit uitvoerbaar, maar meer belangrik, op die linkerkant sien dat die bietjie wat x uitvoerbare nou. Wat dit nou beteken, is ek ./hello2.php kan hardloop soos gewoonlik, druk Enter, en as gevolg van die kaboedel op die top van die lêer wat is 'n wenk, weer, na Linux wat sê gebruik hierdie tolk om hierdie lêer uit te voer. Moenie bekommerd wees oor te dwing om die gebruiker om werklik te tik dit. En wat lekker is, is nou dit is soort van irrelevant vir my kliënte of my vriende die taal wat ek geskryf het hierdie program in, so ek kan voortgaan met mv en die naam van hierdie ding om te hello2, byvoorbeeld. En as ek nou doen ./hello2 en uit te zoem my program gaan voort om te hardloop. Hierdie lêer uitbreidings is 'n menslike konvensie wat nodig is vir iets soos geratel en maak wat vir hulle kyk. Maar vir PHP, kan ek hierdie lêer uitbreiding enigiets wat ek wil noem. Ek kon die wêreld mislei om te dink dat ek regtig 'n goeie by Ruby, en ek kon skryf hello2.rb en dan die uitvoering van hierdie, en voila, nou het ek die Ruby-weergawe, wat is 'n volledige leuen. Maar die lêer uitbreidings is betekenisloos As die lêer is uitvoerbare en het hierdie spesiale wenk op die top van die lêer. Nou, as 'n eenkant, laat ek jou wys jy vinnig weergawe 3, wat is 'n soort van 'n nuttige truuk om te weet. In hello3 het ek iets verkeerd gedoen het dat ek sal werk om die bronkode aanlyn. In weergawe 3 blyk dit dat op die meeste Linux-rekenaars daar is 'n program genaamd env vir die omgewing, en wat jy hier kan doen is as jy het geen idee waar PHP op die plaaslike hardeskyf geïnstalleer word nie, want dit kan wissel op grond van die rekenaar dat iemand gebruik, env sê net loop env, wat is op die meeste stelsels, en uitvind waar PHP is. Net 'n gemeenskaplike truuk, sodat jy nie hoef te bekommer oor om uit te vind waar 'n program is. Maar as jy nie versigtig om uit te vind waar 'n program is en jy nie versorg tot dusver jy kan gebruik om die wat opdrag. Laat my uitzoomen en tipe wat php, en let op dit vertel my dit is eintlik in usr / bin / PHP. Dit is soort van 'n leuen. Dit is ook in die bin. Dit is net wat my die eerste treffer. As jy al ooit gewonder waar klang, klang, dit is in usr / bin / klang, wat maak, usr / bin / maak, en wat dit beteken is al hierdie tyd jy kon gewees het tik usr / bin / kletteren betree kletteren uit te voer, maar dit is soort van saai dit te doen, sodat sommige dopgehou soos usr / bin en bin word aanvaar dat die verstek sodat die rekenaar weet om te kyk in dit vir jou. Enige vrae oor die skryf van 'n super, super eenvoudige Hello World program in PHP en dan loop dit? Want nou sal ons begin meer dwingende sintaksis te stel. Alle reg, hier gaan ons. Hierdie programme het ons eintlik almal van hulle voor gesien. As ek oop te maak, byvoorbeeld, laat ons doen beer1.php, ons sal nie deur middel van verskeie weergawes van hierdie, maar wat ek gedoen het het ek gaan sit en gooi dit of omgeskakel my C-kode PHP-kode hier. Die meeste van die top van die lêer is kommentaar hier. Dit blyk uit daar is 'n nuwe funksie wat ons moet genoem read line. GetString, onthou, van Week 0 af was 'n CS50 ding. PHP kom met sy eie gebruikers-vriendelike funksie genoem read line 1 argument wat spesifiseer die vinnige wat jy wil om te wys aan die gebruiker, en wat read line doen is dit terug wat die gebruiker tipes. In hierdie geval, ek verklaar 'n veranderlike genaamd $ n. Ek stoor in die terugkeer waarde van read line nadat waarna die gebruiker met hierdie string. Net om te back-up, om werklik te loop hierdie ding, laat my gaan voort en hardloop php beer1.php. Hoeveel bottels sal daar wees? Laat ons net 2 hierdie tyd. Enter. Dis al. Die program is funksioneel identies aan die C-weergawe van weke gelede. Maar sintakties laat ons sien wat anders is. Nadat ek kry 'n int van die gebruiker kennisgewing dat ek 'n paar foutopsporing ek doen, en as n minder as 1 Ek stop en ek druk 'n jammer boodskap aan die gebruiker en uitgang met 1. Dit is ook 'n bietjie anders.  In C wat het ons te doen? In C is ons terug 1. In PHP jy die uitgang met 1, wat eerlik is Ek dink 'n bietjie meer intuïtief omdat jy letterlik die verlaat van die program. Alles reg, en dan af hier om die irriterende liedjie is identies sintakties behalwe vir die veranderlike, so af hier in die lyn 24 en verder let my lus is amper dieselfde, maar ek het $ in die voorkant van i en n en wat ook ontbreek in lyn 26 wat ons gehad het in die verlede wanneer 'n veranderlike i verklaar? Daar is geen tipe. Dit is verkeerd om te sê in PHP int. Jy moet net nie wat om te doen. Die rekenaar, die tolk PHP is slim genoeg om te besef dat as jy 'n nommer in die $ ek dit sal hanteer dit as 'n nommer vir jou. En dan af hier is ons plug in $ i, $ i, $ i - 1. Al wat dieselfde is, en dan af ons doen hier 'n "Sjoe, dit is irriterende" printf en dan verlaat (0). Weereens, die afhaal hier is dat alhoewel ons gaan om relatief spandeer min tyd oor PHP, seker teenoor wat ons gedoen het op die C, dit is amper dieselfde, en so wat ons sal vandag en volgende week doen en verder is fokus regtig op 'n paar van die nuwe idees. Net om te sien dat 'n ander ding nie vertaal van C, dit was 'n super eenvoudige program wat ons gedoen het in Week 1 of 2 wat in blokkies gesny 'n waarde. Maar wat was interessant aan die tyd oor hierdie program is dat dit lei die idee van 'n persoonlike skriftelike funksie wat ons geskryf het. Die sintaksis in PHP is byna dieselfde. Hier is my program tot bo. Let weer afwesig is enige idee van die belangrikste. Ek begin skryf kode, en dit is wat gaan uitgevoer deur die tolk te kry. Ek druk x is nou 2, vermoedelik. Toe het ek beweer cubing ... Dan roep ek die kubus funksie en slaag in $ x en die toeken van die terugkeer waarde tot $ x. Toe het ek beweer dat dit in blokkies gesny, en dan sê ek dit, wat hopelik sal sê x is nou 8. Die sintaksis vir die funksie in PHP is ooit so effens anders. Weer ontbreek, is die terugkeer tipe. Weer ontbreek, is die terugstuur tipe en het ook ontbreek is wat ander tipe? [Onhoorbaar student reaksie] Wel, okay, dis goed so. Kom ons kom terug na wat in 'n tweede. Ons het nie, byvoorbeeld, hier int. Ons nie, byvoorbeeld, hier, want weer int, in PHP jy moet net nie en moet dit nie doen nie, maar eerder daar is hierdie nuwe sleutelwoord genoem funksie. In PHP dit is amper 'n bietjie duideliker, want wanneer jy wil 'n funksie sê jy letterlik funksie, jy gee dit 'n naam en dan 'n komma geskei lys indien enige van sy argumente. Geen nietig of iets soos dit nodig om te sê, en dan opbrengs is dieselfde, $ * $ * $ A. Wat ook ontbreek? Sammy wys dit uit hier. Op die top van die lêer heeltemal afwesig is in PHP is ook 'n prototipe. Dit is ook deur die ontwerp. Tale en tolke soos PHP is slimmer as C ooit was in samestellers soos kletteren. Onthou dat klang, as jy nie vertel dat kubus bestaan, as jy nie vertel wat printf bestaan ​​soos met 'n prototipe of met 'n # include, wel, was dit aan die gang te gil op jou, en selfs nie jou kode stel. PHP en meer moderne tale is 'n baie slimmer wanneer dit kom by hierdie. Hulle sal dit op hulself te lees deur al jou kode en dan skree jy slegs indien dit vind kubus nêrens. Dit maak nie saak as die kubus is aan die onderkant of die top of selfs in 'n aparte lêer. PHP en soortgelyke tale is nou slim genoeg om vorentoe te kyk alles voordat jy as 'n fout gemaak geagte. Waar laat dit ons? Kom ons doen 'n laaste voorbeeld hier in die voorwaardes, en as ek oopmaak conditions2.php kennisgewing te hier sintaks is byna dieselfde. Ek gebruik read line in plaas van GetString, maar daardie lyn is dieselfde as voorheen, "Ek wil graag 'n heelgetal asseblief." Ek het toe 'n indien toestand, anders as, en dan 'n ander, maar funksioneel hierdie program is ook identies aan wat ons gedoen het weke gelede, so as ek hardloop hierdie ding, php van conditions2, en ek gee dit 'n getal soos 23 - Ek pluk 'n positiewe getal. As ek gee dit -1 ek opgetel het 'n negatiewe getal. As ek gee dit 0 Ek inderdaad opgetel 0. So, wat omgee oor al hierdie dinge? Wel, een van die die prettige soort van oefeninge hier vir my ten minste was om terug te gaan en kyk hoe vinnig ek kon pset 5 implementeer, die spelfoute pset. Onthou dat daar was hierdie lêer genaamd speller.c, en daar was n lêer genaamd dictionary.c. Wat ek gedoen het, was ek soort van 'n paar minute spandeer en ek die C-kode omgeskakel PHP-kode, en ons sal nie spandeer baie tyd op speller want net soos in pset 5 het jy nie regtig nodig het om te spandeer baie tyd op die speller self omdat jou aandag was op die woordeboek. Is dit voldoende om te sê dat as jy lees deur speller, hierdie lêer hier, dit is pretty much gelykstaande aan die C-kode ons vir jou gegee het vir pset 5. Ek het net 'n paar $ in plekke. Ek het sekere funksie name verander as hulle nie bestaan ​​in PHP. Daar is een addisionele ding hier, preg_match, wat is 'n bietjie liefhebber manier om iets te doen, maar ons sal terug te kom na wat uiteindelik. Maar in kort, speller is byna identies, en as jy kyk na die heel onderste wat dit uiteindelik uitspoeg, is dit hier, woorde verkeerd gespel, woorde in die woordeboek, woorde in die teks. Alle reg, sodat wat is interessant nou is die volgende. Ek op die top van my lêer wat dictionary.php. Net soos C # include PHP het 'n spesiale funksie genoem vereis dat pretty much dieselfde ding, vereis 'n lêer genaamd dictionary.php. Hoe kan ek gaan oor die uitvoering pset 5? Laat my voort te gaan en open 'n lêer hier. Laat my toe om 'n bietjie verwysing hier. En laat my 'n nuwe lêer te skep en begin met die roeping van hierdie dictionary.php. Laat ek dit in 'n ander gids, sodat ons kan doen om hierdie lewe. En nou sal ek zoom. Ek gaan my PHP lêer om te begin met 'n oop bracket php gesluit bracket. En dan in hier en daar was 'n paar funksies wat ek nodig het om te implementeer vir pset 5, so laat my begin met die implementering van sommige van diegene, so funksie tjek, wat het 'n woord in 'n argument te neem. Ons sal dit doen en kom terug na dit in 'n oomblik. Daar was funksie las, wat het in wat as 'n argument? Woordeboek, sodat die lêer wat ek eintlik wou om te laai. Daar was funksie grootte, wat nie enige argumente en daar was funksie wat was die ander? Los, wat nie enige argumente. Dit is die 4 funksies wat ek nodig sou wees om nou te implementeer in PHP, en wat ek gaan om dit te doen gaan voort en doen dit. Baie van julle gebruik om 'n hash tafel in pset 5, so laat my gaan voort en die skep van 'n hash tafel in PHP. Gedoen het. Dit gee my 'n hash tafel. Wel, hoekom? Een, is die veranderlike genaamd $ tafel, net die idee van 'n hash tafel te besweer. Die vierkantige hakies, maar onthou, verteenwoordig wat? 'N skikking, maar in PHP skikkings nie numeries geïndekseer word. Hulle kan ook assosiatiewe skikkings, wat beteken dat jy arbitrêre sleutels en waardes kan hê. Graag in pset 5, dié van julle wat hash tafel implementasies het jy waarskynlik ingevoeg die woord en dan plaas dit in 'n ketting van geskakelde lyste, of jy gestoor word die waarde van die ware êrens of iets te dien effekte. Jy het een of ander manier gedink aan die feit dat die woord was daar. Vir nou, wat gaan my hash tafel, en so nou om te gaan oor die uitvoering van die tjek funksie Ek hoef net na binne kyk van daardie hash tafel en kyk of 'n woord is daar. Wat ek gaan om dit te doen, is ek gaan om te sê indien- laat ons sê isset, wat is 'n PHP funksie wat letterlik beteken net is die sleutel stel, so isset ($ tabel [$ woord], en indien wel terugkeer waar. Dit is dit. Dit is pset 5 in PHP. Wel, in regverdigheid, okay. Anders return false, so dit is nie daar nie. Wat is werklik gaan hier aan? Wel, as tafel-of hash tafel hier meer in die algemeen is 'n assosiatiewe skikking wat beteken dat jy kan indeks in dit met 'n woord soos "woord", en jy het om terug te kry 'n bietjie waarde. Ons is soort van die kry van 'n stap vorentoe van onsself. Dit sou soort van lekker wees as ons werklik die lêer gelaai, so las is nie heeltemal so eenvoudig nie, maar laat my gaan voort en sweep  'n baie vinnige implementering van die vrag. Laat my gaan voort en sê woorde kry lêer woordeboek. Die lêer funksie in PHP open 'n lêer en opgawes aan u 'n verskeidenheid van al die woorde in die lêer, gee dit net aan jou. Dit was ook 'n groot pyn, dit is nie? Nou foreach, dit is ons nuwe konstruk, foreach ($ woorde as $ woord). Hierdie lus is gaan om te begin iterating oor die skikking woorde en toewys aan die $ woord veranderlike elke woord in die lêer vanaf die eerste tot die tweede na die derde na die vierde al die pad so ek het nie die irriterende [i] notasie te doen en die wil. En wat ek net gaan om te doen vir elk van hierdie woorde word stoor dit in my tafel deur indeksering in tabel en dan doen waar omdat om te onthou dat 'n woord in my woordeboek is al wat ek regtig hoef te doen is 'n soort van flip 'n bietjie en sê hierdie woord in my hash tafel daar, waar is. En as dit nie daar is nie, kan ek nie sit uitdruklik valse, anders het ek wil hê om vals te maak vir alle moontlike woorde in die heelal. Dit is voldoende vir my net 'n indeks waarde in te stel na ware as 'n woord in my hash tafel. Nou het ek 'n paar van die hoeke te sny hier dat ek my hande sal beweeg vir nou, maar nou die las funksie gedoen word. Ek laai al die woorde van die lêer in 'n skikking. Ek itereer oor daardie skikking, en vir elke woord in die skikking Ek prop dit in my hash tafel met 1 lyn van kode. Dit is pret. Jy weet hoe ons die grootte kan nou implementeer? Wel, die grootte is altyd redelik maklik, in regverdigheid. Hier kan ons net terug doen telling van tabel. Dit is ook redelik maklik, tel die aantal van die dinge wat in die tabel. Dit is eintlik soort van die mees doeltreffende. Ek moet waarskynlik 'n veranderlike genoem grootte, sodat ons dit kan doen in konstante tyd, maar dit is redelik maklik. O, en dan los, as ons regtig wil om anale hier te wees ons kan sê dit is hoe jy iets los. Jy moet net die veranderlike gelyk aan 'n leë skikking, en dit raak ontslae van alles wat daar was. Hoef nie te bel gratis. Weereens, ek sny sommige hoeke, en ek vra om verskoning vir toewys probleem stel 5 miskien in C, maar as ons nou voort te gaan en loop dit, Ek gaan eintlik loop die weergawe wat ek geskryf het in advance net so dat ek nie enige sintaktiese foute hoegenaamd. Laat my voort te gaan en uit te voer speller. Die gebruik is dieselfde. Hier is 'n woordeboek lêer wat net die woord cat bevat. Hier is 'n tekslêer wat net foo bar bevat. Kom ons spel kyk, so speller, die gebruik van hierdie woordeboek lêer op hierdie teks lêer. Daar is een woord verkeerd gespel, bar, en voila. Gedoen met pset 5. Kom ons neem 'n 5-minute breek hier, en ons sal terug en meer kom op PHP. Alle reg, ons is terug. Kom ons haat my vir 'n rukkie. Kom ons kyk nou eintlik kyk of dit was nie 'n positiewe eintlik die uitvoering van hierdie ding in PHP. Toegegee, dit het 45 sekondes om te implementeer. Maar laat ons nou voort te gaan en uit te voer dinge. Laat my voort te gaan en uit te voer 'n C-weergawe speller, en ons sal dit op een van die grootste lêers hardloop, wat is die King James Bybel. En dit is hier in-laat ons gaan in ons C-gids, speller op King James die 5de. 'N baie verkeerd gespelde woorde. Okay, so wat is die uitset wat jy het waarskynlik selfs as die tye is 'n bietjie anders, as jy het alles korrek werk, en so tyd in totaal gekorrigeerde die King James Bybel was 0,38 sekondes, so redelik goed met behulp van dat die uitvoering. Nou laat my gaan in die PHP weergawe, wat ons net geskryf. Laat ek hardloop speller op King James. Oeps, ignoreer daardie fout. Ek is in die verkeerde gids. Speller op King James die 5de. Amper klaar. Okay, sal die slim waarnemer besef dit was meer as 3 sekondes daar. Dit is die ware looptyd. Dit blyk dat dit neem tyd baie van die teks uit te spoeg as gevolg van buffering kwessies, maar lang storie kort, wat was 3,15 sekondes van die masjien, CPU tyd, versus wat was dit 'n oomblik gelede? Soos 0,3. Ek bedoel, dit is 'n orde van grootte stadiger, so waar is dat belaglik verlangsaming vandaan? Wel, soos die geval is met die meeste enige ontwerp besluit wat ons gemaak het in die klas oor die afgelope 9 weke daar is byna altyd hierdie nadeel. Soms tussen net ruimte, soms tussen ruimte en tyd, ruimte, tyd en ontwikkelings poging, en wel hier, selfs al het ons gered van 'n groot hoeveelheid van die tyd, miskien potensieel 10-20-30 uur van die ontwikkeling tyd die uitvoering van die speltoetser deur lyfstraf dit in net 45 sekondes met hierdie taal die prys wat ons betaal, is dat dit 'n orde van grootte stadiger as 'n resultaat, en dit is gewoonlik die geval met die meeste enige geïnterpreteer taal, PHP, Python, Ruby, Pearl of ander waardeur as jy gaan om dit te doen deur middel van 'n tolk en dit lees jou kode reël vir reël, van bo na onder, links na regs, dat die middelman is gaan 'n geruime tyd van sy eie te neem, en wat jy voel in die 3 sekondes, in teenstelling met 0,3 sekondes is die feit dat daar is hierdie middelman wat letterlik ons ​​kode te interpreteer reël vir reël, en God verbied as jy binnekant van 'n lus met 'n groot lêer met honderde duisende woorde. Wat oorhoofse toe te voeg en voeg en voeg en voeg. Vir 'n instrument soos hierdie is dit waarskynlik nie die beste taal om te gebruik vir die implementering van 'n speltoetser as onmiddellikheid is van belang is vir jou gebruikers en aan julle. Maar die luukse wat ons het in 'n oomblik is, as jy gebruik van 'n taal soos PHP of 'n baie van die geïnterpreteerde tale in die konteks van die Web, for that matter, jy het die voordeel dat die internet is 'n baie stadiger as die meeste rekenaars. Jy het 'n GHz CPU in jou rekenaar, 2 GHz, miskien selfs meer hierdie dae. Maar die werklikheid is op die internet daar is 'n hoë bedrag van die latency waardeur vir 'n leser om te praat met 'n bediener, selfs al het ons verlede week gesien het dat dit is redelik vinnig, die helfte van 'n millisekonde of so, wat te voeg, en as jy die aflaai van dinge soos 'n beeld of 'n Facebook-foto of om kitsboodskappe oor Facebook chatter, Gchat of iets dergeliks, al van hierdie ronde-trip keer tussen die leser en die bediener begin te voeg, wat maak jou spesifieke keuse van taal in baie gevalle nie almal wat betrokke, sodat jy boete van die gebruik van 'n effens stadiger taal soos PHP of Python of Ruby maar waarvoor daar groot upsides aan jou en jou kollegas en jou vriende, omdat jy kan implementeer dinge so, so baie vinniger. En bowendien, jy het 'n veel minder risiko van sekere sekuriteit foute. Daar is geen verwysings in PHP. Daar is geen seg foute wat jy maklik kan veroorsaak in dieselfde manier wat jy kan in C. Met C jy super naby aan die hardeware. Met PHP en soortgelyke tale jy is soort van 'n hoër vlak, om so te praat, met 'n baie van verdediging tussen jou en wat is eintlik aan die gang binne-in die masjien, en dit is net 'n nadeel. Ons het gekry tot op die punt van hierdie meer moderne, hoë vlak tale soos PHP, omdat van die lesse wat geleer is in tale soos PHP in C. Maar as jy nie verstaan ​​wat aan die gang is onder die kap al die tyd jy kan seker nie die regte ontwerp besluite te neem, en seker wanneer dit kom by die werk op 'n plek soos Facebook of Google of enige van hierdie plekke wat toenemend speel met 'n groot data stel selfs as jy terug gaan en doen premed en werk met 'n paar MD op 'n paar groot data stel wat pasiënte en dokters en soos die gebruik van die regte gereedskap is uiters dwingende want anders jou ontleding van sommige datastel kan sekondes, of dit kan letterlik ure neem. Dit is maar net een voorbeeld, nie om jou te frustreer met hoeveel meer moeite dit was in C, maar om jou te help verstaan ​​dat wanneer jy iets in C te implementeer nie jy regtig verstaan, of in teorie, regtig verstaan hoe alles is of moet werk, en jy het feitlik volle beheer oor wat gaan aan onder die enjinkap, en met hierdie hoër vlak tale het jy meer beheer af te staan ​​aan die mense wat hulle uitgevind en is onderhewig meer aan hul ontwerp besluite as joune. Maar as ons as vanselfsprekend aanvaar dat die prestasie is nie heeltemal so belangrik op die web as gevolg van hierdie ander kwessies, net netwerk spoed is 'n bietjie stadiger as die CPU spoed in elk geval, sodat ons dit kan sorteer bekostig om 'n effens stadiger taal te gebruik indien die upsides ons dinge kan ontwikkel 10 keer vinniger of selfs meer. Kom ons kyk hoe ons kan begin met hierdie. Laat my gaan in 'n gids onder vandag se voorbeelde genoem frosh.ims, en dit is eintlik persoonlik gemotiveer deur die feit dat die heel eerste ding Ek geskryf het vir die Web jaar gelede na die neem CS50 en CS51 was 'n webwerf vir die Frosh kitsboodskappe program, eerstejaars binnemuurse sport, wat by die tyd dit was genoeg jaar gelede dat op die oomblik daar was geen webwerf vir die program, selfs al was daar 'n web, en in plaas daarvan was daar 'n Proctor in Wigglesworth waardeur as jy wil om te registreer vir vlugbal of sokker of wat ook al sou jy vul 'n stuk papier. Jy sal dan loop oor die werf. Jy sal dan klop aan hul deur en slide in hul deur of hand aan die Proctor 'n stukkie papier met jou naam op dit, of jy wil om 'n kaptein van die span te wees, watter sport jy wil doen, en wat dorm jy was. Dit was soort van 'n ou skool manier van dinge doen, en dit was 'n eerste geleentheid om 'n baie van hierdie proses te outomatiseer. Jy moet net gaan na die webwerf. Jy tik iets. Jy kry 'n e-pos bevestiging, en die boom, is jy klaar. Dit was die heel eerste ding wat ek gedoen het, al is dit in 'n taal met die naam Pearl, maar dit is relatief maklik om te doen in PHP, en dit is 'n soort van verteenwoordiger van die probleme wat jy kan begin oplos wanneer jy jouself kan uitdruk programmaties en het nie om te vertrou op dinge soos Google Sites of Excel of gereedskap wat aan jou oorhandig word. Julle ouens het nou die vermoë om dinge te doen soos hierdie. Dit is 'n super lelik weergawe van 'n vorm, maar laat ons net dit gebruik vir die begin van die gesprek waardeur dit is min of meer wat die vorm lyk soos jare gelede vir ons in staat te stel om mense op die web aan te meld vir Frosh kitsboodskappe. Ons het gevra vir 'n naam, 'n boks vir of hulle nie wou wees kaptein, manlik of vroulik, en dan watter dorm hulle was, en dan sou hulle hierdie vorm instuur. Laat se eerste blik onder die kap op die HTML-kode wat verteenwoordig hierdie webblad. Laat my gaan in froshims0, en as 'n eenkant, vir pset 7 Ek neem as vanselfsprekend aanvaar die dopgehou en die dopgehou wat ek om dinge. Ons sal loop jy deur presies waar dinge het om te gaan in die toestel, watter mod opdragte jy hoef te hardloop, so moenie bekommerd wees oor al die dom besonderhede sinchroniseer vanaf die get-go hier. Alle reg, hier is froshims0.php. Let me down blaai, en wat is hier nuuskierig, dit is 'n PHP-lêer, maar wat is binnekant van dit duidelik? Dit is 'n hele klomp van HTML, en inderdaad, PHP se oorsprong werklik was vir die feit dat 'n web-sentriese taal. 'N oomblik gelede het ons dit gebruik het die bier voorbeeld te implementeer, die voorwaardes byvoorbeeld die Hello voorbeeld, en dit is goed. Jy kan gebruik PHP as 'n script taal waar 'n script is eintlik net die naam wat gegee word aan 'n vinnige en vuil program of iets wat jy skryf in 'n geskrewe of meer in die algemeen 'n geïnterpreteer taal. PHP is super nuttig vir daardie, want jy het gesien hoe vinnig relatief ons kan sweep programme in PHP. Maar dit was werklik ontwerp om gebruik te word vir die Web, en ontwerp vir die Web in die sin dat merk hier op die top van die lêer Ek begin met die