[Powered by Google Translate] [Sekcio 8 - Pli Vasta] [Rob Bowden - Universitato Harvard] [Jen CS50. - CS50.TV] Tiuj semajno sekcio notoj tuj estos bela mallonga, tial Mi simple intencas subteni parolante, vi infanoj tuj observu demandojn, kaj ni provos plenigi tiel tempo ebla. Multaj homoj pensas ke ĉi pset ne estas nepre malfacila, sed ĝi estas tre longa. La pset spec mem prenas unu horo por legi. Ni donas al vi multe da SQL vi povus bezoni uzi. Ni iru vi per multe da ĝin, do ĝi ne devus esti tro malbona. Ĉu iu komencas aŭ finas? Ĝi estas la lasta pset. Ho, mia Dio. Kutime tie estas JavaScript unu post ĉi tio, sed kalendaro ŝanĝo aĵoj faras cxion 1 semajno pli mallonga, kaj ni ne plu havas JavaScript pset. Mi ne scias kiel tio efikas ĉu JavaScript tuj aperos en la ekzameno aŭ Kvizo 1. Mi imagas ke estos iu kiel vi devas scii altnivela aferojn pri JavaScript, sed mi dubas, ni volas nur doni al vi rekte JavaScript kodo ĉar vi ne havis pset en ĝi. Sed tio estos ajxojn kvizo revizio proksima semajno. Sekcio de demandoj. Multaj ĉi aĵoj estas iom malbone worded, sed ni diskutis kial. Kontraste C, PHP estas "dinamike-tajpita" lingvo. Kion tio signifas, vi demandas? Nu, diru adiaŭ al ĉiuj el tiuj char, kaleŝego, int, kaj aliaj ŝlosilvortoj vi bezonas uzi kiam deklari variablojn kaj funkcioj en C. En PHP, variablo estas tipo estas determinita de la valoro kiu ĝi estas aktuale tenas. Do antaŭ ol ni tajpi tiun kodon en dosiero nomata dynamic.php, PHP estas dinamike tajpita. Tio estas vera. Mi malkonsentas kun la fakto ke tiu signifas ni adiaŭi char, kaleŝego, int, kaj aliaj ŝlosilvortoj. La ĝusta diferenco inter dinamike tajpitaj kaj la alternativo, kiu estas statike tajpis, estas ke dinamike tajpita, ĉiuj de viaj tipo kontrolanta kaj stuff okazas je tempo de ekzekuto, dum statike tajpis okazas ĉe kompila tempo. La vorto statika ĝenerale ŝajnas signifi kompila tempo aĵoj. Mi supozas ke estas aliaj uzoj por gxi, sed en C, kiam vi deklaras statika variablo, lia stokado destinis je kompili tempo. Ĉi tie, dinamike tajpita nur signifas ke - En C se vi provas aldoni ĉenon kaj entjero, kiam vi kompili ĝin, ĝi tuj plendi ĉar tuj diru, ke vi ne povas aldoni int kaj puntero. Estas nur ne estas valida operacio. Tio estas alia afero, ke ni ricevos por en dua. Sed tia kontrolanta, la fakto ke ĝi plendas je kompila tempo, estas statika tipo kontrolanta. Ekzistas lingvoj, kie vi ne bezonas diri char, kaleŝego, int, kaj ĉiuj el tiuj aĵoj, sed la lingvo povas diri el la kunteksto de la aĵo kion tipo ĝi estas supozitaj esti, sed ĝi estas ankoraŭ statike tajpita. Do, se vi prenas 51, Ocaml, vi neniam devas uzi iun el tiuj tipoj, sed ankoraŭ estos en kompila tempo diros vi ne povas fari ĉi tion ĉar vi miksante kun int kaj linio. Dinamike tajpita nur signifas ke iam dum kuri tempo vi ricevos plendon. Se vi ankaŭ uzas Java antaŭe, en ĝenerala, preskaŭ neniu C-tipo lingvo tuj estos statike tajpita, do C, C + +, Java, ĉiuj el tiuj estas ĝenerale statike tajpita. En Java kiam vi kompili ion kaj vi diras kordoj s egalas nova iu kiu ne estas linio, ke tuj plendi pro tiuj tipoj simple ne kongruas supren. Tio tuj plendi ĉe kompila tempo. Sed ĝi ankaŭ havas kelkajn dinamikajn tempo aĵoj kiel se vi provas jxetu ion al tipo, ke estas pli specifaj ol ĝia aktuala tipo, ekzistas nenio povas fari je kompila tempo por kontroli ĉu kiuj jxetas tuj sukcesos. Java ankaŭ havas kelkajn dinamikajn tipo kontrolanta ke tuj kiam ĝi alvenas al tiu linio de kodo kiam ĝi estos reale ekzekuti, ĝi tuj faros la dividon, kontroli ĉu kiuj jxetas estis valida en la unua loko, kaj se ne estis, tiam ĝi tuj plendas ke vi havas nevalidan tipon. Dinamika tipo checking. Tajpi ĉi tio en dosieron nomatan dynamic.php. Dynamic.php. Mi maldensigi ke strukturado. Ni havas variablo, ni starigis gxin al la entjera 7, tiam ni tuj presi ĝin kaj% s - Ho, ni presi la tipo de ĝi, do gettype tuj revenos la tipo de la variablo. Ni nur presi la tipo denove kaj denove. Ni nur php.dynamic.php. Ni vidos kiu ŝanĝas de entjeraj al ŝnuro al Bulea kiel ni trairi. En C ne estas Bulea datumtipo, ne estas ŝnuro datumtipo. Estas char * kaj Buleaj simple emas esti int aŭ char aŭ iu. En PHP tiuj tipoj ja ekzistas, kaj tio estas unu el la grandaj avantaĝoj de PHP super C - ke kordoj operacioj estas malfinie pli facile en PHP ol C. Ili simple funkcios. Do ni revenu ĉi tien. Ni kuris dynamic.php. Ĉi tiu diras la PHP interpretisto, nomita php, por kuri la PHP-an kodon en dynamic.php. Se vi havas erarojn en la dosiero, la interpretisto diros al vi! La interpretisto, ĉi tio estas alia granda diferenco inter PHP kaj C. En C vi devas kompili ion kaj poste vi kuras kiu kompilis dosiero. En PHP vi neniam kompili ion. Do la PHP interpretisto estas esence nur legi tiun linion por linio. Ĝi batas var = 7 tiam batas printf tiam batas var tiam batas printf kaj tiel plu. Estas iom da kompili ĝin faras, kaj ĝi cachés la rezultoj do se vi kuros al la skripto poste vi povas fari iuj, sed esence ĝi estas linio por linio tiaj aferoj. Tio signifas, ke multo el la optimizaciones ke ni atingos en C, kiel kompili, estas nur ĝenerale la tradukilo povas fari multajn lertaĵojn por vi. Ĝi povas porti ekstere neuzitaj variabloj ĝi povas fari ĉiujn tiajn aferojn, ĝi povas fari vosto rekursio. En PHP vi ne tuj atingi tiun avantaĝon ĉar ĝi estas nur tuj komencos ekzekuti linion por linio por linio, kaj ĝi ne vere rekonas tion tiel facile pro tio ke ĝi ne estas 1 granda kompilaĵo pasas super la aferon kaj tiam ekzekuto; estas nur linio por linio. Do jen la interpretisto. Back al nia dinamika tajpante: bela malvarmeta, ĉu? Vi certe ne povis fari tion en C! Nun, ĉu vi povas eltrovi la tipon de ĉiu el la sekvaj valoroj. Vidu ĉi por via referenco. Do 3,50. Kian vi opinias ke tuj estos? Jen la tipoj ni havas. Ni havas bools, entjeroj, flosanta punktoj, kordoj, tabeloj, celoj, kaj tiam rimedoj, kiu estas speco de malpreciza. Mi kredas ke estas reale ekzemplo tie. Tiam ekzistas NULL. NULL estas speciala tipo. Kontraste C kie NULL estas nur montrilo kun adreso 0, en PHP, NULL estas ĝia propra tipo kie la sola valida afero de tiu tipo estas NULL. Tiu estas multe pli utila por eraro kontrolanta. En C, kie ni havis ĉi temon kie se vi revenos NULL, tio signifas ke vi reveni al NULL puntero aŭ uzante NULL por signifi eraron aŭ ĉiuj kiuj konfuzo ni havis ĉe unu punkto. Jen, revenante NULL ĝenerale signifas eraron. Multaj aĵoj ankaŭ revenos malvera por eraro. Sed la punkto estas la NULL tipo, la sola afero de la NULL tipo estas NULL. Tiam callback estas kiel vi povas difini iujn anonima funkcioj. Vi ne devas doni la funkcio nomon, sed vi ne devas trakti ĉi tie. Rigardante la tipoj ke ili atendas ke ni scias, kion vi opinias la tipo de 3,50 estas? >> [Studento] Float. Yeah. Tial ĉi tie, kion vi opinias la tipo de tio estas? >> [Studento] array. Yeah. La unua estis kaleŝego, la dua estas tabelo. Rimarku ke tiu tabelo ne estas kiel C tabelo kie vi havas indicon 0 havas iun valoron, indico 1 havas iu valoro. Tie la indeksoj estas a, b, kaj c kaj la valoroj estas 1, 2, kaj 3. En PHP ne estas diferenco inter asociaj tabelo kaj simple regula tabelo kiel vi pensus pri tio en C. Estas ĝuste tio, kaj sub la kapuĉo regula tabelo estas nur asocieca tabelo kie 0 mapoj por iu valoro de la sama maniero oni mapoj por iu valoro. Por tio, PHP povas esti sufiĉe malbone por vere rapida kodo / etalonanta aĵoj pro tio ke en C kiam vi uzas tabelo vi scias, ke aliri membro estas konstanto tempo. En PHP alirante membro estas kiu scias kiom da tempo? Estas probable konstanta se hashes ĝuste. Kiu scias kion ĝi estas vere faras sub la kapuĉo? Vi vere bezonas rigardi la efektivigo vidi kiel tuj trakti tion. Tial fopen. Mi kredas tie lasu la ĵus PHP manlibro fopen rigardi la reveno tipo. Ni vidas ĉi tie vi povas serĉi preskaux neniun funkcion en la PHP-manlibro kaj jen estas ia la viro paĝo de PHP. La reveno tipo tuj estos rimedo. Tial mi rigardis ĝin, ĉar ni ne vere difini rimedo. La ideo de rimedo, en C vi ia got a DOSIERO * aŭ kion ajn; en PHP la rimedo estas via DOSIERO *. Estas kion vi tuj estos legado de, estas kion vi tuj skribos al. Estas kutime ekstera, do ĝi estas rimedo vi povas tiri aĵoj de kaj ĵeti aĵojn al. Kaj fine, kio estas la tipo de NULL? >> [Studento] NULL. Yeah. Do la sola afero, kiu estas NULL estas NULL. NULL estas NULL. Unu karakterizaĵo de PHP la tipo sistemo (por pli bona aŭ por malbona) estas lia kapablo juggle tipoj. Kiam vi skribas linion de PHP kodo kiu kombinas valorojn de malsamaj tipoj, PHP provos fari la sentiva afero. Provi ĉiu el la sekvajn liniojn de PHP-kodo. Kio presita ekster? Ĉu tio, kion vi atendas? Kial aux kial ne? Tiu fakto pri PHP estas kion faras kion ni nomas malforte tajpitaj. Malforte tajpis kaj forte tajpita, estas malsamaj uzoj por tiuj terminoj, sed plej multaj homoj uzas malforte tajpis kaj forte tajpis al signifi ĉi tiaj aferoj kie ("1" + 2); kiu funkcias. En C kiu ne funkcias. Vi povas imagi tiun ne funkcias. Multaj homoj konfuziĝas dinamika tajpi kaj malforta tajpi kaj statika tajpi kaj forta tajpi. Python estas alia ekzemplo de lingvo ke tio dinamike tajpita. Vi povas ĵeti ĉirkaŭ tipoj en variabloj kaj ĝi okazas por determini, je tempo de ekzekuto neniu eraro checkings. En Python ĝi tuj ekzekuti ĉi kaj vidos ("1" + 2); kaj ĉi malsukcesos ĉar ĝi diras vi ne povas aldoni ĉenon kaj entjero. En PHP, kiu estas same dinamike tajpita, ĉi tio ne maltrafi. Malforta tajpante devas vidi kun la fakto ke ĝi faras tion kun tipoj kiuj ne vere havas sencon nepre. Do ("1" + 2), mi povas imagi ke estas la kordoj 12, mi povas imagi ĝin esti la kordoj 3, Mi povas imagi ke estas la entjero 3. Oni ne nepre bone difinitaj, kaj ni probable tuj vidos ĉi tie ke kiam ni presi ("1" + 2); ĝi estas probable tuj finos esti malsama ol presi (1 + "2"). Kaj tiu emas esti, en mia opinio, por la plej malbona. Ĉi tie ni povas provi tiujn. Alia iom lertaĵo pri PHP estas vi ne bezonas efektive skribi la dosieron. Ĝi kuris ĉi komanda modo. Do php-r, tiam ni povas ĵeti en la komando tie: "Print ('1 '+ 2)," kaj mi ĵetos novan linion. Ĉi presita 3. Ĝi aspektas kiel ĝi presas 3 kaj ĝi estas la entjero 3. Do nun ni provu la alia vojo ĉirkaŭ: "Print (1 + '2 '); Ni preni 3, kaj estas ankaŭ tuj estos entjero 3? Mi honeste ne scias. Ĝi aspektas kiel tio estas konsekvenca. Ekzistas neniam ajn Ebla ĝin esti la kordoj 12 aŭ io simila ĉar PHP, kontraste JavaScript kaj Java tro, havas apartan operatoro por kunmeto. Kunmeto en PHP estas punkto. Do impreso (1. '2 '); Tuj donos al ni 12. Ĉi inklinas kondukas al konfuzo kie homoj provas fari ion kiel str + = iu alia afero, ke ili volas aldoni al la fino de lia ĉeno, kaj tio tuj maltrafi. Vi devas fari str. = Do ne forgesu kunmeto en PHP estas punkto. Aliaj aferoj por provi: presi ("CS" + 50); Mi diris al vi, ke ne ekzistas espero de ĉi rezultas en CS50 ekde kunmeto ne +. Kion vi pensas ĉi tiu tuj finos esti? Mi honeste havas absolute nenian ideon. Ĝi aspektas kiel ĝi estas nur 50. Ĝi vidas la ŝnuron, kaj mi vetas se ni metas 123CS - Ĝi vidas la unua linio, ĝi provas legi entjero el ĝi aŭ numeron de ĝi. En ĉi tiu kazo vidas 123CS. "Tio ne havas sencon kiel entjero, do mi simple tuj pensas pri 123." Do 123 + 50 tuj estos 173. Kaj jen ĝi komencas legi tion kiel entjero. Ĝi ne vidas ion, do nur traktas ĝin kiel 0. Do 0 + 50 tuj estos 50. Tiu Mi supozante tuj faros iu simila. Mi pensas 99. Yeah, ĉar ĝi tuj preni la unua - Do 99. Tie (10/7), se tio estis C, kio estus, ke revenos? [Studento] 1. >> Jes, estus 1 ĉar 10/7 estas dividanta 2 entjeroj. Entjero dividita de entjero tuj revenos entjero. Ĝi ne povas reveni 1 punkto ajn kiu estus, do ĝi estas ĝuste tuj revenos 1. Jen presi (10/7); ĝi tuj efektive interpretas tion. Kaj tio signifas ke se vi vere volas fari entjero rondas kaj da tio, Vi devas fari print (etaĝo (10/7)); En C estas probable stranga ke vi povas fidi entjero tranĉon regule, sed en PHP vi ne povas ĉar ĝi aŭtomate igi ĝin kaleŝego. Kaj tiam (7 + vera); kion vi opinias ke tuj estos? Mi konjektas 8 se tuj interpretas vera kiel 1. Ĝi aspektas kiel ĝi estas 8. Do, frazoj ni faris en la lastaj 10 minutoj vi devus absolute neniam faros. Vi vidos kodo kiu tion faras. Ĝi ne devas esti tiel rekta kiel ĉi tio. Vi povus havi 2 variabloj, kaj 1 variablo hazarde estas cxeno kaj la alia variablo okazas al esti int, kaj tiam vi aldonu tiuj variabloj kune. Ekde PHP estas dinamike tajpis kaj ne faros tipo kontrolanta por vi kaj pro tio ĝi estas malforte tajpis kaj pro tio ke ĝuste aŭtomate ĵeti tion kune kaj ĉiu estos nur funkcias, estas malfacile eĉ scias, ke ĉi tiu variablo devas esti ĉeno nun, do mi ne devas aldoni ĝin al tiu variablo, kiu estas entjero. Bona praktiko estas se variablo estas ĉeno, konservas gxin kiel linio ĉiam. Se variablo estas int, konservas gxin kiel int ĉiam. Se vi volas trakti entjeroj kaj kordoj, vi povas uzi varsint - tio estas JavaScript. Intval. Mi tion faras la tutan tempon. PHP kaj Javascript mi ​​miksas ĉion. Do intval tuj revenos la entjera valoro de variablo. Se ni pasas en "print (intval ('123 ')); vi ricevas 123. Intval mem ne faros la ĉekon por ni, ke estas ekskluzive entjero. La PHP-manlibro, tie estas nur tiom da funkcioj estas disponeblaj, tial jen Mi kredas kion mi uzus estas is_numeric unua. Mi konjektas, ke revenis falsaj. Tio estas alia afero ni devas iri super estas ===. Do is_numeric ('123df '), vi ne pensas pri tio kiel is_numeric. En C vi devus persisti super ĉiuj karakteroj kaj kontroli por vidi se ĉiu gravulo estas cifera aŭ kion ajn. Jen is_numeric tuj fari tion por ni, kaj ĝin redoni malvera. Do kiam mi presis tion, presita nenion, do tie mi kompari ĝin vidi, vi hazarde estas falsaj? Kaj tial nun ĝi estas presi 1. Ŝajne ĝi presas 1 kiel vera anstataŭ presi vera kiel veran. Mi demandas min se mi faras print_r. Ne, ĝi ankoraŭ faras 1. Reiros al ===, == ankoraŭ ekzistas, kaj se vi parolos al Tommy li diros == estas perfekte bela. Mi intencis diri, ke == estas terura kaj vi devas neniam uzi ==. La diferenco estas ke == komparas aferojn kie povas esti vera eĉ se ili estas ne la sama tipo, dum === komparas aferojn kaj unue ĉekojn estas ili la sama tipo? Jes. Okay, nun mi iros por vidi se ili efektive komparas al esti egala. Vi ricevas strangajn aĵojn kiel 10 egalas - Ni vidu kion tiu diras. Do ('10 '== '1 kaj1'); Ĉi revenas vera. Ĉu iu havas divenas kial ĉi revenas vera? Ĝi estas ne nur pri tio. Eble ĉi tiu estas aludo. Sed se mi ŝanĝi tion al f - Darn ĝin! Mi plu uzi duobla citaĵoj. La kialo de la duoblaj citiloj estas kriante min estas ĉar mi metis tion en duoblaj citiloj. Do mi povis eskapi la duobla citaĵoj en ĉi tie, sed sola citaĵoj plifaciligi. Do ('10 '== '1 f1'); ne presi vera. ('10 '== '1 Kaj1'); presas vera. [Studento] Ĉu deksesumajn? >> Ne deksesumajn, sed estas proksimaj, ke ĝi estas kiel - 1e1, scienca skribmaniero. Ĝi rekonas 1e1 kiel 1 * 10 ^ 1 aŭ kion ajn. Tiuj estas egalaj entjeroj. Se ni faras === tiam tuj estos falsaj. Mi vere ne scias se ni faru == kio pri (10 kaj '10abc ');? Bone. Do tio estas vera. Do ĝuste kiel kiam vi faris (10 + '10abc '), kaj ke estus 20, tie (10 == '10abc '); estas vera. Eĉ pli malbone estas aĵoj kiel (falsaj == NULL); estas vera aŭ (falsa == 0); estas vera, (falsa == []); Estas stranga kazoj de - Tio estas unu el tiuj strangaj kazoj. Rimarku ke (falsa == []); estas vera. ('0 '== Falsa); estas vera. ('0 '== []); Estas falsaj. Do == estas neniel transitiva. oni povas esti egala al b kaj a povas esti egala al c, sed b povus ne esti egala al c. Tio estas abomenajxo por mi, kaj vi devus ĉiam uzi ===. [Studento] Ĉu ni faras! == Tiel? >> [Bowden] Jes. La ekvivalenta estus! = Kaj! ==. Tiu estas vere edukita en la pset spec kie multajn funkciojn reveno - La PHP-manlibro estas bona pri tiu. Ĝi metas en grandan ruĝan skatolon, "Ĉi revenos malvera se estas eraro." Sed revenante 0 estas perfekte racia afero reveni. Pensu pri ajna funkcio kiu atendas por reveni entjero. Diru tiu funkcio estas supozata grafo la nombro de linioj en dosiero aŭ iu. Sub normalaj cirkonstancoj, sekvinberoj tiu funkcio dosieron kaj tuj revenos entjero kiu reprezentas la nombron de linioj. Do 0 estas perfekte racia nombro se la dosiero estas ĝuste malplena. Sed kion se vi pasas ĝin malvalida dosieron kaj la funkcio okazas reveni malvera se vi pasas ĝin nevalida dosiero? Se vi ĵus fari == vi ne diferencante la kazo inter nevalida dosiero kaj malplenaj dosiero. Ĉiam uzi ===. Tio estas ĉio el tiuj. En PHP, la tabelo tipo estas malsama de kion vi kutimi en C. Ja, vi eble jam rimarkis ĉi supre kiam vi vidis, ke tio estas de tipo tabelo. La krampo sintakso estas nova kiel de PHP 5.4, kiu estas la plej nova versio de PHP. Antaŭ tio vi ĉiam havis por skribi array ('a' -> 1, 'b' -> 2. Tio estis la konstruilo por tabelo. Nun PHP finfine venis ĉirkaŭ la bela sintakso de nur kvadrataj krampoj, kio estas ĝuste tiel bona ol tabelo. Sed konsiderante PHP 5.4 estas la plej nova versio, vi eble renkontos lokoj kiuj eĉ ne havas PHP 5.3. Super la somero ni kuris al tiu demando kie PHP 5.3 estis kio ni havis sur la aparaton, sed la servilo kiun ni disfaldis ĉiujn niajn lernojaro libron kaj submeti kaj cxio, kion uzatajxojn, por Estis PHP 5.4. Ne sciante, ni disvolvis en 5.3, puŝis al 5,4, kaj nun subite neniu el niaj kodo funkcias ĉar ne okazis esti ŝanĝoj inter 5,3 kaj 5,4 kiuj ne estas kongrua, kaj ni devas iri, kaj ripari ĉiujn niajn aferojn kiuj ne funkcias por PHP 5.4. Por ĉi tiu klaso, ĉar la aparaton faras havi PHP 5.4, ĝi estas perfekte bone uzi kvadrataj krampoj. Sed se vi serĉas aferojn ĉirkaŭ la Interreto, se vi serĉas supren ia tabelo stuff, plej probable vi tuj vidos la sorĉas ekster tabelo konstruilo sintakso de tiu jam pasis ĉirkaŭ ekde PHP naskiĝis kaj kvadrata krampo sintakso estis ĉirkaŭ dum la lastaj kelkaj monatoj aŭ kiam 5.4 venis ĉirkaŭe. Jen kiel vi indekso. Ĝuste kiel en C kiel vi farus indekso de kvadrataj krampoj kiel $ tabelo [0], $ tabelo [1], $ tabelo [2], Referencoj same se vi hazarde havas vian indeksoj esti kordoj. Do $ tabelo ['a'] kaj $ tabelo ['b']. $ Tabelo [b]. Kial ĉi esti erara? Ĝi verŝajne generi averto sed ankoraŭ funkcias. PHP inklinas fari tion. Ĝi inklinas simple, "Mi iros por averti vin pri tio, sed mi simple tuj plu iri "Kaj fari kion ajn mi povas." Ĝi verŝajne traduki ĉi tion al cxeno, sed eblas ke en iu punkto en la pasinteco iu diris difini b esti 'HELLO MONDO'. Do nun b povus esti konstanta kaj $ tabelo [b] efektive faros 'HELLO MONDO'. Mi kredas je ĉi tiu punkto, aŭ almenaŭ nian PHP agordoj, se vi provos indekson en tabelo kaj tiu ŝlosilo ne ekzistas, ĝi malsukcesos. Mi ne kredas ke estos nur averti vin. Aŭ almenaŭ vi povas agordi ĝin por ke ĝi ne nur averti vin, simple rekte malsukcesas. La vojo vi kontrolu por vidi se vere estas tia indico estas isset. Do isset ($ array ['HELLO MONDO']) revenos falsaj. isset ($ array ['b']) revenos vera. Vi povas miksi tiujn sintakso. Mi estas bela certa kio estas tiu tabelo finus estante estas - Ni povas provi ĝin. Ho, mi bezonas PHPWord. Ĉi tiu estas miksante la sintakso, kie vi precizigi kion la ŝlosilo estas kaj vi ne precizigi, kion la ŝlosilo estas. Do 3 dekstra tie estas valoro. Vi ne eksplicite diris kion ĉefaj tuj estos. Kion vi pensas ĉefaj tuj estos? [Studento] 0. >> Mi konjektas 0 nur ĉar ĝi estas la unua ni ne specifita. Ni povas vere fari paron de ĉi tiuj kazoj. Do print_r estas presi rekursie. Ĝi estos presi la tuta tabelo. Estus presi subarrays de la tabelo se estis neniu. Do print_r ($ array); php.test.php. Ĝi aspektas kiel ĝi donis ĝin 0. Estas vere ion memoru ĉi tie, sed ni reiros al ĝi en dua. Sed kion se okazos al fari ĉi tiu indekso 1? PHP ne diferencas inter kordoj indeksoj kaj entjero indeksoj, tial je ĉi tiu punkto mi ĵus difinita indekso 1 kaj mi povas fari ambaŭ $ tabelo [1] kaj $ tabelo ['1 '] kaj tio estos la sama indico kaj la sama ŝlosilo. Do nun kion vi opinias 3 tuj estos? >> [Studento] 2. >> [Bowden] Mi konjektas 2. Yeah. Estas 2. Kio se ni faris ĉi estas 10, tio estas 4? Kion vi opinias la indekso de 3 tuj estos? Mi pensas 11. Mian konjekton pri kio PHP faras - kaj mi kredas ke mi vidis ĉi tion antaŭe - Estas simple subtenas spuron de tio, kion la plej alta nombraj indekso ĝi estas uzata ĝis nun estas. Oni neniam tuj asigni string indekso al 3. Ĝi ĉiam estos nombraj indekso. Do ĝi konservas trako de la alta ĝi estas atribuita ĝis nun, kiu hazarde estas 10, kaj ĝi tuj donas 11 al 3. Kion mi diris antaŭe, rimarki la vojo estas videbligi tiun tabelo. Ĝi presas ŝlosilo 10, ŝlosilo 4, ŝlosilo 11-ŝlosilo d. Aŭ eĉ lasu faru - Mi supozas mi ne metis 0, sed estas pres 1, 2, 3, 4. Kio se mi ŝanĝi ĉi tie? Aŭ lasu la reale ŝanĝi tiujn 2. Nun presas 2, 1, 3, 4. PHP estas tabeloj ne estas nur kiel viaj regulaj hash tablo. Estas perfekte racie pensi ilin kiel hash tabloj 99% de la tempo. Sed en via hash tabloj ne estas senco de la ordo en kiu aĵoj insertos. Tuj, kiam vi enmetas gxin en viajn hash tablo, supozi ne estas ligitaj listo kaj vi povus juĝi ene de ligitaj listo kiu estis insertos unua. Sed ĉi tie ni insertos 2 unuaj kaj scias kiam ĝi estos presi tiun tabelo ke 2 estas la unua. Ĝi ne presi gxin en nur ajna ordo. La teknikaj datumoj strukturo kiu ĝi estas uzanta estas ordigita mapo, tiel mapas ŝlosilojn al valoroj kaj ĝi memoras la ordo en kiu tiuj klavoj insertaban. Esence ĝi estas por iuj komplikaĵoj kie ĝi estas ĝena por fakte - Diru vi havas tabelo 0, 1, 2, 3, 4, 5 kaj vi volas preni el indekso 2. Unu maniero fari ĝin, vidu kion tio aspektas. 0, 2, 1, 3, 4. Unset okazas al unset ambaŭ variabloj kaj batalarangxis indeksoj. Do unset ($ array [2]); Nun kio ĉi tuj aspektas? 2 estas simple malaperis, do tio estas perfekte bela. Pli ĝena estas se vi volas aĵojn por fakte esti kiel tabelo. Mi metos hazardaj nombroj. Nun rimarki mian indeksoj. Mi volas tio por nur esti kiel C tabelo kie iras de 0 al longo - 1 kaj mi povas persisti super ĝin kiel tia. Sed tuj kiam mi unset la dua indico, kio estis en indekso 3 ne fariĝis indekso 2. Anstataŭ simple forigas ke indekso kaj nun vi iru 0, 1, 3, 4. Ĉi tiu estas perfekte racia. Estas nur tedas kaj vi devas fari tion kiel tabelo splice. Yeah. [Studento] Kio okazus se vi havus por buklo kaj vi volis iri super ĉiuj elementoj? Kiam koliziis 2, ĉu cedi iam? Ripetanta super tabelo. Estas 2 manieroj vi povas fari tion. Vi povas uzi regula por buklo. Tio estas alia intricacy de PHP. Plej lingvoj, mi dirus, havas ian longon aŭ len aŭ io indikante la longo de tabelo. En PHP estas grafo. Do grafo ($ array); $ i + +) Lasu la ĵus presita ($ array [$ i]); Avizo: Nedifinita kompensi: 2. Ĝi simple tuj maltrafi. Ĉi tiu estas la kialo ke, plejparte, vi neniam bezonos ankaŭ persisti super tabelo ŝatas tion. Povus esti troigo, sed vi neniam bezonos ankaŭ persisti super tabelo kiel tiu ĉar PHP provizas lia foreach sintakso kie foreach ($ array kiel $ listero). Nun se ni presi ($ ero); - we'll diskuti ĝin en dua - kiu funkcias perfekte bela. La vojo kiu foreach laboras estas la unua argumento estas la tabelo, ke vi ripetanta super. Kaj la dua argumento, item, tra ĉiu paŝo de la por buklo ĝi tuj preni la sekvantan aferon en la tabelo. Do memoru la tabelo havas ordon. La unua fojo por la por ciklo, item tuj estos 123 tiam estos 12 tiam estos 13 tiam estos 23 tiam estos 213. Aĵoj vere stranga kiam vi fari ion kiel foreach. Ni vidu kio okazas ĉar vi neniam faras tion. Kio se ni unset ($ array [1]); Tio verŝajne estis atendita. Vi ripetanta super ĉi tabelo, kaj ĉiufoje vi unsetting la unua indico. Do por indekso 0, la unua afero, item prenas sur valoro 0, do tuj estos 123. Sed ene de la por buklo ni unset indekso 1, do tio signifas 12 estas for. Do presi. PHP_EOL. PHP_EOL estas nur linion, sed estas teknike pli porteblaj ekde newlines en Windows estas malsama de newlines en Mac kaj Unikso. En Windows linion estas \ r \ n, dum ĉie alie ĝi tendencas nur esti \ n. PHP_EOL estas agordita por ke ĝi uzu kion ajn la linion de via sistemo estas. Do presi tiun. Ni ne print_r ($ array) al la fino. Mi tute ne sciis ke tio estus la konduto. Item ankoraŭ portas sur la valoro 12 kvankam ni unset 12 antaŭ ol ni iam alvenis al ĝi de la tabelo. Ne prenu mian vorton pri tio, sed ĝi aspektas kiel foreach kreas kopion de la tabelo kaj tiam ero prenas sur ĉiuj valoroj de tiu kopio. Do eĉ se vi modifas la tabelo interne de la por ciklo, ke tio ne gravas. Item prenos en la originala valoroj. Ni provu unsetting ĝin. Kio se ĉi tiu estas $ tabelo [1] = "saluton"; Eĉ kvankam ni metis "saluton" en la tabelo, item neniam prenas sur tiun valoron. Ekzistas alia sintakson por foreach maŝojn kie vi metis 2 variabloj apartigita per sago. Ĉi tiu unua variablo tuj estos la ŝlosilo de tiu valoro, kaj tiu dua variablo tuj estos la sama ekzakta listero. Tiu ne estas interesa cxi tie, sed se ni reiru al nia originala okazo de 'a' -> 1, 'B' -> 1, tie se ni nur persisti por ĉiu tabelo kiel eron, item tuj esti 1 ĉiun solan fojon. Sed se ni ankaŭ volas scii la ŝlosilo asociita kun tiu listero tiam ni faru kiel $ ŝlosilo -> $ listero. Do nun ni povas fari print ($ ŝlosilo. ':'. Nun ĝi estas ripetanta super kaj presi ĉiu klavo kaj lia asociita valoro. Plia afero ni povas fari en foreach maŝojn estas vi povus vidi ĉi sintakso. Ampersands antaux variablo nomoj emas esti kiel PHP faras referencoj. Kie referencoj estas tre simila al punteros, vi ne havas punteros, do vi neniam pritrakti memoro rekte. Sed vi ja havas referencojn kie 1 variablo raportas al la sama afero kiel alia variablo. Ene de ĉi tie lasu faru $ listero. Ni iru reen al 1, 10. Ni faru $ eron + +; Tio ankoraŭ ekzistas en PHP. Vi povas ankoraŭ fari + +. php.test.php. Mi devas presi ĝin. print_r ($ array); Ni presas 2, 11. Se mi ĝuste faris foreach ($ array kiel $ listero) tiam ero estos la valoro 1 la unua fojo per la ciklo. Ĝi pliigo 1 ĝis 2 kaj tiam ni faris. Tial do tio iros tra la dua paŝo de la ciklo kaj tiu artikolo estas 10. Ĝi pliigoj eron al 11, kaj poste ke tio simple forĵetis. Tiam ni print_r ($ array), kaj ni vidu, ke ĉi tiu estas nur 1, 10. Do la pliigo ni faris estis perdita. Sed foreach ($ array kiel & $ item) nun ĉi artikolo estas la sama ero kiel ĉi tie. Ĝi estas la sama afero. Do $ eron + + estas modifi tabelo 0. Esence, vi povas ankaŭ fari $ k -> $ eron kaj vi povas fari $ tabelo [$ k] + +; Do alia maniero fari tion, ni estas liberaj por modifi item, sed kiu ne modifi nia originala tabelo. Sed se ni uzas k, kiu estas nia ŝlosilo, tiam ni povas nur indekson en nia tabelo uzante tiu ŝlosilo kaj pliigo tio. Tiu pli rekte modifas nia originala tabelo. Vi povas eĉ fari ke se ial vi volis la kapablon modifi - Fakte, ĉi tiu estas perfekte racia. Vi ne volas havi por skribi $ tabelo [$ k] + +, vi simple volis skribi $ listero + + sed vi ankoraŭ volis diri se ($ k === 'a') tiam pliigo eron kaj poste presi nian tabelo. Do nun kion ni atendas print_r fari? Kio valoroj devas esti presita? [Studento] 2 kaj 10. >> [Bowden] Nur se la ŝlosilo estis 'a' ni vere presi tiun. Vi verŝajne tre malofte, se iam, necesas difini funkciojn en PHP, sed vi povus vidi iun similan kie vi difinas funkcion kiel funkcio ajn. Kutime vi dirus ($ foo, $ stango) kaj tiam difini ĝin esti kiom. Sed se mi faras tion, tiam tiu signifas, ke kio nomas kion ajn, kion ajn nomas baz, do la unua argumento pasis al baz ŝanĝeblas. Ni faru $ foo + +; kaj ene de ĉi tie lasu faru baz ($ ero); Nun ni nomas funkcio. La argumento estas prenita de referenco, kiu signifas ke se oni modifas ĝin ni modifante la afero kiu pasis in Kaj presi ĉi ni atendas - se mi paneas sintakso - ni havas 2, 11, tial estis vere incremented. Rimarku ni bezonas referencojn en 2 lokoj. Kio se mi faris ĉi tion? Kion tio signifas? [Studento] Ĝi ŝanĝos. >> Jes. Item estas nur kopio de la valoro en la tabelo. Do ero ŝanĝos al 2, sed la tabelo ['a'] ankoraŭ estos 1. Aŭ kion se mi faras tion? Nun ero estas sendita kiel kopion al baz. Do la kopion de la argumento estos incremented al 2, sed listero mem neniam incremented al 2. Kaj ero estas la sama afero kiel tabelo krampo ajn, por ke tabelo neniam incremented. Do ambaŭ tiuj lokoj bezonas ĝin. PHP kutime estas tre saĝa pri ĉi tio. Vi eble opinias, ke mi volas preterpasi per referenco - Tiu estis fakte demando sur unu el la psets. Estis questions.txt afero kie diris, Kial povus vi volas pasi ĉi struct por referenco? Kio estis la respondo al tiu? [Studento] Do vi ne devos kopii ion grandan. >> Jes. Al struct povas esti arbitre granda, kaj kiam vi pasos la struct en kiel argumento ĝi bezonas kopii ke tuta struct pasi ĝin al la funkcio, dum se vi simple pasigi la struct por referenco tiam nur bezonas kopii 4-bajto adreso kiel la argumento al la funkcio. PHP estas iomete pli inteligenta ol tio. Se mi havas iujn funkcion kaj mi parolu pri ĝi tabelo de 1.000 aferojn, tio signifas ke tuj devos kopii ĉiujn 1.000 el tiuj aĵoj pasi ĝin en la funkcio? Ĝi ne devas fari tion tuj. Se ene de ĉi tiu funkcio ĝin neniam reale modifas foo, do se ($ foo === 'saluton') reveni vera.; Rimarku ni neniam vere modifis la argumento ene de ĉi tiu funkcio, kio signifas, ke kio estis aprobita en kiel foo neniam devas esti kopiitaj ĉar ĝi estas ne modifante ĝin. Do la vojo PHP verkoj estas la argumentoj estas ĉiam preteriris referenco ĝis vi efektive provas modifi gxin. Nun, se mi diros $ foo + +; ĝi nun fari kopion de la originala foo kaj modifi la kopion. Ĉi ŝparas iom da tempo. Se vi neniam tuŝis tiun amasan tabelo, vi neniam reale modifi ĝin, ĝi ne bezonas fari la kopion, dum se ni nur metis-signo kiu signifu ne eĉ kopii ĝin eĉ se vi modifas ĝin. Ĉi tiu konduto estas nomita kopio-sur-skribo. Vi vidos ĝin en aliaj lokoj, speciale se vi prenos mastruma sistemo kompreneble. Kopiu-sur-skribo estas bela kutima ŝablono, kie vi ne bezonas fari kopion de io krom se ĝi estas vere ŝanĝiĝas. Yeah. [Studento] Kio se vi havis la pliigo interne de la testo, tial nur 1 elemento el 1.000 bezonus esti ŝanĝita? Mi ne estas certa. Mi kredas ke estus kopii la tutan aferon, sed tio estas ebla estas inteligenta sufiĉe ke - Vere, kion mi pensas estas imagi ni havis tabelo kiu similas tiun: $ areo2 = [ Tiam indekso 'a' estas tabelo de [1 2 3 4], kaj indekso 'b' estas tabelo de kiom. Mi bezonas komoj inter ĉiuj el tiuj. Imagu ke estas komoj. Tiam 'c' estas la valoro 3. Okay. Nun diru ni faru $ baz ($ areo2); kie baz ne prenas tiun per referenco. Do $ foo ['c'] + +; Tiu estas tia ekzemplo kie ni pasas areo2 kiel argumento kaj tiam modifi specifa indekso de la tabelo de pliigante ĝin. Mi honeste ne scias kion PHP tuj faros. Ĝi povas facile fari kopion de la tuta afero, sed se ĝi estas inteligenta, ĝi faros kopion de tiuj klavoj kie ĉi havos ĝian apartan valoron sed ĉi tiu povas ankoraŭ noti al la sama tabelo 1,2,3,4 kaj tio povas ankoraŭ noti al la sama tabelo. Mi instruos vin iPad ĝin. Ni pasas en ĉi tabelo kie ĉi tiu viro poentojn al 3, this guy punktoj al [1,2,3,4], this guy punktoj al [34, ...] Nun kiam ni pasis ĝin en al baz, ni modifas ĉi. Se PHP estas inteligenta, ĝi povas nur fari - Ni ankoraŭ devis kopii iun memoron, sed se estis tiuj enormaj anidadas subarrays ni ne bezonas kopii tiujn. Mi ne scias se tion faras, sed mi povas imagi ĝin fari tion. Tiu estas ankaŭ sufiĉe granda avantaĝo de C super PHP. PHP faras vivon tiel facile por multaj aferoj, sed vi ia havas absolute nenian ideon kiel bone ĝi plenumos ĉar mi ne havas ideon sub la kapuĉo, kiam ĝi estos fari ĉi tiujn kopiojn de aferoj, oh, estas ke tuj estos konstanta tempo kopion, Estas simple tuj ŝanĝos 1 pointer, ĉu tuj estos ridinde malfacile lineara kopion? Kio se ĝi ne povas trovi spacon? Ĉu ĝi do devas kuri rubo kolekto akiri pli da spaco? Kaj rubo kolekto povas preni arbitre longa. En C vi ne devas zorgi pri tio. Ĉiu unuopa linio vi skribas vi povas preskaux kialo pri kiel ĝi estas tuj efektivigi. Ni rigardu reen al tiuj. Kiel bela estas ĝi, ke vi ne devas trakti kradaj funkcioj, ligitaj listoj, aŭ io simila? Ekde laborante kun hash tabloj estas tiel facila nun, jen amuza enigmo labori plu. Malfermi dosieron nomata unique.php kaj en ĝi skribi PHP programo (Ankaŭ konata kiel "skripto"). Ni emas nomi ilin skriptoj se ili estas mallongaj, kiu vi kuros en la komandlinio. Esence, iu ajn lingvo kiun vi ne kompili sed vi tuj kuras la ruleblan en la komandlinio, vi povas voki kiun ruleblan skripto. Mi povus same bone skribi C programon kiu faras tion, sed mi ne nomus ĝin skripto kiam mi unue kompili ĝin kaj poste ekzekuti la duuma. Sed ĉi PHP programo ni iras por voki skripton. Aŭ se ni skribis en Python aŭ Perl aŭ Node.js aŭ ajna el tiuj aĵoj, ni volonte nomas ilin ĉiujn skriptojn ĉar vi kuras ilin en la komanda linio sed ni ne kompili ilin. Ni povus fari tion sufiĉe rapide. Ni ne tuj uzos argv. Lasu la ĵus blovi tra ĉi. Nomas ĝin unika, skribi programon. Vi povas supozi ke la enigo enhavos unu vorto por linio. Vere, argv estos bela bagatela uzi. unique.php. Unua afero unue, ni volas kontroli se ni jam pasis 1 komand-linio argumento. Same kiel vi devus atendi argc kaj argv en C, oni ankoraŭ havas tiujn en PHP. Do, se ($ argc! == 2) tiam mi ne trakti presi mesaĝon aŭ nenion. Mi simple eliri, eraro kodo de 1. Mi povus ankaŭ reveni 1. Malofte en PHP estas vi en ĉi tiu stato kie ni estas en - Kutime vi estas en funkcio nomata per funkcio nomata per funkcio nomata per funkcio. Kaj se iu iras malbone kaj vi nur volas eliri ĉio tute, eliro nur finas la programon. Ĉi tio ankaŭ ekzistas en C. Se vi estas en funkcio en funkcio en funkcio en funkcio kaj vi volas nur mortigi la programo, oni povas nomi eliro kaj ĝi estos simple eliri. Sed en PHP estas eĉ pli maloftaj, ke ni estas en ĉi tiu supera nivelo. Kutime ni ene ia funkcio, do ni nomas eliro por ke ni ne devas reveni supren 1 afero kiu tiam rimarkas ke estas eraro por ke revenu supren se kiu rekonas okazis eraro. Ni ne volas trakti tion, kio eliras (1); reveno (1); en ĉi tiu kazo estus ekvivalento. Do kion ni volas malfermi ni volas fopen. La argumentoj estas tuj serĉos bela similaj. Ni volas fopen ($ argv [1], kaj ni volas malfermi gxin por legado. Kiu resendas rimedo kiun ni iras por voki f. Ŝajnas esti tre simila al kiel C faras krom ni ne devas diri DOSIERO *. Anstataŭe ni simple diri $ f. Okay. Fakte, mi kredas ke tiu eĉ donas al ni aludo pri PHP funkcio nomita dosiero. PHP Dosiero. Kio ĉi tuj fari estas legi tutan dosieron en tabelo. Vi eĉ ne bezonas fopen ĝin. Oni faros tion por vi. Do $ linioj = dosiero ($ argv [1]); Nun ĉiuj linioj de la dosiero estas en linioj. Nun ni volas ordigi la linioj. Kiel ni povas ordigi la liniojn? Ni ordigi la linioj. Kaj nun ni povas presi ilin aŭ kion ajn. Probable la plej facila maniero estas foreach ($ linioj kiel $ linio) echo $ linio; [Studento] Ĉu ne ni eĉ transiri liniojn per referenco io en speco? Tie estas kie speco estus difinita kiel funkcio speco (& $ tabelo). Kiam vi nomas la funkcio ne pasi ĝin por referenco. Estas la funkcio kiu difinas ĝin kiel preni ĝin kiel referencon. Tiu estas fakte ĝuste kio eliris malbone kiam ni metas ĉion por niaj serviloj kiam ni iris de 5,3 al 5,4. Ĝis 5.4, ĉi tiu estis perfekte racia. Funkcio ne atendas por preni ĝin kiel referenco, sed vi povas pasi ĝin kiel aludo do se la funkcio ne okazos por modifi ĝin, ĝi estas ankoraŭ modifitaj. Segun 5.4, vi ne devus fari ĉi tion. Do nun la sola maniero pasas por referenco estas se la funkcio eksplicite faras ĝin. Se vi ne volas modifi ĝin, tiam vi devas fari $ kopio = $ linioj kaj pasas kopion. Do nun linioj estos konservitaj kaj kopio estos ŝanĝita. php.unique.php. Mi povus esti malkombita ion supren. Neatendita 'specon'. Tie okazas esti iu kiu faras tion por ni. Estas eĉ ne ekzistas. Rimarku, kiam vi legis la manlibro, ke la unua argumento atendas esti tabelo kaj ĝi estas prenita de referenco. Kial ĉi plendis al mi? Ĉar mi havas tiun funkcion speco ankoraŭ en ĉi tie ke mi ne volas. Konsentite, php.unique.php. Mi ne pasi ĝin argumenton ĉar mi ne havas dosieron. Estas php.unique.php sur test.php. Jen test.php ĉiuj presitaj el en bela ordo ordo. Rimarku ke ordo ordo estas speco de stranga por kodo dosieron ĉar ĉiuj niaj malplenajn liniojn tuj venos unue tiam tuj venis ĉiuj niaj 1 nivelo indentations tiam venos ĉiuj niaj neniu indentations. Yeah. >> [Studento] Do por la fontokodo ne estis aprobita de referenco? Estas ke ĝenerale preteriris valoro? [Bowden] Kiam vi nomas funkcio, ĝi neniam difinas ĉu ĝi estis aprobita de referenco. Estas la funkcio difino kiu determinas, ĉu estis aprobita de referenco. Kaj rigardante la funkcio difino de varo aŭ simple rigardante tion, prenas la argumenton per referenco. Do sendistinge de ĉu vi volas ĝin preni ĝin por referenco, ĝi faras preni ĝin por referenco. Ĝi modifas la tabelo en loko. Tio simple ne permesataj. Vi ne rajtas fari tion. >> [Studento] Ho, bone. [Bowden] Ĉi, varo tuj prenos liniojn por referenco kaj modifi ĝin. Kaj denove, se vi ne volas fari tion, vi povus fari kopion de varo. Eĉ en ĉi tiu kazo, kopio ne estas reale kopion de linioj. Ĝi simple notas la sama aĵo ĝis unua gets modifita, kie ĝi estas unua tuj get modifita en la varo funkcio, kie, ĉar la kopio-on-skribi, nun kopion de kopio tuj estos faritaj. Vi ankaŭ povas fari ĉi tion. Tio estas la alia loko vi povas vidi signon. Vi vidas ĝin en foreach cikloj, vi vidos ĝin en funkcio deklaroj, kaj vi vidos ĝin kiam ĝuste atribui variablojn. Nun ni plenumita nenio por fari ĉi ĉar kopio kaj linioj estas laŭvorte la sama afero. Vi povas uzi linioj kaj kopii sendiference. Vi povas fari unset ($ kopio), kaj kiu ne unset linioj, vi simple perdi vian aludon al la sama afero. Do ekde ĉi tiu punkto, nun linioj estas la sola maniero povas konsenti linioj. Demandoj? Yeah. [Studento] Tute for temo, sed vi ne devas fermi PHP kun la - >> Vi ne. Okay. [Bowden] mi irus ĝis diri ke estas malbona praktiko por fermi ilin. Tio probable troigo, speciale en skripto, sed ni vidu kio okazas se mi faras tion. Tio faris nenion. Kio se mi volis - [suspirojn] Mi bezonas por pasi argumento. Pafi. Mi vokis ĝin malĝusta. Do php.unique.php kun argumento. Nun mi eĉ ne bezonas tion. Mi pasi ĝin valida argumento. Ĉi presita ajn ĝi estas stampita. Mi presi kopion kaj kopio ne ekzistas. Do linioj. Ĝi presas ĉion, kaj poste rimarkis tiun tutan rubo cxi tie, ĉar en PHP ion kiu estas ekstere de PHP etikedoj Estas ĝuste tuj estos presita laŭvorte. Tial HTML, estas tiel bela, ke mi povas fari div bla, bla, bla klaso aŭ kion ajn, bla, bla, bla, kaj poste fari iujn PHP kodo kaj do fine div. Kaj nun presi ĉi I get my nice div supren supro, ĉion PHP presita, div ĉe fundo. Katastrofa kiam iu kiel ĉi tio okazas, kio estas sufiĉe komuna, nur vaganta linion ĉe la malsupro de dosiero. Vi ne kredas ke estus ke granda de traktadon ĝis vi konsideras la fakton ke kun retumiloj - Kiel alidirektilojn laboro aŭ esence ajna titolaj laboron, kiam vi faras vian konekton al retejo kaj ĝi sendas reen ĉiuj tiuj titolaj kaj aĵoj kiel respondo 200 aŭ respondon alidirektilo aŭ kion ajn, titolaj estas nur valida ĝis la unua bitoko de datumoj estas sendita. Vi povas redirekti miloj da fojoj, sed tuj kiam la unua bitoko de datumoj estas sendita vi ne supozas ke alidirektilo denove. Se vi havas perditaj linion ĉe la malsupro de dosiero kaj diru ke vi uzas tiun funkcion kaj poste vi volas - Diru ĝi estas alia dosiero kiu estas index.php kaj vi require_once ion - Mi ne povas pensi pri bona ekzemplo de tio. La temo okazas kiam tiu linio je la malsupro gets eĥon. Vi ne volas ion por ili eĥis ankoraŭ. Kvankam vi ne intencas sur io getting eĥon, iu faris get eĥis kaj nun vi ne devus sendi plu titolaj kaj vi ricevos akuzojn. Vi simple ne bezonas tiujn fermo etikedoj. Se vi planas fari ion per HTML - kaj estas perfekte racia fari cxi tie div ajn kaj poste en ĉi tiu punkto vi povas aŭ vi ne povas inkludi ilin. Fakte ne gravas. Sed en PHP skriptoj estas malofta por fermi ĝin. Kiam ĉiu estas PHP, absolute ĉio, vi ne vere bezonas fermi ĝin / vi ne devus fermi ĝin. Kontraktanta kun kordoj estas multe pli agrabla ol en C. En PHP vi povas specifi ŝnuro kun solaj aŭ duoblaj citiloj. Kun sola citaĵoj vi povas ne uzi "ellasilo" sekvencoj. Senĉese eskapi, bla, bla, bla. Do printf estas tre malofta en PHP. Mi supozas mi uzus printf, se mi volis fari ian aferon - en pset 5 vi uzis sprintf aŭ kion ajn. Sed vi volas fari 001.jpg kaj 002.jpg. Do por tiaj aferoj, kie mi vere volas formati la tekston mi uzus printf. Sed alie mi apenaŭ uzas ĉenon kunmeto. Mi neniam vere uzos printf. Ni nur diferenci la detalojn inter simpla kaj duobla citaĵoj citaĵoj. La plej granda diferenco estas, ke simpla citaĵoj, estos presita laŭvorte. Ne estas char datumtipo en PHP, kontraste C, do tiu estas ekvivalento al ĉi tio. Ili estas tiel sanaj. Kaj la bela afero pri simpla citaĵo kordoj estas mi povus diri 'saluton mondo!' bla, bla, bla, $ $ Wooo. Kio okazas kiam mi presi ĉi estas presos ĝin laŭvorte. Lasu la forigi ĉiuj niaj aĵoj. Do eĥon $ str1; Ĝi laŭvorte presitaj ĉiuj el tiuj aferoj: dolaro signoj, backslash n, kiu vi pensus estus newlines - ĉiuj el tiuj aĵoj li presas laŭvorte. La sola afero kiun vi bezonas por eskapi estas sola citaĵoj ĉar alie ĝi pensus ĝi estas fermi la solan citaĵoj. Duobla citaĵoj, tute malsama. Ni jam vidas la sintaksa kolorigo estas cluing nin al kio estas pri iri terure erara. php.unique. Nedifinita variablo: Wooo ĉar ĉi tiu estas interpretita kiel variablo nomis Wooo. Duobla citaĵoj lasu vin enmeti variablojn en - Diru $ nomo = "Rob"; Do eĥon "Saluton, mia nomo estas $ nomo!"; Ĝi rekonas tion kiel variablo. Kiam mi kuras ke - kaj mi enmetas novan linion - Saluton, mia nomo estas Rob! kaj saluton mondo! Tiu estas ĉar mi neniam forigis la impreso de Wooo supre. Estas 1 plui paŝo vi povas fari. $ Tabelo = [1, 2, 3]; Kio se mi volas presi la unuan indicon de tabelo? Vi do $ tabelo [0]. La sintaksa kolorigo estas postsigno. Kio estas ĉi tuj fari? php.unique. Saluton, mia nomo estas 1! kio ne estas kion mi volis. Sintaksa kolorigo mensogis al mi. Ni provu 'a' -> 1, 'b' -> 2. Tiel estas kiel mi devus skribi ĝin. Neatendita sola citaĵo (T_ENCAPSED bla, bla, bla, bla, bla). La ideo estas ke ĝi estas ne rekoni tion kiel parto de la tabelo. Ĝi estas ne rekoni tion kiel tabelo indeksita per letero al. Vi volas fari tion ĉirkaŭita de frizita krampoj, kaj nun kion ajn estas en ĉi frizita streĉa estos interpolados, kiu estas la vorto kiun ni uzas por magie enmeto tiuj variabloj en la ĝustan lokoj. Nun fari tion, php.unique, kaj Hi, my name is 1! kiel atendis aŭ Saluton, mia nomo estas Rob! Unu afero kiu estas speco de agrabla pri simpla citaĵoj estas tiu - Ekzistas iuj kosto interpolanta. Se vi uzas duoblan citaĵoj, la interpretisto devas iri super ĉi tiu linio, certigante tion, "Ho, jen variablo. Nun mi devas iri atingi tiun variablon kaj enmeti ĝin ĉi tie." Eĉ se vi ne uzas ajnan variabloj, nenio ene de tiuj duoblaj citiloj bezonas interpolados, sed ankoraŭ estos malrapida ĉar ĝi bezonas por transiri la duobla citaĵoj serĉas aĵojn kiuj bezonas esti interpolados. Do simpla citaĵoj povas esti iom pli rapida se nenio bezonas al esti interpolados, kaj mi inklinas eĉ uzi nur citaĵoj por, 'Saluton, mia nomo estas'. $ Tabelo ['a'] ĉiuokaze. Tio okazas al esti ekvivalento al kion ni havis antaŭe. Sed estas afero de prefero. Se vi uzas PHP, vi probable ne zorgas pri la rapido diferencon. Ne estas sufiĉa por rezoni ilin, por komenci. Ajna fino demandoj? Ni vere ne eĉ trairi cxiujn pri tio, sed ĉi aĵoj estis enuiga. La lasta afero kiun estas speco de bela en PHP estas kiam vi kontraktanta kun HTML, vi uzas ĝin iom, do la bela ŝparvojo sintakso por presi variablo. Sen meti PHP tie, tio nomiĝas mallongaj etikedoj. Oficiale de PHP 5.4, ĉi tiu estas EVITINDA. Vi estas rekomenditaj por meti php. Ĉi tio estas daŭre subtenataj, tiel mallonga etikedoj kun la