1 00:00:00,000 --> 00:00:02,610 [Powered by Google Translate] [Oddelek 8 - Več Udobna] 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 >> Te opombe oddelek teden se bo zelo kratek, 5 00:00:14,160 --> 00:00:19,070 tako da bom samo, da govorim, fantje se dogaja, da postavljajo vprašanja, 6 00:00:19,070 --> 00:00:22,720 in bomo poskušali napolniti toliko časa, kot je mogoče. 7 00:00:22,720 --> 00:00:31,950 Veliko ljudi misli, da je to pset ni nujno težak, vendar je zelo dolgo. 8 00:00:31,950 --> 00:00:37,070 Pset spec sam prevzame uro brati. 9 00:00:40,530 --> 00:00:45,730 Ponujamo vam veliko SQL lahko morebiti treba uporabiti. 10 00:00:45,730 --> 00:00:50,520 Mi lahko sprehodite skozi veliko tega, tako da ne bi smelo biti preveč slabo. 11 00:00:50,520 --> 00:00:54,560 Je kdo začel ali končal? 12 00:00:55,380 --> 00:00:59,710 To je zadnja pset. Oh, moj bog. 13 00:00:59,710 --> 00:01:05,400 Običajno je JavaScript 1 po tem, toda stvari se spreminjajo koledar 14 00:01:05,400 --> 00:01:09,560 naredi vse, kar je 1 teden krajši in ne bomo več imeli pset JavaScript. 15 00:01:09,560 --> 00:01:12,310 Ne vem, kako to vpliva, ali se bo Javascript pojavijo na izpit 16 00:01:12,310 --> 00:01:15,510 ali Kviz 1. 17 00:01:15,510 --> 00:01:22,260 Mislim, da bo nekaj takega, kar morate vedeti visoki ravni stvari o JavaScriptu, 18 00:01:22,260 --> 00:01:26,460 ampak dvomim, da bova samo vam ravno JavaScript kodo 19 00:01:26,460 --> 00:01:28,720 saj niste imeli pset v njem. 20 00:01:28,720 --> 00:01:33,000 Vendar pa bo to stvar za pregled kviz naslednji teden. 21 00:01:33,000 --> 00:01:36,320 >> Oddelek vprašanj. 22 00:01:36,320 --> 00:01:43,870 Veliko teh stvari je nekoliko slabo oblikovan, vendar bomo razpravljali, zakaj. 23 00:01:43,870 --> 00:01:50,220 Za razliko od C, PHP je "dinamično vnešeno" jezik. Kaj to pomeni, boste vprašali? 24 00:01:50,220 --> 00:01:53,830 No, da se poslovite od vseh teh char, float, int in drugih ključnih besed, morate uporabiti 25 00:01:53,830 --> 00:01:56,190 ob prijavi spremenljivke in funkcije v C. 26 00:01:56,190 --> 00:02:00,420 V PHP, je spremenljivka tipa je določena z vrednostjo, ki jih sedaj v rokah. 27 00:02:00,420 --> 00:02:04,990 Torej, preden vnesete to kodo v datoteko z imenom dynamic.php, 28 00:02:04,990 --> 00:02:12,670 PHP je dinamično vnesli. To je res. 29 00:02:12,670 --> 00:02:17,590 Ne strinjam se s tem, da to pomeni, da smo poslavlja od char, float, int 30 00:02:17,590 --> 00:02:20,620 in druge ključne besede. 31 00:02:20,620 --> 00:02:25,510 Razlika je med dinamično tipkal in podredno, 32 00:02:25,510 --> 00:02:32,010 , ki je statično vnesli, je, da dinamično tipizira vse vaše vrste preverjanja in podobno 33 00:02:32,010 --> 00:02:37,350 se zgodi v času izvajanja, ker statično vnesli to zgodi v času prevajanja. 34 00:02:37,350 --> 00:02:43,030 Beseda statična na splošno se zdi, da pomeni reči času prevajanja. 35 00:02:43,030 --> 00:02:48,170 Mislim, da obstajajo drugi načini za to, ampak v C, ko izjavi, statične spremenljivke, 36 00:02:48,170 --> 00:02:52,650 njihovo skladiščenje se dodeli v času prevajanja. 37 00:02:52,650 --> 00:02:59,260 Tukaj dinamično vnesli samo pomeni, da - 38 00:02:59,260 --> 00:03:04,350 V C, če boste poskušali dodati vrvico in celo število, ko jo pripravijo, 39 00:03:04,350 --> 00:03:11,000 to se dogaja, da se pritožijo, ker je hotel reči, da ne morete dodati int in kazalec. 40 00:03:11,000 --> 00:03:14,710 To preprosto ni veljavna operacija. 41 00:03:14,710 --> 00:03:21,170 To je še ena stvar, ki jo bomo obravnavali v sekundi. 42 00:03:21,170 --> 00:03:24,860 Ampak to je vrsta preverjanja, da se pritoži na prevajanju času, 43 00:03:24,860 --> 00:03:29,220 je statično preverjanje tipov. 44 00:03:29,220 --> 00:03:35,220 Obstajajo jezikov, kjer vam ni treba reči, char, float, int, in vse te stvari, 45 00:03:35,220 --> 00:03:40,940 vendar lahko povem iz jezika okviru kakšne stvari je, da naj bi se, 46 00:03:40,940 --> 00:03:43,980 vendar je še vedno v mirovanju tipkal. 47 00:03:43,980 --> 00:03:49,000 Torej, če ste vzeli 51, OCaml vam nikoli ni treba uporabiti katero od teh vrst, 48 00:03:49,000 --> 00:03:58,700 vendar je še vedno bo v času prevajanja rekel, da tega ne more storiti, ker ste mešanje int in niz. 49 00:03:58,700 --> 00:04:05,650 Dinamično vnesli samo pomeni, da nekje med vožnjo času boš dobil odgovor na pritožbo. 50 00:04:05,650 --> 00:04:13,430 Če ste tudi Java, preden se na splošno skoraj vse tipa C jezik 51 00:04:13,430 --> 00:04:20,070 se bo statično vnesli, zato so C, C + +, Java, vsi so navadno statično natipkan. 52 00:04:20,070 --> 00:04:22,910 V Java, ko zbere nekaj in pravite 53 00:04:22,910 --> 00:04:26,670 Niz je enak novo nekaj, kar ni niz, 54 00:04:26,670 --> 00:04:28,950 da se dogaja, da se pritožijo, ker so ti tipi pač ne ujemajo. 55 00:04:28,950 --> 00:04:31,180 To se dogaja, da se pritožijo v času prevajanja. 56 00:04:31,180 --> 00:04:36,750 Vendar pa ima tudi nekaj dinamičnega časa, stvari všeč, če poskusite, da odda nekaj 57 00:04:36,750 --> 00:04:40,500 s tipom, ki je bolj natančen kot sedanji tip, 58 00:04:40,500 --> 00:04:45,610 nič lahko storite v času prevajanja, da preveri, ali je ta zasedba bo uspelo. 59 00:04:45,610 --> 00:04:51,130 Java ima tudi dinamično preverjanje, da takoj, ko pride do te vrstice kode 60 00:04:51,130 --> 00:04:54,130 ko se je dejansko izvajanje, da se bo to litine, 61 00:04:54,130 --> 00:04:56,260 preverite, če je to cast je bila veljavna na prvem mestu, 62 00:04:56,260 --> 00:04:59,890 in če ne bi bilo, potem se dogaja, da se pritožujejo, da ste neveljavno vrsto. 63 00:04:59,890 --> 00:05:03,200 Dinamični tip preverjanje. 64 00:05:03,200 --> 00:05:07,010 Vnesite to v datoteko z imenom dynamic.php. 65 00:05:10,130 --> 00:05:12,380 Dynamic.php. 66 00:05:14,580 --> 00:05:17,190 Jaz bom to unzip oblikovanje. 67 00:05:18,750 --> 00:05:21,880 Imamo spremenljivko, jo nastavite na celo 7, 68 00:05:21,880 --> 00:05:27,930 potem bomo natisniti in ga% s - 69 00:05:27,930 --> 00:05:32,830 Oh, smo tiskanje na vrsto to, da gettype vrača vrsto spremenljivke. 70 00:05:32,830 --> 00:05:35,720 Mi smo samo tiskanje na vrsto znova in znova. 71 00:05:35,720 --> 00:05:39,440 Pravkar smo php.dynamic.php. 72 00:05:39,440 --> 00:05:45,920 Bomo videli, da se spremeni iz celega števila v niz z logičnim, kot smo šli skozi. 73 00:05:45,920 --> 00:05:54,590 V C ni logično vrsto podatkov, ni niz vrste podatkov. 74 00:05:54,590 --> 00:06:00,500 Tukaj je char * in logično samo kaže, da je int ali char ali kaj podobnega. 75 00:06:00,500 --> 00:06:05,690 V PHP te vrste obstajajo, in to je ena od velikih prednosti PHP nad C - 76 00:06:05,690 --> 00:06:13,290 da niz operacij, so neskončno lažje kot v PHP C. Samo delo. 77 00:06:13,290 --> 00:06:18,290 >> Tako smo prišli nazaj. 78 00:06:18,290 --> 00:06:21,260 Zmanjkalo nam dynamic.php. 79 00:06:21,260 --> 00:06:26,710 To pove PHP tolmača, PHP teči PHP kode v dynamic.php. 80 00:06:26,710 --> 00:06:30,250 Če imate kakršne koli napake v datoteki, bo tolmač vam povem! 81 00:06:30,250 --> 00:06:39,110 Tolmač je to še ena velika razlika med PHP in C. 82 00:06:39,110 --> 00:06:48,200 V C morate zbrati nekaj in potem zaženete to prevedeno datoteko. 83 00:06:48,200 --> 00:06:50,490 V PHP nikoli ne pripravijo ničesar. 84 00:06:50,490 --> 00:06:57,200 Torej tolmač PHP v bistvu samo branju tega po vrsticah. 85 00:06:57,200 --> 00:07:02,900 Zadene var = 7, potem udari printf potem udari var potem udari printf in tako naprej. 86 00:07:02,900 --> 00:07:10,910 Obstaja malo priprave to počne, in shranjuje rezultate 87 00:07:10,910 --> 00:07:15,510 tako da, če zaženete skript kasneje lahko narediš nekaj, 88 00:07:15,510 --> 00:07:19,280 ampak v bistvu je to linija uredi po liniji stvari. 89 00:07:19,280 --> 00:07:25,280 To pomeni, da veliko od optimizacije, da smo dobili v C, 90 00:07:25,280 --> 00:07:31,920 kot prevajanje, saj je samo na splošno prevajalnik lahko naredite veliko trikov za vas. 91 00:07:31,920 --> 00:07:36,110 To lahko traja od neuporabljenih spremenljivk, lahko to storite vse te vrste stvari, 92 00:07:36,110 --> 00:07:38,660 to lahko storite rep rekurzijo. 93 00:07:38,660 --> 00:07:42,550 V PHP ne boš, da se da prednost 94 00:07:42,550 --> 00:07:45,690 saj je le, da bo za začetek izvršitve po vrsticah z vrvico, 95 00:07:45,690 --> 00:07:49,950 in v resnici ne priznajo te stvari tako enostavno 96 00:07:49,950 --> 00:07:54,440 saj ni 1 velika zbirka izkaznica nad stvarjo in nato izvedba; 97 00:07:54,440 --> 00:07:56,860 to je samo po vrsticah. 98 00:08:00,730 --> 00:08:02,750 Tako, da je tolmač. 99 00:08:02,750 --> 00:08:06,840 >> Nazaj na naši dinamično tipkanje: kul, kaj? 100 00:08:06,840 --> 00:08:08,640 Vi zagotovo ne bi mogla v C! 101 00:08:08,640 --> 00:08:11,860 Zdaj vidim, če lahko ugotovimo tip vsake od naslednjih vrednosti. 102 00:08:11,860 --> 00:08:14,760 Oglejte si to za referenco. 103 00:08:14,760 --> 00:08:19,420 Tako 3.50. Kakšne vrste misliš, da bo še? 104 00:08:24,480 --> 00:08:26,370 Tu so vrste, ki jih imamo. 105 00:08:26,370 --> 00:08:30,430 Imamo bools, cela števila, plavajoče točk, nizi, nizi, predmeti, 106 00:08:30,430 --> 00:08:38,370 in nato sredstva, ki jih je malo nejasen. 107 00:08:38,370 --> 00:08:41,010 Mislim, da je dejansko primer tukaj. 108 00:08:41,010 --> 00:08:43,740 Potem je tu še NULL. NULL je posebna vrsta. 109 00:08:43,740 --> 00:08:47,140 Za razliko od C, če je le NULL kazalec z naslovom 0, 110 00:08:47,140 --> 00:08:54,930 v PHP, NULL je svojo vrsto, kjer je edina stvar, ki veljajo za ta tip je NULL. 111 00:08:57,560 --> 00:09:00,670 To je veliko bolj uporaben za preverjanje napak. 112 00:09:00,670 --> 00:09:04,310 V C, kjer smo imeli ta problem, kjer, če se vrne NULL, 113 00:09:04,310 --> 00:09:08,660 to pomeni, da ste vrne NULL NULL kazalec ali uporabo, ki označuje napako 114 00:09:08,660 --> 00:09:12,380 ali vse te zmede smo imeli na enem mestu. 115 00:09:12,380 --> 00:09:18,440 Tukaj se vračamo NULL običajno pomeni napako. 116 00:09:20,860 --> 00:09:27,300 Veliko stvari tudi vrne false za napake. 117 00:09:27,300 --> 00:09:33,140 Toda točka je NULL tipa, edina stvar NULL NULL tipa. 118 00:09:33,140 --> 00:09:40,090 Nato je kot klic lahko določite nekaj anonimnih funkcij. 119 00:09:40,090 --> 00:09:46,420 Saj ni treba, da bi funkcijo, ime, vendar pa vam ne bo treba ukvarjati s tem tukaj. 120 00:09:46,420 --> 00:09:53,940 Če pogledamo na vrste, ki jih ne pričakujemo, da bi vedeli, 121 00:09:53,940 --> 00:09:59,000 Kaj misliš, da je tip 3,50 je? >> [Študent] Float. 122 00:09:59,000 --> 00:10:00,370 Ja. 123 00:10:00,370 --> 00:10:06,290 Torej tukaj, kaj misliš, da je tip je to? >> [Študent] Array. 124 00:10:06,290 --> 00:10:09,890 Ja. Prvi je bil plovec, drugi pa je matrika. 125 00:10:09,890 --> 00:10:14,500 Vedite, da je ta matrika ne kot niz C 126 00:10:14,500 --> 00:10:19,610 če imate indeks 0 ima neko vrednost, indeks 1 ima neko vrednost. 127 00:10:19,610 --> 00:10:26,320 Tu so indeksi so a, b in c ter vrednosti 1, 2, in 3. 128 00:10:26,320 --> 00:10:33,980 V PHP ni razlike med asociativni niz in le periodično razporejenimi 129 00:10:33,980 --> 00:10:36,740 kot bi si mislili o njej C. 130 00:10:36,740 --> 00:10:43,040 Obstaja samo to, in pod pokrovom redno matrika je samo asociativno polje 131 00:10:43,040 --> 00:10:50,000 kjer je 0 zemljevidi do neke vrednosti enak način, kot se preslika v neko vrednost. 132 00:10:50,000 --> 00:11:00,410 Zaradi tega lahko PHP je zelo slabo za res hitre kode / benchmarking stvari 133 00:11:00,410 --> 00:11:07,930 ker je v C, ko boste uporabljali niz veste, da dostop do člana konstanten čas. 134 00:11:07,930 --> 00:11:11,860 V PHP dostop član je, kdo ve, koliko časa? 135 00:11:11,860 --> 00:11:18,970 Verjetno je konstantna, če jih hashes pravilno. 136 00:11:18,970 --> 00:11:21,620 Kdo ve, kaj se je v resnici počne pod pokrovom? 137 00:11:21,620 --> 00:11:25,600 Res je treba gledati z izvajanjem da vidite, kako se bo ukvarjal s tem. 138 00:11:25,600 --> 00:11:28,550 Torej fopen. 139 00:11:28,550 --> 00:11:36,420 Mislim, da sem kaj je samo PHP priročnik fopen pogled na povratni tipa. 140 00:11:36,420 --> 00:11:41,260 Vidimo tukaj lahko pogledate precej nobene funkcije v PHP navodil 141 00:11:41,260 --> 00:11:47,540 in to je nekako med človekom strani PHP. 142 00:11:47,540 --> 00:11:51,060 Vrnitev vrsta se bo vir. 143 00:11:51,060 --> 00:11:56,050 Zato sem ga pogledal, ker nismo zares določiti vir. 144 00:11:56,050 --> 00:12:04,110 Zamisel vira, C si nekako dobil FILE * ali karkoli; 145 00:12:04,110 --> 00:12:07,200 v PHP vir je vaš FILE *. 146 00:12:07,200 --> 00:12:10,360 To je tisto, kar boš bral od tega, kaj boš pisal, da. 147 00:12:10,360 --> 00:12:20,710 To je običajno zunanja, tako da je vir lahko potegnite stvari iz in metati stvari. 148 00:12:20,710 --> 00:12:26,520 In končno, kaj je tip NULL? >> [Študent] NULL. 149 00:12:26,520 --> 00:12:30,650 Ja. Torej, edina stvar, ki je NULL NULL. 150 00:12:30,650 --> 00:12:33,480 NULL NULL. 151 00:12:35,490 --> 00:12:41,170 >> Ena od značilnosti sistema vrsti PHP (za boljše ali slabše) je njena sposobnost, da Manipulirati vrst. 152 00:12:41,170 --> 00:12:44,390 Ko pišete kode PHP, ki združuje vrednosti različnih vrst, 153 00:12:44,390 --> 00:12:46,670 PHP bo poskusil narediti smiselno stvar. 154 00:12:46,670 --> 00:12:48,920 Preizkusite vsako od naslednjih vrstic kode PHP. Kaj se natisne? 155 00:12:48,920 --> 00:12:51,000 Je to tisto, kar ste pričakovali? Zakaj ali zakaj ne? 156 00:12:51,000 --> 00:12:58,600 To dejstvo pa je, kaj je PHP naredi tisto, čemur pravimo slabo natipkan. 157 00:12:58,600 --> 00:13:04,610 Šibko in močno vnesli tipkajo, 158 00:13:04,610 --> 00:13:06,840 obstajajo različni načini uporabe teh izrazov, 159 00:13:06,840 --> 00:13:12,020 vendar je večina ljudi uporablja šibko in močno vnesli vnesli pomeni to reč 160 00:13:12,020 --> 00:13:15,920 če ("1" + 2), ki deluje. 161 00:13:15,920 --> 00:13:18,290 V C, da ne bi delovalo. 162 00:13:18,290 --> 00:13:22,490 Lahko si predstavljate, to ne deluje. 163 00:13:22,490 --> 00:13:29,200 Veliko ljudi pomešajo dinamično tipkanje in šibko tipiziranje in statično tipiziranje in močno tipiziranje. 164 00:13:29,200 --> 00:13:34,050 Python je še en primer jezika, ki se dinamično vnesli. 165 00:13:34,050 --> 00:13:41,770 Lahko vrgel okrog tipov iz spremenljivk in to se dogaja, da ugotovi, v času izvajanja 166 00:13:41,770 --> 00:13:44,680 o napakah checkings. 167 00:13:44,680 --> 00:13:50,740 V Python, da bo za izvedbo tega pa bo videl ("1" + 2); 168 00:13:50,740 --> 00:13:55,920 in to ne zato, ker pravi, da ne morete dodati vrvico in celo število. 169 00:13:55,920 --> 00:14:00,860 V PHP, ki je prav tako dinamično vnesli, to ne bo uspelo. 170 00:14:00,860 --> 00:14:04,220 Šibka tipkanje ima opraviti z dejstvom, da je stvari s tipi 171 00:14:04,220 --> 00:14:07,800 da ne res smiselno, nujno. 172 00:14:07,800 --> 00:14:17,420 Torej ("1" + 2), lahko si predstavljam, da je biti niz 12, lahko si predstavljam, da bi bilo niz 3, 173 00:14:17,420 --> 00:14:20,710 Lahko si predstavljam, da bi bilo celo 3. 174 00:14:20,710 --> 00:14:24,530 To ni nujno dobro opredeljeno, in smo verjetno bo tukaj vidim 175 00:14:24,530 --> 00:14:29,140 da ko smo natisniti ("1" + 2), to je verjetno, da bo na koncu pa različne 176 00:14:29,140 --> 00:14:32,320 kot tisk (1 + "2"). 177 00:14:32,320 --> 00:14:39,700 In to zna biti po mojem mnenju na slabše. 178 00:14:39,700 --> 00:14:44,240 Tukaj lahko poskusite teh. 179 00:14:44,240 --> 00:14:48,740 Še en mali trik PHP je, vam ni treba dejansko napisati spis. 180 00:14:48,740 --> 00:14:52,790 To so pa zaženite ukazni način. 181 00:14:52,790 --> 00:14:57,710 Tako php-r, potem lahko vržemo v ukaz tukaj: 182 00:14:57,710 --> 00:15:06,610 "Print ('1 '+ 2)," in jaz bom vrgel v novo vrstico. 183 00:15:19,550 --> 00:15:23,970 Ta natisnjena 3. 184 00:15:31,100 --> 00:15:35,330 Videti je, da natisne 3 in je celo 3. 185 00:15:35,330 --> 00:15:38,420 Torej, zdaj poskusimo obratno: 186 00:15:38,420 --> 00:15:42,970 "Print (1 + 2"); 187 00:15:45,560 --> 00:15:50,490 Smo dobili 3, in se tudi bo celo 3? Resnično nimam pojma. 188 00:15:50,490 --> 00:15:54,030 Izgleda, da je v skladu. 189 00:15:54,030 --> 00:15:59,550 Nikoli obstaja možnost da bi se bilo niz 12 ali kaj podobnega 190 00:15:59,550 --> 00:16:08,080 ker PHP, za razliko JavaScript in Java preveč, 191 00:16:08,080 --> 00:16:11,670 ima ločen subjekt, pri združevanju. 192 00:16:11,670 --> 00:16:14,930 Spoj v PHP je pika. 193 00:16:14,930 --> 00:16:22,950 Torej tiskanje (1 2 ".) Se dogaja, da nam 12. 194 00:16:25,790 --> 00:16:32,420 To vodi v zmedo, kjer ljudje poskušajo narediti nekaj podobnega str + = 195 00:16:32,420 --> 00:16:37,840 kakšno drugo stvar, ki jih želite dodati na koncu njihovega vrvico, in da se bo to uspelo. 196 00:16:37,840 --> 00:16:40,770 Morate storiti str. = 197 00:16:42,000 --> 00:16:46,240 Torej, ne pozabite, združevanje v PHP je pika. 198 00:16:46,240 --> 00:16:52,100 Druge stvari, da poskusite: print ("CS" + 50); 199 00:16:55,750 --> 00:17:03,610 Povedal sem vam, da ni upanja, da bi to povzročilo CS50 200 00:17:03,610 --> 00:17:06,119 saj je združevanje ni +. 201 00:17:06,119 --> 00:17:08,440 Kaj misliš, da se bo to končalo? 202 00:17:10,359 --> 00:17:13,460 Iskreno se pojma. 203 00:17:14,250 --> 00:17:16,460 Videti je, da je samo 50. 204 00:17:16,460 --> 00:17:21,490 Zato meni, da je niz, in stavim, da če smo se 123CS - 205 00:17:21,490 --> 00:17:29,640 Zato meni, da je v prvo postavo, poskuša prebrati celo število od njega ali številko od njega. 206 00:17:29,640 --> 00:17:31,710 V tem primeru se vidi 123CS. 207 00:17:31,710 --> 00:17:35,190 "To nima nobenega smisla, kot celo število, tako da bom samo, da razmišljajo o 123". 208 00:17:35,190 --> 00:17:38,580 Torej 123 + 50 se bo 173. 209 00:17:38,580 --> 00:17:40,740 In tu se začne ta tekst kot celo število. 210 00:17:40,740 --> 00:17:45,690 Ne vidim ničesar, zato je le to obravnava kot 0. Torej, 0 + 50 se bo 50. 211 00:17:45,690 --> 00:17:51,600 To sem ob predpostavki, da se bo nekaj podobnega. 212 00:17:51,600 --> 00:17:54,310 Razmišljam 99. 213 00:17:54,310 --> 00:17:57,580 Ja, saj bo trajalo 1. - 214 00:18:12,880 --> 00:18:15,730 Torej 99. 215 00:18:15,730 --> 00:18:21,970 Tukaj (10/7), če bi bilo to C, kaj bi to vrniti? 216 00:18:23,700 --> 00:18:29,630 [1] študent. >> Ja, bi bilo 1, ker 10/7 je tako, da cela 2. 217 00:18:29,630 --> 00:18:32,910 Celo deli za celo vrača celo število. 218 00:18:32,910 --> 00:18:37,750 To ne more vrniti 1 točko, da bi bilo karkoli, tako da je le, da bo vrnil 1. 219 00:18:37,750 --> 00:18:46,120 Tukaj tiskanje (10/7), da se bo dejansko interpretira to. 220 00:18:46,120 --> 00:18:53,760 In to pomeni, da če si dejansko želijo narediti celoštevilsko zaokroževanje in stvari, kot je ta, 221 00:18:53,760 --> 00:18:59,950 kar morate storiti, print (tla (10/7)); 222 00:18:59,950 --> 00:19:08,460 V C je verjetno čudno, da se lahko zanesete na celo krajšanje redno, 223 00:19:08,460 --> 00:19:12,260 ampak v PHP ne moreš, ker bo samodejno pretvorijo v likvidna sredstva. 224 00:19:13,430 --> 00:19:17,610 In potem (7 + true); kaj misliš, da se dogaja, da je? 225 00:19:18,550 --> 00:19:23,640 Ugibam 8, če gre za razlago prava kot 1. 226 00:19:23,640 --> 00:19:25,740 Videti je, da je 8. 227 00:19:25,740 --> 00:19:31,710 >> Torej, kaj smo naredili v zadnjih 10 minutah popolnoma nikoli ne bi smeli početi. 228 00:19:31,710 --> 00:19:39,870 Videli boste kodo, ki počne to. 229 00:19:39,870 --> 00:19:42,700 Ni nujno, da je tako enostavno, kot to. 230 00:19:42,700 --> 00:19:47,240 Lahko bi imeli 2 spremenljivk in 1 spremenljivka zgodi, da se niz 231 00:19:47,240 --> 00:19:51,310 in druge spremenljivke se zgodi, da bo int in nato dodajte te spremenljivke skupaj. 232 00:19:51,310 --> 00:20:00,120 Ker je PHP dinamično vnesli in ne bo naredil nobenega tipa preverjanje za vas 233 00:20:00,120 --> 00:20:03,640 in ker je to slabo tipkal in ker bo to šele avtomatsko vrgel te stvari skupaj 234 00:20:03,640 --> 00:20:11,490 in da bo vse samo delo, je težko celo vedeti, da mora biti ta spremenljivka niz zdaj, 235 00:20:11,490 --> 00:20:14,930 tako da ne bi smel dodati k tej spremenljivki, ki je celo število. 236 00:20:18,780 --> 00:20:24,560 Najbolje je, če je spremenljivka niz, ga shranite kot niz večno. 237 00:20:24,560 --> 00:20:26,980 Če spremenljivka int, ga shranite kot int večno. 238 00:20:26,980 --> 00:20:30,770 Če želite, da se ukvarjajo s števil in godala, 239 00:20:30,770 --> 00:20:36,970 lahko uporabite varsint - to Javascript. 240 00:20:36,970 --> 00:20:42,520 Intval. To počnem ves čas. PHP in JavaScript mešam vsemu. 241 00:20:42,520 --> 00:20:47,600 Torej intval vrača celo število vrednosti spremenljivke. 242 00:20:47,600 --> 00:20:56,550 Če se peljemo v "print (intval ('123 ')); dobite 123. 243 00:21:06,820 --> 00:21:15,850 Intval sam ne bo naredil pregled, za nas, da je to samo število. 244 00:21:15,850 --> 00:21:20,460 Priročnik PHP, obstaja le toliko funkcij na voljo, 245 00:21:20,460 --> 00:21:26,560 tako da tukaj mislim, da bi jo uporabil, je is_numeric prvi. 246 00:21:26,560 --> 00:21:32,590 Ugibam, da se vrne false. 247 00:21:32,590 --> 00:21:35,780 To je še ena stvar, ki jo moram iti čez je. === 248 00:21:37,850 --> 00:21:44,020 Torej is_numeric ('123df), da ne bi pomislil na to, kot is_numeric. 249 00:21:44,020 --> 00:21:46,720 V C bi morali ponoviti čez vse znake 250 00:21:46,720 --> 00:21:50,410 in preverite, če je vsak znak je številka ali karkoli. 251 00:21:50,410 --> 00:21:53,850 Tukaj is_numeric bo naredil za nas, 252 00:21:53,850 --> 00:21:56,520 in to je vrnil napačen. 253 00:21:56,520 --> 00:22:02,120 Torej, ko sem natisnil, da se natisne ničesar, tako da tukaj sem primerjavo, da bi videli, 254 00:22:02,120 --> 00:22:05,490 pa se zgodi, da se ne drži? In tako zdaj je tiskanje 1. 255 00:22:05,490 --> 00:22:10,060 Očitno se natisne 1, kot velja namesto izpisovanja res, saj res. 256 00:22:10,060 --> 00:22:15,790 Zanima me, če naredim print_r. Ne, še vedno pa 1. 257 00:22:15,790 --> 00:22:26,760 >> Če se vrnemo k ===, == še vedno obstaja, 258 00:22:26,760 --> 00:22:32,260 in če se pogovarjaš z Tommy bo rekel == je popolnoma v redu. 259 00:22:32,260 --> 00:22:37,700 Jaz bom rekel, da je grozno == in nikoli ne smete uporabljati. == 260 00:22:37,700 --> 00:22:44,870 Razlika je, da == primerja stvari 261 00:22:44,870 --> 00:22:48,450 če je to lahko velja tudi, če niste enakega tipa, 262 00:22:48,450 --> 00:22:53,810 ker === primerja stvari in ga prvič pregledi so istega tipa? 263 00:22:53,810 --> 00:22:58,010 Da. Ok, zdaj bom videl, če dejansko primerjati enaka. 264 00:22:58,010 --> 00:23:08,890 Dobiš čudne stvari, kot znaša 10 - Poglejmo kaj piše. 265 00:23:08,890 --> 00:23:15,570 Torej, ('10 '== '1 E1); 266 00:23:15,570 --> 00:23:17,980 To vrne true. 267 00:23:17,980 --> 00:23:21,420 Ima kdo kakršne koli ugibanja, zakaj je ta vrne true? 268 00:23:25,180 --> 00:23:27,120 Ne gre samo za to. Mogoče je to namig. 269 00:23:27,120 --> 00:23:33,170 Ampak, če spremenim, da je f - to darn! Držim z uporabo dvojne narekovaje. 270 00:23:33,170 --> 00:23:38,780 Razlog dvojne navednice so kričiš name, ker sem dal to v dvojnih narekovajih. 271 00:23:38,780 --> 00:23:43,850 Tako sem lahko pobegniti v dvojne narekovaje tukaj, ampak enojnih narekovajih lažje. 272 00:23:43,850 --> 00:23:49,120 Torej, ('10 '== '1 F1 «), ne pa tiskati res. ('10 '== '1 E1); natisne res. 273 00:23:49,120 --> 00:23:56,330 [Študent] Ali je čarovnica? >> To ni čarovnica, ampak je blizu, da je kot - 274 00:23:56,330 --> 00:24:01,060 1e1, znanstveni zapis. 275 00:24:01,060 --> 00:24:07,950 Priznava 1e1 kot 1 * 10 ^ 1 ali karkoli. 276 00:24:07,950 --> 00:24:11,510 Tisti, ki so enake cela števila. 277 00:24:11,510 --> 00:24:15,930 Če tega ne storimo === potem se dogaja, da je lažna. 278 00:24:15,930 --> 00:24:28,490 Pravzaprav ne vem, če bomo kaj == (10 in '10abc ');? V redu. Torej, to je res. 279 00:24:28,490 --> 00:24:35,940 Torej, ravno tako, kot si (10 + '10abc "), in da bi bilo 20, 280 00:24:35,940 --> 00:24:38,800 tukaj (10 == '10abc "); je res. 281 00:24:38,800 --> 00:24:45,350 Še huje, so stvari, kot so (napačno == NULL); velja 282 00:24:45,350 --> 00:24:52,210 ali (napačno == 0); je res (false == []); 283 00:24:52,210 --> 00:25:00,970 Obstajajo čudna primeri - To je eden tistih čudnih zadev. 284 00:25:00,970 --> 00:25:08,110 Obvestilo, da je (napačno == []), je res. 285 00:25:08,110 --> 00:25:11,950 ('0 '== False); je res. 286 00:25:11,950 --> 00:25:16,090 ('0 '== []), Je napačen. 287 00:25:16,090 --> 00:25:19,090 Torej == nikakor prehodni. 288 00:25:19,090 --> 00:25:26,830 lahko enak b in je lahko enaka c, 289 00:25:26,830 --> 00:25:29,340 a b morda ne bo enaka c. 290 00:25:29,340 --> 00:25:35,580 To je odvratno z mano, in morate vedno uporabljati. === 291 00:25:35,580 --> 00:25:38,590 [Študent] lahko naredimo! == Tudi? >> [Bowden] Da. 292 00:25:38,590 --> 00:25:44,600 Enakovredna bo! = In! ==. 293 00:25:44,600 --> 00:25:48,230 To je pravzaprav odraščali v pset spec 294 00:25:48,230 --> 00:25:52,000 kjer je veliko vrnitev funkcij - 295 00:25:52,000 --> 00:25:53,890 Navodilo za PHP je dobro o tem. 296 00:25:53,890 --> 00:25:59,140 To postavlja v veliki rdeče polje "To bo vrne false, če je do napake." 297 00:25:59,140 --> 00:26:03,940 Toda vrnitev 0 je popolnoma smiselno stvar vrniti. 298 00:26:03,940 --> 00:26:08,250 Pomislite na vse funkcije, ki naj bi se vrnili celo število. 299 00:26:11,250 --> 00:26:17,880 Recimo, da je ta funkcija naj bi prešteti število vrstic v datoteki, ali kaj podobnega. 300 00:26:17,880 --> 00:26:23,490 V normalnih okoliščinah se boste peljali to funkcijo datoteko 301 00:26:23,490 --> 00:26:27,120 in to se dogaja, da se vrnete celo število, ki predstavlja število linij. 302 00:26:27,120 --> 00:26:30,820 Torej, 0 je popolnoma sprejemljivo število, če je datoteka samo prazna. 303 00:26:30,820 --> 00:26:36,810 Kaj pa, če se boste peljali to neveljavno datoteko in funkcija se zgodi, da vrne false 304 00:26:36,810 --> 00:26:38,860 če se boste peljali to neveljavno datoteko? 305 00:26:38,860 --> 00:26:46,500 Če si naredil == niste razlikovanje z zadevo med neveljavne datoteke in prazno datoteko. 306 00:26:48,870 --> 00:26:51,350 Vedno uporabljajte. === 307 00:26:55,690 --> 00:26:58,000 To je vse,. 308 00:26:58,000 --> 00:27:01,660 >> V PHP array tip je drugačen od tistega, ki smo ga vajeni v C. 309 00:27:01,660 --> 00:27:06,650 Seveda, ste morda že opazili, je to predvsem, ko ste videli, da je to niz tipa. 310 00:27:06,650 --> 00:27:15,640 Nosilec sintaksa je nova, kot PHP 5.4, ki je najnovejša različica PHP. 311 00:27:15,640 --> 00:27:36,960 Pred tem si vedno moral napisati niz ("" -> 1, 'b' -> 2. 312 00:27:36,960 --> 00:27:41,160 To je bil gradbenik za matrike. 313 00:27:41,160 --> 00:27:45,950 Zdaj je končno prišel okrog PHP na lepo sintakso samo nedorečena, 314 00:27:45,950 --> 00:27:50,900 , ki je prav tako veliko bolje kot array. 315 00:27:50,900 --> 00:27:54,480 Toda če upoštevamo PHP 5.4 je najnovejša različica, 316 00:27:54,480 --> 00:27:59,090 boste lahko naletijo na kraje, ki nimajo niti PHP 5.3. 317 00:27:59,090 --> 00:28:08,220 Čez poletje smo naleteli na to vprašanje, če je PHP 5,3, kar smo imeli na napravi, 318 00:28:08,220 --> 00:28:14,480 vendar pa je strežnik, ki smo uvedli vse naše redovalnice in predložiti in vse te stvari, da 319 00:28:14,480 --> 00:28:16,750 je PHP 5.4. 320 00:28:16,750 --> 00:28:23,060 Ne da bi vedel to, smo razvili v 5,3, potisnjene na 5,4, 321 00:28:23,060 --> 00:28:25,660 zdaj pa kar naenkrat nič našega dela kode 322 00:28:25,660 --> 00:28:28,680 ker se je zgodilo, da so bile spremembe med 5,3 in 5,4 323 00:28:28,680 --> 00:28:31,030 ki niso združljive nazaj, 324 00:28:31,030 --> 00:28:35,770 in moramo iti in popraviti vse naše stvari, ki ne delajo za PHP 5.4. 325 00:28:39,210 --> 00:28:42,320 V tem razredu, saj ima naprava PHP 5.4, 326 00:28:42,320 --> 00:28:45,490 je popolnoma v redu za uporabo oglatih oklepajev. 327 00:28:47,240 --> 00:28:50,440 Ampak, če ste gledal stvari po internetu, 328 00:28:50,440 --> 00:28:54,880 če ste gledal neke vrste stvari diod je najbolj verjetno, da boste videli 329 00:28:54,880 --> 00:29:02,020 urok iz diod konstruktor sintakso, ker da je bilo od leta PHP je bil rojen 330 00:29:02,020 --> 00:29:07,340 in je oglati oklepaj sintaksa je bila približno za zadnjih nekaj mesecih 331 00:29:07,340 --> 00:29:10,020 ali kadar je prišel okoli 5,4. 332 00:29:10,020 --> 00:29:12,710 To je, kako indeks. 333 00:29:12,710 --> 00:29:30,610 Tako kot v C, kako bi kazalo oglati oklepaji, kot $ niz [0], $ array [1], $ array [2], 334 00:29:30,610 --> 00:29:36,320 Indeks se na enak način, če se zgodi, da so vaši indeksi pa strune. 335 00:29:36,320 --> 00:29:40,440 Torej $ array [''] in $ array ['b']. 336 00:29:40,440 --> 00:29:47,410 $ Array [b]. Zakaj bi to bilo narobe? 337 00:29:52,490 --> 00:29:59,870 To bo verjetno ustvarila opozorilo, vendar še vedno deluje. PHP skuša narediti. 338 00:29:59,870 --> 00:30:04,890 To kaže, da le: "Jaz bom vas opozoriti na to, ampak bom samo nadaljuj 339 00:30:04,890 --> 00:30:07,550 "In storiti vse, kar sem lahko." 340 00:30:07,550 --> 00:30:11,500 To bo verjetno prevedi to v niz, 341 00:30:11,500 --> 00:30:15,000 vendar je možno, da na neki točki v preteklosti nekdo rekel, 342 00:30:15,000 --> 00:30:20,180 define b, da je "Hello World". 343 00:30:20,180 --> 00:30:28,740 Torej, zdaj bi b biti konstantna in $ array [b] bo dejansko delal "Hello World". 344 00:30:28,740 --> 00:30:32,380 Mislim, da na tej točki, ali vsaj naši PHP nastavitve, 345 00:30:32,380 --> 00:30:37,870 Če boste poskušali indeks v matriki, in da ključ ne obstaja, bo propadel. 346 00:30:37,870 --> 00:30:40,150 Ne verjamem, da bo samo opozoril. 347 00:30:40,150 --> 00:30:44,560 Ali pa vsaj lahko nastavite tako, da ne samo vas opozoriti, da je samo naravnost ne. 348 00:30:44,560 --> 00:30:49,290 >> Tako lahko preverite, ali je dejansko tak indeks isset. 349 00:30:49,290 --> 00:30:54,690 Tako bo isset ($ array ['Hello World']) vrne false. 350 00:30:54,690 --> 00:30:59,160 isset ($ array ['b']) se bo vrnil res. 351 00:31:06,830 --> 00:31:09,880 Lahko mešanje teh syntaxes. 352 00:31:15,060 --> 00:31:22,440 Sem prepričan, kaj to polje bi na koncu pa je - Lahko ga preizkusiti. 353 00:31:43,290 --> 00:31:45,700 Oh, potrebujem PHPWord. 354 00:31:53,960 --> 00:32:00,260 To je mešanje sintakso, kjer ste ga določili, kaj je ključ 355 00:32:00,260 --> 00:32:03,330 in ne določajo, kaj je ključ. 356 00:32:03,330 --> 00:32:05,520 Torej, tukaj je 3 vrednosti. 357 00:32:05,520 --> 00:32:08,080 Ti niso izrecno povedal, kaj je njegov ključni bo. 358 00:32:08,080 --> 00:32:11,670 Kaj misliš, da je njegov ključni bo? 359 00:32:11,670 --> 00:32:21,410 [0] študent. >> Ugibam 0 samo zato, ker je prvi, ki smo jih ni določena. 360 00:32:21,410 --> 00:32:23,500 Mi lahko dejansko narediti nekaj takih primerov. 361 00:32:23,500 --> 00:32:28,030 Torej print_r je tiskanje rekurzivno. To bo izpisal celoten niz. 362 00:32:28,030 --> 00:32:32,700 To bi natisniti subarrays iz niza, če je bilo vse. 363 00:32:32,700 --> 00:32:36,630 Torej print_r ($ array); php.test.php. 364 00:32:36,630 --> 00:32:38,810 To ne izgleda kot ji je dal 0. 365 00:32:38,810 --> 00:32:43,530 Tam je dejansko nekaj imeti v mislih, ampak bomo prišli nazaj na to v sekundi. 366 00:32:43,530 --> 00:32:45,850 Kaj pa, če bi se zgodilo, da bi to kazalo 1? 367 00:32:45,850 --> 00:32:51,170 PHP ne dela razlik med niza indeksov in cela indeksov, 368 00:32:51,170 --> 00:33:00,280 Tako na tej točki sem že opredelili indeks 1 in sem lahko oboje $ array [1] in $ array ['1 '] 369 00:33:00,280 --> 00:33:06,250 in bo isti indeks in isti ključ. 370 00:33:06,250 --> 00:33:13,000 Torej, zdaj, kaj misliš 3 se bo? >> [Študent] 2. >> [Bowden] Ugibam 2. 371 00:33:16,000 --> 00:33:18,690 Ja. To je 2. 372 00:33:18,690 --> 00:33:24,790 Kaj, če bi to naredil je 10, to je za 4? Kaj misliš, indeks 3 se bo? 373 00:33:27,360 --> 00:33:29,110 Razmišljam 11. 374 00:33:29,110 --> 00:33:33,060 Mislim, kaj počne PHP - in mislim, da sem videl že prej - 375 00:33:33,060 --> 00:33:39,760 je to le beleži kar najbolj številčna Indeks je uporabljena doslej. 376 00:33:39,760 --> 00:33:44,230 To se ne bo nikoli dodeliti niz indeks 3. Vedno bo številčna indeks. 377 00:33:44,230 --> 00:33:47,690 Torej sledi najvišjim 1 to je dodeljena delu, ki se zgodi na 10, 378 00:33:47,690 --> 00:33:52,540 in to se dogaja, da 11-3. 379 00:33:52,540 --> 00:34:02,110 Kaj sem rekel prej, opazili, kako je to vrsto tiska. 380 00:34:02,110 --> 00:34:06,850 To natisne ključa 10, točko 4, ključ 11, ključ d. 381 00:34:06,850 --> 00:34:09,790 Ali celo naredimo - 382 00:34:15,760 --> 00:34:22,489 Mislim, da nisem dal 0, vendar je tiskanje 1, 2, 3, 4. 383 00:34:22,489 --> 00:34:29,330 Kaj če začnem tukaj? Ali kaj je dejansko izbrati te 2. 384 00:34:29,330 --> 00:34:31,940 Zdaj se natisne 2, 1, 3, 4. 385 00:34:31,940 --> 00:34:41,270 Nizi PHP ni tako kot vaš redni hash tabele. 386 00:34:41,270 --> 00:34:45,570 To je popolnoma smiselno razmišljati o njih, kot hash tabele 99% časa. 387 00:34:45,570 --> 00:34:53,790 Toda v vašem hash tabele nima smisla v vrstnem redu, v katerem so bile vstavljene stvari. 388 00:34:53,790 --> 00:34:56,639 Torej takoj, ko ga vstavite v vaš hash tabele, 389 00:34:56,639 --> 00:35:00,590 Predvidevam, da ni povezan seznam in ga lahko sodnik v povezanem seznamu 390 00:35:00,590 --> 00:35:03,980 ki je bil prvič vstavljena. 391 00:35:03,980 --> 00:35:10,060 Ampak tukaj vstavi 2 1. in ve, kdaj se tiskanje te nizom, 2 na prvem mestu. 392 00:35:10,060 --> 00:35:13,090 Ni ga natisnite samo v poljubnem vrstnem redu. 393 00:35:13,090 --> 00:35:17,550 Tehnični podatki struktura, ki jo je z uporabo je odredil zemljevid, 394 00:35:17,550 --> 00:35:24,690 tako da preslika ključe z vrednostmi in si zapomni vrstni red, v katerem so bili vstavljeni te ključe. 395 00:35:24,690 --> 00:35:31,600 V bistvu je to za nekatere zaplete, ko se počutiš neprijetno, da dejansko - 396 00:35:31,600 --> 00:35:34,510 Recimo, da imate vrsto 0, 1, 2, 3, 4, 5 397 00:35:34,510 --> 00:35:37,700 in želite, da iz indeksa 2. 398 00:35:37,700 --> 00:35:47,750 Eden od načinov za to početje, pa poglejmo, kaj 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 Izklopi se zgodi, da nenastavljen obeh spremenljivk in matrične indeksov. 401 00:35:54,880 --> 00:35:58,630 Torej unset ($ array [2]); 402 00:35:58,630 --> 00:36:03,430 Zdaj, kaj bo to videti? 2 je pravkar šla, tako da je popolnoma v redu. 403 00:36:03,430 --> 00:36:11,670 Več nadležno je, če želite, da se stvari dejansko kot matriko. 404 00:36:11,670 --> 00:36:14,910 Jaz bom dal naključnih številk. 405 00:36:14,910 --> 00:36:20,400 Zdaj opazil moje indeksov. 406 00:36:20,400 --> 00:36:26,860 Želim, da se samo kot matriko C, če gre od 0 do dolžine - 1 407 00:36:26,860 --> 00:36:30,810 in sem lahko izbirate nad njim kot take. 408 00:36:30,810 --> 00:36:38,520 Vendar pa takoj, ko sem nenastavljen drugi indeks, kar je bilo v indeks 3, ni postal indeks 2. 409 00:36:38,520 --> 00:36:44,790 Namesto tega preprosto odstrani, da je indeks, zdaj pa imaš 0, 1, 3, 4. 410 00:36:44,790 --> 00:36:48,740 To je popolnoma smiselno. 411 00:36:48,740 --> 00:36:53,950 To je samo siten in kar morate storiti, stvari, kot je spoj diod. Ja. 412 00:36:53,950 --> 00:36:57,200 >> [Študent] Kaj bi se zgodilo, če bi imeli za zanko 413 00:36:57,200 --> 00:36:59,630 in si želel iti čez vse elemente? 414 00:36:59,630 --> 00:37:02,290 Ko je zadel 2, bi prinesla kdaj? 415 00:37:02,290 --> 00:37:10,150 Ponavljanjem v matriko. Obstajata 2 načina, kako lahko to storite. 416 00:37:10,150 --> 00:37:12,770 Lahko uporabite za redne zanke. 417 00:37:12,770 --> 00:37:22,000 To je še en Zamršenost PHP. 418 00:37:22,000 --> 00:37:27,420 Večina jezikov, bi rekel, neke vrste dolžine ali dol ali kaj podobnega 419 00:37:27,420 --> 00:37:30,470 označuje dolžino niza. 420 00:37:30,470 --> 00:37:32,820 V PHP je število. 421 00:37:32,820 --> 00:37:36,160 Torej, count ($ array); $ i + +) 422 00:37:36,160 --> 00:37:42,950 Reciva print ($ array [$ i]); 423 00:37:45,920 --> 00:37:48,820 Opozorilo: Undefined offset: 2. 424 00:37:48,820 --> 00:37:51,610 To je le, da bo uspelo. 425 00:37:51,610 --> 00:38:03,020 To je razlog, da je za večino del, vam nikoli ni treba ponoviti čez niz, kot je ta. 426 00:38:03,020 --> 00:38:07,110 Morda bi bilo pretirano, vendar vam nikoli ni treba ponoviti čez niz, kot je ta 427 00:38:07,110 --> 00:38:19,410 ker PHP ponuja svoje foreach sintakso, kjer foreach ($ $ kot matrično točka). 428 00:38:19,410 --> 00:38:31,830 Zdaj, če želimo natisniti ($ točka), - Bomo o tem razpravljali v drugi -, ki deluje popolnoma v redu. 429 00:38:31,830 --> 00:38:38,960 Tako, da foreach deluje, je prvi argument je niz, ki ste ponavljanjem več. 430 00:38:38,960 --> 00:38:44,060 In drugi argument, element z vsako izkaznici za zanke 431 00:38:44,060 --> 00:38:52,690 to se dogaja, da se na naslednjo stvar v matriki. Torej, ne pozabite matrika naročila. 432 00:38:52,690 --> 00:38:55,690 Prvič skozi zanko, točka bo še 123 433 00:38:55,690 --> 00:38:59,540 potem bo 12 potem bo 13 potem bo 23 potem bo 213. 434 00:38:59,540 --> 00:39:04,670 Stvari se res čudno, ko narediš nekaj podobnega foreach. 435 00:39:04,670 --> 00:39:07,480 Pa poglejmo, kaj se bo zgodilo, ker si nikoli ne bi smela narediti. 436 00:39:07,480 --> 00:39:13,320 Kaj, če bi unset ($ array [1]); 437 00:39:20,410 --> 00:39:26,030 To je verjetno pričakovati. 438 00:39:26,030 --> 00:39:30,950 Ti ponavljanjem v tem polju, in vsakič, ko boste unsetting prvi indeks. 439 00:39:30,950 --> 00:39:39,720 Torej za indeks 0, je prva stvar, točka popelje na vrednost 0, tako da bo v 123. 440 00:39:39,720 --> 00:39:44,630 Ampak notranjost za zanke, nevezanega indeks 1, to pomeni 12 ni več. 441 00:39:44,630 --> 00:39:57,480 Torej tiskanje. PHP_EOL. 442 00:39:57,480 --> 00:40:03,580 PHP_EOL je samo vrstico, vendar je tehnično bolj prenosni 443 00:40:03,580 --> 00:40:08,890 od novih vrstic v sistemu Windows je drugačna od novih vrstic za Mac in Unix. 444 00:40:08,890 --> 00:40:18,040 V sistemu Windows newline je \ r \ n, ker povsod drugje pa kaže samo, da \ n. 445 00:40:18,040 --> 00:40:25,150 PHP_EOL je nastavljen tako, da uporablja ne glede na vrstico vašega sistema. 446 00:40:25,150 --> 00:40:29,310 Tako, da natisnete. Naj ne print_r ($ array) na koncu. 447 00:40:32,830 --> 00:40:37,390 Nisem vedel, da bi bilo tako ravnanje. 448 00:40:41,740 --> 00:40:48,960 Postavka še vedno traja na vrednost 12, čeprav smo nenastavljen 12, preden smo kdaj dobil z njim iz matrike. 449 00:40:52,770 --> 00:40:58,840 Ne jemljite mojo besedo za to, ampak izgleda, da foreach ustvari kopijo matrike 450 00:40:58,840 --> 00:41:02,160 in potem postavka prevzame vse vrednosti te kopije. 451 00:41:02,160 --> 00:41:07,760 Torej, tudi če spremenite vrsto znotraj zanke, za 452 00:41:07,760 --> 00:41:17,240 to ne bo motilo. Točka bo na prvotne vrednosti. 453 00:41:17,240 --> 00:41:19,240 Poskusimo ga unsetting. 454 00:41:19,240 --> 00:41:24,460 Kaj pa, če je to $ array [1] = "zdravo"; 455 00:41:24,460 --> 00:41:31,770 Čeprav smo se "zdravo" v polju, točka nikoli ne prevzame te vrednosti. 456 00:41:31,770 --> 00:41:37,430 Še en sintakso za foreach zanke 457 00:41:37,430 --> 00:41:45,900 če si dal 2 spremenljivk ločeni s puščico. 458 00:41:45,900 --> 00:41:49,680 Ta prva spremenljivka se dogaja, da je ključ do te vrednosti, 459 00:41:49,680 --> 00:41:53,050 in ta druga spremenljivka se bo enako točen predmet. 460 00:41:53,050 --> 00:42:01,610 To je tukaj, nezanimivo, če pa gremo nazaj na naše prvotne primeru "a" -> 1, 461 00:42:01,610 --> 00:42:06,090 "B" -> 1, 462 00:42:06,090 --> 00:42:14,470 tu, če smo le ponovitev za vsako postavko matrike kot točka se bo vsak čas 1. 463 00:42:14,470 --> 00:42:18,170 Toda, če smo prav tako želeli vedeti ključ povezan s tem zapisu 464 00:42:18,170 --> 00:42:25,230 Nato naredimo kot $ ključ -> $ element. 465 00:42:25,230 --> 00:42:31,980 Sedaj lahko naredimo tiskanja ($ ključ. ":". 466 00:42:31,980 --> 00:42:39,380 Zdaj je pred ponavljanjem in tiskanje vsak ključ in z njim povezanimi vrednost. 467 00:42:39,380 --> 00:42:47,030 >> Dodatna stvar, ki jo lahko storite v foreach zanke je lahko vidite to sintakso. 468 00:42:47,030 --> 00:42:54,770 Ampersands pred imeni spremenljivk ponavadi kako PHP ne referenc. 469 00:42:54,770 --> 00:43:00,460 Če reference so zelo podobni kazalci, 470 00:43:00,460 --> 00:43:04,820 nimate napotke, tako da vam nikoli ne ukvarjajo s spominom neposredno. 471 00:43:04,820 --> 00:43:12,620 Vendar vam zgleduje po 1 spremenljivka se nanaša na isto stvar kot drugo spremenljivko. 472 00:43:12,620 --> 00:43:21,450 Znotraj tu naredimo $ element. Pojdimo nazaj na 1, 10. 473 00:43:21,450 --> 00:43:28,800 Naredimo $ element + +, ki še vedno obstaja v PHP. Še vedno lahko storite + +. 474 00:43:28,800 --> 00:43:38,260 php.test.php. Moram ga natisnete. print_r ($ array); 475 00:43:38,260 --> 00:43:42,730 Tiskamo 2, 11. 476 00:43:42,730 --> 00:43:49,560 Če sem pravkar naredil foreach ($ niz, kot $ točka), nato pa se bo postavka je vrednost 1 477 00:43:49,560 --> 00:43:54,190 prvič skozi zanko. To bo prirastek 1-2, nato pa bomo končali. 478 00:43:54,190 --> 00:43:57,260 Torej bo šel skozi drugo izkaznici zanke in točka je 10. 479 00:43:57,260 --> 00:44:01,570 Ta postavka korakih na 11, nato pa, da je samo vrgel stran. 480 00:44:01,570 --> 00:44:06,670 Potem smo print_r ($ array), in da vidimo, da je to samo 1, 10. 481 00:44:06,670 --> 00:44:09,070 Tako je izgubil prirastek smo. 482 00:44:09,070 --> 00:44:13,410 Ampak foreach ($ niz kot $ & element) 483 00:44:13,410 --> 00:44:21,910 Zdaj ta element je enak izdelek, kot to prav tukaj. To je ista stvar. 484 00:44:21,910 --> 00:44:26,820 Torej $ element + + spreminja zaporedje 0. 485 00:44:29,330 --> 00:44:41,850 V bistvu, lahko tudi do $ K -> $ element in lahko storite $ array [$ k] + +; 486 00:44:41,850 --> 00:44:48,650 >> Torej drug način dela, da smo svobodni, da spremeni element, 487 00:44:48,650 --> 00:44:54,070 vendar to ne bo spremenil naš prvotni niz. 488 00:44:54,070 --> 00:44:59,720 Ampak, če bomo uporabili K, ki je naš ključ, potem lahko le indeks v naši matriki uporabljena ta ključ 489 00:44:59,720 --> 00:45:01,530 in prirastek to. 490 00:45:01,530 --> 00:45:05,410 To so bolj neposredno spreminja naš prvotni niz. 491 00:45:05,410 --> 00:45:10,690 Lahko tudi to, da če iz nekega razloga si želel možnost spreminjanja - 492 00:45:10,690 --> 00:45:13,510 Pravzaprav, to je povsem razumno. 493 00:45:13,510 --> 00:45:16,020 Nisi hotel, da bi napisal $ array [$ k] + +, 494 00:45:16,020 --> 00:45:27,890 si želel pisati $ element + +, vendar si še vedno želel povedati, če ($ k === '") 495 00:45:27,890 --> 00:45:30,620 nato prirastek element in nato natisnete portfelj. 496 00:45:30,620 --> 00:45:36,290 Torej, kaj bomo sedaj pričakujejo print_r storiti? Katere vrednote je treba zapisati? 497 00:45:36,290 --> 00:45:43,770 [Študent] 2 in 10. >> [Bowden] Samo, če je bil ključ "a" bomo dejansko natisnete to. 498 00:45:51,940 --> 00:45:55,670 >> Verjetno ste zelo redko, če sploh kdaj, bo treba opredeliti funkcije v PHP, 499 00:45:55,670 --> 00:46:03,370 vendar pa bi morali videti nekaj podobnega, kjer lahko določite funkcijo kot karkoli funkcijo. 500 00:46:03,370 --> 00:46:09,900 Ponavadi bi rekel ($ foo $ bar), nato pa določite, da je karkoli. 501 00:46:09,900 --> 00:46:17,580 Ampak, če bi to naredili, potem to pomeni, da ne glede na karkoli zahteva, 502 00:46:17,580 --> 00:46:25,110 kar zahteva Baz, tako da je prvi argument, da Baz mogoče spremeniti. 503 00:46:25,110 --> 00:46:38,100 Naredimo $ foo + +; 504 00:46:38,100 --> 00:46:48,020 in notranjost tukaj naredimo BAZ ($ točka); 505 00:46:48,020 --> 00:46:52,250 Zdaj smo kliče funkcijo. 506 00:46:52,250 --> 00:46:56,780 Ta argument se sprejme odločbe, kar pomeni, da če ga spremenite 507 00:46:56,780 --> 00:47:00,390 smo spremenili stvar, ki je bil posredovan noter 508 00:47:00,390 --> 00:47:04,420 In tiskanje to pričakujemo - če sem zamočil sintakso - imamo 2, 11, 509 00:47:04,420 --> 00:47:06,300 Tako je bil dejansko poveča. 510 00:47:06,300 --> 00:47:08,790 Obvestilo moramo referenc 2 mesti. 511 00:47:08,790 --> 00:47:13,050 Kaj pa, če sem to storil? Kaj to pomeni? 512 00:47:13,050 --> 00:47:15,810 [Študent] se bo spremenilo. >> Ja. 513 00:47:15,810 --> 00:47:18,290 Postavka je samo kopija vrednosti v matriki. 514 00:47:18,290 --> 00:47:26,670 Tako bo predmet sprememb na 2, vendar array ['a'], bo še vedno 1. 515 00:47:26,670 --> 00:47:32,560 Ali pa kaj, če bi to naredil? 516 00:47:32,560 --> 00:47:39,260 Zdaj, ko je pošiljka poslana kot kopijo Baz. 517 00:47:39,260 --> 00:47:46,330 Tako bo kopija trditev poveča za 2, 518 00:47:46,330 --> 00:47:49,240 vendar je bila novica ni nikoli poveča za 2. 519 00:47:49,240 --> 00:47:52,880 In točka je ista stvar kot nosilec polja karkoli, 520 00:47:52,880 --> 00:47:55,380 tako da je bila matrika ne poveča. 521 00:47:55,380 --> 00:47:57,960 Torej sta ti mesti potrebovali. 522 00:47:57,960 --> 00:48:03,830 >> PHP je ponavadi zelo pameten o tem. 523 00:48:03,830 --> 00:48:06,570 Morda si mislite, želim opraviti s sklicevanjem - 524 00:48:06,570 --> 00:48:09,560 To je dejansko vprašanje, na eni od psets. 525 00:48:09,560 --> 00:48:14,480 To je stvar, kjer questions.txt je dejal, 526 00:48:14,480 --> 00:48:19,280 Zakaj boste morda želeli prenesti ta struct s sklicevanjem? 527 00:48:19,280 --> 00:48:21,250 Kakšen je bil odgovor na to? 528 00:48:21,250 --> 00:48:25,100 [Študent] Torej nimate kopirati nekaj velikega. >> Ja. 529 00:48:25,100 --> 00:48:32,920 Struct lahko poljubno dolga, in ko podaš v struct kot argument 530 00:48:32,920 --> 00:48:36,800 je treba kopirati, da je celoten struct, da jo prenesejo na funkcijo, 531 00:48:36,800 --> 00:48:40,410 ker če si mimo struct s sklicevanjem 532 00:48:40,410 --> 00:48:46,530 potem to potrebno kopirati 4-byte naslov kot argument funkcije. 533 00:48:48,520 --> 00:48:52,320 PHP je malo pametnejši. 534 00:48:52,320 --> 00:49:00,650 Če imam funkcijo in sem mimo, da mu paleto 1.000 stvari, 535 00:49:00,650 --> 00:49:03,990 ali to pomeni, da se bo moral kopirati vse 1.000 od teh stvari 536 00:49:03,990 --> 00:49:10,450 ga posredovati v funkciji? Ni treba storiti, da takoj. 537 00:49:10,450 --> 00:49:15,940 Če znotraj te funkcije ni nikoli dejansko spreminja foo, 538 00:49:15,940 --> 00:49:22,660 tako da, če ($ foo === "zdravo") return true.; 539 00:49:22,660 --> 00:49:26,460 Obvestilo nikoli dejansko spremenil argument znotraj te funkcije, 540 00:49:26,460 --> 00:49:30,010 kar pomeni, da je ne glede na sprejet kot foo ni treba kopirati 541 00:49:30,010 --> 00:49:32,100 saj se ne spreminja. 542 00:49:32,100 --> 00:49:39,240 Torej, način dela je PHP argumenti vedno podan po referenci 543 00:49:39,240 --> 00:49:42,170 dokler ne boste dejansko poskušali spremeniti. 544 00:49:42,170 --> 00:49:51,160 Zdaj, če rečem $ foo + +, bo zdaj narediti kopijo originalnega foo in spremenite kopijo. 545 00:49:51,160 --> 00:49:53,090 To prihrani nekaj časa. 546 00:49:53,090 --> 00:49:58,210 Če se ne dotika tega veliko zbirko, se nikoli dejansko spreminja, 547 00:49:58,210 --> 00:50:02,360 ni treba, da bi kopijo, 548 00:50:02,360 --> 00:50:06,640 ker se, če se le dal ta znak pomeni, da se sploh ne da kopirati 549 00:50:06,640 --> 00:50:08,640 tudi če ga spremenite. 550 00:50:08,640 --> 00:50:10,680 To vedenje se imenuje copy-on-write. 551 00:50:10,680 --> 00:50:17,380 Boste videli na drugih mestih, še posebej, če ste vzeli tečaj operacijskega sistema. 552 00:50:17,380 --> 00:50:23,880 Copy-on-write, je precej običajno za vzorec, če vam ni treba narediti kopijo nekaj 553 00:50:23,880 --> 00:50:26,650 razen če se dejansko spreminja. Ja. 554 00:50:26,650 --> 00:50:29,520 [Študent] Kaj če bi imeli prirastek znotraj testa, 555 00:50:29,520 --> 00:50:33,700 Tako bi samo 1 element iz 1000 je treba spremeniti? 556 00:50:33,700 --> 00:50:38,770 Nisem prepričan. 557 00:50:38,770 --> 00:50:51,250 Mislim, da bi prekopirati celotno stvar, vendar je možno, da je dovolj pameten, da - 558 00:50:51,250 --> 00:51:00,020 Pravzaprav, kaj mislim, je predstavljati, da smo imeli vrsto, ki je videti takole: $ array2 = [ 559 00:51:00,020 --> 00:51:11,000 Potem "" indeks je matrika [1 2 3 4], in indeks "B", je matrika karkoli. 560 00:51:11,000 --> 00:51:15,380 Rabim vejice med vsemi od njih. Predstavljajte si, da so vejice. 561 00:51:15,380 --> 00:51:21,210 Potem pa "c" je vrednost 3. 562 00:51:24,210 --> 00:51:26,290 Ok. 563 00:51:26,290 --> 00:51:33,440 Zdaj pa recimo, da naredimo $ BAZ ($ array2); 564 00:51:33,440 --> 00:51:36,540 če BAZ ne bo to s sklicevanjem. 565 00:51:43,510 --> 00:51:47,370 Torej $ foo ['c'] + +; 566 00:51:47,370 --> 00:51:52,340 To je kot primer, kjer smo se mimo array2 kot argument 567 00:51:52,340 --> 00:51:57,010 potem pa se spreminja poseben indeks polja, ki jih je povečevanje. 568 00:51:57,010 --> 00:52:01,090 Resnično nimam pojma, kaj se dogaja, PHP storiti. 569 00:52:01,090 --> 00:52:07,200 To lahko enostavno naredite kopijo celotno stvar, ampak če je pametno, 570 00:52:07,200 --> 00:52:15,030 da bo kopijo teh tipk, kjer bo to imelo svojo posebno vrednost 571 00:52:15,030 --> 00:52:20,620 vendar je to še vedno opozarjajo na istem polju 1,2,3,4 572 00:52:20,620 --> 00:52:22,320 in to lahko še vedno kažejo na istem polju. 573 00:52:22,320 --> 00:52:24,170 Jaz bom iPad. 574 00:52:28,900 --> 00:52:45,950 Peljemo v tem polju, kjer je to fant točk, 3, ta tip točke [1,2,3,4], 575 00:52:45,950 --> 00:52:51,350 Ta tip opozarja na [...] 34, 576 00:52:51,350 --> 00:52:58,590 Zdaj, ko smo to mimo, da bi Baz, smo se spreminja to. 577 00:52:58,590 --> 00:53:03,550 Če je pameten PHP, lahko samo to - 578 00:53:11,850 --> 00:53:18,230 Še vedno je bilo nekaj kopiranje pomnilnika, vendar če ne bi bilo te ogromne ugnezdene subarrays 579 00:53:18,230 --> 00:53:21,560 nam ni bilo treba kopirati teh. 580 00:53:21,560 --> 00:53:27,530 Ne vem, če je to, kar počne, ampak lahko si predstavljam, da s tem. 581 00:53:29,050 --> 00:53:36,690 To je tudi zelo velika prednost C v PHP. 582 00:53:36,690 --> 00:53:40,320 >> PHP je življenje tako veliko lažje za veliko stvari, 583 00:53:40,320 --> 00:53:45,060 ampak nekako se absolutno nobene ideje, kako dobro bo opravljanje 584 00:53:45,060 --> 00:53:52,530 ker nimam pojma, pod njim pokrovom, ko se naredi te prepise stvari, 585 00:53:52,530 --> 00:53:55,170 oh, da se bo konstantna izvod čas, 586 00:53:55,170 --> 00:54:01,140 je le, da bo do sprememb 1 kazalec se bo smešno težko linearni kopija? 587 00:54:01,140 --> 00:54:03,000 Kaj pa, če se ne najde prostora? 588 00:54:03,000 --> 00:54:06,760 Ali je potem treba zagnati zbiranje smeti, da bi dobili nekaj več prostora? 589 00:54:06,760 --> 00:54:11,210 In lahko zbiranje smeti traja poljubno dolgo. 590 00:54:11,210 --> 00:54:13,600 V K vam ni treba skrbeti za te stvari. 591 00:54:13,600 --> 00:54:19,780 Vsak linijo, ki jo pišete lahko precej razlog o tem, kako se bo opravljala. 592 00:54:26,800 --> 00:54:29,150 >> Poglejmo nazaj na njih. 593 00:54:35,400 --> 00:54:37,520 Kako lepo je, da vam ni treba ukvarjati z večimi funkcijami, 594 00:54:37,520 --> 00:54:39,010 povezani seznam, ali kaj podobnega? 595 00:54:39,010 --> 00:54:41,980 Ker je delo z večimi tabelami je tako enostavno zdaj, tukaj je zabavna puzzle delati. 596 00:54:41,980 --> 00:54:45,920 Odprite datoteko z imenom unique.php in v njej napisati program PHP 597 00:54:45,920 --> 00:54:48,330 (Znan tudi kot "scenarij"). 598 00:54:48,330 --> 00:54:55,700 Nagnjeni smo k temu, da jim pravimo scenariji, če si kratke stvari, ki jih vodijo v ukazni vrstici. 599 00:54:55,700 --> 00:55:02,950 V bistvu, vsak jezik, ki ga ne zbere vendar boste teči izvršljiv 600 00:55:02,950 --> 00:55:05,920 v ukazni vrstici, lahko pokličete, da izvedljivi skript. 601 00:55:05,920 --> 00:55:08,510 Lahko bi prav tako dobro napisati program C, ki počne to, 602 00:55:08,510 --> 00:55:12,300 ampak jaz ne imenujem scenarij, odkar sem jo prvič pripravijo in nato zaženite binarno. 603 00:55:12,300 --> 00:55:15,480 Toda ta program PHP bomo poklicati scenarij. 604 00:55:15,480 --> 00:55:23,830 Ali pa, če smo ga zapisali v Python ali Perl ali Node.js ali katero koli od teh stvari, 605 00:55:23,830 --> 00:55:26,500 mi bi jim pravimo da so vse skripte, ker ste jih vodijo v ukazni vrstici 606 00:55:26,500 --> 00:55:30,040 vendar jih ne zbira. 607 00:55:30,860 --> 00:55:33,400 Mi lahko to zelo hitro. 608 00:55:36,960 --> 00:55:41,480 Mi se ne boste uporabljali argv. Naj samo piha skozi to. 609 00:55:41,480 --> 00:55:45,730 Razpis je edinstven, napisati program. 610 00:55:45,730 --> 00:55:49,400 Lahko domnevamo, da bo vložek vsebuje eno besedo na vrstico. 611 00:55:49,400 --> 00:55:52,020 Pravzaprav bo argv je precej nepomembno za uporabo. 612 00:56:03,730 --> 00:56:06,720 unique.php. 613 00:56:08,550 --> 00:56:13,750 Prva stvar, prvič, smo želeli preveriti, če so bili smo opravili 1 ukazno vrstico argumenta. 614 00:56:13,750 --> 00:56:20,900 Tako kot bi lahko pričakovali argc in argv v C, še vedno imamo tiste v PHP. 615 00:56:20,900 --> 00:56:33,900 Torej, če ($ argc! == 2), potem se ne bom ukvarjal s tiskanjem sporočilo ali kaj podobnega. 616 00:56:33,900 --> 00:56:37,340 Jaz bom samo izhod koda napake 1. 617 00:56:37,340 --> 00:56:41,340 Tudi jaz bi mogel vrniti 1. 618 00:56:41,340 --> 00:56:53,180 Redko v PHP, ste v tej državi, kjer smo pri - 619 00:56:53,180 --> 00:56:57,820 Ponavadi si za funkcijo imenovan s funkcijo imenovan s funkcijo imenovan s funkcijo. 620 00:56:57,820 --> 00:57:02,070 In če gre kaj narobe in si samo želim, da zaprete vse v celoti, 621 00:57:02,070 --> 00:57:05,680 izstopa le konča program. 622 00:57:05,680 --> 00:57:08,160 To obstaja tudi v C. 623 00:57:08,160 --> 00:57:10,700 Če ste v funkciji, v funkciji za funkcijo v funkciji 624 00:57:10,700 --> 00:57:17,540 in želite samo ubil program, lahko pokličete na odhod in se bo le izhod. 625 00:57:17,540 --> 00:57:23,120 Toda v PHP, je še bolj redko, da smo na tej najvišji ravni. 626 00:57:23,120 --> 00:57:26,090 Ponavadi smo znotraj neke funkcije, zato pravimo izhod 627 00:57:26,090 --> 00:57:29,650 tako da se nam ni treba vrniti do 1 stvar, ki nato realizira tam je napaka 628 00:57:29,650 --> 00:57:32,270 tako da se vrne, če se zaveda, da je prišlo do napake. 629 00:57:32,270 --> 00:57:35,270 Ne želimo, da se ukvarjajo s tem, da izhod (1); 630 00:57:35,270 --> 00:57:38,240 vrnitev (1), v tem primeru bi bili enaki. 631 00:57:38,240 --> 00:57:44,000 >> Torej, kaj želimo odpreti želimo fopen. 632 00:57:44,000 --> 00:57:46,760 Argumenti so bo videti precej podobni. 633 00:57:46,760 --> 00:57:51,600 Želimo fopen ($ argv [1], in želimo odpreti za branje. 634 00:57:51,600 --> 00:57:55,720 To vrne vir, ki smo jo bomo imenovali f. 635 00:57:55,720 --> 00:58:02,180 To izgleda precej podobno, kot to počne C, razen nimamo povedati FILE *. 636 00:58:02,180 --> 00:58:06,170 Namesto tega smo pravkar rekel, $ f. Ok. 637 00:58:06,170 --> 00:58:17,190 Mislim, da je to tudi nam daje namig, da delujejo PHP imenom datoteke. PHP datotek. 638 00:58:17,190 --> 00:58:23,990 Kaj bo to storiti, je prebral celotno datoteko v array. 639 00:58:23,990 --> 00:58:29,770 Vi sploh ne potrebujete, da ga fopen. To bo storil za vas. 640 00:58:37,450 --> 00:58:43,700 Torej $ vrstice = Datoteka ($ argv [1]); 641 00:58:43,700 --> 00:58:49,680 Zdaj vse linije datoteki so v vrsticah. Sedaj želimo razvrstiti vrstice. 642 00:58:49,680 --> 00:58:52,180 Kako lahko razvrščate vrstice? 643 00:58:52,180 --> 00:58:54,920 Mi razvrstiti vrstice. 644 00:58:54,920 --> 00:58:58,080 In sedaj lahko natisnete njih ali karkoli drugega. 645 00:58:58,080 --> 00:59:05,580 Verjetno najlažji način je foreach ($ $ linije, kot postavka) echo $ vrstica; 646 00:59:05,580 --> 00:59:10,960 [Študent], ne bi sploh prečkati linije s sklicevanjem na nekaj, kar v vrste? 647 00:59:10,960 --> 00:59:28,850 To je, če bi se vrsta opredeljena kot neke funkcije (& $ array). 648 00:59:28,850 --> 00:59:32,650 Ko pokličete funkcijo, ki jo ne prenese s sklicevanjem. 649 00:59:32,650 --> 00:59:36,900 To je funkcija, ki jo opredeljuje kot to, da se kot referenca. 650 00:59:36,900 --> 00:59:40,900 To je pravzaprav, kaj je šlo narobe 651 00:59:40,900 --> 00:59:46,220 ko smo se vse, kar je na naših strežnikih, ko smo šli 5,3-5,4. 652 00:59:46,220 --> 00:59:53,800 Do 5,4, to je popolnoma razumljiva. 653 00:59:53,800 --> 00:59:58,740 Funkcija ne pričakuje, da ga bo kot referenca, lahko pa jo prenese kot referenca 654 00:59:58,740 --> 01:00:02,860 tako da, če funkcija ni zgodilo, da ga spremeni, je to še spremeni. 655 01:00:02,860 --> 01:00:05,850 Od 5,4, si ne bi smel narediti tega. 656 01:00:05,850 --> 01:00:11,740 Torej, zdaj edini način, da se boste peljali s sklicevanjem je, če funkcija izrecno ne. 657 01:00:11,740 --> 01:00:19,840 Če ne želite, da se ga spremeni, potem morate narediti kopijo $ = $ linije in geslo kopiranje. 658 01:00:19,840 --> 01:00:24,820 Torej, zdaj bodo vrstice ohraniti in kopija se bo spremenilo. 659 01:00:27,670 --> 01:00:31,460 php.unique.php. Mogoče sem zamočil nekaj. 660 01:00:31,460 --> 01:00:33,190 Nepričakovana "uredi". 661 01:00:38,320 --> 01:00:43,850 Tu gre za nekaj, kar počne za nas. 662 01:00:43,850 --> 01:00:45,820 To sploh ni tam. 663 01:00:45,820 --> 01:00:52,140 Obvestilo, ko ste prebrali navodilo, da je treba prvo trditev naj bi se niz 664 01:00:52,140 --> 01:00:56,490 in se je sprejela s sklicevanjem. 665 01:00:58,160 --> 01:01:03,540 Zakaj je to pritožbo z mano? Ker imam to funkcijo nekako še vedno tukaj, da ne želim. 666 01:01:03,540 --> 01:01:09,210 Ok, php.unique.php. Nisem dajati argument, ker nimam datoteko. 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 Tukaj je test.php vse natisnjene v lepo razvrščene redu. 669 01:01:19,080 --> 01:01:24,600 Obvestilo, da razporejene, da je nekako čudno kodno datoteke 670 01:01:24,600 --> 01:01:27,460 ker so vse naše prazne vrstice bodo na prvem mestu 671 01:01:27,460 --> 01:01:30,190 potem se dogaja, da pridejo vsi naši ravni 1 zamikov 672 01:01:30,190 --> 01:01:33,360 nato pa pridejo vse naše brez zamikov. 673 01:01:33,360 --> 01:01:38,620 Ja. >> [Študent] Torej za izvorno kodo ni bil sprejet s sklicevanjem? 674 01:01:38,620 --> 01:01:42,240 Je to običajno podajajo po vrednosti? 675 01:01:42,240 --> 01:01:50,240 [Bowden] Ko pokličete funkcijo, pa nikoli ne ugotovi, ali je bil sprejet s sklicevanjem. 676 01:01:50,240 --> 01:01:53,960 To je funkcija opredelitev, ki določa, ali je bil sprejet s sklicevanjem. 677 01:01:53,960 --> 01:01:59,450 In si ogleduje funkcijo opredelitev vrste ali pa samo pogled na to, 678 01:01:59,450 --> 01:02:02,820 je potrebno trditev s sklicevanjem. 679 01:02:02,820 --> 01:02:07,160 Torej, ne glede na to, ali želite, da jo sprejmejo glede tega ne vzemi s sklicevanjem. 680 01:02:07,160 --> 01:02:10,200 To spreminja zaporedje na mestu. 681 01:02:10,200 --> 01:02:17,400 To preprosto ni dovoljena. Ne smeš storiti tega. >> [Študent] V redu. 682 01:02:17,400 --> 01:02:22,410 [Bowden] To, nekako se bo trajalo linije s sklicevanjem in ga spremenite. 683 01:02:22,410 --> 01:02:26,850 In še enkrat, če ne želite, da narediti, da lahko narediš kopijo vrste. 684 01:02:26,850 --> 01:02:35,850 Tudi v tem primeru je izvod dejansko ni kopija linij. 685 01:02:35,850 --> 01:02:40,620 Prav tako opozarja na isto stvar, dokler ne dobi 1. spreminjati, 686 01:02:40,620 --> 01:02:44,430 kjer se je 1. bo dobil spremenjen razvrščanja funkcijo, 687 01:02:44,430 --> 01:02:50,940 kjer je, ker je kopija ob pisanju, zdaj Kopija bo treba. 688 01:02:57,500 --> 01:03:04,250 To lahko storite tudi to. To je drug kraj, kjer si lahko ogledate 'in' znak. 689 01:03:04,250 --> 01:03:07,190 Vidiš, v zanke foreach, boste lahko videli v funkcionalnih izjav, 690 01:03:07,190 --> 01:03:10,040 in boste videli, ko le dodeljevanju spremenljivk. 691 01:03:10,040 --> 01:03:12,350 Zdaj smo dosegli ničesar s tem 692 01:03:12,350 --> 01:03:15,600 ker je kopija in linije so dobesedno eno in isto. 693 01:03:15,600 --> 01:03:19,940 Lahko uporabite linije in kopirati sopomenki. 694 01:03:19,940 --> 01:03:25,430 To lahko naredite kopijo unset ($) in da ne nevezanega linije, 695 01:03:25,430 --> 01:03:29,120 ste pravkar izgubili sklicujejo na isto stvar. 696 01:03:29,120 --> 01:03:33,440 Tako kot te točke, zdaj proge je edini način, da lahko dostopate do črte. 697 01:03:36,450 --> 01:03:38,770 >> Vprašanja? 698 01:03:41,000 --> 01:03:42,460 Ja. 699 01:03:42,460 --> 01:03:45,880 [Študent] popolnoma off topic, vendar vam ni treba zapreti s PHP - >> Saj ne. 700 01:03:45,880 --> 01:03:47,730 Ok. 701 01:03:47,730 --> 01:03:53,790 [Bowden] Jaz bi šel tako daleč, da pravijo, da je slaba praksa, da jih zaprite. 702 01:03:53,790 --> 01:03:57,580 To je verjetno pretiravanje, še posebej v pisavi, 703 01:03:57,580 --> 01:04:03,740 pa da vidimo, kaj se zgodi, če to storim. 704 01:04:03,740 --> 01:04:08,890 To ni nič. Kaj pa, če sem hotel - [vzdihne] 705 01:04:13,870 --> 01:04:16,960 Moram opraviti argument. 706 01:04:19,000 --> 01:04:22,050 Streljaj. Poklicala sem se zmotil. 707 01:04:24,340 --> 01:04:28,310 Torej php.unique.php s trditvijo. 708 01:04:28,310 --> 01:04:30,980 Zdaj sploh ne potrebujemo. 709 01:04:34,520 --> 01:04:37,740 Bom dajati tehtnega argumenta. 710 01:04:37,740 --> 01:04:42,050 To, kar je natisnjen tiskanje. 711 01:04:45,260 --> 01:04:50,080 Jaz tiskanje in kopiranje kopije ne obstaja. Torej linije. 712 01:04:53,650 --> 01:04:58,270 To natisne vse, nato pa opazil, vse to sranje dol, 713 01:04:58,270 --> 01:05:06,690 ker se v ničemer PHP, da je zunaj PHP oznak 714 01:05:06,690 --> 01:05:09,520 se le, da bo treba dobesedno natisnjeni. 715 01:05:09,520 --> 01:05:18,050 Zato HTML, to je tako lepo, da lahko naredim div bla, bla, bla razred ali karkoli, 716 01:05:18,050 --> 01:05:25,140 bla, bla, bla, nato pa naredite nekaj PHP kodo in nato naredite konec div. 717 01:05:25,140 --> 01:05:36,460 In sedaj je ta tiskanje dobim lepo div do vrha, vse, kar PHP tiskani, div na dnu. 718 01:05:36,460 --> 01:05:43,510 Katastrofa, če se kaj takega zgodi, kar je precej pogosta, 719 01:05:43,510 --> 01:05:47,930 Samo zaiti vrstico na dnu datoteke. 720 01:05:47,930 --> 01:05:50,940 Saj ne bi mislil, da bo to velik posel 721 01:05:50,940 --> 01:05:58,660 dokler ne upoštevamo dejstvo, da z brskalniki - 722 01:05:58,660 --> 01:06:03,880 >> Kako preusmerja delo ali v bistvu vse glave dela, 723 01:06:03,880 --> 01:06:07,980 Ko bo vaše povezave na spletni strani in ga pošlje nazaj vse te glave in stvari 724 01:06:07,980 --> 01:06:12,020 kot odziv 200 ali odgovor preusmeriti ali karkoli, 725 01:06:12,020 --> 01:06:18,230 Glave so veljavne le, dokler se pošlje prvi bajt podatkov. 726 01:06:18,230 --> 01:06:23,140 Lahko preusmerite tisočkrat, vendar takoj, ko je poslala prvi bajt podatkov 727 01:06:23,140 --> 01:06:26,120 ne smeš ponovno preusmeriti. 728 01:06:26,120 --> 01:06:31,860 >> Če imate potepuške vrstico na dnu datoteke 729 01:06:31,860 --> 01:06:37,260 in recimo, da to funkcijo uporabljate in potem hočeš - 730 01:06:41,580 --> 01:06:52,870 Recimo, da je ena datoteka, ki je index.php in si require_once nekaj - 731 01:06:52,870 --> 01:06:56,920 Ne morem misliti dober primer tega. 732 01:06:56,920 --> 01:07:04,740 Vprašanje se zgodi, ko postane odmevalo to vrstico na dnu. 733 01:07:04,740 --> 01:07:08,660 Če ne želite, da kaj ni bil še odmevalo. 734 01:07:10,820 --> 01:07:15,700 Čeprav niste nameravali na nič dobili odmevala, ni nekaj, kar se je ponovil 735 01:07:15,700 --> 01:07:17,990 in sedaj si ne bi smel poslati vse več glav 736 01:07:17,990 --> 01:07:20,030 in boste dobili pritožb. 737 01:07:22,170 --> 01:07:24,420 Enostavno ne potrebujem končne oznake. 738 01:07:24,420 --> 01:07:27,420 Če ste načrt o tem kaj s HTML - 739 01:07:27,420 --> 01:07:30,490 in to je popolnoma smiselno, da to, kar tukaj div 740 01:07:30,490 --> 01:07:39,450 in potem na tej točki lahko ali pa ne boste mogli vključiti. 741 01:07:39,450 --> 01:07:41,590 To sploh ni pomembno. 742 01:07:41,590 --> 01:07:45,450 Toda v PHP skripte je redko, da ga zapre. 743 01:07:45,450 --> 01:07:50,400 Ko je vse PHP, absolutno vse, 744 01:07:50,400 --> 01:07:55,460 ne boste res morali zapreti / ga ne bi smeli zapreti. 745 01:08:02,030 --> 01:08:05,720 >> Ukvarjanje s strunami, je veliko lepše, kot v C. 746 01:08:05,720 --> 01:08:09,470 V PHP lahko določite niz z enojnimi ali dvojnimi narekovaji. 747 01:08:09,470 --> 01:08:12,820 Z enojnih narekovajih ne morete uporabiti "Escape" posnetkov. 748 01:08:12,820 --> 01:08:17,640 Nenehno pobegniti, bla, bla, bla. 749 01:08:19,920 --> 01:08:24,010 Torej printf je zelo redka v PHP. 750 01:08:24,010 --> 01:08:32,290 Mislim, da bi printf uporabite, če sem hotel narediti takšne stvari - v pset 5 se uporablja sprintf ali karkoli. 751 01:08:32,290 --> 01:08:36,060 Ampak hočeš 001.jpg 002.jpg in. 752 01:08:36,060 --> 01:08:40,300 Torej, za take stvari, kjer sem dejansko želijo oblikovati besedilo bi printf uporabo. 753 01:08:40,300 --> 01:08:44,689 Sicer pa bi jaz šele raba niz spoj. 754 01:08:44,689 --> 01:08:47,000 Nikoli nisem uporabiti printf. 755 01:08:49,229 --> 01:09:00,170 Midva samo razlikovanje podatke med enojnih narekovajih in dvojne kotacije. 756 01:09:00,170 --> 01:09:07,490 Največja razlika je, da je enojnih narekovajih, bo dobesedno natisnjeni. 757 01:09:07,490 --> 01:09:15,390 Ni char vrste podatkov v PHP, za razliko od C, tako da je to enakovredna. 758 01:09:15,390 --> 01:09:17,970 Oni oba niza. 759 01:09:17,970 --> 01:09:29,180 In lepo stvar o posameznih nizov citatom je lahko rečem "zdravo svet!" bla, bla, bla, 760 01:09:29,180 --> 01:09:33,340 $ $ Wooo. 761 01:09:33,340 --> 01:09:38,260 Kaj se zgodi, ko natisnete to je, da bo tiskanje dobesedno. 762 01:09:38,260 --> 01:09:40,680 Naj se znebite vseh naših stvari. 763 01:09:40,680 --> 01:09:44,700 Torej echo $ str1; 764 01:09:48,569 --> 01:09:56,570 To dobesedno natisnjeni vse te stvari: dolar znaki, 765 01:09:56,570 --> 01:09:58,770 Znak n, ki misliš, da bi bilo novih vrstic - 766 01:09:58,770 --> 01:10:01,500 vse te stvari tiska dobesedno. 767 01:10:01,500 --> 01:10:05,650 Edina stvar, ki jo morate pobegniti, so enojnih narekovajih 768 01:10:05,650 --> 01:10:09,470 ker drugače bi mislil, da je zapiranje apostrof. 769 01:10:09,470 --> 01:10:15,050 Dvojni narekovaji, popolnoma različni. 770 01:10:20,300 --> 01:10:25,870 Smo že videli datoteko zaznamkov nas cluing na tisto, kar je približno iti zelo narobe. 771 01:10:25,870 --> 01:10:36,190 php.unique. Nedoločen spremenljivka: wooo, ker se to lahko razumelo kot spremenljivko, imenovano wooo. 772 01:10:36,190 --> 01:10:42,400 Dvojni narekovaji vam omogoča vnos spremenljivk v - 773 01:10:42,400 --> 01:10:52,730 Recimo, $ ime = "Rob"; 774 01:10:52,730 --> 01:10:58,020 Torej echo "Zdravo, moje ime je $ ime!" 775 01:10:58,020 --> 01:11:09,260 Priznava, da je to spremenljivko. 776 01:11:09,260 --> 01:11:21,210 Ko sem teči, da - in bom vstaviti novo vrstico - Zdravo, moje ime je Rob! in zdravo svet! 777 01:11:21,210 --> 01:11:24,910 To je zato, ker nikoli nisem odstranil tiskanja wooo zgoraj. 778 01:11:24,910 --> 01:11:30,020 Tu je 1 korak naprej ne moreš storiti. 779 01:11:30,020 --> 01:11:39,250 $ Niz = [1, 2, 3]; 780 01:11:39,250 --> 01:11:43,270 Kaj, če želim, da natisnete prvo indeks niz? 781 01:11:43,270 --> 01:11:45,150 Saj $ array [0]. 782 01:11:45,150 --> 01:11:49,280 V datoteko zaznamkov je namig. Kaj je to storil? 783 01:11:52,320 --> 01:11:54,510 php.unique. 784 01:11:54,510 --> 01:11:59,860 Pozdravljeni, moje ime je 1! ki ni tisto, kar sem si želela. 785 01:11:59,860 --> 01:12:05,050 Sintakso poudarjanja mi je lagal. 786 01:12:05,050 --> 01:12:13,020 Poskusimo "" -> 1, 'b' -> 2. 787 01:12:18,450 --> 01:12:21,440 Tako bi moral napisati. 788 01:12:26,350 --> 01:12:32,160 Nepričakovana enojni narekovaj (T_ENCAPSED bla, bla, bla, bla, bla). 789 01:12:32,160 --> 01:12:41,780 Ideja je, da je ne priznava, da je to del niza. 790 01:12:41,780 --> 01:12:46,620 To ne priznava, da je to niz indeksira z dopisom a. 791 01:12:46,620 --> 01:12:49,870 Si želiš, da v zavitih oklepajih, 792 01:12:49,870 --> 01:12:54,730 in zdaj bo vse, kar je v tem oklepaja kodrasti interpolirajo, 793 01:12:54,730 --> 01:13:00,340 ki je beseda, ki jo uporabljajo za vstavljanje čudežno te spremenljivke v pravih mestih. 794 01:13:00,340 --> 01:13:04,280 Zdaj tem, php.unique in Zdravo, moje ime je 1! kot je bilo pričakovano 795 01:13:04,280 --> 01:13:07,720 ali Zdravo, moje ime je Rob! 796 01:13:14,110 --> 01:13:23,130 Ena stvar, ki je nekako lepo o enojnih narekovajih, da - 797 01:13:23,130 --> 01:13:28,480 Nekaj ​​stroškov za interpolacijo. 798 01:13:30,520 --> 01:13:35,100 Če uporabite dvojne narekovaje, tolmač mora iti čez to niz, 799 01:13:35,100 --> 01:13:41,500 zagotoviti, da: "Oh, tukaj je spremenljivka. Zdaj moram iti dobil to spremenljivko in jo vstavite tukaj." 800 01:13:41,500 --> 01:13:48,930 Tudi če ne uporabljate nobenih spremenljivk, 801 01:13:48,930 --> 01:13:52,220 Nič znotraj teh narekovajev treba interpolirati, 802 01:13:52,220 --> 01:13:56,800 vendar bo še vedno počasneje, saj je potrebno iti preko dvojne narekovaje 803 01:13:56,800 --> 01:14:00,130 išče stvari, ki jih je treba interpolira. 804 01:14:00,130 --> 01:14:05,360 Torej enojnih narekovajih lahko malo hitreje, če nič drugega je treba interpolirati, 805 01:14:05,360 --> 01:14:15,650 in sem se nagibajo k uporabite tudi apostrof za "Pozdravljeni, moje ime je". $ Array ['a'] anyway. 806 01:14:15,650 --> 01:14:20,430 To se dogaja, da so enakovredni, kar smo imeli prej. 807 01:14:24,840 --> 01:14:28,440 Ampak to je stvar okusa. 808 01:14:28,440 --> 01:14:34,750 Če uporabljate PHP, vam verjetno ne skrbi hitrosti razlike. 809 01:14:34,750 --> 01:14:39,480 Ni dovolj, da jih razmislite na začetku. 810 01:14:39,480 --> 01:14:43,030 >> Vse končne vprašanje? 811 01:14:47,430 --> 01:14:51,710 >> Mi dejansko sploh ne priti skozi vse to, ampak ta stvar je bila dolgočasna. 812 01:14:51,710 --> 01:14:59,080 Zadnja stvar, ki je nekako lepo v PHP, ko imate opravka s HTML, 813 01:14:59,080 --> 01:15:06,450 boste uporabljali to malo, tako da je lepo bližnjico sintakso za tiskanje spremenljivke. 814 01:15:32,400 --> 01:15:36,730 Ne da bi PHP tukaj, se to imenuje kratke oznake. 815 01:15:36,730 --> 01:15:44,330 Uradno je PHP 5.4, je zastarelo. 816 01:15:44,330 --> 01:15:48,640 Priporočamo vam, da dajo php. 817 01:15:48,640 --> 01:15:55,770 To je še vedno možna, tako kratke oznake z 01:16:02,480 Gre za navijače privzeto, tako da lahko uporabite kot želite, in oni so zelo priročno. 819 01:16:02,480 --> 01:16:05,700 >> Kakšno vprašanje? 820 01:16:07,780 --> 01:16:09,270 V redu. 821 01:16:10,840 --> 01:16:13,800 >> Ostani classy, ​​San Diego. 822 01:16:13,800 --> 01:16:16,070 [Smeh] 823 01:16:18,620 --> 01:16:22,660 Adijo. [Smeh] 824 01:16:24,350 --> 01:16:28,470 [Aplavz] [smeh] 825 01:22:46,460 --> 01:22:49,460 >> [CS50.TV]