DOUG LLOYD: Do ni faris multan laboron en C, kaj C estas vere freŝa lingvo ĉar ĝi donas al vi la kapablo plonĝi vere malalta nivelo en viaj programoj. Ni atingos fari aferojn kiel vere minuto kiel manipulanta individuajn bajtojn da memoro. Memoru ke Pointers vere permesos ke fleksebleco. Sed ni ĉiam devas havi ke fajna grajno nivelo de detalo en niaj programoj? Probable ne, ĉu ne? Kaj se ni tuj devas komerco-off inter esti kapabla fari vere, vere minuto aferoj kaj vere, vere grandaj aferoj, ke ni ne devas pensi pri, ni ne devas apliki tiuj vere granda ideojn se ili estas jam konstruita en por ni, ĝenerale por konstruado grandaj programoj aŭ grandaj projektoj, verŝajne ni erari sur la flanko de esti pli lingvo havajxoj enkonstruita por ni, anstataŭ havi la malalta nivelo aĵoj. Kaj jen kie PHP vere eniros. Nun, unu el la kialoj ke ni instruu PHP en CS50 estas ke ĝi estas peze inspirita C. Kaj fakte, en mia opinio, estas vere du pragenerinto lingvoj estas tre ofta nuntempe. C kaj Lisp. Kaj ili estas generinto lingvoj ĉar ĉiu alia moderna programado lingvo kiu evoluigis de tiam estas inspirita por aŭ alia sintakse. PHP estas tre simila sintakse al C, dum lingvoj kiel Scheme, ekzemple, kiu vi eble aŭdis de, estas peze inspirita lingvon nomata LISP, kiu estas pli malnova lingvo. Do la kialo ni instrui PHP en CS50 estas ke, per scio C kiel fundamente kiel vi faras en ĉi tiu punkto, kaptanta PHP, kiu donas al vi la kapablo fari multe pli alta nivelo aferoj ol C faras, estas ne ke multe de hurdo, ĉar vi jam havas la baza ideo de la sintakso. C estas estita proksimume por preskaŭ 45 jaroj ĉe tiu punkto. PHP estas estita proksimume por ĉirkaŭ 20 jaroj. Kaj en tiu 25 jaroj intere, programistoj determinis ke ili deziris multe Prefere havi pli altan nivelon kapablecoj, kaj la erarojn kaj bataloj de la 20 jaroj intere kondukis al PHP kaj aliaj modernaj lingvoj. PHP la granda elekto de lingvo por programaro ke allow-- por programaro that-- kie vi bezonas fari aĵojn kiuj en C estas vere komplika. Do ekzemple, laborante kun kordoj en C estas tre komplika, ĉar kiel ni scias, kordoj en C Estas vere nur arrays de karakteroj. Ĝi ne estas enkonstruita en datumtipo. Aŭ eble pli fundamente, io ni ne eĉ kovri en C, kio se vi bezonas fari iuj komputilaj retoj? Bone? C havas la kapablon fari gxin, sed estas tiel arcano kaj tiel malfacile reale fari. Ĉu ne estus bela se la lingvo havis korpigita, facila vojo implementar interkonektanta? Kaj PHP estas lingvo kiu faras ke, aŭ faciligas tion, tre iom pli. Kiel mi diris, PHP estas tre peze inspirita per C. La sintakso estas tre simila. Kaj do devus espereble faros la transiro de unu al la alia iomete mola ol iuj aliaj lingvoj povas esti. Komenci skribi PHP, simple malfermi dosiero kun la .php dosiersufikso. Teknike tio ne vere bezonata, sed se vi volas aĵojn kiel sintakso elstarigante en IDE, tiel ke tipo nomojn, aŭ variablo nomoj, funkcioj, vi scias, la ŝlosilvortoj de la lingvo estas elstarigitaj en specifa koloro, vi ĝenerale volas nomi viajn dosierojn kun aparta dosiersufikso. Do ni nomis nian dosieron kun Php etendo, sed tiam ankaŭ kun PHP, ĉiuj PHP kodo ni skribi en tiu dosiero devas esti enmetitaj en tiuj PHP delimitadores ke ni vidas tie sur la ekrano. Angle krampo? Php komenci. Tiam ni skribos ĉiuj niaj PHP kodo kiun ni volas en inter. Kaj tiam ? angulo krampo fermi. Se ni ne faros tiun, tiam kio okazos? Oni ne tuj kraŝi. Ĝi ne tuj vere ruinigi nian programon. Sed gxi ne tuj havas la efekto kiun ni volas. Kio okazos, vere, estas ke kiam ni provas kaj ruli tiun programon, ĉio ne inter tiuj limoj tuj estos presita eksteren verbatim. Ĝi ne tuj reale ekzekuti la kodon, ĝi tuj simple presas ĝin laŭvorte. Nun kial estas la kazo? Do C estas kio konata kiel kompilita lingvo. Vi verŝajne konas la paŝo de faranta viajn programojn, turnante la .c dosierojn kaj .h dosierojn en ununuran ruleblan kun ŝminko, precipe uzante Tin kiel nia tradukilo. PHP, tamen, ne havas ĉi ekvivalento. PHP estas kio nomiĝas interpretita lingvo. Kaj kion tio signifas? Nu, tio signifas ke ni ne devas konverti nian fontkodon nuloj kaj anticipe. Prefere, ekzistas programon, kiu ankaŭ estas nomita PHP, kiu komprenas PHP kaj povas ordigi de fari ĝin sur la muŝo. Tio ne vere akurate preciza, sed ĝi estas sufiĉe bona analogio de kio okazas. Ĝi estas la interpreti tiujn nuloj kaj aĵoj sur la muŝo. Kaj do se ĝi ne scias kiel procesi ion, se ĝi ne scias kiel procezo PHP, vi probable volis meti tiun tekston en tie, ĉu ne? Vi probable volis meti la kodon en tie, eĉ se ĝi ne estas inter PHP-- la PHP delimitadores. Sed- do ĝi ne tuj forigi ĝin por vi, ĝi estas ĝuste tuj esence forĵeti ĝin. Do ĝi tuj presi ĝin al la ekrano. Tio ŝajnas kiel ĝi estas malbona afero, sed fakte ĝi estas tuj estos vere bona afero, kiel ni vidos, kiam ni parolas pri PHP ttt disvolviĝo, ĉar ĝi signifas eblan intersperse PHP kaj HTML. Ni povas uzi ilin kune krei pli dinamika retpaĝo. Sed pli sur tiu en la vídeo sur PHP ttt disvolviĝo. Do kio estas la sintakso de PHP? Tion ĉi video temas. Ni parolu pri ĝi. Do komenci ekstere, variabloj. PHP variabloj ekzistas. Ekzistas nur du grandaj diferencoj de C. La unua estas ke ekzistas neniu tipo especificación. Ni ne devas diri int, char, kaleŝego, cxiuj havajxoj. Ni ne devas fari tion plu. PHP estas moderna lingvo. Ĝi povas diveni kion vi estas provas fari aŭ faru bonan diveni, kion vi provas fari. Do jen vere bela. La alia afero estas, ke ĉiuj ŝanĝiĝema nomoj devas komenci per dolaro signo. Tio estas nur io por alkutimiĝi al. Ĝi estas iom bizara, ĉar ĝi estas tiel ke PHP povas kompreni kio estas ŝanĝiĝema kaj kio estas ne. Do ĉiu variablo nomo komenciĝas per unu dolaro signo. Do en C ni povus diri ion kiel tiun, int x = 54. Ni ne devas fari tion plu en PHP. Ni povas simple diri $ x = 54. Kaj ni povus diri, ekzemple, en C, Se ni almenaux funto-inkludis la CS50 .h kaplinio dosiero, ni povus diri string frazon = "Ĉi tiu estas CS50." Ni ne devas fari tion en PHP, tamen. Ni povas simple diri $ frazon = "Ĉi tiu estas CS50." Kaj fakte, linio estas nun enkonstruita datumtipo en PHP, aŭ prefere PHP komprenas kio kordo estas. Ĝi estas separata de tabelo de karakteroj kiel ĝi estas en C. Ĉiuj viaj preferataj kondiĉa deklaroj de C estas ankoraŭ disponebla por vi uzi. Do ne granda transiro tie. Ni povas say-- ni povas havi se deklaroj kiel ĉi. se $ y 43, aŭ $ z = 15. Do jen bela simpla. Ni povas havi se kaj alie. Ni povas havi se kaj alie se. Kaj rimarki ion sufiĉe bela tie, kaj ĉi estas speco de unu el tiuj avantaĝoj de PHP kontre C, avizo kio funkcio ni ne uzas ĉi tie? Ni uzas == kompari variablo, $ nomo, al ĉeno. Ni ne povis fari tion en C, dekstra? Ni devis uzi funkcio nomita StrComp aŭ StrEndComp aŭ ajna el lia rilatajn gekuzoj. Kaj do jam vidas tiujn avantaĝojn. Ni ne devas fari ion kiel stulta aŭ eble unintuitive kiel nomi funkcio nomita StrComp se mi volas nur testi ĉu valoro egalas ŝnuron. Mi povis nur uzi egalas egaluloj, kiel mi povis fari ion alian. Do ekzistas avantaĝon. Foje, parenteze, vi eble vidu alian se unu vorton, elseif. Kaj tio estas bone en PHP ankaŭ. Do kelkfoje vi povus vidi ke. Ĝi ne estas tajperaro. PHP reale komprenas elseif. Mi ne scias kial ili decidis apliki tion, sed kiel ni vidis multajn fojojn dum nia videos ĝis nun, ni programistoj amas ĝin se ni povas fari aferojn rapide, tiel liverante de tiu spaco estas ŝajne grandan avantaĝon. Do jen se kaj elseif. Ni ankaŭ havas la triargumenta operatoro, revokon demandosigno dupunkto, por vere mallonga formo se alie aŭ kondiĉa branĉantaj. Kaj ŝajne, en ĉi, kion ni provas fari ĉi tie estas atribui la variablo $ letero ĉu vera aŭ malvera, dependanta sur ĉu $ var estas alfabeta karaktero. Do tiu estas sufiĉe simila al isalpha ke ni estas familiara kun de C. Tiu estas speco de la ekvivalenta en PHP. La funkcio estas ŝajne nomata ctype_alpha, sed tiel estas kiel ni faras ĝin en PHP. Do ĉio ĉi estas iranta esti estas, se $ var estas litero, $ letero estas vera. Se $ var ne leteron, $ letero estas falsaj. Ni ankaŭ havas ŝaltilon deklaroj ankoraŭ. Ni memoras tiujn de C ankaŭ. Ĉe la plejsupro tie, jen kiel ni fari io kiel get int aŭ akiri kordoj. Do PHP havas tiun enkonstruita. Ni ne bezonos la CS50 biblioteko anymore. Ni povas nur uzi la funkcion readline. Kion tio tuj fari estas presaĵo el la mesaĝo, "Via stato, bonvolu, "kaj tiam palpebrumante prompto atendante la uzanto enigo iuj informoj. Nun rimarkas kion alian ni povas fari kun ŝaltilo. Se vi uzis ĝin antaŭ, vi eble memoras ke ŝaltilo estas limigita preskaux por entjeroj kaj karakterojn, sed nun ni povas uzi kordoj. Kaj fakte, la ŝaltilo deklaro en PHP estas tre iom pli fleksebla ol ĝia kuzo de C. Loops. Samkiel Conditionals, ĉiuj viaj malnovaj favoritos estas ankoraŭ tie. Ni havas dum maŝojn kiuj rakontas de 1 al 100 en tiu kazo. Ni faru dum cikloj ke kalkulo de 1 al 100, kaj ni havas por bukloj ke kalkulo de 1 al 100. Do neniu grandan salton tie. La sintakso estas bela multe ekzakte la sama, krom nun ni uzas dolara signo variablo anstataŭe deklari entjero variabloj aŭ io simila por nia nombriloj. Jen kie aĵoj a multe pli bona ol C, kvankam. Arrays. Do memoru, kiam ni estis parolante pri C, por por ni kreski kaj ŝrumpi aroj de informoj, ni bezonis por ordigi de defaŭlta al tiu ideo de ligillisto, ĉar C sensilo estis fiksitaj en grandeco. Ni ne povis retiri ilin. Ni ne povis kreski ilin. Ni devis reallocate memoro kaj fari ĉiujn ĉi frenezo aŭ uzi ligitaj listoj, kiuj levu tre iom pli da spaco. Sed en PHP, tabeloj estas ne fiksita en grandeco anymore. Ili povas kreski kaj povas ŝrumpi. Do denove, ĉi tiuj 20 jaroj kiuj ekzistis inter la unua publikigo de C kaj la unua ĵeto PHP, ni decidis ke, sciu, estus vere granda se ni povus fari tion. Kaj tiel ni implementado ĉi. Do PHP arrays ne fiksita en grandeco, kaj ĉar PHP ne vere havas programisto front-alfrontanta nocioj de tipoj, ni povas miksi datumtipoj en nia arrays, tro. Do ni ne eĉ devas uzi ĉiujn entjeroj aŭ ĉiuj flosanta punktoj, ni povas havi miksaĵo de ĉiuj malsamaj specoj en ununura tabelo. Deklarante tabelo estas bela simpla. Ĝi estas nur kiel ajna alia variablo. $ núms = array (1, 2, 3, 4), tabelo estante funkcio ke estas konstruita en PHP kiu kreos tabelo por vi. Tio kreas aron de kvar valoroj, nombroj en tiu kazo, nomita $ núms. Kaj estas pli ol unu maniero fari ĝin. Kaj ni tuj vidu tiun multon en PHP. PHP estis disvolvita de multaj malsamaj personoj kaj kreskas kaj kreskas kaj kreskas. Ekzistas kutime ne nur du aŭ tri manieroj fari ion en PHP, ekzistas kutime kiel 10 aŭ 20. Jen nur alia komuna maniero deklari tabelo. $ núms = kvadrata krampo 1, 2, 3, 4. Do ĉi tiu estas speco de simila al C la angulo br-- buklaj krampoj skribmaniero, prefere. $ - aŭ ĝi estus int núms kvadrataj krampoj egalas krispa streĉa 1, 2, 3, 4. En PHP estas $ núms = kvadrata krampoj 1, 2, 3, 4. Sed ambaŭ de tiuj ekzemploj tie doni min tabelo de kvar tiukaze entjeroj. Kio se mi volas najlu ion nun? Bone mi povas simple diri $ núms 4, kiu denove, ni ankoraŭ rakonti de 0 tie en PHP, estus la kvina elemento de la tabelo. Mi povas nur diri ke. Mi ne tuj suferi seg kulpo, ĉar mia tabelo estas nur tuj kreskos akomodi tion. Tio estas sufiĉe bela, ĉu ne? Kaj fakte, mi eĉ ne bezonas specifi kie mi volas meti ĝin. Mi povas nur diri tion kaj nur najlu gxin rekte al la fino, aŭ mi povis eĉ nur diru $ núms 20 aŭ 1.000. Fakte ne gravas. Ĝi estas ankoraŭ nur tuj najlu gxin rekte al la fino. Do mi povas kreski, kaj as-- ni estas ne tuj kovri ĝin en ĉi tie, sed mi povas splisas aŭ strio elementoj el la tabelo tiel, kaj la tabelo estos ŝrumpi akomodi ke nun mankas aŭ malplena spaco. Ekzistas alia vojo al najlu ion sur tabelo, kiu estas funkcio nomita array_push. Do denove, nur tiu ideo de esti kapabla fari aferojn diversmaniere. Do ni vidis tri malsamaj manieroj nun al najlu alia elemento sur tabelo. Do tiu aldonas alian elementon al la fino de la $ núms tabelo. Kaj ni povas miksi nian datumtipoj. Do mi povis havi tabelo de ne 1, 2, 3, 4, sed 1, vera, 3, 4, kie vera estas Bulea kaj poste se mi volas najlu en alia elemento al tiu tabelo, eble cxeno, la ĉeno "kvin", mi povus fari tion. Kaj nun mia tabelo volus esti 1, vera, 3, 4, kvin. La vorto kvin, ne la entjero 5. Do multe da fleksebleco tie. La fleksebleco ricevas eĉ pli bone, kvankam, ĉar PHP havas subtenon por io nomita asocieca tabelo. Kaj ni ia parolis pigre pri asociaj tabeloj en C en la kunteksto de hash tabloj, ĉar kio asociaj tabeloj estas vere ĉiuj pri faras ŝlosilo valoro paro mappings. Kaj en ĉi tiu kazo, la keys-- se ni estas familiara kun tabeloj de C, la ŝlosiloj estas indekso nombroj. 0, 1, 2, 3. Kaj la valoroj estas kion ni trovas ke tabelo 0, tabelo 1, tabelo 2, kaj tiel plu. Do la ŝlosiloj estas indeksas, kaj la valoroj estas kio estas en tiu tabelo loko, precizigita per tiu indekso. Sed en PHP, ni ne devas fari tion nocio de tabelo 0, tabelo 1, tabelo 2 anymore. Ni povas nun uzi fakta vortoj mapi ŝlosilojn al valoroj. Kaj tiel mi povus diri ion kiel tion. Mi povus krei tabelon uzante la kvadrata krampo sintakso jene. $ picoj = kvadrata krampo "fromaĝo" kaj poste ĉi tia duobla sago skribmaniero, 8.99, "pepperoni" arrow 10.99-- 9.99, kaj tiel Plu. Kaj do kio okazas ĉi tie? Kion mi fakte faras? Mi kreanta ŝlosilo valoro paro mappings. Do anstataŭ diri, ekzemple, picoj 0, pecoj 1, picoj 2, Mi povas nun diri picoj fromaĝo, picoj pepperoni, kaj raporti al la valoroj asociita kun ili. Do jen nia klavoj en verda. Fromaĝo, pepperoni, legomo, bubalo kokido. Jen la sago kiu faras tiu ŝlosilo valoro paro mapado. Kaj tiam tie estas la valoroj en tiu tabelo situon. Do estas kiel diri tabelo 0 egalas 8.99. La ŝlosilo estas 0. La valoro estas 8.99. Mi povas nun diri tabelo fromaĝo, aŭ en ĉi kazo picoj fromaĝo, fromaĝo estas la ŝlosilo, kaj kion mi trovas ĉe picoj fromaĝo estas 8.99. Tio estas la valoro kiun mi trovas tie. Do mi povas diri aĵojn ŝatas. $ pico fromaĝo = 7,99. Diru min havanta vendo. Mi volas dis-- mi volas faligi la prezo de la fromaĝo picon. Aŭ mi povas uzi la legomo pico kiel parto de kondiĉo, aŭ mi povas aldoni novan elementon al mia tabelo, kiel mi povis fari antaŭe. Mi povas aldoni novan elementon al tiu asocieca tabelo kun la klavo "lardo" kaj la valoro 13,49. Sed tian enkondukas problemo, se vi pensas pri ĝi dum sekundo. Kiel ni persisti tra tiu tabelo? Dekstra? En C, ni devus nur havi por ciklo, tipe, ke forkurus de 0 al la grandeco de la tabelo minus 1. La tabelo havas n elementojn en ĉe la valida indeksoj estas 0 por n minus 1. Do ni povus uzi por buklo paŝi tra ĉiu ununura ero. Sed tio ne estas vere la kazo plu, bone? Sed kie ni havas ŝlosilan valoron paro mappings kie la klavoj estas vortoj, kiel ni persisti super ĉiuj el la vortoj? Nu, feliĉe, PHP havas maniero trakti ĉi ankaŭ, kaj do ni salti reen al cikloj dum sekundo enkonduki kvara speco de buklo ke ekzistas en PHP nomis foreach buklo. Kaj kia foreach buklo faras estas ĝi estas esence la sama ideo. Vi povas uzi ĝin por ia tabelo. Sed estas esence la sama ideo kiel por ciklo, krom anstataŭ uzi indekso nombroj, vi nur havas tiun strangan sintakson kie vi vokos unu sola ero nomon por la celoj de tiu ciklo. Do en tiu kazo, foreach ($ array kiel $ ŝlosilo). Esence, kiel tio komenton notoj, ene de tiu foreach buklo, ĝi tuj transiru ĉiu unuopa elemento de $ tabelo, kiu estas tipe tuj esti asocieca tabelo, sed povas vere esti ajna speco de tabelo ke vi volas en PHP. Kaj ĉiufoje ke en por buklo vi eble diris $ tabelo rektaj krampoj $ i, vi povus simple diri $ ŝlosilo. Ke $ ŝlosilo iĝas alias por ĉiu indekso de via PHP asocieca tabelo, kaj tiel vi povas uzi ĝin tiel. Do ekzemple, ni nun havas nian picoj tabelo. Mi ia refaldis ĝi en la angulo tiel ni povas uzi ĝin por fari rapidan ekzemplon. Se mi diras foreach ($ picoj kiel $ pico), nu, kio okazas? Nu, mi tuj persisti tra ĉiu sola elemento de la array $ picoj, kaj tion farante, mi tuj vokos ĉiu ero, kiam mi estas ene de la korpo de tiu por buklo, $ pico. Do jen speco de staru -en, revokon, ke $ pizza estas starejo-je por dirante $ picoj kvadrataj krampoj $ i se ni uzis por ciklo, kie ni povus iri de $ i = 0 por, en tiu kazo, $ i = 3. Se ni ne havis ŝlosilon valoro paroj tie, tio estus ero 0, 1, 2, 3, kaj ni uzus por buklo iri $ picoj 0, $ picoj 1, $ 2 picoj, $ picoj 3. Do nun nur $ pico estas anstataŭiganta por ke individuaj ŝlosilo. Do kio estas tiu tuj presi? Mi presi el $ pico. Kion mi povos trovi at-- se mi presi $ picoj, $ i? Dekstra? Se mi tuj presi la Ith elemento de picoj, kion mi povos presi? Mi tuj presi la valorojn ĉe tiu loko, ĉu ne? Kiel se ni estis farantaj tion en la kunteksto de C, ni ne kutimas uzi nian iterator variablo, int i = 0, i estas malpli ol 3, Mi ++, presi 0, 1, 2, 3. Ni presi el tabelo 0, tabelo 1, tabelo 2, tabelo 3. Kaj tiel kion ĉi presas estas tiu. Ĝi estas la listo de prezoj. 8.99, 9.99, 10.99, 11,99. Nun rapidan noton ĉi tie. A foreach buklo ne nepre elprinti aferojn en ordon. Ĝi ne estas guaranteed. Ĝi kutime faras. Ĝi estas kutime bazitaj sur la ordo en kiuj eroj estas aldonitaj al la tabelo, tiom simple toleri ke en menso. Ĝi eble ne estas en ordo. Sed foreach buklo persisti trans ĉiu unuopa elemento de la tabelo en demando. En tiu kazo, denove, ke tabelo estas $ picoj. Mi povas ŝanĝi la sintakso, kvankam, se Mi volas ambaŭ la ŝlosilo kaj la valoro. Anstataŭ diri $ picoj kiel $ pizza, mi povas diri tion. Kaj se vi rigardas kion mi havas elstarigitaj en verda tie, ĝi aspektas kiel ŝlosila valoro paro mapado. Kaj do se you-- eĉ se vi ne estas tute certa kion ĝi tuj faros, vi versxajne povas diveni ke $ Topping tuj esti la ŝlosilo en ĉi tiu kazo kaj $ prezo tuj estos la valoro. Do mi anstataŭiganta nun ĉiu ero de $ picoj kiel ŝlosila valoro paro, kaj nun mi povas referi al la kernaj kaj la valoro, kiu eble en oportuna, ekzemple, kiel sekvas. "Tuta" - tiu estas multa preso daŭriganta here-- "Tuta" Topping "pico kostas $" prezo, kaj tiam Mi presi periodo kaj backslash n. Do nun, avizo denove mi havas aliron al klavo, $ Topping, kaj valoro, $ prezo. Do ĉu vi povas diveni kion ĉi tuj elprinti? Ekzistas multe de presaĵo deklaroj, sed estas nur unu backslash n, tial ĝi tuj presi ion sur an entire-- sur unu linio de kodo. Se mi povas referi al la klavon kaj la valoro, tiam nun, anstataŭ nur povante presi la prezoj, Mi povas presi ion kiel tiu. "Tuta fromaĝo picon kostas $ 8.99." Kaj nun mi uzas ĉiujn la keys-- fromaĝo, pepperoni, legomo, buffalo chicken-- kaj la valoroj. 8.99, 9.99, 10.99, 11,99 Do tio estas nur alimaniere fari foreach buklo ke anstataŭ nur donante al vi aliron al la valoroj, ĝi nur donas you-- donas vin aliro al la klavoj kaj la valoroj. Do presi el informo. Mi jam faris kelkajn malsamaj vojoj, vi eble rimarkis. La du funkcioj havas ni unuavice vidita estas presitaj kaj eĥo. Kaj cxar preskaux ĉiuj intencoj kaj celoj, ili estas precize la sama. They're-- ekzistas tre subtilaj diferencon tio ne eĉ valoras akiranta en, sed esence ĉie vi povas uzi presaĵo vi povas verŝajne uzi eĥon ankaŭ. Kaj tio ne estas la solaj du. PHP havas multajn malsamajn manieroj printi aferojn, kaj ĝi ankaŭ havas manierojn integri variablojn en la mezo de ŝnuro. Do rememori de C, do vi memori kio funkcio ni povas uzi por anstataŭigi variabloj en aferoj ni volas elprinti? Vi probable uzas tiun funkcii sufiĉe multe. printf, dekstra? Do jen kion ni havis antaŭe interne de la kunteksto de nia foreach buklo. Ni havis tiujn kvin aparta presaĵo deklaroj, ĉar tiu estis la sola Tiel mi vere sciis tiutempe kiel presi mesaĝojn. Mi ne sciis kiel integri la variablo $ estrante en mian PHP-kodo. Nu, se mi nur prenis sovaĝan konjekton, printf, ĝi fakte estus laborinta. printf estas funkcio ke mi povas uzi en PHP, ĝuste kiel mi povas uzi ĝin en C. Kaj do ion tiel, printf, denove, ni estas familiara kun tiu. La unua% s anstataŭigita kun la valoro de $ Topping. La dua% s estas anstataŭigita kun la valoro de $ prezo. Kaj tial mi interpellating, Kiu estas nur ornama metodo diri mi batante la variablojn en tiun lokon. Do mi ŝtopanta en $ pintante kie la ruĝa% s estas kaj $ prezo kie la blua% s estas, kaj poste mi ricevus la mesaĝon, "Tuta fromaĝo picon kostas $ 8.99." Ne la sola maniero mi povas fari ĝin, Tamen. Eble mi volus uzi ĉi tiun metodon. Tiu estas fakte kio estas plej ofte nomata variablo interpelacio. Mi povas uzi eĥo. Mi povus uzi presaĵo ankaŭ, kiel ni vidos. Sed kio okazas ĉi tie? Unue, mi devas eskapi la dolaro signo. Ĉar rememoru, kiam ni estis fakte presi el la prezojn de la picoj, Mi estis reale formati ilin kiel mona figuroj kun dolaro signo. Sed ni uzas dolaro signoj ankaŭ reprezenti variablon nomoj en PHP, kaj precipe kiam mi uzante ĉi tiu metodo de la krispa stegon ŝanĝiĝema interpelacio metodo, mi bezonas eskapi mian dolaro signo do ne pensi mi parolas variablon. Ĝi tuj efektive, laŭvorte presi dolaro signo. Do ia analogize ĝin kion vi vidas fine tie. Ĝi faras ne efektive print backslash n, ĉu ne? Ĝi presas el nova linio karaktero. Ĉi is-- ĝi ne tuj print backslash dolaro signo, ĝi tuj presi nur dolaro signo karakteron. Sama ideo. Escape sekvencoj, kio tion nomas. Sed rimarki ke mi ne faras omnaspeca% s anstataŭoj, Mi nur laŭvorte ŝtopanta en tiuj variabloj. Kaj tiel en this-- kio okazus tie estas ke la valoro de $ topping-- denove, nur konformaj ni estis parolas tiel far-- fromaĝo akirus ŝtopita en tie. Kaj $ prezo estus ajn valoro estas ĉe picoj, rektaj krampoj, fromaĝo, kiu estis 8.99. Kaj tiel tio estus ankaŭ elprinti "Tuta fromaĝo picon kostas $ 8.99." Kaj kiel mi diris, mi povus uzi presi tie anstataŭ eĥo, kaj la funkciaro estos preskaux precize la saman. Estus presi la samon. Ekzistas alia maniero fari ĝin, kaj tio estas alia avantaĝo de PHP labori kun kordoj. Ni povas fari ĉenon kunmeto. Ni povis fari tion en C, tro, uzante funkcio nomita strcat, sed denove, ni devis voki apartaj funkcioj. Estis ĉi tuta ĥaoso fari. Ni devis funto-inkluzivi string.h. Estis produktado, dekstra? Sed nun mi povas simple uzi tiun skalara operatoro al concatenate kordoj kune. Do mi concatenando "Tuta" kaj tiam ajn la valoro de $ Topping estas, kaj poste alia ŝnuro, "pico kostoj $" kaj tiam concatenando ajn la valoro de $ prezo estas, kaj tiam ĉe la fino mi tacking sur periodo backslash n. Kaj tiel tio same presi "Tuta" - denove, se ni parolas pri la unua elemento de tiu picoj tabelo "Tuta fromaĝo picon kostas $ 8.99." Periodo, backslash n, denove, kun la $ Topping kaj $ prezo anstataŭiganta por kio ni estis specifita en nia foreach buklo kiel la ŝlosilo valoro paro mapado. PHP povas manipuli funkcioj. Funkcioj estis ia integralo al C, kiel ni vidis. Kiel variabloj, ni ne bezonas specifi la reveno tipo de la funkcio, ĉar ĝi ne vere gravas. Kaj ni ne specifas la datumtipoj de ajna parametroj, ĉar ili ne vere afero, kiel ni vidis en PHP. Ĉiu funkcio estas enkondukitaj kun la funkcion ŝlosilvorto. Tiel estas kiel ni indikas al PHP kiu kion ni parolas estas funkcio. Kaj ni ne devas trakti ĉefa entute, ĉar la interpretisto, la PHP interpretisto, verkoj de supro al malsupro, sendistinge. Se vidas vi povas fari funkcio alvoko, ĝi devos iri trovi la funkcion alvoko, eĉ se ĝi venas poste. Sed ĝi tuj legi desupre fundo, tial ni ne bezonas specifi, jen kien vi komencas. Vi komencas sur linio 1 de via PHP kaj labori malsupren de tie. Do jen kiel ni kreus funkcio nomita hard_square. Ĝi ŝajne prenas unu parametro, kiun mi vokas $ x. Tiu funkcio estas komplikita nur ilustri diversajn aferojn. Ni ankoraŭ havas reveno valoroj. Mi uzas por buklo tie. Sed estas resume nur, kion tiu kvantoj al estas nur $ x fojojn $ x. Kion mi fakte faras estas nur aldono x 0 x fojoj aŭ $ x al nulo $ x fojojn. Sed estas efike akurate la sama kiel multipliko $ x fojojn $ x. Mi povas ankoraŭ resendas valoron, tiukaze $ rezulto, kaj Mi faris funkcio en PHP. Jen kiel vi povus uzi ĝin en kunteksto. Do eble mi estas ene de iuj PHP-dosiero. Rimarku en bluo tie Mi uzis mian PHP delimitadores, angulo krampo demandosigno php. Intere tiuj estas ĉiuj la PHP kiu mi volas skribi. Do mi ŝajne tuj get-- Mi tuj instigas la uzanton doni al mi kelkajn, ke vendejo variablo, stoki en tiu variablo $ x, kion ili donis al mi. Tiam mi tuj eĥon hard_square de tiu valoro, kaj ŝajne iranta al najlu en nova linio tiel, kaj tiam poste sur Mi timige difini la funkcion hard_square tiel ke kiam mi faras la voki al hard_square, ĝi scias kion mi parolas. Nun, mi povus ankaŭ fari io tiamaniere. Tio estas iomete malsamaj. Ĝi estas preskaŭ ĝuste la sama kiel kion ni vidis antaŭe, krom anstataŭ diri nur $ x tie kiel la parametro hard_square, Mi dirante $ x = 10. Do tiu estas ekzemplo de defenda programado, gardanta viaj programoj kontraŭ malicaj uzantoj. Tio estas unu maniero por fari iun eraron kontrolanta ke ni ne vere havas kiel eblo en C. Ni povis neniam specifi la defaŭlta valoro de io. Ni ĉiam devis kontroli ĉu, ekzemple, se ni faris alvokon al GetString, estis plej konvena se tuj post ni kontrolis ke, ni kontrolis ĉu la kordo ke la uzanto donis al ni estas ne egala al nula, ĉar ni ne volas komenci laborante kun nula kordo. Ĉi tie, tio estas maniero por gardi kontraŭ tio. Se la uzanto ne havigas al ni ion iel, kion ni faros? Nu, ni nur diros ajn ili ne provizas nin, ni ĵus tuj ŝtopi en 10 anstataŭe. Do se ili ne donas al ni valoron, simple aliru 10 defaŭlte. Kaj do ĉi tie, rimarkos ke mi faras alvokon al hard_square, sed estas neniu prompto al la uzanto, ĉu ne? Mi nur faras malplenan alvokon. Sed mia funkcio hard_square atendas parametro. Kio estas ĉi tuj presi? Ĝi tuj presi 100, dekstra? Ĉar la uzanto ne donu al mi ion ajn. Kaj do mi simple tuj supozi ke 10-- 10 estas la defaŭlta valoro. Kaj tiel tio estus presi el 100 sur ĝia propra linio. PHP dosierojn ne devas esti nur unu dosiero. Vi povas kombini plurajn dosierojn kune, nur ŝatas vin povas en C. La vojo ni faris ke en C estis tipe fari #include akiri header files tiris je. Ni ne faras tion en PHP. Ni faru ion nomatan require_once. Kaj tiam tie estas tio tutajn afero, kio estas tio __dir__? Tio estas nur speciala variablo, aŭ speciala konstanta, vere, kiu specifas kion via nuna dosierujo estas. Kaj tial ĝi tuj rigardi en via nuna dosierujo por dosiero nomata cs50.php en ĉi tiu ekzemplo tie, kaj ĝi tuj algluita ke dosiero ĉe la supro de via PHP programo, supozante ke vi metis la postuli iam linion ĉe la supro de via PHP-dosiero. Do PHP estas unuavice uzata, sed ne ekskluzive uzataj, kiel lingvo por reta programado. Tio estas vere kiel ĝi venis esti. Sed estas plena lingvo, kiel ni vidis. Ni vidis preskaux cxion ke ĝi povas fari ke estas similaj al C, kaj ĝi povas fari heck de multe pli ol tio. Sed ĉar ĝi estas plena lingvo kaj ni povas fari komandlinio programado en ĝi. Ni povas kuri komandlinio programoj. Ĉiuj kiu estas postulita kuri komando linio programo kiu estas skribita en PHP estas ke vi havas PHP interpretisto. Do ĝi estas speco de analogaj al havante tradukilo en via sistemo se vi volas kompili vian C kodo por igi ĝin plenumebla dosierojn. Vi bezonas havi PHP interpretisto ke ekzistas en via sistemo por ke vi povas interpreti PHP dosierojn. Supozante vi, kaj kutime tiu interpretisto nomata PHP, kaj ĝi estas kutime inkludita kun plej Elŝutoj aŭ instalaĵoj de PHP ke vi povas akiri en linio, kaj certe la nomo de la PHP interpretisto ni havas en CS50, IDE. Ĉiuj vi fari estas tipo php dosiero. Kaj kion via programo tuj faros estas ĝi estas tuj kuri tra la interpretisto, ĝi estas ignoros ĉio tio ne intere demando mark-- aŭ, angulo krampo demandosigno php, la PHP delimitadores, kaj presi ĝin, kaj ĝi interpretos kaj ekzekuti la kodo ene de via PHP delimitadores. Do ni Pufo al CS50 IDE kaj rigardi kelkajn PHP dosierojn, kuranta paro de PHP dosieroj, en komandlinio interfaco de CS50 IDE. Do jen ni estas en CS50 IDE, kaj mi prenis la liberecon malfermi dosieron nomatan hello1.php. Kaj ŝajne, la enhavo de tiu dosiero estas nur la PHP delimitadores tie, kaj intere, eĥo ("saluton, mondo"). Jen sufiĉe simpla PHP programo. Mi simple tuj rulumu malsupren al mia fina fenestro tie, kaj mi tuj tajpi php hello1.php, batis eniri. Saluton mondo. Tio probable kion ni estis atendis ĝin fari, ĉu ne? Ni iru supren kaj preni alia rigardi programon. hello2.php. Pli malpli la sama afero, Ne multe okazas tie. Ĉi tiu fojo, tamen, mi tuj suflori la uzanto doni al mi iliajn nomojn. Mi uzas tiun readline funkcion denove. $ nomo = readline. Jen la invito, "Kio estas via nomo?" Ŝajne mi estas preso ĝin sur ĝia propra linio. Kaj tiam, do la linio malsupre tio estos la prompto kie la uzanto povas eniri ilian nomon. Kaj tiam mi uzas iomete de ŝanĝiĝema interpelacio tie sur linio 3 presi "Saluton" kaj kiom la uzanto tajpas. Do tiu estas analoga al diri: Saluton, komo,% s se ni uzis printf en C. Do ni iru kaj interpreti ĉi programo. Do denove, mi rulumu malsupren al mia fina fenestro. php hello2.php. Kio estas via nomo? Doug. Saluton, Doug. Mi ankaŭ havas alian dosiero nomata hello3.php. Mi tuj purigi mian ekrano kun Kontrolo L, kaj mi tuj ekzekuti tiu. Kio estas via nomo? Doug. Saluton, Doug. Do la konduto estas identa al hello2.php, sed kial hello3.php? Nu, jen la diferenco. En tiu kazo, avizo ke sur linio 1 tie, Mi havas ion ke estas ne en inter la PHP delimitadores. Mi simple videbligi fjordon aŭ mi nur tajpitaj, "Kio estas via nomo?" Kiam la PHP interpretisto vidas ĉi, ĝi havas nenian ideon kiel interpreti ĝin kiel PHP, kaj tiel anstataŭe de malsukcesi, ĝi estas ĝuste tuj kraĉis ĝin. Do rimarki sur linio 3 nun, mia alvoko al readline, ne prompto anymore. Mi nur vere tuj to-- kiam la PHP interpretisto vidas ĉi, ĝi tuj presi "Kio estas via nomo?" Tiam vidas, ho, okej, here's-- ĉio alia tuj estos interpretitaj kiel PHP, do jen kial ĉi verkoj. Mi ne devas nepre suflori la uzanto to-- ene de readline, Mi povas nur havi ĝin ekstere de la PHP delimitadores kaj permesi la interpretisto simple printi ĝin por mi. Do vi ne fakte nur havas havi unu aron de PHP delimitadores en via programo. Vi povas fakte havi plurajn el ili, malfermante kaj fermante ilin laŭbezone. Do ni rigardu ĉe kelkaj programoj en CS50 IDE kie ni ilustri tiun ideon de havado multoblaj aroj de limigitaj PHP. Bone, do mi malfermis dosieron tie nomata add1.php. Kaj rimarki kio okazas tie. Ĝuste kiel antaŭe, mi havas sola PHP aro de limoj. Mi tuj presi la mesaĝo, "Bonvolu doni al mi kelkajn." Tiam mi tuj legis linion kaj stoki ĝin en la variablo $ num1. Tiam mi tuj presi denove. Donu al mi duan numeron. Legu linion de la uzanto, vendejo ajn ili tajpitaj en en $ num2. Aldoni ilin kune kaj stoki tio rezultigi variablon nomita $ sumo, kaj tiam presi, "La sumo de tiuj du nombroj estas, "kaj tiam interpellate ekzistas la variablo $ sumo. Do ni nur kuri ĉi tra la interpretisto konfirmi ke ĉi tio estas kion ni atendas. php add1.php. Bonvolu doni al mi kelkajn, 3. Bonvolu doni al mi la duan numeron, 4. La sumo de ĉi tiuj du nombroj estas 7. Jen 3 plus 4. BONE? Do nenio terure imago tie. Kaj nun ni malfermu add2.php. Ĉi tie, mi havas kelkajn de PHP limigita aroj tie, ĉu ne? Linioj 1, 3-- linioj 1 kaj 3 havas neniun PHP delimitadores. Do kiam la interpretisto vidas ilin, estas nur tuj kraĉis precize kion mi tajpis tie. Do jen kie mi estas fari cxiujn miajn instigante. Sur linioj 2 kaj 4, ni vidos la tre familiara $? php ia delimitadores, do tiuj du linioj estas tuj ekzekuti kiel PHP. Kaj tiam sur linio 5 Mi havas ĉi stranga afero ĝuste ĉi tie, ĉu ne? Tiu angulo krampo demandosigno egalsigno. Mi eĉ zomi iomete plu. Vi povas vidi ĉi estas kio mi estas parolas rekte tie, ĉi $? =. Ĝi rezultas ke ĝi estas tiel komuna ol la kialo ke ni malfermu aron de PHP delimitadores estas presi valoro. Kaj jen ĉio ni tuj faros. Sed estas eĉ stenografio por tio. $? = Estas PHP stenografio por dirante io kiel $? php echo sumo de num1 kaj num2. Do tiu estas nur alia stenografio por tio. Do se mi kuros ĉi programo, php add2.php. Mi zomi malsupren iomete. Bonvolu doni al mi kelkajn, 4. Bonvolu doni al mi la duan numeron. Kaj ĉar mi ne vere zorgas pri datumtipoj en PHP, mi povas diri 4.8. La sumo de ĉi tiuj du nombroj estas 8.8. Domadministranto kondutas preskaux precize samaj kiel ni atendus, ankaŭ. Mi havas unu pli malfermita tie supre nomitaj dice.php. Provu tion denove. Mi havas unu pli tie nomas dice1.php, kiu ankaŭ, vidas, havas tiun angulon krampo demando marki egalsigno notacio tien, sed rimarki ke en ĉi tiu kazo mi estas vokanta la funkcio rand, kiu kiel vi povus atendi generas hazarda nombro. "Vi alrulis," kaj ĝi tuj kalkuli iuj hazardaj nombraj, mod 6 + 1. Por ke donos min nombro en la gamo de 1 ĝis 6. Memoru ke mod 6 donus min nombro en la intervalo de 0 ĝis 5, sed se mi simulante ĵetkubon ruloj, kiu estas kion mi faras ĉi tie, Mi ne volas ĉi tiuj ĵetkuboj iri de 0 5 Mi volas ĵetkuboj kiuj iras de 1 al 6. Kaj tiel tio estas maniero akiri Mi en la gamo de 1 ĝis 6. Mi faras ĉi dufoje. Do ŝajne mi ruliĝante du ĵetkuboj en tiu programo. Do mi devos purigi mian ekranon, kaj mi faros php dice1.php. Vi alrulis 4 kaj 2. Kaj se mi kuros la programon denove, vi alrulis 5 kaj 5. Do ĉiufoje mi kuri la programon, Mi ricevas malsamajn nombrojn, ĉar ĉiufoje mi fari Do, estas startanta super. Ĝi tuj generi novan aro de hazardaj nombroj por mi. Do se estas kutimitaj kurante programoj de C, ni kutime tajpante ./ la nomon de programo, ĉu ne? Tiel estas kiel ni faris ĉiuj de niaj programoj en C ĝis nun. Ni povas fari tion en PHP same aldonante ion nomatan a shebang la supron de nia PHP-dosiero. Mi scias ĝin estas afabla de stulta vorto. Ĝi estas mallongigo de hash bang. Tio estas la unuaj du karakteroj tie. Memoru ni nomas ekkrion punkto ofte krako en komputiko. Ĝi ankaŭ eble estos por akra krako. Ekzistas paro manieroj interpreti ĝin. Sed estas esence speciala speco de ordonos ke la PHP interpretisto komprenas kiel, ho, mi volas vi ekzekuti tiu programo, kiu estas ŝajne / uzanto / bin / php, kiu estas reale kie la PHP interpretisto specife vivas sur nia sistemo. Do it's-- kio okazas ĉi tie estas la interpretisto komprenas, ho, Mi ŝajne supozis uzi en tiu programo por kuri ĉi tiu dosiero. Kaj tiel permesas salti super la ŝtupo devi diri php something.php. Ekzistas unu alia kaptaĵo tie, kio estas ke se ni volas nia programoj labori kiel atendis, ni bezonas fari ion nomatan dosiero permeson ŝanĝo. Kaj ni vidos go-- kaj parolas iom iom pli pri dosiero permeson ŝanĝoj en nia vídeo sur MVC, sed sufiĉas diru ke ĉi tio estas kion vi devas fari por fari vian .php dosierojn plenumebla. Do ni rigardu tiun kiel nia fina ekzemplo super en CS50 IDE. Do jen en IDE mi havas du dosierojn en tiu PHP dosierujo kiuj aperas ne esti nomata .php. Mi havas funkcion nomita add-- Mi havas dosieron nomatan add3 kaj dosiero nomata dice2. Do ni prenu rapidan rigardi kaj malfermu add3. Kaj kiel vi povas vidi, komence de mia dosiero mi havas ĉi shebang, dekstra? Ĉi hash markon ekkrion punkto. Nun, vi ankaŭ eble rimarkas ke ial, Mi ne havas ajnan sintakso elstarigante plu, kaj jen, kion mi aludis al pli frua, kio estis ke se mi ne enoficigas mian dosieron Php, mi ne havas la profito de sintakso reliefigante anymore. Ĉi tiu dosiero estas simple nomita add3. Por ke mi povas kuri ĝin poste kun ./ add3 kaj ne ./ add3.php. Do la reason-- ĝi estas ankoraŭ bone, ĝi estas ankoraŭ valida PHP, sed ĝi ne estas sintakso elstarigita, ĉar ĉi dosiero ne estas nomita something.php. Tio estas la sola reala diferenco tie, plus la shebang. Do ni vidu kio okazas kiam Mi provas kaj ruli tiun programon. ./ Add3, samkiel mi farus kun C. Bash. ./ Add3 permeson neita. Jen kion vi tuj ĉu vi forgesas uzi la chmod komando ŝanĝi la permesojn de la dosiero. Kiel ĝi rezultas, regula PHP dosieroj povas ne nur esti ekzekutita. Ili povas esti interpretita, sed ni estas fari ion iom malsama ĉi tie. Ni ekzekuti ĝin. Kaj tial mi devas aldoni la permeson de ekzekuto, chmod a + x al add3. Tiam mi povos diri ./ add3. Bonvolu doni al mi kelkajn. 5, 6. La sumo de ĉi tiuj du nombroj estas 11. Simile, mi jam chmoded dice2, do mi povas simple tajpi ./ dice2, vi alrulis 1 kaj a 1, vi alrulis 5 kaj 4, kaj tiel plu. Do jen preskaux la ideo de PHP sintakso, dekstra? Estas multe por trairi, mi scias. Sed espereble vi vidis nun ke PHP ne vere tiel malsama de C kaj vere donas al ni la eblon preni aĵojn muesca aŭ du. Ni ne vere devas maltrankvili tro multe about-- ni ne vere devas maltrankviligi tro multe pri la malalta nivelo detaloj ni devis maltrankviligi kun C, dekstra? Ni povas koncentri sur la pli altaj nivelo aĵoj ke PHP permesas nin fari kaj preni por donita ke ĝi funkcios por ni. Do ĝi donas al ni la eblon nun, transitioning de C al PHP, fari programojn kiuj estas multe pli kompleksa kaj eble multe pli fortikaj. Do mi esperas vin havas amuzan laborista kun PHP, kaj mi estas Doug Lloyd. Jen CS50.