>> [MUZIKO Ludante]
>> DAVID J. Malan: Bone.
Tio estas CS50.
Ĉi tiu estas la komenco de la semajno ok.
Kaj vi eble memoras ke ni cxesis lastan fojon rigardis la novan lingvon
entute.
Fakte, kiu estas sufiĉe malpeza kaj ĝi estas eĉ
programlingvo.
Estas markado lingvo kiu lasas al ni efektive strukturigi kaj fari retpaĝojn.
Kaj kiam vi ion alian kunlabore kun this--
aŭ vi baldaŭ estos, se vi ne jam.
Ni tuj uzos Laŭtemaj Stildifinoj aux CSS kiuj
estas alia tipo de lingvo kun proprietoj kaj valoroj
kiuj tuj ni faru Aĵoj ŝanĝi la koloro
kaj ŝanĝi la pozicion kaj ĉi tiuj specoj de tweaks.
Sed hodiaŭ kaj plue, ni komencas enfokusigi pli potencaj lingvoj
fakta programlingvoj kiel PHP.
>> Do PHP estis proksimume por iu tempo.
Kaj kiam vi vidos, ke estis desegnita ĉefe
frue por reala uzi en ttt disvolviĝo
kaj fakte generi retpaĝojn.
Do kiajn karakterizaĵoj faras lingvon
bezonas por fari retejon paĝojn dinamike per ĝi?
>> En aliaj vortoj, se vi volas generi enhavo dynamically-- kiel Facebook
Newsfeed, kiu ŝanĝas senĉese, aŭ tujmesaĝiloj ke aperigi de tempo
al time-- kiel kio estas la ŝlosila peco de funcionalidad
vi bezonas en programlingvo kiu lasus vin dinamike
presi novajn informojn al la ekrano?
>> Student: Kodo.
DAVID J. Malan: Kodo.
OK.
Ni prenos tion.
Iom pli preciza.
Mi volas diri, ni povus fari tiu kun C, sincere.
Estus doloro en la kolo.
But-- estas tiu devontigo?
>> Student: Yeah.
Variabloj, eble?
DAVID J. Malan: Variabloj.
OK, sekura.
Variabloj certe povas helpi nin.
Kaj eĉ ion pli simpla.
Ni uzas ĝin en la tre unua programo de la unua tago
kiam ni efektive diris "saluton mondo".
>> Student: Print.
>> DAVID J. Malan: Presi, dekstra?
Print, aŭ printf en la mondo de C. Do tiu tuta tempo,
ni havis je nia dispozicio language-- C
en particular-- kaj eĉ Nulo por tiu afero, ke
povas generi kordoj de teksto.
>> Nu, se HTML, kiel ni vidis lastan semajnon, estas nur amaso de kordoj de teksto
kvankam kun malfermita krampoj kaj fermis krampoj kaj ia rimo
kaj kialo malantaŭ ĝi, nu do ni povis vere
komenci generante retpaĝojn aŭ permane tajpante ilin en gedit
aŭ en Microsoft Word, por ke matter-- ni nur bezonas tekstoredaktilo.
>> Aŭ ni povus skribi kodon, via sugesto
antaŭe, kiu lasus al ni dinamike generi HTML,
kaj tio estas, kion ni iras komenci fari kun PHP
kaj finfine eĉ kun lingvo nomata Ĝavoskripto,
estas uzi unu lingvo por generi alian.
Kaj efektive, jen kion Facebook kaj multaj, multaj aliaj lokoj
faru al reale dinamike montri novajn informojn al vi.
>> Do ni komencu per this-- oni kamufla rigardante linio, sed unu
tio vere bela potenca.
Tiel nun, ni estis uzante C kiu estas kompilita lingvo.
Kaj nur rapidan recap-- kompilita lingvo havas kion karakteriza?
Vi evidente bezonas kompili ĝin, sed kion tio signifas?
Yeah?
>> Student: Ĝi bezonas esti kunvenis en maŝinajn kodon.
>> DAVID J. Malan: Bone.
Ĝi bezonas esti ensamblados en maŝinajn kodon.
Do prenu vian fontkodon, kiu estas ia angla-similaj.
Vi konverti ke io malsupra nivelo,
kiu finfine nomis objekto code-- 0-aj kaj 1-oj.
Kaj estas tiuj 0-aj kaj 1-oj kiuj CPU, kiel tiuj faritaj de Intel,
vere komprenis.
>> Nun, PHP kaj Python kaj Ruby kaj Javascript kaj aroj da aliaj
lingvoj ne kompilis lingvoj sed interpretitaj lingvoj,
kio signifas, ke vi simple tajpu ilin kaj poste vi ne igi ilin 0-aj kaj 1-oj.
Vi anstataŭ nur provizi tiam kiel enigo al aliulaj programo,
nomita interpretisto.
Kaj ke persono programo estis desegnita
kompreni kion ĉiu kaj ĉiun simbolon en Python aŭ PHP
aŭ Ruby aŭ ajna numero de aliajn lingvojn signifas.
>> Kaj do ni bezonas estas io simila.
Do fakte, mi tuj transiri al la aparato
tie, ĝuste en ia malnova fenestro, kaj ni
tuj iros antaŭen kaj malfermita dosiero nomata, diru, saluton.
Nun antaŭe, mi eble savis tiu eĉ kun dosiersufikso,
sed mi devas fari io eĉ pli simple tie.
Mi tuj iros antaŭen kaj komenci dosiero kun ĉi kamufla sintakso.
Do "uzanto, bin, Koverto, por medio, php. "
>> Tio estas simple unu linio de kodo kiu estas tuj diros miaj mastruma sistemo,
iri trovi en via loka medio ajn tio estas,
kien PHP is-- la interpreter-- kaj bonvolu uzi tiun interpretisto
interpreti la sekvan kodon.
Nun, tiu estas speco de malbela trajto de PHP.
Sed en ĉi tiu lingvo, ajna tempo skribas PHP kodo,
Vi bezonas havi unu el tiuj malbelaj PHP etikedoj Marki la komenco
de via code-- <? php.
>> Sed sube tie, mi nun povas fari ion sufiĉe simpla, kiel printf saluton komo
mondo backslash n Fermi citaĵo, fermo parentezo.
Kaj tiam nur por bono Mezuro: Mi iras
antaŭeniri kaj apude miaj php etikedo tien
tiel ke ĉiu aspekto bele belaj presita.
>> Kaj tuj kiam mi alklakas Konservi, gedit estas vere inteligenta sufiĉa
rigardi ke tre unua linio kaj rimarki, ho, vi skribas PHP-kodo.
Lasu min sintaksa kolorigo kun la koloroj
tie tiel ke ĝi staras el iom pli.
Sed nun mi estas ironta malsupren al mia fina fenestro.
Mi zomi.
>> Tiu programo estis nomita "saluton!" tial Mi faros dot oblikvo saluton,
sed permeson neita.
Kaj bash.
Ni fakte aŭdis, ke afero paro semajnoj
en la kadro de Shellshock, unu el tiuj cimoj.
>> Sed Aliro malpermesita ni vidis antaŭe, eble en alia kunteksto.
Ĉu iu memoras kiom vi eble ripari ion
kie permeso estas neita tiel?
Kio estas la komando, almenaŭ?
>> Student: chmod.
DAVID J. Malan: Jes, chmod, por ŝanĝi la modon de dosiero.
Kaj vi ricevos la tutan pli uzata por tiu proksima semajno kun posta problemo
subiris.
Sed nuntempe, mi tuj ŝanĝos la modo ne esti legebla,
sed doni ĉiuj executeability privilegioj, la kapableco
kuri ĉi tiu dosiero.
Kaj mi tuj atribuos ke la dosiero saluton.
>> Se mi nun faros dot oblikvo saluton eniri, vi vidu, fakte, mia programo, saluton mondo.
Kaj kio paŝo faris mi klare saltos tute?
Kompilado.
Do mi nur kuris tiu programo tute simple.
>> Kaj ĝi rezultas vi povas fari tion per multan sintakso memoras C.
Permesu al mi iri al la hodiaŭaj kodo, kiun mi metis en mian vhost dosierujo
tie, por veraj kialoj ni revenos al.
Kaj mi tuj iru al: diru, kondiĉoj 1.
>> Kaj vi vidos tie, la unua kaj cxefa, tutan aron da komentoj.
Sed cxi tiu estas vere re-kreo en PHP
de programo ni faris en semajno nomatan kondiĉoj 1.c
kie la celo en vivon de tiu ĉi programo
estas ŝajne demandi la uzanto por entjero
kaj tiam fari iujn lanugaj analizon sur ĝi per
vi diras, se ĝi estas pozitiva aŭ negativa aŭ egala al nulo.
Kaj mi alportos ĉi supren nur ĉar, krom eble unu malgranda detalo,
estas nedistingeblaj tiel for de C.
>> Kio estas la karakterizo tie eble elsaltas
ĉe vi kiel iom malsama?
Eble du aferoj.
Yeah?
>> Student: Dolaro signo n?
>> DAVID J. Malan: Jes.
Do dolaro signo n ĉeestas.
Kaj dolaro signoj, kiel ni vidos, tuj
esti embaraso por la komenco de iu variablo en PHP.
Ĝi estas tiel bona kaj bad-- bonon ke estas ia evidenta kio estas
variablo, malbona en tio ĝi estas alia afero tajpi.
Kaj ekzistas unu alia afero ni ne tute
vidis, almenaŭ por tiu ortografio. yeah?
>> Student: Readline.
>> DAVID J. Malan: Readline.
Readline ni ne vidas, per, en C, kvankam ekzistas io
similaj, sed ni uzis getstring, kaj tio estas lia contraparte.
Do, se mi iros en tiun dosierujo, kiu sekvinbero al esti,
kiel mi klarigos en iom en mia vhost dosierujon kaj mia fonto dosierujo,
kaj mi iras antaŭen kaj fari dot oblikvo conditions-- whoops-- dot oblikvo
kondiĉoj 1, vi jam vidos, denove, la sama issue-- permeson neita.
>> Do lasu min zomi en kaj fari chmod alpago x en kondiĉoj, skalara oblikvo kondiĉoj.
Mi ŝatus entjero, bonvolu, 50.
Kaj ni povus ludi ĉi ludo tutan tagon.
Ĝi tuj kondutos precize kiel ĝi faris en semajno unu.
>> OK do ne tiom malsimila, krom Ne nur tiu eta peco de sintakso,
sed je la supro, mi denove havis tiun linion kiu
permesis al mi krei iun kiu aspektas kiel C programon nomitan saluton,
nomitaj kondiĉoj 1.
Sed ĝi ne estas 0-aj kaj aĵoj Mi ekzekuti rekte.
Ĝi estas anstataŭe kurante ĉi interpretisto kies nomo
sekvinbero al esti identa al la lingvo.
La programo nomiĝas PHP, kaj mia kodo malsupre linio unu estas aprobotaj en ĝin.
>> Ni povas fari alian sufiĉe simpla ekzemple memoras ion
Ni faris semajnojn.
Denove, tio estas ia arbitra chunk de kodo
kiu ŝajne faras Kio Kiam vi kuri ĝin?
Kio estas tio tuj presi, supozeble?
>> Do komence en linio 16, estas dironta x estas nun 2, verŝajne.
% D estas la sama kiel $ i por printf.
Tial ĝi estas cubing, dot, dot, ĝi pentras, en linio 17.
Kaj tiam la linio 18 aperas nomi funkcio Cubed.
Kaj kie estas Cubed difinita?
>> Nu, ĝi aspektas kiel en linio 25, por ke ne tiom malsimila.
Mi havas kelkajn komentojn supre ĝin, sed plejparte,
ĝi estas sufiĉe simpla Portado aŭ konvertiĝo
el la C programon al la PHP versio.
Sed nun estas kelkaj diferencoj kiuj eble devus salti eksteren.
Kion alian malsamas pri kiel oni povus skribi ĉi sama programo en C?
>> Student: [inaudible].
>> DAVID J. Malan: Jen neniu prototipo ĝis supro.
Do PHP-- kaj sincere, kiel Multaj modernaj languages--
estas multe pli inteligenta kaj pli helpemaj ol C tradukiloj ke vi
povas meti la funkcion ĝis tie, vi povas meti funkcion malsupren tie,
kaj la interpretisto tuj por fari al vi la favoron de legado
la tutan dosieron antaŭ decidas ke iu funkcio ne ekzistas.
Tiel belan plibonigoj jarojn poste.
Sed estas ankaŭ iu alia malsama aŭ forestante tie.
Yeah?
>> Student: [inaudible].
DAVID J. Malan: Ni ne devas deklari la tipojn de variabloj,
do ni vidos post nelonge ke ekzistas malsamaj tipoj en PHP,
sed vi ne bezonas specifi ilin, kio ankaŭ estas ambaŭ bonaj kaj malbonaj.
Kaj ekzistas unu alia afero mankanta.
>> Student: Mankas bibliotekoj.
>> DAVID J. Malan: Ne ekzistas bibliotekoj.
OK, do tio estas agrabla.
Ni preni multe pli el la skatolo.
Do tie estas vere multe pli tion kion mi pensis estis malsamaj.
Kion pri manieron reen?
Kio estas tio?
Diru ĝin refoje?
>> Student: Pointer.
>> DAVID J. Malan: Neniu punteros.
OK, almenaŭ en ĉi tiu ekzemplo, ne.
Tio estas bela.
Do estas ne punteros en PHP fakte ĝenerale.
Estas io nomita referencoj, sed ni ne elspezi tro da tempo.
Kaj kio plu?
>> Student: Ĉefa.
DAVID J. Malan: Ĉefa.
Do tio estas la Biggie Mi pensas.
Rimarku ke ne estas ĉefa punkto de eniro.
Vi simple komencu skribi vian kodon.
Kaj tiu estas reale tuj estos avantaĝa
kiam transiron momente efektive uzanta
tiu sama lingvo por TTT-bazita programado, por kiu ni
ne deziras havi nur unu punkto de eniro.
Ni eble volas havi faskon da URLoj, multajn malsamajn dosierojn
ĉiuj prenante en uzanto enigo kaj produktante eligo.
>> Sed jen la tre malkuragxiga Ekzemple, ke mi promesis lastan fojon,
nome en tiu leterujo tie, fuŝo.
Do en tiu dosiero Speller, kiun ni ne elspezi tro da tempo en, ekzistas
esence porting-- P-O-R-T. Estas nur la vorto donita kiam, diru,
vi igi de unu lingvo al alia permane kutime.
>> Tio estas Portado de PC versio de Speller el PSET 5.
Kaj mi esence klopodis konverti tio linio por linio kiel proksime kiel mi povas.
Do se vi ŝatas tiun specon de afero, gxi vere valoras je iu punkto
trenante ilin ambaŭ supren flanko per flanko kaj vidi kio estas la sama
kaj kio estas malsama.
Sed ili estas belaj Darn similaj.
Se vi memoras, kion Speller eĉ similis,
kvankam vi ne ŝanĝi ĉi tiun dosieron:
estas sufiĉe simila strukture kun nur paro
de ŝanĝoj tie kaj tie.
>> Do tio estas nur por diri ke ĝi estas bela simpla al konverti Speller
de C al PHP.
Sed en vortaro, ne estas io eĉ pli konvinka.
Lasu min kaj krei mian propran dictionary.php dosiero.
Do iomete malsama en tiu ni nomas ĝin .php anstataŭ .c.
Ĉar tiu estas PHP-dosiero, mi do-- iomete annoyingly-- havas
komenci la dosieron kun oni php etikedo tiel.
Kaj mi tuj iros antaŭen kaj difini kelkaj funkcioj.
Funkcio nomita ĉeko, kiu estas tuj prenos en vorto kiel antaŭe.
Sed tiu argumento tuj havos dolaro
subskribi ĉar ni, denove, uzante PHP.
Alia funkcio de dictionary.c estis ŝarĝo
kaj ĝi prenis la nomon de vortaro, tial mi prenos tiun funkcion preta iri.
>> Alia en dictionary.c estis kio?
Grandeco estis unu el la plej belaj cxevaloj, pro Almenaŭ se vi konservis iujn variablo ĉirkaŭe.
tia grandeco suficas reveni variablo.
Kaj poste estis malŝarĝi.
>> Do estis tiuj kvar funkcioj en problemo starigis 5
ke vi bezonas implementar kun iuj datumstrukturo aŭ strukturojn.
Do mi promesis, ke en PHP, ni divenos
hash tablo, ekzemple, cxio, kio pli facile.
Fakte, se mi volas hash tablo Mi nur tuj iros tiel
kaj tie estas mia hash tablo.
Kaj tio estas la noto, malkuragxiga, ke ni cxesis la lasta fojo.
Kaj vi scias kion, se mi volis variablon por grandeco, nu,
ĉi tiu ne estas ĉiu malsimila al C,
sed mi tuj iros antaŭen kaj fari tion.
Kaj rimarki neniun datumtipo.
Kaj mi reiros poste fakte adicii iuj komentoj tie.
Sed kio pri ŝarĝo?
>> Se dolaro signo vortaro estas la nomo de mia dosiero
kaj mi fakte volas ŝargi vortoj en tiu tabelo nun,
Mi povas reale fari io sufiĉe simpla.
One-- kaj tio estas minorly annoying-- en PHP,
Vi devas entajpi interne de funkcio se vi
deziras aliri iun tutmonda variablo kiu estas difinitaj ekstere.
>> Sed tio ne estas aparte Interesa nun.
Kio estas pli interesa estas tio por ĉiu konstrui kiun mi menciis lastan fojon.
Kaj ĝi rezultas ke PHP havas funkcion nomita dosiero kies celo en la vivo
estas malfermi dosieron kaj legis en ĉiujn ĝiajn liniojn en tabelo
kaj transdonu ilin al.
>> Tio estas mi povas fari vortaro tiom ke nun efike kiam mi vokas dosieron:
tio tuj transdonos min tabelo de vortoj de la dosiero.
Ĝi ne estas ĉiu, kiu bone.
Ĝi estas ankoraŭ tuj estos sxnuro de vortoj, iu lineara.
Sed mi povas iri antaŭen kaj persisti super ĉiu el tiuj vortoj uzanta
ke sintakso ni vidis brevemente lastan fojon.
Kaj vi vidos ĝin pli en la venonta PSET.
>> Sed nun mi havas buklo ripetanta trans ĉiu vorto en la vortaro.
Kaj en ĉiu ripeto, memoru min nomante la kuranta vorto "vorto".
Kaj cxiuj lin tuj prenos al metis vorton en la vortaro estas
tuj estos vorto diveno "vera."
Tiu estas mia insert funkcio.
Tiu estas mia ŝarĝo funkcio cxar mia vortaro.
Nun estas iom de Cheat ĉar, Vi scias kion, ekzistas reale
backslash n, cxe la fino de la vortoj ke mi probable forigi,
sed tio ne estas problemo ĉar PHP havas funkcio nomita Chop kiu laŭvorte
kotletojn for unu signo ĉe la fino mem.
Do neniu problemo tie.
Ni antaŭenirinta kaj reale mallongigitaj ke ĝuste tiu.
Kaj nun mi devas verŝajne konservi trako de grandeco, do ni almenaŭ fari this--
grandeco ++.
Mi povas fari tion kiel antaŭe.
Kaj tiam tiu estas probable tuj labori ĝuste delikata, por ke revenu vera.
Farita.
PSET 5.
>> [Ridado]
>> DAVID J. Malan: Bone.
Ni faros tion denove kun la venonta PSET ankaŭ.
Do kio pri grandeco?
Nu, ĉi tiu espereble temas pri kiel atendite lasta fojo,
kvankam mi devas fari tiu stulta tutmonda afero.
Estas nur artefakto de la lingvo de la dezajno.
>> Sed ĉeko estas iom pli interesa.
Do se mi pasis en dolar subskribi vorto, mi unue
volas havi aliron al ke tutmonda variablo tablo.
Kaj nun se mi volas kontrolu se vorto estas tie,
Mi simple povas diri se estas iu kiu La jena estas metita en la tablo,
tiam iri antaŭen kaj reveno veraj; alie, revenu falsaj.
Farita.
La alia duono de PSET 5.
>> Bone, do denove, mi estas tranĉante kelkaj anguloj.
En justeco, mi probable pasigi kelkajn pli sekundoj
sur tiu efektivigo.
Mi verŝajne ne mokos ĉiujn horoj vi surmetis la PSET tiom.
Do strtolower estas funkcio.
Io simila ekzistencialista en C, almenaŭ por signoj,
sed PHP sukcese tutan ĉenon versio.
>> Tio okazas devigi ĉiun al minusklaj literoj, kiujn iuj el vi
eble faritan al canonicalize kio vi metas en via vortaro.
Kaj nun vi povas fari tion en C, ankaŭ.
Ĉi tio havas nenion komunan kun PHP.
>> Sed ajna tempo vi devas Bulea kondiĉo,
kiel iu en linio 10 tie, kiu estas nur
tuj taksi al veraj aŭ falsa, kaj viajn se alie klare
estas reveni vera aŭ malvera, mi povis simple vere faros ĉi sexier
kaj nur faru ion kiel tiu.
Tiel ke estas mia ĉeko funkcio.
Bone, se la Bulea Revenas vera aŭ malvera,
ni nur redoni ĝin tuj.
>> Kaj tie estas kelkaj aliaj retuŝojn Mi povus fari ĉi tie kaj tie.
Load-- malŝarĝas, parenteze, estas farita.
Nenion fari tie.
Ĉar ĉiuj la memoron PHP kaj multaj aliaj lingvoj
efektive sukcesis por vi.
Do dum en C, kiel vi lernis dolore,
io vi malloc aŭ calloc aŭ realloc, vi devas liberigi vin.
Io vi fopen, vi devas fclose, tiel ke resursoj finfine liberigita
kaj iloj kiel Valgrind ne Notoj kaj ne plendas,
kio estas bona afero por kuri sur ili.
>> Sed certe, oni devas esti kelkaj catch, dekstra?
Alie, ni ia malŝparis tutan faskon da semajnoj.
Do tie estas ajna nombro de kialoj kial ni ia preni ĉi trajektorio,
sed estas komerco-off.
Bone, tio estis temático.
>> Do kio povus komerco-off tie kopiante, de C al PHP?
Sentas ĉiuj gajni tiom multe alia ol iom de malbeleco tie aŭ tie.
Yeah.
Kio estas tio?
>> Student: [inaudible] memoro.
DAVID J. Malan: Rapido.
OK.
Nu, mia rapido estis sufiĉe rapide.
Rajto?
Sed rapido de ekzekuto de la programo?
OK, do tio estas justa punkto.
>> Do kiel ĝi okazus, mi anticipe cued supren ambaŭ mia provo solvo, la
Mi estis sur la granda tabulo Estis provo-bazita solvo,
kaj mi havas en tiu ĉi dosierujo tie.
Do mi momente, mi povas iri antaŭen kaj kuri ĉi sur la King James Bible,
batante eniri.
Kaj tio estas espereble korekta efektivigo fine,
donas al mi tempon en tuta de 0,38 duaj por ke
oni iom arbitra ekzemplo.
>> Kaj se mi iros en tiun dua terminala fenestro
tie, kie mi unue malfermis gedit, lasu mi iros en la hodiaŭa code-- kiuj, denove,
Estas en ĉi tiu dosierujo here-- kaj Lasu min kaj kuras Speller.
Do nur por esti klara, tiu estas la versio de la PHP.
Mi nur montras la supron tie.
>> Do se mi faras Speller de supersigno CS50 PSET 5 tekstoj, King James, eniru.
Ĝi estas ankoraŭ pli rapida ol skribo en C, sed la tuta tempo
Estas, avizo, 0,93, dum mia C-bazita apliko estis 0,38.
Do estas ne-bagatela diferenco.
>> Kaj ĉi tio estas nur sur unu dosiero.
Se vi estus kuri la du programoj kontre la granda tabulo
kaj havas tutan faskon da eniroj provitaj, tiu certe adicii.
Kaj se ni havis eĉ pli grandan datenaroj, tiu ankaŭ aldonus ĉiujn pli.
Do jes, pagante iom prezo de rapido estas vere la kazo.
Kion alian?
Yeah?
>> Student: Kvanto de RAM uzo.
>> DAVID J. Malan: Kvanto de RAM uzo.
Do mi ne donis dua pensis kiam skribas tiun PHP
Versio kiel al kiom memoro mi uzis.
Mi tute prokrastante ke PHP mem kaj kiu skribis tiun programon.
Kaj tio povus esti bone, sed se mi vere vere
zorgi pri elpremante tiel agado el mia programo aŭ el mia retejo
aŭ el ajn ilo Mi konstruas, eble
PHP ja ne estas la ĝusta lingvo.
>> Kaj fakte, tio estas kial, por Ekzemple, multaj ttt servers--
la reala programoj kiuj servas supren ttt content--
ne estas skribitaj en PHP aŭ en Python aŭ Ruby.
Ili estas skribitaj, kiel vi nun faros kun PSEt 6
en C tia ke oni povas elpremi ĉiu bito de ludado de ĝi
kaj vere praktiki fajna-greno kontrolon super kio estas
okazas sub la kapuĉo kaj ne simple prenu
por sentado iuj altaj nivelo datumstrukturo.
>> Konsideru, finfine, ajn en PHP implementado
ke nocio de hash table-- estas reale pli
taŭge nomiĝas asocieca array-- faras li aŭ ŝi havas neniun ideon kio klaso
de enigoj vi tuj estos meti en la strukturo?
Do evidente ne, ĉu ne?
Estas ĝenerala ilo en la ilaro tio
havigis al ĉiu kiu volas por uzi ĝin, kaj tiel certe ĝi
ne povas esti optimumigita finfine por precize kion vi volas fari.
>> Do Komercon offs-- evoluo tempo multobligita diferenci, agado povus diferenci,
komplekseco aŭ memoruzado povus diferenci.
Do kion vi trovos pli estas ke ekzistas
tuj diferencos iloj por la komerco.
Kaj fakte por súper plimulto de popola fina projektoj en tiu klaso,
kredu ĝin aŭ ne, C ne iros esti la ĝusta lingvo por uzi.
>> Kaj fakte, unu el la takeaways fine por ajna klaso kiel tiu
estas akiri vin pensi, Nu, kion vi devus detiri
la breton, kiam vi volas solvi iun problemon.
Kaj efektive, ni transiros tiun ponto eĉ pli kiel ni rigardas pli da lingvoj
eĉ preter hodiaŭ.
>> Do ni transiro nun eble pli familiara kuntekston
por uzi lingvon kiel PHP.
Estas iom komune uzi je la komandlinio, skribante skriptoj
kiel mi agis, sed estas multe, multe pli komuna.
Kaj estis intencita por esti uzita en formo de dosieroj kiujn tipe fini
en .php-- sed tio Ne prerequisite--
ke mem generi retejo enhavo.
>> Do lasu min iri antaŭen kaj malfermi kelkajn ekzemploj mi preparis anticipe.
Kaj tiuj estas fakte ia vera historioj en kiuj unu el la unuaj aferoj
Mi faris mem post fini CS50 kaj eble, mi kredas,
CS51 jaroj estas mia kompano kaj mi helpis
kuri la freshman intramural sporta programo, kiu, tiutempe,
estis freshman registri por diversaj sportoj per plenigado pecon de papero,
kiel ĝi estis vokita, marŝante trans la korton al Wigglesworth,
kaj delasante ĝin en kelkaj Proctor pordo guto.
Kaj tiam li aŭ ŝi devus iri tra ili kaj do reale kontaku nin permane
ke ni estis registritaj por iu sporto.
>> Do klare, ŝanco por plibonigo.
Tiuj tagoj, Vi povus turni al simple Google Formoj, sed reen en la tago,
ni devis efektive atingi for-- ĉi Estis eĉ ne tiu longa ago-- atingi
por programado lingvo kiu ne PHP.
Tiutempe, ĝi estis iu nomita Perl,
kio eliris el boga tiam.
Sed la ideo estas la sama.
>> Kaj mi esence sidiĝis por provi al haveno iras Perl versioj por PHP,
sed en plena malgarantio, ne donis neniu pensis la estetiko nur ankoraŭ.
Do jen retpaĝo.
Jen paĝo.
Se mi zomi, liaj ŝajne nomita froshim0.php
simple ĉar ĝi estas nia unua Ekzemple en tiu serio.
Kaj rimarki ke ĝi havas kio aperas esti tre malbela HTML- formo,
fato formo estas interesa ĉar ĝi permesas
mi havigi uzanto enigo al la retumilo.
>> Nun lastan fojon kiam ni havis formon, al kiun ni prezentas nian informpeto parametro,
la vosto parametro kiel ĝi nomiĝis?
Do al Google, dekstra?
Ni tute punted sur la ideo de fari ion kun tiu eniro.
>> Sed hodiaŭ, ni komencos produkti eligo.
Kaj la konduton Mi iras vidi tien komence estas sufiĉe banala.
David, mi kontrolu ekstere sekso tie, diri Matthews tie.
Mi ne estos kapitano.
Mi tuj klaku Register.
Kaj rimarkis ke la URL havas ŝanĝis registri-0.php,
kaj tiam tie estas tio malbela tekston ĉi tie.
Mi ne memoris la formatado de tio.
>> Sed kio estas interesa estas ke tri valoroj estis ŝajne preterpasis en.
Tio estas PHP La speco de ekvivalenta al printf--
Ni vidos kion estas vere nomas en bit-- ke nur presas el
kion vi pasis en ĝin.
Do ĉi tio sugestas ke tiu formo havis almenaŭ tri kampoj al ĝi,
kaj vi vidis min tajpi ilin.
Unu estis mia nomo, oni estis sekso, unu estis dormoĉambro.
Kaj kapitano eĉ ne get sendis al La servilo ĉar mi ne kontrolu ĝin.
>> Do tiu estas ŝajne, Kiam vi submetas aferoj en la reto,
Ne nur faras la URL kelkfoje change-- kelkfoje ne.
Fakte, la dosiernomo ŝanĝita, sed kio estas ausente de la URL
ke ni vidis lastan fojon kun Google.
Yeah?
>> Student: Neniu query string
>> DAVID J. Malan: Mankas query string.
Mankas demandosigno ion.
Mankas demandosigno q egalas katoj, kiel ni faris lastan fojon.
Kaj estas certe neniu demandosigno nomo egalas
David aŭ dormejo egalas Matthews, Do kie estas ke ĉiu iras?
>> Nu, lasu min reiri al gedit tie kaj malfermu la unua el tiuj dosieroj
Miaj vhost, loka gastiganto, publika dosierujo tie kaj iri en froshim0.
Do rezultas ke preskaŭ ĉiuj ĉi paĝo estas nur HTML.
Kaj tiu povas esti nekonata al vi, sed baldaŭ estos plie kun PSET 6
kaj PSET 7 kaj PSET 8.
Sed tio estas nur HTML- paĝo.
>> Kaj la interesaj aĵoj Ŝajnas esti super tie.
Formo etikedo kies ago atributo havas valoron de registro 0.
Tial kiam mi submit tiu, ĝi iras al tiu dosiero.
Sed metodo estas malsamaj today-- post.
Do rezultas ke estas almenaŭ du metodoj por la retejo uzata
por sendi informon el retumilo al servilo.
Get metas ĝin en la URL.
Afiŝo metas ĝin aliloke.
Kiam kaj kial povus vin fakte volas retejo
uzi post tiam anstataŭe de akiri, simple intuicie?
Ajna retpaĝaro.
Kiajn datumoj devus esti pasita nur per konkludaj nun tra poŝto kontraste
akiri, se ni vidas la du diferencojn?
Student: [inaudible] sekurigi.
DAVID J. Malan: Se vi deziras io esti sekura.
Tiel vi povus entajpi pasvorton en retejo, kreditkarto
en retejo farus speco de tiuj suboptimala
se la retumilo enkalkulu valoron ene de la URL.
Kial?
Vi vidas, ke ne ŝajnas esti tia granda negoco,
sed _odds_ estas vi belan ofte marŝi for de via komputilo aŭ uzo komputilo
laboratorioj, kaj tial iu alie aŭ eĉ kompano
povis facile marŝi tien kaj vidu ke privataj informoj.
Kiam vi sendi retmesaĝon rete, vi probable
ne volas ke datumoj finaĵo supren en la URL tiel.
Do tie estas ajna nombro de kialoj kial ni eble volas meti ĝin ĉi tie.
Kaj photos-- pravas, mi ne povas eĉ tute imagu kiom vi prenus grafika,
kiel JPEG, kaj metis ĝin en la URL.
Vi povus fari tion.
Ekzistas manieroj kodi ĝin, sed estas simple ne estas simpla kiel tiu.
>> Do aliĝu 0 estas reale tre underwhelming.
Ĉiuj diras laŭvorte estas jena.
Ĝi presas el interne de iu HTML etikedoj jeno.
Mi havas PHP etikedo tie neston ene de pre etikedo.
"Antaŭ" nur signifas pre-formatitan tekston: simio-interspacigitaj, kiel skribmaŝino.
>> Printr estas presita rekursia funkcio.
Kaj tiam tie estas tio interesa afero tie.
Kaj ni revenos al tiu ĉar ne estas aliaj,
sed dolaro signo substreko posteno ŝajnas esti
ŝanĝiĝema en PHP en kiu io vi sendu el retumilo al servilo
ricevas stokitaj por vi.
Kaj ni vidos kiel akiri je tiun informon antaux longa.
>> Sed unue, ni reiru al iomete malsaman ekzemplon.
Iranta en register-- aŭ prefere, froshims1.php,
kiu aspektas iom malsama.
Mi prenis iom pli penadon kun formatado,
kvankam ĝi estas ankoraŭ sufiĉe malbela.
Sed mi tuj iros antaŭen kaj entajpu "Davido" nun.
Masklo.
Ni kontrolu "kapitano" tiu tempo.
Ni faros Matthews.
Kaj registri.
>> Kaj ĉi tiu fojo ĝi diras, hm, ne vere.
Bone, do kion la registriĝi 1?
Lasu min iri en malferma registro 1 kaj- hm.
Bone, do tio estas Interesa, kaj ĉi
estas ŝtupo nun al pli interesaj programoj.
>> Rimarku la supro de ĉi tiu dosiero havas PHP etikedo tiel kiel kelkaj komentoj.
Kaj tiuj estas, nuntempe, distro do ni simple forigi tiujn komentojn
ĝuste kiel ili estas en C. Mi pretendi kun tiu bloko de kodo kun komenton
ke tiu kodo validigas la submetiĝo.
>> Nu, ĝi rezultas ke variabloj kiel dolaro signo
substreko posteno estas nomita Super mallokajn.
Ili estas kiel tiuj speciala tutmonda variablo
ke estas nur omni-aktuale disponebla ene de via programo.
Kaj vi povas uzi kvadrata krampo skribmaniero indeksi en ilin ne uzi ciferojn
kiel 0, 1, 2, 3, sed veraj vortoj.
>> Do vi povas pensi de dolaro signo substreko postenon kiel speco de hash tablo
ke vi povus pasi ŝlosilon en, serĉo vorto en-inter kvadrataj krampoj,
kaj ĝi tuj donu vin reen la valoro kiun la uzanto efektive provizis.
PHP havas funkcion nomita malplena ke ĝuste
diras jes aŭ ne, ĉi variablo estas malplena aŭ ne.
Ni havas tiujn duoblan rigliloj kio ĝuste signifas aŭ, kiel en C.
>> Do efektive, tiu linio 4 estas nur dirante, se la uzanto ne donis nomon
aŭ ne donis varo aŭ ne doni dormejo, bonvolu redirect li
aŭ ŝi per tiu linio tie.
Do tio estas iom kamufla, sed tio nur signifas laŭvorte
reiru al ĉi loko, do punts la uzanto
reen al kie ajn li aŭ ŝi venas.
Sed estas iom inelegant en kiun mi malfacile kodita ĝin.
>> Sed kio se tiu se kondiĉo ne taksas al vera?
Kio se la uzanto ne donos al mi sian aŭ ŝian nomon kaj dormejo kaj sekso?
Ke se kondiĉo ne estas tuj taksi al vera,
tial mi ne trafis la eliro en linio 7.
Do kio okazas?
Kaj tio estas kio estas interesa pri PHP.
>> Vi povas fali en kaj el de PHP mode, por tiel diri.
Se vi volas iun kodon por ekzekuti, Vi povas malfermi kaj fermi PHP etikedo
kaj meti kodon tie kiel mi faris tie.
Tuj kiam vi fermos PHP etikedo, la servilo
estas ĝuste tuj kraĉis kion vi metos tie.
Kaj efektive, tio estis parto de La originala dezajno de PHP,
cxar pli bone estus por malbone, estis jena commingling de kodo kaj markado
lingvo.
Kaj ni vidos ke tio tre rapide devolves en salato.
Kaj tiel ni faros pli bone ol tiu longa, sed ĝuste
rimarki la facileco kun kiu mi fakte povis ekzekuti iun logikon.
>> Sed ankoraŭ iom underwhelming.
Ni malfermas versio du el Frosh IMS, kiu
ŝajne submetas al register2.php.
Do tiu dosiero estas efektive iri al aspektas samaj.
Mi tuj iras al Frosh IMS 2.
Sed en Frosh IMS 2 ni vidu kio okazas.
>> Davido, alklaku la radio-butonan, kiel ĝi nomiĝas; Matthews, neniu estro.
Registri.
Vi estas registritaj.
Ne vere.
Ho atendu, ni ĵus faris ke ekzemple, ĉu ne?
Bone, staras.
Ni faras la tri.
Klare io temas pri okazos kun Gmail.
Ni akiros tie.
>> Do Frosh IMS 3 aspektas kiel ĉi.
Ne diferencas.
Sed kiam mi faras David masklo, Matthews, kaj registri, tiu tria kaj lasta versio
asertojn, tute simple, vi estas registritaj vere.
Tio estas speco de nemateria.
Sed mi pretendas kun ĉi tria kaj lasta versio
Mi nun amuzis precize kion mia kompano kaj mi konstruis la Frosh IMS
programo jarojn.
Kaj ĝi estis simpla.
Nenia datumbazo, neniu Excel kalkultabelo.
Sed pli grave, estis plu papero
ĉar kion ni faris kun tiu ĉi programo estis efektive retmesaĝi la Proctor, kiuj
Estis antaŭe ricevi tion per formoj.
>> Kaj ŝajne ni planis tion en tiel ke kiam iu registras,
John Harvard konton retpoŝtoj la proctor-- aŭ mem tiukaze
John Harvard-- kun jenaj text-- "Ĉi tiu persono simple registrita."
Nomo estas David, kapitano estas malplena; sekso, masklo; kaj dormejo, Matthews.
>> Do kio okazis tie?
Nu, la dosiero en demando ĉi tie estas ŝajne register3.php.
Kaj se mi malfermos ĉi, vi vidos ambaŭ la potenco de kodo kiel ĉi
kaj ankaŭ, sincere, la sensekureco de sistemo kiel retpoŝto.
Mi ĵus efike ŝajnigis esti John Harvard en la sekva maniero.
>> Mi havas la malferma php etikedo supren supro, kiu simple diras tie venas iuj PHP-kodo.
Malsupren tie, rezultas tie Estas bibliotekojn en PHP.
Vi simple ne bezonas inkluzivas header dosierojn tiel.
Vi akiras pli kun la kuireja vazlavujo, por tiel diri.
>> Sed ĉi tiu fojo en linio 4, mi faras volas speciala biblioteko nomita
PHP Mailer, kiu estas iu vin povas instali senpage en multaj sistemoj.
Cxi tie mi validigi la submetiĝon nur
kontrolante cxu la uzanto donas Mi agrabla nomo, varo, kaj dormejo.
Kaj se jes, bonvolu generi pli mailer.
>> Vi povas pensi pri tio kiel estante linio de kodo kiu ĝuste atribuas.
Estas kiel malloc, sed estas iom sexier
en kiu vi mencias ne nur malloc kaj iuj genéricos nombro.
Vi diras al mi unu el tiuj, donu al mi novan unu el tiuj.
>> Kaj se vi planas en Java aŭ C ++ aŭ aliaj lingvoj,
vi eble vidis ĉi.
Sed la mallonga de ĝi, se nekonata, tiu linio
metas en dolar signo de poŝto speciala struct vokis
objekto havas korpigita retpoŝto funcionalidad.
Kaj fakte, rimarki kaj simila sintakso.
>> Tiu ne estas puntero, per.
PHP simple uzas la saman sintakson.
Tiu linio diras uzo SMTP-- Simpla Mail Transfer
Protokolo, kiu estas nur la protokolo uzita por sendi poŝton.
Tio estas preciziganta uzo Harvard SMTP servilo, kiu
estas ie ĉi tie en la campus.
>> Tiu diras kion TCP pordnumeron paroli al,
kaj mi nur supozis, ke el per googling aŭ Petante helpo skribotablo.
Kaj tiam ĉar Harvard uzas iuj sistemo sekureco sur la poŝto server--
almenaŭ al ĉifri trafiko inter vi kaj gxi
kvankam ĉiu povas sendi al it-- Mi tuj ŝaltas la TLS protokolo
por teni ĉi sekura.
>> Sed ĉi tiu estas kie aferoj preni iom timiga.
Mi povas nur arbitre diru, ke mi estas jharvard,
kaj mi povas nur arbitre retpoŝti min tie.
Kaj tiam mi povas specifi temo kun tiu linio tie.
>> Kaj tio apenaŭ aspektas malbelaj, sed estas nur faskon da kunmeto.
Rezultas PHP havas súper utila simbolo, kiel iuj lingvoj, la skalara operatoro,
kio ĝuste laŭvorte concatena kordoj post ŝnuro post ŝnuro,
kaj vi ne devas malloc aŭ figuro la tuta longo de la kordo.
Vi nur faru.
Kaj efektive, ĉar mi concatenando en ĉiaj aferoj kun tiuj punktoj,
tio estas kial la retpoŝto mi sendis rigardis kiel ĝi faris.
>> Kaj poste persiste tie, mi sendas poŝton.
Do se tiu estas falsa, Mi nur tuj mortos;
kiu estas funkcio kiu nur impresoj al la ekrano iu erarmesaĝo.
Sed, fakte, nomante la alsendota funkcio.
Alie, se ĉio ĉi mankas, ĝi alidirektilojn min tie.
>> Kaj kial mi vidas ke Mi registris vere?
Nu, okazis ĝuste ĉi tie.
Do mi alportos tiun ĉe kelkaj kialoj.
>> Unu, tio estas ekzakte kiel se vi konstruos iuj retejo por fina projekto
aŭ por la reala mondo, tio estas kiel vi sendu retpoŝton recordatorios
al viaj klientoj aŭ viaj subskribintoj.
Jen kiel vi sendas Pasvorto recordatorios.
Jen kiel vi sendos popolon mesaĝojn ke ili havas novan Facebook
mesaĝo ĉesigita aŭ io simila.
>> Sed ankaŭ parolas la fakto ke tiu povis
estis tre bone de Davin aŭ iu ajn alia.
Kaj mi diras ĉi speco de kun rideto ĉar mi estas
tute certa kio okazas tra pluraj el viaj mensoj ĉe tiu punkto.
Sed ĉi tiu estas unu el tiuj, faru kiel mi diras, ne kion mi faras specon de aĵoj,
ĉar ĝi estas bagatelaĵo forĝi retmesaĝoj ŝatas ĉi.
Sed kiel vi povas esti vidita aŭ legi en la Crimson,
lastatempe estas ankaŭ bela bagatela por homoj
spuri ilin reen al iu fonto.
Kaj petu por mi tempon, eble en CS50 lunĉo, kiom mi unue
konatiĝis tre mallarĝe preskaŭ la Red tabulon multaj jaroj
antaŭ kiam mi malkovris kiel internet laboris.
Do en iu case-- iomete post la ed estraro faris.
>> Do ĉiuokaze, estas amaso de súper mallokajn,
kiam ili estas nomata ĉi tie, unu el kiuj ni saw-- dolaro signo substreko post.
Jen kompenso nomita get, kio estas kie ŝtofo el URL
finas iri.
Kaj ekzistas tuta aro da aliaj, too-- kunsido kaj servilo kaj kuketo.
Ni revenos al Kuketo alifoje,
sed kunsido estas speco de malvarmeta ĉar rajton now-- ĝis now--
ĉio ni faris kun retumilo Estas speco de Minoritatoj, por tiel diri.
Mi povas alklaki ĉirkaŭe, aliro dosierojn sur la servilo, iu
okazas en la ekrano, sed tiam la rilato fermas.
Interreto Explorer aŭ Firefox ikono detenas ŝpinita
kaj vi nur vidas kion ke retpaĝo enhavas.
>> Do HTTP estas Minoritatoj en tiu iam ĝi faras ligon,
ricevas iujn datumojn, tio estas ĝi.
Plu rilato, kontraste Skype, kontraste Facetime, kontraste GChat, kiu
subtenas konstantan konektiĝi al la servilo.
La retejo estas fundamente malkonektita, kvankam ni
vidi antaŭ longe kiel ni povas simuli tion
kiel Facebook babilejo kaj GChat, kiu subtenus la illusion--
aŭ efektive fari subteni konstantan konekton uzante
pli moderna teknologio.
>> Sed se mi iras, diras counter.php, ĉi tio estas alia simpla ekzemplo:
kiel ni vidos, ke aktuale pensas Mi vizitis la retejon nula tempo.
Sed se mi simple reŝarĝi la paĝon, ĝi iel konas min ĉi tie antaŭe.
Se mi reŝarĝi denove, scias mi estis tie antaŭe.
Kaj denove kaj denove kaj denove kaj denove.
>> Do tie estas kelkaj pli-plussing okazas, sed avizo
la etulon teksas iam tiel mallonge supren supro kaj tiam malkonektas,
tial ĝi ne estas kiel mi havas konstantan konektiĝi al mia aparato.
Nu, se mi iros en counter.php, rimarki kiom simpla estas.
Mi unue nomas tiun specialaj funkcio kiun ni baldaŭ
komenci preni por donita nomata sesio komenco.
Iniciati kunsido.
>> Kaj kunsido nun estas nur tuj estos sitelo kiel komerca
veturilo en kiu vi povas meti valoroj kaj ia fidi kiel programisto
ke tuj estos tie kiam ke uzanto venas back-- dua
poste, post unu horo, eĉ jaron poste, tiel longe kiel li aŭ ŝi ne demetas
ilia kuketoj, kiel ni fine vidas.
Kaj nun mi nur havas oni se kondiĉo tie.
Do se la sekva ŝlosilo, nomita vendotablo, estas metita ene
de tiu super global-- tiu hash tablo, se vi will-- nomata sesio,
tiam iri antaŭen kaj kroĉi la valoro de la session-- think
de tiu kiel komerca cart-- kaj stoki ĝin
en portempa variablo nomita vendotablo.
>> Alie, se tiu valoro vendotablo estis ne starigu en la tn aĉetojn cxaron,
nur pravalorizi ĝin al 0.
Laste, cxi tie, iru kaj metita reen en la komerca ĉaroj aŭ la seanco
la valoron de nombrilo +1.
Do rezultas ke ĉi speciala ujo here--
kiuj, denove, estas unu el tiuj asociitaj arrays, tabelo, kiun vi povas indekso
en vortojn anstataŭ numbers-- persistas eĉ post la uzanto iras.
Denove, mi reiros al la paĝo nun.
Jam pasis unu minuto aŭ tiel.
Sed memoru, ke mi havas tie 19 fojojn antaŭe.
Tiu estas mia 20a vizito.
>> Kaj tiel ĉi tiu tuj estos ŝlosilo efektivigo ajna retejo kiu memoras
ke vi ensalutu, ke vi metis io laŭvorta en via komerca ĉaron
aĉeti aŭ ke vi havas iun numeron de mesaĝoj pritraktata.
Anytime vi volas memori informon,
Ni vidos ke PHP, kiel pluraj aliaj lingvoj,
provizas nin per ĉi iluzio de stato kvankam, kiel vi vidos en PSET 6
kiel vi faras HTTP petojn de kliento al servilo, tio estas ĝi.
Unufoje vi reiri ke respondo, estas nenio pli
revenanta el la servilo defaŭlte.
Sed ni vidos kiel labori ĉirkaŭ tiu.
>> Nu nun, ni provu purigi ĉi supren iomete.
Ni vidis kelkajn malsamajn ekzemplojn tie.
Ah, kaj kiel flanken, por tiuj familiaraj aŭ nekonataj,
La kialo ke la Frosh IMS ekzemple iris
rigardi vere malbela al slightly-- bone,
Ankoraŭ ugly-- iomete malpli malbela kvankam ankoraŭ malbelan
estas ĉar se ni rigardas ĉe la fontkodon tie,
Ĝi rezultas ke mi havas ĉe la plejsupro de la dosiero.
>> Rezultas ke bootstrap estas unu el la multaj libere havebla bibliotekoj tie
kiuj ekzistas ne por programlingvoj ĉiam, sed por CSS aŭ por Ĝavoskripto
aŭ HTML aŭ ajna nombro da lingvoj.
>> Kaj tiuj uloj here-- origine eliris
de Twitter-- nur devas tutan faskon da stiloj.
Ĝi estas masiva dosieron tie ke iu skribis,
aŭ ies skribis super tempo Specifas koloroj kaj formatado
kaj whatnot tiel ke mi povas speco de prunteprenas la sintakso
kaj ne havas elkompreni kiel meti mian formon.
Tiu estas ankaŭ minified tiel ke komputilo povas
kompreni ĝin sed ne nepre homo.
Do tio estas nur kial la estilización tie ŝanĝis.
>> Sed ni nun bonfarados en terminoj de dezajno,
ĉar se ni restos malsupren ĉi vojo tro longaj,
nian kodon tuj akiri senorda kaj Messier.
Do ni enfokusigi tiujn ekzemplojn ĉi tie.
La lasta hodiaŭ.
>> Do tie estas súper simpla Versio 1.0 de CS50 de afiŝinto.
Ĝi nur havas ligojn al prelegoj kaj Syllabus,
kaj ĝin uzante tiu neordigitan liston tag-- la UL etikedo kiujn ni uzis lastan fojon.
Kaj se fakte, se mi malfermi Vidi Paĝo Fonto,
vi vidos, ke tio estas vere, vere simplan HTML.
Kaj fakte, kvankam tiu estas de PHP dosieron sub la kapuĉo,
ĝi estas ankoraŭ apenaŭ kracxi el nur HTML nun.
>> Do se mi alklaku Prelegoj, vidas ĉi okazi.
Kaj se Mi alklaku semajno nulo, ni vidu tion.
Kaj se mi alklaki Merkredo, ni vidu tion.
Kaj tio ŝajne estis la PDF de la diapozitivoj de tiu tago.
Ĉiuj mi faris estas ligilo kun ankron etikedo por tiu URL tie.
>> Do tio estas nur por diri ĉi estas bela simpla versio de CS50 de afiŝinto.
Vidu kiel ĝi estas implementado.
Se mi iros en la mvc0 dosierujo, ni vidos kelkajn dosierojn.
Unu estas README, do se iuj de ĉi tio estas tro rapida,
Vi povas simple poke ĉirkaŭe pli malrapide poste.
Kaj rimarki en ĉi tie estas index.php dosiero.
Ĝi rezultas ke se vi mem, la homaj,
ne specifas finan nomon URL, la ttt-servilo kutime
infiere iuj defaŭltan nomon por vi.
Indeksa punkto ion Estas ĝenerale la defaŭlta.
>> Do jen kial antaŭ momento kiam mi vizitis ĉi URL tie,
neniu dosiernomo, neniu dosiero pligrandigo, neniu periodo en la URL.
Ĝi apenaŭ sciis iel magie serĉi index.php.
Estas nur konvencio.
Povus nomi ion.
>> Do se mi nun iros en index.php, vi vidos
ke indeed-- ni forigi la komentojn
tie ĉar tie vere nenio interese it--
tiu estas nur malfacile kodita HTML.
Do tio estas konsekvenca, kvankam kun mia aserto
ke vi povas commingle HTML kaj PHP.
Ne estas reala Programado logiko tie.
>> Kaj la aliaj dosieroj estas bela multe same seninteresa.
Estas nur malfacile-kodita semajno unu tie por semajno unu m kaj semajno unu w,
por lundo kaj merkredo.
Kaj tiam se mi malfermas semajno nulo: rimarki estas preskaŭ identaj.
>> Kaj tio estas speco de klavo takeaway.
Rimarku kiom redunda tio.
Tiuj dosieroj apenaŭ ŝanĝiĝas, tamen mi tiris unu el tiuj kopio / pasto laborpostenoj
kie mi prenis unu file-- supozeble en semajno zero-- kopiis ĝin
kiam semajno venis ĉirkaŭe, kaj tweaked kelkaj valoroj.
Ni probable povos fari pli bonan ol tio.
>> Do ni revenu al MVC kaj iru en versio unu.
Kaj rimarki mi hvas kelkajn dosierojn, ĉar kio
estis komuna al ĉiuj tiujn dosierojn nur momento ago-- se mi reirus al versio 0,
ni iru reen en indico, kaj ĝuste postulate--
fojon mi forigi la comments-- kio parto de ĉi tiu paĝo
Estas supozeble en ĉiu el miaj dosieroj?
Simple nomas ĝin.
Kies linioj estas duobligitaj verŝajne tra ĉiuj de ĉi tiuj paĝoj?
Yeah?
>> Student: [inaudible].
>> DAVID J. Malan: 1 tra 9.
Jes, absolute.
1 tra 9, krom eble 8 ŝanĝas iomete ĉar CS50
iĝas prelegoj aŭ semajno nulo aŭ io.
Sed preskaŭ identaj.
Do ĉiuj ĉi aĵoj estas nur ia kopiis nuda.
Kaj tie estas paro aliaj linioj mi povas pensi
el kiuj estas probable identa trans ĉiujn dosierojn.
>> Student: 12 kaj 13.
DAVID J. Malan: Jes.
Certe, 12, 13, kaj 14, probable, nur pro la interesaj aĵoj
okazas en linioj 11 kaj 10, do ĝi similus.
Do ni rigardu versio 1, kiuj provas plibonigi la ĉi.
En la versio 1 de ĉi MVC example-- ni klarigi kion MVC rimedoj en moment--
se mi iros en indico, tio speco de aspektas iom malklara nun.
Ne estas tute tiel simpla kiel antaŭe.
>> Sed unufoje vi komencas legu ĝin atente, estas
bela simpla kia ĝi estas faranta.
Ŝajne la linio 1 kaj linio 8 anstataŭis
ĉiuj aĵoj vi ĵus identified-- kvankam nur por bonan mezuron,
Mi forlasis la ULs tie ĉiaokaze iuj tagoj ne havas liston de aĵoj.
Kaj tiel postulas estas speco de kiel funto inkluzivi en C. kopioj kaj pastoj
la enhavo efike ĉi tie en ĉi tiu dosiero.
>> Do en header.php, kiel vi povus konkludi el lia nomo,
tuj estos la kaplinio de la paĝo.
Ĝi estas speco de orfoj tie.
Ĝi nur havas la supro al ĝi, sed ne estas pli enhavo sube.
>> Kaj se mi rigardas footer dume, kio estis la alia dosiero mentioned--
ĉi tiu estas eĉ malpli interesaj, sed denove, estas komunaj al ĉiu.
Do tio estas la footer.
Tiu estas la kaplinio.
Ĉi tio estas la dosiero estas ŝanĝi, do kial ne
provu faktora la komuneco kun tiuj du linioj tie?
>> Sed ni povas purigi ĉi ĝis iom pli.
Mi tuj iros antaŭen kaj malfermi versio du kie
Ni vidos ke ne estas nova dosiero, helpers.php.
Ni vidos kion estas en momento.
Ni iru al la indico, kiel la enirpunkto kiel antaŭe.
>> Kaj nun rimarki min postulanta helpers.php, ne header aŭ footer.
Sed helpantoj estas ia ŝatas helpers.c kaj helpers.h el PSET 2
aŭ PSET 3 longe kiam vi reale ne serĉu kaj trovu por PSET,
kaj vi havis ĉiujn viajn kodo ordigo kaj serĉas en aparta dosiero.
Tio estas kio okazas tie.
>> Kaj nun la linio 3 aspektas iom malsama.
Kaj tio estas nur unu linion.
Fari ĉi eĉ pli klara, mi povis nur
cxu tio estos stile kohera kun ĉio alia ni faris.
Sed tio ne estas vere ŝanĝi la funcionalidad.
Estas nur unu linion de reala kodo.
>> Ŝajne, estas funkcio ie nomata redonu kaplinio,
kaj ĉi tiu estas kie aferoj akiri bela potenca.
Rimarku ke ene de lia krampoj Estas kion alia peco de sintakso?
Verŝajne iom malfacile diri, sed rimarki there's-- mi metos kelkajn blankajn
spaco.
Ekzistas rektaj krampoj.
>> Kaj kvadrataj krampoj ni vidis iom malantaŭen en la kadro de asociaj tabeloj,
kio estas, denove, kiel hash tabloj.
Kaj se vi opinias nun al C, la ordo de argumentoj en funkcio
devas ĉiam esti la sama.
Oni devas memori, kion la ordigi is-- x, y, z aŭ z, y, x--
kaj vi devas ĉiam provizi ilin en la sama ordo aŭ serĉi ilin
se vi jam forgesis.
>> Sed tio ŝajnas esti interesa maniero trapasigi arbitran ŝlosila valoro
paroj per titolo estas la nomo de argumento en tiu kazo
kaj CS50 estas ĝia valoro.
Kaj la fakto ke mi havas tiuj kvadrataj krampoj
tie signifas ke mi povis ankaŭ pasas en ion
kiel semajne estas 1 aŭ 0 aŭ 2 aŭ 3.
Do ni parametrigis tiun funkcion en tia vojo
kiu povas preni plurajn enirojn, sed nuntempe ĝi estas nur unu.
>> Se mi nun iros en helpers.php, rimarki kio ĝi estas faranta.
Tio estas iomete de novaj funcionalidades,
sed por la momento nur prenu sur fido, ke tio estas
La sintakso kun kiu vi difini funkcio en PHP.
Vi laŭvorte diras funkcio.
Vi ne specifi reveno tajpi, kaj tio estas konsekvenca
per la variablo detalo antaŭe kie vi ne vere forte tajpas.
>> Tiu simple precizigas ke, implicite, tiu
prenas asocieca tabelo kiel argumento.
Kaj vi scias kion?
Se la uzanto ne pasi unu en, supozi defaŭlta valoro.
>> Tiu estas karakterizaĵo kiu C ne havas por ni, tio estas agrabla, ĉar nun
datumo, eĉ se vi Ne donu gxin io,
tuj estos tabelo sed malplena unu.
Kaj kiel flanken, ekstrakto nur faras ion funky
kie portas ĉiujn ŝlosilojn de ĉi asocieca tabelo, ĉiu de la aĵoj
vi povus meti en kvadrataj krampoj, kaj kreas variabloj el ili
tiel ke ni povos finfine havas aliron al ili en footet.php kaj header.php.
Tio estas iom abstrakta, tial permesu al mi klarigi ĉi tion.
>> En index.php, rimarki ke mi estas pasante en ŝlosila valoro paro de titolo
kun valoro de CS50.
Se mi nun rigardas helpers.php, rimarki ke RenderHeader
Estas ĉerpante tiu datumo kiun mi pasante en, kaj tiam postulanta header.php.
Kion mi faris estas speco de malriĉa homo efektivigo nun de la sekva.
>> Se mi malfermas header.php, avizon ke mi ne plu forte
coded vorto CS50 en ĉi kaplinio dosiero.
Mi metas ĉi rekoni atrociously nomita funkcio, HTML speciala signojn,
tien.
Sed rimarki kion mi faris.
Mi havas malfermita HTML.
Mi do havas malfermita kapon kaj malferma titolo.
>> Kaj poste ene de la titolo la malferma kaj Fermi tags: Mi havas iom de PHP-kodo.
Kaj tio estas agrabla sed de sintakso, kiu signifas nur eĥo eksteren.
Ĝi laŭvorte signifas this-- echo la following--
sed cxi tiu estas sexier skribi.
Eĥo el la titolo ke'S estis pasita en.
>> Sed kion vi opinias HTML speciala char estas ĉiuj proksimume,
speciale se vi havas iuj antaŭaj HTML sperto?
Kio karakteroj eble danĝera Iam en al paĝo
kie vi dinamike generi paĝon kodon kiel tio?
Permesu al mi iri al ĉi tiu dosiero: versio du, kaj vidi, cxu mi ne povas indukti ĉi.
>> Versio du estas tiu.
Kaj rimarki ĉiun Estas bone, funkcias bone.
Sed supozu, ke mi iru en index.php kaj Mi indikis, ke la titolo de mia paĝo
ne estas CS50.
Estas malferma krampo skripto garde saluton mondo, proksime sola citaĵo,
Fermi parentezo, punktokomo, malferma krampo, oblikvo skripto.
>> Skripto, kiel ni fine vidas, estas etikedo
kiun vi povas uzi por uzi de alia programlingvo nomas
Ĝavoskripto ene de retpaĝo.
Kaj nun rimarkos la logiko tie.
Jen estas ŝlosila nomis titolo.
Jen ŝi estas freneza longa valoro nun.
>> Sed se mi iras al la helpantoj page- aŭ pli ĝuste, la kaplinio paĝo
Mi vokas tiun funkcion sur tiu titolo unue.
Do se mi nun reŝarĝi la paĝon, mi vidu tion, kio aspektas ridinda,
sed estas sekura.
Ĝi simple aspektas stulta.
>> Sed supozu anstataŭe Mi forgesis tion.
Kaj atentu miajn vortojn, nenula nombro vi forgesos fari tion
kaj vi ricevos kelkajn laborkapabla studento aŭ amiko venis supren
al vi en la CS50 foiro aŭ anonime nokto ŝovas ĉirkaŭ sur via retejo
kaj esence injekti kodo dorsoj de vi en via retejo
iel.
>> Ĉar se mi simple kracxos el titolon tie kaj titolo
there-- bone, se titolo laŭvorte aspektas kiel tiu kaj PHP
kiel lingvo kiu povas kraĉi aliajn lingvojn teksto,
tio estas laŭvorte iri anstataŭi ĉi etikedon kun,
kompreneble, kion mi metu aliloke.
>> Do se mi iros tien kaj reŝarĝi post malfarante tiujn mekanismojn de sekureco,
nun mi havas saluton mondo tie.
Nun tio ne estas ĉiu tiu granda de trakti, sed vi povus fari ion
iom pli malican tie, kiel ekzistas
aliaj tags-- kiel ni vidos tuj Malaperis pli tempo en JavaScript-- kiel situo
dot href ricevas, citaĵo, unquote, HTTP business.com, sed la malo de tiu
de la alia tago.
Kaj nun vi povas indukti retejo paĝo por fakte tuj iru
al tiu retpaĝo ĉi tie.
>> Kaj efektive, mi ne volas eĉ iri al business.com
ĉar mi ne volas scii kio tio estas.
Sed tiu ankaŭ estos deĉenigi kodo esti injektita en ĉi tiu paĝo.
Do tio estas nur por diri ke kvankam ni enkonduki súper frua iom
de tiuj pli kompleksaj strukturoj, estas tute al finon de certigi
ke via kodo ne explotables.
>> Do nun la tria versio tie.
Ĝi faras iom amatoro.
Mi ne vere like-- la anal flanko de mi
estis prenanta iom ĝenis la fakto, ke mi funkcio nomita
RenderHeader kaj RenderFooter kiuj estis preskaŭ identaj.
Do mi ekpensis, kial ne Mi parametrigi tiuj funkcioj
en nur unu nomis redonu, ili ŝin preni duan argumenton
kiel la nomo de la ŝablono, la fina al render-- ĉu kaplinio aŭ footer?
Kaj tiam laŭvole, se mi volas Iam en iu ŝlosila valoro paroj
kiel mi povas fari por la titolo por la header sed ne por la footer,
Mi povus fari tion.
>> Kaj nun se mi iros en helpers.php, ĝi estas iom pli komplika.
Kaj mi skuos mian manon je la detaloj, sed estas nur unu funkcio.
Tiel ke estas paŝo al pli bona dezajno.
>> Ni povas preni ĉi tiun paŝon pli.
Se mi iras al mia kvara Versio de tiu, rimarkis nun
ke mi faras ion eĉ pli ia kamufla.
Kaj mi scias, tiu estas loto sorbi samtempe,
sed ni estas nur speco purigi aĵojn.
Nun mi metas miajn helpantojn dosiero en la dosierujo nomita
includes-- nur arbitran citi kie mi volas meti stuff
ke mi volas include-- kaj tiam la resto de ĉi tiu estas la sama.
>> Sed se mi rigardas nun en gedit, rimarki ke mi liveris
el ĉiuj tiuj aliaj dosieroj kaj mi movis ilin, ekzemple, en ĉi tie.
Kaj tiam en ŝablonoj, Mi havas ĉi tie ankaŭ.
Kaj tial ĉi estas ĉio nun al paŝo uzi multe pli bona dezajno ŝablono.
Kaj ni tre rapide tuj malproksimigi
de PHP La defaŭlta funcionalidad, kiun ni komencis tie kun,
kie vi ĵus commingle PHP, kaj via HTML, kaj via CSS
kaj vi simple kracxos ĝin kaj vi iros sur via vojo.
Oni ne tuj estos tre mantenible.
Ĝuste kiel en C, oni komencis uzi multnombraj arkivoj kaj multnombraj funkcioj
kaj faktoranta aferojn ekstere.
Ni faru la samajn tie.
Kaj fakte, en la kvina kaj fina version tie, mi faris unu alia afero.
Vi povas eĉ uzi dot dot, kiu, denove, estas nur la patro dosierujo.
Esti eĉ pli sekureco konscias, ĉar se mi rigardas la aŭskultado
tie por kvina kaj lasta versio, avizo ke mi havas unu dosierujo tie nomas
publiko, kaj poste sur la sama nivelo, tiel diri,
Mi havas inkludas kaj ŝablonoj kaj do ke tekstdosiero README.
>> Kaj la kialo mi strukturita ĝi plaĉas this-- kaj tantos retejo
gastigantoj, precipe tiuj $ 5 al monato aĵoj aŭ $ 10 monato, ili
se vi iam havis unu el tiuj services-- kio tiom da ili faru
Estas simple atendas vin eksalti ĉiuj de viaj dosieroj en unu dosierujo,
kiel ni faradis jam kun tiu tre unua ekzemplo.
>> Sed kiam vi komencos konstrui pli malnaiva retejoj kiuj simple stoki
datumoj vi zorgas pri kaj dosieroj zorgi pri, fakte organizi aferojn
ĝuste kaj kun pli sekureco konscio en menso povas
ni komencas defendi kontraŭ ĉiuj geamikoj
ke vi aŭ por aŭ eksteren de ĉi tiu klaso kiu,
Kiam vi komencas fari programoj mem sur la araneaĵo,
tuj komencos pluki sur vin kaj sur ili.
>> Kaj tiel ni rigardu fine en ĉi tiu dezajno.
Tiu estas nur bildo kiuj bildigas la sekvan.
Ni tuj metos ĉiujn de nia Programado logiko en unu aŭ pli da dosieroj,
kaj ni tuj komencu nomante tiujn regiloj.
Ĝi estas kie la cerboj de niaj retejoj reale estas.
Tiam ni tuj havi opiniojn kaj vidpunktojn
estas tiel simpla kiel ĝuste apartajn files-- nomata ŝablonoj, ofte.
Ili nur havas la estetiko de mia paĝo,
kion mi deziras la paĝo rigardi like-- la koloroj kaj la aranĝo
kaj la pozicioj de ĉiuj variabloj.
>> Kaj do pli interesa ke ni eventuale atingi
estas la modelo, kiu tuj estos ĝuste vorto ni frapas sur aliaj teknologioj
ke ni alportu en la bildo, kiel realaj datumbazoj,
tiel ke kiam vi volas ŝpari informoj,
Ne nur sendu retmesaĝon al viaj Proctor aŭ al ci mem,
vi fakte stokas en datumbazo uzante alian lingvon konata kiel SQL.
Kaj do ni lasos tie hodiaŭ kaj repreni kun tiu merkrede
kaj enkonduki datumbazoj tiam.
>> [MUZIKO Ludante]