[Powered by Google Translate] [Sehemu ya 8 - Zaidi Starehe] [Rob Bowden - Chuo Kikuu cha Harvard] [Hii ni CS50. - CS50.TV] Hizi sehemu wiki maelezo ni kwenda kuwa pretty mfupi, hivyo mimi nina kwenda tu kuendelea kuongea, you guys ni kwenda kuendelea kuuliza maswali, na tutaweza kujaribu kujaza juu kama muda kiasi kama inawezekana. mengi ya watu wanadhani kwamba pset hii ni lazima si ngumu, lakini ni muda mrefu sana. spec pset yenyewe inachukua saa kusoma. Sisi kukupa mengi ya SQL unaweza uwezekano haja ya kutumia. Sisi kutembea wewe kupitia mengi ya hayo, hivyo ni lazima kuwa mbaya sana. Kuna mtu yeyote kuanza au kumaliza? Ni pset mwisho. Oh, Mungu wangu. Kawaida kuna JavaScript moja baada ya hii, lakini kalenda mabadiliko mambo hufanya kila kitu 1 wiki mfupi, na hatuna tena pset JavaScript. Sijui jinsi ambayo huathiri kama JavaScript inaenda kuonekana kwenye mtihani au Quiz 1. Mimi kufikiria itakuwa kitu kama unahitaji kujua mambo ya ngazi ya juu kuhusu JavaScript, lakini mimi shaka tunatarajia kutoa tu wewe moja kwa moja JavaScript code tangu wewe si alikuwa pset ndani yake. Lakini kwamba itakuwa stuff kwa ajili ya mapitio Jaribio wiki ijayo. Sehemu ya maswali. mengi ya mambo haya ni kiasi fulani hafifu kuchukuliwa, lakini tutaweza kujadili nini. Tofauti na C, PHP ni "dynamically-typed" lugha. Hii ina maana gani, kuuliza? Naam, kusema kwaheri kwa wote wa kuelea wale Char, int, na maneno mengine unahitaji kutumia wakati akitangaza vigezo na kazi katika C. Katika PHP, aina ya kutofautiana ni kuamua na thamani kwamba ni sasa kufanya. Hivyo kabla ya sisi aina hii code katika faili inayoitwa dynamic.php, PHP ni dynamically typed. Hiyo ni kweli. Sikubaliani na ukweli kwamba hiyo ina maana sisi ni kusema kwaheri Char, kuelea, int, na nyingine maneno. tofauti kati ya exact dynamically typed na mbadala, ambayo ni statically typed, ni kwamba dynamically typed, wote wa kuangalia aina yako na stuff hutokea wakati kukimbia, ambapo statically typed hutokea wakati kukusanya. neno tuli kwa ujumla inaonekana kuwa na maana ya mambo wakati kukusanya. Nadhani kuna matumizi mengine kwa ajili yake, lakini katika C wakati wewe kutangaza variable tuli, kuhifadhi yake ni zilizotengwa kwa wakati kukusanya. Hapa, dynamically typed tu ina maana kwamba - Katika C kama wewe kujaribu kuongeza string na integer, wakati wewe ni kukusanya, itakavyo kulalamika kwa sababu ni kwenda kusema kwamba huwezi kuongeza int na pointer. Ni tu si operesheni halali. Hiyo ni kitu kingine kwamba tutaweza kupata katika pili. Lakini kwamba aina ya kuangalia, ukweli kwamba analalamika wakati kukusanya, ni tuli aina ya kuangalia. Kuna lugha ambapo huna haja ya kusema Char, kuelea, int, na mambo yote hayo, lakini lugha unaweza kuwaambia kutoka muktadha wa kitu kile aina ni walidhani kuwa, lakini ni bado statically typed. Hivyo kama wewe kuchukua 51, OCaml, kamwe haja ya kutumia yoyote ya aina hizi, lakini bado itakuwa wakati kukusanya kusema huwezi kufanya hivyo kwa sababu wewe ni kuchanganya int na kamba. Dynamically typed tu ina maana kwamba wakati mwingine wakati wa muda kukimbia wewe ni kwenda kupata malalamiko. Kama wewe pia kutumika Java kabla, kwa ujumla, karibu yoyote Lugha C-aina inaenda statically typed, hivyo C, C + + Java, wale wote ni ujumla statically typed. Katika Java wakati kukusanya kitu na wewe ni kusema kamba s sawa kitu kipya ambacho si kamba, ambayo inaenda kulalamika kwa sababu wale aina tu si match up. Hiyo kwenda kulalamika wakati kukusanya. Lakini pia ina baadhi ya wakati nguvu mambo kama kama wewe kujaribu kutupwa kitu kwa aina hiyo ni maalum zaidi kuliko aina yake ya sasa, kuna kitu inaweza kufanya wakati kukusanya kuangalia kama kutupwa kwamba ni kwenda kufanikiwa. Java pia ina baadhi ya aina ya nguvu ya kuangalia kwamba haraka kama anapata kwa kuwa mstari wa kanuni wakati ni kweli utekelezaji, ni ya kwenda kufanya kutupwa, kuangalia kama kutupwa kwamba ilikuwa halali katika nafasi ya kwanza, na kama ilikuwa hivyo, basi ni kwenda kulalamika kwamba una aina batili. Aina Dynamic kuangalia. Aina hii katika faili inayoitwa dynamic.php. Dynamic.php. Mimi itabidi unzip kwamba formatting. Tuna variable, sisi kuweka kwa 7 integer, kisha tunakwenda magazeti hayo na s% - Oh, sisi ni kuchapa aina ya hivyo, hivyo gettype ni kwenda na kurudi aina ya kutofautiana. Sisi ni tu uchapishaji aina ya juu na juu tena. Sisi tu php.dynamic.php. Tutaweza kuona kwamba mabadiliko kutoka integer kwa kamba Boolean kama sisi kwenda kwa njia. Katika C hakuna Boolean data aina, hakuna kamba data aina. Kuna * Char na Boolean tu huelekea kuwa int au Char au kitu. Katika PHP aina hizi zipo, na hiyo ni moja ya faida kubwa ya PHP juu ya C - kwamba string shughuli ni kubwa rahisi katika PHP kuliko C. Wao tu kazi. Hivyo sisi kurudi hapa. Sisi mbio dynamic.php. Hii inatuambia mkalimani PHP, aitwaye php, kuendesha PHP code katika dynamic.php. Kama una makosa katika faili, mkalimani kukuambia! mkalimani, hii ni mwingine tofauti kubwa kati ya PHP na C. Katika C una kukusanya kitu fulani na kisha kukimbia kwamba faili compiled. Katika PHP kamwe kukusanya chochote. Hivyo mkalimani PHP ni kimsingi kusoma tu hii mstari kwa mstari. Ni hits var = 7 kisha ni hits printf basi ni hits var basi ni hits printf na kadhalika. Kuna ni kidogo ya kuandaa ni gani, na ni Caches matokeo hivyo kama wewe kukimbia script baadaye unaweza kufanya baadhi, lakini kimsingi ni mstari kwa mstari aina ya kitu. Hiyo ina maana kwamba mengi ya optimizations kwamba sisi kupata katika C, kama kuandaa, ni kwa ujumla tu compiler unaweza kufanya mengi ya tricks kwa wewe. Inaweza kuchukua nje vigezo outnyttjade, inaweza kufanya yote ya aina hii ya mambo, inaweza kufanya mkia recursion. Katika PHP wewe si kwenda kupata kwamba faida sababu tu kwenda kuanza utekelezaji mstari kwa mstari kwa mstari, na ni kweli haina kutambua mambo haya kwa urahisi tangu siyo 1 kubwa mkusanyiko kupita juu ya jambo na kisha utekelezaji; ni tu mstari kwa mstari. Basi hiyo ni mkalimani. Nyuma kwa kuandika wetu nguvu: pretty cool, eh? Wewe dhahiri hakuweza kufanya hivyo katika C! Sasa, kuona kama unaweza kufikiri aina ya kila moja ya maadili yafuatayo. Angalia hii kwa ajili ya kumbukumbu. Hivyo 3.50. Ni aina gani unafikiri kwamba kwenda kuwa? Hapa ni aina tuna. Tuna bools integers,, yaliyo pointi, masharti, arrays, vitu, na kisha rasilimali, ambayo ni aina ya hazieleweki. Nadhani kuna kweli mfano hapa. Kisha kuna null. Null ni aina maalum. Tofauti C ambapo null ni tu pointer na anwani 0, katika PHP, null ni aina yake ambapo halali tu kitu cha aina hiyo ni null. Hii ni muhimu zaidi kwa ajili ya kuangalia makosa. Katika C ambapo tulikuwa na suala hili ambapo kama wewe kurudi null, haina maana kwamba wewe ni kurudi pointer null au kutumia null kwa ishara ya makosa au yote ya kuchanganyikiwa kwamba tulikuwa katika hatua moja. Hapa, kurudi null ujumla maana yake ni kosa. mambo mengi pia kurejea uongo kwa makosa. Lakini uhakika ni aina null, kitu pekee ya aina null ni null. Kisha callback ni kama unaweza kufafanua baadhi ya majukumu bila majina. Huna kutoa kazi jina, lakini huwezi kuwa ili kukabiliana na kwamba hapa. Kuangalia aina kwamba hawana wanatarajia sisi kujua, unafikiri nini aina ya 3.50 ni? >> [Mwanafunzi] Kuelea. Yeah. Hivyo basi hapa, unafikiri nini aina ya hii ni? >> [Mwanafunzi] Array. Yeah. Wa kwanza alikuwa kuelea, moja ya pili ni safu. Ona kwamba safu hii si kama safu C ambapo una index 0 ina baadhi ya thamani, index 1 ina baadhi ya thamani. Hapa ni fahirisi, b, na c na maadili ni 1, 2, na 3. Katika PHP hakuna tofauti kati ya safu associative na tu safu ya mara kwa mara kama ungependa kufikiria hivyo katika C. Kuna tu hii, na chini ya Hood safu ya mara kwa mara ni safu associative ambapo 0 ramani kwa thamani baadhi njia hiyo ramani kwa thamani fulani. Kwa sababu hii, PHP inaweza pretty mbaya kwa kweli mambo haraka code / vigezo tangu wakati katika C unatumia safu unajua kwamba kupata mwanachama ni mara kwa mara wakati. Katika PHP kupata mwanachama ambaye anajua ni muda gani? Ni pengine mara kwa mara ikiwa ni hashes usahihi. Nani anajua nini ni kweli kufanya chini ya Hood? Wewe kweli haja ya kuangalia utekelezaji wa kuona jinsi itakavyo kukabiliana na kwamba. Hivyo basi fopen. Nadhani hapa hebu PHP mwongozo fopen kuangalia aina ya kurudi. Tunaona hapa unaweza kuangalia juu kiasi pretty kazi yoyote katika mwongozo PHP na hii ni aina ya ukurasa mtu wa PHP. aina kurudi ni kwenda kuwa rasilimali. Hiyo ndiyo sababu nikaona it up, kwa sababu sisi si kweli define rasilimali. wazo ya rasilimali, katika C wewe aina ya got * JALADA au chochote; katika PHP rasilimali ni JALADA yako *. Ni nini wewe kwenda kuwa kusoma kutoka, ni nini wewe kwenda kuwa kuandika. Ni kawaida ya nje, hivyo ni rasilimali unaweza kuvuta mambo kutoka na kutupa mambo. Na hatimaye, ni nini aina ya null? >> [Mwanafunzi] null. Yeah. Hivyo kitu tu kwamba ni null ni null. Null ni null. Moja hulka ya mfumo wa aina PHP (kwa bora au mbaya) ni uwezo wake wa juggle aina. Wakati kuandika mstari wa PHP kificho kwamba unachanganya maadili ya aina mbalimbali, PHP kujaribu kufanya kitu busara. Jaribu nje ya kila ya mistari ifuatayo ya PHP code. Nini kuchapishwa? Je, ni nini inatarajiwa? Kwa nini? Ukweli huu kuhusu PHP ni nini inafanya nini sisi kuwaita weakly typed. Weakly typed na nguvu typed, kuna matumizi tofauti kwa sheria hizo, lakini watu wengi kutumia weakly typed na nguvu typed kwa maana ya aina hii ya jambo ambapo ("1" + 2); kwamba kazi. Katika C ambayo si kazi. Unaweza kufikiria hili si kazi. mengi ya watu msichanganye kuandika nguvu na kuchapa dhaifu na kuchapa tuli na kuandika nguvu. Chatu ni mfano mwingine wa lugha hiyo dynamically typed. Unaweza kutupa karibu aina katika vigezo na ni kwenda kuamua wakati kukimbia checkings makosa yoyote. Katika Python itakavyo nitafanya hii na kuona ("1" + 2); na hii itakuwa kushindwa kwa sababu anasema huwezi kuongeza string na integer. Katika PHP, ambayo ni haki kama dynamically typed, hii si kushindwa. Kuandika dhaifu ina nini na ukweli kwamba anafanya mambo kwa aina kwamba si kweli kufanya maana lazima. Hivyo ("1" + 2); naweza kufikiria kwamba kuwa string 12, naweza kufikiria ni kuwa string 3, Naweza kufikiria ni kuwa 3 integer. Ni lazima si defined vizuri, na sisi ni pengine kwenda kuona hapa kwamba wakati sisi magazeti ("1" + 2); ni pengine ni kwenda kuishia kuwa tofauti kuliko uchapishaji (1 + "2"). Na hii huelekea kuwa, kwa maoni yangu, kwa kuwa mbaya. Hapa tunaweza kujaribu haya. Mwingine hila kidogo kuhusu PHP ni huna haja ya kweli kuandika kwenye faili. Ni haina kukimbia mode amri. Hivyo php-r, basi tunaweza kutupa katika amri hapa: "Magazeti ('1 '+ 2);" na mimi itabidi kutupa mstari mpya. Hii printed 3. Inaonekana kama Prints 3 na ni 3 integer. Hivyo sasa hebu jaribu njia nyingine kote: "Magazeti (1 + '2 '); Sisi kupata 3, na ni pia kwenda kuwa integer 3? Mimi uaminifu hawana wazo. Inaonekana kama kwamba ni thabiti. Kuna kamwe nafasi yoyote ya kuwa ni 12 string au kitu kama hicho kwa sababu PHP, tofauti na JavaScript Java pia, ina operator tofauti kwa ajili ya concatenation. Concatenation katika PHP ni dot. Hivyo uchapishaji (1 '2 '.); Ni kwenda kutupa 12. Hii inaelekeza kusababisha machafuko ambapo watu kujaribu kufanya kitu kama str + = baadhi kitu kingine kwamba wanataka kuongeza juu ya mwisho wa kamba zao, na kwamba itakuja kushindwa. Unahitaji kufanya str =. Hivyo usisahau concatenation katika PHP ni dot. Mambo mengine ya kujaribu: magazeti ("CS" + 50); Nimekuwa niliwaambieni kwamba hakuna matumaini ya hii kusababisha CS50 tangu concatenation si +. Unafikiri hii ni kwenda kuishia kuwa? Mimi uaminifu na kabisa hakuna wazo. Inaonekana kama ni 50 tu. Ni anaona kamba, na I bet kama sisi kuweka 123CS - Ni anaona kamba ya kwanza, inajaribu kusoma integer kutoka humo au idadi kutoka humo. Katika kesi hiyo ni anaona 123CS. "Hiyo haina maana kama integer, hivyo mimi nina kwenda tu kufikiri ya 123." Hivyo 123 + 50 ni kwenda kuwa 173. Na hapa ni kuanza kusoma hii kama integer. Haina kuona kitu, hivyo tu chipsi kama 0. Hivyo 0 + 50 ni kwenda kuwa 50. Hii mimi nina kuchukua anaenda kufanya kitu sawa. Mimi nina mawazo 99. Yeah, kwa sababu ni kwenda kuchukua kwanza - Hivyo 99. Hapa (10/7), kama hii walikuwa C, gani kwamba kurudi? [Mwanafunzi] 1. >> Yeah, itakuwa 1 kwa sababu 10/7 ni kugawa integers 2. integer kugawanywa na integer ni kwenda na kurudi integer. Ni hawezi kurudi 1 uhakika chochote kwamba itakuwa, hivyo tu kwenda na kurudi 1. Hapa uchapishaji (10/7); itakavyo kweli kutafsiri kwamba. Na hii ina maana kwamba kama kweli wanataka kufanya rounding integer na mambo kama hayo, unahitaji kufanya magazeti (sakafu (10/7)); Katika C ni pengine weird kwamba unaweza kuwategemea truncation integer mara kwa mara, lakini katika PHP huwezi kwa sababu itakuwa moja kwa moja kugeuka ndani kuelea. Na kisha (7 + kweli); unafikiri kwamba kwenda kuwa? Mimi guessing 8 ikiwa ni kwenda kutafsiri kweli kama 1. Inaonekana kama ni 8. Hivyo chochote tumefanya katika dakika 10 iliyopita unapaswa kabisa kamwe kufanya. Utaona kificho kwamba hana huu. Haina kuwa kama moja kwa moja kama hii. Unaweza kuwa na vigezo 2, na 1 variable hutokea kwa kuwa string na kutofautiana nyingine hutokea kwa kuwa int, na kisha kuongeza vigezo haya pamoja. Tangu PHP ni dynamically typed na itakuwa si kufanya lolote kuangalia aina kwa wewe na tangu ni weakly typed na tangu itakuwa tu moja kwa moja kutupa mambo haya pamoja na kila kitu tu kazi, ni vigumu hata kujua kuwa kutofautiana hii ni lazima string sasa, hivyo mimi si lazima kuongeza kwa variable huu, ambayo ni integer. Njia bora ni kama variable ni kamba, kuitunza kama string milele. Kama kutofautiana ni int, kuitunza kama int milele. Kama unataka kukabiliana na integers na masharti, unaweza kutumia varsint - kwamba ni JavaScript. Intval. Mimi kufanya hili wakati wote. PHP na JavaScript mimi kuchanganya kila kitu. Hivyo intval ni kwenda na kurudi thamani integer ya kutofautiana. Kama sisi kupita katika "magazeti (intval ('123 ')); kupata 123. Intval yenyewe si kwenda kufanya kuangalia kwa sisi kuwa ni peke integer. Mwongozo PHP, kuna tu wengi kazi zilizopo, hivyo hapa nadhani nini napenda kutumia ni is_numeric kwanza. Mimi guessing kwamba alirudi uongo. Hiyo ni jambo lingine tuna kwenda juu ni ===. Hivyo is_numeric ('123df '), wewe bila kufikiri ya kwamba kama is_numeric. Katika C ingekuwa iterate juu ya wahusika wote na kuangalia kuona kama tabia ya kila ni tarakimu au chochote. Hapa is_numeric ni kwenda kufanya hivyo kwa ajili yetu, na ni kurudi uongo. Hivyo wakati mimi kuchapishwa kwamba, kuchapishwa kitu, hivyo hapa mimi kulinganisha kuona, gani kutokea kwa kuwa uongo? Na hivyo sasa ni kuchapa 1. Inavyoonekana ni Prints 1 kama kweli badala ya uchapishaji wa kweli kama kweli. Nashangaa kama mimi kufanya print_r. Hapana, bado anafanya 1. Tukirudi kwenye ===, == bado lipo, na kama wewe kuzungumza na Tommy yeye itabidi kusema == ni kikamilifu faini. Mimi nina kwenda kusema kwamba == ni ya kutisha na kamwe kutumia ==. Tofauti ni kwamba == inalinganishwa mambo ambapo inaweza kuwa kweli hata kama wao siyo aina moja, ambapo === inalinganishwa na mambo ya kwanza ni hundi ni wao aina moja? Ndiyo. Sawa, sasa mimi naenda kuona kama kweli kulinganisha na kuwa sawa. Unaweza kupata weird mambo kama 10 sawa - basi s kuona nini kwamba anasema. Hivyo ('10 '== '1 E1'); Hii anarudi kweli. Je, mtu yeyote kuwa guesses yoyote kwa nini hii anarudi kweli? Ni si tu kuhusu hiyo. Labda hii ni hint. Lakini kama mimi kubadili kwamba kwa f - darn hivyo! Naendelea kutumia quotes mbili. sababu quotes mbili ni yelling saa yangu ni kwa sababu nimekuwa kuweka hii katika quotes mbili. Hivyo mimi anaweza kutoroka quotes mbili katika hapa, lakini enda quotes iwe rahisi. Hivyo ('10 '== '1 F1'); haina magazeti ya kweli. ('10 '== '1 E1'); Prints kweli. [Mwanafunzi] Je, ni hex? >> Ni si hex, lakini ni karibu kwamba ni kama - 1e1, kisayansi nukuu. Ni inatambua 1e1 kama 1 * 10 ^ 1 au chochote. Wale ni sawa integers. Kama sisi kufanya === kisha itakuja kuwa uongo. Mimi kwa kweli sielewi kama sisi kufanya == nini kuhusu (10 na '10abc ');? Wote haki. Basi hiyo ni kweli. Hivyo tu kama wakati wewe gani (10 + '10abc '); na itakuwa 20, hapa (10 == '10abc '); ni kweli. Hata mbaya ni mambo kama (uongo == null); ni kweli au (uongo == 0); ni kweli, (uongo == []); Kuna weird kesi ya - Hiyo ni moja ya kesi hizo weird. Ona kwamba (uongo == []); ni kweli. ('0 '== Uongo); ni kweli. ('0 '== []); Ni uongo. Hivyo == ni kwa njia yoyote elekezi. inaweza kuwa sawa na b na inaweza kuwa sawa na c, lakini b wanaweza kuwa sawa na c. Hiyo ni chukizo kwangu, na unapaswa daima kutumia ===. [Mwanafunzi] Je, tunaweza kufanya ==! Kama vile? >> [Bowden] Ndiyo. sawa itakuwa! = na ==!. Hii ni kweli kuletwa juu katika spec pset ambapo mengi ya kurudi utendaji - Mwongozo PHP ni nzuri kuhusu hili. Ni unaweka katika sanduku kubwa nyekundu, "Hii atarudi uongo kama kuna kosa." Lakini wanaorejea 0 ni kitu kikamilifu busara kurudi. Fikiria juu ya kazi yoyote ambayo inatarajiwa kurudi integer. Hebu sema kazi hii ni walidhani kuhesabu idadi ya mistari katika faili au kitu. Katika hali ya kawaida, unaweza kupita kazi hii faili na ni kwenda na kurudi integer ambayo inawakilisha idadi ya mistari. Hivyo 0 ni namba kikamilifu busara kama faili ni tupu. Lakini nini kama wewe kupita faili batili na kazi hufanyika kurudi uongo kama wewe kupita faili batili? Kama wewe tu kufanya == wewe si kutofautisha kati ya kesi faili batili na faili tupu. Daima kutumia ===. Hiyo yote ya wale. Katika PHP, aina safu ni tofauti na kile wewe kutumika katika C. Hakika, unaweza kuwa tayari niliona hii hapo juu wakati tuliona kwamba huu ni wa safu aina. syntax bracket ni mpya kama ya PHP 5.4, ambayo ni toleo newest wa PHP. Kabla ya hii wewe daima alikuwa kuandika array ('' -> 1, 'b' -> 2. Hiyo ilikuwa kuujenga kwa safu. Sasa PHP ina hatimaye kuja karibu na syntax nice ya mabano tu za mraba, ambayo ni kiasi tu bora kuliko safu. Lakini kwa kuzingatia PHP 5.4 ni toleo jipya, unaweza kukutana na maeneo ambayo hawana hata PHP 5.3. Zaidi ya majira ya sisi mbio katika suala hili ambapo PHP 5.3 ilikuwa nini tulikuwa juu ya appliance, lakini server kwamba sisi uliotumika daraja wetu wote kitabu na kuwasilisha na mambo ambayo yote kwa ilikuwa PHP 5.4. Bila kujua hii, sisi maendeleo katika 5.3, alisukuma kwa 5.4, na sasa wote wa hakuna ghafla ya maadili ya kazi zetu sababu kuna kilichotokea kuwa mabadiliko kati ya 5.3 na 5.4 ambayo si nyuma sambamba, na sisi kwenda na kurekebisha mambo yote yetu kwamba si kazi kwa PHP 5.4. Kwa darasa hili, tangu appliance gani kuwa PHP 5.4, ni kikamilifu faini ya kutumia mabano mraba. Lakini kama wewe ni kuangalia juu ya mambo karibu mtandao, kama wewe ni kuangalia juu ya baadhi ya aina ya mambo ya safu, uwezekano mkubwa wewe utaenda kuona Spell nje safu syntax kuujenga tangu kwamba imekuwa karibu tangu PHP alizaliwa na mraba bracket syntax imekuwa karibu kwa kipindi cha miezi michache au wakati wowote 5.4 alikuja karibu. Hii ni jinsi gani ya index. Tu kama katika C jinsi wewe ungekuwa index kwa mabano mraba kama $ safu [0], $ safu [1], $ safu [2], wewe index njia sawa kama wewe kutokea kwa kuwa fahirisi yako kuwa masharti. Hivyo $ safu [''] na $ safu ['b']. $ Safu [b]. Kwa nini hii ni makosa? Ni pengine kuzalisha onyo lakini bado kazi. PHP huelekea kufanya hivyo. Ni huelekea tu, "Mimi naenda kuwaonyeni kuhusu hili, lakini nina kwenda tu na kuendelea "Na kufanya chochote naweza." Ni pengine kutafsiri hii kwa kamba, lakini inawezekana kwamba wakati fulani katika kipindi cha mtu alisema define b kuwa 'HELLO DUNIANI'. Hivyo sasa b inaweza kuwa safu ya mara kwa mara na $ [b] mapenzi kweli kuwa kufanya 'HELLO DUNIANI'. Nadhani katika hatua hii, au angalau wetu mazingira ya PHP, kama wewe kujaribu index katika safu na muhimu kwamba haipo, itatoweka. Sidhani itakuwa tu kuwaonya. Au angalau unaweza kuweka hivyo kwamba si tu kuwaonya ninyi, ni tu sawa sawa juu inashindwa. njia kuangalia kuona kama kuna kweli ni index vile ni isset. Hivyo isset ($ safu ['HELLO DUNIANI']) atarudi uongo. isset ($ safu ['b']) atarudi kweli. Unaweza kuchanganya syntaxes haya. Nina uhakika pretty nini safu hii ingekuwa kuishia kuwa ni - Tunaweza mtihani ni nje. Oh, mimi haja PHPWord. Hii ni kuchanganya syntax ambapo wewe bayana nini ni muhimu na huna bayana nini ni muhimu. Hivyo 3 haki hapa ni thamani. Wewe si wazi alisema nini ufunguo wake ni kwenda kuwa. Unafikiri ufunguo wake ni kwenda kuwa? [Mwanafunzi] 0. >> Mimi guessing 0 tu kwa sababu ni moja ya kwanza sisi si maalum. Tunaweza kweli kufanya michache ya kesi hizi. Hivyo print_r ni magazeti ya kujirudia. Itakuwa magazeti safu nzima. Ingekuwa magazeti subarrays wa safu kama kulikuwa na yeyote. Hivyo print_r ($ safu); php.test.php. Ni haina kuangalia kama ni akampa 0. Kuna kweli kitu cha kukumbuka hapa, lakini tutaweza kupata nyuma yake katika pili. Lakini nini kama mimi kutokea kwa kufanya hii index 1? PHP haina kutofautisha kati ya fahirisi kamba na fahirisi integer, hivyo katika hatua hii nimekuwa tu defined index 1 na mimi wanaweza kufanya wawili safu $ [1] na $ safu ['1 '] na itakuwa sawa na index ufunguo huo. Hivyo sasa unafikiri 3 ni kwenda kuwa? >> [Mwanafunzi] 2. >> [Bowden] Mimi guessing 2. Yeah. Ni 2. Nini kama sisi alifanya hivyo ni 10, hii ni 4? Unafikiri index ya 3 ni kwenda kuwa? Mimi nina mawazo 11. Dhana yangu kama yale PHP gani - na nadhani nimepata kuona hii kabla - je, ni kuvaa tu wimbo wa nini juu numeric index ni kutumika hadi sasa ni. Ni kamwe kwenda hawawajui index kamba 3. Ni daima kuwa index numeric. Hivyo anaendelea kufuatilia kwa moja juu ni kupewa hivyo mbali, ambayo hufanyika kuwa 10, na ni kwenda kutoa 11-3. Kile alisema kabla, taarifa ya njia ni uchapishaji hii safu. Ni Prints 10 muhimu, muhimu 4, muhimu 11, muhimu d. Au hata hebu kufanya - Mimi nadhani hawakutia 0, lakini ni uchapishaji 1, 2, 3, 4. Nini kama mimi kubadili hapa? Au hebu kweli kubadili hizi 2. Sasa Prints 2, 1, 3, 4. PHP ya arrays si tu kama meza yako mara kwa mara hash. Ni kikamilifu busara kufikiri wao kama meza hash 99% ya muda. Lakini katika meza yako hash hakuna maana ya utaratibu ambao walikuwa mambo kuingizwa. Hivyo kwa haraka kama wewe kuingiza katika meza yako hash, kudhani hakuna orodha wanaohusishwa na unaweza kuhukumu ndani ya orodha wanaohusishwa ambayo ilikuwa kuingizwa kwanza. Lakini hapa sisi kuingizwa 2 ya kwanza na anajua wakati ni uchapishaji nje hii safu kwamba 2 anakuja kwanza. Haina magazeti ni nje katika tu ili yeyote. kiufundi data muundo kwamba ni kwa kutumia ramani ni amri, hivyo ni ramani funguo kwa maadili na anakumbuka utaratibu ambao funguo hizo kuingizwa. Kimsingi ni kwa baadhi ya matatizo ambapo ni annoying kweli - Hebu sema una safu 0, 1, 2, 3, 4, 5 na unataka kuchukua nje index 2. Njia moja ya kufanya hivyo, hebu angalia nini kwamba inaonekana kama. 0, 2, 1, 3, 4. Unset kinachotokea kwa unset vigezo wote na fahirisi safu. Hivyo unset ($ safu [2]); Sasa nini hii kwenda kuangalia kama? 2 ni tu gone, ili kikamilifu faini. Zaidi annoying ni kama unataka mambo ya kweli kuwa kama safu. Mimi itabidi kuweka namba random. Sasa taarifa fahirisi yangu. Mimi nataka tu kuwa kama safu C ambapo unaendelea kutoka 0 kwa urefu - 1 na siwezi iterate juu yake kama vile. Lakini kwa haraka kama mimi unset index pili, nini ilikuwa katika index 3 haina sasa kuwa index 2. Badala yake tu kuondosha kwamba index na sasa wewe kwenda 0, 1, 3, 4. Hii ni kikamilifu kuridhisha. Ni tu annoying na kufanya mambo kama ganga safu. Yeah. [Mwanafunzi] Nini kingetokea kama alikuwa kwa kitanzi na wewe alitaka kwenda juu ya mambo yote? Wakati hit 2, ingekuwa yatoa milele? Iterating juu ya safu. Kuna njia 2 unaweza kufanya hivyo. Unaweza kutumia mara kwa mara kwa kitanzi. Hii ni nyingine intricacy ya PHP. Lugha nyingi, napenda kusema, na aina fulani ya urefu au len au kitu ikionyesha urefu wa safu. Katika PHP ni kuhesabu. Hivyo kuhesabu ($ safu); $ i + +) Hebu tu magazeti ($ safu [$ i]); Tangazo: Undefined kukabiliana: 2. Ni tu kwenda kushindwa. Hii ni sababu ya kwamba, kwa sehemu kubwa, kamwe haja iterate juu ya safu kama hii. Inaweza kuwa ni exaggeration, lakini kamwe haja iterate juu ya safu kama hii kwa sababu PHP hutoa syntax yake foreach ambapo foreach ($ safu kama $ bidhaa). Sasa kama sisi magazeti ($ item); - we'll kujadili katika pili - kwamba kazi kikamilifu faini. njia ambayo foreach ni kazi ni hoja ya kwanza ni safu ya kwamba wewe ni iterating juu. Na hoja ya pili, item, njia ya kila mwanya wa kwa kitanzi ni kwenda kuchukua juu ya jambo la pili katika safu. Hivyo kumbuka safu ina utaratibu. mara ya kwanza kupitia kwa kitanzi, item ni kwenda kuwa 123 basi itakuwa 12 basi itakuwa 13 basi itakuwa 23 basi itakuwa 213. Mambo kupata kweli weird wakati wa kufanya kitu kama foreach. Hebu kuona nini kinatokea kwa sababu wewe kamwe kufanya hivyo. Nini kama sisi unset ($ safu [1]); Hiyo ilikuwa pengine ilivyotarajiwa. Wewe ni juu ya safu hii iterating, na kila wakati wewe ni unsetting index kwanza. Hivyo kwa index 0, jambo la kwanza, item inachukua thamani 0, hivyo ni kwenda kuwa 123. Lakini ndani ya kitanzi kwa sisi unset index 1, hivyo kwamba maana ya 12 ni gone. Hivyo magazeti. PHP_EOL. PHP_EOL ni tu newline, lakini ni ya kitaalam zaidi portable tangu newlines katika Windows ni tofauti na newlines juu ya Mac na UNIX. On Windows newline ni \ r \ n, ambapo kila mahali pengine huelekea tu kuwa \ n. PHP_EOL kimeundwa ili anatumia chochote newline ya mfumo wako ni. Hivyo magazeti kwamba. Hebu si print_r ($ safu) mwishoni. Mimi nilikuwa na wazo kwamba itakuwa tabia. Item bado inachukua thamani 12 ingawa sisi unset 12 kabla ya sisi milele got ni kutoka safu. Msiwafanye neno langu juu ya hili, lakini inaonekana kama foreach inajenga nakala ya safu na kisha item inachukua maadili yote ya nakala ya kwamba. Hivyo hata kama wewe kurekebisha safu ndani kwa kitanzi, itakuwa si huduma. Item itachukua juu ya maadili ya awali. Hebu jaribu unsetting yake. Nini kama hii ni $ safu [1] = "hello"; Hata ingawa sisi kuweka "hello" katika safu, item kamwe inachukua thamani hiyo. Kuna mwingine syntax kwa foreach matanzi ambapo wewe kuweka vigezo 2 waliojitenga na mshale. Hii variable kwanza ni kwenda kuwa ufunguo wa thamani kwamba, na hii variable pili ni kwenda kuwa sawa exact bidhaa. Hii ni uninteresting hapa, lakini kama sisi kwenda nyuma ya kesi yetu ya awali ya '-> 1, 'B' -> 1, hapa kama sisi tu iterate kwa kila safu kama bidhaa, bidhaa ni kwenda kuwa 1 kila wakati. Lakini kama sisi pia wanataka kujua muhimu zinazohusiana na bidhaa kwamba kisha sisi kufanya kama $ muhimu -> $ item. Hivyo sasa tunaweza kufanya magazeti ($ muhimu. ':'. Sasa ni juu ya iterating na uchapishaji kila ufunguo na thamani yake kuhusishwa. Jambo ziada tunaweza kufanya katika foreach matanzi ni unaweza kuona hii syntax. Ampersands kabla majina variable huwa na kuwa jinsi gani PHP rejea. Ambapo marejeo ni sawa na kuyatumia, huna kuyatumia, hivyo kamwe kukabiliana na kumbukumbu moja kwa moja. Lakini una kumbukumbu ambapo 1 variable inahusu kitu sawa kama variable mwingine. Ndani ya hapa hebu kufanya $ item. Turudi kwa 1, 10. Hebu kufanya $ item + +; Kwamba bado lipo katika PHP. Unaweza bado kufanya + +. php.test.php. Nina magazeti hayo. print_r ($ safu); Sisi magazeti 2, 11. Kama nilikuwa tu kufanyika foreach ($ safu kama $ bidhaa) kisha item itakuwa thamani 1 mara ya kwanza kwa njia ya kitanzi. Itakuwa increment 1-2 na kisha sisi ni kosa. Hivyo basi itakuwa kupitia kupita ya pili ya kitanzi na bidhaa kwamba ni 10. Ni nyongeza item 11, na kisha hiyo tu kutupwa mbali. Kisha sisi print_r ($ safu); na hebu angalia kwamba hii ni 1 tu, 10. Hivyo increment tulifanya waliopotea. Lakini foreach ($ safu kama & $ bidhaa) sasa bidhaa hii ni bidhaa hiyo kama haki hii hapa. Ni kitu kimoja. Hivyo $ item + + ni kubadilisha safu 0. Kimsingi, unaweza pia kufanya $ k -> $ bidhaa na unaweza kufanya $ safu [$ k] + +; Hivyo njia nyingine ya kufanya hivyo, sisi ni huru ya kurekebisha kipengele, lakini si kurekebisha safu yetu ya awali. Lakini kama sisi kutumia k, ambayo ni muhimu yetu, basi tunaweza tu index katika safu yetu ya kutumia ufunguo na increment kwamba. Hii zaidi moja kwa moja hugeuza safu yetu ya awali. Unaweza hata kufanya hivyo kama kwa sababu baadhi ya alitaka uwezo wa kurekebisha - Kweli, huu ni kikamilifu kuridhisha. Wewe hakutaka kuwa na kuandika $ safu [$ k] + +, wewe tu alitaka kuandika $ item + + lakini bado alitaka kusema kama ($ k === 'a') kisha increment bidhaa na kisha magazeti safu yetu. Hivyo sasa nini tunatarajia print_r kufanya? Nini maadili lazima kuchapishwa? [Mwanafunzi] 2 na 10. >> [Bowden] tu ikiwa muhimu ilikuwa 'je sisi kweli kwamba magazeti. Pengine ni kwa nadra sana, kama milele, itakuwa haja ya kufafanua kazi katika PHP, lakini unaweza kuona kitu sawa ambapo unaweza kufafanua kazi kama chochote kazi. Kawaida ungependa kusema ($ foo, $ bar) na kisha kufafanua kuwa chochote. Lakini kama mimi kufanya hivi, basi hiyo ina maana kwamba kila wito chochote, chochote wito bazi, hivyo hoja ya kwanza kupita kwa bazi inaweza kubadilishwa. Hebu kufanya $ foo + +; na ndani ya hapa hebu kufanya bazi ($ item); Sasa sisi ni wito kazi. Hoja ni kuchukuliwa kwa kumbukumbu, ambayo ina maana kwamba kama sisi kurekebisha sisi ni kubadilisha kitu kwamba ilipitishwa in Na uchapishaji huu tunatarajia - isipokuwa mimi messed up syntax - tulipata 2, 11, hivyo ilikuwa kweli incremented. ILANI tunahitaji marejeo katika maeneo 2. Nini kama alifanya hivyo? Hii ina maana gani? [Mwanafunzi] Ni yatabadilika. >> Yeah. Dondoo ni nakala ya thamani katika safu. Hivyo bidhaa kubadilika na 2, lakini safu ['a'] bado kuwa 1. Au nini kama mimi kufanya hili? Sasa bidhaa ni alimtuma kama nakala bazi. Hivyo nakala ya hoja itakuwa incremented kwa 2, lakini bidhaa yenyewe ilikuwa kamwe incremented kwa 2. Na bidhaa ni kitu kimoja kama safu bracket chochote, hivyo safu kwamba alikuwa kamwe incremented. Hivyo wote wale maeneo haja yake. PHP ni kawaida pretty smart kuhusu hili. Unaweza kufikiri nataka kupita kwa kumbukumbu - Hii ilikuwa kwa kweli ni swali juu ya mmoja wa psets. Ilikuwa ni jambo questions.txt ambapo alisema, Kwa nini wapate unataka kupita hii struct kwa kumbukumbu? Jibu lilikuwa nini kwa hiyo? [Mwanafunzi] Basi huna nakala jambo kubwa. >> Yeah. struct inaweza kuwa kubwa kiholela, na wakati kupita katika struct kama hoja inahitaji kwamba nakala struct nzima kupita kwa kazi, lakini kama wewe tu kupita kwa rejea struct basi unahitaji tu nakala anuani 4-Byte kama hoja kwa kazi. PHP ni kidogo nadhifu zaidi ya hiyo. Kama mimi na baadhi ya kazi na mimi kupita kwa hiyo safu ya mambo 1000, haina maana kwamba ni kwenda kuwa na nakala zote 1,000 wa mambo hayo kupita ndani ya kazi? Haina kufanya hivyo mara moja. Kama ndani ya kazi hii ni kweli kamwe hugeuza foo, hivyo kama ($ foo === 'hujambo') kurudi kweli.; Angalia sisi kamwe kweli iliyopita ndani ya hoja ya kazi hii, ambayo ina maana kwamba kila ilipitishwa katika kama foo kamwe mahitaji kunakiliwa sababu ni si kubadilisha hilo. Hivyo njia PHP matendo ni hoja ni daima kupita kwa kumbukumbu mpaka kweli kujaribu kurekebisha. Sasa kama mimi kusema $ foo + +, ni sasa kufanya nakala ya awali ya foo na kurekebisha nakala. Hii anaokoa muda. Kama wewe ni kamwe kugusa hii safu mkubwa, wewe kamwe kweli kurekebisha, haina haja ya kufanya nakala, lakini kama sisi tu ya kuweka hii ampersand kwamba maana haina hata nakala yake hata kama huna kurekebisha. Tabia hii inaitwa nakala-on-andika. Utaona katika maeneo mengine, hasa kama wewe kuchukua mfumo wa uendeshaji shaka. Copy-on-kuandika ni mfano pretty kawaida ambapo huna haja ya kufanya nakala ya kitu isipokuwa ni hasa kubadilisha. Yeah. [Mwanafunzi] Nini kama alikuwa na increment ndani ya mtihani, hivyo tu 1 kipengele nje ya 1000 bila haja ya kuwa iliyopita? Mimi nina uhakika. Nadhani ingekuwa nakala jambo nzima, lakini inawezekana ni smart kutosha kwamba - Kweli, kile Mimi nina mawazo ni kufikiria tulikuwa safu kwamba inaonekana kama hii: $ array2 = [ Kisha index '' ni safu ya [1 2 3 4], na index 'b' ni safu ya chochote. Nahitaji koma kati ya wale wote. Fikiria kuna koma. Kisha 'c' ni 3 thamani. Sawa. Sasa hebu sema sisi kufanya $ bazi ($ array2); ambapo bazi haina kuchukua hii kwa kumbukumbu. Hivyo $ foo ['c'] + +; Huu ni mfano vile ambapo sisi ni kupita array2 kama hoja na kisha ni kubadilisha index maalum ya safu na incrementing yake. Mimi uaminifu hawana wazo nini PHP ni kwenda kufanya. Ni urahisi kutengeneza nakala ya jambo nzima, lakini kama ni smart, itafanya nakala ya funguo hizi ambapo hii itakuwa na thamani yake tofauti lakini hii bado anaweza kumweka kwa safu moja 1,2,3,4 na hii bado anaweza kumweka kwa safu moja. Mimi itabidi iPad yake. Sisi kupita katika safu hii ambapo guy hii pointi 3, pointi hii guy [1,2,3,4], guy hii pointi [34, ...] Sasa kwa kuwa tuko kupita kuifanya katika bazi, sisi ni kubadilisha huu. Kama PHP ni smart, inaweza tu kufanya - Sisi bado alikuwa na nakala baadhi ya kumbukumbu, lakini kama kulikuwa na hizi kubwa subarrays nested sisi hakuwa na haja ya nakala hizo. Sijui kama kwamba ni nini hivyo, lakini siwezi kufikiria kufanya hivyo. Hii pia ni faida kubwa ya pretty C zaidi PHP. PHP hufanya maisha rahisi sana kwa mambo mengi, lakini wewe aina ya kuwa na kabisa hakuna wazo jinsi vizuri kufanya mapenzi kwa sababu mimi sielewi chini ya Hood wakati ni kutengeneza nakala hii ya mambo, oh, ni kwamba anaenda kuwa mara kwa mara wakati nakala, ni tu kwenda na mabadiliko 1 pointer, ni kwenda kuwa ridiculously vigumu linear nakala? Nini kama hawezi kupata nafasi? Je, ni basi haja ya kuendesha ukusanyaji takataka ili kupata baadhi ya nafasi zaidi? Na ukusanyaji takataka inaweza kuchukua muda mrefu kiholela. Katika C huna na wasiwasi juu ya mambo haya. Kila line moja ya kuandika unaweza pretty much sababu kuhusu jinsi itakavyo kufanya. Hebu kuangalia nyuma katika haya. Jinsi nice ni kwamba huna kukabiliana na majukumu hash, wanaohusishwa orodha, au jambo kama hilo? Tangu kufanya kazi kwa meza hash ni rahisi sasa, hapa puzzle fun kufanya kazi. Kufungua faili inayoitwa unique.php na ndani yake kuandika mpango PHP (Pia inajulikana kama "script"). Sisi huwa na kuwaita scripts kama uko mfupi mambo ambayo wewe kukimbia katika mstari amri. Kimsingi, lugha yoyote kwamba huwezi kukusanya lakini wewe ni kwenda kukimbia executable katika mstari amri, unaweza wito kwamba script kutekelezwa. Mimi nilikuwa tu kama vile kuandika mpango C kwamba gani hii, lakini mimi si kuiita script tangu mimi kwanza kukusanya yake na kisha kukimbia binary. Lakini mpango huu PHP tunakwenda kuwaita script. Au kama sisi aliandika katika Python au Perl au Node.js au yeyote mambo hayo, tunatarajia kuwaita wote scripts kwa sababu wewe kukimbia nao katika mstari amri lakini hatuwezi kukusanya yao. Tunaweza kufanya hili pretty haraka. Sisi si kwenda kutumia argv. Hebu tu pigo kwa njia hii. Simu yake ya kipekee, kuandika mpango. Unaweza kudhani kwamba pembejeo yana neno moja kwa kila mstari. Kweli, argv itakuwa pretty yasiyo na maana na matumizi. unique.php. Jambo la kwanza kwanza, tunataka kuangalia kama sisi wamekuwa kupita 1 amri-line hoja. Just kama ungependa kutarajia argc na argv katika C, bado tuna wale katika PHP. Hivyo kama ($ 2 argc ==!) Basi mimi si kukabiliana na uchapishaji ujumbe au kitu chochote. Mimi itabidi exit, kosa code ya 1. Mimi naweza pia kurejea 1. Mara chache katika PHP ni wewe katika hali hii ambapo sisi ni saa - Kawaida uko katika kazi kuitwa na kazi kuitwa na kazi kuitwa na kazi. Na kama kitu fulani kitaenda vibaya na wewe tu unataka kutoka kila kitu kabisa, exit tu mwisho wa mpango. Hii pia lipo katika C. Kama uko katika kazi katika kazi katika kazi katika kazi na unataka kuua tu mpango, unaweza kupiga exit na itakuwa tu exit. Lakini katika PHP ni zaidi nadra kuwa sisi ni katika ngazi hii ya juu. Kawaida tuko ndani ya baadhi ya aina ya kazi, hivyo sisi kuwaita exit hivyo kwamba hatuna kurudi up 1 jambo basi anatambua kuna kosa hivyo kwamba anarudi juu kama kwamba inatambua kulikuwa na hitilafu. Hatutaki kukabiliana na kwamba, hivyo exit (1); kurudi (1), katika kesi hii itakuwa sawa. Kisha ni nini tunataka kufungua tunataka fopen. hoja ni kwenda kuangalia pretty sawa. Tunataka fopen ($ argv [1], na tunataka kufungua kwa kusoma. Hiyo anarudi rasilimali ambayo sisi ni kwenda kuwaita f. Hii inaonekana pretty sawa na jinsi C gani ila hatuna kusema JALADA *. Badala yake sisi tu kusema $ f. Sawa. Kweli, nadhani hata hii inatupa ladha kama kwa PHP kazi kuitwa faili. PHP File. Nini hii ni kwenda kufanya ni kusoma faili nzima katika safu. Huna hata haja ya fopen yake. Ni kwenda kufanya hivyo kwa ajili yenu. Hivyo $ mistari = faili ($ argv [1]); Sasa yote ya mistari ya faili ni katika mistari. Sasa tunataka kutatua mistari. Tunawezaje kutatua mistari? Sisi aina mistari. Na sasa tunaweza magazeti yao au chochote. Pengine njia rahisi ni foreach ($ mistari kama $ line) echo $ kamba; [Mwanafunzi] Je, si sisi hata kuvuka mistari na referencing kitu katika aina? Hii ni pale ambapo aina itakuwa hufafanuliwa kama kazi ya aina (& $ safu). Wakati wewe piga kazi huna kupita kwa kumbukumbu. Ni kazi ambayo amefafanua ni kama kuchukua ni kama kumbukumbu. Hii ni kweli hasa ni nini potoka wakati sisi kuweka kila kitu kwa server yetu wakati sisi akaenda 5.3-5.4. Hadi 5.4, hii ilikuwa kikamilifu kuridhisha. kazi hatarajii kuchukua kama rejea, lakini unaweza kupita kama rejea hivyo kama kazi haina kutokea kwa kurekebisha, ni bado iliyopita. Kama ya 5.4, wewe si zinatakiwa kufanya hii. Hivyo sasa njia pekee ya kupita kwa kumbukumbu ni kama kazi waziwazi hufanya. Kama hutaki ni kurekebisha, basi unahitaji kufanya $ nakala = $ mistari na nakala kupita. Hivyo sasa mistari itahifadhiwa na nakala tutageuzwa. php.unique.php. Nipate messed up kitu. Zisizotarajiwa 'aina'. Itakuja kuwa kitu ambacho gani hii kwa ajili yetu. Si hata huko. Angalia wakati wewe kusoma mwongozo kwamba hoja ya kwanza inatarajiwa kuwa safu na ni kuchukuliwa kwa kumbukumbu. Kwa nini hii kulalamika kwangu? Kwa sababu mimi na aina hii ya kazi bado katika hapa kwamba sitaki. Okay, php.unique.php. Sikuweza kupita hoja kwa sababu sina faili. Ni juu ya php.unique.php test.php. Hapa ni test.php wote kuchapishwa ili nzuri Iliyopangwa. Ona kwamba sorted ili ni aina ya weird kwa faili code kwa sababu wote wa mistari yetu tupu yatakuja kwanza basi yatakuja yote ya 1 indentations ngazi wetu kisha kuja wote wa indentations yetu hakuna. Yeah. >> [Mwanafunzi] Basi kwa chanzo code haikuwa kupita kwa kumbukumbu? Ni kwamba kwa ujumla wanapita thamani? [Bowden] Wakati wewe piga kazi, kamwe huamua kama ni ilipitishwa na kumbukumbu. Ni ufafanuzi kazi ambayo huamua kama ni ilipitishwa na kumbukumbu. Na kuangalia ufafanuzi kazi ya aina au kuangalia tu hii, inachukua hoja kwa kumbukumbu. Hivyo bila kujali kama wewe unataka kuchukua ni kwa kumbukumbu, ni gani kuchukua kwa kumbukumbu. Ni hugeuza safu katika mahali. Hii si tu kuruhusiwa. Huna ruhusa ya kufanya hivyo. >> [Mwanafunzi] Oh, okay. [Bowden] Hii, aina ni kwenda kuchukua mistari ukihusishwa na kurekebisha. Na tena, kama hakutaka kufanya hivyo, unaweza kufanya nakala ya aina. Hata katika kesi hii, nakala ni kweli si nakala ya mistari. Ni tu anazungumzia kitu hivyo mpaka kwanza anapata iliyopita, ambapo ni kwanza kwenda kupata iliyopita katika kazi ya aina, ambapo, kwa sababu ni nakala-on-kuandika, sasa nakala ya nakala inaenda kufanywa. Unaweza pia kufanya hili. Hiyo ni sehemu nyingine unaweza kuona ampersand. Unaweza kuona ni katika matanzi foreach, unaweza kuona ni katika maazimio ya kazi, na unaweza kuona ni wakati tu assigning vigezo. Sasa sisi kuwa yametimia chochote kwa kufanya hivi kwa sababu nakala na mistari ni literally kitu kimoja. Unaweza kutumia mistari na nakala ya kubadilishana. Unaweza kufanya unset ($ nakala), na kwamba haina mistari unset, wewe tu kupoteza kumbukumbu yako kwa kitu kimoja. Hivyo kama ya hatua hii, sasa mistari ni njia pekee unaweza kupata mistari. Maswali? Yeah. [Mwanafunzi] Kabisa off topic, lakini huna kuifunga PHP na - >> Wewe hawana. Sawa. [Bowden] napenda kwenda mbali kama kusema ni mbaya mazoezi kwa karibu yao. Kwamba pengine exaggeration, hasa katika script, lakini hebu angalia nini kinatokea kama mimi kufanya hili. Kwamba alifanya kitu. Nini kama alitaka - [sighs] Mimi haja ya kupita hoja. Risasi. Mimi kuitwa ni makosa. Hivyo php.unique.php na hoja. Sasa mimi si hata haja hii. Mimi itabidi kupita hoja halali. Hii printed chochote ni uchapishaji. Mimi nina kuchapa nakala na nakala haipo. Hivyo mistari. Ni kuchapishwa kila kitu, na kisha taarifa Junk hii yote chini hapa, kwa sababu katika kitu chochote PHP kwamba ni nje ya tags PHP ni kwenda tu kuchapishwa literally. Hiyo ndiyo sababu HTML, ni hivyo nice kwamba naweza kufanya div blah, blah, blah darasa au chochote, blah, blah, blah na kisha kufanya baadhi ya kanuni PHP na kisha kufanya mwisho div. Na sasa uchapishaji hii mimi kupata div yangu nzuri juu juu, kila kitu PHP kuchapishwa, div chini. Maafa wakati kitu kama hii kinatokea, ambayo ni pretty kawaida, tu newline kupotea chini ya faili. Wewe bila kufikiri itakuwa kuwa kubwa ya mpango huo mpaka kuzingatia ukweli kwamba pamoja na browsers - Jinsi redirects kazi au kimsingi kazi yoyote headers, wakati wa kufanya uhusiano wako na tovuti na inapeleka nyuma wote hawa headers na mambo kama majibu 200 au majibu redirect au chochote, headers ni halali tu mpaka Byte kwanza ya data ni alimtuma. Unaweza kuelekeza maelfu ya nyakati, lakini haraka kama Byte kwanza ya data ni alimtuma wewe si walidhani redirect tena. Kama una newline kupotea chini ya faili na hebu kusema kwamba matumizi ya kazi hii na kisha unataka - Hebu kusema ni faili nyingine kwamba index.php na wewe require_once kitu - Siwezi kufikiria mfano mzuri wa hayo. suala kinachotokea wakati mstari huu chini anapata aliunga. Hutaki chochote zimerejewa bado. Hata kama wewe hakuwa na nia ya juu ya kitu chochote kupata aliunga, kitu gani kupata aliunga na hivyo sasa wewe si walidhani kutuma headers yoyote zaidi na wewe ni kwenda kupata malalamiko. Wewe tu hawana haja tags wale kufunga. Kama mpango juu ya kufanya kitu kwa HTML - na ni kikamilifu busara kufanya chini hapa div chochote na kisha katika hatua hii unaweza au huwezi pamoja nao. Ni kweli haina jambo. Lakini katika maandiko ya PHP ni nadra kwa kulifunga. Wakati kila kitu ni PHP, kabisa kila kitu, wewe si kweli wanahitaji kuifunga / unapaswa kulifunga. Kushughulika na masharti ni nicer kuliko katika C. Katika PHP unaweza specify string kwa quotes moja au mbili. Pamoja na quotes moja huwezi kutumia "kutoroka" Mwandamano. Daima kutoroka, blah, blah, blah. Hivyo printf ni nadra sana katika PHP. Mimi nadhani ingekuwa kutumia printf ikiwa mimi alitaka kufanya aina ya kitu - katika pset 5 wewe kutumika sprintf au chochote. Lakini unataka kufanya 001.jpg na 002.jpg. Hivyo kwa kuwa aina ya kitu ambapo mimi kweli wanataka formatting Nakala napenda kutumia printf. Lakini vinginevyo mimi ingekuwa tu kutumia kamba concatenation. Mimi kamwe kweli kutumia printf. Sisi ni tu kutofautisha kati ya maelezo quotes moja na quotes mbili. tofauti kubwa ni kwamba enda quotes, itakuwa kuchapishwa literally. Hakuna data Char aina katika PHP, tofauti na C, hivyo hii ni sawa na hii. Wao ni wote masharti. Na kitu kizuri kuhusu masharti moja quote ni mimi naweza kusema 'hujambo dunia!' blah, blah, blah, $ $ Wooo. Nini kinatokea wakati mimi magazeti hii itakuwa ni magazeti yake halisi. Hebu kujikwamua yote ya mambo yetu. Hivyo echo $ str1; Ni literally printed wote wa mambo hayo: dola ishara, backslash n, ambayo unaweza kudhani itakuwa newlines - wote wa mambo hayo ni Prints literally. Kitu tu unahitaji kutoroka ni moja quotes kwa sababu vinginevyo kudhani ni kufunga quotes moja. Double quotes, tofauti kabisa. Sisi tayari kuona syntax mwangaza ni cluing sisi juu ya nini kuhusu kwenda vibaya sana. php.unique. Undefined variable: wooo kwa sababu hii ni kufasiriwa kama variable kuitwa wooo. Quotes Double basi wewe Insert vigezo katika - Hebu sema $ jina = "Rob"; Hivyo echo "Hi, jina langu ni $ jina!"; Ni inatambua hii kama variable. Wakati mimi kukimbia kwamba - Nami Insert newline - Hi, jina langu ni Rob! na hujambo ulimwengu! Hii ni kwa sababu mimi kamwe kuondolewa uchapishaji wa wooo hapo juu. Kuna 1 zaidi hatua unaweza kufanya. $ Safu = [1, 2, 3]; Nini kama nataka magazeti index ya kwanza ya safu? Unaweza kufanya $ safu [0]. syntax mwangaza ni kidokezo. Nini hii kwenda kufanya? php.unique. Hi, jina langu ni 1! ambayo si nini nilitaka. Syntax mwangaza alisema uongo kwangu. Hebu jaribu '' -> 1, 'b' -> 2. Hayo ni jinsi mimi ingekuwa kuandika. Zisizotarajiwa moja quote (T_ENCAPSED blah, blah, blah, blah, blah). Wazo ni kwamba siyo kutambua hili kama sehemu ya safu. Siyo akitambua hili kama safu indexed na barua. Wewe unataka kufanya hivyo kuzungukwa na braces curly, na sasa chochote ni katika hii brace curly itakuwa interpolated, ambayo ni neno sisi kutumia kwa ajili ya kuingiza vigezo magically hizi katika maeneo ya kulia. Sasa kufanya hivyo, php.unique, na Hi, jina langu ni 1! kama ilivyotarajiwa au Hi, jina langu ni Rob! Jambo moja kwamba ni aina ya nice kuhusu quotes moja ni kwamba - Kuna baadhi ya gharama kwa interpolating. Kama matumizi ya quotes mbili, mkalimani ina kwenda juu ya hii kamba, kuhakikisha kwamba, "Oh, hapa variable Sasa mimi haja ya kwenda kupata kwamba kutofautiana na kuingiza hapa.". Hata kama wewe si kutumia vigezo yoyote, kitu ndani ya hizi quotes mbili inahitaji interpolated, lakini bado itakuwa polepole kwa sababu ya mahitaji ya kwenda juu ya quotes mbili kuangalia mambo ambayo yanahitaji interpolated. Hivyo moja quotes inaweza kuwa kidogo kwa kasi kama hakuna mahitaji ya kuwa interpolated, na mimi huwa hata kutumia quotes moja kwa ajili ya, 'Hi, jina langu ni'. $ Safu ['a'] anyway. Hiyo itakuwa sawa na kile sisi alikuwa mbele. Lakini ni suala la upendeleo. Kama unatumia PHP, pengine hawajali kuhusu tofauti kasi. Kuna si ya kutosha kufikiri yao nje kwa kuanzia. Maswali yoyote ya mwisho? Sisi kwa kweli hakuwa na hata kupata njia yake yote, lakini mambo haya alikuwa boring. Jambo la mwisho kwamba aina ya nice katika PHP ni wakati wewe ni kushughulika na HTML, utasikia kutumia ni kidogo, hivyo nice syntax mkato kwa kuchapa kutofautiana. Bila kuweka PHP hapa, hii inaitwa mfupi tags. Rasmi kama ya PHP 5.4, hii imepungua thamani. Wewe ni ilipendekeza kuweka php. Hii bado mkono, vitambulisho hivyo fupi na <=? Ni bado kikamilifu faini. Ni kwa default mkono, hivyo unaweza kutumia hizi kama unataka, na wao ni pretty rahisi. Maswali yoyote? Wote haki. Kaa classy, ​​San Diego. [Chuckles] Bye. [Atacheka] [Applause] [atacheka] [CS50.TV]