1 00:00:00,000 --> 00:00:02,610 [Powered by Google Translate] [8. jagu - mugavam] 2 00:00:02,610 --> 00:00:04,910 [Rob Bowden - Harvardi Ülikool] 3 00:00:04,910 --> 00:00:07,070 [See on CS50. - CS50.TV] 4 00:00:11,520 --> 00:00:14,160 >> Need nädala jagu märkmeid saab olema üsna lühike, 5 00:00:14,160 --> 00:00:19,070 nii et ma olen lihtsalt läheb edasi rääkida, kutid ei kavatse hoida küsimusi, 6 00:00:19,070 --> 00:00:22,720 ja püüame täita nii palju aega kui võimalik. 7 00:00:22,720 --> 00:00:31,950 Paljud inimesed arvavad, et see pset ei pruugi raske, aga see on väga pikk. 8 00:00:31,950 --> 00:00:37,070 Pset spec ise võtab aega tunni lugeda. 9 00:00:40,530 --> 00:00:45,730 Anname teile palju SQL mida võiks vaja kasutada. 10 00:00:45,730 --> 00:00:50,520 Me sõelub palju, seega ei tohiks olla liiga halb. 11 00:00:50,520 --> 00:00:54,560 Kas keegi on alustatud või lõpetatud? 12 00:00:55,380 --> 00:00:59,710 See on viimane pset. Oh, mu jumal. 13 00:00:59,710 --> 00:01:05,400 Tavaliselt seal JavaScript üksteise järel, kuid kalender muutus asjad 14 00:01:05,400 --> 00:01:09,560 teeb kõike 1 nädal lühem, ja me ei pea enam JavaScript pset. 15 00:01:09,560 --> 00:01:12,310 Ma ei tea, kuidas see mõjutab kas JavaScript läheb ilmuvad eksam 16 00:01:12,310 --> 00:01:15,510 või Viktoriin 1. 17 00:01:15,510 --> 00:01:22,260 Ma kujutan ette, see on midagi sellist, mida pead teadma kõrgetasemeline asju JavaScript, 18 00:01:22,260 --> 00:01:26,460 kuid ma kahtlen, et me tahaks lihtsalt anda teile kohe JavaScripti koodi 19 00:01:26,460 --> 00:01:28,720 kuna sa ei ole olnud pset ta. 20 00:01:28,720 --> 00:01:33,000 Aga see on kraami viktoriin läbivaatamise järgmisel nädalal. 21 00:01:33,000 --> 00:01:36,320 >> Jagu küsimusi. 22 00:01:36,320 --> 00:01:43,870 Palju see kraam on veidi halvasti sõnastatud, kuid me arutame miks. 23 00:01:43,870 --> 00:01:50,220 Erinevalt C, PHP on "dünaamiliselt trükitud" keel. Mida see tähendab, küsite? 24 00:01:50,220 --> 00:01:53,830 Noh, hüvasti kõik need char, float, int ja muud märksõnad, mida tuleb kasutada 25 00:01:53,830 --> 00:01:56,190 deklareerimisel muutujate ja funktsioonide C. 26 00:01:56,190 --> 00:02:00,420 PHP, muutuja tüüp määrab väärtuse, et see hoiab praegu. 27 00:02:00,420 --> 00:02:04,990 Nii et enne kui me kirjuta see kood faili nimega dynamic.php, 28 00:02:04,990 --> 00:02:12,670 PHP on dünaamiliselt kirjutatud. See on tõsi. 29 00:02:12,670 --> 00:02:17,590 Ma ei nõustu sellega, et see tähendab, et me ütleme hüvasti char, float, int, 30 00:02:17,590 --> 00:02:20,620 ja muid märksõnu. 31 00:02:20,620 --> 00:02:25,510 Täpse vahe dünaamiliselt trükitud ja teise võimalusena 32 00:02:25,510 --> 00:02:32,010 mis on staatiliselt kirjutatud, et dünaamiliselt trükkida, kõik oma tüüpi kontroll ja värki 33 00:02:32,010 --> 00:02:37,350 juhtub töötamise ajal, samas staatiliselt kirjutatud see juhtub kompileerimise ajal. 34 00:02:37,350 --> 00:02:43,030 Sõna staatiline üldiselt tundub tähendavat kompileerimise ajal asju. 35 00:02:43,030 --> 00:02:48,170 Ma arvan, et on ka muid kasutusvõimalusi, aga ka C, kui te deklareerite staatiline muutuja, 36 00:02:48,170 --> 00:02:52,650 selle ladustamine eraldatud kompileerimise ajal. 37 00:02:52,650 --> 00:02:59,260 Siin dünaamiliselt trükitud tähendab lihtsalt, et - 38 00:02:59,260 --> 00:03:04,350 C, kui püüate lisada string ja täisarv, kui sa kompileerida, 39 00:03:04,350 --> 00:03:11,000 see läheb kurdavad, sest see läheb öelda, et sa ei saa lisada int ja pointer. 40 00:03:11,000 --> 00:03:14,710 See lihtsalt ei ole kehtiv operatsiooni. 41 00:03:14,710 --> 00:03:21,170 See on teine ​​asi, et me jõuame teine. 42 00:03:21,170 --> 00:03:24,860 Aga see omamoodi kontroll, et ta kaebab kompileerimise ajal, 43 00:03:24,860 --> 00:03:29,220 on staatiline tüüp kontroll. 44 00:03:29,220 --> 00:03:35,220 On keeli, kus sa ei pea ütlema, char, float, int, ja kõik need asjad, 45 00:03:35,220 --> 00:03:40,940 kuid keelt ei saa öelda kontekstist tulenevalt asi, mis tüüpi see peaks olema, 46 00:03:40,940 --> 00:03:43,980 kuid see on ikka staatiliselt kirjutatud. 47 00:03:43,980 --> 00:03:49,000 Nii et kui te võtate 51, ocaml, sa ei pea kunagi kasutage seda tüüpi, 48 00:03:49,000 --> 00:03:58,700 kuid see ikka kompileerimise ajal ütled, ei saa seda teha, sest sa segamine int ja string. 49 00:03:58,700 --> 00:04:05,650 Dünaamiliselt kirjutatud lihtsalt tähendab, et millalgi läbijooksuaeg sa lähed, et saada kaebust. 50 00:04:05,650 --> 00:04:13,430 Kui olete ka kasutada Java enne, üldiselt peaaegu iga C-tüüpi keel 51 00:04:13,430 --> 00:04:20,070 saab olema staatiliselt trükkida, nii C, C + +, Java, kõik need on üldiselt staatiliselt kirjutatud. 52 00:04:20,070 --> 00:04:22,910 Java, kui sa kompileerida midagi ja sa räägid 53 00:04:22,910 --> 00:04:26,670 string s võrdub uus midagi, mis ei ole string, 54 00:04:26,670 --> 00:04:28,950 et läheb kurdavad, sest seda laadi lihtsalt ei sobi omavahel. 55 00:04:28,950 --> 00:04:31,180 See saab kurdavad kompileerimise ajal. 56 00:04:31,180 --> 00:04:36,750 Aga tal on ka mõned dünaamiline aeg asju meeldib, kui sa püüad koo midagi 57 00:04:36,750 --> 00:04:40,500 tüübile, mis on täpsem kui praegune tüüp, 58 00:04:40,500 --> 00:04:45,610 seal on midagi ta saab teha kompileerimise ajal kontrollida, kas seda valatud ei kavatse nõustuda. 59 00:04:45,610 --> 00:04:51,130 Java on ka mõned dünaamilist tüüpi kontroll, et niipea kui ta saab selle koodirida 60 00:04:51,130 --> 00:04:54,130 kui see on tegelikult täidesaatva, võib ta tegema hakkab enamus 61 00:04:54,130 --> 00:04:56,260 kontrollida, kas see enamus oli kehtiv esiteks, 62 00:04:56,260 --> 00:04:59,890 ja kui ei olnud, siis see läheb kurdavad, et teil on vale tüüpi. 63 00:04:59,890 --> 00:05:03,200 Dünaamiline tüüp kontrollida. 64 00:05:03,200 --> 00:05:07,010 Kirjutage see fail nimega dynamic.php. 65 00:05:10,130 --> 00:05:12,380 Dynamic.php. 66 00:05:14,580 --> 00:05:17,190 Ma unzip, et formaatimine. 67 00:05:18,750 --> 00:05:21,880 Meil on muutuja, seadsime selle täisarv 7, 68 00:05:21,880 --> 00:05:27,930 siis me ei kavatse seda trükkida ja% s - 69 00:05:27,930 --> 00:05:32,830 Oh, me oleme trükkimine tüüpi, nii gettype pöördub jälle tüüpi muutuja. 70 00:05:32,830 --> 00:05:35,720 Me lihtsalt trüki tüüp ikka ja jälle. 71 00:05:35,720 --> 00:05:39,440 Me lihtsalt php.dynamic.php. 72 00:05:39,440 --> 00:05:45,920 Me näeme, et see muutub täisarv string Boole'i ​​kui me läheme läbi. 73 00:05:45,920 --> 00:05:54,590 C ei ole Boole'i ​​andmetüüp, ei ole string andmetüüpi. 74 00:05:54,590 --> 00:06:00,500 Seal on char * ja Boole'i ​​lihtsalt kipub olema int või char või midagi. 75 00:06:00,500 --> 00:06:05,690 PHP tüüpi ei ole, ja see on üks suur eeliseid PHP üle C - 76 00:06:05,690 --> 00:06:13,290 et string toimingud on lõpmatult lihtsam PHP kui C. Nad lihtsalt tööd. 77 00:06:13,290 --> 00:06:18,290 >> Nii et me tuleme siia tagasi. 78 00:06:18,290 --> 00:06:21,260 Jooksime dynamic.php. 79 00:06:21,260 --> 00:06:26,710 See ütleb PHP tõlk, nimetatakse php, joosta PHP koodi dynamic.php. 80 00:06:26,710 --> 00:06:30,250 Kui teil on mingeid vigu fail, tõlk ütlen teile! 81 00:06:30,250 --> 00:06:39,110 Tõlk, see on teine ​​suur vahe PHP ja C. 82 00:06:39,110 --> 00:06:48,200 C teil on koguda midagi ja siis sa jooksed, et kompileeritud faili. 83 00:06:48,200 --> 00:06:50,490 PHP-s saad kunagi kompileerida midagi. 84 00:06:50,490 --> 00:06:57,200 Nii PHP tõlk on põhimõtteliselt lihtsalt loed seda rida-realt. 85 00:06:57,200 --> 00:07:02,900 See tabab var = 7, siis see tabab printf siis see tabab var siis see tabab printf ja nii edasi. 86 00:07:02,900 --> 00:07:10,910 Seal on natuke koostamise ta teeb, ja see vahemälu tulemused 87 00:07:10,910 --> 00:07:15,510 nii et kui sa käivitada skripti hiljem võite teha mõned, 88 00:07:15,510 --> 00:07:19,280 kuid põhimõtteliselt on see rida-realt asjad. 89 00:07:19,280 --> 00:07:25,280 See tähendab, et palju optimeerimist, et me saame C, 90 00:07:25,280 --> 00:07:31,920 nagu koostamisel, see on lihtsalt üldiselt tõlkija saab teha palju trikke teile. 91 00:07:31,920 --> 00:07:36,110 See võib võtta välja kasutamata muutujaid, siis saab teha kõiki neid erinevaid asju, 92 00:07:36,110 --> 00:07:38,660 ta võib teha saba rekursioon. 93 00:07:38,660 --> 00:07:42,550 PHP sa ei hakka seda eelist 94 00:07:42,550 --> 00:07:45,690 sest see on lihtsalt kavatse alustada täidesaatva rida-realt, 95 00:07:45,690 --> 00:07:49,950 ja see ei ole tegelikult ära need asjad nii lihtsalt 96 00:07:49,950 --> 00:07:54,440 kuna see ei ole 1 suur koostamine pass asja üle ja siis täitmist; 97 00:07:54,440 --> 00:07:56,860 see on lihtsalt rida-realt. 98 00:08:00,730 --> 00:08:02,750 Nii et tõlk. 99 00:08:02,750 --> 00:08:06,840 >> Tagasi meie dünaamiline kirjutades: päris lahe, ah? 100 00:08:06,840 --> 00:08:08,640 Te kindlasti ei saa seda teha, et C! 101 00:08:08,640 --> 00:08:11,860 Nüüd, vaata kui saad aru tüübi iga järgmise väärtused. 102 00:08:11,860 --> 00:08:14,760 Vaadake seda viite. 103 00:08:14,760 --> 00:08:19,420 Nii 3.50. Mis tüüpi sa arvad, et see saab olema? 104 00:08:24,480 --> 00:08:26,370 Siin on liiki meil. 105 00:08:26,370 --> 00:08:30,430 Meil on bools, täisarvud, ujuva punkti, stringid, massiivid, esemeid, 106 00:08:30,430 --> 00:08:38,370 ja siis ressursse, mis on selline ebamäärane. 107 00:08:38,370 --> 00:08:41,010 Ma arvan, et seal on tegelikult näiteks siin. 108 00:08:41,010 --> 00:08:43,740 Siis on NULL. NULL on eritüüpi. 109 00:08:43,740 --> 00:08:47,140 Erinevalt C, kus NULL on lihtsalt kursor aadressiga 0, 110 00:08:47,140 --> 00:08:54,930 PHP, NULL on oma liik, kus ainsaks kehtivaks asi seda liiki on NULL. 111 00:08:57,560 --> 00:09:00,670 See on palju kasulikum veatuvastuse. 112 00:09:00,670 --> 00:09:04,310 C, kus meil oli see teema, kus, kui sa tagasi NULL, 113 00:09:04,310 --> 00:09:08,660 kas see tähendab, et sa tagasi NULL pointer või kasutades NULL tähenda viga 114 00:09:08,660 --> 00:09:12,380 või kõik see segadus oli meil üks punkt. 115 00:09:12,380 --> 00:09:18,440 Siin jälle NULL tähendab üldiselt viga. 116 00:09:20,860 --> 00:09:27,300 Palju asju ka tagasi false viga. 117 00:09:27,300 --> 00:09:33,140 Aga point on NULL tüüp, ainus asi on NULL tüüp on NULL. 118 00:09:33,140 --> 00:09:40,090 Siis tagasihelistamise on nagu saate määratleda mõned anonüümsed funktsioonid. 119 00:09:40,090 --> 00:09:46,420 Sa ei pea andma funktsiooni nime, aga sa ei pea tegelema, et siin. 120 00:09:46,420 --> 00:09:53,940 Vaadates tüüpi, et nad ootavad, et me teaksime, 121 00:09:53,940 --> 00:09:59,000 Mis sa arvad tüüpi 3,50 on? >> [Üliõpilane] Float. 122 00:09:59,000 --> 00:10:00,370 Jah. 123 00:10:00,370 --> 00:10:06,290 Nii siis siin, mis sa arvad tüüpi see on? >> [Üliõpilane] massiivi. 124 00:10:06,290 --> 00:10:09,890 Jah. Esimene oli float, teine ​​on massiiv. 125 00:10:09,890 --> 00:10:14,500 Pange tähele, et see massiivi ei ole nagu C massiivi 126 00:10:14,500 --> 00:10:19,610 kus teil on indeks 0 on mingi väärtus, indeks 1 on mingi väärtus. 127 00:10:19,610 --> 00:10:26,320 Siin indeksid, b ja c ja väärtused on 1, 2 ja 3. 128 00:10:26,320 --> 00:10:33,980 PHP ei ole vahet assotsiatiivne massiiv ja lihtsalt tavalise massiivi 129 00:10:33,980 --> 00:10:36,740 kui sa arvad seda ka C. 130 00:10:36,740 --> 00:10:43,040 On vaid see, ja all kapuuts regulaarne massiiv on lihtsalt assotsiatiivne massiiv 131 00:10:43,040 --> 00:10:50,000 kus 0 kaarte mingi väärtus samal viisil kaarte mingi väärtus. 132 00:10:50,000 --> 00:11:00,410 Seetõttu PHP saab päris halb tõesti kiire koodi / võrdlusuuringute asjad 133 00:11:00,410 --> 00:11:07,930 kuna C, kui te kasutate massiivi sa tead, et tutvumise liige on pidevalt aega. 134 00:11:07,930 --> 00:11:11,860 PHP tutvumise liige on kes teab kui palju aega? 135 00:11:11,860 --> 00:11:18,970 See on ilmselt pidev kui see hashes õigesti. 136 00:11:18,970 --> 00:11:21,620 Kes teab, mida see tegelikult teeb selle all kapuuts? 137 00:11:21,620 --> 00:11:25,600 Sa tõesti vaja vaadata rakendamise näha, kuidas see läheb tegeleda sellega. 138 00:11:25,600 --> 00:11:28,550 Nii siis fopen. 139 00:11:28,550 --> 00:11:36,420 Ma arvan, et siin olgem lihtsalt PHP manuaal fopen vaadata tagastab tüüp. 140 00:11:36,420 --> 00:11:41,260 Me näeme siin võid otsida päris palju tahes funktsiooni PHP manuaal 141 00:11:41,260 --> 00:11:47,540 ja see on omamoodi mees leht PHP. 142 00:11:47,540 --> 00:11:51,060 Tagastab tüüp saab olema ressurss. 143 00:11:51,060 --> 00:11:56,050 Sellepärast ma vaatasin seda, sest me ei ole tegelikult määratleda ressurss. 144 00:11:56,050 --> 00:12:04,110 Idee ressurss, C teil mingi sain FILE * või mis iganes; 145 00:12:04,110 --> 00:12:07,200 PHP ressurss on oma faili *. 146 00:12:07,200 --> 00:12:10,360 See, mida sa lähed tuleb lugemine, see on, mida sa lähed tuleb kirjalikult. 147 00:12:10,360 --> 00:12:20,710 See on tavaliselt väline, nii et see on ressurss, mida saab tõmmata asju ja viska asju. 148 00:12:20,710 --> 00:12:26,520 Ja lõpuks, mida on tüüpi NULL? >> [Üliõpilane] NULL. 149 00:12:26,520 --> 00:12:30,650 Jah. Nii et ainus asi, mis on NULL NULL. 150 00:12:30,650 --> 00:12:33,480 NULL NULL. 151 00:12:35,490 --> 00:12:41,170 >> Üks tunnusjoon PHP tüüp süsteem (hea või halb) on tema võime žongleerima tüübid. 152 00:12:41,170 --> 00:12:44,390 Kui sa kirjutada rida PHP koodi, mis ühendab väärtusi eri tüüpi, 153 00:12:44,390 --> 00:12:46,670 PHP püüan teha mõistlik asi. 154 00:12:46,670 --> 00:12:48,920 Proovige iga järgneva rida PHP koodi. Mis välja printida? 155 00:12:48,920 --> 00:12:51,000 Kas see, mida sa oodata? Miks või miks mitte? 156 00:12:51,000 --> 00:12:58,600 See fakt PHP teebki see, mida me nimetame nõrgalt kirjutatud. 157 00:12:58,600 --> 00:13:04,610 Nõrgalt kirjutatud ja tugevalt trükkida, 158 00:13:04,610 --> 00:13:06,840 on mitmeid eri kasutusalasid sellistel tingimustel, 159 00:13:06,840 --> 00:13:12,020 kuid enamik inimesi kasutab nõrgalt kirjutatud ja tugevalt tipitud tähendab selline asi 160 00:13:12,020 --> 00:13:15,920 kus ("1" + 2); mis töötab. 161 00:13:15,920 --> 00:13:18,290 C, mis ei tööta. 162 00:13:18,290 --> 00:13:22,490 Võite ette kujutada, see ei tööta. 163 00:13:22,490 --> 00:13:29,200 Paljud inimesed segatakse dünaamiline kirjutades ja nõrk kirjutades ja staatiline kirjutades ja tugev kirjutades. 164 00:13:29,200 --> 00:13:34,050 Python on järjekordne näide keel, mis on dünaamiliselt kirjutatud. 165 00:13:34,050 --> 00:13:41,770 Võite viska ümber liigid muutujad ja see läheb määrata läbijooksuaeg 166 00:13:41,770 --> 00:13:44,680 viga kontrolli tarvis. 167 00:13:44,680 --> 00:13:50,740 Python see läheb täide see ja see näeb ("1" + 2); 168 00:13:50,740 --> 00:13:55,920 ja see ei õnnestu, sest ta ütleb, et sa ei saa lisada string ja täisarv. 169 00:13:55,920 --> 00:14:00,860 PHP, mis on sama dünaamiliselt kirjutatud, see ei õnnestu. 170 00:14:00,860 --> 00:14:04,220 Nõrk kirjutades on pistmist, et ta teeb asju liigid 171 00:14:04,220 --> 00:14:07,800 et ei ole tõesti mõtet tingimata. 172 00:14:07,800 --> 00:14:17,420 Nii ("1" + 2), ma kujutan ette, et on string 12, Ma kujutan ette, et oleks string 3, 173 00:14:17,420 --> 00:14:20,710 Ma kujutan ette, et oleks täisarv 3. 174 00:14:20,710 --> 00:14:24,530 See ei pruugi täpselt määratletud, ja me ilmselt näeme siin 175 00:14:24,530 --> 00:14:29,140 et kui me printida ("1" + 2), see on ilmselt läheb lõpuks on erinevad 176 00:14:29,140 --> 00:14:32,320 kui trükkimine (1 + "2"). 177 00:14:32,320 --> 00:14:39,700 Ja see kipub olema, minu arvates halvemuse poole. 178 00:14:39,700 --> 00:14:44,240 Siin võib proovida neid. 179 00:14:44,240 --> 00:14:48,740 Teine väike trikk umbes PHP on sa ei pea tegelikult kirjutada faili. 180 00:14:48,740 --> 00:14:52,790 See on selle käsu režiimis. 181 00:14:52,790 --> 00:14:57,710 Nii et php-r, siis me ei viska käsk siin: 182 00:14:57,710 --> 00:15:06,610 "Print ('1 '+ 2);" ja ma viskan uue rea. 183 00:15:19,550 --> 00:15:23,970 See trükitud 3. 184 00:15:31,100 --> 00:15:35,330 Tundub, et see prindib 3 ja see on täisarv 3. 185 00:15:35,330 --> 00:15:38,420 Nii et nüüd proovime teistpidi: 186 00:15:38,420 --> 00:15:42,970 "Print (1 + 2"); 187 00:15:45,560 --> 00:15:50,490 Me saame 3 ning see on see ka saab olema täisarv 3? Ma ausalt ei tea. 188 00:15:50,490 --> 00:15:54,030 Tundub, et on järjepidev. 189 00:15:54,030 --> 00:15:59,550 Ei ole kunagi mingit võimalust see on string 12 või midagi sellist 190 00:15:59,550 --> 00:16:08,080 sest PHP, erinevalt JavaScript ja Java liiga, 191 00:16:08,080 --> 00:16:11,670 on eraldi operaatori jaoks ahel. 192 00:16:11,670 --> 00:16:14,930 Ketistamine PHP on täpp. 193 00:16:14,930 --> 00:16:22,950 Nii trükkimine (1. '2 '); Läheb meile 12. 194 00:16:25,790 --> 00:16:32,420 See kipub tekitada segadust, kus inimesed püüavad teha midagi str + = 195 00:16:32,420 --> 00:16:37,840 mõne muu asi, et nad tahavad lisada kohta oma lõpu string, ja mis on läbi kukkunud. 196 00:16:37,840 --> 00:16:40,770 Sa pead tegema tn. = 197 00:16:42,000 --> 00:16:46,240 Nii et ärge unustage ahel PHP on punkt. 198 00:16:46,240 --> 00:16:52,100 Muud asjad, mida proovida: print ("CS" + 50); 199 00:16:55,750 --> 00:17:03,610 Ma ütlesin teile, et ei ole lootust et see põhjustaks CS50 200 00:17:03,610 --> 00:17:06,119 alates ahel ei ole +. 201 00:17:06,119 --> 00:17:08,440 Mis sa arvad, et see läheb lõpuks on? 202 00:17:10,359 --> 00:17:13,460 Ma ausalt ei ole absoluutselt aimugi. 203 00:17:14,250 --> 00:17:16,460 Tundub, et see on vaid 50. 204 00:17:16,460 --> 00:17:21,490 See näeb string, ja ma võin kihla vedada, kui me paneme 123CS - 205 00:17:21,490 --> 00:17:29,640 See näeb esimest stringi, see üritab lugeda täisarv see või number saada. 206 00:17:29,640 --> 00:17:31,710 Sel juhul ta peab 123CS. 207 00:17:31,710 --> 00:17:35,190 "See ei ole loogiline kuna täisarv, nii et ma olen lihtsalt kavatse arvan 123". 208 00:17:35,190 --> 00:17:38,580 Nii et 123 + 50 saab olema 173. 209 00:17:38,580 --> 00:17:40,740 Ja siin see algab loed seda kui täisarv. 210 00:17:40,740 --> 00:17:45,690 See ei näe midagi, nii see lihtsalt kohtleb 0. Nii et 0 + 50 saab olema 50. 211 00:17:45,690 --> 00:17:51,600 See ma olen eeldades kavatseb teha midagi sarnast. 212 00:17:51,600 --> 00:17:54,310 Ma mõtlesin 99. 213 00:17:54,310 --> 00:17:57,580 Jah, sest see läheb tegema esimese - 214 00:18:12,880 --> 00:18:15,730 Nii 99. 215 00:18:15,730 --> 00:18:21,970 Siin (10/7), kui see oleks C, siis milline oleks selle tagasi? 216 00:18:23,700 --> 00:18:29,630 [Üliõpilane] 1. >> Jah, see oleks 1 sest 10/7 on jagamisel 2 täisarvud. 217 00:18:29,630 --> 00:18:32,910 Täisarv jagatud täisarv läheb tagasi täisarv. 218 00:18:32,910 --> 00:18:37,750 See ei saa naasta 1 punkt mis iganes see oleks, nii et see lihtsalt läheb tagasi 1. 219 00:18:37,750 --> 00:18:46,120 Siin trükkimine (10/7), see läheb tegelikult tõlgendada seda. 220 00:18:46,120 --> 00:18:53,760 Ja see tähendab, et kui sa tegelikult teha tahad täisarv ümardamine ja värki, 221 00:18:53,760 --> 00:18:59,950 sa pead tegema print (põrand (10/7)); 222 00:18:59,950 --> 00:19:08,460 C on ilmselt imelik, et saab toetuda täisarv kärpimise regulaarselt, 223 00:19:08,460 --> 00:19:12,260 aga PHP ei saa, sest see automaatselt muuta see sularahaga. 224 00:19:13,430 --> 00:19:17,610 Ja siis (7 + true); mis sa arvad, et see saab olema? 225 00:19:18,550 --> 00:19:23,640 Olen aim 8, kui see saab tõlgendada tõsi on 1. 226 00:19:23,640 --> 00:19:25,740 Tundub, et see on 8. 227 00:19:25,740 --> 00:19:31,710 >> Nii et kõik, mida me oleme teinud viimase 10 minuti sa peaksid kindlasti ei tee. 228 00:19:31,710 --> 00:19:39,870 Näete kood, mis seda teeb. 229 00:19:39,870 --> 00:19:42,700 See ei pea olema nii lihtne kui see. 230 00:19:42,700 --> 00:19:47,240 Sa oleks võinud 2 muutujate ja 1 varieeruv juhtub olema string 231 00:19:47,240 --> 00:19:51,310 ja muud muutuva juhtub olema int, ja siis lisada need muutujad koos. 232 00:19:51,310 --> 00:20:00,120 Kuna PHP on dünaamiliselt kirjutatud ja see ei tee mingit tüüpi kontroll teile 233 00:20:00,120 --> 00:20:03,640 Ja kuna see on nõrgalt kirjutatud ja kuna see lihtsalt automaatselt visata need asjad kokku 234 00:20:03,640 --> 00:20:11,490 ja kõik saab lihtsalt töö, see on raske isegi tean, et see muutuja peab olema string nüüd, 235 00:20:11,490 --> 00:20:14,930 nii et ma ei tohiks lisada see seda muutujat, mis on täisarv. 236 00:20:18,780 --> 00:20:24,560 Hea tava on, kui muutuja on string, hoida seda stringi igavesti. 237 00:20:24,560 --> 00:20:26,980 Kui muutuja on int, hoida seda int igavesti. 238 00:20:26,980 --> 00:20:30,770 Kui soovite tegeleda täisarvud ja stringid, 239 00:20:30,770 --> 00:20:36,970 saate varsint - see on JavaScript. 240 00:20:36,970 --> 00:20:42,520 Intval. Ma teen seda kogu aeg. PHP ja JavaScript ma segada kõike. 241 00:20:42,520 --> 00:20:47,600 Nii intval läheb tagasi täisarv muutuja väärtuse. 242 00:20:47,600 --> 00:20:56,550 Kui võtame ka "print (intval ('123 ')); saad 123. 243 00:21:06,820 --> 00:21:15,850 Intval ise ei kavatse seda teha tšeki meile, et see on ainult täisarv. 244 00:21:15,850 --> 00:21:20,460 PHP manuaal, seal on lihtsalt nii palju funktsioone kättesaadavad, 245 00:21:20,460 --> 00:21:26,560 Nii et siin ma arvan, mida ma kasutan on is_numeric esimene. 246 00:21:26,560 --> 00:21:32,590 Ma arvan, et tagastada vale. 247 00:21:32,590 --> 00:21:35,780 See on teine ​​asi, me peame minema üle on ===. 248 00:21:37,850 --> 00:21:44,020 Nii is_numeric ('123df "), siis ei mõtle, et kui is_numeric. 249 00:21:44,020 --> 00:21:46,720 C oleksite itereerima üle kõik märgid 250 00:21:46,720 --> 00:21:50,410 ja vaadata, kui iga märk on number või mis iganes. 251 00:21:50,410 --> 00:21:53,850 Siin is_numeric kavatseb teha, et meie jaoks 252 00:21:53,850 --> 00:21:56,520 ja see on jälle vale. 253 00:21:56,520 --> 00:22:02,120 Nii et kui ma trükitud, et see trükitud midagi, et siin olen võrreldes seda näha, 254 00:22:02,120 --> 00:22:05,490 sa juhtumisi vale? Ja nüüd see prindib 1. 255 00:22:05,490 --> 00:22:10,060 Ilmselt see prindib 1 tõeliste printimise asemel tõsi mis tõsi. 256 00:22:10,060 --> 00:22:15,790 Ma ei tea, kas ma print_r. Ei, see teeb ikka 1. 257 00:22:15,790 --> 00:22:26,760 >> Tulles tagasi ===, == endiselt olemas, 258 00:22:26,760 --> 00:22:32,260 ja kui sa rääkida Tommy ta ütleb == on täiesti korras. 259 00:22:32,260 --> 00:22:37,700 Ma ütlen, et == on kohutav ja sa ei tohi kunagi kasutada ==. 260 00:22:37,700 --> 00:22:44,870 Erinevus on, et == võrdleb asjad 261 00:22:44,870 --> 00:22:48,450 kus see võib olla tõsi, isegi kui nad ei ole sama tüüpi, 262 00:22:48,450 --> 00:22:53,810 arvestades === võrdleb asju ja kõigepealt kontrollid on nad sama tüüpi? 263 00:22:53,810 --> 00:22:58,010 Jah. Okei, nüüd ma lähen, et näha, kui nad tegelikult võrrelda olema võrdne. 264 00:22:58,010 --> 00:23:08,890 Sa saad imelikke asju nagu 10 võrdub - Vaatame, mida see ütleb. 265 00:23:08,890 --> 00:23:15,570 Nii ('10 '== '1 e1'); 266 00:23:15,570 --> 00:23:17,980 See tagastab tõsi. 267 00:23:17,980 --> 00:23:21,420 Kas kellelgi on mingeid arvailtaisiin miks see tagastab tõsi? 268 00:23:25,180 --> 00:23:27,120 See ei ole ainult selles. Võib-olla on see vihje. 269 00:23:27,120 --> 00:23:33,170 Aga kui ma seda muuta, et f - darn it! Hoian kasutades jutumärgid. 270 00:23:33,170 --> 00:23:38,780 Põhjus jutumärgid on karjuma mind, sest ma olen panna see jutumärgid. 271 00:23:38,780 --> 00:23:43,850 Nii et ma võiks põgeneda jutumärgid siin, kuid ülakoma oleks lihtsam. 272 00:23:43,850 --> 00:23:49,120 Nii ('10 '== '1 F1'); ei prindi õige. ('10 '== '1 E1'); prindib tõsi. 273 00:23:49,120 --> 00:23:56,330 [Üliõpilane] Kas see hex? >> See pole hex, kuid see on lähedal, et see on nagu - 274 00:23:56,330 --> 00:24:01,060 1E1, teaduslik kuju. 275 00:24:01,060 --> 00:24:07,950 Ta tunnistab, 1E1 kui 1 * 10 ^ 1 või mis iganes. 276 00:24:07,950 --> 00:24:11,510 Need on võrdsed täisarvud. 277 00:24:11,510 --> 00:24:15,930 Kui me seda teeme === siis see saab olla vale. 278 00:24:15,930 --> 00:24:28,490 Ma tegelikult ei tea, kui me teeme == kuidas (10 ja '10abc ');? Hea küll. Nii et see on tõsi. 279 00:24:28,490 --> 00:24:35,940 Nii lihtsalt meeldib, kui sa tegid (10 + '10abc ") ning oleks 20, 280 00:24:35,940 --> 00:24:38,800 siin (10 == '10abc '); on tõsi. 281 00:24:38,800 --> 00:24:45,350 Isegi hullem on asjad (väär == NULL); on tõsi 282 00:24:45,350 --> 00:24:52,210 või (väär == 0); on tõsi, (vale == []); 283 00:24:52,210 --> 00:25:00,970 On imelik juhtumid - See on üks neist, imelik juhtudel. 284 00:25:00,970 --> 00:25:08,110 Pange tähele, et (väär == []); on tõsi. 285 00:25:08,110 --> 00:25:11,950 ('0 '== False); on tõsi. 286 00:25:11,950 --> 00:25:16,090 ('0 '== []); On vale. 287 00:25:16,090 --> 00:25:19,090 Nii == ei ole mingil viisil transitiivne. 288 00:25:19,090 --> 00:25:26,830 saab olema võrdne b ja võib olla võrdne c, 289 00:25:26,830 --> 00:25:29,340 aga b ei pruugi olla võrdne c. 290 00:25:29,340 --> 00:25:35,580 See on jõledus mulle, ja siis tuleb alati kasutada ===. 291 00:25:35,580 --> 00:25:38,590 [Üliõpilane] Kas me teeme! == Ka? >> [Bowden] Jah. 292 00:25:38,590 --> 00:25:44,600 Samaväärne oleks! = Ja! ==. 293 00:25:44,600 --> 00:25:48,230 See on tegelikult kasvada pset spec 294 00:25:48,230 --> 00:25:52,000 kus palju funktsioone tulu - 295 00:25:52,000 --> 00:25:53,890 PHP manuaal on hea midagi. 296 00:25:53,890 --> 00:25:59,140 See paneb suure punase kasti "See tagastab false, kui seal on viga." 297 00:25:59,140 --> 00:26:03,940 Aga tagasi 0 on täiesti mõistlik asi tagasi. 298 00:26:03,940 --> 00:26:08,250 Mõtle mõni funktsioon, mis eeldatavasti tagasi täisarv. 299 00:26:11,250 --> 00:26:17,880 Oletame, et see funktsioon peaks lugema ridade arvu fail või midagi. 300 00:26:17,880 --> 00:26:23,490 Tavaolukorras te kaotate seda funktsiooni faili 301 00:26:23,490 --> 00:26:27,120 ja see läheb tagasi täisarv, mis tähistab ridade arvu. 302 00:26:27,120 --> 00:26:30,820 Nii et 0 on täiesti mõistlik number, kui fail on lihtsalt tühi. 303 00:26:30,820 --> 00:26:36,810 Aga kui sa andke seda vigane fail ja funktsioon juhtub tagasi false 304 00:26:36,810 --> 00:26:38,860 kui te kaotate see vigane fail? 305 00:26:38,860 --> 00:26:46,500 Kui sa just ei == sa ei eristades puhul vahel vigane fail ja tühi fail. 306 00:26:48,870 --> 00:26:51,350 Kasutage alati ===. 307 00:26:55,690 --> 00:26:58,000 See on kõik need. 308 00:26:58,000 --> 00:27:01,660 >> PHP, massiivi tüüp on erinev sellest, mida sa oled harjunud C. 309 00:27:01,660 --> 00:27:06,650 Tõepoolest, siis võib olla juba märganud seda üle, kui nägid, et see on tüüpi massiiv. 310 00:27:06,650 --> 00:27:15,640 Sulg süntaks on uus nagu PHP 5.4, mis on uusim versioon PHP. 311 00:27:15,640 --> 00:27:36,960 Enne seda sa alati tuli kirjutada array ("a" -> 1 "b" -> 2. 312 00:27:36,960 --> 00:27:41,160 See oli ehitaja jaoks massiivi. 313 00:27:41,160 --> 00:27:45,950 Nüüd PHP on lõpuks jõudnud ümber kena süntaks lihtsalt nurksulgudesse 314 00:27:45,950 --> 00:27:50,900 mis on lihtsalt nii palju parem kui massiivi. 315 00:27:50,900 --> 00:27:54,480 Aga arvestades PHP 5.4 uusim versioon, 316 00:27:54,480 --> 00:27:59,090 võivad ilmneda kohad, mis ei ole isegi PHP 5.3. 317 00:27:59,090 --> 00:28:08,220 Suve jooksul oleme sattus see probleem, kus PHP 5.3 oli see, mida me pidime seadmele 318 00:28:08,220 --> 00:28:14,480 kuid server, mida me kasutusele kõik meie klassi raamat ja esitab ja kõik see kraam, et 319 00:28:14,480 --> 00:28:16,750 oli PHP 5.4. 320 00:28:16,750 --> 00:28:23,060 Ei tea seda, me töötatud 5.3, lükatakse 5.4 321 00:28:23,060 --> 00:28:25,660 ja nüüd äkki keegi meie kood töötab 322 00:28:25,660 --> 00:28:28,680 sest seal juhtus on muutused vahel 5.3 ja 5.4 323 00:28:28,680 --> 00:28:31,030 mis ei ole tahapoole ühilduvad, 324 00:28:31,030 --> 00:28:35,770 ja me peame minema ja fikseerida kõik meie asjad, mis ei tööta PHP 5.4. 325 00:28:39,210 --> 00:28:42,320 Selle klassi, kuna seade ei pea PHP 5.4, 326 00:28:42,320 --> 00:28:45,490 see on täiesti hea kasutada nurksulgudes. 327 00:28:47,240 --> 00:28:50,440 Aga kui otsite üles asjad ümber Internet, 328 00:28:50,440 --> 00:28:54,880 kui otsite üles mingi hulga kraami, tõenäoliselt sa lähed näha 329 00:28:54,880 --> 00:29:02,020 täpsustada massiivi ehitaja süntaks kuna see on olnud umbes alates PHP sündis 330 00:29:02,020 --> 00:29:07,340 ja nurksulg süntaks on olnud juba viimased paar kuud 331 00:29:07,340 --> 00:29:10,020 või siis 5,4 tuli ümber. 332 00:29:10,020 --> 00:29:12,710 See, kuidas sa indeks. 333 00:29:12,710 --> 00:29:30,610 Täpselt nagu K kuidas oleks indeks nurksulgudes nagu $ massiiv [0], $ array [1], $ array [2] 334 00:29:30,610 --> 00:29:36,320 sa indeks samamoodi kui juhtub, et teie indeksid on stringid. 335 00:29:36,320 --> 00:29:40,440 Nii et $ massiiv [""] ja $ massiiv ["b"]. 336 00:29:40,440 --> 00:29:47,410 $ Array [b]. Miks see vale? 337 00:29:52,490 --> 00:29:59,870 Tõenäoliselt luua hoiatus aga veel palju tööd. PHP kipub seda tegema. 338 00:29:59,870 --> 00:30:04,890 See kipub lihtsalt: "Ma lähen hoiatab Teid selle eest, aga ma lihtsalt lähen edasi minna 339 00:30:04,890 --> 00:30:07,550 "Ja mida iganes saan." 340 00:30:07,550 --> 00:30:11,500 Tõenäoliselt tõlkida seda stringi, 341 00:30:11,500 --> 00:30:15,000 kuid on võimalik, et mingil ajahetkel minevikus keegi ütles 342 00:30:15,000 --> 00:30:20,180 define b olla "Hello World". 343 00:30:20,180 --> 00:30:28,740 Nüüd b võib olla pidev ja $ array [b] tegelikult teeme "Hello World". 344 00:30:28,740 --> 00:30:32,380 Ma arvan, et sel hetkel, või vähemalt meie PHP seaded, 345 00:30:32,380 --> 00:30:37,870 kui sa püüad indeks array ja et võti ei ole olemas, see ei õnnestu. 346 00:30:37,870 --> 00:30:40,150 Ma ei usu, see lihtsalt hoiatan sind. 347 00:30:40,150 --> 00:30:44,560 Või vähemalt võib seda nii, et see ei ole lihtsalt hoiatan sind, see lihtsalt otse üles ebaõnnestub. 348 00:30:44,560 --> 00:30:49,290 >> Kuidas sa vaadata, kui seal tegelikult on selline indeks isset. 349 00:30:49,290 --> 00:30:54,690 Nii isset ($ massiiv ["Hello World"]) tagastab FALSE. 350 00:30:54,690 --> 00:30:59,160 isset ($ massiiv ['b']) tagastab tõsi. 351 00:31:06,830 --> 00:31:09,880 Võite kasutada neid syntaxes. 352 00:31:15,060 --> 00:31:22,440 Ma olen päris kindel, mida see massiiv oleks lõpuks on on - Me ei saa seda testida. 353 00:31:43,290 --> 00:31:45,700 Oh, mul on vaja PHPWord. 354 00:31:53,960 --> 00:32:00,260 See on segamine süntaks, kus sa täpsustada, mis võti on 355 00:32:00,260 --> 00:32:03,330 ja sa ei täpsusta, mida võti on. 356 00:32:03,330 --> 00:32:05,520 So 3 siin on väärtus. 357 00:32:05,520 --> 00:32:08,080 Sa ei ole selgesõnaliselt öelnud, mida selle võtme saab olema. 358 00:32:08,080 --> 00:32:11,670 Mis sa arvad oma võti saab olema? 359 00:32:11,670 --> 00:32:21,410 [Üliõpilane] 0. >> Olen aim 0 vaid sellepärast, et see on esimene me ei ole täpsustatud. 360 00:32:21,410 --> 00:32:23,500 Me ei saa tegelikult teha paar neist juhtudest. 361 00:32:23,500 --> 00:32:28,030 Nii print_r on printida rekursiivne. See trükkida kogu massiivi. 362 00:32:28,030 --> 00:32:32,700 Oleks printida subarrays on massiiv, kui neid oli. 363 00:32:32,700 --> 00:32:36,630 Nii print_r ($ massiiv); php.test.php. 364 00:32:36,630 --> 00:32:38,810 See ei tundu see andis 0. 365 00:32:38,810 --> 00:32:43,530 Seal on tegelikult midagi meeles pidada siin, kuid me võtame seda teist. 366 00:32:43,530 --> 00:32:45,850 Aga kui ma juhtun tegema selle indeksi 1? 367 00:32:45,850 --> 00:32:51,170 PHP ei erista stringi indeksid ja täisarv indeksid, 368 00:32:51,170 --> 00:33:00,280 nii et siinkohal ma olen lihtsalt määratletud punktides 1 ja ma saan teha nii $ array [1] ja $ array ['1 '] 369 00:33:00,280 --> 00:33:06,250 ja see saab olema sama indeksit ja sama võtit. 370 00:33:06,250 --> 00:33:13,000 Nüüd mida sa arvad 3 saab olema? >> [Üliõpilane] 2. >> [Bowden] Olen aim 2. 371 00:33:16,000 --> 00:33:18,690 Jah. See on 2. 372 00:33:18,690 --> 00:33:24,790 Mis siis, kui me seda tegime on 10, see on 4? Mis sa arvad indeks 3 saab olema? 373 00:33:27,360 --> 00:33:29,110 Ma mõtlesin 11. 374 00:33:29,110 --> 00:33:33,060 Ma arvan, et mida PHP teeb - ja ma arvan, et olen seda varem näinud - 375 00:33:33,060 --> 00:33:39,760 Kas see on lihtsalt jälgib, mida kõrgeim numbriline indeks seda kasutatakse siiani. 376 00:33:39,760 --> 00:33:44,230 See ei saa kunagi määrata stringi indeks 3. See on alati numbriline indeks. 377 00:33:44,230 --> 00:33:47,690 Nii et ta hoiab silma peal ka kõrgeima see on määratud nii kaugele, mis juhtub olema 10, 378 00:33:47,690 --> 00:33:52,540 ja see on annan 11-3. 379 00:33:52,540 --> 00:34:02,110 Mis ma enne ütlesin, märkate, kuidas ta prindib selle massiivi. 380 00:34:02,110 --> 00:34:06,850 Ta prindib võti 10 võti 4, võti 11 võti d. 381 00:34:06,850 --> 00:34:09,790 Või isegi teeme - 382 00:34:15,760 --> 00:34:22,489 Ma arvan, et ma ei pane 0, aga see on trükkimine 1, 2, 3, 4. 383 00:34:22,489 --> 00:34:29,330 Mida teha, kui ma saan siin? Või oletame, tegelikult minna neid 2. 384 00:34:29,330 --> 00:34:31,940 Nüüd ta prindib 2, 1, 3, 4. 385 00:34:31,940 --> 00:34:41,270 PHP massiivid ei ole nagu tavalise hash tabelit. 386 00:34:41,270 --> 00:34:45,570 See on täiesti mõistlik mõelda neist kui hash tabeleid 99% ajast. 387 00:34:45,570 --> 00:34:53,790 Aga sinu hash tabeleid pole tunnet, millises järjekorras asju lisati. 388 00:34:53,790 --> 00:34:56,639 Nii et niipea kui pistke see oma hash tabelit, 389 00:34:56,639 --> 00:35:00,590 eeldada pole seotud loetelu ja sa võiksid kohtunik jooksul seotud nimekirja 390 00:35:00,590 --> 00:35:03,980 mis lisati esimene. 391 00:35:03,980 --> 00:35:10,060 Aga siin me lisada 2 esimest ja ta teab, millal see prindib see massiiv, et 2 on esimesel kohal. 392 00:35:10,060 --> 00:35:13,090 See ei prindi see välja vaid suvalises järjekorras. 393 00:35:13,090 --> 00:35:17,550 Tehniliste andmete struktuuri, et see kasutab on tellitud kaart, 394 00:35:17,550 --> 00:35:24,690 nii see pakub võtmed väärtused ja see mäletab, millises järjekorras need võtmed olid sisestatud. 395 00:35:24,690 --> 00:35:31,600 Põhimõtteliselt on see, et mõned komplikatsioonid, kus see on tüütu tegelikult - 396 00:35:31,600 --> 00:35:34,510 Oletame, et teil on hulgaliselt 0, 1, 2, 3, 4, 5 397 00:35:34,510 --> 00:35:37,700 ja sa tahad kutsuda indeks 2. 398 00:35:37,700 --> 00:35:47,750 Üks viis seda teha, vaatame, mis see välja näeb. 399 00:35:47,750 --> 00:35:50,410 0, 2, 1, 3, 4. 400 00:35:50,410 --> 00:35:54,880 Seadmata juhtub väljalülituvad mõlema muutuja ja massiivi indeksid. 401 00:35:54,880 --> 00:35:58,630 Nii väljalülitatud ($ massiiv [2]); 402 00:35:58,630 --> 00:36:03,430 Nüüd mis see hakkab välja nägema? 2 on lihtsalt läinud, nii et on täiesti hea. 403 00:36:03,430 --> 00:36:11,670 Veel hullem on, kui sa tahad asju tegelikult olla nagu massiivi. 404 00:36:11,670 --> 00:36:14,910 Ma panen juhuslikud arvud. 405 00:36:14,910 --> 00:36:20,400 Nüüd pane tähele, minu indeksid. 406 00:36:20,400 --> 00:36:26,860 Ma tahan, et see lihtsalt olla nagu C massiivi, kus ta läheb 0 kuni pikkus - 1 407 00:36:26,860 --> 00:36:30,810 ja võin kinnitada, üle teda sellisena. 408 00:36:30,810 --> 00:36:38,520 Aga niipea, kui ma väljalülituvad teine ​​indeks, mis oli indeks 3 ei muutunud indeks 2. 409 00:36:38,520 --> 00:36:44,790 Selle asemel lihtsalt eemaldab selle indeksi ja nüüd sa lähed 0, 1, 3, 4. 410 00:36:44,790 --> 00:36:48,740 See on täiesti mõistlik. 411 00:36:48,740 --> 00:36:53,950 See on lihtsalt tüütu ja sa pead tegema asju nagu massiivi Liimida. Jah. 412 00:36:53,950 --> 00:36:57,200 >> [Üliõpilane] Mis juhtuks kui sul oleks loop 413 00:36:57,200 --> 00:36:59,630 ja sa tahtsid minna üle kõik elemendid? 414 00:36:59,630 --> 00:37:02,290 Kui see tabas 2, oleks ta saagi kunagi? 415 00:37:02,290 --> 00:37:10,150 Itereerimise üle massiivi. On 2 võimalust, saate seda teha. 416 00:37:10,150 --> 00:37:12,770 Võite kasutada regulaarselt jaoks silmus. 417 00:37:12,770 --> 00:37:22,000 See on veel üks keerukus PHP. 418 00:37:22,000 --> 00:37:27,420 Enamik keeles, ma ütleksin, on mingisugune pikkus või len või midagi 419 00:37:27,420 --> 00:37:30,470 näidates pikkus massiivi. 420 00:37:30,470 --> 00:37:32,820 PHP on see arv. 421 00:37:32,820 --> 00:37:36,160 Nii count ($ array); $ i + +) 422 00:37:36,160 --> 00:37:42,950 Ütleme lihtsalt print ($ array [$ i]); 423 00:37:45,920 --> 00:37:48,820 Notice: Undefined offset: 2. 424 00:37:48,820 --> 00:37:51,610 See on lihtsalt läbi kukkunud. 425 00:37:51,610 --> 00:38:03,020 See on põhjus, et enamasti, sa ei pea kunagi itereerime massiivi niimoodi. 426 00:38:03,020 --> 00:38:07,110 See võib olla liialdus, aga sa ei pea kunagi itereerime massiivi niimoodi 427 00:38:07,110 --> 00:38:19,410 sest PHP pakub oma foreach süntaks kus foreach ($ array $ kirje). 428 00:38:19,410 --> 00:38:31,830 Nüüd, kui me printida ($ kirje); - we'll arutada seda teist - et töötab täiesti trahvi. 429 00:38:31,830 --> 00:38:38,960 Nii, et foreach töötab on esimene argument on massiiv, et sa itereerimise üle. 430 00:38:38,960 --> 00:38:44,060 Ja teine ​​argument, kirje kaudu iga liigu jaoks silmus 431 00:38:44,060 --> 00:38:52,690 see saab võtta järgmine asi massiiv. Seega pidage meeles massiiv on järjekorras. 432 00:38:52,690 --> 00:38:55,690 Esimest korda elus jaoks silmus, punkt saab olema 123 433 00:38:55,690 --> 00:38:59,540 siis on see 12, siis see on 13, siis on see 23, siis on see 213. 434 00:38:59,540 --> 00:39:04,670 Asjad tõesti imelik, kui sa midagi foreach. 435 00:39:04,670 --> 00:39:07,480 Vaatame, mis juhtub, sest sa ei tohi kunagi teha. 436 00:39:07,480 --> 00:39:13,320 Mis siis, kui me väljalülitatud ($ massiiv [1]); 437 00:39:20,410 --> 00:39:26,030 See oli ilmselt oodata. 438 00:39:26,030 --> 00:39:30,950 Sa itereerimise üle selle massiivi, ja iga kord, kui sa väljalülitamiseks esimene indeks. 439 00:39:30,950 --> 00:39:39,720 Nii indeks 0, esimene asi, objekt võtab väärtuse 0, nii et see saab olema 123. 440 00:39:39,720 --> 00:39:44,630 Aga seest jaoks silmus me väljalülitatud indeks 1, et tähendab 12 on kadunud. 441 00:39:44,630 --> 00:39:57,480 Nii printida. PHP_EOL. 442 00:39:57,480 --> 00:40:03,580 PHP_EOL on lihtsalt reavahetust, aga see on tehniliselt rohkem kaasaskantavaid 443 00:40:03,580 --> 00:40:08,890 alates reavahetusi Windows erineb reavahetusi Mac ja UNIX. 444 00:40:08,890 --> 00:40:18,040 Windows reavahetus on \ r \ n, samas kui kõikjal mujal see kipub lihtsalt olla \ n. 445 00:40:18,040 --> 00:40:25,150 PHP_EOL on konfigureeritud nii, et ta kasutab sõltumata reavahetus oma süsteemi on. 446 00:40:25,150 --> 00:40:29,310 Nii et printida seda. Ärme print_r ($ massiiv) lõpus. 447 00:40:32,830 --> 00:40:37,390 Mul polnud aimugi, et see oleks käitumist. 448 00:40:41,740 --> 00:40:48,960 Punkt ikka võtab väärtus 12 kuigi me väljalülituvad 12 Enne me kunagi sai seda massiivi. 449 00:40:52,770 --> 00:40:58,840 Ärge võtke minu sõna see, aga tundub, foreach tekitab koopia massiivi 450 00:40:58,840 --> 00:41:02,160 ja siis kirje võtab kõik väärtused selle koopia. 451 00:41:02,160 --> 00:41:07,760 Nii et isegi kui sa muuta massiivi sees jaoks silmus, 452 00:41:07,760 --> 00:41:17,240 see ei huvita. Punkt võtab endale algsed väärtused. 453 00:41:17,240 --> 00:41:19,240 Proovime väljalülitamiseks ta. 454 00:41:19,240 --> 00:41:24,460 Mis siis, kui see on $ array [1] = "tere"; 455 00:41:24,460 --> 00:41:31,770 Kuigi me paneme "tere" ümber massiiv, kirje kunagi võtab selle väärtuse. 456 00:41:31,770 --> 00:41:37,430 Seal on teine ​​süntaks foreach ring 457 00:41:37,430 --> 00:41:45,900 kuhu panna 2 muutujad eraldada nool. 458 00:41:45,900 --> 00:41:49,680 See esimene muutuja saab olema võti selle väärtuse, 459 00:41:49,680 --> 00:41:53,050 ja see teine ​​muutuja saab olema sama täpne objekt. 460 00:41:53,050 --> 00:42:01,610 See on ebahuvitav siin, aga kui me läheme tagasi meie algse puhul "" -> 1, 461 00:42:01,610 --> 00:42:06,090 "B" -> 1, 462 00:42:06,090 --> 00:42:14,470 siin, kui me lihtsalt kinnitada, iga massiivi elemendi objekt läheb on 1 iga kord. 463 00:42:14,470 --> 00:42:18,170 Aga kui me tahame ka teada, võti on seotud selle kirje 464 00:42:18,170 --> 00:42:25,230 siis me teeme $ võti -> $ kirje. 465 00:42:25,230 --> 00:42:31,980 Nii et nüüd me saame teha print ($ võti. ":". 466 00:42:31,980 --> 00:42:39,380 Nüüd on see itereerimise üle ja trüki iga võti ja sellega seotud väärtus. 467 00:42:39,380 --> 00:42:47,030 >> Täiendav asi, mida saame teha foreach silmuseid on võite näha seda süntaksit. 468 00:42:47,030 --> 00:42:54,770 Ampersandid enne muutujate nimed kipuvad olema kuidas PHP ei viidetega. 469 00:42:54,770 --> 00:43:00,460 Kui viited on väga sarnased suunanäitajaks, 470 00:43:00,460 --> 00:43:04,820 Teil ei ole viiteid, et sa kunagi tegelema mälu otse. 471 00:43:04,820 --> 00:43:12,620 Aga sul on viiteid, kus 1 muutujas sama asi nagu teise muutuja. 472 00:43:12,620 --> 00:43:21,450 Siin sees teeme $ kirje. Lähme tagasi 1, 10. 473 00:43:21,450 --> 00:43:28,800 Teeme $ kirje + +; ikka veel eksisteerivat PHP. Võite ikka + +. 474 00:43:28,800 --> 00:43:38,260 php.test.php. Ma pean seda trükkida. print_r ($ massiiv); 475 00:43:38,260 --> 00:43:42,730 Trükime 2, 11. 476 00:43:42,730 --> 00:43:49,560 Kui olin just teinud foreach ($ array $ kirje) siis objekt on väärtus 1 477 00:43:49,560 --> 00:43:54,190 esimest korda läbi silmuse. See juurdekasvu 1-2 ja siis me oleme valmis. 478 00:43:54,190 --> 00:43:57,260 Nii et siis see läheb läbi teine ​​kiht silmuse ja et objekt on 10. 479 00:43:57,260 --> 00:44:01,570 See sammuga kirje kuni 11 ja siis see lihtsalt ära visata. 480 00:44:01,570 --> 00:44:06,670 Siis me print_r ($ massiiv); ja vaatame, et see on lihtsalt 1, 10. 481 00:44:06,670 --> 00:44:09,070 Nii juurdekasvu me tegime oli kadunud. 482 00:44:09,070 --> 00:44:13,410 Aga foreach ($ array & $ kirje) 483 00:44:13,410 --> 00:44:21,910 nüüd see toode on sama toode nagu see siin. See on sama asi. 484 00:44:21,910 --> 00:44:26,820 Nii et $ kirje + + muudab massiivi 0. 485 00:44:29,330 --> 00:44:41,850 Põhimõtteliselt saab teha ka $ k -> $ kirje ja saate teha $ array [$ k] + +; 486 00:44:41,850 --> 00:44:48,650 >> Nii et teine ​​viis seda, et oleme vabad muuta kirje, 487 00:44:48,650 --> 00:44:54,070 kuid see ei muuda meie algse massiivi. 488 00:44:54,070 --> 00:44:59,720 Aga kui me kasutame k, mis on meie võti, siis saame lihtsalt indeks meie massiivi kasutades, et võti 489 00:44:59,720 --> 00:45:01,530 ja juurdekasvu seda. 490 00:45:01,530 --> 00:45:05,410 See otsesemalt muudab meie algse massiivi. 491 00:45:05,410 --> 00:45:10,690 Võite isegi seda teha, kui mingil põhjusel sa tahtsid võime muuta - 492 00:45:10,690 --> 00:45:13,510 Tegelikult on see täiesti mõistlik. 493 00:45:13,510 --> 00:45:16,020 Sa ei tahtnud kirjutada $ array [$ k] + +, 494 00:45:16,020 --> 00:45:27,890 sa lihtsalt tahtsin kirjutada $ kirje + + kuid ikka tahtsin öelda if ($ k === "") 495 00:45:27,890 --> 00:45:30,620 siis juurdekasvu kirje ja seejärel printida meie massiivi. 496 00:45:30,620 --> 00:45:36,290 Nüüd mida me ootame print_r teha? Milliseid väärtusi tuleks trükkida? 497 00:45:36,290 --> 00:45:43,770 [Üliõpilane] 2 ja 10. >> [Bowden] Ainult siis, kui võti on "" kas me tegelikult printida seda. 498 00:45:51,940 --> 00:45:55,670 >> Sa ilmselt väga harva, kui üldse, on vaja määratleda funktsioonid PHP, 499 00:45:55,670 --> 00:46:03,370 kuid võite näha midagi sarnast kus määrate funktsiooni nagu funktsioon iganes. 500 00:46:03,370 --> 00:46:09,900 Tavaliselt sa ütleksid ($ foo, $ bar) ja siis määratleda see olla mis iganes. 501 00:46:09,900 --> 00:46:17,580 Aga kui ma seda teen, siis see tähendab, et mis iganes nõuab iganes, 502 00:46:17,580 --> 00:46:25,110 mis iganes nõuab Baz, nii et esimene argument edasi Baz saab muuta. 503 00:46:25,110 --> 00:46:38,100 Teeme $ foo + +; 504 00:46:38,100 --> 00:46:48,020 ja sees siin teeme Baz ($ kirje); 505 00:46:48,020 --> 00:46:52,250 Nüüd kutsume funktsiooni. 506 00:46:52,250 --> 00:46:56,780 Argument on võetud viide, mis tähendab, et kui me seda muuta 507 00:46:56,780 --> 00:47:00,390 me muuta asi, mis võeti vastu sisse 508 00:47:00,390 --> 00:47:04,420 Ja trükkimiseks ootame - kui ma segamini süntaks - saime 2, 11, 509 00:47:04,420 --> 00:47:06,300 nii et see oli tegelikult suurendatakse. 510 00:47:06,300 --> 00:47:08,790 TEADE Me peame viiteid 2 kohta. 511 00:47:08,790 --> 00:47:13,050 Mis siis, kui ma tegin seda? Mida see tähendab? 512 00:47:13,050 --> 00:47:15,810 [Üliõpilane] See muutub. >> Jah. 513 00:47:15,810 --> 00:47:18,290 Toode on lihtsalt koopia väärtust massiivi. 514 00:47:18,290 --> 00:47:26,670 Nii kirje muutub 2, kuid massiiv [""] ikkagi 1. 515 00:47:26,670 --> 00:47:32,560 Või mis siis, kui ma seda teen? 516 00:47:32,560 --> 00:47:39,260 Nüüd objekt saadetakse selle koopia Baz. 517 00:47:39,260 --> 00:47:46,330 Nii koopia argument mida suurendatakse 2, 518 00:47:46,330 --> 00:47:49,240 aga objekt ise oli kunagi suurendatakse 2. 519 00:47:49,240 --> 00:47:52,880 Ja kirje on sama asi nagu massiivi sulg iganes, 520 00:47:52,880 --> 00:47:55,380 nii et massiivi kunagi suurendatakse. 521 00:47:55,380 --> 00:47:57,960 Nii et nii neid kohti vaja. 522 00:47:57,960 --> 00:48:03,830 >> PHP on tavaliselt üsna nutikas sellest. 523 00:48:03,830 --> 00:48:06,570 Te võite mõelda, ma tahan mööda viide - 524 00:48:06,570 --> 00:48:09,560 See oli tegelikult küsimus ühele psets. 525 00:48:09,560 --> 00:48:14,480 See oli questions.txt asi, kus ta ütles, 526 00:48:14,480 --> 00:48:19,280 Miks võiks soovite läbida see struct viitega? 527 00:48:19,280 --> 00:48:21,250 Mis oli vastus sellele? 528 00:48:21,250 --> 00:48:25,100 [Üliõpilane] Nii et sa ei pea kopeerida midagi suurt. >> Jah. 529 00:48:25,100 --> 00:48:32,920 Struct saab meelevaldselt suur, ja kui te kaotate struct aastal argumendina 530 00:48:32,920 --> 00:48:36,800 ta vajab, et kopeerida kogu selle struct läbida seda funktsiooni, 531 00:48:36,800 --> 00:48:40,410 arvestades, et kui sa lihtsalt liigu struct viitega 532 00:48:40,410 --> 00:48:46,530 siis peab lihtsalt kopeerida 4-baidi aadress argumendi funktsioon. 533 00:48:48,520 --> 00:48:52,320 PHP on natuke targem. 534 00:48:52,320 --> 00:49:00,650 Kui mul on mingi funktsiooni ja annan seda massiivi 1000 asju, 535 00:49:00,650 --> 00:49:03,990 kas see tähendab, et see saab olema, et kopeerida kõik 1000 nendest asjadest 536 00:49:03,990 --> 00:49:10,450 läbida see funktsioon? See ei pea seda tegema kohe. 537 00:49:10,450 --> 00:49:15,940 Kui sees seda funktsiooni ta ei ole kunagi tegelikult muudab suva, 538 00:49:15,940 --> 00:49:22,660 nii et kui ($ foo === "tere") tagastab tõsi.; 539 00:49:22,660 --> 00:49:26,460 Teade me tegelikult ei muutnud argument sees seda funktsiooni, 540 00:49:26,460 --> 00:49:30,010 mis tähendab, et mis iganes võeti vastu nagu suva kunagi tuleb kopeerida 541 00:49:30,010 --> 00:49:32,100 sest see ei muuda seda. 542 00:49:32,100 --> 00:49:39,240 Niisiis, kuidas PHP teoste argumendid on alati vastu võetud viide 543 00:49:39,240 --> 00:49:42,170 kuni te tegelikult proovida seda muuta. 544 00:49:42,170 --> 00:49:51,160 Nüüd, kui ma ütlen $ foo + +; siis nüüd teha originaali koopia suva ja muuta koopia. 545 00:49:51,160 --> 00:49:53,090 See säästab aega. 546 00:49:53,090 --> 00:49:58,210 Kui sa oled kunagi puudutamata see suur massiiv, sa tegelikult ei muuda see, 547 00:49:58,210 --> 00:50:02,360 seda ei ole vaja teha koopia, 548 00:50:02,360 --> 00:50:06,640 arvestades, et kui me lihtsalt panna see märk, mis tähendab, see ei ole isegi kopeerida 549 00:50:06,640 --> 00:50:08,640 isegi kui sa seda muuta. 550 00:50:08,640 --> 00:50:10,680 Sellist käitumist nimetatakse koopia-on-write. 551 00:50:10,680 --> 00:50:17,380 Näete seda teistes kohtades, eriti kui te võtate operatsioonisüsteemi muidugi. 552 00:50:17,380 --> 00:50:23,880 Copy-on-write on päris tavaline muster, kus sa ei pea koopia teha midagi 553 00:50:23,880 --> 00:50:26,650 kui see on tegelikult muutumas. Jah. 554 00:50:26,650 --> 00:50:29,520 [Üliõpilane] Mida teha, kui sul oli juurdekasv sees test, 555 00:50:29,520 --> 00:50:33,700 nii ainult 1 element 1000st oleks vaja muuta? 556 00:50:33,700 --> 00:50:38,770 Ma pole kindel. 557 00:50:38,770 --> 00:50:51,250 Ma arvan, et oleks kopeerida kogu asi, kuid on võimalik, et see on piisavalt targad, et - 558 00:50:51,250 --> 00:51:00,020 Tegelikult mida ma mõtlen on ette kujutada, et meil on massiiv mis näeb välja selline: $ massiiv2 = [ 559 00:51:00,020 --> 00:51:11,000 Siis indeks "a" on massiiv [1 2 3 4], ja indeksit "b" on array mis iganes. 560 00:51:11,000 --> 00:51:15,380 Ma pean komasid vahel kõik need. Kujutage ette, seal on komadega. 561 00:51:15,380 --> 00:51:21,210 Siis "c" on väärtus 3. 562 00:51:24,210 --> 00:51:26,290 Okei. 563 00:51:26,290 --> 00:51:33,440 Nüüd oletame, et me $ Baz ($ massiiv2); 564 00:51:33,440 --> 00:51:36,540 kus Baz ei võta seda viitena. 565 00:51:43,510 --> 00:51:47,370 Nii et $ foo ['c'] + +; 566 00:51:47,370 --> 00:51:52,340 See on selline näide, kus me edastame massiiv2 argumendina 567 00:51:52,340 --> 00:51:57,010 ja siis see muudab konkreetse indeks array incrementing ta. 568 00:51:57,010 --> 00:52:01,090 Ma ausalt ei tea, mida PHP kavatseb teha. 569 00:52:01,090 --> 00:52:07,200 Seda saab hõlpsasti teha koopia kogu asi, kuid kui ta on tark, 570 00:52:07,200 --> 00:52:15,030 see teeb koopia neid klahve, kus see on oma eraldiseisev väärtus 571 00:52:15,030 --> 00:52:20,620 kuid see saab veel viidata sama massiivi 1,2,3,4 572 00:52:20,620 --> 00:52:22,320 ja seda saab veel viidata sama massiivi. 573 00:52:22,320 --> 00:52:24,170 Tulen iPad ta. 574 00:52:28,900 --> 00:52:45,950 Me liigu selles massiivis, kus see kutt punkte 3, see kutt võrra [1,2,3,4] 575 00:52:45,950 --> 00:52:51,350 see kutt võrra [34 ...] 576 00:52:51,350 --> 00:52:58,590 Nüüd, kui me möödaminnes seda, et Baz, me muuta seda. 577 00:52:58,590 --> 00:53:03,550 Kui PHP on tark, siis võib lihtsalt teha - 578 00:53:11,850 --> 00:53:18,230 Meil oli veel kopeerida mõned mälu, kuid kui oleks need suured Pesastatud subarrays 579 00:53:18,230 --> 00:53:21,560 me ei vaja kopeerida neid. 580 00:53:21,560 --> 00:53:27,530 Ma ei tea, kas see, mida ta teeb, kuid ma ei usu seda tehes. 581 00:53:29,050 --> 00:53:36,690 See on ka päris suur eelis C üle PHP. 582 00:53:36,690 --> 00:53:40,320 >> PHP teeb elu palju lihtsamaks palju asju, 583 00:53:40,320 --> 00:53:45,060 aga sa selline ei ole absoluutselt aimugi, kui hästi see toimib 584 00:53:45,060 --> 00:53:52,530 sest mul pole aimugi all varjukit kui see teeb neid koopiaid asju, 585 00:53:52,530 --> 00:53:55,170 Oh, kas saab olema pidev ajal koopia, 586 00:53:55,170 --> 00:54:01,140 on see lihtsalt läheb Muutus 1 pointer, see saab olema naeruväärselt raske lineaarne koopia? 587 00:54:01,140 --> 00:54:03,000 Mis siis, kui ta ei leia ruumi? 588 00:54:03,000 --> 00:54:06,760 Kas see siis on vaja käivitada Prügikoristus, et saaksin rohkem ruumi? 589 00:54:06,760 --> 00:54:11,210 Ja prügi kogumine võib võtta omavoliliselt pikk. 590 00:54:11,210 --> 00:54:13,600 C sa ei pea muretsema need asjad. 591 00:54:13,600 --> 00:54:19,780 Iga joon sa kirjutad saab päris palju põhjust, kuidas see läheb täita. 592 00:54:26,800 --> 00:54:29,150 >> Vaatame tagasi neile. 593 00:54:35,400 --> 00:54:37,520 Kui tore on see, et sa ei pea tegelema hash funktsioonid, 594 00:54:37,520 --> 00:54:39,010 seotud nimekirjades, või midagi sellist? 595 00:54:39,010 --> 00:54:41,980 Kuna töötame koos hash tabeleid on nii lihtne nüüd, siin on lõbus puzzle tööd. 596 00:54:41,980 --> 00:54:45,920 Ava fail nimega unique.php ja ta kirjutada PHP programm 597 00:54:45,920 --> 00:54:48,330 (Tuntud ka kui "script"). 598 00:54:48,330 --> 00:54:55,700 Me kipume kutsume neid skripte, kui nad on vähe asju, mis sa jooksed käsureal. 599 00:54:55,700 --> 00:55:02,950 Põhimõtteliselt mis tahes keeles, mida te ei kompileerida aga sa lähed joosta käivitatava 600 00:55:02,950 --> 00:55:05,920 käsureal, võite helistada, et käivitatav skript. 601 00:55:05,920 --> 00:55:08,510 Ma võiks sama hästi Kirjutage C programm, mis teeb seda, 602 00:55:08,510 --> 00:55:12,300 aga ma ei nimetaks seda skripti sest ma esimest kompileerida ja seejärel käivitage binaarne. 603 00:55:12,300 --> 00:55:15,480 Aga see PHP programm me ei kavatse helistada script. 604 00:55:15,480 --> 00:55:23,830 Või kui me kirjutasime selle Python või Perl või Node.js või neid asju, 605 00:55:23,830 --> 00:55:26,500 me tahaks helistada neile kõik skriptid, sest sa jooksed neid käsureal 606 00:55:26,500 --> 00:55:30,040 kuid me ei koguda neid. 607 00:55:30,860 --> 00:55:33,400 Me võiksime seda teha üsna kiiresti. 608 00:55:36,960 --> 00:55:41,480 Me ei kavatse kasutada argv. Ütleme lihtsalt löök läbi selle. 609 00:55:41,480 --> 00:55:45,730 Kõne see ainulaadne, kirjutada programm. 610 00:55:45,730 --> 00:55:49,400 Võite eeldada, et sisend sisaldada ühte sõna rea ​​kohta. 611 00:55:49,400 --> 00:55:52,020 Tegelikult argv on päris triviaalne kasutada. 612 00:56:03,730 --> 00:56:06,720 unique.php. 613 00:56:08,550 --> 00:56:13,750 Kõigepealt esimene, me tahame vaadata, kas meil on läbinud 1 käsurea argument. 614 00:56:13,750 --> 00:56:20,900 Nagu te eeldaks argc ja argv C, meil on veel neid, PHP. 615 00:56:20,900 --> 00:56:33,900 Nii et kui ($ argc! == 2) siis ma ei tegele trükkimine sõnum või midagi. 616 00:56:33,900 --> 00:56:37,340 Ma lihtsalt väljuda, veakood 1. 617 00:56:37,340 --> 00:56:41,340 Ma võiksin ka tagasi 1. 618 00:56:41,340 --> 00:56:53,180 Harva PHP sa oled selles riigis, kus me oleme - 619 00:56:53,180 --> 00:56:57,820 Tavaliselt olete funktsiooni kutsunud funktsioon kutsunud funktsioon kutsunud funktsioon. 620 00:56:57,820 --> 00:57:02,070 Ja kui midagi läheb valesti ja sa lihtsalt tahad väljuda kõike täielikult, 621 00:57:02,070 --> 00:57:05,680 väljumise lihtsalt lõpeb programm. 622 00:57:05,680 --> 00:57:08,160 See kehtib ka C. 623 00:57:08,160 --> 00:57:10,700 Kui oled funktsiooni funktsiooni funktsiooni funktsioon 624 00:57:10,700 --> 00:57:17,540 ja sa tahad lihtsalt tappa programmi, võite helistada väljumise ja see lihtsalt väljuda. 625 00:57:17,540 --> 00:57:23,120 Aga PHP see on veel haruldasemad, et me oleme selles tipptasemel. 626 00:57:23,120 --> 00:57:26,090 Tavaliselt oleme sees mingi funktsioon, nii et me kutsume väljumise 627 00:57:26,090 --> 00:57:29,650 nii et me ei pea tagastama kuni 1 asi, mis siis saab aru, seal on viga 628 00:57:29,650 --> 00:57:32,270 nii et naaseb üles, kui et tunnistab oli viga. 629 00:57:32,270 --> 00:57:35,270 Me ei taha tegeleda, et nii väljumiseks (1); 630 00:57:35,270 --> 00:57:38,240 return (1); sel juhul oleks samaväärne. 631 00:57:38,240 --> 00:57:44,000 >> Siis mida tahame avada tahame fopen. 632 00:57:44,000 --> 00:57:46,760 Argumendid ei kavatse vaadata päris sarnane. 633 00:57:46,760 --> 00:57:51,600 Me tahame fopen ($ argv [1], ja me tahame, et seda avada lugemiseks. 634 00:57:51,600 --> 00:57:55,720 See tagastab ressurss, mida me ei kavatse helistada f. 635 00:57:55,720 --> 00:58:02,180 See tundub üsna sarnane sellele, kuidas C see välja me ei pea ütlema FAIL *. 636 00:58:02,180 --> 00:58:06,170 Selle asemel me lihtsalt öelda $ f. Okei. 637 00:58:06,170 --> 00:58:17,190 Tegelikult, ma arvan, et see isegi annab meile vihje, PHP funktsioon nimega faili. Php faili. 638 00:58:17,190 --> 00:58:23,990 Mis see saab teha, on lugeda kogu faili massiivi. 639 00:58:23,990 --> 00:58:29,770 Sa ei pea isegi fopen ta. See saab teha teie jaoks. 640 00:58:37,450 --> 00:58:43,700 Nii et $ read = file ($ argv [1]); 641 00:58:43,700 --> 00:58:49,680 Nüüd on kõik read faili on read. Nüüd me soovime sortida read. 642 00:58:49,680 --> 00:58:52,180 Kuidas me saame sorteerida read? 643 00:58:52,180 --> 00:58:54,920 Me sortida read. 644 00:58:54,920 --> 00:58:58,080 Ja nüüd saame neid printida või mis iganes. 645 00:58:58,080 --> 00:59:05,580 Ilmselt kõige lihtsam viis on foreach ($ read nagu $ rida) echo $ rida; 646 00:59:05,580 --> 00:59:10,960 [Üliõpilane] Kas poleks me isegi ületavad liinide viitamine midagi võtta sorteerida? 647 00:59:10,960 --> 00:59:28,850 See on koht, kus omamoodi oleks määratletud funktsiooni omamoodi (& $ massiiv). 648 00:59:28,850 --> 00:59:32,650 Kui helistate funktsiooni sa ei liigu see viitega. 649 00:59:32,650 --> 00:59:36,900 See on funktsioon, mis määratleb seda kui võttes seda kui viidet. 650 00:59:36,900 --> 00:59:40,900 See on tegelikult täpselt, mis läks valesti 651 00:59:40,900 --> 00:59:46,220 kui me paneme kõik meie serverid kui me läksime 5,3-5,4. 652 00:59:46,220 --> 00:59:53,800 Kuni 5.4, see oli täiesti mõistlik. 653 00:59:53,800 --> 00:59:58,740 Funktsioon ei ole oodata, et võtke see viide, kuid võite läbida seda viidet 654 00:59:58,740 --> 01:00:02,860 nii et kui funktsioon ei juhtu seda muuta, see on ikka muudetud. 655 01:00:02,860 --> 01:00:05,850 Alates 5.4, et sa ei tohiks seda teha. 656 01:00:05,850 --> 01:00:11,740 Nüüd ainus võimalus teil mööda viitamise kui funktsioon selgesõnaliselt seda teeb. 657 01:00:11,740 --> 01:00:19,840 Kui te ei soovi ta seda muuta, siis sa pead tegema $ koopia = $ rida ja passi koopia. 658 01:00:19,840 --> 01:00:24,820 Nüüd read jäävad alles ja koopia muutub. 659 01:00:27,670 --> 01:00:31,460 php.unique.php. Ma oleks võinud messed midagi välja. 660 01:00:31,460 --> 01:00:33,190 Ootamatu "omamoodi". 661 01:00:38,320 --> 01:00:43,850 Seal saab olema midagi, mis teeb meie eest. 662 01:00:43,850 --> 01:00:45,820 See ei ole isegi seal. 663 01:00:45,820 --> 01:00:52,140 Teade, kui lugeda kasutusjuhendit, et esimene argument peaks olema massiiv 664 01:00:52,140 --> 01:00:56,490 ja see on tehtud viide. 665 01:00:58,160 --> 01:01:03,540 Miks see kurdavad mulle? Sest mul on see funktsioon omamoodi endiselt siin, et ma ei taha. 666 01:01:03,540 --> 01:01:09,210 Okei, php.unique.php. Ma ei liigu see argument, sest mul ei ole pilti. 667 01:01:09,210 --> 01:01:13,560 See on php.unique.php kohta test.php. 668 01:01:13,560 --> 01:01:19,080 Siin on test.php kõik välja printida kena sorteeritud järjekorras. 669 01:01:19,080 --> 01:01:24,600 Pange tähele, et sorteeritud et on selline imelik kood faili 670 01:01:24,600 --> 01:01:27,460 sest kõik meie tühje ridu ei kavatse esikohal 671 01:01:27,460 --> 01:01:30,190 siis hakkavad tulema kõik meie 1. tasandil süvendid 672 01:01:30,190 --> 01:01:33,360 siis tulevad kõik meie ei süvendid. 673 01:01:33,360 --> 01:01:38,620 Jah. >> [Üliõpilane] Nii lähtekoodi ei olnud vastu võetud viite? 674 01:01:38,620 --> 01:01:42,240 Et üldiselt vastu võetud väärtus? 675 01:01:42,240 --> 01:01:50,240 [Bowden] Kui helistate funktsiooni, ta ei ole kunagi kindlaks, kas see on üle teatena. 676 01:01:50,240 --> 01:01:53,960 See on funktsiooni definitsioon, mis määrab, kas see on üle teatena. 677 01:01:53,960 --> 01:01:59,450 Ja vaadates funktsiooni mõiste omamoodi või lihtsalt vaatab seda, 678 01:01:59,450 --> 01:02:02,820 see võtab argumentides. 679 01:02:02,820 --> 01:02:07,160 Nii et olenemata sellest, kas sa tahad seda teha siis, viidates, see ei võta ta viitega. 680 01:02:07,160 --> 01:02:10,200 See muudab massiivi paigas. 681 01:02:10,200 --> 01:02:17,400 See on lihtsalt keelatud. Sul ei ole lubatud seda teha. >> [Üliõpilane] Oh, okei. 682 01:02:17,400 --> 01:02:22,410 [Bowden] See, sorteerida see aega võtab read viitega ja seda muuta. 683 01:02:22,410 --> 01:02:26,850 Ja veel, kui sa ei taha seda teha, võid teha koopia omamoodi. 684 01:02:26,850 --> 01:02:35,850 Isegi sel juhul, koopia ei ole tegelikult koopia read. 685 01:02:35,850 --> 01:02:40,620 See lihtsalt osutab sama asi, kuni see muutub modifitseeritud, 686 01:02:40,620 --> 01:02:44,430 kus see oli algselt hakka muudetud omamoodi funktsioon, 687 01:02:44,430 --> 01:02:50,940 kus, sest see koopia-on-kirjutada, nüüd koopia koopia saab olema tehtud. 688 01:02:57,500 --> 01:03:04,250 Võite seda teha. See on teine ​​koht näete märk. 689 01:03:04,250 --> 01:03:07,190 Näed seda foreach silmad, näed seda funktsiooni deklaratsioonid 690 01:03:07,190 --> 01:03:10,040 ja te näete seda kui lihtsalt Muutujaid. 691 01:03:10,040 --> 01:03:12,350 Nüüd oleme saavutanud midagi tehes seda 692 01:03:12,350 --> 01:03:15,600 sest koopia ja read on sõna otseses mõttes sama asja. 693 01:03:15,600 --> 01:03:19,940 Võite kasutada ridade ja kopeerida vaheldumisi. 694 01:03:19,940 --> 01:03:25,430 Seda saab teha väljalülitatud ($ koopia); ja et ei väljalülitatud liinidel, 695 01:03:25,430 --> 01:03:29,120 sa lihtsalt kaotad oma viide sama asi. 696 01:03:29,120 --> 01:03:33,440 Nii nagu selle punkti, nüüd read on ainus viis pääsete read. 697 01:03:36,450 --> 01:03:38,770 >> Küsimused? 698 01:03:41,000 --> 01:03:42,460 Jah. 699 01:03:42,460 --> 01:03:45,880 [Üliõpilane] Täiesti off topic, aga sa ei pea lähedal PHP - >> Sa seda ei tee. 700 01:03:45,880 --> 01:03:47,730 Okei. 701 01:03:47,730 --> 01:03:53,790 [Bowden] ma läheks nii kaugele, et öelda, et see on halb tava, et sulgeda neid. 702 01:03:53,790 --> 01:03:57,580 See on ilmselt liialdus, eriti käsikirja, 703 01:03:57,580 --> 01:04:03,740 aga vaatame, mis juhtub, kui ma seda teha. 704 01:04:03,740 --> 01:04:08,890 See ei teinud midagi. Mis siis, kui ma tahtsin - [ohkab] 705 01:04:13,870 --> 01:04:16,960 Mul on vaja läbida argument. 706 01:04:19,000 --> 01:04:22,050 Tulistada. Ma kutsusin seda valesti. 707 01:04:24,340 --> 01:04:28,310 Nii php.unique.php koos argument. 708 01:04:28,310 --> 01:04:30,980 Nüüd ma isegi ei vaja seda. 709 01:04:34,520 --> 01:04:37,740 Ma andke seda kaalukas argument. 710 01:04:37,740 --> 01:04:42,050 See trükitud iganes see on värvist. 711 01:04:45,260 --> 01:04:50,080 Ma trükkimine koopia ja koopia ei ole olemas. Nii read. 712 01:04:53,650 --> 01:04:58,270 See trükitakse kõik, ja siis märkate kõik see rämps siia alla, 713 01:04:58,270 --> 01:05:06,690 sest PHP midagi, mis on väljaspool PHP sildid 714 01:05:06,690 --> 01:05:09,520 lihtsalt läheb trükitakse sõna otseses mõttes. 715 01:05:09,520 --> 01:05:18,050 Sellepärast HTML, see on nii tore, et ma saan div blaa, blaa, blaa klassi või mis iganes, 716 01:05:18,050 --> 01:05:25,140 blaa, blaa, blaa ja tehke mõned PHP kood ja tehke lõpuni div. 717 01:05:25,140 --> 01:05:36,460 Ja nüüd trükkimiseks ma saan kena div up üles, kõik, mis PHP trükitud, div alt. 718 01:05:36,460 --> 01:05:43,510 Katastroofiline, kui midagi sellist juhtub, mis on üsna levinud, 719 01:05:43,510 --> 01:05:47,930 lihtsalt hulkuvad reavahetus allosas faili. 720 01:05:47,930 --> 01:05:50,940 Sa ei arva, et oleks, et suur ja lahendamiseks 721 01:05:50,940 --> 01:05:58,660 kuni sa arvestama asjaolu, et brauserid - 722 01:05:58,660 --> 01:06:03,880 >> Kuidas ümbersuunamised töö või põhimõtteliselt mis tahes päised töö 723 01:06:03,880 --> 01:06:07,980 kui te teete oma seost veebilehe ja ta saadab tagasi kõik need pealkirjad ja asjad 724 01:06:07,980 --> 01:06:12,020 nagu vastuseks 200 või vastuse ümber või mis iganes, 725 01:06:12,020 --> 01:06:18,230 päised kehtivad ainult esimese baidi andmete saatmist. 726 01:06:18,230 --> 01:06:23,140 Võite suunata tuhandeid kordi, kuid niipea, kui esimene bait andmed saadetakse 727 01:06:23,140 --> 01:06:26,120 sa ei tohiks suunata uuesti. 728 01:06:26,120 --> 01:06:31,860 >> Kui teil on hulkuvate reavahetus allosas fail 729 01:06:31,860 --> 01:06:37,260 ja oletame, et te kasutate seda funktsiooni ja siis sa tahad - 730 01:06:41,580 --> 01:06:52,870 Oletame, et see on teine ​​fail see on index.php ja sa require_once midagi - 731 01:06:52,870 --> 01:06:56,920 Ma ei saa mõelda hea näide sellest. 732 01:06:56,920 --> 01:07:04,740 Küsimus juhtub, kui see rida allservas saab kordas. 733 01:07:04,740 --> 01:07:08,660 Sa ei taha, et midagi on kajasid veel. 734 01:07:10,820 --> 01:07:15,700 Isegi kui sa ei kavatse edasi midagi saada vastukaja, midagi ei saa kordas 735 01:07:15,700 --> 01:07:17,990 ja nüüd sa ei peaks saatma enam päised 736 01:07:17,990 --> 01:07:20,030 ja sa lähed, et saada kaebusi. 737 01:07:22,170 --> 01:07:24,420 Sa lihtsalt ei vaja neid sulgemise sildid. 738 01:07:24,420 --> 01:07:27,420 Kui te kavatsete teha midagi koos HTML - 739 01:07:27,420 --> 01:07:30,490 ja see on täiesti mõistlik teha siia div iganes 740 01:07:30,490 --> 01:07:39,450 ja siis selles punktis saab või ei saa kaasata neid. 741 01:07:39,450 --> 01:07:41,590 See ei ole tegelikult küsimus. 742 01:07:41,590 --> 01:07:45,450 Aga scripte see on haruldane sulgeda. 743 01:07:45,450 --> 01:07:50,400 Kui kõik on PHP, absoluutselt kõik, 744 01:07:50,400 --> 01:07:55,460 sa tõesti ei vaja sulgeda / te ei tohiks sulgeda. 745 01:08:02,030 --> 01:08:05,720 >> Tegelemine stringid on palju kenam kui C. 746 01:08:05,720 --> 01:08:09,470 PHP saab määrata stringi ühe või jutumärkidega. 747 01:08:09,470 --> 01:08:12,820 Mis ülakoma te ei saa kasutada "escape" järjestusi. 748 01:08:12,820 --> 01:08:17,640 Pidevalt põgeneda, blaa, blaa, blaa. 749 01:08:19,920 --> 01:08:24,010 Nii printf väga harva PHP. 750 01:08:24,010 --> 01:08:32,290 Ma arvan, et ma võiks kasutada printf kui ma tahtsin teha selline asi - in pset 5 võite kasutada sprintf või mis iganes. 751 01:08:32,290 --> 01:08:36,060 Aga mida sa teha tahad 001.jpg ja 002.jpg. 752 01:08:36,060 --> 01:08:40,300 Nii, et selline asi, kus ma tegelikult soovite vormindada teksti tahaksin kasutada printf. 753 01:08:40,300 --> 01:08:44,689 Aga muidu ma lihtsalt kasutada stringi liitmise tehe. 754 01:08:44,689 --> 01:08:47,000 Ma kunagi kasutada printf. 755 01:08:49,229 --> 01:09:00,170 Me lihtsalt eristada üksikasjad vahel ülakoma ja jutumärgid. 756 01:09:00,170 --> 01:09:07,490 Suurim erinevus on see, et ülakoma, siis trükitakse sõna otseses mõttes. 757 01:09:07,490 --> 01:09:15,390 Ei ole char andmetüüp PHP, erinevalt C, nii et see võrdub sellega. 758 01:09:15,390 --> 01:09:17,970 Nad on nii stringe. 759 01:09:17,970 --> 01:09:29,180 Ja tore asi ühekordne jutumärk stringid on mul öelda 'Hello World! " blaa, blaa, blaa, 760 01:09:29,180 --> 01:09:33,340 $ $ Wooo. 761 01:09:33,340 --> 01:09:38,260 Mis juhtub, kui ma printida see on see print seda sõna-sõnalt. 762 01:09:38,260 --> 01:09:40,680 Olgem vabaneda kõik meie asjad. 763 01:09:40,680 --> 01:09:44,700 Nii et echo $ str1; 764 01:09:48,569 --> 01:09:56,570 Ta sõna otseses mõttes trükitud kõik need asjad: dollari märgid, 765 01:09:56,570 --> 01:09:58,770 längkriips n, mis te arvate, oleks reavahetusi - 766 01:09:58,770 --> 01:10:01,500 kõik need asjad ta prindib sõna otseses mõttes. 767 01:10:01,500 --> 01:10:05,650 Ainuke asi, mida pead põgeneda on ülakoma 768 01:10:05,650 --> 01:10:09,470 sest vastasel juhul oleks arvan, et see sulgemine ülakoma. 769 01:10:09,470 --> 01:10:15,050 Jutumärgid täiesti erinevad. 770 01:10:20,300 --> 01:10:25,870 Meil on juba näha süntaksi esiletõstmine on cluing meid sellega, mis on umbes minna väga valesti. 771 01:10:25,870 --> 01:10:36,190 php.unique. Undefined variable: wooo sest see on tõlgendatav muutuja nimega wooo. 772 01:10:36,190 --> 01:10:42,400 Jutumärgid lase sul sisestada muutujad - 773 01:10:42,400 --> 01:10:52,730 Oletame, et $ nimi = "Rob"; 774 01:10:52,730 --> 01:10:58,020 Nii echo "Tere, minu nimi on $ name!" 775 01:10:58,020 --> 01:11:09,260 Ta tunnistab seda kui muutuja. 776 01:11:09,260 --> 01:11:21,210 Kui ma kasutan, et - ja ma reavahetust - Tere, minu nimi on Rob! ja tere! 777 01:11:21,210 --> 01:11:24,910 See on sellepärast, et ma kunagi ära trükkida wooo eespool. 778 01:11:24,910 --> 01:11:30,020 Seal on 1 samm, mida saate teha. 779 01:11:30,020 --> 01:11:39,250 $ Massiiv = [1, 2, 3]; 780 01:11:39,250 --> 01:11:43,270 Mida teha, kui ma tahan trükkida esimene indeks array? 781 01:11:43,270 --> 01:11:45,150 Sa teed $ massiiv [0]. 782 01:11:45,150 --> 01:11:49,280 Süntaksi esiletõstmine on aimugi. Mis on see kavatsed? 783 01:11:52,320 --> 01:11:54,510 php.unique. 784 01:11:54,510 --> 01:11:59,860 Tere, minu nimi on 1! mis pole see, mida ma tahtsin. 785 01:11:59,860 --> 01:12:05,050 Süntaksi esiletõstmine valetasid mulle. 786 01:12:05,050 --> 01:12:13,020 Proovime "" -> 1 "b" -> 2. 787 01:12:18,450 --> 01:12:21,440 See, kuidas ma oleks seda kirjutada. 788 01:12:26,350 --> 01:12:32,160 Ootamatu ühekordne jutumärk (T_ENCAPSED blaa, blaa, blaa, blaa, blaa). 789 01:12:32,160 --> 01:12:41,780 Idee on selles, et see ei ole tunnustades seda osa massiivi. 790 01:12:41,780 --> 01:12:46,620 See ei ole tunnustades seda massiivi indekseerimise kirjas. 791 01:12:46,620 --> 01:12:49,870 Sa tahad seda teha ümbritsetud looksulg, 792 01:12:49,870 --> 01:12:54,730 ja nüüd kõik, mis on see lokkis traksidega on interpoleeritud, 793 01:12:54,730 --> 01:13:00,340 mis on sõna, mida me kasutame võluväel lisades need muutujad õiges kohas. 794 01:13:00,340 --> 01:13:04,280 Nüüd seda teed, php.unique ja Tere, minu nimi on 1! ootuspäraselt 795 01:13:04,280 --> 01:13:07,720 või Tere, minu nimi on Rob! 796 01:13:14,110 --> 01:13:23,130 Üks asi, mis on selline tore ülakoma on see, et - 797 01:13:23,130 --> 01:13:28,480 Seal on mõned kulud interpoleerimise. 798 01:13:30,520 --> 01:13:35,100 Kui te kasutate jutumärgid, tõlk peab minema üle selle stringi, 799 01:13:35,100 --> 01:13:41,500 tagades, et: "Oh, siin on muutuv. Nüüd ma pean minema saama, et muutuja ja sisesta see siia." 800 01:13:41,500 --> 01:13:48,930 Isegi kui te ei kasuta muutujaid, 801 01:13:48,930 --> 01:13:52,220 midagi sees need jutumärgid tuleb interpoleeritud, 802 01:13:52,220 --> 01:13:56,800 kuid see on siiski aeglasem, sest ta peab minema üle jutumärgid 803 01:13:56,800 --> 01:14:00,130 otsin asju, mida tuleb interpoleerida. 804 01:14:00,130 --> 01:14:05,360 Nii ülakoma saab natuke kiiremini kui midagi vaja interpoleeritud, 805 01:14:05,360 --> 01:14:15,650 ja ma pigem isegi Kasutada ülakoma jaoks, "Tere, minu nimi on". $ Massiiv [""] niikuinii. 806 01:14:15,650 --> 01:14:20,430 See saab olema võrdne sellega, mida meil enne oli. 807 01:14:24,840 --> 01:14:28,440 Aga see on küsimus eelistus. 808 01:14:28,440 --> 01:14:34,750 Kui te kasutate PHP, siis ilmselt ei hooli kiiruse vahe. 809 01:14:34,750 --> 01:14:39,480 Ei ole piisavalt põhjendanud neid alustada. 810 01:14:39,480 --> 01:14:43,030 >> Iga lõplik küsimusi? 811 01:14:47,430 --> 01:14:51,710 >> Me tegelikult isegi ei saada läbi kõik see, kuid see kraam oli igav. 812 01:14:51,710 --> 01:14:59,080 Viimane asi, see on selline kena PHP on siis, kui olete tegelevad HTML, 813 01:14:59,080 --> 01:15:06,450 saad kasutada seda veidi, nii kena otsetee süntaks printimiseks muutuja. 814 01:15:32,400 --> 01:15:36,730 Seadmata PHP siin, seda nimetatakse lühikese sildid. 815 01:15:36,730 --> 01:15:44,330 Ametlikult alates PHP 5.4, see on aegunud. 816 01:15:44,330 --> 01:15:48,640 Teil on soovitatav panna php. 817 01:15:48,640 --> 01:15:55,770 See toetab veel, nii lühikese sildid 01:16:02,480 See on vaikimisi toetatud, siis võite kasutada neid nii nagu soovite, ja nad on üsna mugav. 819 01:16:02,480 --> 01:16:05,700 >> Kas on küsimusi? 820 01:16:07,780 --> 01:16:09,270 Hea küll. 821 01:16:10,840 --> 01:16:13,800 >> Hoia stiilne, San Diego. 822 01:16:13,800 --> 01:16:16,070 [Chuckles] 823 01:16:18,620 --> 01:16:22,660 Nägemist. [Naerab] 824 01:16:24,350 --> 01:16:28,470 [Aplaus] [naerab] 825 01:22:46,460 --> 01:22:49,460 >> [CS50.TV]