[Speel van musiek] 

David J. Malan Alle regte. Dit is CS50. Dit is die begin van die week agt. En jy kan onthou dat ons opgehou het laaste keer op soek na 'n nuwe taal geheel en al. Trouens, een wat redelik liggewig en dit is nie eens 'n programmeertaal. Dit is 'n opmaak taal wat ons kan eintlik struktuur en maak web bladsye. En wanneer jy iets anders in samewerking met this-- of jy gou sal, indien jy nie reeds. Ons gaan Cascading te gebruik Style Sheets, of CSS, wat is 'n ander tipe van taal met eienskappe en waardes wat gaan om ons te laat doen dinge wil verander die kleur en verander die posisie en hierdie soort van tweaks. Maar vandag en verder, het ons begin om te fokus op meer kragtige tale, werklike programmeertale soos PHP. 

So PHP is om vir 'n geruime tyd. En as jy sien, is dit is hoofsaaklik ontwerp vroeg op vir die werklike gebruik in die web-ontwikkeling en eintlik genereer webblaaie. So watter soort funksies nie 'n taal nodig het om web te maak bladsye dinamies met dit? 

Met ander woorde, as jy wil te genereer inhoud dynamically-- soos Facebook se Newsfeed, wat voortdurend verander, of kitsboodskappe wat pop-up van tyd te time-- soos wat is die belangrike stuk van die funksies wat jy nodig het in 'n programmeertaal wat dinamies laat druk nuwe inligting na die skerm? 

STUDENT: Kode. David J. Malan Kode. OK. Ons neem nie. 'N bietjie meer presies. Ek bedoel, kan ons doen dit met C, eerlik. Dit sou 'n pyn in die nek wees. But-- is hierdie verbintenis? 

STUDENT: Ja. Veranderlikes, miskien? David J. Malan veranderlikes. OK, seker nie. Veranderlikes kan beslis help ons uit. En selfs iets eenvoudiger. Ons gebruik dit in die heel eerste program van die eerste dag wanneer ons eintlik sê "hallo wêreld." 

STUDENT: Print. 

David J. Malan Print, reg? Print of printf in die wêreld van C. So al hierdie tyd, Ons by gehad het om ons beskik oor 'n language-- C, in particular-- en selfs Nuuts af vir die saak wat kan genereer snare van die teks. 

Wel, as HTML, soos ons verlede week gesien, is net 'n hele klomp van die snare van die teks al is dit met oop hakies en gesluit hakies en 'n soort van rym en die rede agter dit, Wel, dan kan ons regtig begin genereer webblaaie óf hand deur te tik hulle in gedit of in Microsoft Word, vir daardie matter-- ons moet net 'n teks editor. 

Of ons kan kode skryf, aan jou voorstel vroeër, sal dit laat ons HTML dinamiese genereer, en dit is wat ons gaan begin doen met PHP en uiteindelik selfs met 'n taal, die sogenaamde JavaScript, is een taal gebruik om mekaar te genereer. En inderdaad, dit is wat Facebook en baie, baie ander plekke doen om werklik dinamiese vertoon nuwe inligting aan jou. 

So laat ons begin met 'n this-- kriptiese soek lyn, maar 'n mens dit is eintlik redelik sterk. Tot dusver het ons al met behulp van C, Dit is 'n saamgestel taal. En net 'n vinnige recap-- n saamgestel taal het wat kenmerkend? Moet jy natuurlik op te stel nie, maar wat beteken dit? Ja? 

STUDENT: Dit moet wees vergader in die masjien kode. 

David J. Malan OK. Dit moet saamgestel word in die masjien kode. So jy jou bron-kode, wat is 'n soort van Engels-agtige. Jy skakel wat iets laer vlak, wat uiteindelik genoem voorwerp code-- 0 en 1's. En dit is die 0 en 1's wat 'n CPU, soos dié wat deur Intel, eintlik verstaan. 

Nou, PHP en Python en Ruby en JavaScript en trosse van ander tale is nie saamgestel tale, maar geïnterpreteer tale, wat beteken dat jy tik net en dan jy draai nie om hulle in 0 en 1's. Jy plaas net voorsien dan as insette aan iemand anders se program, genoem 'n tolk. En daardie persoon se program is ontwerp om te verstaan ​​wat elk en elke simbool in Python of PHP of Ruby of enige aantal ander tale beteken. 

En so al wat ons nodig het, is iets soos hierdie. So in werklikheid, ek gaan gaan oor na die toestel hier, net in 'n ou venster, en ons is gaan voort en oop te gaan 'n lêer met die naam, sê hallo. Nou voorheen, kan ek gered het dit selfs met 'n lêer uitbreiding, maar ek gaan om te doen iets wat selfs eenvoudiger hier. Ek gaan om voort te gaan en begin hierdie lêer met hierdie kriptiese sintaksis. So "gebruiker, bin, env, vir die omgewing, PHP. " 

Dit is eenvoudig 'n reël van die kode wat gaan my bedryfstelsel te vertel, gaan vind in jou plaaslike omgewing wat dit ook al is, waar PHP is-- die interpreter-- en voort te gaan en die gebruik dat tolk die volgende kode te interpreteer. Nou, hierdie is 'n soort van 'n lelike kenmerk van PHP. Maar in hierdie taal, enige tyd wat jy skryf PHP-kode, moet jy een van hierdie lelike te hê PHP tags baken die begin jou code-- <? php. 

Maar onder hier, ek kan nou iets doen eenvoudig soos printf hallo komma wêreld backslash n noue quote, naby hakies. En dan net vir 'n goeie maat, ek gaan om voort te gaan en sluit my PHP tag hier sodat alles lyk mooi mooi gedruk. 

En so gou as ek klik op Save, gedit is eintlik slim genoeg om te kyk na daardie heel eerste lyn en besef, o, jy PHP-kode te skryf. Laat my sintaksis hoogtepunt dit met die kleure hier sodat dit uitstaan 'n bietjie meer. Maar nou is ek gaan om te gaan af na my terminale venster. Ek sal vergroot in. 

Hierdie program is die sogenaamde "hello," so ek gaan dot streep te doen hello, maar toestemming geweier. En bash. Ons het eintlik gehoor van daardie ding wat 'n paar weke gelede in die konteks van Shellshock, een van daardie foute. 

Maar toestemming geweier het ons gesien voor, miskien in 'n ander konteks. Is daar iemand onthou hoe jy iets kan regmaak waar toestemming geweier soos hierdie? Wat is die opdrag, ten minste? 

STUDENT: chmod. David J. MALAN: Ja, chmod, vir die verandering van die wyse van 'n lêer. En jy sal kry al hoe meer gebruik om te hierdie volgende week met 'n verdere probleem stel. Maar vir nou, ek gaan om te verander die modus nie leesbaar wees, maar almal executeability te gee voorregte, die vermoë hierdie lêer uit te voer. En ek gaan om te wys wat aan die lêer hallo. 

As ek nou doen dot streep gaan hello, jy sien, in werklikheid, my program, hello wêreld. En wat stap het ek duidelik heeltemal oorslaan? Opstel van. So ek het net gehardloop hierdie program eenvoudig. 

En dit blyk jy dit kan doen met 'n baie van die sintaksis wat herinner aan C. Laat my gaan in vandag se kode, wat ek in my vhost gids hier, vir die regte redes ons sal terug te kom. En ek gaan om te gaan in, kom ons sê, voorwaardes 1. 

En wat jy hier sien, die eerste en plek, 'n hele klomp van die kommentaar. Maar dit is eintlik 'n her-skepping in PHP van 'n program wat ons gedoen het in week een genoem voorwaardes 1.c waar die doel in lewe van hierdie program is blykbaar om te vra die gebruiker vir 'n heelgetal en dan 'n paar sagte doen analise op dit waardeur jy sê as dit positief of negatiewe of gelyk aan nul. En ek bring dit op net omdat, behalwe vir miskien 'n klein detail, dit is ononderskeibaar so ver van C. 

Wat is die een eienskap hier dat miskien spring uit by julle as 'n bietjie anders? Miskien twee dinge. Ja? 

STUDENT: Dollar teken n? 

David J. MALAN: Ja. So dollar teken N teenwoordig is. En dollar tekens, soos ons sal sien, gaan 'n oplossing aan die begin te wees van enige veranderlike in PHP. Dit is beide goed en bad-- goeie in dat dit is soort van voor die hand liggend wat is 'n veranderlike, sleg in dat dit nog 'n ding om te tik. En daar is 'n ander ding wat ons het nie heeltemal gesien het, ten minste deur die spelling. ja? 

STUDENT: read line. 

David J. Malan read line. Read line ons nie sien nie, per se, in C, selfs al is daar 'iets soortgelyke, maar ons het getstring gebruik, en dit is sy eweknie. So as ek gaan in hierdie gids, wat gebeur om te wees, as ek in 'n bietjie in my vhost sal verduidelik gids en my bron 'n gids, en ek gaan voort en doen dot streep conditions-- whoops-- dot streep voorwaardes 1, sal jy sien, weer, dieselfde issue-- toestemming geweier. 

So laat my zoom in en chmod 'n plus x op toestande, dot streep voorwaardes. Ek wil graag 'n heelgetal, asseblief, 50. En ons kon speel hierdie spel die hele dag lank. Dit gaan om presies te tree soos dit gedoen het in week een. 

OK so nie alles wat anders is, behalwe nie net dat effense bietjie van sintaksis, maar op die top, het ek weer het hierdie lyn wat het my toegelaat om iets te skep wat lyk soos 'n C program genaamd hello, genoem voorwaardes 1. Maar dit is nie 0's en kinders Ek is direk uitvoering. Dit is eerder die loop van hierdie tolk wie se naam gebeur identies aan die taal wees. Die program word PHP genoem, en my kode onder lyn een is wat geslaag het in dit. 

Ons kan dit doen nog 'n redelik eenvoudige byvoorbeeld herinner aan iets Ons het weke gelede. Weereens, dit is 'n soort van arbitrêre stuk van die kode wat blykbaar nie wat as jy dit sal loop? Wat is dit gaan om te druk, vermoedelik? 

So het aanvanklik op die lyn 16, is dit gaan sê x is nou 2, waarskynlik. % D is dieselfde as $ i vir printf. So dan is dit cubing, dot, dot, dot, in lyn 17. En dan reël 18 verskyn 'n funksie Cubed te bel. En waar is Cubed gedefinieer? 

Wel, dit lyk soos in die lyn 25, so dit is nie al wat verskil. Ek het 'n paar opmerkings bo nie, maar vir die grootste deel, dit is 'n redelik eenvoudige porting of sukses uit die C-program aan die PHP weergawe. Maar daar is nou 'n paar verskille wat miskien moet spring uit. Wat anders is anders oor hoe jy kan dit dieselfde program in C skryf? 

STUDENT: [onhoorbaar]. 

David J. Malan Daar is geen prototipe tot bo. So PHP-- en eerlik, 'n Baie van die moderne languages-- is 'n baie slimmer en meer nuttig as C opstellers in wat jy kan die funksie sit hier, jy kan 'n funksie sit hier, en die tolk gaan jy die guns van lees te doen die hele lêer voordat hy besluit dat 'n funksie nie bestaan ​​nie. So mooi verbeterings jaar later. Maar daar is ook iets anders verskillende of afwesig hier. Ja? 

STUDENT: [onhoorbaar]. David J. Malan Ons hoef nie te verklaar die tipes veranderlikes, so ons sal kort voor lank dat sien Daar is verskillende tipes in PHP, maar jy hoef dit nie te spesifiseer, wat ook is beide goed en sleg. En daar is 'n ander ding ontbreek. 

STUDENT: Daar is geen biblioteke. 

David J. Malan Daar is geen biblioteke. OK, so dit is lekker. Ons kry 'n baie meer uit die boks. So daar is eintlik 'n baie meer dinge as wat ek gedink het, verskil. Hoe gaan weg in die rug? Wat is dit? Sê dit weer? 

STUDENT: Pointer. 

David J. Malan Geen wysers. OK, ten minste in hierdie voorbeeld nie. Dit is regverdig. So is daar nie riglyne in PHP eintlik in die algemeen. Daar is iets genoem verwysings, maar ons sal nie te veel tyd daar spandeer. En wat anders? 

STUDENT: Main. David J. Malan Main. So dit was die grote Ek het gedink van. Let daarop dat daar is geen hoof ingang punt. Jy begin net die skryf van jou kode. En dit is eintlik gaan voordelig wees wanneer ons die oorgang 'n oomblik om werklik die gebruik dieselfde taal vir web-gebaseerde ontwikkeling, waarvoor ons wil nie net een inskrywing punt te hê. Ons wil dalk 'n klomp van die te hê URL, 'n klomp van die verskillende lêers al wat in die gebruiker se toevoer en die vervaardiging van uitset. 

Maar hier is die baie teleurstellend voorbeeld wat ek die laaste keer belowe het, naamlik in hierdie gids hier, spelfoute. So in hierdie lêer speller, wat ons sal nie te veel tyd spandeer op, daar is ' in wese 'n porting-- P-O-R-T. Dis net die woord gegee toe, sê, jy van een taal omskep na 'n ander hand gewoonlik. 

Dit is 'n verslaggewing van PC weergawe van speller van PSET 5. En ek wese probeer om te skakel dit reël vir reël so goed as wat ek kan. So as jy wil hierdie soort van ding, dit eintlik is die moeite werd om op 'n sekere punt trek hulle albei langs kant en sien wat is dieselfde en wat anders is. Maar hulle is pretty darn soortgelyk. As jy onthou wat speller selfs lyk, selfs al is jy nie het hierdie lêer te verander, dit is redelik soortgelyk struktureel met net 'n paar veranderinge hier en daar. 

So dit is net om te sê dat dit is redelik eenvoudig speller te omskep van C na PHP. Maar in woordeboek, is daar iets wat selfs meer aantreklik. Laat my voort te gaan en die skep my eie dictionary.php lêer. So effens anders in die sin dat ons sal noem dit Php plaas van .c. Want dit is 'n PHP lêer, ek do-- effens annoyingly-- het die lêer met te begin 'n PHP tag soos dit. En ek gaan om voort te gaan en definieer 'n paar funksies. Funksie genoem tjek, wat gaan neem in 'n woord soos tevore. Maar hierdie argument se gaan 'n dollar te hê teken, want ons is, weer, met behulp van PHP. Nog 'n funksie van dictionary.c was vrag en dit het in die naam van 'n woordeboek, so ek sal kry om daardie funksie gereed om te gaan. 

Die ander een in dictionary.c was wat? Grootte was een van die mooiste mense by minste as jy gehou paar veranderlike rond. so klein is net 'n veranderlike om terug te keer. En dan was daar aflaai. 

So was daar hierdie vier funksies in die probleem stel 5 wat jy nodig het om te implementeer met sommige data struktuur of strukture. So ek het belowe dat in PHP, kan ons verklaar 'n gemors tafel, byvoorbeeld, alles wat makliker. In werklikheid, as ek wil 'n hash tafel, Ek is net gaan om te gaan soos wat en daar is my hash tafel. En dit is die noot, teleurstellend, dat ons links af op die laaste keer. En jy weet wat, as ek wou 'n veranderlike vir die grootte, goed, hierdie een is nie al wat verskil van C, maar ek gaan om voort te gaan en dit doen. En sien geen data tipe. En Ek sal later terug te gaan en eintlik hier by te voeg 'n paar opmerkings. Maar wat van vrag? 

As dollar teken woordeboek is die naam van my lêer en ek wil eintlik te laai woorde in die tabel nou, Ek kan eintlik nie iets redelik eenvoudig. One-- en dit is minorly annoying-- in PHP, jy het om in te gee van 'n funksie as jy wil toegang tot 'n globale veranderlike wat is buite omskryf. 

Maar dit is nie besonder interessante nou. Wat is meer interessant is dit vir elke bou wat ek genoem laaste tyd. En dit blyk dat PHP het 'n funksie genoem lêer wie se doel in die lewe is 'n lêer oop te maak en te lees in al sy lyne in 'n skikking en gee hulle terug te. 

Wat om te sê ek kan woordeboek doen wat nou effektief as ek roep lêer, dit gaan my terug te gee 'n verskeidenheid van woorde uit die lêer. Dit is nie al wat goed is. Dit gaan nog 'n lyn te wees woorde, iets lineêre. Maar ek kan voort te gaan en Itereer oor elk van hierdie woorde met dat sintaksis ons gesien kortliks laaste tyd. En jy sal dit weer sien in die komende PSET. 

Maar nou het ek 'n lus iterating oor elke woord in die woordeboek. En op elke iterasie, onthou ek roeping van die huidige woord "woord." En al wat dit gaan neem om te 'n woord in die woordeboek is gaan wees woord raaiskoot "waar is." Dit is my insetsel funksie. Dit is my vrag funksie vir my woordeboek. Nou is dit 'n bietjie van 'n bedrieër, want jy weet wat, daar is eintlik backslash N se aan die einde van die woorde dat ek moet seker ontslae te raak van, maar dit is nie 'n probleem nie, want PHP het 'n funksie genoem kap wat letterlik tjops af een karakter aan die einde. So geen probleem daar. Ons het voor en eintlik gegaan verkort dat net hierdie. En nou, ek moet seker dop grootte, so laat ons ten minste doen this-- grootte ++. Ek kan dit doen as tevore. En dan is dit waarskynlik gaan om te werk net 'n boete, sodat se terugkeer waar. Gedoen. PSET 5. 

[Gelag] 

David J. Malan OK. Ons gaan dit weer te doen met die volgende PSET ook. So, wat oor die grootte? Wel, hierdie een hopelik oor as jy die laaste keer te verwag, maar ek het om te doen hierdie dom globale ding. Dis net 'n juweel van die taal se ontwerp. 

Maar tjek is 'n bietjie meer interessant. So as ek geslaag het in dollar teken woord, het ek eers wil om toegang te hê dat globale veranderlike tafel. En nou as ek wil kyk of 'n woord is daar, Ek kan net sê as dit waar is dat Die volgende is wat in die tabel, dan voort te gaan en terugkeer waar; anders, terugkeer vals. Gedoen. Die ander helfte van PSET 5. 

Alle reg, sodat weer, ek is sny 'n paar hoeke. In regverdigheid, ek moet seker spandeer 'n paar sekondes op die implementering van hierdie. En ek moet seker nie spot al die ure wat jy op die PSET so baie. So strtolower is 'n funksie. Iets soortgelyk eksistensialistiese in C, ten minste vir karakters, maar PHP se het 'n hele string weergawe. 

Dit gaan alles af te dwing in klein letters, wat sommige van julle dalk gedoen het om canonicalize wat jy sit in jou woordeboek. En nou kan jy dit doen in C, ook. Dit het niks te doen met PHP. 

Maar enige tyd wat jy het 'n Boolese toestand, soos iets op die lyn 10 is daar, wat slegs gaan evalueer waar of vals is, en jou as anders duidelik terugkeer waar of onwaar, ek kon eenvoudig regtig hierdie sexier en net iets soos hierdie. Sodat daar is my tjek funksie. Reg, as die Boole gee 'n ware of 'n valse, laat ons net dit terug dadelik. 

En daar is 'n paar ander tweaks Ek kon hier en daar maak. Load-- aflaai, op die pad, wat gedoen is. Niks om daar te doen. Aangesien al die geheue in PHP en baie ander tale is eintlik daarin geslaag om vir jou. So terwyl in C, jy pynlik geleer het, enigiets wat jy malloc of calloc of realloc, jy het om jouself te bevry. Enigiets wat jy fopen, jy het om te fclose, sodat hulpbronne uiteindelik bevry en gereedskap soos Valgrind nie kennis en kla nie, Dit is 'n goeie ding om te loop op hulle. 

Maar seker, moet daar 'n paar vang, reg? Andersins, het ons soort van gemors 'n hele klomp van die weke. So daar is 'n aantal redes Daarom het ons soort van neem hierdie trajek, maar daar is 'n trade-off. Reg, was dit tematiese. 

So, wat kan 'n trade-off hier beweeg, vanaf C na PHP? Voel soos al wen so ver behalwe 'n bietjie van die lelike hier of daar nie. Ja. Wat is dit? 

STUDENT: [onhoorbaar] geheue. David J. Malan Speed. OK. Wel, my spoed was redelik vinnig. Reg? Maar spoed van die uitvoering van die program? OK, so dit is 'n billike punt. 

So as dit sou gebeur, het ek in advance cued op beide my probeer oplossing, die een Ek het op die groot bord was 'n drie-gebaseerde oplossing, en ek het dit in hierdie gids hier. So ek in 'n oomblik, ek kan voort te gaan en loop dit op die King James Bybel, slaan Enter. En dit is hopelik korrek implementering aan die einde, gee my tyd in totale van 0.38 sekondes vir daardie een ietwat arbitrêre voorbeeld. 

En as ek gaan nou in hierdie tweede terminale venster hier waar ek die eerste keer geopen gedit, laat my gaan in vandag se code-- wat, weer, is in hierdie gids here-- en Laat my voort te gaan en uit te voer speller. So net om duidelik te wees, dit is die PHP weergawe. Ek is net wat die top van dit hier. 

So as ek dit doen speller van tilde CS50 PSET 5 tekste, King James, betree. Dit is nog steeds vinniger as skriftelik dit in C, maar die totale tyd is, kennisgewing, 0,93, terwyl my C-implementering was 0.38. So dit is 'n nie-triviale verskil. 

En dit is net op 'n lêer. As jy die twee te hardloop programme teenoor die groot bord en het 'n hele klomp van die insette getoets is, sou dit sekerlik voeg. En as ons het selfs groter stelle data, Dit is ook optel al hoe meer. So ja, die betaling van 'n prys spoed wel die geval is. Wat anders? Ja? 

STUDENT: Bedrag van geheue gebruik. 

David J. Malan Bedrag van geheue gebruik. So ek het nie een sekonde gedink het toe die skryf van hierdie PHP weergawe as om hoeveel geheue Ek was die gebruik. Ek is heeltemal uitstel wat aan PHP self en elkeen het daardie program. En wat dalk OK, maar as ek eintlik regtig omgee smaller soveel prestasie uit my program of uit my webwerf of uit watter instrument Ek bou, miskien PHP, inderdaad, is nie die regte taal. 

En in werklikheid, dit is die rede waarom, vir Byvoorbeeld, baie web servers-- die werklike programme wat dien web content-- word nie in PHP geskryf of in Python of Ruby. Hulle is geskryf, soos jy sal nou met PSEt 6, in C sodat jy kan druk elke bietjie van die prestasie uit dit en regtig oefen fyn-graan beheer oor wat daar gaan op onder die kap en nie net neem dit vanselfsprekend een of ander hoër vlak data struktuur. 

Oorweeg, na alles, elkeen wat in PHP geïmplementeer dat die idee van 'n gemors table-- dit is eintlik meer behoorlik genoem 'n assosiatiewe array-- doen hy of sy 'n idee watter soort insette wat jy gaan wees om in die struktuur? So natuurlik nie, reg? Dit is 'n generiese instrument in die toolkit wat verskaf aan enigiemand wat wil om dit te gebruik, en so seker dit kan uiteindelik nie geskik word vir presies wat jy wil doen. 

So trade-offs-- ontwikkeling tyd mag verskil, prestasie kan verskil, kompleksiteit of geheue gebruik kan verskil. En ja, wat jy sal vind toenemend is dat daar gaan anders wees gereedskap vir die handel. En in die feit dat 'n super meerderheid van mense se finale projekte in hierdie klas, glo dit of nie, is C nie gaan die reg om die taal te gebruik om te wees. 

En in die feit dat een van die wegneemetes uiteindelik vir 'n klas soos hierdie is om te kry wat jy dink oor, Wel, wat moet jy trek die rak wanneer jy wil 'n probleem op te los. En inderdaad, sal ons hierdie brug oorsteek selfs meer as ons kyk na meer tale selfs buite vandag. 

So laat se oorgang nou miskien 'n meer bekende konteks vir die gebruik van 'n taal soos PHP. Dit is 'n bietjie algemeen by te gebruik die opdrag lyn, skryf skrifte soos ek gedoen het, maar dit is baie, baie meer algemeen. En dit bedoel is om gebruik te word die vorm van lêers wat tipies eindig in .php-- maar dis nie 'n prerequisite-- wat hulleself genereer web inhoud. 

So laat my gaan voort en maak 'n paar voorbeelde wat ek voorberei het. En dit is eintlik soort van ware stories in dat een van die eerste dinge Ek ooit gedoen het myself na die afwerking CS50 en miskien, dink ek, CS51 jaar gelede is my kamermaat en ek is gehelp die eerstejaars binnemuurse te hardloop sport-program, wat, by die tyd, het eerstejaars wat vir verskeie sport deur die invul van 'n stuk papier, soos dit genoem is, loop oor die werf te Wigglesworth, en dit te laat val in sommige Proctor se deur val. En dan sal hy of sy gaan deur en dan ons eintlik met die hand e-pos dat ons vir 'n paar sport is geregistreer. 

So duidelik, 'n geleentheid om vir verbetering. Hierdie dae, kan jy draai net Google Vorms, maar terug in die dag, Ons moes eintlik bereik for-- hierdie was nie eens so lank ago-- bereik vir 'n ontwikkeling taal wat nie PHP. Teen die tyd, was dit iets genoem Perl, wat gegaan het uit die mode sedert. Maar die idee is dieselfde. 

En ek het in wese af te probeer na die hawe gaan Perl weergawes PHP, maar in volle vrywaring, gee nie enige gedink aan die estetika net nog nie. So hier is 'n web bladsy. Dit is 'n lêer. As ek vergroot, sy glo genoem froshim0.php net omdat dit is ons eerste voorbeeld in hierdie reeks. En sien dat dit wat blyk 'n baie lelike HTML vorm te wees nie, maar 'n vorm is interessant want dit kan my gebruiker om insette te lewer tot die leser. 

Nou die laaste keer toe ons 'n vorm, wie het ons 'ons navraag parameter, die tou parameter soos dit genoem is? So om te Google, reg? Ons heeltemal gestamp op die idee van om iets te doen met die insette. 

Maar vandag, het ons begin met die vervaardiging uitvoer. En die gedrag wat ek gaan om te sien hier aanvanklik is redelik triviaal. David, ek sal kyk af geslag hier, sê Matthews hier. Ek sal nie die kaptein. Ek gaan om te klik Register. En sien dat die URL het verander om te registreer-0.php, en dan is daar hierdie lelike teks hier. Ek het geen gedagte te die uitleg van hierdie. 

Maar wat interessant is, is dat drie waardes is blykbaar geslaag in. Dit is PHP se soort gelykstaande aan printf-- ons sal sien wat dit regtig genoem in 'n bit-- dat net druk uit wat jy geslaag het in dit. So dit dui daarop dat die vorm minstens drie velde om dit, en jy my sien tik hulle in. Een was my naam, die een was geslag, een was koshuis. En die kaptein, het nie eens kry gestuur na die bediener, want ek het nie nagaan. 

So is dit te glo sê, wanneer jy dinge lê op die web, Nie net het die URL soms change-- soms is dit nie. Trouens, die naam verander het, maar wat afwesig is van die URL dat ons gesien het die laaste keer met Google. Ja? 

STUDENT: Geen soektog string 

David J. Malan Daar is geen navraag string. Daar is geen vraagteken iets. Daar is geen vraagteken Q gelyk katte, soos ons gedoen het die afgelope tyd. En daar is beslis geen vraagteken naam is gelyk aan David of dorm gelyk Matthews, So waar is dat almal gaan? 

Wel, laat my terug na gedit gaan hier en maak die eerste van die lêers in my vhost, plaaslike gasheer, openbare gids hier en gaan na froshim0. So dit blyk dat byna al hierdie bladsy is net HTML. En dit kan nie vertroud is met jou, maar dit het gou meer so sal wees met PSET 6 en PSET 7 en 8 PSET. Maar dit is net 'n HTML-bladsy. 

En die interessante dinge lyk hier te wees. 'N vorm tag wie se optrede kenmerk het 'n waarde van 0 register. Dit is hoekom wanneer ek ' hierdie, dit gaan na die lêer. Maar metode is anders today-- post. So dit blyk daar ten minste twee metodes op die web gebruik inligting te stuur van die leser aan die bediener. Kry sit dit in die URL. Post dit stel elders. En wanneer en hoekom mag jy eintlik wil 'n webwerf pos te gebruik dan plaas van kry, net intuïtief? Enige webwerf. Watter soort data moet net verby deur afleiding nou per pos in teenstelling te kry, as ons het gesien die twee verskille? STUDENT: [onhoorbaar] beveilig. David J. Malan As jy wil iets veilig te wees. So kan jy 'n wagwoord intik in 'n webwerf, 'n kredietkaart in 'n webwerf sou soort van hierdie suboptimale As die leser sit dit waarde binnekant van die URL. Hoekom? Jy sien dit, wat nie lyk soos 'n groot deal te wees, maar die kans is jy mooi gereeld loop weg van jou rekenaar of gebruik rekenaar laboratoriums, en so iemand anders of selfs 'n kamermaat kon maklik loop op en sien dat private inligting. Wanneer jy 'n e-pos stuur via die web, jy sal waarskynlik nie wil hê dat die data einde in die URL as well. En dus is daar 'n aantal redes Daarom het ons dalk wil om dit hier te plaas. En photos-- reg, ek kan nie eens heeltemal dink hoe jy 'n grafiese neem, soos 'n JPEG, en sit dit in 'n URL. Jy kan dit doen. Daar is maniere om die kodering, maar dit is nie net eenvoudig soos dit. 

So registreer 0 is eintlik baie underwhelming. Al wat dit sê letterlik is nie. Dit druk uit binnekant van 'n paar HTML tags die volgende. Ek het 'n PHP tag hier geneste binnekant van 'n pre tag. "Voor" beteken net pre-formaat teks, mono-afstand, soos 'n tikmasjien. 

Printr is 'n druk rekursiewe funksie. En dan is daar hierdie interessante ding hier. En ons sal terug kom na hierdie want daar is ander, maar dollar teken underscore post blyk te wees, 'n veranderlike in PHP waarin enigiets jy stuur uit leser na bediener kry gestoor vir jou. En ons sal sien hoe om by daardie inligting voor lank. 

Maar eers, laat ons gaan terug na 'n effens ander voorbeeld. Gaan in register-- of eerder, froshims1.php, wat lyk 'n bietjie anders. Ek het 'n bietjie meer poging om met die uitleg, selfs al is dit nog redelik lelik. Maar ek gaan om voort te gaan en tik in "David" nou. Manlike. Ons sal "kaptein" hierdie keer gaan. Ons sal doen Matthews. En registreer. 

En hierdie keer is dit sê, hm, nie regtig nie. Alle reg, so wat se registreer 1? Laat my gaan in die oop register 1 and-- hm. Alle reg, sodat dit is interessant, en dit is 'n stepping stone nou op na meer interessante programme. 

Let op die top van hierdie lêer het 'n PHP tag sowel as 'n paar opmerkings. En dit is vir nou, 'n afleiding So laat ons net ontslae te raak van die kommentaar net soos hulle is in C. En ek eis met hierdie stuk van kode met 'n opmerking Hierdie kode is bevestiging van die voorlegging. 

Wel, dit blyk dat veranderlikes soos dollar-teken beklemtoon post is genoem super globals. Hulle is soos hierdie spesiale globale veranderlikes wat net omni-tans beskikbaar in jou program. En jy kan vierkante bracket notasie gebruik na die indeks in hulle nie die gebruik van getalle soos 0, 1, 2, 3, maar die werklike woorde. 

So jy kan dink dollar teken beklemtoon post as 'n soort van 'n hash tafel dat jy 'n sleutel in 'n lookup kon slaag woord in-tussen die vierkante hakies, en dit gaan jou terug te gee die waarde wat die gebruiker eintlik voorsien. PHP het 'n funksie genoem leë wat net sê ja of nee, dit veranderlike is leeg, of nie. Ons het hierdie dubbele bars, wat net beteken of, soos in C. 

So in effek, die lyn 4 is net sê as die gebruiker het nie 'n naam gee of het nie 'n geslag of het nie gee 'n koshuiskamer, gaan voort en lei hom of haar via hierdie lyn hier. So, dit is 'n bietjie kripties, maar dit beteken net letterlik gaan terug na hierdie plek sodat dit trappe die gebruiker terug na waar hy of sy vandaan kom. Maar dit is 'n bietjie onbevallig in dat ek hard gekodeer nie. 

Maar wat as dit as voorwaarde evalueer nie waar? Wat as die gebruiker het gee my sy of haar naam en dorm en geslag? Dat indien toestand is nie gaan evalueer waar, so ek getref nie die uitgang in reël 7. So wat gebeur? En dit is wat interessant oor PHP. 

Jy kan laat val in en uit PHP mode, om so te praat. As jy wil 'n paar kode uit te voer, jy kan oop en toe 'n PHP tag en sit-kode is daar soos ek hier gedoen het. Sodra jy naby die PHP tag, die bediener is net gaan om te spoeg uit wat jy ook al daar. En inderdaad, dit was deel van die oorspronklike ontwerp van PHP, vir 'n beter vir erger, was hierdie meng van kode en opmaak taal. En ons sal sien dat hierdie baie vinnig oorgaan in 'n gemors. En so sal ons beter doen as Dit het uiteindelik, maar net kennis van die gemak waarmee ek eintlik in staat om die logika te voer. 

Maar nog 'n bietjie underwhelming. Kom ons oop weergawe twee van Frosh kitsboodskappe, wat blykbaar lê te register2.php. So hierdie lêer is eintlik gaan om te kyk byna dieselfde. Ek gaan om te gaan na Frosh kitsboodskappe 2. Maar in Frosh kitsboodskappe 2, Kom ons kyk wat gebeur. 

David, kliek op die radio knoppie, as dit genoem; Matthews, geen kaptein. Registreer nie. Jy is geregistreer. Nie regtig nie. O wag, ons het net wat byvoorbeeld het ons nie? Alle reg, staan. Ons sal doen om die drie. Duidelik iets gaan oor gebeur met Gmail. Ons sal daar kom. 

So Frosh kitsboodskappe 3 lyk. Nie anders nie. Maar toe ek David, manlik, Matthews, en registreer, hierdie derde en finale weergawe eise, heel eenvoudig, jy werklik geregistreer is. Dit is soort van onbelangrik. Maar ek eis met hierdie derde en finale weergawe Ek het nou herskep presies wat my kamermaat en ek gebou vir die Frosh kitsboodskappe program jaar gelede. En dit was eenvoudig. Daar was geen databasis, geen Excel. Maar meer belangrik, was daar nie meer papier want wat ons gedoen het met hierdie program was eintlik e-pos die Proctor, wat was voorheen ontvang hierdie dinge via vorms. 

En glo ons het hierdie geprogrammeer in so 'n manier dat wanneer iemand registers, John Harvard se rekening e-pos die proctor-- of homself in hierdie geval, John Harvard-- met die volgende text-- "Hierdie persoon net geregistreer is." Naam is David, kaptein is leeg; geslag, 'n mannetjie; en dorm, Matthews. 

So, wat daar gebeur het? Wel, die lêer in die vraag hier is blykbaar register3.php. En as ek oop het, sal jy sien beide die krag van die kode soos hierdie en ook, eerlik, die onveiligheid van 'n stelsel soos e-pos. Ek het nou net effektief voorgegee wees John Harvard in die volgende manier. 

Ek het die ope PHP tag tot bo, wat sê net hier kom 'n paar PHP-kode. Hier, blyk daar biblioteke in PHP. Jy moet net nie nodig het om te sluit header lêers soveel. Jy kry meer met die kombuis wasbak, om so te praat. 

Maar hierdie keer in reël 4, doen ek wil spesiale biblioteek genoem PHP mail, dit is iets wat jy kan installeer gratis in baie stelsels. Hier Ek is valid die indiening net deur die nagaan het die gebruiker gee my 'n naam, 'n geslag, en 'n koshuiskamer. En indien wel, gaan voort en instansieer 'n e-mail. 

Jy kan dink van hierdie as 'n lyn van kode wat net ken. Dit is soos malloc, maar dit is 'n bietjie sexier in wat jy noem nie net malloc en 'n paar generiese nommer. Jy sê vir my een van hierdie, gee my 'n nuwe een van hierdie. 

En as jy in geprogrammeer het Java of C ++ of ander tale, Jy kan gesien het nie. Maar die kort van dit, as onbekende, hierdie lyn sit in die dollar teken pos 'n spesiale struct genoem 'n voorwerp wat ingeboude het e-pos funksionaliteit. En in die feit, kennis en soortgelyke sintaksis. 

Dit is nie 'n wyser, per se. PHP gebruik net dieselfde sintaksis. Hierdie lyn word gesê gebruik SMTP-- Simple Mail Transfer Protokol, wat net die protokol gebruik pos te stuur. Dit is spesifiseer gebruik Harvard se SMTP-bediener, wat iewers hier op die kampus. 

Dit is om te sê wat TCP poort nommer te praat, en ek het net gedink dat deur googlen of deur te vra die hulp lessenaar. En dan, omdat Harvard gebruik sommige stelsel sekuriteit op die pos server-- ten minste te enkripteer verkeer tussen jou en dit, selfs al is iemand kan stuur it-- Ek gaan om te draai op die TLS-protokol vir die behoud van 'n veilige. 

Maar dit is waar dinge kry 'n bietjie scary. Ek kan net arbitrêr sê dat ek jharvard, en ek kan net arbitrêr E-pos my hier. En dan het ek kan spesifiseer 'n onderwerp met hierdie lyn hier. 

En dit lyk net lelik, maar dit is net 'n klomp van die aaneenskakeling. Blyk PHP het 'n super nuttig simbool, soos 'n paar tale, die dot-operateur, wat net letterlik concatenates string na string na string, en jy hoef nie te malloc of figuur die totale lengte van die string. Jy doen dit net. En inderdaad, want ek concatenating in al hierdie dinge met hierdie punte, dit is die rede waarom die e-pos wat ek gestuur het as dit gedoen het. 

En dan laastens hier, ek stuur e-pos. So as dit vals is, Ek is net gaan om te sterf, Dit is 'n funksie wat net afdrukke na die skerm 'n fout boodskap. Maar dit is, in werklikheid, roep die stuur funksie. Andersins, as al hierdie versuim, dit aansture my terug hier. 

En hoekom het ek sien dat Ek is regtig geregistreer? Wel, dit gebeur hier. So bring ek hierdie vir 'n paar van die redes. 

Een, dit is presies hoe as jy bou sommige webwerf vir 'n finale projek of vir die werklike wêreld, dit is hoe jy e-pos aanmanings stuur aan jou kliënte of jou intekenaars. Dit is hoe jy 'n wagwoord aanmanings stuur. Dit is hoe jy mense boodskappe stuur dat hulle 'n nuwe Facebook boodskap hangende of iets soos dit. 

Maar dit het ook praat die feit dat dit kan het baie goed gewees het van Davin of enigiemand anders. En ek sê hierdie soort met 'n glimlag, want ek is heeltemal seker wat gaan deur verskeie van jou gedagtes op hierdie punt. Maar dit is een van daardie doen as ek sê, nie soos ek doen soort van dinge, want dit is alledaags tot smee e-pos soos hierdie. Maar as jy gesien het of lees in die rooi, laat dit is ook mooi triviaal vir mense hulle terug na 'n paar oorsprong spoor. En vra my 'n paar keer, miskien op CS50 middagete, hoe ek die eerste keer het baie nou bekend byna aan die ge raad baie jare gelede, toe ek ontdek hoe die internet werk. So in enige case-- effens na die ge raad gedoen het. 

So in elk geval, daar is 'n hele klomp van super globals, soos hulle hier genoem word, een van die wat ons saw-- dollar teken underscore post. Daar is 'n eweknie genoem get, dit is waar dinge uit 'n URL eindig gaan. En daar is 'n hele klomp van die ander, too-- sessie en bediener en koekie. Ons sal terug te kom na cookies 'n ander tyd, maar sessie is gaaf omdat reg now-- tot now-- alles wat ons gedoen het met 'n webblaaier is 'n soort van staatlose, om so te praat. Ek kan kliek om toegang lêers op die bediener, iets gebeur op die skerm, maar dan is die verband sluit. Die Internet Explorer of die Firefox ikoon stop spin en jy moet net sien wat dat webblad bevat. 

So HTTP is staatloos in daardie sodra dit maak 'n verband, kry sommige data, dit is dit. Geen meer verband, in teenstelling met Skype, In teenstelling met FaceTime, in teenstelling met Gchat, wat handhaaf 'n konstante verbinding met die bediener. Die web is fundamenteel ontkoppel, maar ons sal sien voor lank hoe ons dinge kan simuleer soos Facebook chat en Gchat, wat die illusion-- handhaaf of eintlik hou ' konstante verbinding met behulp meer moderne tegnologie. 

Maar as ek gaan, sê counter.php, dit is nog 'n eenvoudige voorbeeld, soos ons sal sien, wat tans dink Ek besoek die webwerf nul tyd. Maar as ek net die bladsy te herlaai, een of ander manier weet ek was hier voor. As ek herlaai weer, dit weet ek was hier voor. En weer en weer en weer en weer. 

So is daar 'n paar plus-plussing aangaan nie, maar kennis die dingetjie spin ooit so kortliks tot bo en dan koppel, so dit is nie soos ek het 'n konstante verbinding met my toestel. Wel, as ek gaan in counter.php, sien hoe maklik dit is. Ek het eers noem hierdie spesiale funksie wat ons sal gou begin neem vir toegestaan genoem sessie begin. Begin 'n sessie. 

En 'n sessie van nou af net gaan 'n emmer te wees, soos 'n winkelsentrum wa waarin jy waardes kan sit en soort vertrou as 'n programmeerder dat hulle gaan om hier te wees wanneer dat die gebruiker kom back-- 'n tweede later, 'n uur later, selfs 'n jaar later, so lank as wat hy of sy doen nie duidelik hul koekies, soos ons sal uiteindelik sien. En nou, ek het net 'n indien toestand hier. So as die volgende sleutel, genoem toonbank, is binne-in sit van hierdie super global-- hierdie hash tafel, as jy will-- genoem sessie dan voort te gaan en gryp die waarde uit die session-- think van hierdie as 'n winkelsentrum cart-- en stoor dit in 'n tydelike veranderlike genoem toonbank. 

Andersins, as dit waarde toonbank was nie ingestel in die sogenaamde shopping cart, net inisialiseer tot 0. Laastens, hier, gaan sit terug in die shopping carts of die sessie die waarde van die toonbank 1. So dit blyk dat hierdie spesiale houer here-- wat, weer, is een van hierdie verband skikkings, 'n skikking wat jy kan indeks in woorde in plaas van numbers-- voortduur selfs nadat die gebruiker gaan weg. Weereens, ek sal terug na die artikel nou. Dit was 'n minuut of so. Maar dit onthou dat ek hier 19 keer voor. Dit is my 20ste besoek. 

En so dit gaan die sleutel te wees implementering van enige webwerf wat onthou dat jy aangeteken het, dat jy iets letterlike in jou inkopie mandjie te koop, of dat jy 'n paar aantal boodskappe hangende. Enige tyd wat jy wil onthou inligting ons sal wat PHP sien, soos verskeie ander tale, bied ons met hierdie illusie van die staat selfs al is, soos jy sal sien in PSET 6, as jy maak HTTP versoeke van die kliënt aan die bediener, dit is dit. Sodra jy terug wat reaksie, daar is niks meer kom terug van die bediener by verstek. Maar ons sal sien hoe om te werk om dit. 

Wel nou, laat ons probeer om te skoon dit op 'n bietjie. Ons het gesien hoe 'n paar verskillende voorbeelde is daar. O ja, en as 'n eenkant, vir diegene bekende of onbekende, Die rede waarom die Frosh kitsboodskappe byvoorbeeld het uit te kyk regtig lelike goed slightly--, nog ugly-- effens minder lelik maar nog steeds lelik is, want as ons kyk by die bron-kode hier, dit blyk dat ek hierdie by die top van die lêer. 

Blyk dat bootstrap is een van vele vrylik beskikbaar biblioteke daar buite wat vir programmeertale bestaan ​​nie altyd nie, maar vir CSS of JavaScript of HTML of enige aantal tale. 

En hierdie mense here-- kom oorspronklik uit van Twitter-- net 'n hele klomp van style. Dit is 'n massiewe lêer hier dat iemand geskryf het, of iemand se geskryf het, met verloop van tyd wat spesifiseer kleure en uitleg en noem maar op, sodat ek kan soort leen hul sintaksis en nie om uit te vind hoe om uit te lê my vorm. Dit is ook minified sodat 'n rekenaar kan verstaan ​​dit, maar nie noodwendig 'n mens. So dit is net die rede waarom die stilering daar verander. 

Maar laat ons nou beter in terme van die ontwerp, want as ons bly af hierdie pad te lank is, ons kode gaan morsig en morsig. So laat se fokus op die voorbeelde hier. Die laaste vir vandag. 

So hier is 'n super eenvoudige weergawe 1.0 van CS50 se webwerf. Dit het slegs skakels na lesings en leerplan en dit is die gebruik van daardie geordende lys tag-- die UL etiket wat ons gebruik laaste keer. En as in die feit dat, as ek oopmaak View Page Bron, sal jy sien dat dit regtig, regtig eenvoudige HTML. En in die feit, selfs al is dit 'n PHP-lêer onder die enjinkap, dit is nog steeds net spoeg uit net HTML vir nou. 

So as ek op Lesings, ons sien dit gebeur. En as ek op week nul, sien ons dit. En as ek op Woensdag, sien ons dit. En dit was blykbaar die PDF van die skyfies van daardie dag. Al wat ek gedoen het, is met 'n skakel anker tag na hierdie URL hier. 

So dit is net om te sê dit is 'n mooi eenvoudige weergawe van CS50 se webwerf. Kom ons kyk hoe dit geïmplementeer word. As ek gaan in die mvc0 gids, ons sal sien 'n paar lêers. Een is 'n README, so as sommige van hierdie is te vinnig, jy kan net steek om rustiger later. En kennis hier is 'n index.php lêer. Dit blyk dat indien jy jouself, die mens, nie 'n finale naam spesifiseer nie 'n URL, die web bediener gewoonlik maak afleidings ten einde 'n standaard naam vir jou. 'N indeks dot iets is gewoonlik die standaard. 

So dit is waarom 'n oomblik gelede wanneer ek besoek hierdie skakel hier geen lêer naam, geen lêer uitbreiding, geen tydperk in die URL. Dit het net geweet een of ander manier mettertyd om te kyk vir index.php. Dit is net 'n konvensie. Kan enigiets genoem word. 

So as ek gaan nou in index.php, sal jy sien dat indeed-- laat ontslae te raak van die kommentaar hier, want daar is regtig niks interessant te it-- dit is net harde gekodeerde HTML. So dit is konsekwent, al is, met my eis dat jy HTML en PHP kan commingle. Daar is geen werklike programmering logika hier. 

En die ander lêers is redelik veel net so oninteressant. Dit is net harde gekodeerde week een hier om te week een m en week een w, Maandag en Woensdag. En dan as ek oop week nul, sien dit is byna identies. 

En dit is soort van 'n sleutel afhaal. Let net hoe oortollige dit is. Hierdie lêers skaars verander, en tog het ek getrek een van hierdie kopie / plak werk waar ek het een file-- vermoedelik in week zero-- kopieer dit wanneer week het gekom om, en tweaked 'n paar waardes. Ons moet seker wees om beter as om dit te doen. 

So laat ons gaan terug na mvc en gaan in weergawe een. En sien Ek het 'n paar lêers, want wat was algemeen vir al die lêers net 'n oomblik ago-- as ek gaan terug na weergawe 0, Kom ons gaan terug na indeks en net postulate-- sodra ek ontslae raak van die comments-- wat deel van hierdie bladsy is vermoedelik in elkeen van my lêers? Noem dit net uit. Watter lyne is gedupliseer waarskynlik oor al hierdie bladsye? Ja? 

STUDENT: [onhoorbaar]. 

David J. Malan 1 tot 9. Ja, absoluut. 1 tot 9, behalwe miskien 8 verander 'n bietjie, want CS50 word lesings of week nul of iets. Maar byna identies. So al hierdie dinge is net soort gekopieer en geplak. En daar is 'n paar ander lyne wat ek kan dink van wat waarskynlik identies oor al die lêers. 

STUDENT: 12 en 13. David J. MALAN: Ja. Seker, 12, 13, en 14 waarskynlik, net omdat die interessante dinge gebeur op die lyne 11 en 10, so dit lyk. So laat ons kyk na weergawe 1, wat probeer om te verbeter op hierdie. In weergawe 1 van hierdie MVC example-- ons sal verduidelik wat mvc middel in 'n moment-- As ek gaan in indeks, is dit soort van lyk 'n bietjie verwarrend nou. Dit is nie heeltemal so eenvoudig soos tevore. 

Maar wanneer jy begin om te lees dit versigtig, dit is redelik eenvoudig wat dit doen. Blykbaar lyn 1 en lyn 8 vervang al die dinge wat jy net identified-- al was dit vir 'n goeie maatreël, Ek het die ULS daar net in die geval 'n paar dae het nie 'n lys van dinge. En dit vereis is soort van soos pond sluit in C. Dit kopieer en plak die inhoud effektief reg hier in hierdie lêer. 

So in header.php, soos jy kan aflei uit die naam, gaan die kop van die bladsy wees. Dit is soort van hier gelaat. Dit het net die top om dit, maar daar is geen inhoud meer hieronder. 

En as ek kyk na footer intussen, wat was die ander lêer mentioned-- hierdie een is selfs minder interessant, Maar weereens, dit is algemeen vir alles. So dit is die voet. Dit is die kop. Dit is die lêer wat verander, so hoekom nie probeer om faktor uit die gemeenskaplikheid Met hierdie twee lyne hier? 

Maar ons kan dit skoon te maak 'n bietjie verder. Ek gaan om voort te gaan en oop weergawe twee waar ons sal sien dat daar 'n nuwe lêer, helpers.php. Ons sal sien wat dit is in 'n oomblik. Kom ons gaan na die indeks, soos die inskrywing punt as tevore. 

En nou sien ek wat helpers.php, nie kop-of voet. Maar helpers is 'n soort van hou helpers.c en helpers.h van PSET 2 of PSET 3 lank gelede wanneer jy eintlik het soek en vind dat PSET, en jy het al jou kode vir sortering en soek in 'n aparte lêer. Dit is wat hier aangaan nie. 

En nou lyn 3 lyk 'n bietjie anders. En dit is net een reël. Dit selfs meer te maak duidelik, ek kon net nie hierdie stilisties konsekwent te wees met alles wat ons gedoen het. Maar dit is nie regtig die verandering van die funksie. Dit is net een lyn van die werklike kode. 

Blykbaar is daar 'n funksie iewers genoem lewer kop, en dit is waar dinge 'n bietjie sterk. Let daarop dat die binnekant van sy hakies is wat ander stuk van die sintaksis? Dit is waarskynlik 'n bietjie moeilik om te sê nie, maar sien there's-- ek 'n paar wit sal sit ruimte. Daar is vierkantige hakies. 

En vierkantige hakies ons 'n bietjie gelede gesien in die konteks van assosiatiewe skikkings, wat, weer, soos hash tabelle. En as jy nou dink aan C, die orde van argumente in 'n funksie moet altyd dieselfde wees. Jy het om te onthou wat die bestel is-- x, y, z of z, y, x-- en jy moet altyd vir hulle in dieselfde volgorde of kyk hulle As jy vergeet het. 

Maar dit lyk na 'n slim manier wees van verbygaande 'n arbitrêre sleutel waarde pare waardeur titel is die naam van 'n argument in hierdie geval en CS50 is die waarde daarvan. En die feit dat ek ' hierdie vierkantige hakies hier beteken dat ek kon ook slaag in iets soos 'n week is 1 of 0 of 2 of 3. Dus het ons geparameteriseer hierdie funksie in so 'n manier dat dit kan neem verskeie insette, maar vir nou is dit net die een. 

As ek gaan nou in helpers.php, sien wat dit doen. Dit is 'n bietjie van die nuwe funksies, maar vir nou net ' geloof dat dit die sintaksis wat jy 'n funksie in PHP definieer. Jy sê letterlik funksie. Jy het 'n opbrengs spesifiseer nie tik, en dit is in ooreenstemming met die veranderlike detail vroeër waar jy werklik tik nie sterk. 

Dit spesifiseer net wat by verstek hierdie neem 'n assosiatiewe skikking as 'n argument. En weet jy wat? Indien die gebruiker nie een slaag in, neem 'n standaard waarde. 

Dit is 'n funksie wat C het nie vir ons, wat is lekker, want nou data, selfs as jy gee dit niks, gaan 'n wees verskeidenheid, maar 'n leë een. En as 'n eenkant, uittreksel net iets funky waar dit neem al die sleutels van hierdie assosiatiewe skikking, al die dinge wat jy kan sit in vierkantige hakies, en skep veranderlikes uit hulle sodat ons uiteindelik toegang kan hê hulle in footet.php en header.php. Dit is 'n bietjie abstrakte, so laat my wys dit uit. 

In index.php, kennis dat ek verby in 'n belangrike waarde denim titel met 'n waarde van CS50. As ek nou na helpers.php, sien dat RenderHeader is onttrek dat die data wat ek verby in, en dan wat header.php. Wat ek gedoen het is 'n soort van 'n arm man se implementering nou die volgende. 

As ek oop header.php, kennis dat ek nie meer hard gekodeerde die woord CS50 in hierdie kop-lêer. Ek het hierdie gesit het weliswaar afgrijselijk vernoem funksie, HTML spesiale karakters, daar. Maar let op wat ek gedoen het. Ek het 'n oop HTML. Ek het dan oop kop en oop titel. 

En dan binnekant van die titel se oop en naby etikette, ek het 'n bietjie van die PHP-kode. En dit is 'n mooi, maar van sintaksis, wat beteken net eggo uit. Dit beteken letterlik this-- eggo die following-- maar dit is sexier te skryf. Eggo uit die titel dit is aangeneem in. 

Maar wat dink jy HTML spesiale kar is alles oor, veral as jy ' sommige voor HTML ervaring? Wat karakters kan wees gevaarlik om te slaag in 'n bladsy waar jy dinamiese genereer die webblad met 'n kode soos hierdie? Laat my gaan hierdie lêer, weergawe twee, en sien as ek nie kan veroorsaak nie. 

Weergawe twee is dit. En sien alles is goed, goed werk. Maar dink ek gaan in index.php en Ek vermeld dat die titel van my bladsy is nie CS50. Dit is oop bracket script waarskuwing hello world, naby enkele aanhaling, naby hakies, kommapunt, oop bracket, streep script. 

Script, soos ons sal uiteindelik sien, is 'n tag wat jy kan gebruik van 'n ander te gebruik programmeertaal genoem JavaScript binnekant van 'n web bladsy. En nou sien die logika hier. Hier is 'n sleutel genoem titel. Hier is dit is gek lang waarde nou. 

Maar as ek gaan na die helpers page- of liewer, die kop bladsy Ek noem hierdie funksie op die titel eerste. So as ek herlaai nou hierdie bladsy, ek sien, wat belaglik lyk, maar dit is veilig. Dit lyk net dom. 

Maar veronderstel plaas Ek het vergeet. En let op my woorde, 'n nie-nul getal julle sal vergeet om dit te doen en jy sal 'n vlytige kry student of vriend te kom om u by die CS50 billike of anoniem snags skeer rond op jou webwerf en wese spuit kode unbeknownst aan jou in jou werf een of ander manier. 

Want as ek net spoeg uit die titel hier en titel there-- Wel, as titel letterlik lyk en PHP as 'n taal wat kan spoeg uit ander tale teks, dit letterlik gaan hierdie merker te vervang met, natuurlik, wat ek elders. 

So as ek hier gaan herlaai na nou die verwydering van die veiligheid meganismes, nou het ek hello world hier. Nou dit is nie al dat die groot van 'n hanteer, maar jy kan iets doen 'n bietjie meer kwaadwillige hier, soos daar is ander tags-- soos ons sal sien wanneer ons spandeer meer tyd in JavaScript-- soos plek dot href kry, haal, unquote, HTTP business.com, maar die teenoorgestelde van wat van die ander dag. En nou kan jy 'n web veroorsaak bladsy te eintlik gaan onmiddellik hierdie webblad hier. 

En eintlik, ek wil nie selfs gaan na business.com want ek wil nie om te weet wat dit is. Maar dit sal ook kode sneller om in hierdie bladsy ingespuit word. So dit is net om te sê dat selfs al ons die bekendstelling van super vroeg op 'n paar van hierdie meer komplekse strukture, dit is alles in die rigting van 'n einde te maak seker dat jou kode is nie ontginbaar. 

So nou 'n derde weergawe hier. Dit is 'n bietjie liefhebber. Ek het nie regtig like-- die anale kant van my was 'n bietjie vererg deur die feit dat ek het 'n funksie genoem RenderHeader en RenderFooter wat byna identies. Daarom is dit vir my voorgekom, hoekom dit nie doen nie Ek parameteriseren hierdie funksies in net een genoem lewer, het dit 'n tweede argument soos die naam van die sjabloon, die finale óf kop-of voet te render--? En dan opsioneel, as ek wil in sommige sleutel waarde pare te slaag soos ek doen om die titel vir die header maar nie vir die voet, Ek kon dit doen. 

En so nou as ek gaan in helpers.php, dit is 'n bietjie meer kompleks. En ek sal my hande waai by die besonderhede, maar dit is net een funksie. So dit is 'n stap in die rigting om 'n beter ontwerp. 

Ons kan dit 'n stap verder te neem. As ek gaan in my vierde weergawe van hierdie, let nou dat ek om iets te doen selfs meer soort van kriptiese. En ek weet dit is 'n baie op een slag te absorbeer, maar ons is net 'n soort van die skoonmaak van die dinge op. Nou is ek besig om my helpers lêer in 'n gids met die naam includes-- net 'n arbitrêre noem waar ek wil dinge om te sit wat ek wil include-- en dan die res van hierdie is dieselfde. 

Maar as ek nou in gedit, kennis dat ek ontslae geraak van al die ander lêers en ek het verskuif hulle, byvoorbeeld, in hier. En dan in templates, Ek het dit hier ook. En so is dit nou almal na 'n stap van die gebruik van 'n baie beter ontwerp patroon. En ons is baie vinnig gaan om weg te beweeg van PHP se standaard funksies, wat ons hier begin met, waar jy net commingle PHP, en jou HTML, en jou CSS, en jy net spoeg dit uit en jy gaan oor jou pad. Dit is nie van plan om baie te onderhou. Net soos in C, het ons begin met veelvuldige lêers en verskeie funksies en factoring dinge wat uit. Ons sal dieselfde doen hier. En in werklikheid, in die vyfde en finale weergawe hier, ek het 'n ander ding. Jy kan selfs gebruik dot dot, wat weer, is net die ouer gids. Te wees, selfs meer sekuriteit bewus, want as ek kyk na die luister hier vir die vyfde en finale weergawe, kennisgewing dat ek een gids hier genoem publiek, en dan op die dieselfde vlak, so te sê, Ek het sluit en templates en dan die teks lêer readme. 

En die rede waarom ek het gestruktureerde dit wil this-- en so baie web gashere, veral dié wat $ 5 per maand kinders of $ 10 maande kinders, As jy al ooit gehad het een van hierdie services-- wat so baie van hulle doen is hulle net van jou verwag om alles te stort van jou lêers in een gids soos ons gedoen het reeds met hierdie eerste voorbeeld. 

Maar so gou as jy begin die bou van meer gesofistikeerde webwerwe wat net stoor data wat jy omgee en lêers wat jy omgee, eintlik organisering dinge korrek en met meer sekerheid bewussyn in gedagte kan ons begin om te verdedig teen al die vriende dat jy in of buite hierdie klas wat sodra jy begin om programme jouself op die web, gaan begin pluk op jou en op hulle. 

En so sal ons kyk uiteindelik by hierdie ontwerp. Dit is net 'n foto wat toon die volgende. Ons gaan almal sit ons programmering logika in een of meer lêers, en ons gaan net begin roep die leiers. Dit is waar die brein van ons webblaaie eintlik is. Toe ons gaan het 'n uitsig en menings is so eenvoudig soos net afsonderlike files-- genoem templates, dikwels. Hulle moet net die estetika van my bladsy, wat ek wil om die bladsy te sien like-- die kleure en die uitleg en die posisies van al die veranderlikes. 

En dan meer interessant dat ons uiteindelik sal kry om is die model, wat gaan om net te wees die woord wat ons klap op ander tegnologie wat bring ons in die prentjie, soos werklike databasisse, sodat wanneer jy wil inligting te red, jy stuur net nie 'n e- aan jou Proctor of vir jouself, jy eintlik stoor dit in 'n databasis met behulp van 'n ander taal bekend as SQL. En so sal ons vandag hier verlaat en haal met hierdie Woensdag en databasisse stel dan. 

[Speel van musiek]