[Powered by Google Translate] [Neni 8 - më të rehatshme] [Rob Bowden - Universiteti i Harvardit] [Kjo është CS50. - CS50.TV] Këto shënime seksion javë do të jetë mjaft e shkurtër, kështu që unë jam vetëm do të vazhdoni të flisni, ju djema jeni duke shkuar për të mbajtur pyetje, dhe ne do të përpiqemi për të mbushur kohën sa më shumë të jetë e mundur. Shumë njerëz mendojnë se kjo pset nuk është domosdoshmërisht e vështirë, por është shumë e gjatë. Spekulim pset vetë merr një orë për të lexuar. Ne ju japim një shumë të SQL ju mund ndoshta duhet të përdorni. Ne ecin ju nëpërmjet një shumë e saj, kështu që nuk duhet të jetë shumë e keqe. Ka dikush filluar apo mbaruar? Është pset fundit. Oh, Zoti im. Zakonisht ka një të aktivizoni Java një pas kësaj, por gjërat ndryshojnë kalendarike bën gjithçka 1 javë shkurtër, dhe ne nuk kemi një pset JavaScript. Unë nuk e di se si ndikon nëse JavaScript është do të paraqitet në provim ose Quiz 1. Unë e imagjinoj se do të jetë diçka si ju duhet të dini të nivelit të lartë në lidhje me gjërat JavaScript, por unë dyshoj që ne vetëm do të ju jap të drejtë JavaScript kodin që ju nuk keni pasur një pset në të. Por kjo do të jetë gjëra për rishqyrtim quiz javën e ardhshme. Seksioni i pyetjeve. Një shumë e këtij stuff është disi dobët formuluara, por ne do të diskutuar pse. Ndryshe C, PHP është një "dinamike-typed" gjuha. Çfarë do të thotë kjo, që ju kërkoni? E pra, Thuaj lamtumirë për të gjithë ata që noton, char, int, dhe fjalë kyçe të tjera që ju duhet të përdorni kur duke deklaruar variablave dhe funksioneve në C. Në PHP, lloji një ndryshore është përcaktuar nga vlera se ajo aktualisht mbajnë. Pra, para se të shkruani këtë kod në një skedar të quajtur dynamic.php, PHP është shtypur dinamike. Kjo është e vërtetë. Unë pajtohem me faktin se që do të thotë ne jemi duke thënë lamtumirë char, noton, int, dhe fjalë kyçe të tjera. Dallimi në mes të saktë shtypur dhe dinamike alternativë, e cila është shtypur statically, është që shtypen dinamike, të gjithë kontrollin tuaj lloj dhe sende ndodh në kohë të drejtuar, ndërsa shtypur statically kjo ndodh në kohën e kompilimit. Fjala statike në përgjithësi duket të thotë gjëra kohën e kompilimit. I guess ka përdorime të tjera për të, por në C, kur ju të deklarojë një ndryshore statike, ruajtjen e tij është ndarë në kohën e kompilimit. Këtu, shtypen dinamike thjesht do të thotë se - Në C nëse ju përpiqeni për të shtuar një varg dhe një numër i plotë, kur ju përpiloni atë, ajo do të ankohen për shkak se kjo do të thotë se ju nuk mund të shtoni një int dhe një akrep. Kjo nuk është vetëm një operacion i vlefshëm. Kjo është një tjetër gjë që ne do të merrni në një sekondë. Por kjo lloj i kontrollit, fakti se ajo ankohet në kohën e kompilimit, është kontrolluar statike lloji. Ka gjuhë ku ju nuk keni nevojë të them char noton,, int, dhe të gjitha këto gjëra, por gjuha mund të them nga konteksti i gjë se çfarë lloji është menduar të jetë, por ajo është ende shtypur statically. Pra, nëse ju merrni 51, OCaml, ju kurrë nuk duhet të përdorni ndonjë nga këto lloje, por ai ende do të në kohën e kompilimit të thonë se ju nuk mund ta bëjë këtë, sepse ju jeni përzierjen një int dhe një varg. Typed dinamike thjesht do të thotë se dikur gjatë kohës të drejtuar ju jeni duke shkuar për të marrë një ankesë. Nëse ju keni përdorur gjithashtu Java më parë, në përgjithësi, pothuajse çdo lloj C-Gjuha do të jetë shtypur statically, kështu C, C + +, Java, të gjithë ata janë në përgjithësi të shtypur statically. Në Java, kur ju përpilojnë diçka dhe ju jeni duke thënë string s barabartë me diçka të re që nuk është një varg, se do të ankohen për shkak se ato lloje thjesht nuk përputhen deri. Kjo do të ankohen në kohën e kompilimit. Por ajo gjithashtu ka disa kohë dinamike gjëra të tilla si nëse ju përpiqeni të hedhur diçka të një lloji që është më specifike se llojin e saj aktuale, nuk ka asgjë që mund të bëni në kohën e kompilimit të kontrolloni nëse ky cast do të ketë sukses. Java gjithashtu ka disa lloj dinamike duke kontrolluar se sa më shpejt që ajo merr në atë linjë të kodit kur ajo është në fakt ekzekutimin, ajo do të bëjë të hedhura, kontrolloni nëse kjo ishte e vlefshme të hedhura në vendin e parë, dhe në qoftë se ajo nuk ishte, atëherë ajo do të ankohen se ju keni një lloj të pavlefshme. Lloji dinamike kontrolluar. Shkruani këtë në një skedar të quajtur dynamic.php. Dynamic.php. Unë do të unzip atë formatim. Ne kemi një ndryshore, ne kemi ngritur atë në 7 numër i plotë, atëherë ne jemi duke shkuar për të shkruar atë dhe% s - Oh, ne jemi shtypjen llojin e saj, kështu që gettype do të kthehet në llojin e ndryshueshme. Ne jemi vetëm shtypjen e llojit pushim. Ne vetëm php.dynamic.php. Ne do të shohim se ajo ndryshon nga numër i plotë në varg me boolean si ne të shkojnë përmes. Në C nuk ka Boolean dhënave lloji, nuk ka të dhëna string lloji. Ka char * Boolean dhe tenton të jetë vetëm int, ose char apo diçka. Në PHP këto lloje ekzistojnë, dhe kjo është një nga përparësitë e mëdha të PHP mbi C - se operacionet string janë pafundësisht më e lehtë se sa në PHP C. Ata vetëm punë. Pra, kemi ardhur përsëri këtu. Ne u dynamic.php. Kjo tregon përkthyes PHP, php quajtur, për të kandiduar kodin PHP në dynamic.php. Nëse keni ndonjë gabim në dosjen, përkthyesi do të thoni ju! Përkthyesi, kjo është një tjetër dallim i madh në mes PHP dhe C. Në C ju duhet të hartojnë diçka dhe pastaj ju drejtuar këtë dosje hartuar. Në PHP ju kurrë nuk përpilojnë asgjë. Pra, përkthyesi PHP është në thelb vetëm duke e lexuar këtë rresht pas rreshti. Ajo godet var = 7 atëherë ai godet printf atëherë ajo godet var atëherë ajo godet printf dhe kështu me radhë. Nuk është pak e përpilimit bën atë, dhe ajo arka rezultatet kështu që nëse ju drejtuar script vonë ju mund të bëni disa, por në thelb kjo është një linjë e rendit sipas linjës gjë. Kjo do të thotë se një shumë e optimizations që kemi marrë në C, si hartimin, kjo është vetëm në përgjithësi përpiluesit mund të bëjë një shumë të mashtrimeve për ju. Ajo mund të marrë nga variablave të papërdorura, ajo mund të bëjë të gjitha këto llojet e gjërave, ajo mund të bëjë bisht recursion. Në PHP ju nuk do të merrni atë avantazh sepse ajo është vetëm do të fillojë ekzekutimin rresht pas rreshti nga rreshti, dhe ajo nuk ka të vërtetë njohin këto gjëra aq lehtë pasi ajo nuk është e madhe 1 kalojë hartimi mbi gjë dhe pastaj ekzekutimi; kjo është vetëm rresht pas rreshti. Pra, kjo është përkthyesi. Kthehu tek shtypja tonë dinamik: pretty cool, eh? Ju definitivisht nuk mund ta bëjë këtë në C! Tani, shihni nëse ju mund ta kuptoj se llojin e secilit prej vlerave të mëposhtme. Shohin këtë për referencë. Pra, 3.50. Çfarë lloji mendoni se do të jetë? Këtu janë llojet e kemi. Ne kemi bools, integers, pikë lundrues, vargjet, vargjeve, objekte, dhe pastaj burimet, që është lloj i paqartë. Unë mendoj se ka të vërtetë një shembull këtu. Pastaj ka NULL. NULL është një lloj i veçantë. Ndryshe C ku NULL është vetëm një tregues me adresën 0, në PHP, NULL është lloji vet, ku e vetmja gjë e vlefshme e këtij lloji është NULL. Kjo është shumë më e dobishme për kontrollin gabim. Në C, ku kemi pasur këtë çështje, ku në qoftë se ju kthehen NULL, do të thotë që ju jeni kthyer një tregues NULL NULL ose duke përdorur të ditur gabim ose të gjitha që kemi pasur konfuzion në një pikë. Këtu, NULL kthyer në përgjithësi do të thotë gabim. Shumë gjëra të kthehen false për gabim. Por pikë është lloji NULL, gjëja e vetme e llojit NULL NULL është. Pastaj callback është si ju mund të përcaktojë disa funksione anonime. Ju nuk keni për t'i dhënë një funksion emër, por ju nuk do të duhet të merren me këtë këtu. Duke parë në llojet që ata nuk presin që ne të dimë, çfarë mendoni lloji i 3,50 është? >> [Student] noton. Po. Kështu atëherë këtu, çfarë mendoni se lloji i kësaj është? >> [Student] Array. Po. I pari ishte noton, e dyta është një grup. Vini re se ky grup nuk është si një rrjet C ku keni indeks 0 ka disa vlera, indeksi 1 ka disa vlera. Këtu indekset janë a, b, dhe c dhe vlerat janë 1, 2, dhe 3. Në PHP nuk ka dallim në mes të një sërë associative dhe vetëm një grup të rregullt si ju do të mendojnë për atë në C. Nuk është vetëm kjo, dhe nën kapuç një koleksion të rregullt është vetëm një grup shoqerues ku 0 harta në disa vlera të njëjtën mënyrë një harta në disa vlera. Për këtë arsye, PHP mund të jetë goxha i keq për të vërtetë të shpejtë të kodit / krahasimit gjëra pasi në C, kur ju jeni duke përdorur një rrjet ju e dini që qasja një anëtar është koha konstante. Në PHP hyrë një anëtar është kush e di sa kohë? Kjo është ndoshta vazhdueshme nëse ajo hashes saktë. Kush e di se çfarë është me të vërtetë duke bërë nën kapuç? Ju me të vërtetë duhet të shikoni në zbatimin e të shohin se si ajo do të merret me këtë. Kështu atëherë fopen. Unë mendoj se këtu, le të vetëm fopen PHP manual për të parë në llojin e kthimit. Ne shohim këtu ju mund të kërkoni pretty much çdo funksion në manualin e PHP dhe kjo është lloj i faqes njeri i PHP. Lloji i kthimit do të jetë burim. Kjo është arsyeja pse kam shikuar atë, sepse ne nuk të vërtetë të përcaktuar burim. Ideja e burimeve, në C ju lloj i mori një * skedar apo çfarëdo; në PHP burim është * e skedarëve. Kjo është ajo që ju do të jeni të lexuar nga, kjo është ajo që ju jeni do të jetë me shkrim për të. Kjo është zakonisht të jashtme, kështu që është një burim që ju mund të tërheqë gjëra nga dhe hedhin gjëra për të. Dhe së fundi, çfarë është lloji i NULL? >> [Student] NULL. Po. Pra, e vetmja gjë që është NULL NULL është. NULL NULL është. Një tipar i sistemit PHP tipit (për mirë apo për keq) është aftësia e tij për të mashtroj lloje. Kur ju shkruani një linjë të kodit PHP që kombinon vlerat të llojeve të ndryshme, PHP do të përpiqet të bëjë gjënë e ndjeshme. Provoni secilën nga linjat e mëposhtme të kodit PHP. Çfarë është shtypur jashtë? Është kjo ajo që keni pritur? Pse ose pse jo? Ky fakt në lidhje me PHP është ajo që e bën atë çka ne e quajmë dobët shtypen. Shtypur dobët dhe të shtypur me forcë, ka përdorime të ndryshme për këto terma, por shumica e njerëzve përdorin shtypur dobët dhe të shtypur me forcë të thotë këtë gjë e tillë ku ("1" + 2); që punon. Në C që nuk do të punojë. Ju mund të imagjinoni këtë nuk punon. Shumë njerëz përzierje deri typing dinamike dhe shtypni dobët dhe shtypja statike dhe shtypja e fortë. Python është një tjetër shembull i një gjuhe që është shtypur dinamike. Ju mund të hedhin rreth llojeve në variablave dhe kjo do të përcaktojë në kohë të drejtuar ndonjë checkings error. Në Python ajo do të ekzekutojë këtë dhe kjo do të shihni ("1" + 2); dhe kjo do të dështojë, sepse ajo thotë se ju nuk mund të shtoni një varg dhe një numër të plotë. Në PHP, e cila është po aq dinamike shtypen, kjo nuk do të dështojnë. Shtypja e dobët ka të bëjë me faktin se ai bën gjërat me lloje të që nuk ka kuptim të vërtetë domosdoshmërisht. Pra, ("1" + 2), unë mund të imagjinohet se të jesh string 12, unë mund të imagjinohet se është vargu 3, Unë mund ta imagjinoj se është numër i plotë 3. Kjo nuk është domosdoshmërisht e mirë përcaktuar, dhe ne jeni me siguri do të shohim këtu se kur kemi shkruar ("1" + 2), kjo ndoshta do të përfundojë si të ndryshme se shtypjes (1 + "2"). Dhe kjo tendencë të jetë, sipas mendimit tim, për më keq. Këtu mund të provoni këto. Një tjetër mashtrim pak rreth PHP është që ju nuk keni nevojë që në fakt shkruani skedarin. Ajo nuk e kanë drejtuar këtë mënyrë komanduese. Pra, php-r, atëherë ne mund të hedhin në komandën këtu: "Print ('1 '+ 2)," dhe unë do të hedh një linjë të re. Kjo shtypura 3. Ajo duket si ajo printon 3 dhe kjo është 3 integer. Pra, tani le të përpiqemi anasjelltas: "Printimit (1 + '2 '); Ne kemi marrë 3, dhe ajo gjithashtu do të jetë numër i plotë 3? Unë sinqerisht nuk kam asnjë ide. Ajo duket si kjo është në përputhje. Nuk ka kurrë ndonjë shans për të qenë 12 string ose diçka të tillë sepse PHP, JavaScript dhe Java ndryshe shumë, ka një operator të veçantë për varg. Varg në PHP është dot. Pra, shtypjen (1 '2 '.); Do të na japë 12. Kjo tenton të çojë në konfuzion, ku njerëzit përpiqen të bëjnë diçka si rr + = diçka tjetër që ata duan të shtoni në fund të vargut të tyre, dhe se do të dështojë. Ju duhet të bëni rr. = Pra, mos harroni varg në PHP është një dot. Gjëra të tjera të përpiqen: print ("CS" + 50); Unë kam thënë se nuk ka shpresë për këtë rezulton në CS50 pasi nuk është varg +. Çfarë mendoni ju se kjo do të përfundojë si? Unë sinqerisht kam absolutisht asnjë ide. Ajo duket si ajo është vetëm 50. Ajo e sheh string, dhe unë bast nëse kemi vënë 123CS - Ajo e sheh vargun e parë, ajo përpiqet për të lexuar një numër të plotë nga ai, ose një numër prej saj. Në këtë rast ajo sheh 123CS. "Kjo nuk ka kuptim, si një numër të plotë, kështu që unë jam vetëm do të mendojnë për 123". Pra, 123 + 50 do të jetë 173. Dhe këtu ajo fillon duke e lexuar këtë si një numër të plotë. Ajo nuk e sheh asgjë, kështu që vetëm e trajton atë si 0. Pra, 0 + 50 do të jetë 50. Këtë unë jam duke supozuar do të bëjë diçka të ngjashme. Unë jam duke menduar 99. Po, sepse ajo do të marrë të parë - Pra 99. Këtu (10/7), në qoftë se kjo ishte C, çfarë do që të kthehen? [Student] 1. Po >>, ajo do të jetë 1 për shkak se 10/7 është ndarë 2 integers. Një numër i plotë ndarë nga një numër i plotë do të kthehet një numër të plotë. Ajo nuk mund të kthehen 1 pikë çfarëdo që do të jetë, kështu që ajo është vetëm do të kthehen 1. Këtu shtypjen (10/7), ajo do të interpretojë në fakt se. Dhe kjo do të thotë se në qoftë se ju në të vërtetë doni të bëni arrestimi integer dhe stuff like that, ju duhet të bëni të shtypura (kati (10/7)); Në C është ndoshta e çuditshme që ju mund të mbështetet në truncation integer rregullisht, por në PHP ju nuk mund të, sepse ajo automatikisht do të kthejnë atë në një noton. Dhe pastaj (7 + e vërtetë), çfarë mendoni se do të jetë? Unë jam guessing 8 në qoftë se ajo do të interpretojë vërtetë si 1. Ajo duket si ajo është 8. Kështu që çdo gjë që ne kemi bërë në 10 minuta të fundit që ju kurrë nuk duhet absolutisht të bëjë. Ju do të shihni kodin që e bën këtë. Ajo nuk duhet të jetë aq i thjeshtë si kjo. Ju mund të keni 2 variablave, dhe 1 ndryshueshme ndodh të jetë një varg dhe variabël tjetër ndodh të jetë një int, dhe pastaj ju shtoni këto variabla së bashku. Që PHP është shtypur dinamike dhe ajo nuk do të bëjë asnjë lloj kontrolluar për ju dhe që nga ajo e shtypur dobët dhe që ajo thjesht do të automatikisht të hedhin këto gjëra së bashku dhe çdo gjë do të punojnë vetëm, kjo është e vështirë të di edhe se kjo duhet të jetë një variabël string tani, kështu që unë nuk duhet të shtoni atë në këtë variabël, që është një numër të plotë. Praktika më e mirë është nëse një ndryshore është një varg, mbani atë si një varg përgjithmonë. Nëse një variabël është një int, mbani atë si një int përgjithmonë. Nëse ju doni që të merren me integers dhe vargjet, ju mund të përdorni varsint - kjo është JavaScript. Intval. Unë e bëj këtë gjatë gjithë kohës. PHP dhe JavaScript unë përzierje gjithçka. Pra intval do të kthejë vlerën numër të plotë të një variable. Nëse ne të kalojë në "shtyp (intval ('123 ')); që ju të merrni 123. Intval në vetvete nuk do të bëjë kontroll për ne që kjo është vetëm një numër të plotë. Manuali i PHP, nuk janë vetëm kaq shumë funksione në dispozicion, kështu që këtu unë mendoj se ajo që unë do të përdorin është is_numeric parë. Unë jam guessing se kthye rreme. Kjo është një tjetër gjë që ne kemi për të shkuar gjatë është ===. Pra is_numeric (''123df), ju nuk do të mendojnë se si is_numeric. Në C ju do të keni për të iterate mbi të gjitha karakteret dhe kontrolloni për të parë nëse çdo karakter është shifra apo çfarëdo. Këtu is_numeric do të bëjë që për ne, dhe është kthyer rreme. Kështu që kur unë të shtypura që ajo të shtypura asgjë, kështu që këtu unë jam krahasuar atë për të parë, nuk ju ndodh që të jetë e rreme? Dhe kështu që tani është e shtypje 1. Me sa duket ajo printon 1 si të vërtetë në vend të shtypjes e vërtetë si e vërtetë. Pyes veten në qoftë se unë bëj print_r. Jo, ajo ende ka 1. Going back to ===, == ende ekziston, dhe në qoftë se ju flisni me Tommy ai do të thotë == është krejtësisht gjobë. Unë jam duke shkuar për të thonë se == është e tmerrshme dhe ju kurrë nuk duhet të përdorin ==. Dallimi është se == krahason gjërat ku ajo mund të jetë e vërtetë edhe në qoftë se ata nuk janë të të njëjtit lloj, ndërsa === krahason gjërat dhe i pari ajo kontrolle janë ata njejta? Po. Mirë, tani unë jam duke shkuar për të parë nëse ata në fakt krahasuar të jenë të barabartë. Ju merrni gjëra të çuditshme si e barabartë me 10 - le të shohim se çfarë thotë. Kështu ('10 '== '1 E1'); Kjo kthen vërtetë. A ka dikush ndonjë supozime pse kjo Jep true? Kjo nuk është vetëm për atë. Ndoshta kjo është një aluzion. Por në qoftë se kam ndryshuar se për një f - mallkuar atë! Unë mbaj duke përdorur kuotat e dyfishtë. Arsyeja kuotat dyfishtë janë yelling në mua është sepse unë kam vënë këtë në thonjëza dyshe. Kështu që unë mund të shpëtojnë kuotat e dyfishtë në këtu, por citon vetëm të bëjë më të lehtë. Pra, ('10 '== '1 F1'); nuk ka shkruar vërtetë. ('10 '== '1 E1'); shtyp e vërtetë. [Student] A është kjo magji? >> Kjo nuk është magji, por është e ngushtë se ajo është si - 1E1, simbol shkencore. Ajo njeh 1E1 si 1 * 10 ^ 1 apo çfarëdo. Ata janë integers barabarta. Nëse ne bëjmë === atëherë ajo do të jetë e rreme. Unë në fakt nuk kam asnjë ide nëse ne bëjmë == çfarë lidhje (10 dhe ''10abc);? Dakord. Pra, kjo është e vërtetë. Pra, ashtu si kur ju e bëri (10 + ''10abc), dhe kjo do të jetë 20, këtu (10 == ''10abc); është e vërtetë. Edhe më keq janë gjëra të tilla si (false == NULL); është e vërtetë ose (rreme == 0); është e vërtetë, (rreme == []); Ka raste të pazakontë - Kjo është një nga ato raste të pazakontë. Vini re se (== false []); është e vërtetë. ('0 '== False); është e vërtetë. ('0 '== []); Është false. Pra == është në asnjë mënyrë kalimtare. një mund të jenë të barabartë tek B dhe një mund të jenë të barabartë tek C, b por nuk mund të jetë e barabartë me c. Kjo është një gjë e neveritshme për mua, dhe ju duhet të përdorni përherë ===. [Student] A mund të bëjmë! == Si? >> [Bowden] Po. Ekuivalente do të jetë! = Dhe! ==. Ky fakt është sjellë deri në spekulim pset ku një shumë të funksioneve të kthimit - Manuali PHP është e mirë për këtë. Ajo vë në një kuti të madhe të kuqe, "Ky do të kthehet rreme nëse ka një gabim." Por kthimi 0 është një gjë krejtësisht e arsyeshme për t'u kthyer. Mendoni për ndonjë funksion i cili pritet të kthehet një numër të plotë. Le të thonë se ky funksion është menduar për të numëruar numrin e linjave në një skedar apo diçka. Nën rrethana normale, ju të kalojë këtij funksioni një skedar dhe ajo do të kthehet një numër të plotë e cila paraqet numrin e linjave. Pra, 0 është një numër krejtësisht e arsyeshme nëse skedari është vetëm bosh. Por, çfarë nëse ju të kalojë atë një file pavlefshme dhe funksioni i ndodh që të kthehen të rreme në qoftë se ju të kalojë atë një skedar të pavlefshme? Nëse ju vetëm bëni == ju nuk jeni diferencuar rasti mes dosjen pavlefshme dhe file bosh. Gjithmonë përdorni ===. Kjo është e gjitha nga ato. Në PHP, lloji array është e ndryshme nga ajo që ju jeni duke përdorur për të në C. Në të vërtetë, ju mund të keni vënë re tashmë këtë më lart, kur ju pashë se kjo është e tipit grup. Sintaksa kllapa është i ri, si i PHP 5.4, i cili është versioni më i ri i PHP. Para kësaj ju gjithmonë ka pasur për të shkruar array ('a' -> 1, 'b' -> 2. Kjo ishte ndërtuesi për një grup. Tani PHP fund ka ardhur rreth në sintaksë e bukur vetëm kllapa katrore, e cila është vetëm në mënyrë shumë më mirë se array. Por duke pasur parasysh PHP 5.4 është versioni më i ri, ju mund të hasni vende që nuk kanë PHP 5.3. Gjatë verës, ne u përplas me këtë çështje, ku PHP 5.3 ishte ajo që kemi pasur në aplikim, por që ne server vendosur të gjithë librin tonë klasën dhe të paraqesë dhe të gjitha këto gjëra të ishte PHP 5.4. Duke mos ditur këtë, ne kemi zhvilluar në 5,3, për të shtyrë 5.4, dhe tani të gjithë një e papritur asnjë të kodit tonë punon sepse ka ndodhur që të ketë pasur ndryshime në mes të 5,3 dhe 5,4 të cilat nuk janë prapa në përputhje, dhe ne kemi për të shkuar dhe të rregulluar të gjitha gjërat tona që nuk punojnë për PHP 5.4. Për këtë klasë, pasi nuk kanë aplikim PHP 5.4, kjo është krejtësisht gjobë për të përdorur kllapa katrore. Por nëse ju jeni duke kërkuar deri gjëra rreth internetit, në qoftë se ju jeni duke kërkuar në disa lloj stuff array, ka shumë të ngjarë që ju do të jeni për të parë magji nga ndërtuesi sintaksë array pasi që ka qenë rreth e rrotull që nga viti PHP lindi Sintaksa dhe kllapa katrore ka qenë rreth e rrotull për disa muaj të fundit ose sa herë që erdhi rreth 5.4. Kjo është se si ju indeksi. Ashtu si në C si ju do të indeksit me kllapa katrore si $ array [0], $ array [1], $ array [2], ju indeksi në të njëjtën mënyrë, nëse ju ndodh që të ketë tregues tuaja duke strings. Pra, array $ array ['a'] dhe $ ['b']. $ Array [b]. Pse do të jetë kjo e gabuar? Kjo ndoshta do të gjenerojë një paralajmërim, por ende punojnë. PHP ka tendencë për të bërë këtë. Ajo tenton të vetëm, "Unë jam duke shkuar për t'ju tërhequr vërejtjen në lidhje me këtë, por unë jam vetëm do të mbajë "Dhe të bëjë çdo gjë që unë mund të." Kjo ndoshta do të përkthehet kjo për një varg, por është e mundur që në disa pika në të kaluarën dikush tha b përcaktojë të jetë "HELLO WORLD". Deri tani b mund të jetë një array konstante dhe $ [b] në të vërtetë do të jetë bërë 'Hello World'. Unë mendoj se në këtë pikë, ose të paktën settings tona PHP, nëse ju përpiqeni të indeksit në një grup dhe se çelësi nuk ekziston, ajo do të dështojnë. Unë nuk mendoj se ai thjesht do t'ju tërhequr vërejtjen. Ose të paktën ju mund të vendosni atë në mënyrë që ajo nuk ka vetëm të paralajmërojë ju, ai vetëm drejt deri dështon. Mënyrë që ju kontrolloni për të parë nëse ka të vërtetë është e tillë një indeks është isset. Pra isset ($ array ['HELLO WORLD']) do të kthehet rreme. isset ($ array ['b']) do të kthehen vërtetë. Ju mund të përzierje këto syntaxes. Unë jam goxha i sigurt se çfarë kjo do array përfundojë si është - Ne mund ta provoni atë. Oh, kam nevojë PHPWord. Kjo është përzierja sintaksë ku ju të specifikojë se çfarë kyç është dhe ju nuk e specifikon se çfarë është çelësi. Pra, 3 drejtë këtu është një vlerë. Ju nuk kanë thënë shprehimisht se çfarë çelësi i saj do të jetë. Çfarë mendoni se çelësi i saj do të jetë? [Student] 0. Unë jam guessing >> 0 vetëm për shkak se ajo është e para që ne nuk kemi specifikuar. Ne mund të bëjë në fakt një çift të këtyre rasteve. Pra print_r është shkruar rekursive. Ajo do të shtypura array tërë. Ajo do të shtypura subarrays e array nëse ka pasur ndonjë. Pra print_r ($ array); php.test.php. Ajo duket si ajo i dha asaj 0. Ka të vërtetë diçka për të mbajtur në mend këtu, por ne do të merrni përsëri në atë në një sekondë. Por, çfarë nëse unë të ndodhë për të bërë këtë indeks 1? PHP nuk bën dallim ndërmjet treguesve të vargut dhe indekset numër i plotë, kështu në këtë pikë unë kam përcaktuar vetëm një indeks 1 dhe unë mund të bëjë të dyja array $ [1] dhe $ koleksion ['1 '] dhe ajo do të jetë e njëjtë dhe indeksi kyç njëjtë. Kështu që tani çfarë mendoni 3 do të jetë? >> [Student] 2. >> [Bowden] Unë jam guessing 2. Po. Kjo është 2. Çfarë ndodh nëse ne e bëmë këtë është 10, kjo është 4? Çfarë mendoni se indeksi i 3 do të jetë? Unë jam duke menduar 11. Guess im për atë që bën PHP - dhe unë mendoj se kam parë këtë para - është vetëm ajo mban gjurmët e asaj që indeksi lartë numerike është përdorur deri më tani është. Ajo kurrë nuk do të caktojë një indeks string në 3. Ajo do të jetë gjithmonë një indeks numerike. Pra, ajo mban gjurmët e një më të lartë është e caktuar deri më tani, i cili ndodh të jetë 10, dhe ajo do të japë 11-3. Çfarë kam thënë më parë, njoftim mënyrën se si është shtypje këtë koleksion. Ajo printon 10 kyç, kyç 4, kyç 11, kyç d. Ose edhe le ta bëjmë - I guess Unë nuk e kam vënë një 0, por është e shtypje 1, 2, 3, 4. Çka nëse unë kaloni këtu? Ose, le të vërtetë të kaloni këto 2. Tani ajo printon 2, 1, 3, 4. Vargjeve php nuk janë ashtu si tryezën tuaj të rregullt hash. Kjo është krejtësisht e arsyeshme të mendojmë e tyre si tavolina hash 99% të kohës. Por në tabelat tuaja hash nuk ka kuptim të rendit në të cilin gjërat janë futur. Pra, sa më shpejt që ju të futur atë në tryezën tuaj hash, supozojmë se nuk ka lista të lidhura dhe ju mund të gjykojë brenda një liste të lidhur e cila ishte futur e parë. Por këtu kemi futur 2 para dhe ajo e di se kur është e shtypje këtë koleksion se 2 vjen e para. Ajo nuk ka shkruar atë në vetëm një qëllim ndonjë. Struktura teknike të dhëna që është e përdorur është një hartë urdhëruar, kështu që ajo harta çelësat për vlerat dhe ajo kujton rendin në të cilin ato janë çelësat futur. Në thelb kjo është për disa komplikime ku e bezdisshëm të vërtetë - Le të thonë se ju keni një koleksion 0, 1, 2, 3, 4, 5 dhe ju doni të merrni indeksin 2. Një mënyrë për të bërë atë, le të shohim se çfarë duket si. 0, 2, 1, 3, 4. Unset ndodh me unset dy variablave dhe indeksit të vektorit. Kështu dizaktivohet ($ array [2]); Tani çfarë kjo do të duken si? 2 është shkuar vetëm, kështu që është e përkryer gjobë. Më i bezdisshëm është në qoftë se ju doni gjëra që në fakt të jetë si një grup. Unë do të vënë numra të rastit. Tani njoftim indekset e mia. Unë dua që ajo të jetë vetëm si një grup C ku ajo shkon nga 0 në gjatësi - 1 dhe unë mund iterate mbi atë si të tillë. Por sa më shpejt që unë unset indeksin e dytë, atë që ishte në indeksin e 3 nuk do të bëhet tani indeksi 2. Në vend të kësaj ai thjesht heq këtë indeks dhe tani ju shkoni 0, 1, 3, 4. Kjo është krejtësisht e arsyeshme. Kjo është vetëm i bezdisshëm dhe ju duhet të bëni gjëra të tilla si ngjitur array. Po. [Student] Çfarë do të ndodhte nëse keni pasur një për lak dhe ju të kërkuar për të shkuar mbi të gjitha elementet? Kur ajo goditi 2, do të japin ndonjëherë? Iterating mbi një rrjet. Ka 2 mënyra që ju mund të bëni atë. Ju mund të përdorni një për lak rregullt. Kjo është një tjetër ngatërresë e PHP. Gjuhët më të, unë do të thoja, të ketë disa lloj ose gjatësi len ose diçka treguar gjatësinë e një sërë. Në PHP është akuzë. Pra, numërimin ($ array); $ i + +) Le të vetëm të shtypura ($ array [$ i]); Njoftim: padefinuar offset: 2. Është vetëm do të dështojnë. Kjo është arsyeja që, për pjesën më të madhe, ju kurrë nuk duhet të iterate mbi një grup si kjo. Kjo mund të jetë një ekzagjerim, por ju nuk duhet të iterate mbi një grup si ky sepse PHP ofron sintaksë e saj foreach ku foreach ($ array si $ pika). Tani në qoftë se ne shtyp ($ pika) - we'll diskutojë atë në një të dytë - që punon të përkryer gjobë. Mënyra se si është duke punuar foreach është argumenti i parë është array që ju jeni iterating gjatë. Dhe Argumenti i dytë, pika, përmes çdo të kalojë së për lak ajo do të marrë në gjë tjetër në rrjet. Pra, mos harroni array ka një urdhër. Hera e parë përmes për lak, pika do të jetë 123 atëherë ajo do të jetë 12, atëherë ajo do të jetë 13, atëherë ajo do të jetë 23, atëherë ajo do të jetë 213. Gjërat të merrni të vërtetë i çuditshëm, kur ju bëni diçka si foreach. Le të shohim se çfarë ndodh, sepse ju kurrë nuk duhet ta bëjë këtë. Çfarë ndodh nëse ne nuk përcaktohet ($ array [1]); Kjo pritej ndoshta. Ju jeni iterating mbi këtë grup, dhe çdo herë që ju jeni duke anulluar indeksin e parë. Kështu që për indeksin 0, parë, gjë pika merr vlerën 0, kështu që ajo do të jetë 123. Por brenda e për lak ne nuk përcaktohet indeksi 1, kështu që do të thotë 12 është zhdukur. Pra, të shtypura. PHP_EOL. PHP_EOL është vetëm newline, por kjo është teknikisht më të lëvizshëm pasi newlines në Windows është i ndryshëm nga newlines për Mac dhe Unix. Në Windows newline është \ r \ n, ndërsa kudo tjetër ajo tenton vetëm të jenë \ n. PHP_EOL është konfiguruar në mënyrë që ajo përdor çfarëdo newline e sistemit tuaj është. Mënyrë të shtypura atë. Le të mos print_r ($ array) në fund. Nuk kisha asnjë ide se kjo do të jetë sjellje. Pika ende merr mbi vlerën e 12 edhe pse ne unset 12 para se të marrë ndonjëherë për atë nga grup. Mos e merrni fjalën time për këtë, por kjo duket si foreach krijon një kopje të array dhe pastaj pika merr në të gjitha vlerat e atij kopje. Pra, edhe në qoftë se ju të ndryshojë grup brenda për lak, ajo nuk do të kujdeset. Pika do të marrë në vlerat origjinale. Le të përpiqemi anulluar atë. Çka nëse kjo është $ array [1] = "hello"; Edhe pse ne kemi vënë "hello" në grup, nuk merr pika në atë vlerë. Ka një sintaksë për foreach sythe ku keni vënë 2 variablave ndarë nga një shigjetë. Ky variabël e parë do të jetë çelësi i kësaj vlere, dhe kjo është e ndryshueshme e dytë do të jetë pika e saktë të njëjtën. Kjo është jointeresant këtu, por nëse ne do të shkojmë prapa në rastin tonë origjinale të 'A' -> 1, 'B' -> 1, këtu nëse ne vetëm iterate për çdo grup si artikull, artikull do të jetë 1 çdo herë të vetme. Por në qoftë se ne gjithashtu duam të dimë kyç lidhur me atë artikull atëherë ne bëjmë si $ kyç -> $ pika. Kështu që tani ne mund të bëjmë (print kyç $. ':'. Tani ajo është mbi iterating dhe shtypje çdo kyç dhe vlerën e saj lidhur. Një gjë tjetër që mund të bëjmë në foreach sythe është që ju mund të shihni këtë sintaksë. Ampersands para emrave ndryshueshme priren të jenë si PHP bën referenca. Ku referencat janë shumë të ngjashme me pointers, ju nuk keni pointers, kështu që ju kurrë nuk merren me kujtesën direkt. Por ju keni referenca ku 1 ndryshueshme referohet të njëjtën gjë si një ndryshore. Brenda prej këtu le të bëjmë $ artikull. Le të kthehemi në 1, 10. Le të bëjmë $ pika + +, që ende ekziston në PHP. Ju mund të bëni ende + +. php.test.php. Unë kam për të shkruar atë. print_r ($ array); Ne të shtypura 2, 11. Nëse unë kam bërë vetëm foreach ($ array si $ pika), atëherë pika do të jetë vlera e 1 hera e parë përmes lak. Ajo do shtim 1-2 dhe pastaj ne jemi bërë. Pra, atëherë ajo do të shkojnë nëpër kalimin e dytë të lak dhe se pika është 10. Ajo increments pika në 11, dhe pastaj se është hedhur vetëm larg. Pastaj ne print_r ($ array) dhe le të shohim se kjo është vetëm 1, 10. Pra, ne e bëmë ishte rritja e humbur. Por foreach ($ array si $ dhe pika) tani kjo është pika pika njëjtë si këtë të drejtë këtu. Kjo është e njëjta gjë. Kështu $ pika + + është modifikuar koleksion 0. Në thelb, ju gjithashtu mund të bëjë $ k - array> $ artikull dhe ju mund të bëni $ [$ k] + +; Pra, një mënyrë tjetër të të bërit këtë, ne jemi të lirë të modifikoni pika, por kjo nuk do të ndryshojë koleksion tonë origjinal. Por në qoftë se ne përdorim k, e cila është çelësi jonë, atëherë ne vetëm mund të indeksit në grup tonë se duke përdorur çelësi dhe rritje se. Këtë më direkt modifikon koleksion tonë origjinal. Ju mund edhe të bëjë që në qoftë se për ndonjë arsye ju kërkuar mundësinë për të ndryshuar - Në fakt, kjo është krejtësisht e arsyeshme. Ju nuk duan të kenë të shkruajnë $ array [$ k] + +, ju vetëm të kërkuar për të shkruar $ pika + +, por ju ende të kërkuar për të thënë nëse ($ k === 'a') pastaj Rritja pika dhe pastaj të shtypura array tonë. Kështu që tani çfarë ne presim print_r të bëjmë? Cilat vlera duhet të jenë të shtypura? [Student] 2 dhe 10. >> [Bowden] Vetëm nëse çelësi ishte 'një' e ne fakt shtypura atë. Ju ndoshta shumë rrallë, nëse ndonjëherë, do të duhet të përcaktojë funksionet në PHP, por ju mund të shihni diçka të ngjashme, ku ju të përcaktojë një funksion si çfarëdo funksion. Zakonisht ju do të thonë ($ foo, $ bar) dhe pastaj të përcaktojë që ajo të jetë çfarëdo. Por në qoftë se unë bëj këtë, atëherë kjo do të thotë se çdo gjë që e quan çfarëdo, çfarëdo quan Baz, kështu që argumenti i parë kaloi në Baz mund të ndryshohet. Le të bëjmë $ foo + +; dhe brenda prej këtu le të bëjmë Baz ($ pika); Tani ne jemi quajtur një funksion. Argumenti është marrë nga referimi, që do të thotë se në qoftë se ne të modifikojë atë ne jemi duke modifikuar gjë që u miratua in Dhe shtypje këtë ne presim - nëse unë messed up sintaksë - kemi marrë 2, 11, kështu ajo u incremented vërtetë. Njoftim ne kemi nevojë për referenca në 2 vende. Çka nëse unë e bëri këtë? Çfarë do të thotë kjo? [Student] Ajo do të ndryshojë. Po >>. Pika është vetëm një kopje e vlerës në rrjet. Pra pika do të ndryshojë deri në 2, por array ['a'] do të vazhdojë të jetë 1. Ose çfarë nëse unë ta bëjë këtë? Tani artikull është dërguar si një kopje Baz. Pra, kopje e argumentit do të incremented në 2, por pika vetë kurrë nuk u incremented në 2. Dhe pika është e njëjta gjë si parantezë array çfarëdo, kështu që kurrë nuk u array incremented. Kështu që të dyja këto vende kanë nevojë për atë. PHP është zakonisht mjaft i zgjuar për këtë. Ju mund të mendoni se unë dua të kalojë duke iu referuar - Kjo ishte vërtetë një pyetje në një prej psets. Kjo ishte një gjë e questions.txt ku tha: Pse mund të dëshironi të kalojë këtë struct duke iu referuar? Cili ishte përgjigje për këtë? [Student] Pra, ju nuk keni për të kopjuar diçka të madhe. Po >>. Një struct mund të jetë arbitrare të mëdha, dhe kur ju të kalojë struct si një argument ajo ka nevojë për të kopjuar atë struct tërë për të kaluar atë në funksion, ndërsa nëse ju vetëm të kalojë struct duke iu referuar atëherë ajo vetëm duhet të kopjoni një adresë 4-byte si argument në funksion. PHP është një pak më të zgjuar se kaq. Nëse unë kam një funksion dhe unë të kalojë atë një rrjet prej 1,000 gjërave, do të thotë se do të duhet të kopje të të gjitha atyre gjërave të 1000 për të kaluar atë në funksion? Ajo nuk duhet të bëjë që menjëherë. Nëse brenda këtij funksioni nuk ai në fakt modifikon foo, kështu që nëse ($ foo === 'hello') kthim i vërtetë.; Njoftim modifikuar ne kurrë nuk të vërtetë brenda argumentin e këtij funksioni, që do të thotë se çdo gjë që u miratua në si kurrë foo duhet të kopjohet sepse ajo nuk është modifikuar atë. Pra, mënyra PHP punon është argumente janë miratuar gjithmonë duke iu referuar derisa ju të vërtetë të përpiqet për të ndryshuar atë. Tani, nëse unë them $ foo + +, ajo tani do të bëjë një kopje të foo origjinal dhe modifikojë kopje. Kjo kursen kohë. Nëse ju nuk jeni të prekur këtë koleksion masiv, ju kurrë nuk të vërtetë të modifikojë atë, ajo nuk ka nevojë për të bërë kopje, ndërsa nëse ne vetëm vënë këtë simbol që do të thotë se nuk ka edhe kopje atë edhe në qoftë se ju do të modifikojë atë. Kjo sjellje quhet kopje-on-shkruaj. Ju do të shihni atë në vende të tjera, veçanërisht në qoftë se ju merrni një kurs të sistemit operativ. Kopjo-on-shkruaj është një model mjaft të zakonshme kur ju nuk keni nevojë për të bërë një kopje të diçka përveç nëse kjo është në të vërtetë ndryshuar. Po. [Student] Çfarë ndodh nëse keni pasur rritje të brenda në provë, kështu që vetëm 1 element nga 1000 do të duhet të ndryshohet? Nuk jam i sigurt. Unë mendoj se do të kopje gjë e tërë, por kjo është e mundur se është mjaft i zgjuar se - Në fakt, ajo që unë jam duke menduar është imagjinoni kemi pasur një grup që duket si ky: $ array2 = [ Pastaj 'një' indeksi është një grup i [1 2 3 4], dhe indeksi "B" është një grup i çfarëdo. Unë kam nevojë për presje në mes të gjithë ata. Paramendoni ka presje. Pastaj 'c' është 3 vlera. Rregull. Tani le të themi që ne bëjmë $ Baz ($ array2); ku Baz nuk ka marrë këtë duke iu referuar. Pra, foo $ ['c'] + +; Ky është një shembull i tillë ku ne jemi duke kaluar array2 si argument dhe pastaj ajo është modifikuar një indeks të veçantë të vektorit nga bën rritjen atë. Unë sinqerisht nuk kam asnjë ide se çfarë PHP do të bëjë. Ajo mund të lehtë të bëjë një kopje të gjithë gjë, por nëse është e zgjuar, ajo do të bëjë një kopje të këtyre çelësat ku kjo do të ketë vlerën e saj të dallueshme por kjo ende mund të tregojnë për të njëjtin grup 1,2,3,4 dhe kjo ende mund të tregojnë për të njëjtin grup. Unë do të iPad atë. Ne kalojë në këtë grup, ku ky djalë pikë në 3, kjo pikë djalë të [1,2,3,4], Ky djalosh pikë të [...] 34, Tani që ne jemi duke kaluar atë në Baz, ne jemi të modifikuar këtë. Nëse PHP është zgjuar, ajo vetëm mund të bëjë - Ne ende duhej të kopjoni disa kujtesës, por në qoftë se ka pasur këto subarrays mëdha mbivendosur ne nuk kemi nevojë për të kopjuar ato. Unë nuk e di nëse kjo është ajo që bën, por unë mund ta imagjinoj atë duke bërë që. Kjo është edhe një avantazh shumë i madh i C mbi PHP. PHP bën jetën shumë më e lehtë për një shumë të gjëra, por ju lloj i kanë absolutisht asnjë ide se sa mirë do të kryejnë sepse unë nuk kam asnjë ide nën kapuç kur është bërë këto kopje të gjërave, oh, është se do të jetë një kopje e vazhdueshme kohë, është vetëm do të ndryshojë 1 treguesin, është ajo do të jetë një kopje e vështirë lineare qesharake? Çka nëse ajo nuk mund të gjejnë hapësirë? E bën atë, atëherë duhet për të drejtuar mbledhjen e mbeturinave për të marrë disa më shumë hapësirë? Dhe mbledhja e mbeturinave mund të marrë në mënyrë arbitrare gjatë. Në C që ju nuk duhet të shqetësohen për këto gjëra. Çdo linjë të vetme që ju mund të shkruani arsye shumë e shumë për mënyrën se si ajo do të kryejë. Le të shohim mbrapa në këto. Sa e bukur është ajo që ju nuk duhet të merren me funksionet hash, Listat e lidhura, ose diçka të tillë? Që punon me tabela hash është aq e lehtë tani, këtu është një mister fun për të punuar në. Të hapur një skedar të quajtur unique.php dhe në të shkruaj një program PHP (E njohur edhe si një "skenar"). Ne priren për të thirrur ata Scripts nëse ata janë gjëra të shkurtra që ju të kandidojë në rreshtin e komandave. Në thelb, çdo gjuhë që ju nuk përpilojnë, por ju jeni duke shkuar për të drejtuar ekzekutueshme në rreshtin e komandave, ju mund të telefononi atë dorëshkrim të ekzekutueshme. Unë mund të ashtu si edhe shkruani një program C që e bën këtë, por unë nuk e quajnë atë një skenar që kam parë përpilojnë atë dhe pastaj të drejtuar binar. Por ky program PHP ne jemi duke shkuar për të thirrur një script. Ose në qoftë se ne e shkroi atë në Python, ose Perl ose Node.js apo ndonjë nga ato gjëra, ne do të quajmë ato të gjitha Scripts sepse ju drejtuar ata në command line por ne nuk përpilojnë ato. Ne mund ta bëjë këtë shumë shpejt. Ne nuk do të përdorin argv. Le të vetëm nëpër këtë goditje. Telefononi atë unik, shkruani një program. Ju mund të supozojmë se input do të përmbajë një fjalë per line. Në fakt, argv do të jetë mjaft i parëndësishëm për t'u përdorur. unique.php. Gjëja e parë e parë, ne duam të kontrolloni nëse kemi kaluar 1 argumentin command-line. Ashtu si ju do të presin argc dhe argv në C, ne ende kemi ato në PHP. Pra, nëse ($ argc! == 2), atëherë unë nuk do të merret me shtypjen e një mesazh apo diçka. Unë vetëm do të dalë, kodi i gabimit prej 1. Unë gjithashtu mund të kthehen 1. Rrallë në PHP jeni në këtë shtet, ku ne jemi në - Zakonisht ju jeni në një funksion të quajtur me një funksion të quajtur me një funksion të quajtur nga një funksion. Dhe nëse diçka shkon keq dhe ju vetëm duan të dalë çdo gjë në tërësi, Dalja vetëm përfundon programin. Kjo gjithashtu ekziston në C. Nëse ju jeni në një funksion në një funksion në një funksion në një funksion dhe ju doni të vetëm të vrasin programin, ju mund të telefononi dalje dhe kjo thjesht do të dalë. Por në PHP është edhe më e rrallë që ne jemi në këtë nivel të lartë. Zakonisht ne jemi në brendësi të një lloj të funksioni, kështu që ne e quajmë dalje kështu që ne nuk duhet të kthehen deri 1 gjë e cila më pas pëson ka një gabim kështu që kthen në qoftë se njeh ka qenë një gabim. Ne nuk duan të merren me këtë, kështu që të dalë (1); kthimi (1); në këtë rast do të jetë ekuivalent. Atëherë çfarë ne duam të hapur ne duam të fopen. Argumentet do të duken mjaft të ngjashme. Ne duam të fopen ($ argv [1], dhe ne duam të hapur atë për lexim. Kjo kthen një burim të cilën ne jemi duke shkuar për të thirrur f. Kjo duket shumë e ngjashme me mënyrën se si e bën këtë përveç C ne nuk kemi për të thënë * skedar. Në vend të kësaj, ne vetëm të thonë se $ f. Rregull. Në fakt, unë mendoj se kjo edhe na jep një aluzion të funksionojë si PHP quajtur file. Dokumentit PHP. Çfarë kjo do të bëni është të lexoni një file të tërë në një grup. Ti as nuk duhet të fopen atë. Ajo do të bëjë që për ju. Pra, linja = $ file ($ argv [1]); Tani të gjitha linjat e dosjes janë në linja. Tani ne duam të lloj linja. Si mund të lloj linjat? Ne lloj linja. Dhe tani ne mund të shtypura të tyre apo çfarëdo. Ndoshta mënyra më e lehtë është foreach ($ linja si $ line) echo $ line; [Student] nuk do të kemi edhe të kalojnë linjat duke referuar diçka në lloj? Kjo është ajo ku lloj do të përcaktohet si lloj funksion ($ array &). Kur ju telefononi funksion ju nuk e kalojnë atë duke iu referuar. Kjo është funksioni që përcakton atë si duke marrë atë si referencë. Kjo është në fakt pikërisht çfarë shkoi keq kur ne kemi vënë gjithçka në serverat tanë, kur ne kemi shkuar 5,3-5,4. Deri 5.4, kjo ishte krejtësisht e arsyeshme. Një funksion nuk presin për të marrë atë si referencë, por ju mund të kalojë atë si referencë kështu që nëse funksioni do të ndodhë për të ndryshuar atë, ajo është modifikuar ende. Që nga 5.4, ju nuk jeni menduar për të bërë këtë. Deri tani e vetmja mënyrë ju të kalojë duke iu referuar është nëse funksioni në mënyrë eksplicite bën atë. Nëse ju nuk doni që ajo të ndryshojë atë, atëherë ju duhet të bëni kopje $ = $ linjat dhe kopje të kalojë. Deri tani linja do të ruhet dhe kopje do të ndryshohet. php.unique.php. Unë mund të ketë messed up diçka. Papritur 'lloj'. Nuk do të jetë diçka që e bën këtë për ne. Kjo nuk është edhe atje. Njoftimit, kur ju lexoni manualin që Argumenti i parë pritet të jetë një grup dhe kjo është marrë duke iu referuar. Pse është kjo ankuar për mua? Sepse unë kam këtë lloj funksioni ende në këtu se unë nuk dua. Mirë, php.unique.php. Unë nuk të kalojë atë një argument, sepse unë nuk kam një skedar. Është php.unique.php në test.php. Këtu është test.php shtypura jashtë të gjithë në një mënyrë të bukur renditura. Vini re se për të renditura është lloj i pazakontë për një fotografi kod sepse të gjitha linjat tona bosh do të vijë më parë pastaj do të vijnë të gjithë indentations 1 tanë të nivelit të pastaj vijnë të gjitha indentations tonë nr. Po. >> [Student] Pra, për kodin burim që nuk u kalua duke iu referuar? Është se kaluar përgjithësisht nga vlera? [Bowden] Kur ju telefononi një funksion, ajo kurrë nuk përcakton nëse ajo u miratua me referencë. Kjo është përkufizimi funksion i cili përcakton nëse ajo u miratua me referencë. Dhe duke kërkuar në përcaktimin e funksionit lloj ose thjesht duke kërkuar në këtë, ajo merr argumentin duke iu referuar. Pra, pavarësisht nëse ju dëshironi që ajo të marrë atë duke iu referuar, ajo ka marrë atë me referencë. Ajo modifikon array në vend. Kjo nuk është e lejuar vetëm. Ju nuk jeni i lejuar për të bërë këtë. >> [Student] Oh, në rregull. [Bowden] Ky, lloj do të marrë linjat duke iu referuar dhe të modifikojë atë. Dhe përsëri, në qoftë se ju nuk doni të bëni këtë, ju mund të bëni një kopje të tillë. Edhe në këtë rast, kopja nuk është në fakt një kopje e linjave. Ajo thjesht tregon të njëjtën gjë deri sa ajo të parë merr modifikuar, ku është parë do të merrni ndryshuar në funksion të renditjes, ku, për shkak se është kopje-mbi-shkruar, tani është një kopje e kopjes do të bëhet. Ju gjithashtu mund të bëjë këtë. Kjo është vend tjetër ju mund të shihni simbol. Ju shikoni atë në sythe foreach, ju shohin atë në deklaratat funksion, dhe ju shohin atë kur vetëm caktimin e variablave. Tani ne kemi arritur asgjë duke e bërë këtë sepse kopje fjalë për fjalë dhe linjat e njëjta gjë. Ju mund të përdorni linjat dhe kopje të këmbyeshme. Ju mund të bëni unset ($ kopje), dhe se nuk ka linja unset, ju vetëm humbur referencë tuaj për të njëjtën gjë. Pra, si të kësaj pike, tani linja është e vetmja mënyrë që ju mund të hyni në linja. Pyetje? Po. [Student] Plotësisht jashtë teme, por ju nuk keni për të mbyllur me PHP - >> ju nuk bëni. Rregull. [Bowden] Unë do të shkojë aq larg sa të thonë se kjo është praktikë e keqe për të mbyllur ato. Kjo është ndoshta një ekzagjerim, sidomos në një skenar, por le të shohim se çfarë ndodh në qoftë se unë bëj këtë. Që nuk bëri asgjë. Çfarë ndodh nëse kam kërkuar - [pëshpëritjet] Unë kam nevojë për të kaluar një argument. Xhiruar. I quajtur atë të gabuar. Pra php.unique.php me një argument. Tani unë nuk e di edhe nevojë për këtë. Unë do të kalojë atë një argument valid. Kjo shtypura çfarëdo qoftë ajo është shtypje. Unë jam shtypjen kopje dhe kopje nuk ekziston. Pra, linja. Ajo shtypur çdo gjë, dhe pastaj të vini re të gjitha junk këtë këtu poshtë, sepse në çdo gjë që është jashtë PHP e etiketave PHP është vetëm do të jenë të shtypura fjalë për fjalë. Kjo është arsyeja pse HTML, është kaq e bukur që unë mund të bëjë div llafe, llafe, llafe klasë apo çfarëdo, blah, blah, blah dhe pastaj të bëjë disa kodin PHP dhe pastaj të bëjë div fund. Dhe tani kjo shtypje shkoj div tim bukur deri krye, çdo gjë që PHP shtypura, në fund div. Katastrofike kur diçka e tillë ndodh, e cila është shumë e zakonshme, vetëm një newline humbur në fund të file. Ju nuk do të mendoni se ajo do të jetë se i madh i një marrëveshje deri sa ju e konsideroni faktin se me shfletuesit - Si përcjellëse punë ose në thelb ndonjë punë headers, kur ju bëni lidhjen tuaj në një faqe interneti dhe kjo dërgon përsëri të gjitha këto headers dhe gjëra të si përgjigje apo 200 përgjigje përcjellëse apo çfarëdo, headers janë të vlefshme vetëm deri byte parë të të dhënave është dërguar. Ju mund të përcjellim mijëra herë, por sa më shpejt që byte parë të të dhënave është dërguar ju nuk jeni menduar të përcjellim përsëri. Nëse ju keni një newline humbur në fund të një file dhe le të thonë se ju përdorni këtë funksion dhe pastaj ju doni të - Le të thonë se kjo është një tjetër fotografi që është index.php dhe ju require_once diçka - Unë nuk mund të mendoj për një shembull të mirë të saj. Çështja ndodh kur kjo linjë në fund merr jehonë. Ju nuk duan asgjë që janë jehonë ende. Edhe pse ju nuk e keni ndërmend për asgjë duke jehonën, diçka ka marrë jehonë dhe kështu që tani ju nuk jeni menduar të dërgojë headers më dhe ju jeni duke shkuar për të marrë ankesat. Ju thjesht nuk keni nevojë këto tags mbylljes. Nëse keni ndërmend të bëjnë diçka me HTML - dhe kjo është krejtësisht e arsyeshme të bëjmë këtu poshtë div çfarëdo dhe pastaj në këtë pikë ju mund ose nuk mund të përfshijnë ato. Ajo nuk ka të vërtetë rëndësi. Por në Scripts PHP është e rrallë për të mbyllur atë. Kur çdo gjë është PHP, absolutisht çdo gjë, ju nuk duhet të vërtetë për të mbyllur atë / ju nuk duhet të mbyllë atë. Ballafaqimi me vargjet është shumë nicer se në C. Në PHP ju mund të specifikoni një varg me citate të vetme apo të dyfishtë. Me kuotat e vetme që ju nuk mund të përdorni "shpëtojnë" sekuenca. Vazhdimisht shpëtuar, blah, blah, blah. Pra printf është shumë e rrallë në PHP. I guess I do të përdorë printf nëse kam kërkuar për të bërë një gjë e tillë - në pset 5 keni përdorur sprintf apo çfarëdo. Por ju doni të bëni 001.jpg 002.jpg dhe. Pra, për këtë lloj gjë, ku unë në fakt duan të formatin e tekstit unë do të përdorë printf. Por ndryshe unë vetëm do të përdorin varg string. Unë kurrë nuk përdorin printf. Ne jemi vetëm detajet diferencuar midis kuotat e vetme dhe citate të dyfishtë. Dallimi më i madh është se kuotat e vetme, ajo do të shtypura fjalë për fjalë. Nuk ka char dhënave lloji në PHP, ndryshe C, kështu që kjo është ekuivalente me këtë. Ata janë të dy vargjet. Dhe gjë e bukur për vargjet japin kuotën e vetme është që unë mund të them 'hello botë! " blah, blah, blah, $ $ Wooo. Çfarë ndodh kur unë të shtypura kjo është ajo do të shtypura atë fjalë për fjalë. Le të shpëtoj nga të gjitha stuff tonë. Pra echo $ str1; Ajo shtypura fjalë për fjalë të gjitha ato gjëra: argumentet dollar, backslash n, të cilat ju do të mendoni se do të jetë newlines - të gjitha ato gjëra që printon fjalë për fjalë. Vetmja gjë që ju duhet për të shpëtuar janë citate të vetme sepse përndryshe ai do të mendoj se është mbylljes kuotat e vetme. Kuotat e dyfishtë, krejtësisht të ndryshme. Ne tashmë shohim theksim i sintaksës është cluing na me atë që është gati për të shkuar tmerrësisht keq. php.unique. Padefinuar ndryshueshme: wooo sepse kjo është interpretuar si një ndryshore të quajtur wooo. Kuotat e dyfishtë të ju lejojnë të futur variablave në - Le të thonë se $ name = "Rob"; Pra echo "Hi, emri im është $ emri!"; Ajo e njeh këtë si një variabël. Kur kam drejtuar atë - dhe unë do të futur një newline - Hi, emri im është Rob! dhe Hello World! Kjo është për shkak se kurrë nuk kam hequr shtypjen e wooo sipër. Ka 1 hap më tej ju mund të bëni. $ Grup = [1, 2, 3]; Çka nëse unë dua të shtypura indeksin e parë të grup? Ju bëni $ array [0]. Të theksim i sintaksës është një çelës. Çfarë është kjo do të bëni? php.unique. Hi, emri im është 1! e cila nuk është ajo që kam kërkuar. Theksim i sintaksës gënjyer për mua. Le provoni 'një' -> 1, 'b' -> 2. Kjo është se si unë do të duhet për të shkruar atë. Quote papritur vetme (T_ENCAPSED blah, blah, blah, blah, blah). Ideja është se ajo nuk është e njohur kjo si pjesë e grup. Kjo nuk është e njohur këtë si grup indeksuar me letër një. Ju dëshironi të bëni që formatimin e teksteve kaçurrel rrethuar nga, dhe tani çdo gjë është në këtë mbajtëse kaçurrel do të interpoluar, cila është fjala që ne përdorim për të magjike futur këto ndryshore në vendet e drejtë. Tani duke bërë këtë, php.unique, dhe Hi, emri im është 1! siç pritej ose Hi, emri im është Rob! Një gjë që është lloj i bukur për kuotat e vetme është se - Ka disa kosto të interpolating. Në qoftë se ju përdorni kuotat e dyfishtë, përkthyesi ka për të shkuar mbi këtë varg, duke u siguruar se, "Oh, këtu është një ndryshore. Tani unë duhet të shkoni të merrni atë variabël dhe futur atë këtu." Edhe nëse ju nuk e përdorni ndonjë variablave, asgjë brenda këtyre citateve të dyfishta duhet të interpoluar, por ajo do të vazhdojë të jetë i ngadalshëm, sepse ajo ka nevojë për të shkuar mbi kuotat e dyfishtë kërkoni për gjërat që duhet të interpoluar. Citon në mënyrë të vetme mund të jetë pak më të shpejtë në qoftë se asgjë nuk duhet të interpoluar, dhe unë priren të përdorni edhe citate të vetme për të, "Hi, emri im është '. $ Array ['a'] anyway. Kjo do të jetë e barabartë me atë që kishim më parë. Por kjo është një çështje preference. Nëse jeni duke përdorur PHP, ju ndoshta nuk bëni kujdes për ndryshim shpejtësi. Nuk është e mjaftueshme për të arsyetuar ato për të filluar me. Çdo pyetje përfundimtare? Ne fakt nuk e merrni edhe nëpër të gjitha e saj, por kjo stuff ishte i mërzitshëm. Gjëja e fundit që është lloj i bukur në PHP është kur ju jeni që kanë të bëjnë me HTML, ju do të përdorni atë pak, kështu që sintaksën bukur shkurtore për shtypjen e një ndryshore. Pa vënë PHP këtu, kjo quhet tags shkurtra. Zyrtarisht si i PHP 5.4, kjo është tejkaluar. Ju jeni rekomanduar për të vënë PHP. Kjo është mbështetur ende, tags kaq të shkurtër me