1 00:00:00,000 --> 00:00:02,610 [Powered by Google Translate] [Odjeljak 8 - ugodnije] 2 00:00:02,610 --> 00:00:04,910 [Rob Bowden - Sveučilište Harvard] 3 00:00:04,910 --> 00:00:07,070 [Ovo je CS50. - CS50.TV] 4 00:00:11,520 --> 00:00:14,160 >> Ove tjedan sekcija bilješke će biti prilično kratka, 5 00:00:14,160 --> 00:00:19,070 tako da sam samo ću držati govor, ti dečki su idući u držati molba pitanja, 6 00:00:19,070 --> 00:00:22,720 a mi ćemo pokušati popuniti onoliko vremena koliko je to moguće. 7 00:00:22,720 --> 00:00:31,950 Puno ljudi misli da je to pset nije nužno teško, ali to je jako dugo. 8 00:00:31,950 --> 00:00:37,070 The pset spec. sama traje sat vremena za čitanje. 9 00:00:40,530 --> 00:00:45,730 Mi vam dati puno SQL mogli eventualno potrebno koristiti. 10 00:00:45,730 --> 00:00:50,520 Mi vas kroz puno toga, tako da ne bi trebalo biti previše loš. 11 00:00:50,520 --> 00:00:54,560 Je li netko započeo ili završio? 12 00:00:55,380 --> 00:00:59,710 To je posljednja pset. Oh, moj Bože. 13 00:00:59,710 --> 00:01:05,400 Obično postoji JavaScripta jednom nakon toga, ali kalendarske promjene stvari 14 00:01:05,400 --> 00:01:09,560 čini sve jedan tjedan kraći, a mi više ne imati JavaScript pset. 15 00:01:09,560 --> 00:01:12,310 Ne znam kako da utječe li JavaScripta će se pojaviti na ispitu 16 00:01:12,310 --> 00:01:15,510 ili Kviz 1. 17 00:01:15,510 --> 00:01:22,260 Pretpostavljam da će biti nešto poput morate znati na visokoj razini stvari o JavaScriptu 18 00:01:22,260 --> 00:01:26,460 ali sumnjam da bih samo dati ravno JavaScript kôd 19 00:01:26,460 --> 00:01:28,720 budući da nisu imali pset u njega. 20 00:01:28,720 --> 00:01:33,000 Ali to će biti stvari za kviz pregled sljedeći tjedan. 21 00:01:33,000 --> 00:01:36,320 >> Odjeljak pitanja. 22 00:01:36,320 --> 00:01:43,870 Puno ove stvari je nešto loše sročen, ali mi ćemo raspravljati zašto. 23 00:01:43,870 --> 00:01:50,220 Za razliku od C, PHP je "dinamički upisali" jezik. Što to znači, pitate? 24 00:01:50,220 --> 00:01:53,830 Pa, reći zbogom za sve one char, float, int, i drugih ključnih riječi trebate koristiti 25 00:01:53,830 --> 00:01:56,190 kada izjavljuje varijable i funkcije u C. 26 00:01:56,190 --> 00:02:00,420 U PHP-u, varijabla je vrsta određuje se prema vrijednosti koja je trenutno drži. 27 00:02:00,420 --> 00:02:04,990 Dakle, prije nego što smo utipkajte taj kôd u datoteci pod nazivom dynamic.php, 28 00:02:04,990 --> 00:02:12,670 PHP dinamički upisali. To je točno. 29 00:02:12,670 --> 00:02:17,590 Ne slažem se s činjenicom da to znači da smo rekavši zbogom na char, float, int, 30 00:02:17,590 --> 00:02:20,620 i druge ključne riječi. 31 00:02:20,620 --> 00:02:25,510 Točan razlika između dinamički upisali i alternativa, 32 00:02:25,510 --> 00:02:32,010 koji statički je upisali, da je dinamički upisali, sve vaše tipa provjeri i stvari 33 00:02:32,010 --> 00:02:37,350 se događa u vrijeme izvođenja, dok statički upisali se to događa u vrijeme prevođenja. 34 00:02:37,350 --> 00:02:43,030 Riječ statična u cjelini čini se da znači stvari vrijeme prevođenja. 35 00:02:43,030 --> 00:02:48,170 Pretpostavljam da postoje i drugi načini za njega, ali u C kad proglasi statičke varijable, 36 00:02:48,170 --> 00:02:52,650 njegova pohranu namijenjen u vrijeme prevođenja. 37 00:02:52,650 --> 00:02:59,260 Evo, dinamički upisali samo znači da - 38 00:02:59,260 --> 00:03:04,350 U C ako pokušate dodati string i integer, kada ga sastaviti, 39 00:03:04,350 --> 00:03:11,000 to će se žaliti jer to će reći da ne možete dodati int i upustvo. 40 00:03:11,000 --> 00:03:14,710 To je jednostavno ne vrijedi operacija. 41 00:03:14,710 --> 00:03:21,170 To je još jedna stvar koja mi ćemo doći do u drugi. 42 00:03:21,170 --> 00:03:24,860 Ali ta vrsta provjere, činjenica da se žali na vrijeme prevođenja, 43 00:03:24,860 --> 00:03:29,220 je statički tip provjere. 44 00:03:29,220 --> 00:03:35,220 Postoje jezici kojima ne treba reći char, float, int, i sve te stvari, 45 00:03:35,220 --> 00:03:40,940 ali jezik mogu reći iz konteksta stvar koju vrstu bi to trebalo biti, 46 00:03:40,940 --> 00:03:43,980 ali to je još uvijek statički upisali. 47 00:03:43,980 --> 00:03:49,000 Dakle, ako se uzme 51, ocaml, nikada ne trebate koristiti bilo koji od tih tipova, 48 00:03:49,000 --> 00:03:58,700 ali to još uvijek neće na vrijeme prevođenja reći da to ne može učiniti, jer ste miješanje int i niz. 49 00:03:58,700 --> 00:04:05,650 Dinamički upisali samo znači da je negdje tijekom pokrenuti vrijeme ćeš dobiti tužbu. 50 00:04:05,650 --> 00:04:13,430 Ako ste također koristiti Javu prije, u cjelini, gotovo svaki C-tipa jezik 51 00:04:13,430 --> 00:04:20,070 će statički biti upisali, pa C, C + +, Java, sve one su uglavnom statički upisali. 52 00:04:20,070 --> 00:04:22,910 U Java kada sastaviti nešto, a vi govorite 53 00:04:22,910 --> 00:04:26,670 Niz je jednaka novi nešto što nije string, 54 00:04:26,670 --> 00:04:28,950 da će se žaliti jer one vrste jednostavno ne podudaraju. 55 00:04:28,950 --> 00:04:31,180 To će se žaliti na vrijeme prevođenja. 56 00:04:31,180 --> 00:04:36,750 No, ona također ima neke dinamičke vrijeme stvari se sviđa ako pokušate da se baci nešto 57 00:04:36,750 --> 00:04:40,500 na tipa koji je precizniji od svog trenutnog tipa, 58 00:04:40,500 --> 00:04:45,610 postoji ništa što možete učiniti u vrijeme prevođenja provjeriti da li da baci će uspjeti. 59 00:04:45,610 --> 00:04:51,130 Java također ima neke dinamičan tip provjere da čim to dobiva na toj liniji koda 60 00:04:51,130 --> 00:04:54,130 kada je zapravo izvršenja, to će učiniti ekipi, 61 00:04:54,130 --> 00:04:56,260 provjeriti da li da baci je vrijedio na prvom mjestu, 62 00:04:56,260 --> 00:04:59,890 a ako to nije, onda će se žaliti da imate pogrešnu vrstu. 63 00:04:59,890 --> 00:05:03,200 Dinamički provjere. 64 00:05:03,200 --> 00:05:07,010 Upišite ovo u datoteku pod nazivom dynamic.php. 65 00:05:10,130 --> 00:05:12,380 Dynamic.php. 66 00:05:14,580 --> 00:05:17,190 Ja ću unzip da oblikovanje. 67 00:05:18,750 --> 00:05:21,880 Imamo varijablu, možemo ga postaviti na cijeli 7, 68 00:05:21,880 --> 00:05:27,930 onda ćemo ispisati ga i% s - 69 00:05:27,930 --> 00:05:32,830 Oh, mi smo tiskanje vrstu njega, tako gettype će vratiti tip varijable. 70 00:05:32,830 --> 00:05:35,720 Mi samo tiskanje tip iznova i iznova. 71 00:05:35,720 --> 00:05:39,440 Mi samo php.dynamic.php. 72 00:05:39,440 --> 00:05:45,920 Vidjet ćemo da se mijenja iz cijeli niz do do boolean kao što smo proći. 73 00:05:45,920 --> 00:05:54,590 U C nema logički tip podataka, ne postoji tip string podataka. 74 00:05:54,590 --> 00:06:00,500 Tu je char * i Booleova samo teži biti int ili char ili nešto. 75 00:06:00,500 --> 00:06:05,690 U PHP ove vrste ne postoje, i to je jedan od velikih prednosti PHP više C - 76 00:06:05,690 --> 00:06:13,290 da gudačka operacije beskrajno lakše nego u PHP C. Oni samo rade. 77 00:06:13,290 --> 00:06:18,290 >> Tako smo došli ovamo. 78 00:06:18,290 --> 00:06:21,260 Trčali smo dynamic.php. 79 00:06:21,260 --> 00:06:26,710 To govori PHP tumača, pod nazivom php, pokrenuti PHP kod u dynamic.php. 80 00:06:26,710 --> 00:06:30,250 Ako imate bilo kakve pogreške u datoteci, tumač će vam reći! 81 00:06:30,250 --> 00:06:39,110 Tumač, ovo je još jedna velika razlika između PHP i C. 82 00:06:39,110 --> 00:06:48,200 U C morate sastaviti nešto i onda pokrenuti taj sastaviti datoteku. 83 00:06:48,200 --> 00:06:50,490 U PHP nikada sastaviti ništa. 84 00:06:50,490 --> 00:06:57,200 Dakle PHP tumač osnovi samo čitate ovaj redak po redak. 85 00:06:57,200 --> 00:07:02,900 To hits var = 7 onda ga pogodi printf onda udari var onda udari printf i tako dalje. 86 00:07:02,900 --> 00:07:10,910 Tu je malo sastavljanju to radi, i to sprema rezultate 87 00:07:10,910 --> 00:07:15,510 pa ako ste pokrenuti skriptu kasnije možete učiniti neke, 88 00:07:15,510 --> 00:07:19,280 ali u osnovi to je redak po redak takve stvari. 89 00:07:19,280 --> 00:07:25,280 To znači da je puno od optimizacijama koje smo dobili u C, 90 00:07:25,280 --> 00:07:31,920 poput sastavljanja, to je samo općenito prevodilac može učiniti puno trikova za vas. 91 00:07:31,920 --> 00:07:36,110 To može potrajati od neiskorištenih varijabli, to možete učiniti sve ove vrste stvari, 92 00:07:36,110 --> 00:07:38,660 to može učiniti rep rekurzija. 93 00:07:38,660 --> 00:07:42,550 U PHP nećeš dobiti taj prednost 94 00:07:42,550 --> 00:07:45,690 jer samo će početi izvršavanju redak po redak po redak, 95 00:07:45,690 --> 00:07:49,950 i to zapravo ne prepoznaju takve stvari kao lako 96 00:07:49,950 --> 00:07:54,440 jer to nije jedna velika kompilacija prelazite stvar i onda izvršenje; 97 00:07:54,440 --> 00:07:56,860 to je samo redak po redak. 98 00:08:00,730 --> 00:08:02,750 Tako da je prevoditelj. 99 00:08:02,750 --> 00:08:06,840 >> Povratak na našem dinamičnom tipkanje: prilično cool, zar ne? 100 00:08:06,840 --> 00:08:08,640 Ti definitivno ne bi mogao učiniti da se u C! 101 00:08:08,640 --> 00:08:11,860 Sada, vidjeti ako možete shvatiti vrstu svaku od sljedećih vrijednosti. 102 00:08:11,860 --> 00:08:14,760 Vidi ovo za referencu. 103 00:08:14,760 --> 00:08:19,420 Dakle, 3.50. Koji tip ne mislite da će to biti? 104 00:08:24,480 --> 00:08:26,370 Ovdje su vrste koje imamo. 105 00:08:26,370 --> 00:08:30,430 Imamo bools, integers, plutajuće točke, žice, nizovi, objekti, 106 00:08:30,430 --> 00:08:38,370 i onda resursa, što je vrsta nejasne. 107 00:08:38,370 --> 00:08:41,010 Mislim da je zapravo primjer ovdje. 108 00:08:41,010 --> 00:08:43,740 Zatim tu je NULL. NULL je posebna vrsta. 109 00:08:43,740 --> 00:08:47,140 Za razliku od C gdje je samo NULL pokazivač s adresom 0, 110 00:08:47,140 --> 00:08:54,930 u PHP-u, NULL je vlastiti tipa gdje vrijedi samo stvar tog tipa je NULL. 111 00:08:57,560 --> 00:09:00,670 To je mnogo više koristan za provjere pogreške. 112 00:09:00,670 --> 00:09:04,310 U C gdje smo imali taj problem gdje ako se vrati NULL, 113 00:09:04,310 --> 00:09:08,660 to znači da ste vraća NULL pokazivač ili pomoću NULL da označi pogrešku 114 00:09:08,660 --> 00:09:12,380 ili sve te zbrke smo imali u jednom trenutku. 115 00:09:12,380 --> 00:09:18,440 Evo, vraća NULL općenito znači pogrešku. 116 00:09:20,860 --> 00:09:27,300 Puno stvari i povratak false za pogreške. 117 00:09:27,300 --> 00:09:33,140 Ali stvar je NULL tip, jedina stvar null tipa je NULL. 118 00:09:33,140 --> 00:09:40,090 Tada je kao povratni možete definirati neke anonimne funkcije. 119 00:09:40,090 --> 00:09:46,420 Ne morate dati funkciju ime, ali nećete morati nositi s tim ovdje. 120 00:09:46,420 --> 00:09:53,940 Gledajući na vrste koje ne očekuju da znamo, 121 00:09:53,940 --> 00:09:59,000 Što mislite vrsta 3,50 je? >> [Student] Float. 122 00:09:59,000 --> 00:10:00,370 Da. 123 00:10:00,370 --> 00:10:06,290 Dakle ovdje, što misliš tip je to? >> [Student] Array. 124 00:10:06,290 --> 00:10:09,890 Da. Prvi je bio float, drugi je niz. 125 00:10:09,890 --> 00:10:14,500 Primijetit ćete da je ovo polje nije poput C niz 126 00:10:14,500 --> 00:10:19,610 gdje imate indeks 0 ima neku vrijednost, indeks 1 ima neku vrijednost. 127 00:10:19,610 --> 00:10:26,320 Ovdje indeksi su a, b, i c, a vrijednosti su 1, 2, i 3. 128 00:10:26,320 --> 00:10:33,980 U PHP ne postoji razlika između asocijativnog polja i samo redovito nizom 129 00:10:33,980 --> 00:10:36,740 kao što će misliti o tome u C. 130 00:10:36,740 --> 00:10:43,040 Tu je upravo to, a ispod haube redoviti niz je samo asocijativni niz 131 00:10:43,040 --> 00:10:50,000 gdje 0 zemljovidi u određenoj vrijednosti isti način zemljovidi u određenoj vrijednosti. 132 00:10:50,000 --> 00:11:00,410 Iz tog razloga, PHP može biti prilično loša za stvarno brzo koda / vrednovanje stvari 133 00:11:00,410 --> 00:11:07,930 budući da se u C kada koristite niz znate da pristupanje člana konstantna vrijeme. 134 00:11:07,930 --> 00:11:11,860 U PHP pristup član je tko zna koliko vremena? 135 00:11:11,860 --> 00:11:18,970 To je vjerojatno konstanta ako se Skosan ispravno. 136 00:11:18,970 --> 00:11:21,620 Tko zna što je stvarno radi ispod haube? 137 00:11:21,620 --> 00:11:25,600 Vi stvarno trebate pogledati na provedbi vidjeti kako će to nositi s tim. 138 00:11:25,600 --> 00:11:28,550 Dakle fopen. 139 00:11:28,550 --> 00:11:36,420 Mislim ovdje neka je samo PHP priručnik fopen pogledati povratnog tipa. 140 00:11:36,420 --> 00:11:41,260 Vidimo ovdje možete pogledati prilično mnogo bilo funkciju u PHP priručniku 141 00:11:41,260 --> 00:11:47,540 i to je neka vrsta od čovjeka stranici PHP. 142 00:11:47,540 --> 00:11:51,060 Povratni tip će biti resurs. 143 00:11:51,060 --> 00:11:56,050 To je razlog zašto sam ga pogledao, jer mi nije stvarno definirati resurs. 144 00:11:56,050 --> 00:12:04,110 Ideja resursa, u C ste vrsta dobio FILE * ili bilo što drugo; 145 00:12:04,110 --> 00:12:07,200 u PHP resurs je vaša SLIKA *. 146 00:12:07,200 --> 00:12:10,360 To je ono što će se čitati iz, to je ono što će biti pismeno. 147 00:12:10,360 --> 00:12:20,710 To je obično vanjski, tako da je resurs možete povući stvari iz te baciti stvari. 148 00:12:20,710 --> 00:12:26,520 I na kraju, ono što je tip NULL? >> [Student] NULL. 149 00:12:26,520 --> 00:12:30,650 Da. Dakle, jedina stvar koja je NULL je NULL. 150 00:12:30,650 --> 00:12:33,480 NULL je NULL. 151 00:12:35,490 --> 00:12:41,170 >> Jedna značajka PHP-tipa sustava (za bolje ili za lošije) je njegova sposobnost da žonglirati vrsta. 152 00:12:41,170 --> 00:12:44,390 Kada ste napisali liniju PHP koda koji kombinira vrijednosti različitih tipova, 153 00:12:44,390 --> 00:12:46,670 PHP će pokušati napraviti pametan stvar. 154 00:12:46,670 --> 00:12:48,920 Isprobajte svakom od sljedećih linija PHP kodu. Što se ispisati? 155 00:12:48,920 --> 00:12:51,000 Je li to ono što ste očekivali? Zašto ili zašto ne? 156 00:12:51,000 --> 00:12:58,600 Ova činjenica o PHP je ono što ga čini ono što mi zovemo slabo upisali. 157 00:12:58,600 --> 00:13:04,610 Slabo upisali i snažno upisali, 158 00:13:04,610 --> 00:13:06,840 postoje različiti načini za tim uvjetima, 159 00:13:06,840 --> 00:13:12,020 ali većina ljudi koristi slabo upisali i snažno upisali značiti takve stvari 160 00:13:12,020 --> 00:13:15,920 gdje je ("1" + 2), da radi. 161 00:13:15,920 --> 00:13:18,290 U C koji neće raditi. 162 00:13:18,290 --> 00:13:22,490 Možete zamisliti to ne rade. 163 00:13:22,490 --> 00:13:29,200 Puno ljudi se miješati dinamičan tipkati i tipkati slab i statički tipkati i tipkati jak. 164 00:13:29,200 --> 00:13:34,050 Python je još jedan primjer jeziku koja dinamički je upisali. 165 00:13:34,050 --> 00:13:41,770 Možete baciti oko tipova varijabli i to će odrediti vrijeme izvođenja 166 00:13:41,770 --> 00:13:44,680 Svaka pogreška checkings. 167 00:13:44,680 --> 00:13:50,740 U Python to će izvršiti to i to će se vidjeti ("1" + 2); 168 00:13:50,740 --> 00:13:55,920 i to će uspjeti jer kaže da ne možete dodati string i integer. 169 00:13:55,920 --> 00:14:00,860 U PHP, koji je baš kao i dinamički upisali, to neće uspjeti. 170 00:14:00,860 --> 00:14:04,220 Slaba tipizacija ima veze s činjenicom da se stvari s vrstama 171 00:14:04,220 --> 00:14:07,800 da ne stvarno smisla nužno. 172 00:14:07,800 --> 00:14:17,420 Dakle, ("1" + 2), a ja mogu zamisliti da se niz 12, ja mogu zamisliti da se niz 3, 173 00:14:17,420 --> 00:14:20,710 Ja mogu zamisliti da se cijeli tri. 174 00:14:20,710 --> 00:14:24,530 To nije nužno dobro definirana, a mi vjerojatno ćeš vidjeti ovdje 175 00:14:24,530 --> 00:14:29,140 da kad smo ispisali ("1" + 2), ona je vjerojatno će završiti kao drugačiji 176 00:14:29,140 --> 00:14:32,320 nego ispis (1 + "2"). 177 00:14:32,320 --> 00:14:39,700 I to je uglavnom, po mom mišljenju, za gore. 178 00:14:39,700 --> 00:14:44,240 Ovdje možemo pokušati to. 179 00:14:44,240 --> 00:14:48,740 Drugi trik o PHP je da ne morate da se zapravo napisati datoteku. 180 00:14:48,740 --> 00:14:52,790 To ne su pokrenuti ovu naredbu mod. 181 00:14:52,790 --> 00:14:57,710 Dakle, php-r, onda možemo baciti u naredbi ovdje: 182 00:14:57,710 --> 00:15:06,610 "Ispis ('1 '+ 2)," a ja ću baciti novu liniju. 183 00:15:19,550 --> 00:15:23,970 Ovo tiskana tri. 184 00:15:31,100 --> 00:15:35,330 To izgleda kao da ispisuje tri i to je cijeli tri. 185 00:15:35,330 --> 00:15:38,420 Tako sada pokušajmo obrnuto: 186 00:15:38,420 --> 00:15:42,970 "Ispis (1 + '2 '); 187 00:15:45,560 --> 00:15:50,490 Mi smo dobili tri, a također će biti cijeli broj 3? Ja iskreno nemam pojma. 188 00:15:50,490 --> 00:15:54,030 To izgleda kao da je dosljedan. 189 00:15:54,030 --> 00:15:59,550 Tu nikada nije bilo šanse da ga se niz od 12 ili bilo što slično 190 00:15:59,550 --> 00:16:08,080 jer PHP, za razliku od JavaScript i Java previše, 191 00:16:08,080 --> 00:16:11,670 ima zaseban operateru za ulančavanje. 192 00:16:11,670 --> 00:16:14,930 Concatenation u PHP je točka. 193 00:16:14,930 --> 00:16:22,950 Dakle tisak (1 '2 '.); Će nam dati 12. 194 00:16:25,790 --> 00:16:32,420 Ovo sklon dovesti do konfuzije gdje ljudi pokušati učiniti nešto poput str + = 195 00:16:32,420 --> 00:16:37,840 neke druge stvari koje žele dodati na kraju svog niza, i da će uspjeti. 196 00:16:37,840 --> 00:16:40,770 Vi trebate učiniti str. = 197 00:16:42,000 --> 00:16:46,240 Dakle, ne zaboravite ulančavanje u PHP je točka. 198 00:16:46,240 --> 00:16:52,100 Ostale stvari za isprobavanje: print ("CS" + 50); 199 00:16:55,750 --> 00:17:03,610 Ja sam vam rekao da nema nade za to je rezultiralo u CS50 200 00:17:03,610 --> 00:17:06,119 budući ulančavanje nije +. 201 00:17:06,119 --> 00:17:08,440 Što mislite da će ovo završiti? 202 00:17:10,359 --> 00:17:13,460 Ja iskreno apsolutno nema pojma. 203 00:17:14,250 --> 00:17:16,460 To izgleda kao da je samo 50 godina. 204 00:17:16,460 --> 00:17:21,490 Ona vidi string, a kladim ako stavimo 123CS - 205 00:17:21,490 --> 00:17:29,640 Ona vidi prvi string, on pokušava čitati cijeli broj od njega ili broj od njega. 206 00:17:29,640 --> 00:17:31,710 U ovom slučaju to vidi 123CS. 207 00:17:31,710 --> 00:17:35,190 "To nema smisla, kao cijeli broj, tako da sam samo ću misliti na 123". 208 00:17:35,190 --> 00:17:38,580 Dakle, 123 + 50 će biti 173. 209 00:17:38,580 --> 00:17:40,740 I ovdje počinje ovo čitate, kao cijeli broj. 210 00:17:40,740 --> 00:17:45,690 To ne vidi ništa, tako da samo tretira ga kao 0. Dakle 0 + 50 će biti 50. 211 00:17:45,690 --> 00:17:51,600 Ovo sam uz pretpostavku će učiniti nešto slično. 212 00:17:51,600 --> 00:17:54,310 Razmišljam 99. 213 00:17:54,310 --> 00:17:57,580 Da, jer je idući u uzeti prvi - 214 00:18:12,880 --> 00:18:15,730 Tako 99. 215 00:18:15,730 --> 00:18:21,970 Ovdje (10/7), ako je to C, što bi to vratiti? 216 00:18:23,700 --> 00:18:29,630 [Student] 1. >> Da, to će biti jedan, jer 10/7 je dijeljenjem dva cijela broja. 217 00:18:29,630 --> 00:18:32,910 Cijeli podijeljen je cijeli će se vratiti cijeli broj. 218 00:18:32,910 --> 00:18:37,750 To se ne može vratiti jedan bod štogod to će biti, pa to je samo ide da se vrati jedan. 219 00:18:37,750 --> 00:18:46,120 Ovdje ispis (10/7), to će zapravo tumače da. 220 00:18:46,120 --> 00:18:53,760 A to znači da ako stvarno želite učiniti cijeli zaokruživanje i stvari kao što je to, 221 00:18:53,760 --> 00:18:59,950 što trebate učiniti ispis (kat (10/7)); 222 00:18:59,950 --> 00:19:08,460 U C to je vjerojatno čudno da se možete osloniti na cijeli skraćivanja redovito, 223 00:19:08,460 --> 00:19:12,260 ali u PHP ne možete, jer ona će se automatski pretvoriti u float. 224 00:19:13,430 --> 00:19:17,610 I onda (7 + true); što mislite da će biti? 225 00:19:18,550 --> 00:19:23,640 Ja sam guessing 8 ako će to protumačiti kao pravi jedan. 226 00:19:23,640 --> 00:19:25,740 To izgleda kao da je osam. 227 00:19:25,740 --> 00:19:31,710 >> Dakle, ništa što smo učinili u posljednjih 10 minuta što apsolutno nikada ne bi trebao učiniti. 228 00:19:31,710 --> 00:19:39,870 Vidjet ćete kod koji radi ovo. 229 00:19:39,870 --> 00:19:42,700 To ne mora biti kao jednostavan kao taj. 230 00:19:42,700 --> 00:19:47,240 Možete imati dvije varijable, a jedna varijabla se dogodi da se niz 231 00:19:47,240 --> 00:19:51,310 i druga varijabla se dogodi da se int, a onda dodati ove varijable zajedno. 232 00:19:51,310 --> 00:20:00,120 Budući PHP dinamički upisali i to neće učiniti bilo koju vrstu provjere za vas 233 00:20:00,120 --> 00:20:03,640 a budući da je slabo upisali i jer će samo automatski baciti te stvari zajedno 234 00:20:03,640 --> 00:20:11,490 i sve će samo raditi, to je teško čak i znati da je ta varijabla mora biti string sada, 235 00:20:11,490 --> 00:20:14,930 tako da ne bih trebao dodati da ove varijable, što je cijeli broj. 236 00:20:18,780 --> 00:20:24,560 Najbolja praksa je, ako je varijabla string, držati ga kao niz zauvijek. 237 00:20:24,560 --> 00:20:26,980 Ako je varijabla int, držati ga kao int zauvijek. 238 00:20:26,980 --> 00:20:30,770 Ako želite da se bave brojeva i gudače, 239 00:20:30,770 --> 00:20:36,970 možete koristiti varsint - to je JavaScripta. 240 00:20:36,970 --> 00:20:42,520 Intval. Ja to cijelo vrijeme. PHP i JavaScript ja miješati sve. 241 00:20:42,520 --> 00:20:47,600 Dakle intval će vratiti cijeli vrijednost varijable. 242 00:20:47,600 --> 00:20:56,550 Ako prođemo u "tisku (intval ('123 ')); dobijete 123. 243 00:21:06,820 --> 00:21:15,850 Intval sama neće napraviti ček za nas da je to isključivo cijeli. 244 00:21:15,850 --> 00:21:20,460 PHP priručnik, postoje samo toliko funkcija dostupna, 245 00:21:20,460 --> 00:21:26,560 pa ovdje mislim što bih ja koristim je is_numeric prvi. 246 00:21:26,560 --> 00:21:32,590 Ja sam guessing da se vratio lažna. 247 00:21:32,590 --> 00:21:35,780 To je još jedna stvar koju moramo ići preko je ===. 248 00:21:37,850 --> 00:21:44,020 Dakle is_numeric ('123df '), ne bi pomislio da je kao is_numeric. 249 00:21:44,020 --> 00:21:46,720 U C te će morati ponoviti više sve znakove 250 00:21:46,720 --> 00:21:50,410 i provjerite da li je svaki lik znamenku ili što god. 251 00:21:50,410 --> 00:21:53,850 Ovdje is_numeric će to učiniti za nas, 252 00:21:53,850 --> 00:21:56,520 i to je povratak lažna. 253 00:21:56,520 --> 00:22:02,120 Dakle, kada sam tiskana toga, tiskana ništa, pa evo ja sam uspoređujući ga vidjeti, 254 00:22:02,120 --> 00:22:05,490 Jeste li se dogoditi da se lažno? I tako sada je tiskanje 1. 255 00:22:05,490 --> 00:22:10,060 Navodno ga ispisuje jedan kao istinito umjesto ispisa vrijedi kao istinito. 256 00:22:10,060 --> 00:22:15,790 Pitam se, ako mi je činiti print_r. Ne, to još uvijek ne jednom. 257 00:22:15,790 --> 00:22:26,760 >> Vraćajući se ===, == još uvijek postoji, 258 00:22:26,760 --> 00:22:32,260 a ako govorimo na Tommyja on će reći == je savršeno u redu. 259 00:22:32,260 --> 00:22:37,700 Ja ću reći da == je strašna, a vi nikada ne bi trebao koristiti ==. 260 00:22:37,700 --> 00:22:44,870 Razlika je u tome što == uspoređuje stvari 261 00:22:44,870 --> 00:22:48,450 gdje to može biti istina, čak i ako oni nisu isti tip, 262 00:22:48,450 --> 00:22:53,810 dok === uspoređuje stvari i prvi se provjerava jesu li isti tip? 263 00:22:53,810 --> 00:22:58,010 Da. Ok, sad ću vidjeti ako oni zapravo usporediti biti jednaki. 264 00:22:58,010 --> 00:23:08,890 Možete dobiti čudne stvari poput 10 jednaka - neka je vidjeti što to kaže. 265 00:23:08,890 --> 00:23:15,570 Dakle ('10 '== '1 E1 "); 266 00:23:15,570 --> 00:23:17,980 Ovo true. 267 00:23:17,980 --> 00:23:21,420 Se bilo tko imati bilo nagađanja zašto se to vraća istina? 268 00:23:25,180 --> 00:23:27,120 To je ne samo o tome. Možda je to nagovještaj. 269 00:23:27,120 --> 00:23:33,170 Ali, ako sam to promijeniti na f - to prokleto! Ja i dalje koristiti dvostruke navodnike. 270 00:23:33,170 --> 00:23:38,780 Razlog su dvokrevetne citati vikao na mene jer sam ovo staviti u navodnike. 271 00:23:38,780 --> 00:23:43,850 Tako sam mogao pobjeći dvostruke navodnike u ovdje, ali jednostruke navodnike lakše. 272 00:23:43,850 --> 00:23:49,120 Dakle ('10 '== '1 F1'); ne ispisuje istina. ('10 '== '1 E1'); ispisuje istina. 273 00:23:49,120 --> 00:23:56,330 [Student] Je li to hex? >> To nije hex, ali to je blizu da to je kao - 274 00:23:56,330 --> 00:24:01,060 1e1, znanstvena notacija. 275 00:24:01,060 --> 00:24:07,950 To priznaje 1e1 kao jedan * 10 ^ 1 ili štogod. 276 00:24:07,950 --> 00:24:11,510 Oni su ravnopravni cijeli brojevi. 277 00:24:11,510 --> 00:24:15,930 Ako mi === onda će to biti lažno. 278 00:24:15,930 --> 00:24:28,490 Ja zapravo nemam pojma, ako mi == ono o (10 i '10abc ');? U redu. Dakle, to je istina. 279 00:24:28,490 --> 00:24:35,940 Dakle, baš kao i kada ste učinili (10 + '10abc '), i da će to biti 20, 280 00:24:35,940 --> 00:24:38,800 ovdje (10 == '10abc '); je istina. 281 00:24:38,800 --> 00:24:45,350 Čak i gore stvari poput (lažno == NULL); je istina 282 00:24:45,350 --> 00:24:52,210 ili (lažna == 0); je istina, (false == []); 283 00:24:52,210 --> 00:25:00,970 Postoje čudni slučajevi - To je jedna od onih čudnih slučajeva. 284 00:25:00,970 --> 00:25:08,110 Primijetite da (lažno == []); je istina. 285 00:25:08,110 --> 00:25:11,950 ('0 '== False); je istina. 286 00:25:11,950 --> 00:25:16,090 ('0 '== []); Je lažna. 287 00:25:16,090 --> 00:25:19,090 Dakle == ni na koji način tranzitivnog. 288 00:25:19,090 --> 00:25:26,830 može biti jednaka b i može biti jednaka c, 289 00:25:26,830 --> 00:25:29,340 ali b ne može biti jednaka c. 290 00:25:29,340 --> 00:25:35,580 To je odvratno za mene, i trebali biste uvijek koristiti ===. 291 00:25:35,580 --> 00:25:38,590 [Student] Možemo učiniti! == Kao dobro? >> [Bowden] Da. 292 00:25:38,590 --> 00:25:44,600 Ekvivalent bi biti! = A! ==. 293 00:25:44,600 --> 00:25:48,230 To je zapravo odrastao u pset spec. 294 00:25:48,230 --> 00:25:52,000 gdje puno funkcija povratka - 295 00:25:52,000 --> 00:25:53,890 PHP priručnik je dobro o tome. 296 00:25:53,890 --> 00:25:59,140 To stavlja u velikom crvenom okviru "To će vratiti false ako postoji pogreška." 297 00:25:59,140 --> 00:26:03,940 No, povratak 0 je savršeno razumna stvar da se vrate. 298 00:26:03,940 --> 00:26:08,250 Razmislite o bilo funkciju za koju se očekuje da se vrati cijeli broj. 299 00:26:11,250 --> 00:26:17,880 Recimo da je ova funkcija trebala brojati broj redaka u datoteci ili nešto. 300 00:26:17,880 --> 00:26:23,490 U normalnim okolnostima, da prođe ova funkcija datoteku 301 00:26:23,490 --> 00:26:27,120 i to će vratiti cijeli broj koji predstavlja broj linija. 302 00:26:27,120 --> 00:26:30,820 Dakle, 0 je savršeno razuman broj, ako datoteka je samo prazna. 303 00:26:30,820 --> 00:26:36,810 No, što ako prođe to nevažeću datoteku i funkcija događa povratak false 304 00:26:36,810 --> 00:26:38,860 ako prođe to nevažeću datoteku? 305 00:26:38,860 --> 00:26:46,500 Ako ste upravo to učiniti == niste razlikovanje slučaj između nevažeće datoteke i praznu datoteku. 306 00:26:48,870 --> 00:26:51,350 Uvijek koristite ===. 307 00:26:55,690 --> 00:26:58,000 To je svima. 308 00:26:58,000 --> 00:27:01,660 >> U PHP-u, niz vrsta je drugačije od onoga što ste navikli u C. 309 00:27:01,660 --> 00:27:06,650 Doista, možda ste već primijetili ovo gore kada je vidio da je to tipa polja. 310 00:27:06,650 --> 00:27:15,640 Nosač sintaksa je novi kao PHP 5,4, što je najnovija verzija PHP. 311 00:27:15,640 --> 00:27:36,960 Prije toga uvijek morao napisati niz ("" -> 1, 'b' -> 2. 312 00:27:36,960 --> 00:27:41,160 To je bio konstruktor za niz. 313 00:27:41,160 --> 00:27:45,950 Sada PHP napokon je došao oko na lijepoj sintaksi samo uglatim zagradama, 314 00:27:45,950 --> 00:27:50,900 koji je samo tako puno bolje nego niz. 315 00:27:50,900 --> 00:27:54,480 No, s obzirom PHP 5,4 je najnovija verzija, 316 00:27:54,480 --> 00:27:59,090 možete naići na mjesta koja nemaju ni PHP 5,3. 317 00:27:59,090 --> 00:28:08,220 Tijekom ljeta smo naletjeli ovom pitanju gdje PHP 5,3 je ono što smo imali na aparatu, 318 00:28:08,220 --> 00:28:14,480 ali poslužitelj koji smo razmještene svu našu razreda knjigu i dostaviti i sve to na 319 00:28:14,480 --> 00:28:16,750 je PHP 5.4. 320 00:28:16,750 --> 00:28:23,060 Ne znajući to, razvili smo se u 5,3, gurnula 5,4, 321 00:28:23,060 --> 00:28:25,660 i sad odjednom nitko našeg koda radi 322 00:28:25,660 --> 00:28:28,680 jer tamo se dogodilo da su se promjene između 5,3 i 5,4 323 00:28:28,680 --> 00:28:31,030 koja nisu kompatibilna, 324 00:28:31,030 --> 00:28:35,770 i mi morati ići i popraviti sve naše stvari koje ne rade za PHP 5.4. 325 00:28:39,210 --> 00:28:42,320 Za ovoj klasi, jer uređaj ima PHP 5,4, 326 00:28:42,320 --> 00:28:45,490 to je savršeno u redu da koristite uglate zagrade. 327 00:28:47,240 --> 00:28:50,440 Ali, ako ste u potrazi gore stvari oko interneta, 328 00:28:50,440 --> 00:28:54,880 ako ste u potrazi neku vrstu polja stvari, najvjerojatnije ćete vidjeti 329 00:28:54,880 --> 00:29:02,020 čarolija iz polja konstruktora sintaksi budući da je od oko PHP rođen 330 00:29:02,020 --> 00:29:07,340 i uglata zagrada sintaksa je bio oko za posljednjih nekoliko mjeseci 331 00:29:07,340 --> 00:29:10,020 ili kad je došao oko 5,4. 332 00:29:10,020 --> 00:29:12,710 To je, kako se indeks. 333 00:29:12,710 --> 00:29:30,610 Baš kao u C kako bi indeks do uglatim zagradama poput $ niz [0], $ array [1], $ niz [2], 334 00:29:30,610 --> 00:29:36,320 ti indeks na isti način, ako vam se dogoditi da vam se indeksi se žice. 335 00:29:36,320 --> 00:29:40,440 Dakle $ array [''] i $ niz ["b"]. 336 00:29:40,440 --> 00:29:47,410 $ Array [b]. Zašto bi to moglo biti krivo? 337 00:29:52,490 --> 00:29:59,870 To će vjerojatno generirati upozorenje, ali još uvijek rade. PHP ima tendenciju da to učinite. 338 00:29:59,870 --> 00:30:04,890 Ona teži samo: "Ja ću vas upozoriti o tome, ali ja sam samo će zadržati ide 339 00:30:04,890 --> 00:30:07,550 "I učiniti sve što mogu." 340 00:30:07,550 --> 00:30:11,500 Vjerojatno će prevesti ovo na žici, 341 00:30:11,500 --> 00:30:15,000 ali je moguće da u nekom trenutku u prošlosti netko rekao 342 00:30:15,000 --> 00:30:20,180 definirati b biti 'Hello World'. 343 00:30:20,180 --> 00:30:28,740 Tako sada b mogao biti stalna i $ array [b] će zapravo biti događaj 'Hello World'. 344 00:30:28,740 --> 00:30:32,380 Mislim u ovom trenutku, ili barem naši PHP postavke, 345 00:30:32,380 --> 00:30:37,870 ako pokušate indeksa u niz i da ključ ne postoji, to neće uspjeti. 346 00:30:37,870 --> 00:30:40,150 Ja ne mislim da je to samo će vas upozoriti. 347 00:30:40,150 --> 00:30:44,560 Ili barem možete ga postaviti tako da se ne samo vas upozoriti, to je samo ravno gore ne uspije. 348 00:30:44,560 --> 00:30:49,290 >> Način da provjerite je li tamo zapravo je takav indeks je isset. 349 00:30:49,290 --> 00:30:54,690 Dakle isset ($ array ['Hello World']) će se vratiti false. 350 00:30:54,690 --> 00:30:59,160 isset ($ array ['b']) će se vratiti istina. 351 00:31:06,830 --> 00:31:09,880 Možete miješati ove syntaxes. 352 00:31:15,060 --> 00:31:22,440 Prilično sam siguran da ono što ovaj niz bi završiti kao je - Možemo ga isprobati. 353 00:31:43,290 --> 00:31:45,700 Oh, trebam PHPWord. 354 00:31:53,960 --> 00:32:00,260 To je miješanje sintaksu gdje ste odredili ono što je ključ 355 00:32:00,260 --> 00:32:03,330 i ne odredite što je ključ. 356 00:32:03,330 --> 00:32:05,520 Dakle 3 ovdje je vrijednost. 357 00:32:05,520 --> 00:32:08,080 Poslali nije izričito rekao ono što je ključno će biti. 358 00:32:08,080 --> 00:32:11,670 Što mislite njegova ključna će biti? 359 00:32:11,670 --> 00:32:21,410 [Student] 0. >> Ja sam guessing 0 samo zato što je prvi nismo naveli. 360 00:32:21,410 --> 00:32:23,500 Mi zapravo može učiniti nekoliko tih slučajeva. 361 00:32:23,500 --> 00:32:28,030 Dakle print_r je ispisati rekurzivna. To će ispisati cijeli niz. 362 00:32:28,030 --> 00:32:32,700 To će ispisati subarrays od niza ako ih je bilo. 363 00:32:32,700 --> 00:32:36,630 Dakle print_r ($ array); php.test.php. 364 00:32:36,630 --> 00:32:38,810 To ne izgleda kao da joj je dao 0. 365 00:32:38,810 --> 00:32:43,530 Tu je zapravo nešto imati na umu ovdje, ali mi ćemo se vratiti na njega u drugi. 366 00:32:43,530 --> 00:32:45,850 No, što ako sam se dogoditi da ovaj indeks 1? 367 00:32:45,850 --> 00:32:51,170 PHP ne pravi razliku između niza indeksa i cijelih indeksa, 368 00:32:51,170 --> 00:33:00,280 tako da u ovom trenutku samo sam definirao indeks 1, a ja mogu učiniti i $ niz [1] i $ array ['1 '] 369 00:33:00,280 --> 00:33:06,250 , a to će biti isti indeks i isti ključ. 370 00:33:06,250 --> 00:33:13,000 Dakle, sada što misliš 3 će biti? >> [Student] 2. >> [Bowden] Ja sam guessing dva. 371 00:33:16,000 --> 00:33:18,690 Da. To je dva. 372 00:33:18,690 --> 00:33:24,790 Što ako je to učinio je 10, ovo je 4? Što mislite Indeks 3 će biti? 373 00:33:27,360 --> 00:33:29,110 Razmišljam 11. 374 00:33:29,110 --> 00:33:33,060 Moje mišljenje o tome što čini PHP - i mislim da sam vidio ovo prije - 375 00:33:33,060 --> 00:33:39,760 je to samo prati ono što najviše numerički indeks se koristi do sada je. 376 00:33:39,760 --> 00:33:44,230 To nikada neće dodijeliti string indeks 3. To će uvijek biti numerički indeks. 377 00:33:44,230 --> 00:33:47,690 Tako da prati najviše jedan to je dodijeljen do sada, što će se dogoditi da bude 10, 378 00:33:47,690 --> 00:33:52,540 i to će dati 11-3. 379 00:33:52,540 --> 00:34:02,110 Ono što sam rekao prije, primijetiti način na koji se ispisuje ovaj niz. 380 00:34:02,110 --> 00:34:06,850 Ona ispisuje ključ 10, tipka 4, 11 Tipka, tipka d. 381 00:34:06,850 --> 00:34:09,790 Ili čak i učinimo - 382 00:34:15,760 --> 00:34:22,489 Pretpostavljam da nisam stavio 0, ali to je tiskanje 1, 2, 3, 4. 383 00:34:22,489 --> 00:34:29,330 Što ako sam prebaciti ovdje? Ili ajmo zapravo prebacivanje ove dvije. 384 00:34:29,330 --> 00:34:31,940 Sada ga ispisuje 2, 1, 3, 4. 385 00:34:31,940 --> 00:34:41,270 PHP je nizovi nisu baš kao i redovite hash tablice. 386 00:34:41,270 --> 00:34:45,570 To je savršeno razumno razmišljati o njima kao hash tablica 99% vremena. 387 00:34:45,570 --> 00:34:53,790 No, u svojim hash tablicama nema osjećaj reda u kojem su stvari postavljene. 388 00:34:53,790 --> 00:34:56,639 Dakle, čim ga umetnuti u vaše hash tablicu, 389 00:34:56,639 --> 00:35:00,590 pretpostaviti da nema povezani popis i da bi mogao suditi u roku povezane liste 390 00:35:00,590 --> 00:35:03,980 koja je umetnuta prvi. 391 00:35:03,980 --> 00:35:10,060 No, ovdje smo umetnuta dva prva i to zna kad je ispišete ovaj niz koji 2 dolazi prvi. 392 00:35:10,060 --> 00:35:13,090 To ne ga ispisati u samo bilo bi. 393 00:35:13,090 --> 00:35:17,550 Tehnički podaci struktura da se koristi je naredio karta, 394 00:35:17,550 --> 00:35:24,690 tako da mapira tipke vrijednosti i to pamti redoslijed kojim su ti ključevi su umetnuti. 395 00:35:24,690 --> 00:35:31,600 Uglavnom to je nekih komplikacija gdje je neugodno da zapravo - 396 00:35:31,600 --> 00:35:34,510 Recimo da imaju niz 0, 1, 2, 3, 4, 5 397 00:35:34,510 --> 00:35:37,700 i želite uzeti indeks 2. 398 00:35:37,700 --> 00:35:47,750 Jedan način to radiš, da vidimo kako to izgleda. 399 00:35:47,750 --> 00:35:50,410 0, 2, 1, 3, 4. 400 00:35:50,410 --> 00:35:54,880 Isključi događa postavljene vrijednosti i sačuvali obje varijable i niz indekse. 401 00:35:54,880 --> 00:35:58,630 Dakle resetiranje ($ array [2]); 402 00:35:58,630 --> 00:36:03,430 Sada što se to događa izgledati? 2 je samo nestala, tako da je savršeno u redu. 403 00:36:03,430 --> 00:36:11,670 Više neugodno je, ako želite stvari zapravo biti kao niz. 404 00:36:11,670 --> 00:36:14,910 Ja ću staviti slučajnih brojeva. 405 00:36:14,910 --> 00:36:20,400 Sada primijetite moje indekse. 406 00:36:20,400 --> 00:36:26,860 Želim samo da bude poput C niz u kojem se ide od 0 do dužine - 1 407 00:36:26,860 --> 00:36:30,810 i ja mogu ponoviti preko nje kao takve. 408 00:36:30,810 --> 00:36:38,520 No, čim sam postavljene vrijednosti i sačuvali drugi indeks, što je bio u indeksu 3 ne sada postati Indeks 2. 409 00:36:38,520 --> 00:36:44,790 Umjesto toga, samo uklanja taj indeks, a sada idete 0, 1, 3, 4. 410 00:36:44,790 --> 00:36:48,740 To je savršeno razumna. 411 00:36:48,740 --> 00:36:53,950 To je samo neugodno, a vi morate učiniti stvari kao što su polja uplitanje. Da. 412 00:36:53,950 --> 00:36:57,200 >> [Student] Što će se dogoditi ako ste imali za petlje 413 00:36:57,200 --> 00:36:59,630 i vi htjeli ići preko svih elemenata? 414 00:36:59,630 --> 00:37:02,290 Kada je pogodio dvije, to će dati sve? 415 00:37:02,290 --> 00:37:10,150 Ponavljanje preko polja. Postoje dva načina na koje možete to učiniti. 416 00:37:10,150 --> 00:37:12,770 Možete koristiti redovito za petlju. 417 00:37:12,770 --> 00:37:22,000 Ovo je još jedan složenost PHP. 418 00:37:22,000 --> 00:37:27,420 Većina jezika, ja bih rekao, imaju nekakvu duljine ili LEN ili nešto 419 00:37:27,420 --> 00:37:30,470 ukazuje na duljinu niza. 420 00:37:30,470 --> 00:37:32,820 U PHP to count. 421 00:37:32,820 --> 00:37:36,160 Dakle, count ($ array); $ i + +) 422 00:37:36,160 --> 00:37:42,950 Ajmo ispis ($ array [$ i]); 423 00:37:45,920 --> 00:37:48,820 Notice: Undefined offset: 2. 424 00:37:48,820 --> 00:37:51,610 To samo ide na propast. 425 00:37:51,610 --> 00:38:03,020 To je razlog da je, za najveći dio, nikada ne trebate ponoviti preko niz ovako. 426 00:38:03,020 --> 00:38:07,110 To bi moglo biti pretjerano, ali nikada ne trebate ponoviti preko niz ovako 427 00:38:07,110 --> 00:38:19,410 jer PHP pruža svojim foreach sintaksu gdje foreach ($ array kao $ predmet). 428 00:38:19,410 --> 00:38:31,830 Sada, ako smo ispisali ($ predmet); - hrapavi tome razgovarati u drugi - koji radi savršeno u redu. 429 00:38:31,830 --> 00:38:38,960 Način na koji foreach radi je prvi argument je niz koji ste Ponavljanje više. 430 00:38:38,960 --> 00:38:44,060 A drugi argument, predmet, kroz svaki prolaz petlje za 431 00:38:44,060 --> 00:38:52,690 to se događa da se na sljedeću stvar u polju. Pa sjetite se niz ima nalog. 432 00:38:52,690 --> 00:38:55,690 Prvi put kroz za petlju, predmet će biti 123 433 00:38:55,690 --> 00:38:59,540 onda će biti 12 onda će biti 13 onda će biti 23 onda će biti 213. 434 00:38:59,540 --> 00:39:04,670 Stvari se jako čudno kada učiniti nešto poput foreach. 435 00:39:04,670 --> 00:39:07,480 Idemo vidjeti što se događa, jer nikada ne bi trebao to učiniti. 436 00:39:07,480 --> 00:39:13,320 Što ako smo resetiranje ($ array [1]); 437 00:39:20,410 --> 00:39:26,030 To je vjerojatno očekivao. 438 00:39:26,030 --> 00:39:30,950 Vi ste Ponavljanje nad ovom polju, a svaki put kad si unsetting prvi indeks. 439 00:39:30,950 --> 00:39:39,720 Dakle, za indeks 0, prva stvar, predmet vodi na vrijednosti 0, tako da će biti 123. 440 00:39:39,720 --> 00:39:44,630 No, unutar for petlje smo resetiranje indeks 1, tako da znači 12 je nestalo. 441 00:39:44,630 --> 00:39:57,480 Dakle ispis. PHP_EOL. 442 00:39:57,480 --> 00:40:03,580 PHP_EOL je samo novi red, ali to je tehnički više prenosiv 443 00:40:03,580 --> 00:40:08,890 od nove linije i dr. u Windowsima je drugačiji od retkom na Mac i Unix. 444 00:40:08,890 --> 00:40:18,040 Na Windows newline je \ r \ n, a svugdje drugdje je sklon samo biti \ n. 445 00:40:18,040 --> 00:40:25,150 PHP_EOL konfiguriran tako da koristi ono što newline vašeg sustava. 446 00:40:25,150 --> 00:40:29,310 Dakle ispisati da. Nemojmo print_r ($ array) na kraju. 447 00:40:32,830 --> 00:40:37,390 Nisam imao pojma da bi to biti ponašanje. 448 00:40:41,740 --> 00:40:48,960 Stavka još uvijek traje na vrijednosti 12, iako smo postavljene vrijednosti i sačuvali 12 prije nego što smo ikada dobio na njega iz polja. 449 00:40:52,770 --> 00:40:58,840 Nemojte uzeti moj riječ o tome, ali to izgleda kao foreach stvara kopiju niz 450 00:40:58,840 --> 00:41:02,160 a zatim predmet vodi na svim vrijednostima te kopije. 451 00:41:02,160 --> 00:41:07,760 Dakle, čak i ako ste izmijenili niz unutar for petlji 452 00:41:07,760 --> 00:41:17,240 to nije briga. Stavka će se na izvorne vrijednosti. 453 00:41:17,240 --> 00:41:19,240 Pokušajmo ga unsetting. 454 00:41:19,240 --> 00:41:24,460 Što ako je to $ array [1] = "Hello"; 455 00:41:24,460 --> 00:41:31,770 Iako smo stavili "Hello" u nizu, predmet nikada ne uzima na toj vrijednosti. 456 00:41:31,770 --> 00:41:37,430 Tu je još jedan Sintaksa za foreach petlje 457 00:41:37,430 --> 00:41:45,900 gdje ste stavili dvije varijable odvojene strelice. 458 00:41:45,900 --> 00:41:49,680 Ovaj prvi varijabla će biti ključ te vrijednosti, 459 00:41:49,680 --> 00:41:53,050 i to drugi varijabla će biti točno isti predmet. 460 00:41:53,050 --> 00:42:01,610 Ovo je nezanimljiv ovdje, ali ako se vratimo na naš izvorni slučaju 'A' -> 1, 461 00:42:01,610 --> 00:42:06,090 "B" -> 1, 462 00:42:06,090 --> 00:42:14,470 ovdje ako mi samo ponoviti za svaku polja kao predmet, predmet će biti jedan svaki put. 463 00:42:14,470 --> 00:42:18,170 Ali ako i mi želimo da znate ključ povezan s tom stavkom 464 00:42:18,170 --> 00:42:25,230 onda mi kao $ ključ -> $ predmet. 465 00:42:25,230 --> 00:42:31,980 Dakle, sada možemo učiniti za ispis ($ tipku. ':'. 466 00:42:31,980 --> 00:42:39,380 Sada je Ponavljanje iznova i ispis svaku tipku i njegove povezane vrijednost. 467 00:42:39,380 --> 00:42:47,030 >> Dodatna stvar koju možete učiniti u foreach petlji je možda vidjeti ovu sintaksu. 468 00:42:47,030 --> 00:42:54,770 Znakove za prije imena varijabli imaju tendenciju da se koliko PHP radi reference. 469 00:42:54,770 --> 00:43:00,460 Gdje reference su vrlo slične naputke, 470 00:43:00,460 --> 00:43:04,820 nemate naputke, tako da nikada ne bave izravno memorije. 471 00:43:04,820 --> 00:43:12,620 Ali vi nemate reference gdje jedna varijabla odnosi na istu stvar kao i druge varijable. 472 00:43:12,620 --> 00:43:21,450 Unutar ovog učinimo $ predmet. Vratimo se na jednoj, 10. 473 00:43:21,450 --> 00:43:28,800 Učinimo $ predmet + +; To još uvijek postoji u PHP. Još uvijek možete napraviti + +. 474 00:43:28,800 --> 00:43:38,260 php.test.php. Moram ga ispisati. print_r ($ array); 475 00:43:38,260 --> 00:43:42,730 Mi ispisati 2, 11. 476 00:43:42,730 --> 00:43:49,560 Ako sam upravo učinio foreach ($ niz kao $ predmet), a zatim artikl će biti vrijednost 1 477 00:43:49,560 --> 00:43:54,190 prvi put kroz petlju. To će povećavati jedan do dva i onda smo gotovi. 478 00:43:54,190 --> 00:43:57,260 Pa onda će proći kroz drugi prolaz petlje i da predmet je 10. 479 00:43:57,260 --> 00:44:01,570 To povećava stavku 11, a zatim da je samo baciti. 480 00:44:01,570 --> 00:44:06,670 Onda smo print_r ($ array), a neka se vidi da je to samo jedan, 10. 481 00:44:06,670 --> 00:44:09,070 Dakle, prirast smo je izgubili. 482 00:44:09,070 --> 00:44:13,410 Ali foreach ($ array kao & $ predmet) 483 00:44:13,410 --> 00:44:21,910 sada je ova stavka isti predmet kao ovo ovdje. To je ista stvar. 484 00:44:21,910 --> 00:44:26,820 Dakle $ predmet + + se mijenja niz 0. 485 00:44:29,330 --> 00:44:41,850 Uglavnom, možete učiniti $ k -> $ predmet, a vi možete učiniti $ polje [$ k] + +; 486 00:44:41,850 --> 00:44:48,650 >> Dakle, drugi put da radiš, slobodni smo mijenjati stavke, 487 00:44:48,650 --> 00:44:54,070 ali to neće promijeniti naš izvorni niz. 488 00:44:54,070 --> 00:44:59,720 Ali ako ćemo koristiti k, što je naš ključni, onda možemo samo indeks u naš niz koristi taj ključ 489 00:44:59,720 --> 00:45:01,530 i povećajte to. 490 00:45:01,530 --> 00:45:05,410 To više izravno mijenja naš izvorni niz. 491 00:45:05,410 --> 00:45:10,690 Možete čak napraviti da ako iz nekog razloga želio mogućnost izmjene - 492 00:45:10,690 --> 00:45:13,510 Zapravo, ovo je savršeno razumna. 493 00:45:13,510 --> 00:45:16,020 Vi ne želite da moram napisati $ polje [$ k] + +, 494 00:45:16,020 --> 00:45:27,890 samo htjela pisati $ predmet + +, ali još uvijek je htio reći ako ($ k === '') 495 00:45:27,890 --> 00:45:30,620 zatim povećajte stavku, a zatim ispisati naš niz. 496 00:45:30,620 --> 00:45:36,290 Dakle, sada što očekujemo print_r učiniti? Koje vrijednosti bi trebao biti tiskan? 497 00:45:36,290 --> 00:45:43,770 [Student] 2 i 10. >> [Bowden] Samo ako ključ je '' mi zapravo ispisati da. 498 00:45:51,940 --> 00:45:55,670 >> Vi vjerojatno vrlo rijetko, ako ikada, trebat će definirati funkcije u PHP-u, 499 00:45:55,670 --> 00:46:03,370 ali možda ćete vidjeti nešto slično gdje se definirati funkciju kao funkcija štogod. 500 00:46:03,370 --> 00:46:09,900 Obično bi se reći ($ foo, bar $), a zatim ga definirati kako bi se bilo što. 501 00:46:09,900 --> 00:46:17,580 Ali, ako sam to učiniti, onda to znači da bez obzira na pozive god, 502 00:46:17,580 --> 00:46:25,110 god poziva baz, tako da je prvi argument prošao Baz može biti promijenjen. 503 00:46:25,110 --> 00:46:38,100 Učinimo $ foo + +; 504 00:46:38,100 --> 00:46:48,020 i unutar ovog učinimo Baz ($ predmet); 505 00:46:48,020 --> 00:46:52,250 Sada smo pozivajući funkciju. 506 00:46:52,250 --> 00:46:56,780 Argument je snimljen u odnosu, što znači da ako smo ga mijenjati 507 00:46:56,780 --> 00:47:00,390 mi smo izmjenom stvar koja je prošla u. 508 00:47:00,390 --> 00:47:04,420 I tiskanje to očekujemo - osim ako sam zabrljao sintaksu - imamo 2, 11, 509 00:47:04,420 --> 00:47:06,300 tako da je zapravo porastao. 510 00:47:06,300 --> 00:47:08,790 Obavijest trebamo reference u dva mjesta. 511 00:47:08,790 --> 00:47:13,050 Što ako sam to učinio? Što to znači? 512 00:47:13,050 --> 00:47:15,810 [Student] To će se promijeniti. >> Da. 513 00:47:15,810 --> 00:47:18,290 Stavka je samo kopija vrijednosti u nizu. 514 00:47:18,290 --> 00:47:26,670 Dakle, predmet će se promijeniti na dva, ali array [''] i dalje će biti jedan. 515 00:47:26,670 --> 00:47:32,560 Ili što ako sam to učiniti? 516 00:47:32,560 --> 00:47:39,260 Sada predmet je poslan kao kopiju Baz. 517 00:47:39,260 --> 00:47:46,330 Dakle kopija argument će porastao za 2, 518 00:47:46,330 --> 00:47:49,240 ali predmet sama nikada nije porastao za dva. 519 00:47:49,240 --> 00:47:52,880 I točka je ista stvar kao polje nosač god, 520 00:47:52,880 --> 00:47:55,380 tako da lepezu nikada nije porastao. 521 00:47:55,380 --> 00:47:57,960 Dakle, oba ta mjesta treba. 522 00:47:57,960 --> 00:48:03,830 >> PHP je obično prilično pametan. 523 00:48:03,830 --> 00:48:06,570 Možda mislite da želim proći pozivanjem - 524 00:48:06,570 --> 00:48:09,560 To je zapravo pitanje na jednom od psets. 525 00:48:09,560 --> 00:48:14,480 To je bio questions.txt stvar gdje je rekao, 526 00:48:14,480 --> 00:48:19,280 Zašto bi želite da prođe ovaj struct pozivom? 527 00:48:19,280 --> 00:48:21,250 Što je odgovor na to? 528 00:48:21,250 --> 00:48:25,100 [Student] Dakle, ne morate kopirati nešto veliko. >> Da. 529 00:48:25,100 --> 00:48:32,920 Struct može biti proizvoljno velik, a kada prođete struct u kao argument 530 00:48:32,920 --> 00:48:36,800 to treba kopirati taj cijeli struct da ga prođe na funkciji, 531 00:48:36,800 --> 00:48:40,410 a ako samo proći struct upućivanjem 532 00:48:40,410 --> 00:48:46,530 onda samo treba kopirati 4-byte adresu kao argument funkcije. 533 00:48:48,520 --> 00:48:52,320 PHP je malo pametniji od toga. 534 00:48:52,320 --> 00:49:00,650 Ako imam neku funkciju, a ja proći do njega niz 1000 stvari, 535 00:49:00,650 --> 00:49:03,990 to znači da će morati kopirati sve 1000 tih stvari 536 00:49:03,990 --> 00:49:10,450 to proći u funkciji? To ne mora učiniti da se odmah. 537 00:49:10,450 --> 00:49:15,940 Ako unutar ove funkcije nikada zapravo mijenja foo, 538 00:49:15,940 --> 00:49:22,660 pa ako ($ foo === 'halo') return true.; 539 00:49:22,660 --> 00:49:26,460 Obavijest mi nikada zapravo modificirani argument unutar ove funkcije, 540 00:49:26,460 --> 00:49:30,010 što znači da je ono što je prošlo kao foo nikada treba kopirati 541 00:49:30,010 --> 00:49:32,100 jer to nije to mijenjanje. 542 00:49:32,100 --> 00:49:39,240 Dakle, način na koji PHP djela je argumenti uvijek su prošli upućivanjem 543 00:49:39,240 --> 00:49:42,170 dok ste zapravo pokušati ga mijenjati. 544 00:49:42,170 --> 00:49:51,160 Sada, ako kažem $ foo + +, to će sada napraviti kopiju izvornog foo i mijenjati primjerak. 545 00:49:51,160 --> 00:49:53,090 To štedi neko vrijeme. 546 00:49:53,090 --> 00:49:58,210 Ako nikad ne dira ovaj veliki niz, što zapravo nikad ga mijenjati, 547 00:49:58,210 --> 00:50:02,360 to ne trebate napraviti kopiju, 548 00:50:02,360 --> 00:50:06,640 a ako mi samo staviti ovaj ampersand to znači da ni ne kopirati 549 00:50:06,640 --> 00:50:08,640 čak i ako ne ga mijenjati. 550 00:50:08,640 --> 00:50:10,680 Takvo ponašanje se zove copy-na-pisati. 551 00:50:10,680 --> 00:50:17,380 Vi ćete ga vidjeti u drugim mjestima, pogotovo ako se uzme tečaj operativnog sustava. 552 00:50:17,380 --> 00:50:23,880 Copy-na-pisati je prilično uobičajena uzorak gdje ne trebate napraviti kopiju nešto 553 00:50:23,880 --> 00:50:26,650 osim ako to zapravo mijenja. Da. 554 00:50:26,650 --> 00:50:29,520 [Student] Što ako ste imali prirasta unutar testa, 555 00:50:29,520 --> 00:50:33,700 tako da je samo jedan element koji od 1000 bi trebao biti promijenjen? 556 00:50:33,700 --> 00:50:38,770 Nisam siguran. 557 00:50:38,770 --> 00:50:51,250 Mislim da će to kopirati cijelu stvar, ali je moguće da je dovoljno pametan da - 558 00:50:51,250 --> 00:51:00,020 Zapravo, o čemu razmišljam je zamisliti imali smo niz koji izgleda ovako: $ polje2 = [ 559 00:51:00,020 --> 00:51:11,000 Zatim indeks '' je niz [1 2 3 4], a indeks 'B' je niz štogod. 560 00:51:11,000 --> 00:51:15,380 Trebam zareze između svih onih. Zamislite tu su zarezi. 561 00:51:15,380 --> 00:51:21,210 Zatim 'c' je vrijednost 3. 562 00:51:24,210 --> 00:51:26,290 Ok. 563 00:51:26,290 --> 00:51:33,440 Sada recimo radimo $ baz ($ polje2); 564 00:51:33,440 --> 00:51:36,540 gdje baz ne uzeti ovaj pozivom. 565 00:51:43,510 --> 00:51:47,370 Dakle $ foo ['c'] + +; 566 00:51:47,370 --> 00:51:52,340 To je takav primjer gdje mi prolaze polje2 kao argument 567 00:51:52,340 --> 00:51:57,010 , a zatim je izmjenom specifičan indeks niza ga povećavanjem. 568 00:51:57,010 --> 00:52:01,090 Ja iskreno nemam pojma što se događa PHP učiniti. 569 00:52:01,090 --> 00:52:07,200 To se lako može napraviti kopiju cijelog stvar, ali ako je pametna, 570 00:52:07,200 --> 00:52:15,030 to će napraviti kopiju tih tipki gdje će to imati svoju prepoznatljivu vrijednost 571 00:52:15,030 --> 00:52:20,620 ali to još uvijek može upućivati ​​na isti niz 1,2,3,4 572 00:52:20,620 --> 00:52:22,320 i to još uvijek može upućivati ​​na isti niz. 573 00:52:22,320 --> 00:52:24,170 Ja ću ga ipad. 574 00:52:28,900 --> 00:52:45,950 Prolazimo u ovom polju gdje je to momak bodova za 3, ovaj momak bodova [1,2,3,4], 575 00:52:45,950 --> 00:52:51,350 Ovaj tip bodova na [34], ... 576 00:52:51,350 --> 00:52:58,590 Sada kada smo to prolazi u Baz, mi smo izmjenu toga. 577 00:52:58,590 --> 00:53:03,550 Ako PHP je pametna, to samo može učiniti - 578 00:53:11,850 --> 00:53:18,230 Mi smo još uvijek morali kopirati neki memorije, ali ako su tamo bili ti veliki ugniježđena subarrays 579 00:53:18,230 --> 00:53:21,560 mi ne treba kopirati one. 580 00:53:21,560 --> 00:53:27,530 Ne znam je li to ono što čini, ali mogu zamisliti da taj događaj. 581 00:53:29,050 --> 00:53:36,690 Ovo je također prilično velika prednost C preko PHP. 582 00:53:36,690 --> 00:53:40,320 >> PHP čini život toliko lakše za puno stvari, 583 00:53:40,320 --> 00:53:45,060 ali nekako su apsolutno nema pojma koliko dobro će obavljati 584 00:53:45,060 --> 00:53:52,530 jer ja nemam pojma ispod haube kad je izradu ove kopije stvari, 585 00:53:52,530 --> 00:53:55,170 oh, je da će biti stalna vrijeme kopija, 586 00:53:55,170 --> 00:54:01,140 Je li to samo će se promijeniti jedan pokazivač, će to biti smiješno teško linearno preslika? 587 00:54:01,140 --> 00:54:03,000 Što ako se ne može pronaći prostor? 588 00:54:03,000 --> 00:54:06,760 Da li to onda treba pokrenuti odvoz smeća da biste dobili neki više prostora? 589 00:54:06,760 --> 00:54:11,210 I odvoz smeća može uzeti proizvoljno dugo. 590 00:54:11,210 --> 00:54:13,600 U C ne morate brinuti o tim stvarima. 591 00:54:13,600 --> 00:54:19,780 Svaki redak li vam pisati može prilično mnogo razloga o tome kako će to izvesti. 592 00:54:26,800 --> 00:54:29,150 >> Hajdemo se osvrnuti na to. 593 00:54:35,400 --> 00:54:37,520 Kako lijepo je to da ne moraju nositi s hash funkcije, 594 00:54:37,520 --> 00:54:39,010 povezane liste, ili bilo što slično? 595 00:54:39,010 --> 00:54:41,980 Budući da rade s hash tablica je tako lako sada, evo zabavna puzzle raditi. 596 00:54:41,980 --> 00:54:45,920 Otvorite datoteku pod nazivom unique.php iu njoj napisati PHP programa 597 00:54:45,920 --> 00:54:48,330 (Također poznat kao "skripte"). 598 00:54:48,330 --> 00:54:55,700 Mi imaju tendenciju da ih zovu skripte ako oni kratke stvari koje se pokreću na naredbenog retka. 599 00:54:55,700 --> 00:55:02,950 Uglavnom, svaki jezik koji ne kompajlirati, ali ti si idući u trčanje izvršnu 600 00:55:02,950 --> 00:55:05,920 na naredbenog retka, možete nazvati taj scenarij izvršnu. 601 00:55:05,920 --> 00:55:08,510 Mogao sam jednako dobro napisati C program koji radi to, 602 00:55:08,510 --> 00:55:12,300 ali ja ne zovu skripta jer sam prvi put ga sastaviti, a zatim pokrenuti binarni. 603 00:55:12,300 --> 00:55:15,480 Ali ovo PHP Program ćemo pozvati skriptu. 604 00:55:15,480 --> 00:55:23,830 Ili, ako ćemo ga je napisao u Python ili Perl ili Node.js ili bilo tih stvari, 605 00:55:23,830 --> 00:55:26,500 bismo ih nazvati sve skripte jer ste ih izvoditi na naredbenog retka 606 00:55:26,500 --> 00:55:30,040 ali mi ih ne sastaviti. 607 00:55:30,860 --> 00:55:33,400 Mogli smo to učiniti vrlo brzo. 608 00:55:36,960 --> 00:55:41,480 Nećemo koristiti argv. Ajmo puhati kroz to. 609 00:55:41,480 --> 00:55:45,730 Nazovite to jedinstven, napisati program. 610 00:55:45,730 --> 00:55:49,400 Možete pretpostaviti da ulaz će sadržavati jednu riječ po retku. 611 00:55:49,400 --> 00:55:52,020 Zapravo, argv će biti prilično trivijalan za korištenje. 612 00:56:03,730 --> 00:56:06,720 unique.php. 613 00:56:08,550 --> 00:56:13,750 Prva stvar prvo, želimo provjeriti da li smo prošli jedan naredbenog retka argumente. 614 00:56:13,750 --> 00:56:20,900 Baš kao što se i očekuje argc i argv u C, još uvijek imamo one u PHP. 615 00:56:20,900 --> 00:56:33,900 Dakle, ako ($ argc! == 2) onda neću baviti ispisivanjem poruke ili ništa. 616 00:56:33,900 --> 00:56:37,340 Ja ću samo izlaz, pogreške kod jednog. 617 00:56:37,340 --> 00:56:41,340 Također sam se mogao vratiti jedan. 618 00:56:41,340 --> 00:56:53,180 Rijetko u PHP ste u ovom stanju u kojem smo na - 619 00:56:53,180 --> 00:56:57,820 Obično ste u funkciji zove po funkciji zove po funkciji zove po funkciji. 620 00:56:57,820 --> 00:57:02,070 A ako nešto pođe po zlu, a vi samo želite izaći sve cijelosti, 621 00:57:02,070 --> 00:57:05,680 izlaz samo završava program. 622 00:57:05,680 --> 00:57:08,160 Ovo također postoji u C. 623 00:57:08,160 --> 00:57:10,700 Ako ste u funkciji u funkciji u funkciji u funkciji 624 00:57:10,700 --> 00:57:17,540 i želite ubijati program, možete nazvati izlaz i to samo će izaći. 625 00:57:17,540 --> 00:57:23,120 Ali u PHP je još rijetkost da smo na ovoj najvišoj razini. 626 00:57:23,120 --> 00:57:26,090 Obično smo u nekakvoj funkciji, tako mi zovemo izlaz 627 00:57:26,090 --> 00:57:29,650 tako da ne moramo se vratiti do 1 stvar koja tada shvaća da je pogreška 628 00:57:29,650 --> 00:57:32,270 tako da se vraća gore, ako to prepoznaje došlo je do pogreške. 629 00:57:32,270 --> 00:57:35,270 Mi ne želimo nositi s tim, tako da izlaz (1); 630 00:57:35,270 --> 00:57:38,240 povratak (1), u ovom slučaju bi bilo jednako. 631 00:57:38,240 --> 00:57:44,000 >> Onda ono što želimo otvoriti želimo fopen. 632 00:57:44,000 --> 00:57:46,760 Argumenti će izgledati prilično slično. 633 00:57:46,760 --> 00:57:51,600 Želimo fopen ($ argv [1], a mi želimo da ga otvoriti za čitanje. 634 00:57:51,600 --> 00:57:55,720 To vraća resurs koji idemo na poziv f. 635 00:57:55,720 --> 00:58:02,180 Ovo izgleda prilično slično načinu na koji to radi, osim C nemamo reći FILE *. 636 00:58:02,180 --> 00:58:06,170 Umjesto toga, mi samo reći $ f. Ok. 637 00:58:06,170 --> 00:58:17,190 Zapravo, mislim da je ovo čak i daje nam savjet kao u PHP funkcije zove datoteka. PHP File. 638 00:58:17,190 --> 00:58:23,990 Što se to događa učiniti je pročitati cijelu datoteku u niz. 639 00:58:23,990 --> 00:58:29,770 Vi ne morate čak ni da ga fopen. To će učiniti za vas. 640 00:58:37,450 --> 00:58:43,700 Dakle $ linije = datoteka ($ argv [1]); 641 00:58:43,700 --> 00:58:49,680 Sada se sve linije datoteke su u linijama. Sada želimo sortirati linije. 642 00:58:49,680 --> 00:58:52,180 Kako možemo sortirati linije? 643 00:58:52,180 --> 00:58:54,920 Mi sortirati linije. 644 00:58:54,920 --> 00:58:58,080 I sada možemo ispisati ih ili bilo što drugo. 645 00:58:58,080 --> 00:59:05,580 Vjerojatno najlakši način je foreach ($ $ linije kao linija) echo $ linija; 646 00:59:05,580 --> 00:59:10,960 [Student] Ne bi mi čak i prijeći linije upućivanjem nešto u vrste? 647 00:59:10,960 --> 00:59:28,850 Ovo je mjesto gdje vrsta bi se definirati kao funkcije vrste (& $ array). 648 00:59:28,850 --> 00:59:32,650 Kada pozovete funkciju ga ne prođe referencu. 649 00:59:32,650 --> 00:59:36,900 To je funkcija koja ga definira kao uzimanje kao referencu. 650 00:59:36,900 --> 00:59:40,900 Ovo je zapravo točno ono što je pošlo po zlu 651 00:59:40,900 --> 00:59:46,220 kad smo stavili sve do naših poslužitelja kada smo išli 5,3-5,4. 652 00:59:46,220 --> 00:59:53,800 Do 5,4, to je savršeno razumno. 653 00:59:53,800 --> 00:59:58,740 Funkcija ne očekujem da to uzeti kao referencu, ali možete ga proći kao referencu 654 00:59:58,740 --> 01:00:02,860 pa ako funkcija ne dogodi da ga mijenjati, to je još uvijek mijenjati. 655 01:00:02,860 --> 01:00:05,850 Kao što je 5,4, što ne bi smio to učiniti. 656 01:00:05,850 --> 01:00:11,740 Tako sada jedini način da prođe upućivanjem je li funkcija izričito to radi. 657 01:00:11,740 --> 01:00:19,840 Ako ne želite da ga mijenjati, onda morate učiniti $ kopiju = $ linije i proći kopirati. 658 01:00:19,840 --> 01:00:24,820 Tako sada linije će biti sačuvana i primjerak će biti promijenjen. 659 01:00:27,670 --> 01:00:31,460 php.unique.php. Možda sam zabrljati nešto gore. 660 01:00:31,460 --> 01:00:33,190 Neočekivani 'vrsta'. 661 01:00:38,320 --> 01:00:43,850 Tu će biti nešto što to čini za nas. 662 01:00:43,850 --> 01:00:45,820 To je čak i ne postoji. 663 01:00:45,820 --> 01:00:52,140 Obavijest kada ste pročitali priručnik koji prvi argument je očekuje da će biti niz 664 01:00:52,140 --> 01:00:56,490 i to je uzeti referencu. 665 01:00:58,160 --> 01:01:03,540 Zašto je to žali za mnom? Budući da imam tu funkciju kakvu još da se ovdje ne želim. 666 01:01:03,540 --> 01:01:09,210 Ok, php.unique.php. Nisam ga proći argument jer nemam datoteku. 667 01:01:09,210 --> 01:01:13,560 To je php.unique.php na test.php. 668 01:01:13,560 --> 01:01:19,080 Ovdje je test.php sve isprintati u lijepoj sortiraju bi. 669 01:01:19,080 --> 01:01:24,600 Primijetit ćete da sortirani kako je vrsta čudno za koda datoteke 670 01:01:24,600 --> 01:01:27,460 jer su svi naši praznih redaka će doći prvi 671 01:01:27,460 --> 01:01:30,190 onda će doći svi naši jedne razine udubljenja 672 01:01:30,190 --> 01:01:33,360 onda dolaze svi naši bez udubljenja. 673 01:01:33,360 --> 01:01:38,620 Da. >> [Student] Dakle, za izvornog koda nije donesen pozivom? 674 01:01:38,620 --> 01:01:42,240 Je li to općenito prošao po vrijednosti? 675 01:01:42,240 --> 01:01:50,240 [Bowden] Kada zovete funkciju, to nikada ne određuje hoće li on donesen od strane referencu. 676 01:01:50,240 --> 01:01:53,960 To je funkcija definicija koja određuje hoće li on donesen od strane referencu. 677 01:01:53,960 --> 01:01:59,450 I gleda na funkciji definiciji vrste ili samo gleda na to, 678 01:01:59,450 --> 01:02:02,820 to traje argument pozivom. 679 01:02:02,820 --> 01:02:07,160 Dakle, bez obzira da li želite da ga uzeti za referencu, čini ga uzeti za referencu. 680 01:02:07,160 --> 01:02:10,200 Ona mijenja polje u mjestu. 681 01:02:10,200 --> 01:02:17,400 Ovo je samo nije dopušteno. Ne smijemo to učiniti. >> [Student] Oh, u redu. 682 01:02:17,400 --> 01:02:22,410 [Bowden] To je sorta koja će potrajati linije pozivom i mijenjati. 683 01:02:22,410 --> 01:02:26,850 I opet, ako ne želite to učiniti da bi mogao napraviti kopiju vrste. 684 01:02:26,850 --> 01:02:35,850 Čak iu tom slučaju, kopija nije zapravo kopija linije. 685 01:02:35,850 --> 01:02:40,620 To samo ukazuje na istu stvar dok je prvi dobiva izmjena, 686 01:02:40,620 --> 01:02:44,430 gdje je prvi će se mijenjati u funkciji sortiranja, 687 01:02:44,430 --> 01:02:50,940 gdje, jer to je copy-na-pisati, sada primjerak primjerak će biti izrađen. 688 01:02:57,500 --> 01:03:04,250 Također možete to učiniti. To je drugo mjesto možete vidjeti ampersand. 689 01:03:04,250 --> 01:03:07,190 Možete ga vidjeti u foreach petlji, što se vidi u funkciji deklaracijama, 690 01:03:07,190 --> 01:03:10,040 i vi to vidite kad samo dodjeljivanje varijabli. 691 01:03:10,040 --> 01:03:12,350 Sada smo postigli ništa na taj način 692 01:03:12,350 --> 01:03:15,600 jer kopija te linije su doslovno ista stvar. 693 01:03:15,600 --> 01:03:19,940 Možete koristiti linije i kopirati naizmjenično. 694 01:03:19,940 --> 01:03:25,430 Možete napraviti Isključi ($ kopiju), a da ne Isključi linije, 695 01:03:25,430 --> 01:03:29,120 samo izgubiti svoj osvrt na istu stvar. 696 01:03:29,120 --> 01:03:33,440 Dakle, od ove točke, sada linije je jedini način možete pristupiti linije. 697 01:03:36,450 --> 01:03:38,770 >> Pitanja? 698 01:03:41,000 --> 01:03:42,460 Da. 699 01:03:42,460 --> 01:03:45,880 [Student] Potpuno off topic, ali ne morate zatvoriti PHP s - >> Vi ne razumije. 700 01:03:45,880 --> 01:03:47,730 Ok. 701 01:03:47,730 --> 01:03:53,790 [Bowden] Ja bih ići tako daleko da kažu da je to loša praksa da ih zatvoriti. 702 01:03:53,790 --> 01:03:57,580 To je vjerojatno pretjerivanje, posebno u pismu, 703 01:03:57,580 --> 01:04:03,740 ali vidjet ćemo što će se dogoditi ako sam to učiniti. 704 01:04:03,740 --> 01:04:08,890 To nije učinio ništa. Što ako sam htio - [uzdiše] 705 01:04:13,870 --> 01:04:16,960 Moram proći argument. 706 01:04:19,000 --> 01:04:22,050 Pucaj. Zvao sam ga krivo. 707 01:04:24,340 --> 01:04:28,310 Dakle php.unique.php s argumentom. 708 01:04:28,310 --> 01:04:30,980 Sada ne morate čak ni to. 709 01:04:34,520 --> 01:04:37,740 Ja ću proći to valjani argument. 710 01:04:37,740 --> 01:04:42,050 Ovaj tiskani bez obzira na to je tisak. 711 01:04:45,260 --> 01:04:50,080 Ja sam ispis kopiju i kopirajte ne postoji. Dakle linije. 712 01:04:53,650 --> 01:04:58,270 To ispisati sve, a zatim primijetiti sve ovo smeće ovdje dolje, 713 01:04:58,270 --> 01:05:06,690 jer u PHP ništa što je izvan PHP oznake 714 01:05:06,690 --> 01:05:09,520 samo ide za ispis doslovno. 715 01:05:09,520 --> 01:05:18,050 To je razlog zašto HTML, to je tako lijepo da ja mogu učiniti div bla, bla, bla klasu ili što god, 716 01:05:18,050 --> 01:05:25,140 bla, bla, bla, a zatim učinite nešto PHP kôd, a zatim učinite kraj div. 717 01:05:25,140 --> 01:05:36,460 I sada tiskanje to ću dobiti lijep div do vrha, sve što PHP tiskani, div na dnu. 718 01:05:36,460 --> 01:05:43,510 Razorni kada se nešto ovako događa, što je prilično čest, 719 01:05:43,510 --> 01:05:47,930 samo zalutala newline na dnu datoteke. 720 01:05:47,930 --> 01:05:50,940 Vi ne bi pomislio da će to biti da je veliki posao 721 01:05:50,940 --> 01:05:58,660 dok ne uzeti u obzir činjenicu da je s preglednicima - 722 01:05:58,660 --> 01:06:03,880 >> Kako preusmjerava rad ili u osnovi bilo zaglavlja rad, 723 01:06:03,880 --> 01:06:07,980 kad bi svoju vezu na web stranicu i šalje natrag sve ove zaglavlja i stvari 724 01:06:07,980 --> 01:06:12,020 kao odgovor 200 ili odgovor preusmjeravanja ili bilo što drugo, 725 01:06:12,020 --> 01:06:18,230 Zaglavlja vrijede samo dok prvi bajt podataka je poslan. 726 01:06:18,230 --> 01:06:23,140 Možete preusmjeravati tisuće puta, ali čim prvi bajt podataka je poslan 727 01:06:23,140 --> 01:06:26,120 nisi trebao preusmjeriti opet. 728 01:06:26,120 --> 01:06:31,860 >> Ako imate lutalica newline na dnu datoteke 729 01:06:31,860 --> 01:06:37,260 i recimo da koristite ovu funkciju, a zatim želite - 730 01:06:41,580 --> 01:06:52,870 Ajmo reći da je to još jedna datoteka koja je index.php i require_once nešto - 731 01:06:52,870 --> 01:06:56,920 Ja ne mogu zamisliti dobar primjer toga. 732 01:06:56,920 --> 01:07:04,740 Problem se događa kada ova linija na dnu dobiva odjek. 733 01:07:04,740 --> 01:07:08,660 Ne želim ništa da su ponovio još. 734 01:07:10,820 --> 01:07:15,700 Iako niste namjeravali na ništa dobivanje odjeknuo, nešto nije se ponovio 735 01:07:15,700 --> 01:07:17,990 i tako sada niste trebali poslati bilo više zaglavlja 736 01:07:17,990 --> 01:07:20,030 i ti ćeš dobiti pritužbe. 737 01:07:22,170 --> 01:07:24,420 Vi ne trebate one oznake za zatvaranje. 738 01:07:24,420 --> 01:07:27,420 Ako mislite na to nešto s HTML - 739 01:07:27,420 --> 01:07:30,490 i to je savršeno razumno učiniti ovdje dolje div god 740 01:07:30,490 --> 01:07:39,450 i onda u tom trenutku možete ili ne možete ih uključiti. 741 01:07:39,450 --> 01:07:41,590 To ne stvarno tvar. 742 01:07:41,590 --> 01:07:45,450 Ali u PHP skripti to je rijetko da ga zatvoriti. 743 01:07:45,450 --> 01:07:50,400 Kad je sve PHP, apsolutno sve, 744 01:07:50,400 --> 01:07:55,460 ti stvarno ne treba ga zatvoriti / ne treba ga zatvoriti. 745 01:08:02,030 --> 01:08:05,720 >> Suočavanje sa žice je puno ljepše nego u C. 746 01:08:05,720 --> 01:08:09,470 U PHP možete navesti niz s jednim ili dvostrukim navodnicima. 747 01:08:09,470 --> 01:08:12,820 S jednostruke navodnike ne možete koristiti "pobjeći" sekvence. 748 01:08:12,820 --> 01:08:17,640 Stalno pobjeći, bla, bla, bla. 749 01:08:19,920 --> 01:08:24,010 Dakle printf je vrlo rijetka u PHP. 750 01:08:24,010 --> 01:08:32,290 Mislim da će koristiti printf ako sam htio napraviti neku vrstu stvar - u pset 5 ste koristili sprintf ili što god. 751 01:08:32,290 --> 01:08:36,060 No, želite učiniti 001.jpg 002.jpg i. 752 01:08:36,060 --> 01:08:40,300 Dakle, za takve stvari, gdje sam zapravo žele oblikovati tekst bih koristiti printf. 753 01:08:40,300 --> 01:08:44,689 No, inače bih samo koristiti string ulančavanje. 754 01:08:44,689 --> 01:08:47,000 Ja nikada stvarno koristiti printf. 755 01:08:49,229 --> 01:09:00,170 Mi samo razlikovanje pojedinosti između jednostruke navodnike i dvostrukim navodnicima. 756 01:09:00,170 --> 01:09:07,490 Najveća razlika je u tome što jednostruke navodnike, to će biti tiskan doslovno. 757 01:09:07,490 --> 01:09:15,390 Nema char tip podataka u PHP-u, za razliku od C, tako da je to ekvivalent za to. 758 01:09:15,390 --> 01:09:17,970 Oni su obje žice. 759 01:09:17,970 --> 01:09:29,180 I lijepa stvar o jednom citat žice je da sam mogao reći 'Bok svijete!' bla, bla, bla, 760 01:09:29,180 --> 01:09:33,340 $ $ Wooo. 761 01:09:33,340 --> 01:09:38,260 Što se događa kad sam ispisati to je da će ga ispisati doslovno. 762 01:09:38,260 --> 01:09:40,680 Idemo riješiti sve naše stvari. 763 01:09:40,680 --> 01:09:44,700 Dakle, echo $ str1; 764 01:09:48,569 --> 01:09:56,570 To je doslovno tiskana sve one stvari: dolar znakovima, 765 01:09:56,570 --> 01:09:58,770 backslash n, što mislite da bi bi bilo nove linije i dr. - 766 01:09:58,770 --> 01:10:01,500 sve te stvari ispisuje doslovno. 767 01:10:01,500 --> 01:10:05,650 Jedina stvar koju trebate pobjeći su jednostruke navodnike 768 01:10:05,650 --> 01:10:09,470 jer inače ne bi pomislio da je zatvaranje jednostruke navodnike. 769 01:10:09,470 --> 01:10:15,050 Dupli citati, potpuno različiti. 770 01:10:20,300 --> 01:10:25,870 Već smo vidjeli sintakse nas cluing na ono što je o tome da ide užasno krivo. 771 01:10:25,870 --> 01:10:36,190 php.unique. Undefined variable: wooo jer to se tumači kao varijabla zove wooo. 772 01:10:36,190 --> 01:10:42,400 Dupli citati neka vam umetnuti varijable u - 773 01:10:42,400 --> 01:10:52,730 Recimo $ ime = "Rob"; 774 01:10:52,730 --> 01:10:58,020 Dakle echo "Bok, moje ime je $ ime!"; 775 01:10:58,020 --> 01:11:09,260 To priznaje to kao varijabla. 776 01:11:09,260 --> 01:11:21,210 Kad sam pokrenuti da - i ja ću umetnuti novi red - Bok, moje ime je Rob! i hello svijet! 777 01:11:21,210 --> 01:11:24,910 To je zato što nikada nisam uklonjen ispis wooo gore. 778 01:11:24,910 --> 01:11:30,020 Tu je jedan korak dalje možete učiniti. 779 01:11:30,020 --> 01:11:39,250 $ Niz = [1, 2, 3]; 780 01:11:39,250 --> 01:11:43,270 Što ako želim ispisati prvi indeks niza? 781 01:11:43,270 --> 01:11:45,150 Možete napraviti $ niz [0]. 782 01:11:45,150 --> 01:11:49,280 U sintakse je trag. Što je to sad? 783 01:11:52,320 --> 01:11:54,510 php.unique. 784 01:11:54,510 --> 01:11:59,860 Bok, moje ime je jedan! koji nije ono što sam želio. 785 01:11:59,860 --> 01:12:05,050 Sintaksa Isticanje mi je lagao. 786 01:12:05,050 --> 01:12:13,020 Pokušajmo '' -> 1, 'b' -> 2. 787 01:12:18,450 --> 01:12:21,440 Tako sam morao napisati. 788 01:12:26,350 --> 01:12:32,160 Neočekivani jedan citat (T_ENCAPSED bla, bla, bla, bla, bla). 789 01:12:32,160 --> 01:12:41,780 Ideja je da to ne prepoznaju to kao dio niza. 790 01:12:41,780 --> 01:12:46,620 To ne priznajući to kao niz indeksiranih pismom u. 791 01:12:46,620 --> 01:12:49,870 Vi želite učiniti da vitičastih zagrada, 792 01:12:49,870 --> 01:12:54,730 i sada sve što je u ovom kovrčave vitice će biti interpolirana, 793 01:12:54,730 --> 01:13:00,340 što je riječ koju koristimo za magično umetanja ove varijable u pravim mjestima. 794 01:13:00,340 --> 01:13:04,280 Sada to, php.unique, a Bok, moje ime je jedan! kao što se očekuje 795 01:13:04,280 --> 01:13:07,720 ili Bok, moje ime je Rob! 796 01:13:14,110 --> 01:13:23,130 Jedna stvar koja je vrsta lijepo o jednostruke navodnike je da - 797 01:13:23,130 --> 01:13:28,480 Tu je neki trošak za interpolacijom. 798 01:13:30,520 --> 01:13:35,100 Ako koristite dvostruke navodnike, tumač mora ići preko ovaj niz, 799 01:13:35,100 --> 01:13:41,500 pazeći da, "Oh, ovdje je varijabla. Sada moram ići dobiti tu varijablu i umetnite ga ovdje." 800 01:13:41,500 --> 01:13:48,930 Čak i ako ne koristite nikakve varijable, 801 01:13:48,930 --> 01:13:52,220 ništa unutar tih navodnicima treba interpolirati, 802 01:13:52,220 --> 01:13:56,800 ali to će i dalje biti sporiji jer treba ići preko dvostruke navodnike 803 01:13:56,800 --> 01:14:00,130 u potrazi za stvari koje treba interpolirati. 804 01:14:00,130 --> 01:14:05,360 Dakle jednostruke navodnike može biti malo brže, ako ništa treba interpolirati, 805 01:14:05,360 --> 01:14:15,650 i ja imaju tendenciju da se čak i koristiti jednostruke navodnike za 'Bok, moje ime je'. $ Array [''] svejedno. 806 01:14:15,650 --> 01:14:20,430 To će biti ekvivalent onoga što smo imali prije. 807 01:14:24,840 --> 01:14:28,440 Ali to je stvar preferencija. 808 01:14:28,440 --> 01:14:34,750 Ako ste koristeći PHP, vjerojatno ne zanima razlika u brzini. 809 01:14:34,750 --> 01:14:39,480 Tu nije dovoljno da bi ih urazumiti se na početak. 810 01:14:39,480 --> 01:14:43,030 >> Bilo konačne pitanja? 811 01:14:47,430 --> 01:14:51,710 >> Mi zapravo nije ni dobiti kroz sve to, ali ova stvar je bilo dosadno. 812 01:14:51,710 --> 01:14:59,080 Zadnja stvar koja je vrsta lijepo u PHP je kada ste se bave HTML, 813 01:14:59,080 --> 01:15:06,450 ćete koristiti ga malo, tako lijepo prečac sintaksu za ispis varijablu. 814 01:15:32,400 --> 01:15:36,730 Bez stavljajući PHP ovdje, to se zove kratke oznake. 815 01:15:36,730 --> 01:15:44,330 Službeno kao PHP 5.4, to je zastarjelo. 816 01:15:44,330 --> 01:15:48,640 Vi se preporučuje staviti php. 817 01:15:48,640 --> 01:15:55,770 To je još uvijek podržavaju, tako kratke oznake s 01:16:02,480 To je po defaultu podržava, tako da možete koristiti ove kao što želite, i oni su prilično zgodan. 819 01:16:02,480 --> 01:16:05,700 >> Ima li pitanja? 820 01:16:07,780 --> 01:16:09,270 U redu. 821 01:16:10,840 --> 01:16:13,800 >> Ostani sa stilom, San Diego. 822 01:16:13,800 --> 01:16:16,070 [Nasmijao] 823 01:16:18,620 --> 01:16:22,660 Bok. [Smijeh] 824 01:16:24,350 --> 01:16:28,470 [Pljesak] [smijeh] 825 01:22:46,460 --> 01:22:49,460 >> [CS50.TV]