1 00:00:00,000 --> 00:00:02,610 [Powered by Google Translate] [§ 8 - Viac Pohodlné] 2 00:00:02,610 --> 00:00:04,910 [Rob Bowden - Harvard University] 3 00:00:04,910 --> 00:00:07,070 [To je CS50. - CS50.TV] 4 00:00:11,520 --> 00:00:14,160 >> Tieto poznámky týždeň sekcia sa bude pekne krátka, 5 00:00:14,160 --> 00:00:19,070 tak som len tak stále hovoriť, vy sa chystáte udržať pýtať, 6 00:00:19,070 --> 00:00:22,720 a my sa pokúsime naplniť toľko času, ako je to možné. 7 00:00:22,720 --> 00:00:31,950 Veľa ľudí si myslí, že to Pset nie je nutne ťažké, ale je to veľmi dlho. 8 00:00:31,950 --> 00:00:37,070 Pset spec sám vezme hodinu čítať. 9 00:00:40,530 --> 00:00:45,730 Dáme vám veľa o SQL, čo by mohol potrebovať. 10 00:00:45,730 --> 00:00:50,520 My vás prevedie mnohými, takže by to nemalo byť také zlé. 11 00:00:50,520 --> 00:00:54,560 Má niekto začal alebo skončil? 12 00:00:55,380 --> 00:00:59,710 Je to posledná Pset. Ach, môj Bože. 13 00:00:59,710 --> 00:01:05,400 Obvykle je tu JavaScript jeden po tomto, ale veci kalendárny zmena 14 00:01:05,400 --> 00:01:09,560 robí všetko 1 týždeň kratšie, a my už majú PSet JavaScript. 15 00:01:09,560 --> 00:01:12,310 Neviem, ako to ovplyvní, či JavaScript bude zobrazovať na skúšku 16 00:01:12,310 --> 00:01:15,510 alebo Kvíz 1. 17 00:01:15,510 --> 00:01:22,260 Viem si predstaviť, že to bude niečo ako, čo potrebujete vedieť veci vysokej úrovne o JavaScriptu, 18 00:01:22,260 --> 00:01:26,460 ale pochybujem, že by sme len vám rovno kód JavaScript 19 00:01:26,460 --> 00:01:28,720 pretože ste nemali PSet v ňom. 20 00:01:28,720 --> 00:01:33,000 Ale to bude vec na preskúmanie kvíz budúci týždeň. 21 00:01:33,000 --> 00:01:36,320 >> Sekcia otázok. 22 00:01:36,320 --> 00:01:43,870 Mnoho z týchto vecí je trochu zle formulované, ale budeme diskutovať, prečo. 23 00:01:43,870 --> 00:01:50,220 Na rozdiel od C, PHP je "dynamicky napísaný" jazyk. Čo to znamená, pýtate sa? 24 00:01:50,220 --> 00:01:53,830 No, rozlúčiť so všetkými z tých char, float, int, a ďalšie kľúčové slová budete musieť použiť 25 00:01:53,830 --> 00:01:56,190 pri deklarovaní premennej a funkcie v C. 26 00:01:56,190 --> 00:02:00,420 V PHP, je premenná je typu určená hodnotou, že je to v súčasnej dobe drží. 27 00:02:00,420 --> 00:02:04,990 Takže ako sme zadajte tento kód do súboru s názvom dynamic.php, 28 00:02:04,990 --> 00:02:12,670 PHP je dynamicky zadali. To je pravda. 29 00:02:12,670 --> 00:02:17,590 Nesúhlasím s tým, že to znamená, že sme sa rozlúči s char, float, int, 30 00:02:17,590 --> 00:02:20,620 a ďalšie kľúčové slová. 31 00:02:20,620 --> 00:02:25,510 Presný rozdiel medzi dynamicky napísaný a subsidiárne, 32 00:02:25,510 --> 00:02:32,010 ktorá je staticky napísaný, je to, že dynamicky napísaný, všetky vaše kontrolu typu a tak 33 00:02:32,010 --> 00:02:37,350 sa deje v behu, zatiaľ čo staticky zadali to stane v čase kompilácie. 34 00:02:37,350 --> 00:02:43,030 Slovo statický všeobecne sa zdá, mysli veci kompiláciu. 35 00:02:43,030 --> 00:02:48,170 Myslím, že existujú aj iné využitie pre neho, ale v C, keď vyhlási, statickú premennú, 36 00:02:48,170 --> 00:02:52,650 jeho skladovanie je pridelené v čase kompilácie. 37 00:02:52,650 --> 00:02:59,260 Tu, dynamicky napísaný len znamená, že - 38 00:02:59,260 --> 00:03:04,350 V jazyku C, ak sa pokúsite pridať reťazec a celé číslo, keď ho skompilovať 39 00:03:04,350 --> 00:03:11,000 to bude sťažovať, pretože to bude hovoriť, že nemôžete pridať int a ukazovateľ. 40 00:03:11,000 --> 00:03:14,710 To jednoducho nie je platná operácie. 41 00:03:14,710 --> 00:03:21,170 To je ďalšia vec, ktorá sa dostaneme do druhého. 42 00:03:21,170 --> 00:03:24,860 Ale to druh kontroly, skutočnosť, že sa sťažuje, v čase kompilácie, 43 00:03:24,860 --> 00:03:29,220 je statická kontrola typu. 44 00:03:29,220 --> 00:03:35,220 Tam sú jazyky, kde nepotrebujete hovoriť char, float, int, a všetky tie veci, 45 00:03:35,220 --> 00:03:40,940 ale jazyk môže povedať, z kontextu veci, aký typ to má byť, 46 00:03:40,940 --> 00:03:43,980 ale je to stále staticky zadali. 47 00:03:43,980 --> 00:03:49,000 Takže ak budete mať 51, OCaml, už nikdy nebudete musieť použiť niektorý z týchto typov, 48 00:03:49,000 --> 00:03:58,700 ale to ešte bude v dobe kompilácie povedať, že nemôžete urobiť, pretože ste miešanie int a reťazec. 49 00:03:58,700 --> 00:04:05,650 Dynamicky napísaný len znamená, že niekedy počas behu budete si sťažnosť. 50 00:04:05,650 --> 00:04:13,430 Ak sa tiež používa Java predtým, všeobecne, takmer všetky C-typ jazyka 51 00:04:13,430 --> 00:04:20,070 sa bude staticky napísaný, tak C, C + +, Java, všetky z nich sú všeobecne staticky zadali. 52 00:04:20,070 --> 00:04:22,910 V Jave pri kompilácii niečo a vy hovoríte, 53 00:04:22,910 --> 00:04:26,670 string s sa rovná nové niečo, čo nie je reťazec, 54 00:04:26,670 --> 00:04:28,950 že sa to sťažovať, pretože tieto typy jednoducho nezodpovedajú. 55 00:04:28,950 --> 00:04:31,180 To bude sťažovať v čase kompilácie. 56 00:04:31,180 --> 00:04:36,750 Ale tiež to má nejaký dynamický čas veci páčia, ak sa pokúsite přetypovat niečo 57 00:04:36,750 --> 00:04:40,500 k typu, ktorý je konkrétnejšie ako jeho bežného typu, 58 00:04:40,500 --> 00:04:45,610 nič to môže robiť v čase kompilácie, aby skontrolovať, či obsadenie je uspieť. 59 00:04:45,610 --> 00:04:51,130 Java má tiež nejaký dynamický typ kontroly, že akonáhle sa dostane k tejto priamke kódu 60 00:04:51,130 --> 00:04:54,130 keď je to vlastne realizovať, bude to robiť obsadenie, 61 00:04:54,130 --> 00:04:56,260 či že obsadenie bolo platné v prvom rade, 62 00:04:56,260 --> 00:04:59,890 a ak to nebolo, potom to bude sa sťažovať, že máte neplatný typ. 63 00:04:59,890 --> 00:05:03,200 Dynamický typ kontroly. 64 00:05:03,200 --> 00:05:07,010 Napíšte toto do súboru s názvom dynamic.php. 65 00:05:10,130 --> 00:05:12,380 Dynamic.php. 66 00:05:14,580 --> 00:05:17,190 Budem unzip, že formátovania. 67 00:05:18,750 --> 00:05:21,880 Máme premennú, musíme nastaviť tak, aby celé číslo 7, 68 00:05:21,880 --> 00:05:27,930 potom budeme tlačiť a% s - 69 00:05:27,930 --> 00:05:32,830 Oh, my tlače typ, takže GetType bude vrátiť typ premennej. 70 00:05:32,830 --> 00:05:35,720 Sme len tlačou typ znovu a znovu. 71 00:05:35,720 --> 00:05:39,440 Práve sme php.dynamic.php. 72 00:05:39,440 --> 00:05:45,920 Uvidíme, že sa zmení z integer na reťazec do Booleovské hodnoty, ako sme prejsť. 73 00:05:45,920 --> 00:05:54,590 V C nie je Dátový typ Boolean, nie je dátový typ reťazec. 74 00:05:54,590 --> 00:06:00,500 Tam je char * a Boolean len býva int alebo char, alebo tak niečo. 75 00:06:00,500 --> 00:06:05,690 V PHP tieto typy existujú, a to je jeden z veľkých výhod PHP nad C - 76 00:06:05,690 --> 00:06:13,290 že reťazec operácie sú neporovnateľne jednoduchšie v PHP ako C. Sú jednoducho fungovať. 77 00:06:13,290 --> 00:06:18,290 >> Tak sme sa vrátili sem. 78 00:06:18,290 --> 00:06:21,260 Bežali sme dynamic.php. 79 00:06:21,260 --> 00:06:26,710 Toto hovorí PHP interpret, s názvom php, spustiť PHP kód v dynamic.php. 80 00:06:26,710 --> 00:06:30,250 Ak máte nejaké chyby v súbore, bude tlmočník povedať! 81 00:06:30,250 --> 00:06:39,110 Interpret, to je ďalší veľký rozdiel medzi PHP a C. 82 00:06:39,110 --> 00:06:48,200 V C budete musieť kompilovať niečo a potom spustiť tento skompilovaný súbor. 83 00:06:48,200 --> 00:06:50,490 V PHP nikdy čokoľvek kompilovať. 84 00:06:50,490 --> 00:06:57,200 Takže interpret PHP je v podstate len čítate tento riadok po riadku. 85 00:06:57,200 --> 00:07:02,900 Dáva var = 7, potom sa dotkne printf potom narazí var potom narazí printf a tak ďalej. 86 00:07:02,900 --> 00:07:10,910 Tam je trochu zostavovaní sa tak stane, a to ukladá výsledky 87 00:07:10,910 --> 00:07:15,510 takže ak spustíte skript neskôr si môžete urobiť nejaké, 88 00:07:15,510 --> 00:07:19,280 ale v podstate je to riadok po riadku tyhle veci. 89 00:07:19,280 --> 00:07:25,280 To znamená, že veľa optimalizáciou, ktoré dostaneme v C, 90 00:07:25,280 --> 00:07:31,920 ako kompilácie, je to len všeobecne kompilátor môže urobiť veľa trikov pre vás. 91 00:07:31,920 --> 00:07:36,110 To môže uzavrieť nepoužívané premenné, môže vykonávať všetky tieto druhy vecí, 92 00:07:36,110 --> 00:07:38,660 to môže robiť rekurzia chvosta. 93 00:07:38,660 --> 00:07:42,550 V PHP nie ste dostane túto výhodu 94 00:07:42,550 --> 00:07:45,690 pretože je to len tak, kto vykonávanie riadok po riadku po riadku, 95 00:07:45,690 --> 00:07:49,950 a to naozaj nie je rozpoznať tieto veci tak ľahko 96 00:07:49,950 --> 00:07:54,440 pretože to nie je 1 big compilation priechod cez vec a potom prevedení; 97 00:07:54,440 --> 00:07:56,860 je to len riadok po riadku. 98 00:08:00,730 --> 00:08:02,750 Tak to je interpret. 99 00:08:02,750 --> 00:08:06,840 >> Späť k nášmu dynamickému typovanie: docela v pohode, nie? 100 00:08:06,840 --> 00:08:08,640 Tie určite by to robiť v C! 101 00:08:08,640 --> 00:08:11,860 Teraz, uvidíme, či môžete prísť na typ každého z nasledujúcich hodnôt. 102 00:08:11,860 --> 00:08:14,760 Pozri tento pre referenčné. 103 00:08:14,760 --> 00:08:19,420 Tak 3,50. Aký typ si myslíte, že to bude? 104 00:08:24,480 --> 00:08:26,370 Tu sú typy, ktoré máme. 105 00:08:26,370 --> 00:08:30,430 Máme bools, celé čísla, plávajúce body, struny, polia, objekty, 106 00:08:30,430 --> 00:08:38,370 a potom sa zdroja, ktorý je tak trochu nejasná. 107 00:08:38,370 --> 00:08:41,010 Myslím, že je to vlastne príklad. 108 00:08:41,010 --> 00:08:43,740 Potom je tu NULL. NULL je zvláštny typ. 109 00:08:43,740 --> 00:08:47,140 Na rozdiel od C, kde NULL je len ukazovateľ s adresou 0, 110 00:08:47,140 --> 00:08:54,930 v PHP, NULL, je jeho vlastný typ, kde platí len vec tohto typu je NULL. 111 00:08:57,560 --> 00:09:00,670 To je oveľa užitočnejšie pre kontrolu chýb. 112 00:09:00,670 --> 00:09:04,310 V C, kde sme mali tento problém, kde, ak sa vrátite NULL, 113 00:09:04,310 --> 00:09:08,660 Znamená to, že ste vracia ukazovateľ NULL alebo pomocou NULL znamenať chybu 114 00:09:08,660 --> 00:09:12,380 alebo všetky z toho zmätku sme v jednom bode. 115 00:09:12,380 --> 00:09:18,440 Tu, vracia NULL všeobecne znamená chybu. 116 00:09:20,860 --> 00:09:27,300 Veľa vecí sa tiež vrátiť false pre chybu. 117 00:09:27,300 --> 00:09:33,140 Ale bod je NULL typ, jediná vec, na NULL typu je NULL. 118 00:09:33,140 --> 00:09:40,090 Potom callback je ako môžete definovať niektoré anonymné funkcie. 119 00:09:40,090 --> 00:09:46,420 Nemusíte dávať Táto funkcia meno, ale nebudete musieť vysporiadať s to tu. 120 00:09:46,420 --> 00:09:53,940 Pri pohľade na jednotlivé typy, ktoré sa očakávajú, aby sme vedeli, 121 00:09:53,940 --> 00:09:59,000 Čo si myslíte, že typ 3,50 je? >> [Študent] Float. 122 00:09:59,000 --> 00:10:00,370 Jo. 123 00:10:00,370 --> 00:10:06,290 Takže tu, čo si myslíte, že typ to je? >> [Študent] Array. 124 00:10:06,290 --> 00:10:09,890 Jo. Prvý z nich bol plavák, druhá je pole. 125 00:10:09,890 --> 00:10:14,500 Všimnite si, že toto pole nie je ako pole C 126 00:10:14,500 --> 00:10:19,610 kde máte index 0 má nejakú hodnotu, index 1 má nejakú hodnotu. 127 00:10:19,610 --> 00:10:26,320 Tu sú indexy sú a, b, c, a hodnoty sú 1, 2, a 3. 128 00:10:26,320 --> 00:10:33,980 V PHP nie je žiadny rozdiel medzi asociatívnym poli a len pravidelné maticu 129 00:10:33,980 --> 00:10:36,740 ako by ste si mohli myslieť na to v C. 130 00:10:36,740 --> 00:10:43,040 Tam je len to, a pod kapotou pravidelný pole je len asociatívne pole 131 00:10:43,040 --> 00:10:50,000 kde 0 mapy do určitej hodnoty rovnakým spôsobom, akým sa mapuje na nejakú hodnotu. 132 00:10:50,000 --> 00:11:00,410 Z tohto dôvodu, môže PHP byť dosť zlé pre rýchle rýchly kód / benchmarking vecí 133 00:11:00,410 --> 00:11:07,930 pretože v C, keď používate pole viete, že prístup členom je konštantný čas. 134 00:11:07,930 --> 00:11:11,860 V PHP prístup člena je, kto vie, koľko času? 135 00:11:11,860 --> 00:11:18,970 Je to pravdepodobne konštantný, ak to hash správne. 136 00:11:18,970 --> 00:11:21,620 Kto vie, čo je to naozaj robí pod pokrievku? 137 00:11:21,620 --> 00:11:25,600 Vy naozaj potrebujete sa pozrieť na vykonávanie vidieť, ako to bude s tým vysporiadať. 138 00:11:25,600 --> 00:11:28,550 Takže fopen. 139 00:11:28,550 --> 00:11:36,420 Myslím, že tu povedzme PHP manuál fopen pozrieť sa na návratový typ. 140 00:11:36,420 --> 00:11:41,260 Vidíme tu môžete vyhľadať prakticky akúkoľvek funkciu v PHP manuáli 141 00:11:41,260 --> 00:11:47,540 a to je niečo ako manuálové stránky PHP. 142 00:11:47,540 --> 00:11:51,060 Návratový typ bude zdrojom. 143 00:11:51,060 --> 00:11:56,050 To je dôvod, prečo som si to, pretože sme sa naozaj definovať zdroj. 144 00:11:56,050 --> 00:12:04,110 Myšlienka zdroje, v C tak nejako dostal FILE * alebo čokoľvek; 145 00:12:04,110 --> 00:12:07,200 v PHP zdroj je vaše FILE *. 146 00:12:07,200 --> 00:12:10,360 To je to, čo budete sa čítať z, to je to, čo budete na zápis do. 147 00:12:10,360 --> 00:12:20,710 Je to zvyčajne externé, takže je to zdroj, ktorý môžete vytiahnuť veci z a hádzať veci. 148 00:12:20,710 --> 00:12:26,520 A konečne, čo je typ NULL? >> [Študent] NULL. 149 00:12:26,520 --> 00:12:30,650 Jo. Takže jediná vec, ktorá je NULL NULL. 150 00:12:30,650 --> 00:12:33,480 NULL je NULL. 151 00:12:35,490 --> 00:12:41,170 >> Jedným z rysov systému typu PHP (pre lepšie alebo horšie), je jeho schopnosť žonglovať typov. 152 00:12:41,170 --> 00:12:44,390 Keď napíšete riadok kódu PHP, ktorý kombinuje hodnoty rôznych typov, 153 00:12:44,390 --> 00:12:46,670 PHP sa bude snažiť urobiť rozumnú vec. 154 00:12:46,670 --> 00:12:48,920 Vyskúšajte každej z nasledujúcich riadkov kódu PHP. Čo vytlačiť? 155 00:12:48,920 --> 00:12:51,000 Je to, čo ste očakávali? Prečo áno alebo prečo nie? 156 00:12:51,000 --> 00:12:58,600 Táto skutočnosť o PHP je to, čo robí to, čo nazývame slabo napísané. 157 00:12:58,600 --> 00:13:04,610 Slabo napísaný a silno zadali, 158 00:13:04,610 --> 00:13:06,840 existujú rôzne spôsoby využitia týchto pojmov, 159 00:13:06,840 --> 00:13:12,020 ale väčšina ľudí používa slabo napísaný a silne zadali znamenať niečo také 160 00:13:12,020 --> 00:13:15,920 kde ("1" + 2), že pracuje. 161 00:13:15,920 --> 00:13:18,290 V jazyku C, ktorá nebude fungovať. 162 00:13:18,290 --> 00:13:22,490 Môžete si to predstaviť nefunguje. 163 00:13:22,490 --> 00:13:29,200 Veľa ľudí mix dynamickej písanie a slabú zadaním a statické písanie a silné písanie. 164 00:13:29,200 --> 00:13:34,050 Python je ďalším príkladom jazyka, ktorý je dynamicky zadali. 165 00:13:34,050 --> 00:13:41,770 Môžete hádzať okolo typy premenných, a to bude rozhodovať v behu 166 00:13:41,770 --> 00:13:44,680 nejaké chybové checkings. 167 00:13:44,680 --> 00:13:50,740 V Pythone to ide spustiť to a uvidíte ("1" + 2); 168 00:13:50,740 --> 00:13:55,920 a to sa nepodarí, pretože hovorí, že nemôžete pridať string a integer. 169 00:13:55,920 --> 00:14:00,860 V PHP, ktorý je rovnako ako dynamicky napísaný, že to nebude zlyhá. 170 00:14:00,860 --> 00:14:04,220 Slabá písanie má čo do činenia s tým, že to robí veci s typmi 171 00:14:04,220 --> 00:14:07,800 ktoré nie sú naozaj zmysel nutne. 172 00:14:07,800 --> 00:14:17,420 So ("1" + 2), viem si predstaviť, že je reťazec 12, dokážem si predstaviť, že je reťazec 3, 173 00:14:17,420 --> 00:14:20,710 Dokážem si predstaviť, že je celé číslo 3. 174 00:14:20,710 --> 00:14:24,530 To nie je nevyhnutne dobre definované, a my pravdepodobne bude k videniu 175 00:14:24,530 --> 00:14:29,140 že keď sme tlače ("1" + 2), je to asi skončí ako bytia odlišné 176 00:14:29,140 --> 00:14:32,320 ako tlač (1 + "2"). 177 00:14:32,320 --> 00:14:39,700 A to býva, podľa môjho názoru, k horšiemu. 178 00:14:39,700 --> 00:14:44,240 Tu sa môžeme pokúsiť tieto. 179 00:14:44,240 --> 00:14:48,740 Ďalšie malý trik o PHP je nemusíte skutočne zapisovať do súboru. 180 00:14:48,740 --> 00:14:52,790 To sa spustiť tento príkaz režimu. 181 00:14:52,790 --> 00:14:57,710 Takže php-r, potom môžeme hodiť do príkazu tu: 182 00:14:57,710 --> 00:15:06,610 "Print ('1 '+ 2)," a ja ti hodiť nový riadok. 183 00:15:19,550 --> 00:15:23,970 Táto tlačená 3. 184 00:15:31,100 --> 00:15:35,330 Vyzerá to, že vytlačí 3 a je to číslo 3. 185 00:15:35,330 --> 00:15:38,420 Takže teraz si to skúsime obrátene: 186 00:15:38,420 --> 00:15:42,970 "Print (1 + '2 '); 187 00:15:45,560 --> 00:15:50,490 Dostaneme 3, a je to tiež bude celé číslo 3? Úprimne netuším. 188 00:15:50,490 --> 00:15:54,030 Vyzerá to, že je v súlade. 189 00:15:54,030 --> 00:15:59,550 Tam je nikdy žiadne šance, že je reťazec 12 alebo niečo podobné, že 190 00:15:59,550 --> 00:16:08,080 pretože PHP, JavaScript a na rozdiel od Java príliš, 191 00:16:08,080 --> 00:16:11,670 má samostatný operátor pre zreťazenie. 192 00:16:11,670 --> 00:16:14,930 Spájanie v PHP je dot. 193 00:16:14,930 --> 00:16:22,950 Takže tlač (1 '2 '.), Bude nám 12. 194 00:16:25,790 --> 00:16:32,420 To zvyčajne vedie k zámene, kde sa ľudia snažia urobiť niečo ako str + = 195 00:16:32,420 --> 00:16:37,840 nejaká iná vec, že ​​chcú pridať na koniec svojho reťazca, a že sa to nepodarí. 196 00:16:37,840 --> 00:16:40,770 Musíte urobiť str = 197 00:16:42,000 --> 00:16:46,240 Tak nezabudnite zreťazenie v PHP je bodka. 198 00:16:46,240 --> 00:16:52,100 Ostatné veci skúsiť: print ("SK" + 50); 199 00:16:55,750 --> 00:17:03,610 Povedal som vám, že nie je nádej, že by to viedlo CS50 200 00:17:03,610 --> 00:17:06,119 pretože zreťazenie nie je +. 201 00:17:06,119 --> 00:17:08,440 Čo si myslíte, že to bude skončiť? 202 00:17:10,359 --> 00:17:13,460 Úprimne nemajú absolútne žiadnu predstavu. 203 00:17:14,250 --> 00:17:16,460 Vyzerá to, že je to len 50. 204 00:17:16,460 --> 00:17:21,490 To vidí reťazec, a stavím sa, keď dáme 123CS - 205 00:17:21,490 --> 00:17:29,640 To vidí prvý reťazec, pokúsi sa prečítať celé číslo od neho alebo z neho číslo. 206 00:17:29,640 --> 00:17:31,710 V tomto prípade to vidí 123CS. 207 00:17:31,710 --> 00:17:35,190 "To nedáva zmysel, ako celé číslo, takže som len myslieť, že z 123." 208 00:17:35,190 --> 00:17:38,580 Takže 123 + 50 bude 173. 209 00:17:38,580 --> 00:17:40,740 A je to tu začne čítať to ako celé číslo. 210 00:17:40,740 --> 00:17:45,690 To nie je nič vidieť, tak to proste berie to ako 0. Takže 0 + 50 bude 50. 211 00:17:45,690 --> 00:17:51,600 To ja som za predpokladu to bude robiť niečo podobné. 212 00:17:51,600 --> 00:17:54,310 Rozmýšľam 99. 213 00:17:54,310 --> 00:17:57,580 Jo, pretože to bude trvať prvé - 214 00:18:12,880 --> 00:18:15,730 Tak 99. 215 00:18:15,730 --> 00:18:21,970 Tu (10/7), keby to bola C, čo by to vrátiť? 216 00:18:23,700 --> 00:18:29,630 [Študent] 1. >> Jo, by malo byť 1, pretože 10/7, je rozdelenie 2 celé čísla. 217 00:18:29,630 --> 00:18:32,910 Číslo deleno celé číslo bude vrátiť celé číslo. 218 00:18:32,910 --> 00:18:37,750 To sa nemôže vrátiť 1 bod čokoľvek, že by bolo, tak to len tak vrátiť 1. 219 00:18:37,750 --> 00:18:46,120 Tu tlače (10/7), že to bude skutočne interpretovať, že. 220 00:18:46,120 --> 00:18:53,760 A to znamená, že ak si naozaj chcete urobiť celočíselné zaokrúhľovania a podobné veci, ktoré, 221 00:18:53,760 --> 00:18:59,950 čo musíte urobiť, tlač (podlaha (10/7)); 222 00:18:59,950 --> 00:19:08,460 V jazyku C je to asi divné, že sa môžete spoľahnúť na celé číslo skrátenie pravidelne, 223 00:19:08,460 --> 00:19:12,260 ale v PHP nie je možné, pretože to bude automaticky premeniť na hotovosť. 224 00:19:13,430 --> 00:19:17,610 A potom (7 + true); čo si myslíte, že to bude? 225 00:19:18,550 --> 00:19:23,640 Hádam, 8, ak to bude vykladať ako pravdivé 1. 226 00:19:23,640 --> 00:19:25,740 Vyzerá to, že je to 8. 227 00:19:25,740 --> 00:19:31,710 >> Takže niečo, čo by sme urobili v posledných 10 minút, mali by ste absolútne nikdy robiť. 228 00:19:31,710 --> 00:19:39,870 Uvidíte kód, ktorý to robí. 229 00:19:39,870 --> 00:19:42,700 To nemá byť tak jednoduché, ako to. 230 00:19:42,700 --> 00:19:47,240 Tie by mohli mať 2 premenné, a 1 premenná sa stane, že reťazec 231 00:19:47,240 --> 00:19:51,310 a iné premenné sa stane, že int, a potom pridať tieto premenné spoločne. 232 00:19:51,310 --> 00:20:00,120 Vzhľadom k tomu, PHP je dynamicky napísaný a že to nebude mať žiadny druh kontroly pre vás 233 00:20:00,120 --> 00:20:03,640 a od tej doby je to slabo typovanie a pretože to bude len automaticky hodiť tieto veci dohromady 234 00:20:03,640 --> 00:20:11,490 a všetko bude všetko fungovať, je to ťažké, ani nevie, že táto premenná musí byť reťazec teraz, 235 00:20:11,490 --> 00:20:14,930 takže by ju pridať do tejto premennej, čo je celé číslo. 236 00:20:18,780 --> 00:20:24,560 Najlepšia prax je, ak je premenná reťazec, majte ju ako reťazec navždy. 237 00:20:24,560 --> 00:20:26,980 Ak je premenná int, majte ju ako int navždy. 238 00:20:26,980 --> 00:20:30,770 Ak sa chcete vysporiadať s celými číslami a reťazca, 239 00:20:30,770 --> 00:20:36,970 môžete použiť varsint - to je JavaScript. 240 00:20:36,970 --> 00:20:42,520 Intval. Robím to po celú dobu. PHP a JavaScript miešam sa všetko. 241 00:20:42,520 --> 00:20:47,600 Takže intval bude vrátiť celočíselnú hodnotu premennej. 242 00:20:47,600 --> 00:20:56,550 Ak sme sa prejsť v "tlače (intval ('123 ')); dostanete 123. 243 00:21:06,820 --> 00:21:15,850 Intval sám nie je robiť kontrolu pre nás, že je to iba číslo. 244 00:21:15,850 --> 00:21:20,460 The manuálne PHP, tam sú len toľko funkcie k dispozícii, 245 00:21:20,460 --> 00:21:26,560 tak tu si myslím, to, čo by som použiť, je funkciu is_numeric prvý. 246 00:21:26,560 --> 00:21:32,590 Hádam, že sa vrátil false. 247 00:21:32,590 --> 00:21:35,780 To je ďalšia vec, ktorú musíme prejsť, je. === 248 00:21:37,850 --> 00:21:44,020 Takže funkciu is_numeric ('123df "), mali by ste sa to brať ako funkciu is_numeric. 249 00:21:44,020 --> 00:21:46,720 V C budete musieť iterácii všetky znaky 250 00:21:46,720 --> 00:21:50,410 a skontrolujte, či každá postava je číslica alebo čokoľvek iného. 251 00:21:50,410 --> 00:21:53,850 Tu funkciu is_numeric bude to pre nás, 252 00:21:53,850 --> 00:21:56,520 a to sa vracia false. 253 00:21:56,520 --> 00:22:02,120 Takže keď som vytlačil, že to vytlačí nič, tak som tu porovnaní je vidieť, 254 00:22:02,120 --> 00:22:05,490 ste náhodou byť nepravdivý? A tak teraz je to tlač 1. 255 00:22:05,490 --> 00:22:10,060 Zrejme to vytlačí 1 ako pravdivý miesto tlače pravdivé ako pravdivé. 256 00:22:10,060 --> 00:22:15,790 Zaujímalo by ma, či mám print_r. Nie, to ešte robí 1. 257 00:22:15,790 --> 00:22:26,760 >> Vráťme sa späť k ===, == stále existuje, 258 00:22:26,760 --> 00:22:32,260 a ak budete hovoriť s Tommym povie == je úplne v poriadku. 259 00:22:32,260 --> 00:22:37,700 Ja poviem, že == je hrozné a nikdy by ste nemali používať. == 260 00:22:37,700 --> 00:22:44,870 Rozdiel je v tom == porovnáva veci 261 00:22:44,870 --> 00:22:48,450 kde môže byť pravda, aj keď to nie je rovnakého typu, 262 00:22:48,450 --> 00:22:53,810 vzhľadom k tomu, === porovnáva veci a prvé to sú kontroly, ktoré rovnaký typ? 263 00:22:53,810 --> 00:22:58,010 Áno. Dobre, teraz idem zistiť, či skutočne v porovnaní s rovnať. 264 00:22:58,010 --> 00:23:08,890 Tu získate divné veci, ako je 10 rovná - Poďme sa pozrieť, čo to hovorí. 265 00:23:08,890 --> 00:23:15,570 Takže ('10 '== '1 e1'); 266 00:23:15,570 --> 00:23:17,980 To vráti true. 267 00:23:17,980 --> 00:23:21,420 Má niekto nejaké dohady, prečo to vráti pravda? 268 00:23:25,180 --> 00:23:27,120 To nie je len o tom. Možno je to náznak. 269 00:23:27,120 --> 00:23:33,170 Ale keď som sa zmeniť na f - sakramentsky to! I naďalej používať úvodzovky. 270 00:23:33,170 --> 00:23:38,780 Dôvodom sú úvodzovky sú na mňa revať, je preto, že som si toto v úvodzovkách. 271 00:23:38,780 --> 00:23:43,850 Takže som mohol uniknúť úvodzoviek sem, ale jednoduché úvodzovky ľahšie. 272 00:23:43,850 --> 00:23:49,120 Takže ('10 '== '1 F1'); nevytlačí pravda. ('10 '== '1 E1'); vytlačí pravda. 273 00:23:49,120 --> 00:23:56,330 [Študent] Je to hex? >> Nie je to hex, ale je to blízko, že je to ako - 274 00:23:56,330 --> 00:24:01,060 1E1, vedeckej notácie. 275 00:24:01,060 --> 00:24:07,950 Uznáva 1E1 ako 1 * 10 ^ 1 alebo čokoľvek. 276 00:24:07,950 --> 00:24:11,510 Tí sú rovné celé čísla. 277 00:24:11,510 --> 00:24:15,930 Ak sa nám to === potom to bude false. 278 00:24:15,930 --> 00:24:28,490 Vlastne som tušenie, či budeme robiť == čo (10 a '10abc ");? Dobrá. Tak to je pravda. 279 00:24:28,490 --> 00:24:35,940 Takže rovnako ako keď ste (10 + '10abc "), a to by bolo 20, 280 00:24:35,940 --> 00:24:38,800 tu (10 == '10abc '); je pravda. 281 00:24:38,800 --> 00:24:45,350 Ešte horšie sú veci ako (false == NULL); je pravda 282 00:24:45,350 --> 00:24:52,210 alebo (false == 0), je pravda, (false == []); 283 00:24:52,210 --> 00:25:00,970 Existujú podivné prípady - To je jedna z tých podivných prípadov. 284 00:25:00,970 --> 00:25:08,110 Všimnite si, že (false == []); je pravda. 285 00:25:08,110 --> 00:25:11,950 ('0 '== False); je pravda. 286 00:25:11,950 --> 00:25:16,090 ('0 '== []); Je false. 287 00:25:16,090 --> 00:25:19,090 Takže == je v žiadnom prípade tranzitívne. 288 00:25:19,090 --> 00:25:26,830 môže byť rovná b a môže byť rovná c, 289 00:25:26,830 --> 00:25:29,340 ale b nemusí byť rovná c. 290 00:25:29,340 --> 00:25:35,580 To je ohavnosť pre mňa, a vy by ste mali vždy používať. === 291 00:25:35,580 --> 00:25:38,590 [Študent] Môžeme to urobiť! == Rovnako? >> [Bowden] Áno. 292 00:25:38,590 --> 00:25:44,600 Ekvivalent by byť! = A! ==. 293 00:25:44,600 --> 00:25:48,230 To je vlastne vychovaný v PSet spec 294 00:25:48,230 --> 00:25:52,000 kde mnoho funkcií návrate - 295 00:25:52,000 --> 00:25:53,890 Použitie PHP je dobré o tom. 296 00:25:53,890 --> 00:25:59,140 Kladie vo veľkom červenom poli, "To vráti false, ak je chyba." 297 00:25:59,140 --> 00:26:03,940 Ale vracia 0, je úplne rozumný vec vrátiť. 298 00:26:03,940 --> 00:26:08,250 Premýšľajte o akejkoľvek funkcii, ktorá sa očakáva, že vráti celočíselnú hodnotu. 299 00:26:11,250 --> 00:26:17,880 Povedzme, že táto funkcia má spočítať počet riadkov v súbore alebo tak niečo. 300 00:26:17,880 --> 00:26:23,490 Za normálnych okolností, odovzdáte tejto funkcii súboru 301 00:26:23,490 --> 00:26:27,120 a bude to vráti celočíselnú hodnotu, ktorá predstavuje počet riadkov. 302 00:26:27,120 --> 00:26:30,820 Takže 0 je úplne primeraný počet, ak súbor je len prázdny. 303 00:26:30,820 --> 00:26:36,810 Ale čo keď odovzdať neplatný súbor a funkcia sa stane vrátiť false 304 00:26:36,810 --> 00:26:38,860 Ak odovzdať neplatný súbor? 305 00:26:38,860 --> 00:26:46,500 Ak ste práve robiť == ste nerozlišuje prípad medzi neplatný súbor a prázdny súbor. 306 00:26:48,870 --> 00:26:51,350 Vždy používajte ===. 307 00:26:55,690 --> 00:26:58,000 To je všetko z nich. 308 00:26:58,000 --> 00:27:01,660 >> V PHP, typ poľa sa líši od toho, čo ste zvyknutí v C. 309 00:27:01,660 --> 00:27:06,650 Naozaj, možno ste už všimli vyššie, keď ste videl, že to je typ poľa. 310 00:27:06,650 --> 00:27:15,640 Držiak Syntax je nová od PHP 5.4, ktorá je najnovšia verzia PHP. 311 00:27:15,640 --> 00:27:36,960 Než to si vždy museli písať poľa ('a' -> 1, 'b' -> 2. 312 00:27:36,960 --> 00:27:41,160 To bolo Konstruktor poľa. 313 00:27:41,160 --> 00:27:45,950 Teraz PHP konečne prišiel okolo pekné syntax púhych hranatých zátvorkách, 314 00:27:45,950 --> 00:27:50,900 ktorá je len o toľko lepší ako pole. 315 00:27:50,900 --> 00:27:54,480 Ale vzhľadom k tomu PHP 5.4 je najnovšia verzia, 316 00:27:54,480 --> 00:27:59,090 sa môžete stretnúť miesta, ktoré nemajú ani PHP 5.3. 317 00:27:59,090 --> 00:28:08,220 Cez leto sme narazili na tento problém, kde PHP 5.3 bolo to, čo sme mali na zariadenia, 318 00:28:08,220 --> 00:28:14,480 ale server, ktorý sme nasadili všetky naše študijné knihu a odoslať a všetky tie veci, aby 319 00:28:14,480 --> 00:28:16,750 Bol PHP 5.4. 320 00:28:16,750 --> 00:28:23,060 Nie je to vedel, sme vyvinuli v 5,3, tlačil na 5,4, 321 00:28:23,060 --> 00:28:25,660 a teraz zrazu nikto z nášho kódu funguje 322 00:28:25,660 --> 00:28:28,680 pretože tam sa stalo, že boli zmeny medzi 5,3 a 5,4 323 00:28:28,680 --> 00:28:31,030 ktoré nie sú spätne kompatibilné, 324 00:28:31,030 --> 00:28:35,770 a máme ísť a opraviť všetky naše veci, ktoré nefungujú pre PHP 5.4. 325 00:28:39,210 --> 00:28:42,320 Pre túto triedu, pretože zariadenie má PHP 5.4, 326 00:28:42,320 --> 00:28:45,490 to je úplne v poriadku používať hranaté zátvorky. 327 00:28:47,240 --> 00:28:50,440 Ale ak hľadáte do vecí po internete, 328 00:28:50,440 --> 00:28:54,880 ak hľadáte nejakú druh poľa veci, s najväčšou pravdepodobnosťou budete vidieť 329 00:28:54,880 --> 00:29:02,020 kúzlo so syntaxou konštruktory Array, pretože to je už od PHP sa narodil 330 00:29:02,020 --> 00:29:07,340 a hranatá zátvorka syntaxe bol asi za posledných pár mesiacov 331 00:29:07,340 --> 00:29:10,020 alebo kedykoľvek 5,4 obišiel. 332 00:29:10,020 --> 00:29:12,710 To je, ako sa index. 333 00:29:12,710 --> 00:29:30,610 Rovnako ako v C, ako by ste index v hranatých zátvorkách ako $ pole [0], $ array [1], $ array [2], 334 00:29:30,610 --> 00:29:36,320 indexovanie rovnakým spôsobom, ak sa stalo, že sa vaše indexy že reťazca. 335 00:29:36,320 --> 00:29:40,440 Takže $ array ['a'] a $ array ['b']. 336 00:29:40,440 --> 00:29:47,410 $ Array [b]. Prečo by to byť v poriadku? 337 00:29:52,490 --> 00:29:59,870 To bude pravdepodobne generovať varovanie, ale stále fungujú. PHP inklinuje k tomu, že. 338 00:29:59,870 --> 00:30:04,890 To inklinuje len, "budem vás varovať o tom, ale ja som jednoducho ísť ďalej 339 00:30:04,890 --> 00:30:07,550 "A robiť, čo budem môcť." 340 00:30:07,550 --> 00:30:11,500 To bude pravdepodobne si to preložiť na reťazec, 341 00:30:11,500 --> 00:30:15,000 ale je možné, že v určitom okamihu v minulosti niekto povedal, 342 00:30:15,000 --> 00:30:20,180 define B, ktoré sa "HELLO WORLD". 343 00:30:20,180 --> 00:30:28,740 Takže teraz b môže byť konštantná a $ array [b] bude skutočne robiť "HELLO WORLD". 344 00:30:28,740 --> 00:30:32,380 Myslím, že v tomto okamihu, alebo aspoň naše PHP nastavenia, 345 00:30:32,380 --> 00:30:37,870 Ak sa pokúsite index do poľa, a že kľúč neexistuje, bude to nepodarí. 346 00:30:37,870 --> 00:30:40,150 Ja si nemyslím, že to bude len varovať. 347 00:30:40,150 --> 00:30:44,560 Alebo aspoň si môžete nastaviť tak, aby sa nielen vás varovať, že len rovno hore zlyhá. 348 00:30:44,560 --> 00:30:49,290 >> Spôsob, ako zistiť, či skutočne existuje taká index je isset. 349 00:30:49,290 --> 00:30:54,690 Takže isset ($ array ['HELLO WORLD "]) vráti false. 350 00:30:54,690 --> 00:30:59,160 isset ($ array ['b']) vráti true. 351 00:31:06,830 --> 00:31:09,880 Môžete kombinovať tejto syntax. 352 00:31:15,060 --> 00:31:22,440 Som si istý, čo to pole by skončiť, je - môžeme vyskúšať si to. 353 00:31:43,290 --> 00:31:45,700 Oh, potrebujem PHPWord. 354 00:31:53,960 --> 00:32:00,260 To je miešanie syntaxe, kde zadáte, čo je kľúč 355 00:32:00,260 --> 00:32:03,330 a nie je špecifikované, čo je kľúč. 356 00:32:03,330 --> 00:32:05,520 Takže 3 tu je hodnota. 357 00:32:05,520 --> 00:32:08,080 Ste výslovne povedal, čo jeho hlavný bude. 358 00:32:08,080 --> 00:32:11,670 Čo si myslíte, že jeho kľúč bude? 359 00:32:11,670 --> 00:32:21,410 [Študent] 0. >> Hádam 0 len preto, že je to prvý sme ešte neurčili. 360 00:32:21,410 --> 00:32:23,500 Môžeme skutočne urobiť pár týchto prípadov. 361 00:32:23,500 --> 00:32:28,030 Takže print_r je vytlačiť rekurzívny. Ak bude vytlačiť celý poľa. 362 00:32:28,030 --> 00:32:32,700 To by vytlačiť subarrays na pole, ak bola nejaká. 363 00:32:32,700 --> 00:32:36,630 Takže print_r ($ array); php.test.php. 364 00:32:36,630 --> 00:32:38,810 Vyzerá to, ako by dal 0. 365 00:32:38,810 --> 00:32:43,530 Je tu vlastne niečo mať na mysli, ale budeme sa vrátiť k nej v druhom. 366 00:32:43,530 --> 00:32:45,850 Ale čo keď som sa náhodou, aby sa tento index 1? 367 00:32:45,850 --> 00:32:51,170 PHP nerozlišuje medzi reťazca indexy a celočíselných indexov 368 00:32:51,170 --> 00:33:00,280 takže v tomto bode som práve definoval index 1 a môžem si robiť aj $ pole [1] a $ array ['1 '] 369 00:33:00,280 --> 00:33:06,250 a to bude rovnaký index a rovnaký kľúč. 370 00:33:06,250 --> 00:33:13,000 Tak čo teraz myslíš, že 3 bude? >> [Študent] 2. >> [Bowden] Hádam 2. 371 00:33:16,000 --> 00:33:18,690 Jo. Je to 2. 372 00:33:18,690 --> 00:33:24,790 Čo keby sme to je 10, to je 4? Čo si myslíte index 3 bude? 373 00:33:27,360 --> 00:33:29,110 Rozmýšľam 11. 374 00:33:29,110 --> 00:33:33,060 Môj odhad na to, čo robí PHP - a myslím, že som to videl pred - 375 00:33:33,060 --> 00:33:39,760 je to len sleduje, čo najvyšší číselná index to používal doteraz je. 376 00:33:39,760 --> 00:33:44,230 Je to nikdy priradiť reťazec index 3. To bude vždy číselná index. 377 00:33:44,230 --> 00:33:47,690 Tak to udržuje najvyššej k nemu patrí účelovo tak ďaleko, ktorý sa stane byť 10, 378 00:33:47,690 --> 00:33:52,540 a bude to dávať 11-3. 379 00:33:52,540 --> 00:34:02,110 To, čo som povedal predtým, všimnite si, ako je to tlačí toto pole. 380 00:34:02,110 --> 00:34:06,850 Vytlačí kľúče 10, kľúč 4, kľúč 11, tlačidlo d 381 00:34:06,850 --> 00:34:09,790 Alebo dokonca ideme - 382 00:34:15,760 --> 00:34:22,489 Asi som nemal dať 0, ale je to tlač 1, 2, 3, 4. 383 00:34:22,489 --> 00:34:29,330 Čo keď prejdem tu? Alebo poďme skutočne prejsť tieto 2. 384 00:34:29,330 --> 00:34:31,940 Teraz sa vytlačí 2, 1, 3, 4. 385 00:34:31,940 --> 00:34:41,270 PHP polia nie sú rovnako ako vaše pravidelné tabuľky hash. 386 00:34:41,270 --> 00:34:45,570 Je to úplne rozumné uvažovať o nich ako hash tabuľky 99% času. 387 00:34:45,570 --> 00:34:53,790 Ale vo svojich hash tabuľkách nemá zmysel v poradí, v ktorom boli vložené veci. 388 00:34:53,790 --> 00:34:56,639 Takže akonáhle vložíte ho do hash tabuľky, 389 00:34:56,639 --> 00:35:00,590 Predpokladám, že to nie je prepojený zoznam a vy ste mohli posúdiť v rámci prepojeného zoznamu 390 00:35:00,590 --> 00:35:03,980 ktorý bol vložený ako prvý. 391 00:35:03,980 --> 00:35:10,060 Ale tu sme sa vkladá 2 prvej a vie, kedy to tlače z tohto poľa, že 2 je na prvom mieste. 392 00:35:10,060 --> 00:35:13,090 Netlačí to len v ľubovoľnom poradí. 393 00:35:13,090 --> 00:35:17,550 Technické údaje štruktúra, ktorá je to s použitím je uložená mapa, 394 00:35:17,550 --> 00:35:24,690 tak to mapuje kľúče hodnôt a pamätá poradí, v ktorom boli vložené tieto kľúče. 395 00:35:24,690 --> 00:35:31,600 V podstate je to pre niektoré komplikácie, kde je to otravné skutočne - 396 00:35:31,600 --> 00:35:34,510 Povedzme, že máte poľa 0, 1, 2, 3, 4, 5 397 00:35:34,510 --> 00:35:37,700 a chcete, aby sa index 2. 398 00:35:37,700 --> 00:35:47,750 Jedným zo spôsobov, ako to urobiť, pozrime sa ako to vyzerá. 399 00:35:47,750 --> 00:35:50,410 0, 2, 1, 3, 4. 400 00:35:50,410 --> 00:35:54,880 Odstavenie sa stane odistí obe premenné a polia indexov. 401 00:35:54,880 --> 00:35:58,630 Takže unset ($ pole [2]); 402 00:35:58,630 --> 00:36:03,430 Teraz, čo sa to bude vyzerať? 2 je jednoducho preč, tak to je úplne v poriadku. 403 00:36:03,430 --> 00:36:11,670 Viac nepríjemné je, ak chcete, aby veci skutočne ako pole. 404 00:36:11,670 --> 00:36:14,910 Dám náhodných čísel. 405 00:36:14,910 --> 00:36:20,400 Teraz všimnete mojej indexy. 406 00:36:20,400 --> 00:36:26,860 Chcem, aby to byť len ako pole C, kde to ide od 0 do dĺžky - 1 407 00:36:26,860 --> 00:36:30,810 a môžem určiť iteráciou cez to ako taký. 408 00:36:30,810 --> 00:36:38,520 Ale akonáhle som sa odistí druhý index, čo bolo v indexe 3 nie je teraz stal index 2. 409 00:36:38,520 --> 00:36:44,790 Namiesto toho to jednoducho odstráni tento index a teraz idete 0, 1, 3, 4. 410 00:36:44,790 --> 00:36:48,740 To je úplne rozumné. 411 00:36:48,740 --> 00:36:53,950 Je to len nepríjemné a vy budete musieť robiť veci, ako je pole spájať. Jo. 412 00:36:53,950 --> 00:36:57,200 >> [Študent] Čo by sa stalo, keby ste mali pre sláčiky 413 00:36:57,200 --> 00:36:59,630 a chceli by ste ísť cez všetky prvky? 414 00:36:59,630 --> 00:37:02,290 Keď to hit 2, by to dať niekedy? 415 00:37:02,290 --> 00:37:10,150 Iterácia cez pole. Existujú 2 spôsoby, môžete to urobiť. 416 00:37:10,150 --> 00:37:12,770 Môžete použiť pravidelné slučky for. 417 00:37:12,770 --> 00:37:22,000 To je ďalší zložitosť PHP. 418 00:37:22,000 --> 00:37:27,420 Väčšina jazykov, povedal by som, má nejakú dĺžku alebo ľan, alebo tak niečo 419 00:37:27,420 --> 00:37:30,470 označujúce dĺžku poľa. 420 00:37:30,470 --> 00:37:32,820 V PHP je to count. 421 00:37:32,820 --> 00:37:36,160 Takže count ($ array); $ i + +) 422 00:37:36,160 --> 00:37:42,950 Povedzme, tlač ($ array [$ i]); 423 00:37:45,920 --> 00:37:48,820 Notice: Undefined offset: 2. 424 00:37:48,820 --> 00:37:51,610 Je to len tak nepodarí. 425 00:37:51,610 --> 00:38:03,020 To je dôvod, prečo, z väčšej časti, už nikdy nebudete musieť iterácii pole, ako je tento. 426 00:38:03,020 --> 00:38:07,110 To by mohlo byť prehnané, ale už nikdy nebudete musieť iterácii pole, ako je tento 427 00:38:07,110 --> 00:38:19,410 pretože PHP poskytuje svoje foreach syntax, kde foreach ($ pole as $ item). 428 00:38:19,410 --> 00:38:31,830 Teraz, keď sme sa tlačiť ($ item); - Dáme prerokovávať v druhej -, že funguje úplne v poriadku. 429 00:38:31,830 --> 00:38:38,960 Spôsob, akým foreach pracuje, je prvý argument je pole, ktoré ste iterácie. 430 00:38:38,960 --> 00:38:44,060 A druhý argument, bod, vďaka každom priechode pre sláčiky 431 00:38:44,060 --> 00:38:52,690 to bude trvať na ďalšiu vec v poli. Takže pamätajte pole má rozkaz. 432 00:38:52,690 --> 00:38:55,690 Pri prvom až pre sláčiky, položka bude 123 433 00:38:55,690 --> 00:38:59,540 potom to bude 12 potom zníži o 13, potom bude 23, bude to 213. 434 00:38:59,540 --> 00:39:04,670 Veci sa naozaj divne, keď robíte niečo také foreach. 435 00:39:04,670 --> 00:39:07,480 Pozrime sa, čo sa stane, pretože by ste nikdy nemali urobiť. 436 00:39:07,480 --> 00:39:13,320 Čo keby sme unset ($ array [1]); 437 00:39:20,410 --> 00:39:26,030 To bolo pravdepodobne očakávali. 438 00:39:26,030 --> 00:39:30,950 Tie iterácia tohto poľa, a zakaždým, keď budete zabezpečenie a odistení prvý index. 439 00:39:30,950 --> 00:39:39,720 Takže pre index 0, prvá vec, bod berie na hodnotu 0, takže to bude 123. 440 00:39:39,720 --> 00:39:44,630 Ale vo vnútri slučky for my unset index 1, tak, že znamená 12 je preč. 441 00:39:44,630 --> 00:39:57,480 Tak tlače. PHP_EOL. 442 00:39:57,480 --> 00:40:03,580 PHP_EOL je len riadok, ale je to technicky viac prenosný 443 00:40:03,580 --> 00:40:08,890 od konca riadkov v systéme Windows sa líši od konca riadkov na Mac a UNIX. 444 00:40:08,890 --> 00:40:18,040 Na Windows Newline je \ r \ n, vzhľadom k tomu, všade inde to býva, len aby sa \ n 445 00:40:18,040 --> 00:40:25,150 PHP_EOL je nakonfigurovaný tak, aby používal bez ohľadu riadok vášho systému je. 446 00:40:25,150 --> 00:40:29,310 Tak tlače, že. Poďme sa print_r ($ array) na konci. 447 00:40:32,830 --> 00:40:37,390 Nemal som tušenie, že by správanie. 448 00:40:41,740 --> 00:40:48,960 Bod stále trvá na hodnote 12, aj keď sme strážiť 12 predtým, než sme vôbec sa k nemu z poľa. 449 00:40:52,770 --> 00:40:58,840 Neberte moje slovo, ale vyzerá to, že foreach vytvorí kópiu poľa 450 00:40:58,840 --> 00:41:02,160 a potom sa položka nadobúda všetkých hodnôt tejto kópie. 451 00:41:02,160 --> 00:41:07,760 Takže, aj keď zmeníte pole vnútri slučky for, 452 00:41:07,760 --> 00:41:17,240 to bude jedno. Položka bude na pôvodných hodnotách. 453 00:41:17,240 --> 00:41:19,240 Poďme skúsiť odistenie ju. 454 00:41:19,240 --> 00:41:24,460 Čo keď je to $ array [1] = "ahoj"; 455 00:41:24,460 --> 00:41:31,770 Aj keď sme dali "hello" do poľa, bod nikdy netrvá na túto hodnotu. 456 00:41:31,770 --> 00:41:37,430 Je tu ďalší syntaxe foreach slučky 457 00:41:37,430 --> 00:41:45,900 , Kde môžete dať 2 premenných oddelených šípkou. 458 00:41:45,900 --> 00:41:49,680 Tento prvý premenná bude kľúčovým tejto hodnoty, 459 00:41:49,680 --> 00:41:53,050 a táto druhá premenná bude rovnaký presný položka. 460 00:41:53,050 --> 00:42:01,610 To je nezaujímavé tu, ale ak by sme sa vrátiť k našej pôvodnej prípade "A" -> 1, 461 00:42:01,610 --> 00:42:06,090 "B" -> 1, 462 00:42:06,090 --> 00:42:14,470 tu, ak sme len iterácii pre každé pole ako položka, položka bude 1 zakaždým. 463 00:42:14,470 --> 00:42:18,170 Ale ak chceme tiež poznať kľúč spojený s danú položku 464 00:42:18,170 --> 00:42:25,230 potom robíme ako $ key -> $ položky. 465 00:42:25,230 --> 00:42:31,980 Takže teraz môžeme urobiť tlače ($ key. ":". 466 00:42:31,980 --> 00:42:39,380 Teraz je to iterácie a tlač jednotlivých tlačidiel a ich pridružené hodnoty. 467 00:42:39,380 --> 00:42:47,030 >> Ďalšia vec, ktorú môžeme urobiť v foreach slučiek ich môžete vidieť túto syntax. 468 00:42:47,030 --> 00:42:54,770 Ampersand pred názvy premenných majú tendenciu byť ako PHP robí odkazy. 469 00:42:54,770 --> 00:43:00,460 Kde sú odkazy veľmi podobné ukazovatele, 470 00:43:00,460 --> 00:43:04,820 nemáte ukazovatele, takže nikdy rokovať s pamäťou priamo. 471 00:43:04,820 --> 00:43:12,620 Ale vy máte odkazy, kde 1 premenná sa odkazuje na rovnakú vec, ako iné premenné. 472 00:43:12,620 --> 00:43:21,450 Vnútri tu poďme robiť $ item. Poďme späť k 1, 10. 473 00:43:21,450 --> 00:43:28,800 Poďme urobiť $ item + +; To ešte existuje v PHP. Môžete stále robiť + +. 474 00:43:28,800 --> 00:43:38,260 php.test.php. Musím vytlačiť. print_r ($ array); 475 00:43:38,260 --> 00:43:42,730 Tlačíme 2, 11. 476 00:43:42,730 --> 00:43:49,560 Keby som práve urobil foreach ($ pole as $ item), potom položka bude hodnota 1 477 00:43:49,560 --> 00:43:54,190 prvýkrát cez slučku. To bude zvyšovať 1-2 a potom sme hotoví. 478 00:43:54,190 --> 00:43:57,260 Takže potom to pôjde cez druhého priechodu slučkou a táto položka je 10. 479 00:43:57,260 --> 00:44:01,570 To zvýši položka 11, a potom to je len vyhodiť. 480 00:44:01,570 --> 00:44:06,670 Potom sme print_r ($ array), a pozrime sa, že je to len 1, 10. 481 00:44:06,670 --> 00:44:09,070 Takže prírastok sme sa stratili. 482 00:44:09,070 --> 00:44:13,410 Ale foreach ($ array as $ item a) 483 00:44:13,410 --> 00:44:21,910 Teraz táto položka je rovnaká položka toto právo tu. Je to to isté. 484 00:44:21,910 --> 00:44:26,820 Takže $ item + + je modifikácia pole 0. 485 00:44:29,330 --> 00:44:41,850 V podstate, môžete si tiež urobiť $ K -> $ položky a môžete to urobiť $ array [$ k] + +; 486 00:44:41,850 --> 00:44:48,650 >> Takže ďalší spôsob, ako robiť to, že sme slobodní zmeniť položku, 487 00:44:48,650 --> 00:44:54,070 ale to nezmení náš pôvodné pole. 488 00:44:54,070 --> 00:44:59,720 Ale ak budeme používať k, ktorý je naším kľúčovým, potom môžeme len index do nášho poľa pomocou, že kľúč 489 00:44:59,720 --> 00:45:01,530 a zvýšiť že. 490 00:45:01,530 --> 00:45:05,410 Tento viac priamo modifikuje našu pôvodnú ponuku. 491 00:45:05,410 --> 00:45:10,690 Dokonca si môžete urobiť, že ak z nejakého dôvodu chceli schopnosť upravovať - 492 00:45:10,690 --> 00:45:13,510 Vlastne, to je úplne rozumné. 493 00:45:13,510 --> 00:45:16,020 Nechcel si musieť napísať $ array [$ k] + +, 494 00:45:16,020 --> 00:45:27,890 ste len chcel napísať $ item + +, ale stále chcel povedať if ($ k === '") 495 00:45:27,890 --> 00:45:30,620 potom prírastok položku a potom vytlačiť našu ponuku. 496 00:45:30,620 --> 00:45:36,290 Tak čo teraz očakávame print_r robiť? Aké hodnoty by mali byť vytlačené? 497 00:45:36,290 --> 00:45:43,770 [Študent] 2 a 10. >> [Bowden] Iba v prípade, že kľúč bol "" my skutočne vytlačiť, že. 498 00:45:51,940 --> 00:45:55,670 >> Pravdepodobne ste veľmi zriedka, ak vôbec, bude musieť definovať funkcie v PHP, 499 00:45:55,670 --> 00:46:03,370 ale môžete vidieť niečo podobné, kde môžete definovať funkciu ako funkcia čokoľvek. 500 00:46:03,370 --> 00:46:09,900 Obvykle by ste povedal ($ foo, $ bar) a potom ho definovať ako niečo, čo. 501 00:46:09,900 --> 00:46:17,580 Ale keď som to, potom to znamená, že bez ohľadu na volanie čokoľvek, 502 00:46:17,580 --> 00:46:25,110 bez ohľadu na volanie baz, takže prvý argument odovzdaný baz možné zmeniť. 503 00:46:25,110 --> 00:46:38,100 Poďme urobiť $ foo + +; 504 00:46:38,100 --> 00:46:48,020 a vnútri tu ideme BAZ ($ item); 505 00:46:48,020 --> 00:46:52,250 Teraz sme volanie funkcie. 506 00:46:52,250 --> 00:46:56,780 Argument je zhotovená odkazom, čo znamená, že ak zmeníme ho 507 00:46:56,780 --> 00:47:00,390 sme úpravou vec, ktorá bola odovzdaná dovnútra 508 00:47:00,390 --> 00:47:04,420 A tlač to očakávame - ak som zpackal syntax - máme 2, 11, 509 00:47:04,420 --> 00:47:06,300 takže to bolo vlastne zvýši. 510 00:47:06,300 --> 00:47:08,790 Všimnite si, že potrebujeme odkazy v 2 miestach. 511 00:47:08,790 --> 00:47:13,050 Čo keď som to urobil? Čo to znamená? 512 00:47:13,050 --> 00:47:15,810 [Študent] sa zmení. Jo >>. 513 00:47:15,810 --> 00:47:18,290 Položka je len kópia hodnoty v poli. 514 00:47:18,290 --> 00:47:26,670 Takže bod sa zmení na 2, ale pole ['a'] bude stále 1. 515 00:47:26,670 --> 00:47:32,560 Alebo čo keď to urobím? 516 00:47:32,560 --> 00:47:39,260 Teraz položka je poslaný ako kópiu Baz. 517 00:47:39,260 --> 00:47:46,330 Takže kópie argumentu bude zvýšený na 2, 518 00:47:46,330 --> 00:47:49,240 ale bod sám bol nikdy zvýšený 2. 519 00:47:49,240 --> 00:47:52,880 A položka je to isté ako pole držiaku čokoľvek, 520 00:47:52,880 --> 00:47:55,380 takže pole bolo nikdy zvýšený. 521 00:47:55,380 --> 00:47:57,960 Takže obe tieto miesta potrebujú. 522 00:47:57,960 --> 00:48:03,830 >> PHP je obvykle docela šikovný o tom. 523 00:48:03,830 --> 00:48:06,570 Môžete si myslieť, chcem odovzdať odkazom - 524 00:48:06,570 --> 00:48:09,560 Toto bolo vlastne otázka na jednom z psets. 525 00:48:09,560 --> 00:48:14,480 Bola to questions.txt vec, kde sa hovorí, 526 00:48:14,480 --> 00:48:19,280 Prečo by sa chcete odovzdať túto struct odkazom? 527 00:48:19,280 --> 00:48:21,250 Čo bolo odpoveď na túto otázku? 528 00:48:21,250 --> 00:48:25,100 [Študent] Takže nemusíte kopírovať niečo veľké. Jo >>. 529 00:48:25,100 --> 00:48:32,920 Struct môže byť ľubovoľne veľký, a keď miniete struct sa ako argument 530 00:48:32,920 --> 00:48:36,800 je potrebné, aby skopírujte celý struct odovzdať ho do funkcie, 531 00:48:36,800 --> 00:48:40,410 vzhľadom k tomu, ak ste práve odovzdať struct odkazom 532 00:48:40,410 --> 00:48:46,530 potom to jednoducho musí kopírovať 4-byte adresy ako argument funkcie. 533 00:48:48,520 --> 00:48:52,320 PHP je trochu múdrejší než to. 534 00:48:52,320 --> 00:49:00,650 Ak mám nejakú funkciu a odovzdám do neho rad 1000 vecí, 535 00:49:00,650 --> 00:49:03,990 Znamená to, že to bude musieť skopírovať všetky 1000 z tých vecí 536 00:49:03,990 --> 00:49:10,450 odovzdať do funkcie? Nemusí k tomu, že okamžite. 537 00:49:10,450 --> 00:49:15,940 Ak je vo vnútri tejto funkcie vlastne nikdy upravuje foo, 538 00:49:15,940 --> 00:49:22,660 takže if ($ foo === 'hello') return true.; 539 00:49:22,660 --> 00:49:26,460 Všimnite si, že vlastne nikdy zmenená argument vnútri tejto funkcie, 540 00:49:26,460 --> 00:49:30,010 čo znamená, že všetko, čo bolo odovzdaná ako foo nikdy, je potrebné skopírovať 541 00:49:30,010 --> 00:49:32,100 pretože to nie je jeho úpravu. 542 00:49:32,100 --> 00:49:39,240 Takže cesta PHP funguje, je argumenty sú vždy odovzdané odkazom 543 00:49:39,240 --> 00:49:42,170 kým sa skutočne snaží modifikovať. 544 00:49:42,170 --> 00:49:51,160 Teraz keď poviem, že $ foo + +, to bude teraz vytvoriť kópiu pôvodného foo a upraviť kópiu. 545 00:49:51,160 --> 00:49:53,090 To šetrí čas. 546 00:49:53,090 --> 00:49:58,210 Ak ste nikdy dotýkať túto masívne pole, ste vlastne nikdy zmeniť to, 547 00:49:58,210 --> 00:50:02,360 nie je potrebné, aby sa kópia, 548 00:50:02,360 --> 00:50:06,640 vzhľadom k tomu, či sme len dať túto ampersand To znamená, že nie je ani kopírovať 549 00:50:06,640 --> 00:50:08,640 aj keď sa to zmeniť. 550 00:50:08,640 --> 00:50:10,680 Toto správanie sa nazýva copy-on-write. 551 00:50:10,680 --> 00:50:17,380 Uvidíte ho aj na iných miestach, najmä ak užívate operačného systému kurz. 552 00:50:17,380 --> 00:50:23,880 Copy-on-write je celkom obvyklý vzor, ​​kde si nemusíte robiť kópie niečo 553 00:50:23,880 --> 00:50:26,650 ak je to skutočne mení. Jo. 554 00:50:26,650 --> 00:50:29,520 [Študent] Čo keby ste mali prírastok vnútri testu, 555 00:50:29,520 --> 00:50:33,700 tak len 1 prvok z 1000 by bolo treba zmeniť? 556 00:50:33,700 --> 00:50:38,770 Nie som si istý. 557 00:50:38,770 --> 00:50:51,250 Myslím, že by skopírovať celú vec, ale je možné, že je dosť šikovný, aby - 558 00:50:51,250 --> 00:51:00,020 Vlastne, čo si myslím, je predstaviť sme mali pole, ktoré vyzerá takto: $ pole2 = [ 559 00:51:00,020 --> 00:51:11,000 Potom index "a" je pole [1 2 3 4], a index "b" je pole čokoľvek. 560 00:51:11,000 --> 00:51:15,380 Musím čiarky medzi všetkými z nich. Predstavte si, že tam sú čiarky. 561 00:51:15,380 --> 00:51:21,210 Potom 'c' je hodnota 3. 562 00:51:24,210 --> 00:51:26,290 Dobre. 563 00:51:26,290 --> 00:51:33,440 Teraz povedzme, že my $ baz ($ pole2); 564 00:51:33,440 --> 00:51:36,540 kde baz neberie to odkazom. 565 00:51:43,510 --> 00:51:47,370 Takže $ foo ['c'] + +; 566 00:51:47,370 --> 00:51:52,340 To je taký príklad, kedy sme okolo pole2 ako argument 567 00:51:52,340 --> 00:51:57,010 a potom sa menia v konkrétnej index poľa o zvyšovaní ju. 568 00:51:57,010 --> 00:52:01,090 Úprimne netuším, čo PHP sa chystá urobiť. 569 00:52:01,090 --> 00:52:07,200 To sa dá ľahko vytvoriť kópiu celého vec, ale ak je to šikovný, 570 00:52:07,200 --> 00:52:15,030 to bude kópie týchto kľúčov, kde to bude mať svoje odlišné hodnoty 571 00:52:15,030 --> 00:52:20,620 ale toto môže ešte poukázať na rovnaké pole 1,2,3,4 572 00:52:20,620 --> 00:52:22,320 a toto môže ešte poukázať na rovnaké pole. 573 00:52:22,320 --> 00:52:24,170 Budem iPad to. 574 00:52:28,900 --> 00:52:45,950 Míňame v tomto poli, kde ten chlap body 3, ten chlap body [1,2,3,4], 575 00:52:45,950 --> 00:52:51,350 ten chlap poukazuje na [34, ...] 576 00:52:51,350 --> 00:52:58,590 Teraz, keď sme okolo ho do baz, sme mení toto. 577 00:52:58,590 --> 00:53:03,550 Ak PHP je šikovný, to môže len robiť - 578 00:53:11,850 --> 00:53:18,230 Sme stále museli kopírovať nejakú pamäť, ale ak tam boli tieto obrovské vnorené subarrays 579 00:53:18,230 --> 00:53:21,560 sme nemuseli kopírovať tie. 580 00:53:21,560 --> 00:53:27,530 Ja neviem, či je to to, čo to robí, ale dokážem si predstaviť, že to robí. 581 00:53:29,050 --> 00:53:36,690 To je tiež docela veľkou výhodou C po PHP. 582 00:53:36,690 --> 00:53:40,320 >> PHP je život tak oveľa jednoduchšie pre mnoho vecí, 583 00:53:40,320 --> 00:53:45,060 ale tak nejako nemajú absolútne žiadnu predstavu, ako dobre to bude robiť 584 00:53:45,060 --> 00:53:52,530 pretože nemám potuchy, pod kapotou, keď je to robiť tieto kópie vecí, 585 00:53:52,530 --> 00:53:55,170 oh, je to, že bude konštantná časové kópie, 586 00:53:55,170 --> 00:54:01,140 je to len zmení 1 ukazovateľ, je to bude smiešne ťažké lineárne kópie? 587 00:54:01,140 --> 00:54:03,000 Čo keď to nemôže nájsť miesto? 588 00:54:03,000 --> 00:54:06,760 Je to potom treba spustiť upratovanie dostať niektoré viac priestoru? 589 00:54:06,760 --> 00:54:11,210 A garbage collection môže trvať ľubovoľne dlho. 590 00:54:11,210 --> 00:54:13,600 V C nemusíte mať strach o týchto veciach. 591 00:54:13,600 --> 00:54:19,780 Každý riadok, ktorý vám napísať môžete do značnej miery uvažovať o tom, ako to bude robiť. 592 00:54:26,800 --> 00:54:29,150 >> Poďme sa pozrieť späť na to. 593 00:54:35,400 --> 00:54:37,520 Ako príjemné je to, že nemusíte riešiť hašovacia funkcia, 594 00:54:37,520 --> 00:54:39,010 prepojené zoznamy, alebo niečo podobné, že? 595 00:54:39,010 --> 00:54:41,980 Vzhľadom k tomu, pracovať s hash tabuliek je tak ľahké teraz, tu je zábavná logická pracovať. 596 00:54:41,980 --> 00:54:45,920 Otvorte súbor s názvom unique.php a v ňom napísať program, PHP 597 00:54:45,920 --> 00:54:48,330 (Tiež známy ako "scenár"). 598 00:54:48,330 --> 00:54:55,700 Máme tendenciu volať im skripty, ak sú krátke veci, ktoré spustíte z príkazového riadku. 599 00:54:55,700 --> 00:55:02,950 V podstate, každý jazyk, ktorý nezostavujú, ale budete spustiť spustiteľný súbor 600 00:55:02,950 --> 00:55:05,920 na príkazovom riadku, môžete volať, že spustiteľný skript. 601 00:55:05,920 --> 00:55:08,510 Mohol by som rovnako dobre napísať program v jazyku C, ktorý to robí, 602 00:55:08,510 --> 00:55:12,300 ale nemyslím si, hovorím skript, pretože som sa prvýkrát skompilovať a spustiť binárku. 603 00:55:12,300 --> 00:55:15,480 Ale tento program PHP budeme volať skript. 604 00:55:15,480 --> 00:55:23,830 Alebo ak by sme ju napísal v roku Python alebo Perl alebo Node.js alebo niektorý z týchto vecí, 605 00:55:23,830 --> 00:55:26,500 by sme im hovoriť, že všetky skripty, pretože ich spustenie v príkazovom riadku 606 00:55:26,500 --> 00:55:30,040 ale nemáme skompilovať. 607 00:55:30,860 --> 00:55:33,400 Mohli by sme to celkom rýchlo. 608 00:55:36,960 --> 00:55:41,480 Nebudeme používať ArGV. Povedzme, fúkať cez to. 609 00:55:41,480 --> 00:55:45,730 Nazvime to jedinečné, napísať program. 610 00:55:45,730 --> 00:55:49,400 Môžete predpokladať, že vstup bude obsahovať jedno slovo na riadku. 611 00:55:49,400 --> 00:55:52,020 Vlastne, bude ArGV byť dosť triviálne použitie. 612 00:56:03,730 --> 00:56:06,720 unique.php. 613 00:56:08,550 --> 00:56:13,750 Prvá vec, ktorú najprv chceme zistiť, či sme boli vydaní 1 argument príkazového riadku. 614 00:56:13,750 --> 00:56:20,900 Rovnako ako by ste očakávať, že argc a ArGV v C, máme stále tie v PHP. 615 00:56:20,900 --> 00:56:33,900 Takže if ($ argc! == 2) potom nebudem zaoberať tlače správy alebo tak niečo. 616 00:56:33,900 --> 00:56:37,340 Ja budem len opustiť, chybový kód 1. 617 00:56:37,340 --> 00:56:41,340 Mohol by som tiež vrátiť 1. 618 00:56:41,340 --> 00:56:53,180 Zriedka v PHP ste v tomto stave, keď sme na - 619 00:56:53,180 --> 00:56:57,820 Obvykle ste vo funkcii nazýva funkcia volaná funkcia nazýva funkcie. 620 00:56:57,820 --> 00:57:02,070 A keď sa niečo pokazí a vy len chcete opustiť všetko úplne, 621 00:57:02,070 --> 00:57:05,680 exit len ​​ukončí program. 622 00:57:05,680 --> 00:57:08,160 To tiež existuje v C. 623 00:57:08,160 --> 00:57:10,700 Ak ste vo funkcii vo funkcii do funkcie vo funkcii 624 00:57:10,700 --> 00:57:17,540 a chcete len zabiť program, môžete volať exit a bude to jednoducho ukončiť. 625 00:57:17,540 --> 00:57:23,120 Ale v PHP je to ešte vzácnejšie, že sme na tejto najvyššej úrovni. 626 00:57:23,120 --> 00:57:26,090 Zvyčajne sme vnútri akési funkcie, preto ho označujeme východ 627 00:57:26,090 --> 00:57:29,650 tak, že sme sa nemuseli vracať do 1 vec, ktoré si potom uvedomí, že je chyba 628 00:57:29,650 --> 00:57:32,270 tak, že sa vráti až v prípade, že uznáva, že je to chyba. 629 00:57:32,270 --> 00:57:35,270 Nechceme, aby sa s tým vysporiadať, tak ukončite (1); 630 00:57:35,270 --> 00:57:38,240 return (1), v tomto prípade by bolo rovnocenné. 631 00:57:38,240 --> 00:57:44,000 >> Potom to, čo chceme otvoriť chceme fopen. 632 00:57:44,000 --> 00:57:46,760 Argumenty budú vyzerať dosť podobne. 633 00:57:46,760 --> 00:57:51,600 Chceme fopen ($ ArGV [1], a chceme ho otvoriť pre čítanie. 634 00:57:51,600 --> 00:57:55,720 , Ktorý vracia zdroj, ktorý ideme volať f 635 00:57:55,720 --> 00:58:02,180 To vyzerá dosť podobne, ako to robí C až nemáme hovoriť súbor *. 636 00:58:02,180 --> 00:58:06,170 Namiesto toho sme len povedať, $ f Dobre. 637 00:58:06,170 --> 00:58:17,190 Vlastne si myslím, že to dokonca nám dáva náznak ako na funkciu PHP s názvom súboru. PHP súboru. 638 00:58:17,190 --> 00:58:23,990 Čo to urobí, je prečítať si celý súbor do poľa. 639 00:58:23,990 --> 00:58:29,770 Nemusíte ani potreba fopen ho. Bude to urobí za vás. 640 00:58:37,450 --> 00:58:43,700 Takže $ lines = file ($ ArGV [1]); 641 00:58:43,700 --> 00:58:49,680 Teraz majú všetky riadky súboru sú v radoch. Teraz chceme zoradiť riadky. 642 00:58:49,680 --> 00:58:52,180 Ako môžeme radiť riadky? 643 00:58:52,180 --> 00:58:54,920 My triediť riadky. 644 00:58:54,920 --> 00:58:58,080 A teraz môžeme vytlačiť alebo čokoľvek iného. 645 00:58:58,080 --> 00:59:05,580 Pravdepodobne najjednoduchší spôsob je foreach ($ linky ako $ line) echo $ line; 646 00:59:05,580 --> 00:59:10,960 [Študent] Nebolo by dokonca sme prekročiť čiary odkazovanie niečo do druhu? 647 00:59:10,960 --> 00:59:28,850 To je miesto, kde by sa trochu možné definovať ako funkcia sort (& $ array). 648 00:59:28,850 --> 00:59:32,650 Pri volaní funkcie nechcete odovzdať odkazom. 649 00:59:32,650 --> 00:59:36,900 Je to funkcia, ktorá definuje to, ako že sa to ako referencie. 650 00:59:36,900 --> 00:59:40,900 To je vlastne presne to, čo sa stalo 651 00:59:40,900 --> 00:59:46,220 keď dáme všetko na našich serveroch, keď sme išli 5,3 až 5,4. 652 00:59:46,220 --> 00:59:53,800 Až do 5,4, to bolo úplne rozumné. 653 00:59:53,800 --> 00:59:58,740 Funkcia neočakáva to brať ako referenčné, ale môžete odovzdať ako referenčné 654 00:59:58,740 --> 01:00:02,860 takže ak funkcia sa stane upraviť, je to ešte upraviť. 655 01:00:02,860 --> 01:00:05,850 Ako 5,4, ste nemal robiť. 656 01:00:05,850 --> 01:00:11,740 Takže teraz jediný spôsob, ako odovzdať odkazom, ak je funkcia výslovne robí. 657 01:00:11,740 --> 01:00:19,840 Ak nechcete, aby sa ju zmeniť, potom sa budete musieť urobiť, $ copy = $ trate a priechod kópie. 658 01:00:19,840 --> 01:00:24,820 Takže teraz linky budú zachované a kópie sa zmení. 659 01:00:27,670 --> 01:00:31,460 php.unique.php. Možno som pokazil niečo vymyslieť. 660 01:00:31,460 --> 01:00:33,190 Neočakávaná "sort". 661 01:00:38,320 --> 01:00:43,850 Tam to bude niečo, čo to robí pre nás. 662 01:00:43,850 --> 01:00:45,820 Nie je to ani tam. 663 01:00:45,820 --> 01:00:52,140 Všimnite si, keď si prečítate v príručke, že prvý argument sa očakáva, že bude pole 664 01:00:52,140 --> 01:00:56,490 a trvalo odkazom. 665 01:00:58,160 --> 01:01:03,540 Prečo je tento sťažuje na mňa? Pretože mám túto funkciu druh stále tu, že nechcem. 666 01:01:03,540 --> 01:01:09,210 Dobre, php.unique.php. Nechcel som odovzdať argument, pretože nemám súbor. 667 01:01:09,210 --> 01:01:13,560 Je to php.unique.php na test.php. 668 01:01:13,560 --> 01:01:19,080 Tu je test.php všetko vytlačiť v peknej zoradené poradí. 669 01:01:19,080 --> 01:01:24,600 Všimnite si, že sú zoradené poriadok je trochu divné pre kód súboru 670 01:01:24,600 --> 01:01:27,460 pretože všetky naše prázdne riadky budú na prvom mieste 671 01:01:27,460 --> 01:01:30,190 potom sa príde všetkým našim 1 level vrúbkovaním 672 01:01:30,190 --> 01:01:33,360 potom príď všetky naše bez zárezov. 673 01:01:33,360 --> 01:01:38,620 Jo. >> [Študent] Tak zdrojového kódu nebola odovzdaná odkazom? 674 01:01:38,620 --> 01:01:42,240 Je to, že všeobecne predávané hodnotou? 675 01:01:42,240 --> 01:01:50,240 [Bowden] Keď zavoláte funkciu, nikdy určuje, či bol prijatý odkazom. 676 01:01:50,240 --> 01:01:53,960 Je to definícia funkcie, ktorá určuje, či bol prijatý odkazom. 677 01:01:53,960 --> 01:01:59,450 A pri pohľade na funkcie definíciu druhu, alebo len pri pohľade na to, 678 01:01:59,450 --> 01:02:02,820 trvá argumentu odkazom. 679 01:02:02,820 --> 01:02:07,160 Takže bez ohľadu na to, či chcete, aby ju pomocou odkazu, robí si to odkazom. 680 01:02:07,160 --> 01:02:10,200 Upravuje poľa v mieste. 681 01:02:10,200 --> 01:02:17,400 To je jednoducho nie je povolené. Nemáte oprávnenie k tomu. >> [Študent] Oh, dobre. 682 01:02:17,400 --> 01:02:22,410 [Bowden] Toto, sort bude trvať linky s odkazom a upraviť ju. 683 01:02:22,410 --> 01:02:26,850 A opäť, ak ste nechceli, aby robil to, že by ste mohli urobiť kópiu druhu. 684 01:02:26,850 --> 01:02:35,850 Aj v tomto prípade, kópie nie je v skutočnosti kópia liniek. 685 01:02:35,850 --> 01:02:40,620 Je to len ukazuje na rovnakú vec, kým to najprv dostane upravené, 686 01:02:40,620 --> 01:02:44,430 kde to sa najprv dostať upravená v triedení funkcie, 687 01:02:44,430 --> 01:02:50,940 kde, pretože je to kopírovanie pri zápise, teraz kópia kópia sa bude vykonaná. 688 01:02:57,500 --> 01:03:04,250 Môžete si tiež urobiť. To je ďalšie miesto, kde môžete vidieť ampersand. 689 01:03:04,250 --> 01:03:07,190 Vidíte to vo slučkách foreach, môžete vidieť v deklarácie funkcie, 690 01:03:07,190 --> 01:03:10,040 a uvidíte, keď práve priraďovanie premenných. 691 01:03:10,040 --> 01:03:12,350 Teraz sme dosiahli nič a vďaka tomu 692 01:03:12,350 --> 01:03:15,600 pretože kopírovanie a linky sú doslova to isté. 693 01:03:15,600 --> 01:03:19,940 Môžete použiť riadky a skopírovať zameniteľne. 694 01:03:19,940 --> 01:03:25,430 Môžete to urobiť unset ($ kópiu), a že nie je unset linky, 695 01:03:25,430 --> 01:03:29,120 môžete len stratiť svoj odkaz na rovnakú vec. 696 01:03:29,120 --> 01:03:33,440 Tak ako tohto bodu, teraz vedenie je jediný spôsob, ako môžete pristupovať riadky. 697 01:03:36,450 --> 01:03:38,770 >> Otázky? 698 01:03:41,000 --> 01:03:42,460 Jo. 699 01:03:42,460 --> 01:03:45,880 [Študent] Úplne mimo témy, ale nemusíte uzavrieť PHP s - >> Ty nie. 700 01:03:45,880 --> 01:03:47,730 Dobre. 701 01:03:47,730 --> 01:03:53,790 [Bowden] by som ísť až tak ďaleko, že hovoria, že je to zlé prax ukončiť. 702 01:03:53,790 --> 01:03:57,580 To je asi prehnané, najmä v skripte, 703 01:03:57,580 --> 01:04:03,740 ale uvidíme, čo sa stane, keď urobím toto. 704 01:04:03,740 --> 01:04:08,890 To neurobil nič. Čo keď som chcel - [povzdychne si] 705 01:04:13,870 --> 01:04:16,960 Musím odovzdať argument. 706 01:04:19,000 --> 01:04:22,050 Shoot. Volal som to zle. 707 01:04:24,340 --> 01:04:28,310 Takže php.unique.php s argumentom. 708 01:04:28,310 --> 01:04:30,980 Teraz nemám ani potrebovať. 709 01:04:34,520 --> 01:04:37,740 Odovzdám to platný argument. 710 01:04:37,740 --> 01:04:42,050 Táto tlačená, čo je to tlač. 711 01:04:45,260 --> 01:04:50,080 Som tlače kópie a kópie neexistuje. Tak linky. 712 01:04:53,650 --> 01:04:58,270 Je vytlačená všetko, a potom zistíte všetky tieto krámy tu, 713 01:04:58,270 --> 01:05:06,690 pretože v ničom PHP, ktorý je mimo PHP tagy 714 01:05:06,690 --> 01:05:09,520 je len tak byť vytlačené doslova. 715 01:05:09,520 --> 01:05:18,050 To je dôvod, prečo HTML, je to tak pekné, že môžem robiť div bla, bla, bla triedu alebo čokoľvek, 716 01:05:18,050 --> 01:05:25,140 bla, bla, bla a potom urobiť nejaké PHP kód a potom vykonajte koniec div. 717 01:05:25,140 --> 01:05:36,460 A teraz tlače to budem mať pekné div sa hore, všetko, čo PHP tlačený, div na dne. 718 01:05:36,460 --> 01:05:43,510 Katastrofálne, keď sa niečo také stane, čo je celkom bežné, 719 01:05:43,510 --> 01:05:47,930 len stratená riadok v dolnej časti súboru. 720 01:05:47,930 --> 01:05:50,940 Tie by si, že to by bolo, že veľký problém 721 01:05:50,940 --> 01:05:58,660 kým vezmete do úvahy fakt, že s prehliadačmi - 722 01:05:58,660 --> 01:06:03,880 >> Ako presmeruje práci alebo v podstate akékoľvek hlavičke práce, 723 01:06:03,880 --> 01:06:07,980 keď si pripojenie k webovému serveru a odošle späť všetky tieto hlavičky a veci 724 01:06:07,980 --> 01:06:12,020 ako reakciu 200 alebo reakcie presmerovanie alebo čokoľvek, 725 01:06:12,020 --> 01:06:18,230 hlavičke sú platné iba do prvej bajt dát je odoslaný. 726 01:06:18,230 --> 01:06:23,140 Môžete presmerovať tisíckrát, ale akonáhle prvý bajt dát je odoslaný 727 01:06:23,140 --> 01:06:26,120 ste nemal k presmerovanie znova. 728 01:06:26,120 --> 01:06:31,860 >> Ak sa majú rozptylové riadok v dolnej časti súboru 729 01:06:31,860 --> 01:06:37,260 a povedzme, že ste túto funkciu použiť, a potom chcete - 730 01:06:41,580 --> 01:06:52,870 Povedzme, že je to ďalší súbor, ktorý je index.php a require_once niečo - 731 01:06:52,870 --> 01:06:56,920 Ja si nemyslím, že je dobrý príklad toho. 732 01:06:56,920 --> 01:07:04,740 Problém sa stane, keď dostane zopakoval tento riadok v dolnej časti. 733 01:07:04,740 --> 01:07:08,660 Nemusíte mať nič spoločné boli rezonovať ešte. 734 01:07:10,820 --> 01:07:15,700 Aj keď ste nemali v úmysle na nič dostať ozývalo, to niečo dostať ozvenou 735 01:07:15,700 --> 01:07:17,990 a tak teraz ste nemal posielať žiadne ďalšie záhlavia 736 01:07:17,990 --> 01:07:20,030 a budete sa sťažností. 737 01:07:22,170 --> 01:07:24,420 Jednoducho nie je potrebné tieto uzatváracie tagy. 738 01:07:24,420 --> 01:07:27,420 Ak máte v pláne na tom niečo s HTML - 739 01:07:27,420 --> 01:07:30,490 a je to úplne rozumné urobiť tu div čokoľvek 740 01:07:30,490 --> 01:07:39,450 a potom na tomto mieste si môžete alebo nemôžete zahrnúť. 741 01:07:39,450 --> 01:07:41,590 To nezáleží. 742 01:07:41,590 --> 01:07:45,450 Ale v PHP skripty je to vzácne, zatvorte ho. 743 01:07:45,450 --> 01:07:50,400 Keď je všetko PHP, absolútne všetko, 744 01:07:50,400 --> 01:07:55,460 nemáte naozaj potrebujete zavrieť / by ste nemali zavrieť. 745 01:08:02,030 --> 01:08:05,720 >> Rokovania s reťazcami je oveľa krajší, ako v C. 746 01:08:05,720 --> 01:08:09,470 V PHP môžete zadať reťazec s jednoduchými alebo dvojitými úvodzovkami. 747 01:08:09,470 --> 01:08:12,820 S jednoduchými úvodzovkami nie je možné použiť "escape" sekvencie. 748 01:08:12,820 --> 01:08:17,640 Neustále uniknúť, bla, bla, bla. 749 01:08:19,920 --> 01:08:24,010 Takže printf je veľmi vzácny v PHP. 750 01:08:24,010 --> 01:08:32,290 Myslím, že by som použil printf keby som chcel urobiť také veci - v PSet 5, ktorú ste použili sprintf alebo čokoľvek iného. 751 01:08:32,290 --> 01:08:36,060 Ale vy chcete robiť 001.jpg 002.jpg a 752 01:08:36,060 --> 01:08:40,300 Takže pre tento druh vecí, kde som vlastne chcieť naformátovať text by som použiť printf. 753 01:08:40,300 --> 01:08:44,689 Ale inak by som jednoducho použiť zreťazenie. 754 01:08:44,689 --> 01:08:47,000 Nikdy som použiť printf. 755 01:08:49,229 --> 01:09:00,170 Sme len rozlišovať detaily medzi apostrofy a dvojité úvodzovky. 756 01:09:00,170 --> 01:09:07,490 Najväčší rozdiel je, že jednoduché úvodzovky, bude vytlačený doslova. 757 01:09:07,490 --> 01:09:15,390 Tam je žiadny znak typu dát v PHP, na rozdiel od C, takže to je ekvivalentná to. 758 01:09:15,390 --> 01:09:17,970 Sú oba reťazce. 759 01:09:17,970 --> 01:09:29,180 A pekná vec o jednotlivých citátom reťazcov je, že som mohla povedať "ahoj svet!" bla, bla, bla, 760 01:09:29,180 --> 01:09:33,340 $ $ Wooo. 761 01:09:33,340 --> 01:09:38,260 Čo sa stane, keď som tlačiť je, že bude tlačiť to doslova. 762 01:09:38,260 --> 01:09:40,680 Poďme sa zbaviť všetkých našich vecí. 763 01:09:40,680 --> 01:09:44,700 Takže echo $ str1; 764 01:09:48,569 --> 01:09:56,570 Je to doslova tlačenej všetky tie veci: znaky dolára, 765 01:09:56,570 --> 01:09:58,770 Spätné lomítko n, ktoré by ste myslíte, že by bolo nové riadky - 766 01:09:58,770 --> 01:10:01,500 všetky tie veci sa vytlačí doslova. 767 01:10:01,500 --> 01:10:05,650 Jediná vec, ktorú potrebujete k úteku, sú jednoduché úvodzovky 768 01:10:05,650 --> 01:10:09,470 pretože inak by si, že to zatváranie apostrofy. 769 01:10:09,470 --> 01:10:15,050 Úvodzovky, úplne odlišné. 770 01:10:20,300 --> 01:10:25,870 Vidíme, že zvýrazňovanie syntaxe je cluing nás na to, čo je asi ísť hrozne zle. 771 01:10:25,870 --> 01:10:36,190 php.unique. Undefined variable: wooo, pretože to je interpretované ako premenná s názvom wooo. 772 01:10:36,190 --> 01:10:42,400 Úvodzovky vám vložiť premenné do - 773 01:10:42,400 --> 01:10:52,730 Povedzme, že $ name = "Rob"; 774 01:10:52,730 --> 01:10:58,020 Takže echo "Ahoj, moje meno je $ name!"; 775 01:10:58,020 --> 01:11:09,260 Uznáva to ako premenné. 776 01:11:09,260 --> 01:11:21,210 Keď bežím, že - a ja sa vloží nový riadok - Ahoj, moje meno je Rob! a hello world! 777 01:11:21,210 --> 01:11:24,910 To je preto, že som nikdy odstránený tlač wooo vyššie. 778 01:11:24,910 --> 01:11:30,020 K dispozícii je 1 ďalší krok môžete urobiť. 779 01:11:30,020 --> 01:11:39,250 $ Pole = [1, 2, 3]; 780 01:11:39,250 --> 01:11:43,270 Čo keď chcem tlačiť prvý index poľa? 781 01:11:43,270 --> 01:11:45,150 Vy $ pole [0]. 782 01:11:45,150 --> 01:11:49,280 Na zvýraznenie syntaxe je stopa. Čo je to robiť? 783 01:11:52,320 --> 01:11:54,510 php.unique. 784 01:11:54,510 --> 01:11:59,860 Ahoj, moje meno je 1! čo nie je to, čo som chcel. 785 01:11:59,860 --> 01:12:05,050 Zvýraznenie syntaxe mi klamal. 786 01:12:05,050 --> 01:12:13,020 Skúsme'' -> 1, 'b' -> 2. 787 01:12:18,450 --> 01:12:21,440 To je, ako by som si to napísať. 788 01:12:26,350 --> 01:12:32,160 Neočakávaný apostrof (T_ENCAPSED bla, bla, bla, bla, bla). 789 01:12:32,160 --> 01:12:41,780 Myšlienka je, že to nie je to priznávame ako súčasť poľa. 790 01:12:41,780 --> 01:12:46,620 Je to priznávame ako pole indexované listom na. 791 01:12:46,620 --> 01:12:49,870 Ak chcete urobiť v zložených zátvorkách, 792 01:12:49,870 --> 01:12:54,730 a teraz, čo je v tomto rovnátka kučeravými bude interpolovať, 793 01:12:54,730 --> 01:13:00,340 čo je slovo, ktoré používame pre magicky vloženie týchto premenných do správnych miestach. 794 01:13:00,340 --> 01:13:04,280 Teraz robí, php.unique, a Ahoj, volám je 1! podľa očakávania 795 01:13:04,280 --> 01:13:07,720 alebo Ahoj, volám sa Rob! 796 01:13:14,110 --> 01:13:23,130 Jedna vec, ktorá je celkom pekné o jednotlivých citácií je, že - 797 01:13:23,130 --> 01:13:28,480 Tam je nejaký náklady na interpolačnou. 798 01:13:30,520 --> 01:13:35,100 Ak používate dvojité úvodzovky, interpret musí ísť cez tento reťazec, 799 01:13:35,100 --> 01:13:41,500 Uistite sa, že, "Oh, tu je premenná. Teraz musím ísť pre túto premennú a vložte ho sem." 800 01:13:41,500 --> 01:13:48,930 Aj keď nechcete používať žiadne premenné, 801 01:13:48,930 --> 01:13:52,220 nič vnútri týchto úvodzoviek musí byť prerušený, 802 01:13:52,220 --> 01:13:56,800 ale to bude ešte pomalšie, pretože je potrebné ísť cez úvodzoviek 803 01:13:56,800 --> 01:14:00,130 Hľadám veci, ktoré je potrebné interpolovať. 804 01:14:00,130 --> 01:14:05,360 Takže jediné citácie môže byť trochu rýchlejší, ak nemusí nič byť prerušený, 805 01:14:05,360 --> 01:14:15,650 a mám tendenciu používať aj jednoduché úvodzovky pre, "Ahoj, moje meno je". $ Array ['a'] rovnako. 806 01:14:15,650 --> 01:14:20,430 To sa deje za rovnocenné, čo sme mali predtým. 807 01:14:24,840 --> 01:14:28,440 Ale je to vec názoru. 808 01:14:28,440 --> 01:14:34,750 Ak používate PHP, pravdepodobne nezaujíma o rozdiele rýchlostí. 809 01:14:34,750 --> 01:14:39,480 Nie je dostatok rozum, von začať. 810 01:14:39,480 --> 01:14:43,030 >> Akékoľvek konečné otázky? 811 01:14:47,430 --> 01:14:51,710 >> My vlastne ani dostať cez to všetko, ale toto bola nuda. 812 01:14:51,710 --> 01:14:59,080 Posledná vec, ktorá je celkom pekné v PHP je, keď máte čo do činenia s HTML, 813 01:14:59,080 --> 01:15:06,450 budete používať to trochu, tak si pekné miestne syntaxe pre tlač premenné. 814 01:15:32,400 --> 01:15:36,730 Bez uvedenia PHP tu, toto je nazývané krátke tagy. 815 01:15:36,730 --> 01:15:44,330 Oficiálne od PHP 5.4, je zastaraný to. 816 01:15:44,330 --> 01:15:48,640 Je doporučené, aby php. 817 01:15:48,640 --> 01:15:55,770 Toto je aj naďalej podporovaná, takže krátke tagy s 01:16:02,480 To je v predvolenom nastavení podporuje, takže môžete použiť tieto, ako si prajete, a sú to celkom pohodlné. 819 01:16:02,480 --> 01:16:05,700 >> Nejaké otázky? 820 01:16:07,780 --> 01:16:09,270 Dobrá. 821 01:16:10,840 --> 01:16:13,800 >> Zostaňte prima, San Diego. 822 01:16:13,800 --> 01:16:16,070 [Smiech] 823 01:16:18,620 --> 01:16:22,660 Bye. [Smiech] 824 01:16:24,350 --> 01:16:28,470 [Potlesk] [smiech] 825 01:22:46,460 --> 01:22:49,460 >> [CS50.TV]