[Powered by Google Translate] [Seksyon 8 - Higit kumportableng] [Rob Bowden - Harvard University] [Ito ay CS50. - CS50.TV] Mga tala sa seksyon ng linggo ay medyo maikling, kaya lang ako pagpunta sa panatilihin ang pakikipag-usap, guys pagpunta sa patuloy na pagtatanong, at susubukan naming upang punan up ng mas maraming oras hangga't maaari. A maraming ng mga tao sa tingin na ang pset na ito ay hindi kinakailangang mahirap, ngunit ito ay masyadong mahaba. Ang pset spec mismo ay tumatagal ng oras upang basahin. Kami magbibigay sa iyo ng maraming ng SQL maaari mong posibleng kailangan mong gamitin. Lakad namin sa iyo sa pamamagitan ng maraming nito, kaya hindi ito dapat masyadong masamang. Nagsimula ay sinuman o tapos? Ang huling pset. Oh, aking Diyos. Karaniwan may JavaScript isa pagkatapos nito, ngunit ang mga bagay sa kalendaryo pagbabago gumagawa ng lahat ng 1 linggo mas maikli, at hindi na namin magkaroon ng JavaScript pset. Hindi ko alam kung paano na nakakaapekto kung ang JavaScript ay lilitaw sa pagsusulit o Pagsusulit 1. Isipin ko ito ay isang bagay tulad ng kailangan mong malaman ang mataas na antas na mga bagay tungkol sa JavaScript, ngunit pagdudahan kong nais lang namin magbibigay sa iyo ng tuwid na JavaScript code dahil hindi mo pa nagkaroon ng pset sa loob nito. Ngunit iyon ay mga bagay-bagay na para sa pagsusuri ng pagsusulit sa susunod na linggo. Seksyon ng mga tanong. Isang maraming mga bagay-bagay na ito ay medyo mahina worded, ngunit gagamitin namin talakayin kung bakit. Hindi tulad ng C, PHP ay isang "dynamic na-type na" wika. Ano ang ibig sabihin, mong tanungin? Well, halimbawa paalam sa lahat ng mga pansamantalang trabaho, Float, int, at iba pang mga keyword kailangan mong gumamit kapag deklarasyon ng variable at mga function sa C. Sa PHP, ang uri ng variable ay natutukoy sa pamamagitan ng halaga na kasalukuyan itong may hawak. Kaya bago namin i-type ang code na ito sa isang file na tinatawag dynamic.php, PHP ay dynamic na-type. Na ay totoo. Hindi sumasang-ayon ako sa ang katunayan na ito ay nangangahulugan na sinasabi namin paalam sa magpasinda, Float, int, at iba pang mga keyword. Ang eksaktong pagkakaiba sa pagitan ng dynamic na-type at ang alternatibong, na statically-type, na dynamic na-type, ang lahat ng iyong uri ng checking at bagay-bagay mangyayari sa oras ng run, samantalang statically-type ang mangyayari sa makatipon oras. Ang salitang static sa pangkalahatan ay tila ibig sabihin ang mga bagay makatipon oras. Hulaan ko may mga iba pang mga gamit para dito, ngunit sa C kapag idedeklara ka ng isang static na variable, ang imbakan nito ay inilalaan sa makatipon oras. Dito, dynamic na-type lamang ay nangangahulugan na - Sa C kung sinusubukan mong magdagdag ng isang string at isang integer, kapag makatipon mo ito, ito ay pagpunta sa magreklamo dahil ito upang sabihin na hindi ka maaaring magdagdag ng isang int at isang pointer. Lang hindi isang wastong pagpapatakbo. Ito ay isa pang bagay na namin sa isang segundo. Ngunit na uri ng checking, ang katunayan na ito complains sa ipunin ang oras, ay static uri checking. May mga wika na kung saan hindi mo na kailangang sabihin ng pansamantalang trabaho, Float, int, at ang lahat ng mga bagay, ngunit ang wika sabihin sa mula sa konteksto ng bagay na kung anong uri ito ay dapat na maging, ngunit pa rin ito statically-type. Kaya kung gagawin mo 51, OCaml, hindi mo na kailangang gamitin ang alinman sa mga uri ng, ngunit pa rin ito ay sa makatipon oras nating hindi mo maaaring gawin ito dahil ka paghahalo ng isang int at isang string. Dynamic na-type lamang nangangahulugan na minsan sa panahon magpatakbo ng oras ka upang makakuha ng isang reklamo. Kung ginamit mo rin ang Java bago, sa pangkalahatan, halos anumang C-type wika pagpunta sa statically-type, kaya ang C, C + +, Java, ang lahat ng mga pangkalahatang statically-type. Sa Java kapag makatipon ng isang bagay at sinasabi mo string mga katumbas ng bagong isang bagay na ay hindi isang string, na magreklamo dahil ang mga uri ay lamang hindi tumugma. Na pagpunta sa magreklamo sa makatipon oras. Ngunit ito din ay may ilang mga dynamic na bagay na gusto kung subukan mong pinalayas ng isang bagay sa isang uri na mas tiyak na kaysa sa kasalukuyang uri nito, may walang maaari itong gawin sa ipunin ang oras upang suriin kung ang cast na upang magtagumpay. Java ay mayroon ding ilang dynamic na uri ng pagsuri sa lalong madaling ito ay nakakakuha na linya ng code kapag aktwal na ito execute, ito ay pagpunta sa gawin ang cast, suriin kung ang cast na bisa sa unang lugar, at kung ito ay hindi, pagkatapos ito ay pagpunta sa magreklamo na mayroon kang isang hindi wastong uri. Dynamic uri ng check. Type ito sa isang file na tinatawag na dynamic.php. Dynamic.php. Unzip ko na-format. Mayroon kaming isang variable, namin itakda ito sa integer 7, pagkatapos kami ay upang i-print ito at ang% s - Oh, kami ay pag-print sa uri nito, kaya gettype upang ibalik ang uri ng variable. Lang kami pag-print ang uri nang paulit-ulit. Lang namin php.dynamic.php. Susubukan naming makita na pagbabago mula sa integer sa string sa Boolean bilang namin pumunta sa pamamagitan ng. Sa C ay walang Boolean uri ng data, ay walang uri ng mga data ng string. Mayroong pansamantalang trabaho * at Boolean lang may kaugaliang int o pansamantalang trabaho o isang bagay. Sa PHP ganitong mga uri umiiral, at na isa ng malaking kalamangan ng PHP sa C - na ang mga pagpapatakbo ng string ay walang hanggan mas madali sa PHP kaysa C. Sila lamang gumana. Kaya dumating namin pabalik dito. Namin tumakbo dynamic.php. Sinasabi nito sa PHP interpreter, na tinatawag na php, upang patakbuhin ang PHP code sa dynamic.php. Kung mayroon kang anumang mga error sa file, ang interpreter na ang magsasabi sa iyo! Interpreter, ito ay isa pang malaking pagkakaiba sa pagitan ng PHP at C. Sa C mayroon kang upang makatipon ng isang bagay at pagkatapos mo patakbuhin na inipon na file. Sa PHP hindi kailanman makatipon ng anumang. Kaya ang PHP interpreter talaga lang binabasa ang linyang ito sa pamamagitan ng linya. Hit sa var = 7 pagkatapos ito hit sa printf pagkatapos ay pinindot ng var pagkatapos ito hit sa printf at iba pa. May kaunting kino-compile ang ginagawa nito, at Caches ang mga resulta kaya kung nagpapatakbo ka ng script sa ibang pagkakataon, maaari mong gawin ang ilang mga, ngunit isa lamang ito isang linya sa pamamagitan ng linya ng uri ng bagay. Iyon ay nangangahulugan na ng maraming ng optimizations na makuha namin sa C, tulad ng kino-compile ang, lamang pangkalahatang tagatala ang maaaring gawin ng maraming ng mga trick para sa iyo. Maaari itong tumagal ang mga hindi nagamit na mga variable, maaari itong gawin ang lahat ng mga uri ng mga bagay, maaari itong gawin buntot recursion. Sa PHP hindi ka pagpunta upang makakuha ng na kalamangan dahil lamang ito upang simulan ang e-execute ng linya sa pamamagitan ng linya sa pamamagitan ng linya, at hindi ito talagang makilala ang mga bagay na ito bilang madali dahil ito ay hindi 1 malaking pass ng compilation sa ibabaw ng bagay at pagkatapos ay pagpapatupad; ito lamang linya sa pamamagitan ng linya. Kaya, na ang interpreter. Back sa aming dynamic pagta-type: medyo cool, eh? Mo talagang hindi maaaring gawin na sa C! Ngayon, tingnan kung maaari mong malaman kung ang uri ng bawat isa sa mga sumusunod na halaga. Tingnan ito para sa reference. Kaya 3.50. Anong uri tingin mo na magiging? Narito ang mga uri mayroon kami. Mayroon kaming mga bools, integer, lumulutang na puntos, string, array, mga bagay, at pagkatapos mapagkukunan, na uri ng malabo. Tingin ko may talagang isang halimbawa dito. Pagkatapos may null. Null ay isang espesyal na uri. Hindi tulad ng C kung saan null lamang ang pointer sa address 0, sa PHP, null sarili nitong uri kung saan ang tanging wastong bagay ng na uri null. Ito ay mas kapaki-pakinabang para sa error checking. Sa C kung saan namin ay ang isyu na ito kung saan kung bumalik ka null, ay na ibig sabihin bumabalik ka ng Null pointer o paggamit ng null upang magpahiwatig ng error o lahat ng na pagkalito nagkaroon kami sa isang punto. Dito, bumabalik null karaniwan ay nangangahulugan error. May maraming mga bagay ring ibalik maling para sa error. Ngunit point ang null uri, ang tanging bagay ng null uri null. Pagkatapos na callback ay tulad ng maaari mong tukuyin ang ilang mga anonymous na function. Hindi mo na kailangang magbigay ng pag-andar ng isang pangalan, ngunit hindi mo na kailangang humarap sa na dito. Pagtingin sa ang uri na sila inaasahan sa amin upang malaman, kung ano sa tingin mo ang uri ng 3.50 ay? >> [Mag-aaral] Float. Oo. Kaya pagkatapos dito, ano ang gagawin mo sa tingin ang uri ng ito ay? >> [Mag-aaral] Array. Oo. Ang unang Float, ang pangalawang isa ay isang array. Pansinin na ang array na ito ay hindi tulad ng isang array C kung saan mayroon kang ilang halaga ang index 0, index 1 ilang mga halaga. Narito ang mga indeks ng mga a, b, at c at ang mga halaga ay 1, 2, at 3. Sa PHP walang pagkakaiba sa pagitan ng isang nag-uugnay array at isang regular na array tulad ng iyong tingin nito sa C. Mayroon lamang ito, at sa ilalim ng hood isang regular na array ay lamang ng isang nag-uugnay array kung saan 0 mapa sa ilang mga halaga sa parehong paraan ng mga mapa sa ilang mga halaga. Para sa kadahilanang ito, ang PHP maaaring medyo masamang para sa talagang mabilis code / benchmarking bagay dahil sa C kapag gumagamit ka ng isang array na alam mo na ang pag-access sa isang miyembro ay pare-pareho ang oras. Sa PHP-access ang isang miyembro ay na alam kung magkano ang oras? Marahil ito ay pare-pareho kung hashes tama. Sino ang nakakaalam kung ano talaga ito ginagawa sa ilalim ng hood? Mo ba talagang kailangan upang tumingin sa pagpapatupad upang makita kung paano ito haharapin ang mga na. Kaya pagkatapos fopen. Tingin ko dito sabihin lang PHP manu-manong fopen upang tingnan ang uri ng return. Nakikita namin dito maaari kang tumingin hanggang sa medyo magkano ang anumang function sa PHP manu-manong at ito ay uri ng tao pahina ng PHP. Ang uri ng return ay na mapagkukunan. Iyon ay kung bakit Tiningnan ko ito, dahil hindi namin ay talagang tukuyin ang mapagkukunan. Ang ideya ng mapagkukunan, sa C Mayroon FILE * o anumang uri ng; sa PHP mapagkukunan ay ang iyong FILE *. Ito ay kung ano ang iyong pagpunta sa pagbasa mula sa, kung ano ang iyong pagpunta sa pagsulat sa. Karaniwang panlabas na, kaya ang ito ang mapagkukunan maaari mong hilahin ang mga bagay mula sa at magtapon ng mga bagay sa. At sa wakas, ano ang uri ng Null? >> [Mag-aaral] null. Oo. Kaya ang tanging bagay na null null. Null ay null. Isang tampok ng uri ng sistema ng PHP (para sa mas mahusay o para sa mas masahol pa) nito kakayahan upang salamangkahin ng mga uri. Kapag sumulat ka ng isang linya ng PHP code na pinagsasama halaga ng iba't-ibang uri, PHP ay subukan upang gawin ang mga makabuluhang bagay. Subukan ang bawat isa ng ang mga sumusunod na linya ng code na PHP. Ano-print? Ba ito kung ano ang iyong inaasahan? Bakit o bakit hindi? Ito katotohanan tungkol sa PHP kung bakit kung ano ang tinatawag naming mahina-type. Mahina-type at masidhi-type, may iba't ibang mga gamit para sa mga term na iyon, ngunit karamihan ng mga tao ay gumagamit ng mahina-type at masidhi-type nangangahulugan na ang ganitong uri ng bagay kung saan ("1" + 2); na gumagana. Sa C na hindi gagana. Maaari mong isipin na ito ay hindi gumagana. Isang maraming ng mga tao paghaluin dynamic na-type at mahina na mag-type at static na mag-type at malakas na mag-type. Python ay isa pang halimbawa ng isang wika na dynamic na-type. Maaari mong magtapon sa paligid ng mga uri sa mga variable at ito upang matukoy ang oras ng run anumang error checkings. Sa Python ito upang maisagawa ang mga ito at makikita nito ("1" + 2); at ito ay mabibigo dahil sinasabi nito na hindi ka maaaring magdagdag ng isang string at isang integer. Sa PHP, na lamang ang bilang dynamic na-type, hindi ito ay mabibigo. Mahinang pagta-type ay may sa gawin sa ang katunayan na bagay sa uri na hindi talaga kabuluhan ang kinakailangan. Kaya ("1" + 2), ang maaari kong isipin na ang string 12, ang maaari kong isipin ito ang string 3, Ang maaari kong isipin na ito bilang integer 3. Hindi ito kinakailangan na rin tinukoy, at marahil kami ay makikita dito na kapag-print namin ("1" + 2); marahil ito sa pagiging ibang kaysa sa pagpi-print (1 + "2"). At ito ay may kaugaliang, sa aking opinyon, para sa mas masahol pa. Dito maaari naming subukan ang mga. Isa pang maliit na nanlilinlang tungkol sa PHP ay hindi mo na kailangang aktwal na isulat ang file. Nito patakbuhin ang command na mode. Kaya php-r, pagkatapos ay maaari naming magtapon sa command dito: "Print ('1 '+ 2);" at makikita ko magtapon ng isang bagong linya. Na ito ay naka-print na 3. Mukhang ito ng mga Kopya 3 at ang integer 3. Kaya ngayon sabihin subukan ang iba pang mga paraan sa paligid: "Print (1 + '2 '); Makuha namin 3, at ito din integer 3? Ko matapat ay walang ideya. Mukhang tulad na pare-pareho. Walang anumang pagkakataon ng mga ito ang string 12 o anumang bagay tulad na dahil PHP, hindi katulad ng JavaScript at Java masyadong, may isang hiwalay na operator para sa pagdudugtong. Pagdudugtong sa PHP ay tuldok. Kaya sa pag-print (1 '2 '.); Ay upang bigyan kami ng 12. May gawi na humantong sa pagkalito kung saan ang mga tao ay subukan upang gawin ang isang bagay tulad ng STR + = ilang iba pang mga bagay na gusto nila upang idagdag sa sa dulo ng kanilang mga string, at na pagpunta sa mabibigo. Kailangan mong gawin STR. = Kaya huwag kalimutan pagdudugtong sa PHP ay isang tuldok. Iba pang mga bagay na susubukan: i-print ("CS" + 50); Sinabi ko na na walang pag-asa ng mga ito na nagreresulta sa CS50 dahil ang pagdudugtong ay hindi +. Ano ang tingin mo ito ay pagpunta sa hanggang pagiging? Ko matapat may ganap na walang ideya. Mukhang ito ay may 50. Nakikita ang string, at pumusta ako kung inilalagay namin 123CS - Nakikita ang unang string, sinusubukan upang basahin ang isang integer mula sa ito o isang numero mula dito. Sa kasong ito nakikita 123CS. "Iyon ay hindi magkaroon ng kahulugan bilang isang integer, kaya lang ako pagpunta sa tingin ng 123." Kaya 123 + 50 ay magiging 173. At dito ito nagsisimula pagbabasa ito bilang isang integer. Ito ay hindi makita ang anumang bagay, kaya itinuturing ito bilang 0. Kaya 0 + 50 ay magiging 50. Ito ako ipagpalagay ay pagpunta sa gawin ang isang bagay na katulad. Ako iniisip 99. Oo, dahil ito ay upang gawin ang unang - Kaya 99. Narito (10/7), kung ito ay C, kung ano ang na nagbabalik? [Mag-aaral] 1. >> Oo, ito ay 1 dahil ang 10/7 paghahati 2 integer. Isang integer na hinati sa pamamagitan ng isang integer ay pagpunta upang bumalik ang isang integer. Hindi na ito maaaring ibalik 1 anumang punto na magiging, kaya lamang ito upang bumalik 1. Dito pag-print (10/7); ito upang bigyang-kahulugan ang aktwal na. At ito ay nangangahulugan na kung aktwal mong gustong gawin integer rounding at bagay-bagay tulad na, kailangan mong gawin ang naka-print (palapag (10/7)); Sa C marahil ito ay kakaiba na maaari mong umasa sa integer truncation regular, ngunit sa PHP hindi ka maaaring dahil awtomatikong ito i-on ito sa isang Float. At pagkatapos (7 + totoo); ano ang gagawin sa tingin mo na magiging? Ako paghula 8 kung ito ay i-interpret ang tunay na bilang 1. Mukhang ito ang 8. Kaya anumang tapos kami na sa nakalipas na 10 minuto na dapat mong ganap na hindi kailanman gawin. Makikita mo ang code na ito. Hindi ito bilang direkta bilang na ito. Maaari kang magkaroon ng 2 variable, at 1 variable mangyayari sa isang string at ang iba pang mga variable mangyayari sa isang int, at pagkatapos mong idagdag ang mga variable na ito nang sama-sama. Dahil ang PHP ay dynamic na-type at hindi ito gawin ang anumang uri checking para sa iyo at dahil mahina ito ang nai-type at dahil lang ito awtomatikong magtapon mga bagay na ito nang sama-sama at ang lahat ay lamang gumana, mahirap na kahit alam na ang variable na ito ay dapat na isang string ngayon, kaya hindi ko dapat idagdag ito sa variable na ito, na kung saan ay isang integer. Pinakamahusay na kasanayan ay kung ang isang variable ay isang string, panatilihin ito bilang isang string magpakailanman. Kung ang isang variable ay isang int, panatilihin ito bilang isang int magpakailanman. Kung nais mong upang harapin na may integer at string, maaari mong gamitin ang varsint - na sa JavaScript. Intval. Gagawin ko ito sa lahat ng oras. PHP at JavaScript ko bang isama ang lahat. Kaya intval ay pagpunta upang ibalik ang integer value ng isang variable. Kung pumasa kami sa "print (intval ('123 ')); makakakuha ka ng 123. Intval mismo ay hindi pagpunta sa gawin ang check para sa amin na eksklusibo isang integer. Ang PHP manual, may mga lamang kaya maraming mga function na magagamit, kaya dito sa tingin ko kung ano ang gusto kong gamitin ay is_numeric unang. Ako paghula na ibinalik maling. Iyon ay isa pang bagay na kailangan namin upang pumunta sa paglipas ay ===. Kaya is_numeric ('123df '), hindi mo isip ng na bilang is_numeric. Sa C gusto mong upang umulit sa lahat ng mga character at suriin upang makita kung ang bawat character na digit o anumang. Narito is_numeric ay upang gawin iyon para sa amin, at bumabalik maling. Kaya kapag-print ko na, naka-print na walang, kaya dito ako paghahambing nito upang makita, mo mangyayari sa maling? At kaya ngayon pag-print 1. Tila ito ng mga Kopya 1 bilang totoo sa halip ng pag-print ng tunay na bilang totoo. Siguro kung gawin ko print_r. Hindi, pa rin ito 1. Pagpunta pabalik sa ===, == umiiral pa rin, at kung makipag-usap ka sa Tommy makikita siya sabihin == perpektong fine. Ako sabihin na == ay kahila-hilakbot at hindi mo dapat gamitin ang ==. Pagkakaiba ay na == ikinukumpara bagay kung saan maaari ito ay totoo kahit na hindi sila ang parehong uri, samantalang === Inihahambing ng mga bagay at una itong tseke ang mga ito ay ang parehong uri? Oo. Okay, ngayon ako pagpunta upang makita kung sila aktwal na ihambing magiging katumbas. Kang makakuha ng kakaiba na mga bagay tulad ng 10 katumbas - hayaan ang makita kung ano na nagsasabing. Kaya ('10 '== '1 e1'); Ito nagbabalik totoo. Ba ang sinuman anumang mga guesses kung bakit ito ay nagbabalik ng tunay? Ito ay hindi lamang tungkol sa. Siguro, ito ay isang pahiwatig. Ngunit kung baguhin ko na sa isang f - darn ito! Panatilihing ako gumagamit ng mga double quote. Ang dahilan na ang mga double quote ay sumisigaw sa akin dahil ko na ilagay ito sa double quote. Kaya ko maaaring makatakas ang mga double quote in dito, ngunit solong quote gawing mas madali. Kaya ('10 '== '1 F1'); ay hindi-print ng tunay. ('10 '== '1 E1'); mga Kopya totoo. [Mag-aaral] ito hex? >> Ito ay hindi hex, ngunit malapit na ito ay tulad ng - 1e1, pagtatandang siyentipiko. Kinikilala 1e1 bilang 1 * 10 ^ 1 o anumang. Iyon ang katumbas integer. Kung gagawin namin === ito pagpunta sa maling. Aktwal na ako ay walang ideya kung gagawin namin == kung ano ang tungkol sa (10 at '10abc ');? Ayos lang. Sa gayon ay totoo. Kaya tulad kapag ginawa mo (10 + '10abc '), at ito ay 20, dito (10 == '10abc '); ay totoo. Kahit na mas masahol pa ang mga bagay tulad ng (maling == null); ay totoo o (maling == 0), ay totoo, (maling == []); May kakaiba kaso ng - Iyon ay isa ng mga kakaiba mga kaso. Pansinin na (maling == []); ay totoo. ('0 '== False); ay totoo. ('0 '== []); False. Kaya == ay sa walang paraan palipat. maaaring maging katumbas sa b at maaaring maging katumbas ng c, ngunit b hindi maaaring maging katumbas ng c. Na ang isang pagkasuklam sa akin, at dapat mong laging gamitin ===. [Mag-aaral] Maaari ba kaming gawin! == Pati na rin? >> [Bowden] Oo. Katumbas ay! = At! ==. Ito ay aktwal na nagdala sa pset spec kung saan maraming mga function ng return - Ang PHP manu-manong ay magandang tungkol dito. Inilalagay ng sa isang malaking pulang kahon, "Ito ay bumalik false kung may isang error." Ngunit bumabalik 0 ay isang perpektong makatwirang bagay upang bumalik. -Isip tungkol sa anumang mga function na kung saan ay inaasahan upang bumalik ang isang integer. Sabihin nating function na ito ay dapat bilangin ang bilang ng mga linya sa isang file o isang bagay. Sa ilalim ng normal na pangyayari, ipasa mo ito function na ang isang file at ito upang bumalik ng isang integer na kumakatawan sa bilang ng mga linya. Kaya 0 ay isang perpektong makatwirang bilang kung ang file ay walang laman. Ngunit ano kung pumasa ka at pag-andar ng isang hindi wastong file ang mangyayari sa bumalik maling kung kayo na ipasa ang mga ito ng isang hindi wastong file? Kung kamakailan mo lamang gawin == hindi ka differentiating ang kaso sa pagitan ng hindi wastong file at ng file na walang laman. Palaging gamitin ang ===. Na ang lahat ng mga. Sa PHP, ang uri ng array ay naiiba mula sa kung ano ang nakasanayan sa C. Sa katunayan, maaari mo napansin nito sa itaas kapag nakita mo na ito ng uri ng array. Ang syntax ng bracket ay bago ng PHP 5.4, na kung saan ay ang pinakabagong bersyon ng PHP. Bago ito palagi kang nagkaroon na magsulat array ('isang' -> 1, 'b' -> 2. Na ang constructor para sa isang array. Ngayon PHP ay sa wakas ay sa paligid sa magaling na syntax ng kuwadradong mga bracket, na lamang kaya mas mas mahusay kaysa sa array. Ngunit isinasaalang-alang ng PHP 5.4 ay ang pinakabagong bersyon, maaari kang makakita ng mga lugar na hindi kahit PHP 5.3. Sa ibabaw ng tag-araw namin tumakbo sa ang isyu na ito kung saan PHP 5.3 ay kung ano ang namin sa appliance, ngunit ang server namin deploy ang lahat ng aming grado libro at isumite at ang lahat na mga bagay-bagay sa ay PHP 5.4. Hindi alam ito, binuo namin sa 5.3, hunhon sa 5.4, at ngayon lahat ng isang biglaang na wala sa aming code ay gumagana dahil mayroong nangyari sa mga pagbabago sa pagitan ng 5.3 at 5.4 na hindi paurong katugmang, at mayroon kaming upang pumunta at ayusin ang lahat ng aming mga bagay na hindi gumagana para sa PHP 5.4. Para sa klase na ito, dahil ang ginagawa ng appliance may PHP 5.4, perpektong pinong upang gamitin ang mga square bracket. Ngunit kung ikaw ay naghahanap ng mga bagay sa paligid sa Internet, kung naghahanap ka ng ilang mga uri ng bagay-bagay sa array, malamang ka upang makita spell out array constructor syntax dahil na ay sa paligid dahil PHP ay ipinanganak at square bracket syntax ay sa paligid para sa nakalipas na ilang buwan o tuwing 5.4 dumating sa paligid. Ito ay kung paano mo index. Tulad sa C kung paano gagawin mo index sa pamamagitan ng mga square bracket tulad ng $ array [0], $ array [1], $ array [2], ka-index sa parehong paraan kung mangyari mo ang iyong mga indeks ng pagiging string. Kaya $ array ['isang'] at $ array ['b']. $ Array [b]. Bakit ito mali? Ito ay malamang na bumuo ng isang babala ngunit gagana pa rin. PHP may kaugaliang upang gawin iyon. Ito ay may kaugaliang lang, "Pupunta ako upang balaan ka tungkol dito, ngunit lamang ako pagpunta sa panatilihin ang pagpunta "At gawin ang anumang maaari ko." Ito ay malamang na isalin ang ito sa isang string, ngunit ito ay posible na sa ilang mga punto sa nakalipas na may sinabi tukuyin ang b 'Hello World'. Kaya ngayon b maaaring maging pare-pareho at $ array [b] ang talagang ginagawa 'Hello World'. Tingin ko sa puntong ito, o hindi bababa sa aming PHP setting ng, kung susubukan mo na i-index sa isang array at key na hindi umiiral, ito ay mabibigo. Palagay ko ay hindi ito lamang balaan ka. O hindi bababa sa maaari mong itakda ito upang hindi ito ay balaan ka lang, ito ay dumaretso nabigo. Ang paraan na suriin upang makita kung mayroong aktwal tulad index ng isset. Kaya isset ($ array ['Hello World']) ay bumalik false. isset ($ array ['b']) ay nagbabalik ng tunay. Maaari mong ihalo ang mga mga syntaxes na ito. Ako ay medyo sigurado kung ano ang array na ito ay humantong sa pagiging - maaari naming subukan ito. Oh, kailangan ko PHPWord. Ito ay paghahalo ang syntax kung saan mo tukuyin kung ano ang susi ay at hindi mo tukuyin kung ano ang susi ay. Kaya 3 dito mismo ay isang halaga. Hindi mo na tahasang sinabi kung ano ang key nito ay magiging. Ano sa tingin ninyo ang susi nito ay magiging? [Mag-aaral] 0. >> Ako paghula 0 lamang dahil ito ay ang unang isa na hindi namin tinukoy. Maaari naming aktwal na gumawa ng ilang mga kaso. Kaya print_r-print recursive. Ito ay i-print ang buong array. Ito i-print ang mga subarrays ng array kung mayroong anumang. Kaya print_r ($ array); php.test.php. Ito hitsura ito ibinigay ito 0. Mayroon talagang isang bagay na dapat tandaan dito, ngunit babalikan ka namin sa ito sa isang pangalawang. Ngunit ano kung mangyari ko sa index na ito 1? PHP ay hindi pagkakaiba sa pagitan ng mga indeks ng string at integer mga indeks, kaya sa puntong ito ko na tinukoy ng index 1 at ang maaari kong gawin ang parehong $ array [1] at $ array ['1 '] at ito ay ang parehong index at ang parehong key. Kaya ngayon kung ano ang sa tingin mo 3 ay magiging? >> [Mag-aaral] 2. >> [Bowden] ako paghula 2. Oo. Ito ay 2. Paano kung ginawa namin ito ay 10, ito ay 4? Ano ang tingin mo sa index ng 3 ay magiging? Ako iniisip 11. Aking hula sa kung ano ang PHP ginagawa - at sa tingin ko Nakita ko na ito bago - ito lamang Sinusubaybayan ng kung ano ang pinakamataas na numeric index ginagamit ito sa ngayon. Hindi ito upang magtalaga ng isang string index sa 3. Ito ay palaging isang numeric index. Kaya Sinusubaybayan ng pinakamataas na ito ay nakatalaga sa ngayon, na ang mangyayari sa 10, at upang magbigay ng 11-3. Ano ang sinabi ko bago, mapansin ang paraan na ito ay pag-print ito array. Mga Kopya key 10, key 4, key 11, key d. O kahit sabihin gawin - Hulaan ko Hindi ko maglagay ng 0, ngunit ito sa pagpi-print ng 1, 2, 3, 4. Ano kung lumipat ako dito? O hayaan ang aktwal na ilipat ang mga 2. Ngayon mga Kopya 2, 1, 3, 4. PHP ng array ay hindi tulad ng iyong regular na hash talahanayan. Perpektong makatwirang mag-isip ng mga ito bilang hash na mga talahanayan 99% ng oras. Ngunit sa iyong hash na mga talahanayan walang pakiramdam ng pagkakasunud-sunod kung saan ang mga bagay ay ipinasok. Ito sa lalong madaling mong ipasok ang mga ito sa iyong hash talahanayan, ipinapalagay walang naka-link na listahan at maaari mong hatulan sa loob ng isang naka-link na listahan na ipinasok sa unang. Ngunit dito namin ipinasok 2 una at alam ito kapag ito ay pag-print ang array na ito na 2 ang mauna. Hindi ito i-print ito sa anumang pagkakasunud-sunod lamang. Ang teknikal na istraktura ng data na ito gamit ang isang order na mapa, kaya Maps susi sa mga halaga at Naaalala ito ang pagkakasunud-sunod kung saan ang mga susi ay ipinasok. Isa lamang ito sa ilang mga komplikasyon na kung saan ito nakakainis upang aktwal na - Sabihin nating mayroon kang isang array 0, 1, 2, 3, 4, 5 at nais mong kumuha ng index 2. Isang paraan ng paggawa nito, sabihin makita kung ano na kamukha. 0, 2, 1, 3, 4. I-unset ang mangyayari sa I-unset ang parehong mga variable at mga indeks ng array. Kaya I-unset ($ array [2]); Ngayon kung ano ang ito upang magmukhang? 2 ay nawala, kaya na perpektong fine. Higit pang nakakainis ay kung gusto mong mga bagay na tunay na tulad ng isang array. Ko bang ilagay ang mga random na numero. Ngayon mapansin ang aking mga indeks ng. Gusto ko lang ito sa tulad ng isang array C kung saan ito napupunta mula 0 sa haba - 1 at maaari ba akong umulit sa paglipas ng mga ito bilang tulad. Ngunit sa lalong madaling I-unset ang ko ang pangalawang index, kung ano ang sa index 3 ay hindi na ngayon maging index 2. Sa halip lang ito aalis na index at ngayon pumunta ka ng 0, 1, 3, 4. Ito perpektong makatwirang. Lang nakakainis at mayroon kang gawin ang mga bagay tulad ng array maghugpong. Oo. [Mag-aaral] Ano ang mangyayari kung mayroon kang isang para sa loop at nais upang pumunta higit sa lahat ang mga elemento? Kapag ito pindutin 2, magbunga kailanman? Iterating sa paglipas ng isang array. Mayroong 2 mga paraan na maaari mong gawin ito. Maaari mong gamitin ang isang regular para sa loop. Ito ay isa pang kaguluhan ng PHP. Karamihan ng mga wika, nais kong sabihin, may ilang uri ng haba o Len o isang bagay nagpapahiwatig ang haba ng array. Sa PHP count. Kaya count ($ array); $ i + +) Sabihin lamang ang naka-print ($ array [$ i]); Notice: Hindi natukoy offset: 2. Lamang ito ng pagpunta sa mabibigo. Ito ay ang dahilan na, para sa pinaka-bahagi, hindi mo na kailangang upang umulit sa isang array tulad nito. Maaari itong maging isang pagmamalabis, ngunit hindi mo na kailangang upang umulit sa isang array tulad nito dahil nagbibigay ng PHP nito foreach syntax kung saan foreach ($ array bilang $ item). Ngayon namin kung-print ($ item); - we'll talakayin ito sa isang segundo - na gumagana perpektong fine. Ang paraan na foreach gumagana ang unang argumento ay ang array ka iterating sa paglipas. At ang pangalawang argumento, ang item, sa pamamagitan ng bawat pass ng para sa loop ito ay pagpunta sa sa susunod na bagay sa array. Kaya tandaan array ay isang pagkakasunod-sunod. Sa unang pagkakataon sa pamamagitan ng para sa loop, ang item ay magiging 123 ito 12 pagkatapos ito ng 13 at pagkatapos ito ng 23 at pagkatapos ito ng 213. Mga bagay makakuha ng talagang kakaiba kapag ginawa mo ang isang bagay tulad ng foreach. Natin makita kung ano ang mangyayari dahil hindi mo dapat gawin ito. Paano kung namin I-unset ($ array [1]); Iyon ay marahil inaasahan. Ka iterating sa array na ito, at sa bawat oras na ikaw ay unsetting unang index. Kaya para sa index 0, ang unang bagay na, ang item kinakailangan sa halaga 0, kaya ito ay pagpunta sa 123. Ngunit sa loob ng para sa loop namin I-unset ang index 1, kaya na nangangahulugan na 12 ay nawala. Kaya i-print. PHP_EOL. PHP_EOL lamang newline, ngunit ito ay technically mas portable dahil newline sa Windows ay naiiba mula sa mga newline sa Mac at UNIX. Sa Windows newline ay \ r \ n, kung saan lahat ng dako iba pa may kaugaliang lang sa \ n. PHP_EOL ay naka-configure upang ito ay gumagamit ng anumang newline ng iyong system ay. Kaya-print na. Natin hindi print_r ($ array) sa dulo. Mayroon akong walang ideya na na ang pag-uugali. Item pa rin tumatagal sa ang halaga ng 12 kahit I-unset namin 12 bago namin nakuha sa ito mula sa array. Huwag dalhin ang aking mga salita sa, ngunit mukhang foreach lumilikha ng isang kopya ng array at pagkatapos item tumatagal sa lahat ng mga halaga ng kopya na. Kaya kahit na baguhin ang array sa loob ng para sa loop, hindi ito pinapahalagahan. Item ay magdadala sa orihinal na halaga. Natin subukang unsetting ito. Ano kung ito ay $ array [1] = "kumusta"; Kahit na inilalagay namin ang "kumusta" sa array, ang item ay hindi kailanman kinakailangan sa halagang iyon. May isa pang syntax sa foreach loop kung saan inilagay mo ang 2 mga variable na pinaghiwalay sa pamamagitan ng isang arrow. Ang unang variable ay ang susi ng halaga na, at ang pangalawang variable ay ang parehong eksaktong item. Ito ay hindi kawili-wili dito, ngunit kung pumunta namin pabalik sa aming orihinal na kaso ng 'ng' -> 1, 'B' -> 1, dito kung lamang namin umulit para sa bawat array bilang item, ang item ay pagpunta sa 1 bawat solong oras. Ngunit kung gusto rin naming malaman ang key na nauugnay sa item na iyon ginagawa namin bilang $ key -> $ item. Kaya ngayon maaari naming gawin ang naka-print ($ key. ':'. Ngayon iterating at pag-print ng bawat key at ang nauugnay na halaga. Isang karagdagang bagay na maaari naming gawin sa foreach loop ay baka makita mo ang syntax na ito. Ampersand bago variable pangalan ay malamang na kung paano ginagawa ng PHP reference. Saan reference na halos kapareho sa mga payo, hindi mo payo, kaya hindi mo kailangang humarap sa memory direkta. Ngunit ikaw ay walang reference kung saan ang 1 variable ay tumutukoy sa parehong bagay bilang isa pang variable. Sa loob ng dito sabihin gawin $ item. Natin bumalik sa 1, 10. Natin gawin $ item + +; Iyon pa rin umiiral sa PHP. Maaari mo pa ring gawin + +. php.test.php. Kailangan kong i-print ito. print_r ($ array); -Print namin 2, 11. Kung lamang ako ay tapos foreach ($ array bilang $ item) pagkatapos item ay ang halaga 1 sa unang pagkakataon sa pamamagitan ng loop. Ito ay dagdagan ng 1 hanggang 2 at pagkatapos ay tapos na kami. Kaya pagkatapos ito ay pumunta sa pamamagitan ng pangalawang pass ng loop at ang item na 10. Ito palugit item sa 11, at pagkatapos na lamang ang layo itinapon. Pagkatapos namin print_r ($ array); at sabihin makita na ito ay 1, 10. Kaya ang pagdagdag na ginawa namin ay mawawala. Ngunit foreach ($ array bilang & $ item) ngayon item na ito ay ang parehong item bilang na ito dito mismo. Ito ay ang parehong bagay. Kaya $ item + + pagbabago array 0. Isa lamang, maaari mo ring gawin ang $ k -> $ item at maaari mong gawin $ array [$ k] + +; Kaya isa pang paraan ng paggawa na, kami ay libreng upang baguhin ang item, ngunit hindi baguhin ang aming orihinal na array. Ngunit kung ginagamit namin k, na ang aming key, at pagkatapos ay maaari naming lamang index sa aming array gamit na key at dagdagan na. Mas direkta binabago ang aming orihinal na array. Maaari mo ring gawin na kung para sa ilang kadahilanan nais kakayahan upang baguhin - Aktwal, ito perpektong makatwirang. Hindi mo nais na magsulat ng $ array [$ k] + +, mo lamang nais na magsulat ng $ item + + ngunit gusto mo pa ring sasabihin kung ($ k === 'isang') pagkatapos ay dagdagan ang item at pagkatapos ay i-print ang aming array. Kaya ngayon kung ano ang inaasahan namin print_r gawin? Ano ang halaga ay dapat na naka-print? [Mag-aaral] 2 at 10. >> [Bowden] Tanging kung key ay 'isang' namin aktwal na-print na. Marahil napaka bihira, kung kailanman, kailangan upang tukuyin ang mga function sa PHP, ngunit maaari mong makita ang isang bagay na katulad kung saan mo tukuyin ang isang function tulad ng function na anumang. Karaniwan ay sabihin mo ($ foo, $ bar) at pagkatapos ay tukuyin ito sa anumang. Ngunit kung gagawin ko ito, pagkatapos na nangangahulugan na anumang tawag anumang, anumang tawag baz, kaya ang unang argumento ang pumasa sa baz ay maaaring mabago. Sabihin $ foo + +; at sa loob ng dito sabihin baz ($ item); Ngayon kami ay pagtawag ng isang function. Argument ay nakuha sa pamamagitan ng reference, na nangangahulugan na kung namin baguhin ito namin ang pagbabago ng bagay na pumasa sa. At pag-print ito inaasahan namin - maliban kung ako messed up syntax - nakuha namin 2, 11, kaya aktwal na ito ay incremented. Mapansin namin kailangan ang mga sanggunian sa 2 lugar. Paano kung ginawa ko ito? Ano ang ibig sabihin nito? [Mag-aaral] Ito ay baguhin. >> Oo. Item ay lamang ng isang kopya ng halaga sa array. Kaya item ay magbabago sa 2, ngunit array sa ['a'] ay pa rin 1. O kung ano kung gagawin ko ito? Ngayon item ay ipinadala bilang isang kopya sa baz. Kaya ang kopya ng argument ay incremented sa 2, ngunit ang item mismo ay hindi kailanman incremented sa 2. At item ay ang parehong bagay tulad ng array na bracket anumang, kaya array na ay hindi kailanman incremented. Kaya parehong mga lugar na ito kailangan. PHP ay karaniwang medyo na smart tungkol dito. Maaari mong isipin gusto ko upang pumasa sa pamamagitan ng reference - Ito ay talagang isang tanong sa isa sa mga psets. Ito ay isang questions.txt bagay na kung saan ito sinabi, Bakit baka gusto mong pumasa sa struct na ito sa pamamagitan ng reference? Ano ang sagot na iyon? [Mag-aaral] Kaya hindi mo upang kopyahin ang isang bagay malaki. >> Oo. Struct ay maaaring maging mang malaki, at kapag pumasa ka sa struct in bilang isang argument kailangang kopyahin na buong struct upang pumasa ang mga ito sa pag-andar, samantalang kung ikaw lang makapasa sa struct sa pamamagitan ng reference pagkatapos lamang ito kailangang kopyahin ang isang 4-byte address bilang ang argumento sa function na. PHP ay isang kaunti mas matalinong kaysa. Kung mayroon akong ilang function na at pumasa ako dito ng isang hanay ng mga 1,000 na mga bagay, ay na ibig sabihin ito ay upang kopyahin ang lahat ng 1,000 ng mga bagay upang pumasa ito sa function na? Ito ay hindi upang gawin iyon agad. Kung sa loob ng function na ito ay hindi kailanman aktwal na binabago ang foo, kaya kung ($ foo === 'kumusta') nagbabalik ng tunay.; Hindi namin mapansin aktwal na-modify ang argumento loob ng function na ito, na nangangahulugan na ang anumang ay pumasa sa sa bilang foo hindi kailanman kailangang makokopya dahil hindi ito pagbago nito. Kaya paraan PHP gawa ay ang argumento ay palaging ang naipasa sa pamamagitan ng reference hanggang sa iyong aktwal na subukan upang baguhin ito. Ngayon kung sinasabi ko $ foo + +; ito ngayon gumawa ng isang kopya ng orihinal na foo at baguhin ang mga kopya. Ito sine-save ng ilang oras. Kung hindi ka pagpindot napakalaking array na ito, hindi mo kailangang aktwal na baguhin ang mga ito, hindi ito kailangan upang gumawa ng mga kopya, samantalang kung namin lamang ilagay ito ampersand na nangangahulugang hindi ito ay kopyahin ito kahit na baguhin ito. Pag-uugali na ito ay tinatawag na kopya-sa-write. Makikita mo ito sa iba pang mga lugar, lalo na kung magdadala sa iyo ng isang kurso ng operating system. Kopya-sa-write ay medyo karaniwan pattern kung saan hindi mo kailangang gumawa ng isang kopya ng isang bagay maliban kung ang aktwal na ito nagbabago. Oo. [Mag-aaral] Paano kung mayroon kang ang pagdagdag sa loob ng pagsubok, kaya lamang ang 1 elemento ng 1,000 ay kailangang baguhin? Hindi ako sigurado. Tingin ko Gusto ito kopyahin ang buong bagay, ngunit posible na smart sapat na - Aktwal na, kung ano ako iniisip ay isipin nagkaroon kami ng isang array na ganito ang hitsura: $ array2 = [ Pagkatapos index 'ng' ay isang array ng [1 2 3 4], at index 'b' ay isang array ng anumang. Kailangan ko ng mga kuwit sa pagitan ng lahat ng mga. Isipin may mga kuwit. Pagkatapos 'c' ay ang halaga 3. Okay. Ngayon sabihin nating ginagawa namin $ baz ($ array2); kung saan baz ay hindi tumagal ito sa pamamagitan ng reference. Kaya $ foo ['c'] + +; Ito ay isang halimbawa kung saan kami ay pagpasa array2 bilang isang argument at pagkatapos ay pagbabago sa isang partikular na index ng array sa pamamagitan ng incrementing ito. Ko matapat ay walang ideya kung ano ang PHP ay pagpunta sa gawin. Maaari itong madaling gumawa ng isang kopya ng ang buong bagay, ngunit kung ito ay sa smart, ito ay gumawa ng isang kopya ng mga key kung saan ito ay may natatanging halaga nito ngunit maaari pa ring tumuturo sa parehong array 1,2,3,4 at ito ay maaari pa ring ituro sa parehong array. Idedetalye ko iPad ito. Pumasa namin sa array na ito na kung saan ang tao na ito puntos sa 3, ito mga puntos ng tao sa [1,2,3,4], tao ang mga puntos sa [34, ...] Ngayon na kami ay pagpasa ito sa baz, kami ay ang pagbabago na ito. Kung PHP ang smart, maaari lamang gawin - Mayroon pa rin namin upang kopyahin ilang memory, ngunit kung may mga malaking nested subarrays hindi namin kailangan upang kopyahin ang mga. Hindi ko alam kung na kung ano ang ginagawa nito, ngunit maaari kong isipin ito ginagawa na. Din ito ay isang magandang malaking kalamangan ng C sa paglipas ng PHP. PHP ginagawang buhay kaya mas madali para sa maraming mga bagay, ngunit uri ng may ganap na walang ideya kung gaano kahusay ito gumanap dahil mayroon akong walang ideya sa ilalim ng hood kapag ito ay paggawa ng mga kopya ng mga bagay, oh, ay na pagpunta sa isang pare-pareho ang kopya ng panahon, ito lamang upang baguhin ang 1 pointer, ito ridiculously mahirap linear kopya? Paano kung hindi ito mahanap espasyo? Ba pagkatapos ay kailangan upang patakbuhin ang koleksyon ng basura upang makakuha ng ilang higit pang espasyo? At basura koleksyon ay maaaring tumagal mang mahaba. Sa C hindi mo kailangang mag-alala tungkol sa mga bagay na ito. Bawat solong linya isulat mo ay maaaring medyo magkano dahilan tungkol sa kung paano ito upang isagawa. Tingnan natin muli sa mga. Paano gandang ito na hindi mo na kailangang humarap sa hash function, naka-link na mga listahan, o anumang bagay tulad na? Dahil nagtatrabaho sa hash talahanayan kaya madaling ngayon, narito ang isang masaya palaisipan upang gumana sa. Buksan up ng isang file na tinatawag na unique.php at sa loob nito magsulat ng isang programa sa PHP (Kilala rin bilang isang "script"). May posibilidad namin na tumawag sa kanila script kung hindi sila maikling ang mga bagay na magpatakbo ka sa command line. Talaga, ang anumang wika na hindi mo makatipon ngunit ka upang patakbuhin ang executable sa command line, maaari kang tumawag na executable script. Ko lang pati na rin magsulat ng isang C programa na ito, ngunit hindi ko tumawag ito ng script dahil makatipon ko muna ito at pagkatapos ay patakbuhin ang binary. Ngunit ito PHP programa namin ay pagpunta sa tumawag sa isang script. O kung sinulat ni namin ito sa Python o Perl o Node.js o anumang ng mga bagay, nais naming tumawag sa kanila lahat ng script dahil mong patakbuhin ang mga ito sa command line ngunit hindi namin ipunin ang mga ito. Maaari naming gawin ito medyo mabilis. Hindi namin ay pumunta sa upang gamitin ang argv. Sabihin lamang pumutok sa pamamagitan ng. Tumawag ito natatanging, magsulat ng isang programa. Maaari mong ipagpalagay na ang input ay naglalaman ng isang salita sa bawat linya. Aktwal, argv medyo hindi mahalaga sa gamitin. unique.php. Muna ang unang bagay, gusto naming upang suriin kung tayo ay pumasa sa 1 command-line argumento. Tulad ng gusto mong asahan argc at argv sa C, mayroon pa rin kaming mga sa PHP. Kaya kung ($ argc! == 2) hindi ko ay humarap sa pag-print ng isang mensahe o anumang. Kukunin ko na lang lumabas, error code na 1. Ko ring bumalik 1. Bihira sa PHP ay sa estado kung saan hindi namin sa - Karaniwan ikaw ay nasa isang function na tinatawag na sa pamamagitan ng isang function na tinatawag na sa pamamagitan ng isang function na tinatawag na sa pamamagitan ng isang function. At kung ang isang bagay napupunta mali at gusto mo lang lumabas ang lahat ng ganap, exit lang nagtatapos sa programa. Din umiiral sa C. Kung ikaw ay nasa isang function sa isang function sa isang function sa isang function at gusto mong patayin ang programa, maaari kang tumawag sa exit at ito lamang lumabas. Ngunit sa PHP mas bihira na namin sa nangungunang antas na ito. Karaniwan hindi namin sa loob ng ilang uri ng mga function na, kaya tinatawag naming exit sa gayon ay hindi namin upang bumalik 1 bagay kung saan pagkatapos napagtanto ng error kaya na nagbabalik kung na kinikilala nagkaroon ng isang error. Hindi namin gustong humarap sa na, kaya lumabas (1); return (1), sa kasong ito ay magiging katumbas. Pagkatapos kung ano ang gusto naming upang buksan gusto naming fopen. Ang mga argumento ay pagpunta upang tumingin medyo katulad. Gusto naming fopen ($ argv [1], at gusto naming upang buksan ito para sa pagbabasa. Na nagbabalik ng isang mapagkukunan na kung saan kami ay pagpunta sa tumawag ng f. Ito mukhang medyo katulad sa kung paano ginagawa ng C ito maliban sa hindi namin upang sabihin ang FILE *. Sa halip lang namin sabihin $ f. Okay. Aktwal na, sa tingin ko kahit na ito ay nagbibigay sa amin ng isang pahiwatig sa PHP function na tinatawag na file. PHP File. Ano ito ay pagpunta sa gawin ay basahin ang isang buong file sa isang array. Hindi mo kailangan sa fopen ito. Ito ay upang gawin iyon para sa iyo. Kaya $ linya = file ($ argv [1]); Ngayon ang lahat ng mga linya ng file ay sa linya. Ngayon gusto naming upang pag-uri-uriin ang mga linya. Paano maaari naming pag-uri-uriin ang mga linya? Naming ayusin ang linya. At ngayon maaari naming i-print ang mga ito o anumang. Marahil ang pinakamadaling paraan ay foreach ($ linya ng $ linya) echo $ linya; [Mag-aaral] Hindi ba namin kahit tumawid linya sa pamamagitan ng na tumutukoy ng isang bagay sa-uuri? Ito ay kung saan-uuri ay tinukoy bilang function na-uri-uriin (& $ array). Kapag tumawag ka sa function na hindi mo pumasa ito sa pamamagitan ng reference. Ang function na na tumutukoy ito bilang pagkuha ito bilang sanggunian. Ito ay talagang eksakto kung ano ang nangyaring mali kapag inilalagay namin ang lahat sa aming mga server kapag nagpunta kami 5.3-5.4. Hanggang 5.4, ito perpektong makatwirang. Ang isang function na ay hindi inaasahan upang dalhin ito bilang sanggunian, ngunit maaari mong ipasa ang mga ito bilang sanggunian kaya kung ang function ay mangyari upang baguhin ito, pa rin ito binagong. Ng 5.4, hindi mo dapat gawin ito. Kaya ngayon ay ang tanging paraan na pumasa ka sa pamamagitan ng reference ay kung ang function tahasang ginagawa ito. Kung hindi mo nais na ito upang baguhin ito, pagkatapos ay kailangan mong gawin ang $ kopya = $ linya at kopya ng pass. Kaya ngayon linya ay hindi mapangalagaan at kopya baguhin. php.unique.php. Maaari ko messed ng isang bagay. Hindi inaasahang '-uuri'. May pagpunta sa isang bagay na ito para sa amin. Hindi kahit doon. Mapansin kapag mong basahin ang manu-manong na ang unang argumento ay inaasahan na maging isang array at ito ay kinuha sa pamamagitan ng reference. Bakit ito nagrereklamo sa akin? Dahil mayroon akong ito function na-uri-uriin in dito pa rin na hindi ko nais. Okay, php.unique.php. Hindi ako pumasa ito sa isang argument dahil hindi ko magkaroon ng isang file. Ang ng php.unique.php sa test.php. Narito ang lahat ng naka-print ang test.php sa isang magaling na pinagsunod-sunod pagkakasunod-sunod. Pansinin na pinagsunod-sunod pagkakasunod-sunod ay uri ng kakaiba para sa isang file code dahil ang lahat ng aming mga blangko na linya ay darating unang pagkatapos ay dumating ang lahat ng aming indentations ng 1 antas at pagkatapos ay ang lahat ng aming mga walang indentations. Oo. >> [Mag-aaral] Kaya para sa source code ay hindi ito ang naipasa sa pamamagitan ng reference? Ay na sa pangkalahatan ay naipasa sa pamamagitan ng halaga? [Bowden] Kapag tumawag ka ng isang function, ito ay hindi kailanman tinutukoy kung ito ay naipasa sa pamamagitan ng reference. Ang kahulugan ng function na na tumutukoy kung ito ay naipasa sa pamamagitan ng reference. At pagtingin sa function na kahulugan ng-uri-uriin o lamang ng pagtingin sa ito, tumatagal ang argumento sa pamamagitan ng reference. Kaya hindi alintana ng kung nais mong ito upang dalhin ito sa pamamagitan ng reference, ginagawa ito sa pamamagitan ng reference. Binabago ang array sa lugar. Na ito ay hindi pinahihintulutan. Hindi ka pinapayagang gawin ito. >> [Mag-aaral] Oh, okay. [Bowden] ito,-uuri ay pagpunta sa tumagal ng mga linya sa pamamagitan ng sanggunian at baguhin ito. At muli, kung hindi mo gusto ito upang gawin iyon, maaari mong gumawa ng isang kopya ng-uuri. Kahit na sa kasong ito, kopyahin ay hindi talagang isang kopya ng mga linya. POINTS lamang ito sa parehong bagay hanggang unang maipo-modify, kung saan una itong pagpunta upang binago sa function na-uri-uriin, kung saan, dahil ito ang kopya ng-sa-sumulat, na ngayon ay isang kopya ng kopya ay pagpunta sa gawin. Maaari mo ring gawin ito. Na ang iba pang mga lugar maaari mong makita ang ampersand. Ang makikita mo ito sa foreach loop, makita ang mga ito sa mga pagdeklara ng function na, at makita ito kapag lamang nagtatalaga ng mga variable. Nagagawa namin ngayon ang walang sa pamamagitan ng paggawa nito dahil kopya at linya literal ang parehong bagay. Maaari mong gamitin ang mga linya at kopyahin salitan. Maaari mong gawin ang I-unset ($ kopya); at hindi I-unset ang linya, mo lang mawala ang iyong reference sa parehong bagay. Kaya ng puntong ito, ngayon linya ay ang tanging paraan na maaari mong ma-access ang linya. Mga tanong? Oo. [Mag-aaral] Ganap na off topic, ngunit hindi mo upang isara ang PHP gamit ang - >> gawin mong hindi. Okay. [Bowden] Gusto ko pumunta tulad ng upang sabihin ito ay masamang kasanayan upang isara ang mga ito. Iyon ay marahil isang pagmamalabis, lalo na sa isang script, ngunit sabihin makita kung ano ang mangyayari kung gawin ko ito. Na ginawa walang. Paano kung gusto ko - [sighs] Kailangan ko upang pumasa ang isang argument. Abutin. Tinatawag ko ito maling. Kaya php.unique.php may isang argument. Ngayon hindi ko kailangan ito. Ba akong magpasa ng isang wastong argumento. Ito naka-print anumang ito ay pag-print. Ako pag-print ng kopya at kopya ay hindi umiiral. Kaya linya. -Print ito ang lahat, at pagkatapos ay mapansin ang lahat ng ito junk pababa dito, dahil sa PHP anumang na ay sa labas ng PHP tag ay lamang pagpunta na ipi-print literal. Iyon ang dahilan kung bakit HTML, kaya magaling na ang maaari kong gawin div blah, blah, blah klase o anumang, blah, blah, blah at pagkatapos ay gumawa ng ilang PHP code at pagkatapos ay gawin ang pagtatapos div. At ngayon ay pag-print ito na nakukuha ko ang aking magaling div up tuktok, ang lahat na PHP naka-print, div sa ibaba. Mapaminsalang kapag nangyayari ang isang bagay tulad nito, na kung saan ay medyo karaniwang, lamang ng kalat-kalat na newline sa ilalim ng file. Hindi mo sa tingin ito na malaki ng isang pakikitungo hanggang isaalang-alang mo ang katotohanan na may mga browser - Paano nagre-redirect sa trabaho o talaga anumang mga header ng trabaho, kapag gumawa ka ng iyong koneksyon sa isang website at ito ay nagpapadala ng bumalik sa lahat ng mga header at mga bagay tulad ng pagtugon 200 o tugon na pag-redirect o anumang, header ng bisa lamang hanggang sa unang byte ng data ay ipinadala. Maaari mong-redirect ang mga libu-libong ng beses, ngunit sa lalong madaling unang byte ng data na ipinadala hindi ka dapat na i-redirect muli. Kung mayroon kang isang ligaw na hayop newline sa ilalim ng isang file at sabihin nating na gamitin mo ang function na ito at pagkatapos ay nais mong - Ipagpalagay natin na ito ng isa pang file na index.php at require_once ka ng isang bagay - Hindi ako makapag-isip ng isang magandang halimbawa nito. Ang isyu mangyayari kapag ang linya na ito sa ibaba ay makakakuha echoed. Hindi mo nais ang anumang ay echoed pa. Kahit na hindi mo binalak sa anumang nagsisimula echoed, ang isang bagay ay makapag-echoed at ito ngayon ay hindi ka dapat magpadala ng anumang higit pang mga header at ikaw ay pagpunta upang makakuha ng mga reklamo. Hindi mo lang kailangan ang mga tag na iyon ng pagsasara. Kung plano mong sa paggawa ng isang bagay na may HTML - at perpektong makatwirang gawin dito div anumang at pagkatapos ay sa puntong ito maaari mong o hindi mo maaaring isama ang mga ito. Hindi ito ay talagang mahalaga. Ngunit sa PHP script ito bihirang upang isara ito. Kapag ang lahat ay PHP, talagang lahat, hindi mo talagang kailangan upang isara ang mga ito / hindi mo dapat itong isara. Pagharap sa string ay mas nicer kaysa sa C. Sa PHP, maaari mong tukuyin ang isang string na may single o double quote. May single quote hindi mo maaaring gamitin ang "escape" na pagkakasunud-sunod. Patuloy makatakas, blah, blah, blah. Kaya printf ay napakabihirang sa PHP. Hulaan ko ko bang gamitin ang printf kung Nais kong gawin ang isang uri ng bagay - sa pset 5 na ginamit mo sprintf o anumang. Ngunit gusto mong gawin 001.jpg at 002.jpg. Kaya para sa na uri ng bagay kung saan aktwal ko nais upang i-format ang teksto Gusto ko gamitin ang printf. Ngunit kung hindi man gusto ko lang gamitin ang string pagdudugtong. Hindi ko talagang gamitin printf. Lang kami differentiating ang mga detalye sa pagitan ng mga single quote at double quote. Ang pinakamalaking pagkakaiba ay na single quote, ito ay ipi-print literal. May ay walang magpasinda uri ng data sa PHP, hindi tulad ng C, kaya ito ay katumbas na ito. Hindi sila parehong string. At ang magaling na bagay tungkol sa mga single quote string ay maaari kong sabihin ang 'halo mundo!' blah, blah, blah, $ $ Wooo. Ano ang mangyayari kapag-print ko ito ay ito ay i-print ito literal. Natin mapupuksa ng lahat ng aming mga bagay-bagay. Kaya echo $ str1; Naka-print na ito literal ang lahat ng mga bagay: dollar palatandaan, backslash n, na tingin mo ay newline - lahat ng mga bagay na ito ng mga Kopya literal. Ang tanging bagay na kailangan mo upang makatakas ang mga single quote dahil kung hindi man ay sa tingin ito ay isinasara ang mga single quote. Double quote, ganap na naiibang. Namin na makita ang mga syntax-highlight cluing sa amin sa sa kung ano ang pumunta masyado mali. php.unique. Hindi natukoy variable: wooo dahil ito ay kahulugan bilang isang variable na tinatawag wooo. Hinahayaan ka ng mga double quote magpasok ng mga variable sa - Sabihin nating $ name = "Rob"; Kaya echo "Hi, ang aking pangalan ay $ pangalan!!"; Ito ay kinikilala ito bilang isang variable. Kapag nagpatakbo ako na - at ako magpasok ng isang newline - Hi, ang aking pangalan Rob!! at halo mundo!! Ito ay dahil hindi ko inalis ang pag-print ng wooo sa itaas. May 1 karagdagang hakbang na maaari mong gawin. $ Array = [1, 2, 3]; Paano kung gusto kong i-print ang unang na-index ng array? Gawin mong $ array [0]. Ang mga syntax-highlight ay isang palatandaan. Ano ito gawin? php.unique. Hi, ang aking pangalan ay 1!! na hindi kung ano ang nais kong. Syntax-highlight na lied sa akin. Natin subukan ang 'isang' -> 1, 'b' -> 2. Kung paano Gusto ko upang isulat ito. Hindi inaasahang solong quote (T_ENCAPSED blah, blah, blah, blah, blah). Ang ideya ay na hindi ito pagkilala ito bilang bahagi ng array. Hindi ito pagkilala ito tulad ng array na-index sa pamamagitan ng sulat ng. Gusto mong gawin na napapalibutan ng mga kulot tirante, at ngayon anumang sa kulot suhay na ito ay interpolated, kung saan ay ang salita na ginagamit namin para sa magically pagpasok ng mga variable na ito sa tamang lugar. Ngayon ginagawa ito, php.unique, at Hi, ang aking pangalan ay 1!! tulad ng inaasahan o Hi, ang aking pangalan ay Rob!! Isang bagay na uri ng magaling tungkol sa mga single quote na - Mayroong ilang gastos sa interpolating. Kung gumagamit ka ng mga double quote, interpreter ay upang pumunta sa ang string na ito, siguraduhin na, "Oh, narito ang isang variable. Ngayon ay kailangan ko upang pumunta makakuha ng variable na iyon at ipasok ito dito." Kahit na hindi mo gamitin ang anumang mga variable, wala sa loob ng mga double quote kailangang interpolated, ngunit ito ay pa rin mas mabagal dahil kailangan nito upang pumunta sa ibabaw ng double quote naghahanap para sa mga bagay na kailangang interpolated. Kaya solong quote ay maaaring maging isang bit mas mabilis kung walang kailangang interpolated, at malamang ko sa kahit na gamitin ang solong quote para sa, 'Hi, ang aking pangalan ay'. $ Array ['isang'] pa rin. Na katumbas sa kung ano ang namin ay may bago. Ngunit ito ay isang bagay ng preference. Kung gumagamit ka ng PHP, marahil ay hindi pakialam tungkol sa speed pagkakaiba. Walang sapat na dahilan sa kanila upang magsimula sa. Anumang panghuling tanong? Namin ang aktwal na ay hindi kahit na makakuha ng sa pamamagitan ng lahat ng ito, ngunit ang mga bagay na ito ay mayamot. Ang huling bagay na uri ng magaling sa PHP kapag ikaw ay pagharap sa HTML, gagamitin mo ang mga ito ng kaunti, kaya maganda ang syntax ng shortcut para sa pag-print ng isang variable. Nang walang paglalagay ng ng PHP dito, ito ay tinatawag na maikling tag. Opisyal na bilang ng PHP 5.4, ito ay deprecate. Inirerekomenda upang ilagay ang php. Ito pa rin ang suportado, kaya maikli na tag gamit ang