1 00:00:00,000 --> 00:00:02,610 [Powered by Google Translate] [Artikel 8 - meer gemaklik] 2 00:00:02,610 --> 00:00:04,910 [Rob Bowden - Harvard Universiteit] 3 00:00:04,910 --> 00:00:07,070 [Hierdie is CS50. - CS50.TV] 4 00:00:11,520 --> 00:00:14,160 >> Hierdie week artikel notas gaan redelik kort, 5 00:00:14,160 --> 00:00:19,070 so ek gaan net te hou praat, julle gaan te hou om vrae te vra, 6 00:00:19,070 --> 00:00:22,720 en ons sal probeer om in te vul soveel tyd as moontlik. 7 00:00:22,720 --> 00:00:31,950 Baie mense dink dat hierdie pset nie noodwendig moeilik, maar dit is baie lank. 8 00:00:31,950 --> 00:00:37,070 Die pset spec self 'n uur neem om te lees. 9 00:00:40,530 --> 00:00:45,730 Ons gee jou 'n baie van die SQL jy moontlik nodig het om te gebruik. 10 00:00:45,730 --> 00:00:50,520 Ons loop jy deur middel van 'n baie, so moet dit nie te sleg nie. 11 00:00:50,520 --> 00:00:54,560 Het iemand begin of voltooi? 12 00:00:55,380 --> 00:00:59,710 Dit is die laaste pset. O, my God. 13 00:00:59,710 --> 00:01:05,400 Gewoonlik is daar 'n JavaScript-een na hierdie, maar kalender dinge te verander 14 00:01:05,400 --> 00:01:09,560 maak alles 1 week korter, en ons het nie meer 'n JavaScript pset. 15 00:01:09,560 --> 00:01:12,310 Ek weet nie hoe dit affekteer of JavaScript gaan verskyn op die eksamen 16 00:01:12,310 --> 00:01:15,510 of Quiz 1. 17 00:01:15,510 --> 00:01:22,260 Ek dink dit sal iets wees soos wat jy nodig het om hoë-vlak dinge om te weet oor JavaScript, 18 00:01:22,260 --> 00:01:26,460 maar ek twyfel of ons net sal gee jou 'n reguit JavaScript-kode 19 00:01:26,460 --> 00:01:28,720 want jy het nie 'n pset in dit. 20 00:01:28,720 --> 00:01:33,000 Maar dit sal goed vir quiz review volgende week. 21 00:01:33,000 --> 00:01:36,320 >> Afdeling van die vrae. 22 00:01:36,320 --> 00:01:43,870 'N baie van hierdie dinge is 'n bietjie swak bewoord, maar ons sal Bespreek waarom. 23 00:01:43,870 --> 00:01:50,220 In teenstelling met C, PHP is 'n dinamies-getikte "taal. Wat beteken dit, vra jy? 24 00:01:50,220 --> 00:01:53,830 Wel, sê totsiens aan al diegene char, vlot, int, en ander sleutelwoorde wat jy nodig het om te gebruik 25 00:01:53,830 --> 00:01:56,190 wanneer verklaar veranderlikes en funksies in C. 26 00:01:56,190 --> 00:02:00,420 In PHP, is 'n veranderlike se tipe bepaal deur die waarde wat dit tans hou. 27 00:02:00,420 --> 00:02:04,990 So voordat ons tik die kode in 'n lêer genaamd dynamic.php, 28 00:02:04,990 --> 00:02:12,670 PHP is dinamies getik. Dit is waar. 29 00:02:12,670 --> 00:02:17,590 Ek het nie eens met die feit dat dit beteken dat ons totsiens sê nie char, float, int, 30 00:02:17,590 --> 00:02:20,620 en ander sleutelwoorde. 31 00:02:20,620 --> 00:02:25,510 Die presiese verskil tussen dinamiese getik en die alternatief, 32 00:02:25,510 --> 00:02:32,010 wat staties getik, is dat dinamiese getik, al van jou tipe kontrole en stuff 33 00:02:32,010 --> 00:02:37,350 gebeur te hardloop tyd, terwyl staties getik dit gebeur tydens kompilering gekies nie. 34 00:02:37,350 --> 00:02:43,030 Die woord staties in die algemeen lyk kompilering dinge te beteken. 35 00:02:43,030 --> 00:02:48,170 Ek dink daar is ander gebruike vir dit, maar in C wanneer jy 'n statiese veranderlike verklaar, 36 00:02:48,170 --> 00:02:52,650 die berging daarvan word toegeken tydens kompilering gekies nie. 37 00:02:52,650 --> 00:02:59,260 Hier, dinamiese getik beteken net dat - 38 00:02:59,260 --> 00:03:04,350 In C as jy probeer om 'n string en 'n heelgetal te voeg, wanneer jy dit stel, 39 00:03:04,350 --> 00:03:11,000 dit gaan om te kla nie, want dit gaan om te sê dat jy nie kan voeg 'n int en 'n wyser. 40 00:03:11,000 --> 00:03:14,710 Dit is net nie 'n geldige operasie. 41 00:03:14,710 --> 00:03:21,170 Dit is 'n ander ding wat ons sal kry om in 'n tweede. 42 00:03:21,170 --> 00:03:24,860 Maar daardie soort van kontrole, die feit dat dit kla tydens kompilering gekies nie, 43 00:03:24,860 --> 00:03:29,220 statiese tipe kontrole. 44 00:03:29,220 --> 00:03:35,220 Daar is tale af, waar jy hoef nie char, vlot, int om te sê, en al daardie dinge, 45 00:03:35,220 --> 00:03:40,940 maar die taal kan vertel van die konteks van die saak watter tipe dit veronderstel is om te wees, 46 00:03:40,940 --> 00:03:43,980 maar dit is nog staties getik. 47 00:03:43,980 --> 00:03:49,000 So as jy 51, OCaml, hoef jy nie enige van hierdie tipes te gebruik, 48 00:03:49,000 --> 00:03:58,700 maar dit sal nog tydens kompilering gekies nie sê jy kan dit nie doen omdat jy 'n int en 'n string gemeng word. 49 00:03:58,700 --> 00:04:05,650 Dinamiese getik beteken net dat jy gaan iewers tydens looptyd 'n klagte in te kry. 50 00:04:05,650 --> 00:04:13,430 As jy ook gebruik Java voor, in die algemeen, byna 'n C-tipe taal 51 00:04:13,430 --> 00:04:20,070 gaan word staties getik, C, C + +, Java, al die algemeen staties getik. 52 00:04:20,070 --> 00:04:22,910 In Java wanneer jy stel iets en jy sê 53 00:04:22,910 --> 00:04:26,670 string s is gelyk aan 'n nuwe iets is wat nie 'n string, 54 00:04:26,670 --> 00:04:28,950 wat gaan om te kla omdat die tipes net stem nie ooreen nie. 55 00:04:28,950 --> 00:04:31,180 Dit gaan tydens kompilering gekies nie om te kla. 56 00:04:31,180 --> 00:04:36,750 Maar dit het ook 'n paar dinamiese dinge soos as jy probeer om iets te gooi 57 00:04:36,750 --> 00:04:40,500 tot 'n tipe wat is meer spesifiek as die huidige tipe, 58 00:04:40,500 --> 00:04:45,610 daar is niks wat dit kan doen om seker te maak tydens kompilering gekies nie of dat die cast is gaan om te slaag. 59 00:04:45,610 --> 00:04:51,130 Java het ook 'n paar dinamiese tipe seker te maak dat sodra dit aan dat die lyn van die kode 60 00:04:51,130 --> 00:04:54,130 wanneer dit eintlik die uitvoering, gaan dit die cast om te doen, 61 00:04:54,130 --> 00:04:56,260 kyk of dat cast geldig was in die eerste plek, 62 00:04:56,260 --> 00:04:59,890 en as dit nie was, dan is dit gaan om te kla dat jy het 'n ongeldig type. 63 00:04:59,890 --> 00:05:03,200 Dynamic tipe kontrole. 64 00:05:03,200 --> 00:05:07,010 Tik dit in 'n lêer genaamd dynamic.php. 65 00:05:10,130 --> 00:05:12,380 Dynamic.php. 66 00:05:14,580 --> 00:05:17,190 Ek sal Pak dat formatering. 67 00:05:18,750 --> 00:05:21,880 Ons het 'n veranderlike, ons stel dit vir die heeltallige 7, 68 00:05:21,880 --> 00:05:27,930 dan moet ons gaan om dit te druk en% s - 69 00:05:27,930 --> 00:05:32,830 O, ons die tipe van druk, is so getSoort gaan om terug te keer van die tipe van die veranderlike. 70 00:05:32,830 --> 00:05:35,720 Ons is net die druk van die tipe oor en oor weer. 71 00:05:35,720 --> 00:05:39,440 Ons het net php.dynamic.php. 72 00:05:39,440 --> 00:05:45,920 Ons sal sien dat dit veranderinge van heelgetal string te Boolean as ons gaan deur. 73 00:05:45,920 --> 00:05:54,590 In C is daar geen Boole data tipe, is daar geen string data tipe. 74 00:05:54,590 --> 00:06:00,500 Daar is char * en Boolese net geneig om te wees int of char of iets. 75 00:06:00,500 --> 00:06:05,690 In PHP hierdie tipes bestaan ​​nie, en dit is een van die groot voordele van PHP oor C - 76 00:06:05,690 --> 00:06:13,290 dat die string bedrywighede is oneindig makliker in PHP as C. Hulle het net werk. 77 00:06:13,290 --> 00:06:18,290 >> So kom ons terug hier. 78 00:06:18,290 --> 00:06:21,260 Ons hardloop dynamic.php. 79 00:06:21,260 --> 00:06:26,710 Dit vertel die PHP-interpreter, genaamd php, die PHP-kode uit te voer in die dynamic.php. 80 00:06:26,710 --> 00:06:30,250 Indien u enige foute in die lêer, sal die tolk vertel nie! 81 00:06:30,250 --> 00:06:39,110 Die tolk, dit is 'n ander groot verskil tussen PHP en C. 82 00:06:39,110 --> 00:06:48,200 In C wat jy het om iets op te stel en dan moet jy wat saamgestel lêer uitgevoer. 83 00:06:48,200 --> 00:06:50,490 In PHP jy nooit enigiets stel. 84 00:06:50,490 --> 00:06:57,200 So het die PHP-interpreter is net basies die lees van hierdie lyn deur die lyn. 85 00:06:57,200 --> 00:07:02,900 Dit tref var = 7 dit treffers printf dan is dit treffers var dan is dit treffers printf en so aan. 86 00:07:02,900 --> 00:07:10,910 Daar is 'n bietjie van die opstel van wat dit doen, en dit slaan die resultate 87 00:07:10,910 --> 00:07:15,510 so as jy die script loop later jy kan doen, 88 00:07:15,510 --> 00:07:19,280 maar dit is basies 'n lyn deur die lyn soort van ding. 89 00:07:19,280 --> 00:07:25,280 Dit beteken dat 'n baie van die optimalisaties wat ons kry in C, 90 00:07:25,280 --> 00:07:31,920 soos die opstel, dit is net die vertaler in die algemeen kan 'n baie truuks vir jou doen. 91 00:07:31,920 --> 00:07:36,110 Dit kan ongebruikte veranderlikes, kan dit doen al hierdie soort van dinge, 92 00:07:36,110 --> 00:07:38,660 dit kan doen Staartrecursie. 93 00:07:38,660 --> 00:07:42,550 In PHP jy gaan nie daardie voordeel te kry 94 00:07:42,550 --> 00:07:45,690 omdat dit net gaan om te begin met die uitvoering van lyn deur die lyn deur die lyn, 95 00:07:45,690 --> 00:07:49,950 en dit nie regtig nie herken nie hierdie dinge so maklik 96 00:07:49,950 --> 00:07:54,440 want dit is nie 1 groot samestelling slaag oor die ding en dan die uitvoering; 97 00:07:54,440 --> 00:07:56,860 dit is net reël vir reël. 98 00:08:00,730 --> 00:08:02,750 So dit is die tolk. 99 00:08:02,750 --> 00:08:06,840 >> Terug na ons dinamiese tik: pretty cool, eh? 100 00:08:06,840 --> 00:08:08,640 Jy kan beslis nie doen nie in C! 101 00:08:08,640 --> 00:08:11,860 Nou, kyk of jy kan uitvind die aard van elk van die volgende waardes. 102 00:08:11,860 --> 00:08:14,760 Sien hierdie vir verwysing. 103 00:08:14,760 --> 00:08:19,420 So 3,50. Watter tipe dink jy dat gaan wees? 104 00:08:24,480 --> 00:08:26,370 Hier is die tipes wat ons het. 105 00:08:26,370 --> 00:08:30,430 Ons het bools, heelgetalle, swaai punte, snare, skikkings, voorwerpe, 106 00:08:30,430 --> 00:08:38,370 en dan is die hulpbronne, wat is 'n soort van vae. 107 00:08:38,370 --> 00:08:41,010 Ek dink daar is eintlik 'n voorbeeld hier. 108 00:08:41,010 --> 00:08:43,740 Dan is daar null. NULL is 'n spesiale tipe. 109 00:08:43,740 --> 00:08:47,140 In teenstelling met C waar NULL is net 'n wyser met adres 0, 110 00:08:47,140 --> 00:08:54,930 in PHP, NULL is sy eie soort waar die enigste geldige ding van daardie soort is NULL. 111 00:08:57,560 --> 00:09:00,670 Dit is baie meer nuttig is vir foutopsporing. 112 00:09:00,670 --> 00:09:04,310 In C waar ons hierdie kwessie waar as jy teruggaan NULL het, 113 00:09:04,310 --> 00:09:08,660 beteken dit dat jy 'n NULL wyser jy terugkeer of die gebruik van NULL fout om aan te dui 114 00:09:08,660 --> 00:09:12,380 of al van daardie verwarring ons het op 'n punt. 115 00:09:12,380 --> 00:09:18,440 Hier, terugkeer NULL beteken oor die algemeen fout. 116 00:09:20,860 --> 00:09:27,300 Ook 'n baie van die dinge wat return false vir foute. 117 00:09:27,300 --> 00:09:33,140 Maar die punt is die NULL soort, die enigste ding van die NULL tipe is NULL. 118 00:09:33,140 --> 00:09:40,090 Dan callback soos jy 'n anonieme funksies kan definieer. 119 00:09:40,090 --> 00:09:46,420 Jy hoef nie die funksie 'n naam gee nie, maar jy sal nie te doen het met wat hier. 120 00:09:46,420 --> 00:09:53,940 Op soek na die tipes wat hulle nie verwag dat ons om te weet, 121 00:09:53,940 --> 00:09:59,000 wat dink jy die tipe van 3,50 is? >> [Student] Float. 122 00:09:59,000 --> 00:10:00,370 Ja. 123 00:10:00,370 --> 00:10:06,290 So, hier is wat jy dink die tipe van hierdie is? >> [Student] Array. 124 00:10:06,290 --> 00:10:09,890 Ja. Die eerste een was vlot, die tweede een is 'n skikking. 125 00:10:09,890 --> 00:10:14,500 Let daarop dat hierdie skikking is nie soos 'n C-skikking 126 00:10:14,500 --> 00:10:19,610 waar jy indeks 0 het n bietjie waarde, indeks 1 het 'n paar waarde. 127 00:10:19,610 --> 00:10:26,320 Hier is die indekse is a, b, en c is en die waardes 1, 2 en 3. 128 00:10:26,320 --> 00:10:33,980 In PHP daar is geen verskil tussen 'n associatieve array en net 'n gereelde verskeidenheid 129 00:10:33,980 --> 00:10:36,740 as jy sou dink dat dit in C. 130 00:10:36,740 --> 00:10:43,040 Daar is net dit, en onder die enjinkap is 'n gereelde skikking is net 'n associatieve array 131 00:10:43,040 --> 00:10:50,000 waar 0 kaarte op dieselfde manier tot 'n waarde van 'n kaarte tot 'n waarde. 132 00:10:50,000 --> 00:11:00,410 PHP Om hierdie rede, kan baie sleg wees vir baie vinnig kode / benchmarking dinge 133 00:11:00,410 --> 00:11:07,930 want in C wanneer jy met behulp van 'n skikking jy weet dat die toegang tot 'n lid is konstant tyd. 134 00:11:07,930 --> 00:11:11,860 In PHP toegang tot 'n lid is wie weet hoeveel tyd? 135 00:11:11,860 --> 00:11:18,970 Dit is waarskynlik konstant as dit hashes korrek. 136 00:11:18,970 --> 00:11:21,620 Wie weet wat dit regtig doen onder die enjinkap? 137 00:11:21,620 --> 00:11:25,600 Jy werklik nodig het om te kyk na die implementering om te sien hoe dit gaan om te gaan met dit. 138 00:11:25,600 --> 00:11:28,550 So dan fopen. 139 00:11:28,550 --> 00:11:36,420 Ek dink hier laat ons net PHP handleiding fopen om te kyk na die terugkeer tipe. 140 00:11:36,420 --> 00:11:41,260 Ons sien hier kan jy kyk op pretty much enige funksie in die PHP handleiding 141 00:11:41,260 --> 00:11:47,540 en dit is 'n soort van die man-bladsy van PHP. 142 00:11:47,540 --> 00:11:51,060 Die opbrengs soort gaan wees hulpbron. 143 00:11:51,060 --> 00:11:56,050 Dit is waarom ek kyk dit nie, want ons het nie regtig hulpbron definieer. 144 00:11:56,050 --> 00:12:04,110 Die idee van die hulpbron, in C wat jy soort van het 'n lêer * of wat ookal; 145 00:12:04,110 --> 00:12:07,200 in PHP is die hulpbron is jou lêer *. 146 00:12:07,200 --> 00:12:10,360 Dit is wat jy gaan lees van, dit is wat jy gaan skryf. 147 00:12:10,360 --> 00:12:20,710 Dit is gewoonlik eksterne, so dit is 'n hulpbron wat jy kan trek dinge uit en gooi dinge te. 148 00:12:20,710 --> 00:12:26,520 En uiteindelik, wat is die tipe van NULL? >> [Student] null. 149 00:12:26,520 --> 00:12:30,650 Ja. Dus is die enigste ding wat is NULL is NULL. 150 00:12:30,650 --> 00:12:33,480 NULL is NULL. 151 00:12:35,490 --> 00:12:41,170 >> Een kenmerk van PHP se tipe stelsel (vir 'n beter of vir slegter) is sy vermoë te jongleren tipes. 152 00:12:41,170 --> 00:12:44,390 Wanneer jy 'n lyn van PHP-kode wat kombineer die waardes van verskillende tipes, 153 00:12:44,390 --> 00:12:46,670 PHP sal probeer om die verstandige ding om te doen. 154 00:12:46,670 --> 00:12:48,920 Probeer om uit elk van die volgende reëls van die PHP-kode. Wat uitgedruk? 155 00:12:48,920 --> 00:12:51,000 Is dit wat jy verwag? Hoekom of hoekom nie? 156 00:12:51,000 --> 00:12:58,600 Hierdie feit oor PHP is wat dit maak wat ons noem swak getikte. 157 00:12:58,600 --> 00:13:04,610 Swak getik en sterk getik, 158 00:13:04,610 --> 00:13:06,840 daar is verskillende gebruike vir daardie terme, 159 00:13:06,840 --> 00:13:12,020 maar die meeste mense gebruik swak getik en sterk getik hierdie soort van ding te beteken 160 00:13:12,020 --> 00:13:15,920 waar ("1" + 2), wat werk. 161 00:13:15,920 --> 00:13:18,290 In C wat nie wil werk nie. 162 00:13:18,290 --> 00:13:22,490 Jy kan dink dit nie werk nie. 163 00:13:22,490 --> 00:13:29,200 Baie mense meng dinamiese tik en swak tik en statiese tik en sterk tik. 164 00:13:29,200 --> 00:13:34,050 Python is 'n ander voorbeeld van 'n taal wat dinamies getik. 165 00:13:34,050 --> 00:13:41,770 Jy kan gooi rondom tipes in veranderlikes en dit gaan om te hardloop tyd te bepaal 166 00:13:41,770 --> 00:13:44,680 enige fout kontrole,. 167 00:13:44,680 --> 00:13:50,740 In Python dit gaan om dit uit te voer en dit sal sien ("1" + 2); 168 00:13:50,740 --> 00:13:55,920 en dit sal misluk omdat dit sê dat jy nie kan voeg 'n string en 'n heelgetal. 169 00:13:55,920 --> 00:14:00,860 In PHP, wat net so dinamies getik, sal dit nie misluk. 170 00:14:00,860 --> 00:14:04,220 Swak tik het te doen met die feit dat dit nie dinge met tipes 171 00:14:04,220 --> 00:14:07,800 wat nie regtig sin maak nie noodwendig nie. 172 00:14:07,800 --> 00:14:17,420 So ("1" + 2) Ek kan my voorstel dat die tou 12, Ek kan my voorstel dat dit die tou 3, 173 00:14:17,420 --> 00:14:20,710 Ek kan my voorstel dat dit die heelgetal 3. 174 00:14:20,710 --> 00:14:24,530 Dit is nie noodwendig goed gedefinieer, en ons is waarskynlik gaan om te hier te sien 175 00:14:24,530 --> 00:14:29,140 dat wanneer ons druk ("1" + 2); dit is waarskynlik gaan om te eindig om anders te wees 176 00:14:29,140 --> 00:14:32,320 as die druk (1 + "2"). 177 00:14:32,320 --> 00:14:39,700 En dit is geneig om te wees, in my mening, vir die erger. 178 00:14:39,700 --> 00:14:44,240 Hier kan ons probeer om hierdie. 179 00:14:44,240 --> 00:14:48,740 Nog 'n bietjie truuk oor PHP is jy nie nodig het om werklik te skryf van die lêer. 180 00:14:48,740 --> 00:14:52,790 Dit maak die uitvoering van hierdie opdrag modus. 181 00:14:52,790 --> 00:14:57,710 So php-r, dan kan ons gooi in die opdrag hier: 182 00:14:57,710 --> 00:15:06,610 "Druk ('1 '+ 2)," en ek sal gooi 'n nuwe reël. 183 00:15:19,550 --> 00:15:23,970 Hierdie gedrukte 3. 184 00:15:31,100 --> 00:15:35,330 Dit lyk asof dit druk 3 en dit is die heelgetal 3. 185 00:15:35,330 --> 00:15:38,420 So nou, laat ons probeer om die ander manier om: 186 00:15:38,420 --> 00:15:42,970 "Print (1 + '2 '); 187 00:15:45,560 --> 00:15:50,490 Ons kry 3, en is dit ook gaan wees integer 3? Ek het eerlik het geen idee nie. 188 00:15:50,490 --> 00:15:54,030 Dit lyk soos wat in ooreenstemming is. 189 00:15:54,030 --> 00:15:59,550 Daar is nooit 'n kans van dit wat die tou 12 of enigiets soos daardie 190 00:15:59,550 --> 00:16:08,080 omdat PHP, in teenstelling met JavaScript en Java, 191 00:16:08,080 --> 00:16:11,670 het 'n aparte operateur vir aaneenskakellling. 192 00:16:11,670 --> 00:16:14,930 Aaneenskakellling in PHP is dot. 193 00:16:14,930 --> 00:16:22,950 So druk (1 '2 '.); Gaan ons te gee 12. 194 00:16:25,790 --> 00:16:32,420 Dit is geneig om te lei tot verwarring waar mense probeer om iets te doen soos str + = 195 00:16:32,420 --> 00:16:37,840 'n ander ding wat hulle wil toe te voeg aan die einde van hul string, en dit is gaan om te misluk. 196 00:16:37,840 --> 00:16:40,770 Jy nodig het om str = 197 00:16:42,000 --> 00:16:46,240 Dus vergeet nie aaneenskakellling in PHP is 'n punt. 198 00:16:46,240 --> 00:16:52,100 Ander dinge om te probeer druk ("CS" + 50); 199 00:16:55,750 --> 00:17:03,610 Ek het vir julle gesê dat daar is geen hoop van hierdie in CS50 200 00:17:03,610 --> 00:17:06,119 sedert aaneenskakellling is nie +. 201 00:17:06,119 --> 00:17:08,440 Wat dink jy dit gaan uiteindelik 'n? 202 00:17:10,359 --> 00:17:13,460 Ek het eerlik het absoluut geen idee. 203 00:17:14,250 --> 00:17:16,460 Dit lyk asof dit is net 50. 204 00:17:16,460 --> 00:17:21,490 Dit sien die string, en ek wed as ons 123CS - 205 00:17:21,490 --> 00:17:29,640 Dit sien die eerste string, probeer dit 'n heelgetal van dit of 'n aantal van dit te lees. 206 00:17:29,640 --> 00:17:31,710 In hierdie geval is dit sien 123CS. 207 00:17:31,710 --> 00:17:35,190 "Dit maak nie sin as 'n heelgetal, so ek is net gaan om te dink van die 123." 208 00:17:35,190 --> 00:17:38,580 So 123 + 50 gaan word 173. 209 00:17:38,580 --> 00:17:40,740 En hier is dit begin lees van hierdie as 'n heelgetal. 210 00:17:40,740 --> 00:17:45,690 Dit nie sien nie, sodat dit net behandel dit as 0. So 0 + 50 gaan wees 50. 211 00:17:45,690 --> 00:17:51,600 Hierdie Ek neem gaan om iets soortgelyks te doen. 212 00:17:51,600 --> 00:17:54,310 Ek dink 99. 213 00:17:54,310 --> 00:17:57,580 Ja, want dit gaan om die eerste te neem - 214 00:18:12,880 --> 00:18:15,730 So 99. 215 00:18:15,730 --> 00:18:21,970 Hier (10/7), indien dit was C, sou wat weer terugkom nie? 216 00:18:23,700 --> 00:18:29,630 [Student] 1. >> Ja, sou dit wees 1 omdat 10/7 verdeling van 2 heelgetalle. 217 00:18:29,630 --> 00:18:32,910 'N heelgetal gedeel deur 'n heelgetal gaan om terug te keer van 'n heelgetal. 218 00:18:32,910 --> 00:18:37,750 Dit kan nie terugkeer nie 1 punt wat dit ook al sal wees, so dit is net gaan om terug te keer 1. 219 00:18:37,750 --> 00:18:46,120 Hier druk (10/7), dit gaan eintlik interpreteer dat. 220 00:18:46,120 --> 00:18:53,760 En dit beteken dat as jy eintlik wil integer afronding en dinge om te doen soos dit, 221 00:18:53,760 --> 00:18:59,950 wat jy nodig het druk (vloer (10/7)) te doen; 222 00:18:59,950 --> 00:19:08,460 In C is dit waarskynlik vreemd dat jy kan staatmaak op 'n heelgetal Afbrekingen gereeld, 223 00:19:08,460 --> 00:19:12,260 maar in PHP jy kan nie, want dit sal outomaties draai dit in 'n float. 224 00:19:13,430 --> 00:19:17,610 En dan is (7 + ware), wat doen jy dink dit gaan wees? 225 00:19:18,550 --> 00:19:23,640 Ek vermoed 8 as dit gaan te interpreteer as 1. 226 00:19:23,640 --> 00:19:25,740 Dit lyk soos dit is 8. 227 00:19:25,740 --> 00:19:31,710 >> So enigiets wat ons gedoen het in die afgelope 10 minute moet jy absoluut nooit doen nie. 228 00:19:31,710 --> 00:19:39,870 Jy sal sien kode wat dit doen. 229 00:19:39,870 --> 00:19:42,700 Dit hoef nie so eenvoudig wees soos hierdie. 230 00:19:42,700 --> 00:19:47,240 Jy kan 2 veranderlikes, en 1 veranderlike gebeur na 'n string te wees 231 00:19:47,240 --> 00:19:51,310 en die ander veranderlike gebeur na 'n int te wees, en dan sal jy hierdie veranderlikes byvoeg saam. 232 00:19:51,310 --> 00:20:00,120 Aangesien PHP is dinamies getik en dit sal nie doen enige tipe kontrole vir jou 233 00:20:00,120 --> 00:20:03,640 en aangesien dit swak getik en aangesien dit sal outomaties net gooi hierdie dinge saam 234 00:20:03,640 --> 00:20:11,490 en alles sal net werk, is dit moeilik om selfs te weet dat hierdie veranderlike moet 'n string wees, 235 00:20:11,490 --> 00:20:14,930 so ek moet nie voeg dit by hierdie veranderlike wat 'n heelgetal is. 236 00:20:18,780 --> 00:20:24,560 Beste praktyk is as 'n veranderlike is 'n string, hou dit vir ewig as 'n string. 237 00:20:24,560 --> 00:20:26,980 As 'n veranderlike is 'n int, hou dit vir ewig as 'n int. 238 00:20:26,980 --> 00:20:30,770 As jy wil om te gaan met heelgetalle en snare, 239 00:20:30,770 --> 00:20:36,970 jy kan gebruik om varsint - dis JavaScript. 240 00:20:36,970 --> 00:20:42,520 Intval. Ek doen dit al die tyd. PHP en JavaScript ek meng alles. 241 00:20:42,520 --> 00:20:47,600 So intval gaan om terug te keer van die heelgetal waarde van 'n veranderlike. 242 00:20:47,600 --> 00:20:56,550 As ons slaag in die "print (intval ('123")), jy kry 123. 243 00:21:06,820 --> 00:21:15,850 Intval self is nie van plan om die tjek vir ons dat dit uitsluitlik is 'n heelgetal te doen. 244 00:21:15,850 --> 00:21:20,460 Die PHP-handleiding, daar is net so baie funksies wat beskikbaar is, 245 00:21:20,460 --> 00:21:26,560 so hier is ek dink wat ek sou gebruik is is_numeric 1. 246 00:21:26,560 --> 00:21:32,590 Ek vermoed dat teruggekeer vals. 247 00:21:32,590 --> 00:21:35,780 Dit is 'n ander ding wat ons het om te gaan oor is ===. 248 00:21:37,850 --> 00:21:44,020 So is_numeric ('123df "), sou jy nie dink van wat as is_numeric. 249 00:21:44,020 --> 00:21:46,720 In C wat jy wil hê om oor al die karakters te itereer 250 00:21:46,720 --> 00:21:50,410 en kyk om te sien as elke karakter syfer of wat ook al is. 251 00:21:50,410 --> 00:21:53,850 Hier is_numeric gaan om dit te doen vir ons, 252 00:21:53,850 --> 00:21:56,520 en dit is die terugkeer vals. 253 00:21:56,520 --> 00:22:02,120 So wanneer ek gedruk, dit druk niks, so hier is ek vergelyk om dit te sien, 254 00:22:02,120 --> 00:22:05,490 Het jy gebeur vals te wees? En so is dit nou se druk 1. 255 00:22:05,490 --> 00:22:10,060 Blykbaar is dit druk 1 as ware in plaas van die druk van waar as die waarheid. 256 00:22:10,060 --> 00:22:15,790 Ek wonder as ek dit doen print_r. Nee, is dit nie nog steeds 1. 257 00:22:15,790 --> 00:22:26,760 >> Terug te gaan na === == bestaan ​​nog steeds, 258 00:22:26,760 --> 00:22:32,260 en as jy praat met Tommy hy sal sê == is heeltemal fyn. 259 00:22:32,260 --> 00:22:37,700 Ek gaan om te sê dat == is verskriklik en jy moet nooit gebruik ==. 260 00:22:37,700 --> 00:22:44,870 Die verskil is dat == vergelyk dinge 261 00:22:44,870 --> 00:22:48,450 waar dit kan waar wees, selfs indien hulle is nie dieselfde soort, 262 00:22:48,450 --> 00:22:53,810 terwyl === vergelyk dinge en dit eerste tjeks is hulle dieselfde soort? 263 00:22:53,810 --> 00:22:58,010 Ja. Okay, nou gaan ek om te sien of hulle werklik te vergelyk om gelyk te wees. 264 00:22:58,010 --> 00:23:08,890 Jy kry weird dinge soos 10 is gelyk aan - Kom ons kyk wat sê. 265 00:23:08,890 --> 00:23:15,570 So ('10 '== '1 e1); 266 00:23:15,570 --> 00:23:17,980 Dit terugkeer waar. 267 00:23:17,980 --> 00:23:21,420 Is daar iemand enige raaiskote waarom dit terug waar? 268 00:23:25,180 --> 00:23:27,120 Dit is nie net oor dat. Miskien is dit 'n wenk. 269 00:23:27,120 --> 00:23:33,170 Maar as ek dat 'n f - darn dit! Ek hou met behulp van dubbele aanhalingstekens. 270 00:23:33,170 --> 00:23:38,780 Die rede waarom die dubbele aanhalingstekens skree op my omdat ek dit in dubbele aanhalingstekens. 271 00:23:38,780 --> 00:23:43,850 So ek kon die dubbele aanhalingstekens hier ontsnap, maar aanhalingstekens maak dit makliker. 272 00:23:43,850 --> 00:23:49,120 So ('10 '== '1 f1 "); nie druk waar. ('10 '== '1 E1); druk waar. 273 00:23:49,120 --> 00:23:56,330 [Student] Is dit hex? >> Dit is nie blok is, maar dit is naby dat dit is soos - 274 00:23:56,330 --> 00:24:01,060 1e1, wetenskaplike notasie. 275 00:24:01,060 --> 00:24:07,950 Dit erken 1e1 as 1 * 10 ^ 1 of wat ookal. 276 00:24:07,950 --> 00:24:11,510 Dit is gelyk heelgetalle. 277 00:24:11,510 --> 00:24:15,930 As ons dit doen === dan is dit gaan vals te wees. 278 00:24:15,930 --> 00:24:28,490 Ek het eintlik het geen idee as ons dit doen == wat oor (10 en '10abc '); Alles reg. So dis waar. 279 00:24:28,490 --> 00:24:35,940 Sodat net soos wanneer jy gedoen het (10 + '10abc '); en dit sal 20, 280 00:24:35,940 --> 00:24:38,800 hier (10 == '10abc "), is waar. 281 00:24:38,800 --> 00:24:45,350 Nog erger is dinge soos (valse == null); is waar 282 00:24:45,350 --> 00:24:52,210 of (valse == 0), waar is, (valse == []); 283 00:24:52,210 --> 00:25:00,970 Daar is weird gevalle van - Dit is een van daai weird gevalle. 284 00:25:00,970 --> 00:25:08,110 Let op dat (valse == []); waar is. 285 00:25:08,110 --> 00:25:11,950 ('0 '== False), is waar. 286 00:25:11,950 --> 00:25:16,090 ('0 '== []); Vals is. 287 00:25:16,090 --> 00:25:19,090 So == is in geen manier oorganklike. 288 00:25:19,090 --> 00:25:26,830 kan wees gelyk aan b en 'n kan wees gelyk aan c, 289 00:25:26,830 --> 00:25:29,340 maar B kan nie gelyk aan c. 290 00:25:29,340 --> 00:25:35,580 Dit is 'n gruwel is dit vir my, en jy moet altyd gebruik ===. 291 00:25:35,580 --> 00:25:38,590 [Student] Kan ons doen == sowel? >> [Bowden] Ja. 292 00:25:38,590 --> 00:25:44,600 Die ekwivalent sou wees! = En ==! 293 00:25:44,600 --> 00:25:48,230 Dit is eintlik opgevoed in die pset spec 294 00:25:48,230 --> 00:25:52,000 waar 'n baie funksies terugkeer - 295 00:25:52,000 --> 00:25:53,890 Die PHP-handleiding is goed hieroor. 296 00:25:53,890 --> 00:25:59,140 Dit plaas in 'n groot rooi boks, "Hierdie vals sal terugkeer indien daar is 'n fout." 297 00:25:59,140 --> 00:26:03,940 Maar terugkeer 0 is 'n heeltemal redelike ding om terug te keer. 298 00:26:03,940 --> 00:26:08,250 Dink oor enige funksie wat na verwagting 'n heelgetal is om terug te keer. 299 00:26:11,250 --> 00:26:17,880 Kom ons sê dat hierdie funksie is veronderstel om die aantal lyne te tel in 'n lêer of iets. 300 00:26:17,880 --> 00:26:23,490 Onder normale omstandighede, jy slaag hierdie funksie 'n lêer 301 00:26:23,490 --> 00:26:27,120 en dit gaan 'n heelgetal wat verteenwoordig die aantal lyne om terug te keer. 302 00:26:27,120 --> 00:26:30,820 So 0 is 'n heeltemal redelike aantal as die lêer is net leeg. 303 00:26:30,820 --> 00:26:36,810 Maar wat as jy slaag, dit 'n ongeldige lêer en die funksie gebeur om terug te keer vals 304 00:26:36,810 --> 00:26:38,860 as jy slaag dit 'n ongeldige lêer? 305 00:26:38,860 --> 00:26:46,500 As jy net doen == jy nie die onderskeid van die saak tussen ongeldig lêer en leë lêer. 306 00:26:48,870 --> 00:26:51,350 Altyd gebruik ===. 307 00:26:55,690 --> 00:26:58,000 Dit is al daardie. 308 00:26:58,000 --> 00:27:01,660 >> In PHP, die skikking tipe is anders as wat jy gebruik om in C. 309 00:27:01,660 --> 00:27:06,650 Inderdaad, kan jy reeds opgemerk bogenoemde wanneer jy sien dat dit is van tipe skikking. 310 00:27:06,650 --> 00:27:15,640 Die bracket syntax van PHP 5,4, wat is die nuutste weergawe van PHP is 'n nuwe. 311 00:27:15,640 --> 00:27:36,960 Voor dit wat jy het altyd skikking te skryf ('a' -> 1, 'b' -> 2. 312 00:27:36,960 --> 00:27:41,160 Dit was die constructor vir 'n skikking. 313 00:27:41,160 --> 00:27:45,950 PHP het nou aangebreek om na die mooi sintaksis van net vierkantige hakies, 314 00:27:45,950 --> 00:27:50,900 wat net soveel beter as skikking. 315 00:27:50,900 --> 00:27:54,480 Maar die oorweging van PHP 5,4 is die nuutste weergawe, 316 00:27:54,480 --> 00:27:59,090 jy mag teëkom plekke wat nie eens PHP 5,3. 317 00:27:59,090 --> 00:28:08,220 Gedurende die somer het ons in hierdie kwessie gehardloop waar PHP 5,3 was wat ons gehad het op die toestel, 318 00:28:08,220 --> 00:28:14,480 maar die bediener dat ons ontplooi al ons graad boek en stuur en al daardie dinge te 319 00:28:14,480 --> 00:28:16,750 was PHP 5,4. 320 00:28:16,750 --> 00:28:23,060 Dit nie te weet, het ons ontwikkel in 5,3, gestoot tot 5,4, 321 00:28:23,060 --> 00:28:25,660 en nou al van 'n skielike geeneen van ons kode werk 322 00:28:25,660 --> 00:28:28,680 want daar gebeur te gewees het veranderinge tussen 5,3 en 5,4 323 00:28:28,680 --> 00:28:31,030 wat nie backwards compatible, 324 00:28:31,030 --> 00:28:35,770 en ons het om te gaan en al van ons dinge wat nie werk nie vir PHP 5,4 los. 325 00:28:39,210 --> 00:28:42,320 Vir hierdie klas, aangesien die toestel PHP 5,4, 326 00:28:42,320 --> 00:28:45,490 dit is heeltemal fyn tussen vierkantige hakies te gebruik. 327 00:28:47,240 --> 00:28:50,440 Maar as jy op soek is na dinge rondom die Internet, 328 00:28:50,440 --> 00:28:54,880 as jy op soek is na 'n soort van verskeidenheid dinge, jy waarskynlik gaan om te sien 329 00:28:54,880 --> 00:29:02,020 die spel uit array constructor sintaksis, want dit is al sedert PHP gebore 330 00:29:02,020 --> 00:29:07,340 en vierkantige hakie sintaksis rond vir die afgelope paar maande 331 00:29:07,340 --> 00:29:10,020 of wanneer 5,4 kom rond. 332 00:29:10,020 --> 00:29:12,710 Dit is hoe jy die werf. 333 00:29:12,710 --> 00:29:30,610 Net soos in C hoe jy sou indeks deur vierkantige hakies soos $ array [0], $ array [1], $ array [2], 334 00:29:30,610 --> 00:29:36,320 jy indeks op dieselfde manier as jy gebeur om jou indekse snare. 335 00:29:36,320 --> 00:29:40,440 So $ array ['n '] en $ array [' b '. 336 00:29:40,440 --> 00:29:47,410 $ Array [b]. Hoekom sou dit verkeerd wees? 337 00:29:52,490 --> 00:29:59,870 Dit sal waarskynlik 'n waarskuwing genereer, maar nog steeds werk. PHP is geneig om dit te doen. 338 00:29:59,870 --> 00:30:04,890 Dit is geneig om net, "Ek gaan om jou te waarsku oor hierdie, maar ek is net gaan om voort te gaan 339 00:30:04,890 --> 00:30:07,550 "En doen wat ek kan." 340 00:30:07,550 --> 00:30:11,500 Dit sal waarskynlik vertaal dit na 'n string, 341 00:30:11,500 --> 00:30:15,000 maar dit is moontlik dat op 'n sekere punt in die verlede iemand sê 342 00:30:15,000 --> 00:30:20,180 definieer b te wees "Hello World". 343 00:30:20,180 --> 00:30:28,740 So nou kan b 'n konstante en $ skikking [b] sal eintlik doen 'Hallo wêreld ". 344 00:30:28,740 --> 00:30:32,380 Ek dink op hierdie punt, of ten minste ons PHP instellings, 345 00:30:32,380 --> 00:30:37,870 as jy probeer om die werf in 'n skikking en dat die sleutel nie bestaan ​​nie, sal dit misluk. 346 00:30:37,870 --> 00:30:40,150 Ek dink nie dit sal net jou waarsku. 347 00:30:40,150 --> 00:30:44,560 Of ten minste kan jy dit so gestel dat dit nie net julle waarsku, is dit net reguit versuim up. 348 00:30:44,560 --> 00:30:49,290 >> Isset is die manier waarop jy kyk om te sien of daar is eintlik so 'n indeks. 349 00:30:49,290 --> 00:30:54,690 So isset ($ array ["hello world ']) sal terugkeer vals. 350 00:30:54,690 --> 00:30:59,160 isset ($ array ['b']) sal terugkeer waar. 351 00:31:06,830 --> 00:31:09,880 Jy kan meng hierdie syntaxes. 352 00:31:15,060 --> 00:31:22,440 Ek is redelik seker wat hierdie skikking sou uiteindelik 'is - Ons kan toets dit uit. 353 00:31:43,290 --> 00:31:45,700 O, ek moet PHPWord. 354 00:31:53,960 --> 00:32:00,260 Dit is die vermenging van die sintaksis waar jy spesifiseer wat die sleutel is 355 00:32:00,260 --> 00:32:03,330 en jy spesifiseer nie wat die sleutel is. 356 00:32:03,330 --> 00:32:05,520 So 3 reg hier is 'n waarde. 357 00:32:05,520 --> 00:32:08,080 Jy het nie uitdruklik gesê wat sy sleutel gaan wees. 358 00:32:08,080 --> 00:32:11,670 Wat dink jy die sleutel gaan wees? 359 00:32:11,670 --> 00:32:21,410 [Student] 0. >> Ek vermoed 0 net omdat dit is die eerste een wat ons het nie gespesifiseer nie. 360 00:32:21,410 --> 00:32:23,500 Ons kan eintlik doen 'n paar van hierdie gevalle. 361 00:32:23,500 --> 00:32:28,030 So is print_r druk rekursiewe. Dit sal druk die hele skikking. 362 00:32:28,030 --> 00:32:32,700 Dit sal druk subarrays van die skikking of daar enige. 363 00:32:32,700 --> 00:32:36,630 So print_r ($ skikking); php.test.php. 364 00:32:36,630 --> 00:32:38,810 Dit lyk soos dit het dit 0. 365 00:32:38,810 --> 00:32:43,530 Daar is eintlik iets om in gedagte te hou hier, maar ons sal terug te kry om dit in 'n tweede. 366 00:32:43,530 --> 00:32:45,850 Maar wat as ek toevallig hierdie indeks 1 te maak? 367 00:32:45,850 --> 00:32:51,170 PHP nie onderskei tussen string indekse en heeltallige indekse, 368 00:32:51,170 --> 00:33:00,280 so op hierdie punt het ek nou net 'n indeks 1 gedefinieer en ek kan beide $ array [1] en $ array ['1 '] doen 369 00:33:00,280 --> 00:33:06,250 en dit sal die dieselfde indeks en die dieselfde sleutel. 370 00:33:06,250 --> 00:33:13,000 So nou wat dink jy 3 gaan wees? >> [Student] 2. >> [Bowden] Ek vermoed 2. 371 00:33:16,000 --> 00:33:18,690 Ja. Dit is 2. 372 00:33:18,690 --> 00:33:24,790 Wat gebeur as ons het is dit 10, dit is 4? Wat dink jy van die indeks van 3 gaan wees? 373 00:33:27,360 --> 00:33:29,110 Ek dink 11. 374 00:33:29,110 --> 00:33:33,060 My raaiskoot as wat PHP doen - en ek dink ek dit voorheen gesien het nie - 375 00:33:33,060 --> 00:33:39,760 dit hou net dop van wat die hoogste numeriese indeks wat dit tot dusver gebruik is. 376 00:33:39,760 --> 00:33:44,230 Dit is nooit gaan 'n string-indeks te ken aan 3. Dit sal altyd 'n numeriese indeks. 377 00:33:44,230 --> 00:33:47,690 So dit hou spoor van die hoogste dis so ver opgedra, wat gebeur te wees 10, 378 00:33:47,690 --> 00:33:52,540 en dit gaan 11 te gee aan 3. 379 00:33:52,540 --> 00:34:02,110 Wat ek vantevore gesê het, let op die manier waarop dit is die druk van hierdie verskeidenheid. 380 00:34:02,110 --> 00:34:06,850 Dit druk die sleutel 10, sleutel 4, sleutel 11, sleutel d. 381 00:34:06,850 --> 00:34:09,790 Of selfs laat ons dit doen - 382 00:34:15,760 --> 00:34:22,489 Ek dink ek het nie 'n 0, maar dit is druk 1, 2, 3, 4. 383 00:34:22,489 --> 00:34:29,330 Wat as ek hier oorskakel? Of laat ons eintlik skakel hierdie 2. 384 00:34:29,330 --> 00:34:31,940 Nou is dit druk 2, 1, 3, 4. 385 00:34:31,940 --> 00:34:41,270 PHP se skikkings is nie net soos jou gereelde hash tafel. 386 00:34:41,270 --> 00:34:45,570 Dit is heeltemal redelik om te dink van hulle as hash tabelle 99% van die tyd. 387 00:34:45,570 --> 00:34:53,790 Maar in jou hash tabelle is daar geen sin van die volgorde waarin dinge is ingevoeg. 388 00:34:53,790 --> 00:34:56,639 So gou as wat jy plaas dit in jou hash tafel, 389 00:34:56,639 --> 00:35:00,590 aanvaar daar is geen geskakelde lys en jy kan oordeel binne 'n geskakelde lys 390 00:35:00,590 --> 00:35:03,980 wat was die eerste plaas. 391 00:35:03,980 --> 00:35:10,060 Maar hier is ons plaas 2 eerste en weet wanneer dit uit te druk hierdie skikking wat 2 kom eerste. 392 00:35:10,060 --> 00:35:13,090 Dit maak nie druk dit uit in net 'n bevel. 393 00:35:13,090 --> 00:35:17,550 Die tegniese data struktuur wat dit gebruik is 'n geordende kaart 394 00:35:17,550 --> 00:35:24,690 sodat dit kaarte sleutels tot waardes en dit onthou die volgorde waarin die sleutels is ingevoeg. 395 00:35:24,690 --> 00:35:31,600 Basies is dit na 'n paar komplikasies waar dit is irriterende om werklik - 396 00:35:31,600 --> 00:35:34,510 Kom ons sê jy het 'n skikking 0, 1, 2, 3, 4, 5 397 00:35:34,510 --> 00:35:37,700 en jy wil om uit te neem indeks 2. 398 00:35:37,700 --> 00:35:47,750 Een manier om dit te doen, laat ons sien wat dit lyk. 399 00:35:47,750 --> 00:35:50,410 0, 2, 1, 3, 4. 400 00:35:50,410 --> 00:35:54,880 Ontstel gebeur beide veranderlikes en verskeidenheid indekse te ontstel. 401 00:35:54,880 --> 00:35:58,630 So ontstel ($ array [2]); 402 00:35:58,630 --> 00:36:03,430 Nou wat is dit gaan lyk? 2 is net weg, so dit is heeltemal fyn. 403 00:36:03,430 --> 00:36:11,670 Meer irriterende as jy wil dinge om werklik te wees soos 'n skikking. 404 00:36:11,670 --> 00:36:14,910 Ek sal ewekansige getalle. 405 00:36:14,910 --> 00:36:20,400 Let nou op my indekse. 406 00:36:20,400 --> 00:36:26,860 Ek wil dit net wees soos 'n C-skikking waar dit gaan van 0 tot by die lengte - 1 407 00:36:26,860 --> 00:36:30,810 en ek kan itereer oor dit as sodanig. 408 00:36:30,810 --> 00:36:38,520 Maar so gou as ek die tweede indeks, wat was in die indeks 3 ontstel nie nou nie indeks 2 geword. 409 00:36:38,520 --> 00:36:44,790 In plaas daarvan verwyder net die indeks, en nou is jy gaan 0, 1, 3, 4. 410 00:36:44,790 --> 00:36:48,740 Dit is heel redelik. 411 00:36:48,740 --> 00:36:53,950 Dis net irriterende en jy dinge soos array Splice te doen. Ja. 412 00:36:53,950 --> 00:36:57,200 >> [Student] Wat sou gebeur as jy 'n for-lus 413 00:36:57,200 --> 00:36:59,630 en jy wou oor al die elemente om te gaan? 414 00:36:59,630 --> 00:37:02,290 Toe tref dit 2, sou dit ooit oplewer? 415 00:37:02,290 --> 00:37:10,150 Iterating oor 'n skikking. Daar is 2 maniere waarop jy kan dit doen. 416 00:37:10,150 --> 00:37:12,770 Jy kan gebruik om 'n gereelde for-lus. 417 00:37:12,770 --> 00:37:22,000 Dit is 'n ander ingewikkeldheid van PHP. 418 00:37:22,000 --> 00:37:27,420 Die meeste tale, sou ek sê, 'n soort van lengte of len of iets 419 00:37:27,420 --> 00:37:30,470 aanduiding van die lengte van 'n skikking. 420 00:37:30,470 --> 00:37:32,820 Dit is in PHP tel. 421 00:37:32,820 --> 00:37:36,160 So tel ($ skikking); $ i + +) 422 00:37:36,160 --> 00:37:42,950 Laat ons net 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 Dit is net gaan om te misluk. 425 00:37:51,610 --> 00:38:03,020 Dit is die rede dat, vir die grootste deel, het jy nooit nodig het om te itereer oor 'n skikking soos hierdie. 426 00:38:03,020 --> 00:38:07,110 Dit mag dalk 'n oordrywing wees, maar jy nooit hoef te itereer oor 'n skikking soos hierdie 427 00:38:07,110 --> 00:38:19,410 omdat PHP bied sy foreach sintaksis waar foreach ($ skikking as $ item). 428 00:38:19,410 --> 00:38:31,830 Nou as ons druk ($ item); - sal ons bespreek dit in 'n tweede - wat werk heeltemal fyn. 429 00:38:31,830 --> 00:38:38,960 Die manier waarop foreach werk is die eerste argument is die skikking wat jy iterating oor. 430 00:38:38,960 --> 00:38:44,060 En die tweede argument, item, deur elke slaag van die for-lus 431 00:38:44,060 --> 00:38:52,690 dit gaan te neem op die volgende ding wat in die skikking. So onthou die skikking 'n bevel. 432 00:38:52,690 --> 00:38:55,690 Die eerste keer deur die lus, item gaan wees 123 433 00:38:55,690 --> 00:38:59,540 dan sal dit 12 dan sal dit 13 dan sal dit 23 dan sal dit 213. 434 00:38:59,540 --> 00:39:04,670 Dinge regtig weird wanneer jy iets doen soos foreach. 435 00:39:04,670 --> 00:39:07,480 Kom ons kyk wat gebeur, omdat jy moet nooit dit doen. 436 00:39:07,480 --> 00:39:13,320 Wat gebeur as ons ongezet ($ array [1]); 437 00:39:20,410 --> 00:39:26,030 Dit is waarskynlik verwag. 438 00:39:26,030 --> 00:39:30,950 Jy iterating oor hierdie skikking, en elke keer as jy uitwerkingstelling van die eerste indeks. 439 00:39:30,950 --> 00:39:39,720 So vir die indeks 0, neem die eerste ding, item op die waarde 0, so dit gaan te wees 123. 440 00:39:39,720 --> 00:39:44,630 Maar binnekant van die for-lus ons ontstel indeks 1, so dit beteken dat 12 is weg. 441 00:39:44,630 --> 00:39:57,480 So druk. PHP_EOL. 442 00:39:57,480 --> 00:40:03,580 PHP_EOL is net newline, maar dit is tegnies meer draagbare 443 00:40:03,580 --> 00:40:08,890 aangesien newlines in Windows verskil van newlines op Mac en UNIX. 444 00:40:08,890 --> 00:40:18,040 Op Windows is newline \ r \ n, terwyl oral anders dit is geneig om net te wees \ n. 445 00:40:18,040 --> 00:40:25,150 PHP_EOL is ingestel sodat dit gebruik ongeag die newline van jou stelsel. 446 00:40:25,150 --> 00:40:29,310 So druk. Laat ons nie print_r ($ skikking) aan die einde. 447 00:40:32,830 --> 00:40:37,390 Ek het geen idee gehad dat die gedrag sou wees. 448 00:40:41,740 --> 00:40:48,960 Item neem nog steeds op die waarde 12 selfs al het ons ontstel 12 voordat ons nog ooit gekry het om dit van die skikking. 449 00:40:52,770 --> 00:40:58,840 Neem nie my woord op hierdie punt, maar dit lyk soos foreach skep 'n afskrif van die skikking 450 00:40:58,840 --> 00:41:02,160 en dan item neem op alle waardes van daardie kopie. 451 00:41:02,160 --> 00:41:07,760 Dus selfs as jy verander die skikking binne die lus, 452 00:41:07,760 --> 00:41:17,240 dit sal nie omgee nie. Item sal neem op die oorspronklike waardes. 453 00:41:17,240 --> 00:41:19,240 Kom ons probeer uitwerkingstelling dit. 454 00:41:19,240 --> 00:41:24,460 Wat as dit is $ array [1] = "hallo"; 455 00:41:24,460 --> 00:41:31,770 Selfs al is ons "hallo" in die skikking item neem nooit op daardie waarde. 456 00:41:31,770 --> 00:41:37,430 Daar is 'n ander sintaksis lusse foreach 457 00:41:37,430 --> 00:41:45,900 waar jy 2 veranderlikes geskei deur 'n pyl. 458 00:41:45,900 --> 00:41:49,680 Die eerste veranderlike is gaan na die sleutel van daardie waarde te wees, 459 00:41:49,680 --> 00:41:53,050 en hierdie tweede veranderlike gaan presies dieselfde item. 460 00:41:53,050 --> 00:42:01,610 Dit is hier oninteressant, maar as ons gaan terug na ons oorspronklike geval van 'a' -> 1, 461 00:42:01,610 --> 00:42:06,090 'B' -> 1, 462 00:42:06,090 --> 00:42:14,470 hier as ons net itereer vir elke gewapend soos 'n item, item gaan wees 1 elke keer. 463 00:42:14,470 --> 00:42:18,170 Maar as ons wil ook die sleutel om te weet wat verband hou met daardie item 464 00:42:18,170 --> 00:42:25,230 dan moet ons doen as $ sleutel -> $ item. 465 00:42:25,230 --> 00:42:31,980 So ons kan nou print ($ sleutel: ". Doen. 466 00:42:31,980 --> 00:42:39,380 Nou is dit iterating oor en druk elke sleutel en sy geassosieerde waarde. 467 00:42:39,380 --> 00:42:47,030 >> 'N addisionele ding wat ons kan doen in foreach loops is wat jy kan sien hierdie sintaksis. 468 00:42:47,030 --> 00:42:54,770 -Karakters voor veranderlike name is geneig om te wees hoe PHP doen verwysings. 469 00:42:54,770 --> 00:43:00,460 Waar verwysings is baie soortgelyk aan pointers, 470 00:43:00,460 --> 00:43:04,820 jy hoef nie pointers, sodat jy nooit direk hanteer geheue. 471 00:43:04,820 --> 00:43:12,620 Maar jy het verwysings waar 1 veranderlike verwys na dieselfde ding as 'n ander veranderlike. 472 00:43:12,620 --> 00:43:21,450 Binnekant van hier laat $ doen item. Kom ons gaan terug na 1, 10. 473 00:43:21,450 --> 00:43:28,800 Kom ons doen $ item + +; wat nog bestaan ​​in PHP. Jy kan nog steeds doen + +. 474 00:43:28,800 --> 00:43:38,260 php.test.php. Ek het om dit uit te druk. print_r ($ skikking); 475 00:43:38,260 --> 00:43:42,730 Ons druk 2, 11. 476 00:43:42,730 --> 00:43:49,560 As ek het net foreach ($ verskeidenheid as $ item) gedoen item sal dan die waarde 1 477 00:43:49,560 --> 00:43:54,190 die eerste keer deur die lus. Dit sal inkrementeer 1 tot 2 en dan is ons klaar. 478 00:43:54,190 --> 00:43:57,260 So hang dit dan gaan deur middel van die die tweede slaag van die lus en dat die item is 10. 479 00:43:57,260 --> 00:44:01,570 Dit inkremente item 11, en dan is dit net weggegooi. 480 00:44:01,570 --> 00:44:06,670 Dan sal ons print_r ($ skikking), en laat ons sien dat dit is net 1, 10. 481 00:44:06,670 --> 00:44:09,070 So het die inkrement wat ons gedoen het is verlore. 482 00:44:09,070 --> 00:44:13,410 Maar foreach ($ skikking as & $ item) 483 00:44:13,410 --> 00:44:21,910 hierdie item is nou dieselfde item as hierdie reg hier. Dit is dieselfde ding. 484 00:44:21,910 --> 00:44:26,820 So $ item + + wysiging van array 0. 485 00:44:29,330 --> 00:44:41,850 Basies, kan jy dit ook doen $ k -> $ item en wat jy kan doen $ array [$ k] + +; 486 00:44:41,850 --> 00:44:48,650 >> Sodat 'n ander manier om dit te doen, is ons vry om item te verander, 487 00:44:48,650 --> 00:44:54,070 maar dit sal nie verander ons oorspronklike skikking. 488 00:44:54,070 --> 00:44:59,720 Maar as ons k, wat is die sleutel, net-indeks in ons verskeidenheid kan ons dan met behulp van die sleutel 489 00:44:59,720 --> 00:45:01,530 en inkrementeer. 490 00:45:01,530 --> 00:45:05,410 Dit verander meer direk ons ​​oorspronklike skikking. 491 00:45:05,410 --> 00:45:10,690 Jy kan selfs doen as jy wou om een ​​of ander rede die vermoë om aan te pas - 492 00:45:10,690 --> 00:45:13,510 Eintlik is dit heel redelik. 493 00:45:13,510 --> 00:45:16,020 Jy het nie wil hê $ array skryf [$ k] + +, 494 00:45:16,020 --> 00:45:27,890 jy wou net $ item skryf + +, maar wou jy nog steeds om te sê as ($ k === 'a') 495 00:45:27,890 --> 00:45:30,620 dan inkrementeer item en dan druk ons ​​verskeidenheid. 496 00:45:30,620 --> 00:45:36,290 So nou wat doen ons verwag print_r te doen? Watter waardes moet gedruk word? 497 00:45:36,290 --> 00:45:43,770 [Student] 2 en 10. >> [Bowden] Slegs as die sleutel was 'n "ons druk eintlik nie. 498 00:45:51,940 --> 00:45:55,670 >> Jy het waarskynlik baie selde, indien ooit, sal funksies te definieer in PHP, 499 00:45:55,670 --> 00:46:03,370 maar jy kan iets soortgelyks sien waar jy 'n funksie soos die funksie wat ookal definieer. 500 00:46:03,370 --> 00:46:09,900 Gewoonlik sou jy sê ($ cat, $ bar) en dan definieer dit te wees wat. 501 00:46:09,900 --> 00:46:17,580 Maar as ek dit doen, dan beteken dit dat wat ook al noem watter 502 00:46:17,580 --> 00:46:25,110 wat ook al noem Baz, so die eerste argument geslaag Baz verander kan word. 503 00:46:25,110 --> 00:46:38,100 Kom ons doen $ cat + +; 504 00:46:38,100 --> 00:46:48,020 en binnekant van hier laat doen Baz ($ item); 505 00:46:48,020 --> 00:46:52,250 Nou het ons 'n funksie roep. 506 00:46:52,250 --> 00:46:56,780 Die argument is geneem deur verwysing, wat beteken dat as ons dit verander 507 00:46:56,780 --> 00:47:00,390 ons die wysiging van die ding wat geslaag is. 508 00:47:00,390 --> 00:47:04,420 En druk ons ​​verwag - tensy ek deurmekaar sintaksis - ons het 2, 11, 509 00:47:04,420 --> 00:47:06,300 so dit was eintlik geïnkrementeer. 510 00:47:06,300 --> 00:47:08,790 Kennisgewing wat ons nodig het verwysings in 2 plekke. 511 00:47:08,790 --> 00:47:13,050 Wat as ek dit gedoen? Wat beteken dit? 512 00:47:13,050 --> 00:47:15,810 [Student] Dit sal verander. >> Ja. 513 00:47:15,810 --> 00:47:18,290 Item is net 'n afskrif van die waarde in die skikking. 514 00:47:18,290 --> 00:47:26,670 So item sal verander tot 2, maar die skikking ['a' sal nog steeds 1. 515 00:47:26,670 --> 00:47:32,560 Of wat as ek dit doen? 516 00:47:32,560 --> 00:47:39,260 Nou item word as 'n afskrif aan Baz gestuur. 517 00:47:39,260 --> 00:47:46,330 Dus is die afskrif van die argument sal aangevul word tot 2, 518 00:47:46,330 --> 00:47:49,240 maar item self was nog nooit geïnkrementeer tot 2. 519 00:47:49,240 --> 00:47:52,880 En item is dieselfde ding as array bracket wat ookal, 520 00:47:52,880 --> 00:47:55,380 sodat skikking was nooit geïnkrementeer. 521 00:47:55,380 --> 00:47:57,960 Sodat beide die plekke het dit nodig. 522 00:47:57,960 --> 00:48:03,830 >> PHP is gewoonlik redelik slim hieroor. 523 00:48:03,830 --> 00:48:06,570 Jy kan dink wat ek wil om te slaag deur verwysing - 524 00:48:06,570 --> 00:48:09,560 Dit was eintlik 'n vraag oor een van die psets. 525 00:48:09,560 --> 00:48:14,480 Dit was 'n questions.txt ding waar dit gesê het, 526 00:48:14,480 --> 00:48:19,280 Hoekom wil jy dalk hierdie struct om te slaag deur verwysing? 527 00:48:19,280 --> 00:48:21,250 Wat was die antwoord op daardie? 528 00:48:21,250 --> 00:48:25,100 [Student] Sodat jy nie iets groots te kopieer. >> Ja. 529 00:48:25,100 --> 00:48:32,920 'N struct kan arbitrêr groot, en wanneer jy die struct in as 'n argument 530 00:48:32,920 --> 00:48:36,800 dit nodig dat die hele struct te kopieer om dit deur te gee aan die funksie, 531 00:48:36,800 --> 00:48:40,410 terwyl as jy net verby die struct deur verwysing 532 00:48:40,410 --> 00:48:46,530 dan moet dit net 'n 4-byte adres as die argument aan die funksie te kopieer. 533 00:48:48,520 --> 00:48:52,320 PHP is 'n bietjie slimmer as dit. 534 00:48:52,320 --> 00:49:00,650 As ek 'n paar funksie en ek slaag om 'n skikking van 1000 dinge, 535 00:49:00,650 --> 00:49:03,990 beteken dit dit gaan al 1000 van daardie dinge te kopieer 536 00:49:03,990 --> 00:49:10,450 dit om te slaag in die funksie? Dit beteken nie dat onmiddellik te doen. 537 00:49:10,450 --> 00:49:15,940 As die binnekant van hierdie funksie is dit nooit verander eintlik cat, 538 00:49:15,940 --> 00:49:22,660 so as ($ cat === 'hallo') return true; 539 00:49:22,660 --> 00:49:26,460 Let op ons eintlik nooit verander die argument binnekant van hierdie funksie, 540 00:49:26,460 --> 00:49:30,010 wat beteken dat alles wat geslaag is as foo nooit gekopieer moet word 541 00:49:30,010 --> 00:49:32,100 want dit is nie die wysiging daarvan. 542 00:49:32,100 --> 00:49:39,240 So het die manier waarop PHP werke is die argumente is altyd deur verwysing geslaag 543 00:49:39,240 --> 00:49:42,170 totdat jy eintlik probeer om dit te verander. 544 00:49:42,170 --> 00:49:51,160 Nou as ek sê $ cat + +; dit sal nou 'n afskrif van die oorspronklike foo en verander die kopie. 545 00:49:51,160 --> 00:49:53,090 Dit spaar 'n geruime tyd. 546 00:49:53,090 --> 00:49:58,210 As jy nog nooit hierdie massiewe verskeidenheid raak, sal jy nooit werklik verander nie, 547 00:49:58,210 --> 00:50:02,360 dit nie nodig om die kopie te maak, 548 00:50:02,360 --> 00:50:06,640 AANGESIEN dat, indien ons net hierdie ampersand wat beteken dat dit nie eens kopieer dit 549 00:50:06,640 --> 00:50:08,640 selfs as jy dit gaan verander. 550 00:50:08,640 --> 00:50:10,680 Hierdie gedrag is genoem kopie-op-skryf. 551 00:50:10,680 --> 00:50:17,380 Jy sal sien dit in ander plekke, veral as jy 'n bedryfstelsel kursus. 552 00:50:17,380 --> 00:50:23,880 Kopie-op-skryf, is 'n redelik normale patroon waar jy nie nodig het om 'n kopie te maak van iets 553 00:50:23,880 --> 00:50:26,650 tensy dit is eintlik besig om te verander. Ja. 554 00:50:26,650 --> 00:50:29,520 [Student] Wat gebeur as jy die toename van die binnekant van die toets, 555 00:50:29,520 --> 00:50:33,700 so net 1 element uit 1000 sou verander moet word? 556 00:50:33,700 --> 00:50:38,770 Ek is nie seker nie. 557 00:50:38,770 --> 00:50:51,250 Ek dink dit sou die hele ding te kopieer, maar dit is moontlik dit is slim genoeg dat - 558 00:50:51,250 --> 00:51:00,020 Eintlik, wat ek dink is dink ons ​​het 'n skikking wat lyk soos hierdie: $ array2 = [ 559 00:51:00,020 --> 00:51:11,000 Dan indeks 'a' is 'n verskeidenheid van [1 2 3 4], en die indeks 'b', is 'n verskeidenheid van wat ookal. 560 00:51:11,000 --> 00:51:15,380 Ek moet kommas tussen al daardie. Verbeel jou daar is kommas. 561 00:51:15,380 --> 00:51:21,210 Dan 'c' is die waarde 3. 562 00:51:24,210 --> 00:51:26,290 Okay. 563 00:51:26,290 --> 00:51:33,440 Laat ons nou sê dat ons doen $ Baz ($ array2); 564 00:51:33,440 --> 00:51:36,540 waar Baz nie deur verwysing. 565 00:51:43,510 --> 00:51:47,370 So $ cat ['c'] + +; 566 00:51:47,370 --> 00:51:52,340 Dit is so 'n voorbeeld waar ons verby array2 as 'n argument 567 00:51:52,340 --> 00:51:57,010 en dan is dit die wysiging van 'n spesifieke indeks van die skikking deur die verhoog van dit. 568 00:51:57,010 --> 00:52:01,090 Ek het eerlik het geen idee wat PHP gaan doen. 569 00:52:01,090 --> 00:52:07,200 Dit kan maklik 'n afskrif van die hele ding, maar as dit is slim, 570 00:52:07,200 --> 00:52:15,030 dit sal 'n afskrif van hierdie sleutels waar dit sal sy unieke waarde 571 00:52:15,030 --> 00:52:20,620 maar dit kan nog steeds op dieselfde skikking 1,2,3,4 572 00:52:20,620 --> 00:52:22,320 en dit kan nog steeds op dieselfde skikking. 573 00:52:22,320 --> 00:52:24,170 Ek sal iPad dit. 574 00:52:28,900 --> 00:52:45,950 Ons slaag in hierdie skikking waar hierdie man punte 3, hierdie man [1,2,3,4], 575 00:52:45,950 --> 00:52:51,350 hierdie man [34, ...] 576 00:52:51,350 --> 00:52:58,590 Nou dat ons dit wat te Baz, is ons die wysiging van hierdie. 577 00:52:58,590 --> 00:53:03,550 As PHP is slim, kan dit net doen - 578 00:53:11,850 --> 00:53:18,230 Ons het nog 'n paar geheue te kopieer, maar as daar was hierdie groot geneste subarrays 579 00:53:18,230 --> 00:53:21,560 Ons het geen behoefte om diegene te kopieer. 580 00:53:21,560 --> 00:53:27,530 Ek weet nie as dit is wat dit doen nie, maar ek kan dink om dit te doen. 581 00:53:29,050 --> 00:53:36,690 Dit is ook 'n mooi groot voordeel van C oor PHP. 582 00:53:36,690 --> 00:53:40,320 >> PHP maak die lewe soveel makliker vir 'n baie van die dinge, 583 00:53:40,320 --> 00:53:45,060 maar jy soort van het absoluut geen idee hoe goed dit sal voleindig 584 00:53:45,060 --> 00:53:52,530 want ek het geen idee onder die enjinkap wanneer dit maak van hierdie afskrifte van dinge, 585 00:53:52,530 --> 00:53:55,170 O, is dit gaan na 'n konstante tyd afskrif te wees, 586 00:53:55,170 --> 00:54:01,140 is dit net gaan 1 wyser te verander, gaan dit 'n belaglik moeilik lineêre kopie? 587 00:54:01,140 --> 00:54:03,000 Wat as dit nie kan vind nie ruimte? 588 00:54:03,000 --> 00:54:06,760 Is dit dan nodig om om vullisverwydering te voer om meer ruimte te kry? 589 00:54:06,760 --> 00:54:11,210 En vullisverwydering kan arbitrêr lank neem. 590 00:54:11,210 --> 00:54:13,600 In C jy hoef nie te bekommer oor hierdie dinge. 591 00:54:13,600 --> 00:54:19,780 Elke enkele lyn wat jy skryf jy kan pretty much rede oor hoe dit gaan om te presteer. 592 00:54:26,800 --> 00:54:29,150 >> Kom ons kyk terug op hierdie. 593 00:54:35,400 --> 00:54:37,520 Hoe lekker is dit dat jy nie het om te gaan met 'n hash funksies, 594 00:54:37,520 --> 00:54:39,010 geskakelde lyste, of iets soos dit? 595 00:54:39,010 --> 00:54:41,980 Sedert die werk met hash tabelle is so maklik om nou, hier is 'n prettige legkaart om op te werk. 596 00:54:41,980 --> 00:54:45,920 Open 'n lêer genoem unique.php en skryf 'n PHP-program 597 00:54:45,920 --> 00:54:48,330 (Ook bekend as 'n "script"). 598 00:54:48,330 --> 00:54:55,700 Ons is geneig om hulle skrifte te bel indien hulle is 'n kort dinge wat jy loop op die command line. 599 00:54:55,700 --> 00:55:02,950 Basies, enige taal wat jy stel nie, maar jy gaan die uitvoerbare uit te voer 600 00:55:02,950 --> 00:55:05,920 op die opdrag lyn, kan jy bel dat uitvoerbare script. 601 00:55:05,920 --> 00:55:08,510 Ek kon net so goed skryf 'n C program wat dit doen, 602 00:55:08,510 --> 00:55:12,300 maar ek noem dit nie 'n script sedert ek die eerste stel en dan hardloop die binêre. 603 00:55:12,300 --> 00:55:15,480 Maar hierdie PHP-program gaan ons 'n script te roep. 604 00:55:15,480 --> 00:55:23,830 Of as ons het dit geskryf in Python of Perl of Node.js of enige van daardie dinge, 605 00:55:23,830 --> 00:55:26,500 ons wil hulle alle skrifte noem omdat jy hardloop hulle by die command line 606 00:55:26,500 --> 00:55:30,040 maar ons stel hulle nie. 607 00:55:30,860 --> 00:55:33,400 Ons kan dit doen redelik vinnig. 608 00:55:36,960 --> 00:55:41,480 Ons gaan nie bevat SPASIES te gebruik. Laat ons net blaas deur middel van hierdie. 609 00:55:41,480 --> 00:55:45,730 Noem dit uniek, skryf 'n program. 610 00:55:45,730 --> 00:55:49,400 U kan aanvaar dat die insette sal een woord per reël bevat. 611 00:55:49,400 --> 00:55:52,020 Eintlik, sal bevat SPASIES redelik triviaal om te gebruik. 612 00:56:03,730 --> 00:56:06,720 unique.php. 613 00:56:08,550 --> 00:56:13,750 Eerste ding wat die eerste, ons wil om te kyk of ons geslaag is 1 command-line argument. 614 00:56:13,750 --> 00:56:20,900 Net soos jy sou verwag argc en bevat SPASIES in C, het ons nog in PHP. 615 00:56:20,900 --> 00:56:33,900 So if ($ argc == 2) dan is ek nie sal gaan met die druk van 'n boodskap of iets. 616 00:56:33,900 --> 00:56:37,340 Ek sal net verlaat, fout kode van 1. 617 00:56:37,340 --> 00:56:41,340 Ek kan ook terug 1. 618 00:56:41,340 --> 00:56:53,180 Selde in PHP is jy by hierdie toestand waar ons - 619 00:56:53,180 --> 00:56:57,820 Gewoonlik is jy in 'n funksie genoem deur 'n funksie genoem deur 'n funksie wat deur 'n funksie genoem. 620 00:56:57,820 --> 00:57:02,070 En as iets verkeerd gaan en jy wil net alles heeltemal verlaat, 621 00:57:02,070 --> 00:57:05,680 uitgang eindig net die program. 622 00:57:05,680 --> 00:57:08,160 Dit bestaan ​​ook in C. 623 00:57:08,160 --> 00:57:10,700 As jy in 'n funksie in 'n funksie in 'n funksie in 'n funksie 624 00:57:10,700 --> 00:57:17,540 en jy net wil die dood van die program, kan jy bel uitgang en dit sal net verlaat. 625 00:57:17,540 --> 00:57:23,120 Maar in PHP is dit selfs meer selde dat ons op hierdie top vlak. 626 00:57:23,120 --> 00:57:26,090 Gewoonlik is ons binne-in 'n soort van funksie, so noem ons afrit 627 00:57:26,090 --> 00:57:29,650 sodat ons nie hoef terug te keer 1 ding wat dan besef daar is 'n fout 628 00:57:29,650 --> 00:57:32,270 sodat terugkeer as wat erken daar was 'n fout. 629 00:57:32,270 --> 00:57:35,270 Ons wil nie om te gaan met dit, so exit (1); 630 00:57:35,270 --> 00:57:38,240 opbrengs (1), in hierdie geval sou wees ekwivalent. 631 00:57:38,240 --> 00:57:44,000 >> Dan wat ons wil oopmaak, wil ons fopen. 632 00:57:44,000 --> 00:57:46,760 Die argumente gaan om te kyk redelik soortgelyk. 633 00:57:46,760 --> 00:57:51,600 Ons wil fopen ($ bevat SPASIES [1], en ons wil dit oop te maak vir lees. 634 00:57:51,600 --> 00:57:55,720 Dit gee 'n hulpbron wat ons gaan f te roep. 635 00:57:55,720 --> 00:58:02,180 Dit lyk redelik soortgelyk aan hoe C doen nie, behalwe ons het nie FILE * om te sê. 636 00:58:02,180 --> 00:58:06,170 In plaas daarvan het ons net sê $ f. Okay. 637 00:58:06,170 --> 00:58:17,190 Eintlik, ek dink dit gee ons selfs 'n wenk as PHP funksie genoem lêer. PHP lêer. 638 00:58:17,190 --> 00:58:23,990 Wat dit gaan om dit te doen, is om 'n hele lêer lees in 'n skikking. 639 00:58:23,990 --> 00:58:29,770 Jy hoef nie eens te fopen dit. Dit gaan om dit te doen vir jou. 640 00:58:37,450 --> 00:58:43,700 So $ lyne = lêer ($ bevat SPASIES [1]); 641 00:58:43,700 --> 00:58:49,680 Nou al van die lyne van die lêer is in lyne. Nou wil ons die lyne te sorteer. 642 00:58:49,680 --> 00:58:52,180 Hoe kan ons die lyne sorteer? 643 00:58:52,180 --> 00:58:54,920 Ons sorteer die lyne. 644 00:58:54,920 --> 00:58:58,080 En nou kan ons druk of wat ookal. 645 00:58:58,080 --> 00:59:05,580 Waarskynlik die maklikste manier is om foreach ($ lyne as $ lyn) echo $ lyn; 646 00:59:05,580 --> 00:59:10,960 [Student] Ons wil nie eens lyne kruis deur die verwysingstelsel iets in die soort? 647 00:59:10,960 --> 00:59:28,850 Dit is waar die soort sou gedefinieer word as funksie soort (& $ skikking). 648 00:59:28,850 --> 00:59:32,650 Wanneer jy bel die funksie wat jy nie slaag nie deur verwysing. 649 00:59:32,650 --> 00:59:36,900 Dit is die funksie wat definieer dit as om dit as verwysing. 650 00:59:36,900 --> 00:59:40,900 Dit is eintlik presies wat verkeerd geloop het 651 00:59:40,900 --> 00:59:46,220 wanneer ons alles na ons bedieners toe ons 5,3-5,4. 652 00:59:46,220 --> 00:59:53,800 Tot en met 5,4, was dit heel redelik. 653 00:59:53,800 --> 00:59:58,740 'N funksie nie verwag dat dit as verwysing te neem nie, maar jy kan dit as verwysing slaag 654 00:59:58,740 --> 01:00:02,860 so as die funksie gebeur om dit te verander, is dit nog steeds verander. 655 01:00:02,860 --> 01:00:05,850 Soos van 5,4, is jy nie veronderstel om dit te doen. 656 01:00:05,850 --> 01:00:11,740 So nou is die enigste manier waarop jy beweeg deur verwysing is as die funksie uitdruklik dit nie. 657 01:00:11,740 --> 01:00:19,840 As jy nie wil hê om dit te verander, dan moet jy $ afskrif = $ lyne en slaag kopie te doen. 658 01:00:19,840 --> 01:00:24,820 So nou lyne sal bewaar word en 'n afskrif sal verander word. 659 01:00:27,670 --> 01:00:31,460 php.unique.php. Ek kan iets gemors het. 660 01:00:31,460 --> 01:00:33,190 Onverwagte "soort". 661 01:00:38,320 --> 01:00:43,850 Daar gaan iets wat dit doen vir ons. 662 01:00:43,850 --> 01:00:45,820 Dit is nie eens daar nie. 663 01:00:45,820 --> 01:00:52,140 Let op wanneer jy dit lees die handleiding wat die eerste argument word verwag om 'n skikking te wees 664 01:00:52,140 --> 01:00:56,490 en dit is geneem deur verwysing. 665 01:00:58,160 --> 01:01:03,540 Hoekom is dit vir my gekla? Want ek het hierdie funksie Sorteer nog hier wat ek wil nie. 666 01:01:03,540 --> 01:01:09,210 Okay, php.unique.php. Ek het dit nie slaag om 'n argument, omdat ek nie 'n lêer. 667 01:01:09,210 --> 01:01:13,560 Dit is php.unique.php op test.php. 668 01:01:13,560 --> 01:01:19,080 Hier is test.php almal uitgedruk in 'n mooi gesorteer einde. 669 01:01:19,080 --> 01:01:24,600 Let daarop dat gesorteer orde is nogal vreemd vir 'n kode lêer 670 01:01:24,600 --> 01:01:27,460 want almal van ons leë lyne gaan eerste kom 671 01:01:27,460 --> 01:01:30,190 dan gaan al van ons 1 vlak inkepings te kom 672 01:01:30,190 --> 01:01:33,360 dan al ons geen inkepings. 673 01:01:33,360 --> 01:01:38,620 Ja. >> [Student] So vir die bronkode is dit nie geslaag deur verwysing? 674 01:01:38,620 --> 01:01:42,240 Is dit algemeen deur waarde geslaag? 675 01:01:42,240 --> 01:01:50,240 [Bowden] Wanneer jy bel 'n funksie, is dit nooit bepaal of dit goedgekeur is deur verwysing. 676 01:01:50,240 --> 01:01:53,960 Dit is die funksie definisie wat bepaal of dit goedgekeur is deur verwysing. 677 01:01:53,960 --> 01:01:59,450 En kyk na die funksie definisie van die soort of net kyk na hierdie, 678 01:01:59,450 --> 01:02:02,820 dit neem om die argument deur verwysing. 679 01:02:02,820 --> 01:02:07,160 So, ongeag of jy dit wil hê om dit te neem deur verwysing, is dit nie neem dit deur verwysing. 680 01:02:07,160 --> 01:02:10,200 Dit verander die skikking in plek. 681 01:02:10,200 --> 01:02:17,400 Dit is nie net toegelaat nie. Jy is nie toegelaat om dit te doen. >> [Student] O, okay. 682 01:02:17,400 --> 01:02:22,410 [Bowden] Hierdie is 'n soort gaan lyne te neem deur verwysing, en dit verander. 683 01:02:22,410 --> 01:02:26,850 En weer, as jy nie dit wil hê om dit te doen, kan jy 'n afskrif van die soort. 684 01:02:26,850 --> 01:02:35,850 Selfs in hierdie geval, kopieer is nie eintlik 'n afskrif van die lyne. 685 01:02:35,850 --> 01:02:40,620 Dit wys net aan dieselfde ding totdat dit die eerste keer kry modified 686 01:02:40,620 --> 01:02:44,430 waar dit gaan eers in die soort funksie verander, 687 01:02:44,430 --> 01:02:50,940 waar, want dit se kopie-op-skryf, nou 'n afskrif van die afskrif gemaak gaan word. 688 01:02:57,500 --> 01:03:04,250 Jy kan dit ook doen. Dit is die ander plek wat jy kan sien ampersand. 689 01:03:04,250 --> 01:03:07,190 Jy sien dit in foreach loops, jy sien dit in die funksie verklarings, 690 01:03:07,190 --> 01:03:10,040 en jy sien dit toe net veranderlikes toeken van. 691 01:03:10,040 --> 01:03:12,350 Nou het ons niks bereik het deur dit te doen 692 01:03:12,350 --> 01:03:15,600 omdat kopieer en lyne is letterlik die dieselfde ding. 693 01:03:15,600 --> 01:03:19,940 Jy kan gebruik om lyne en kopieer uitruilbaar. 694 01:03:19,940 --> 01:03:25,430 Jy kan ontstel ($ kopie) doen, en wat nie ontstel lyne, 695 01:03:25,430 --> 01:03:29,120 verloor jy net jou verwysing na dieselfde ding. 696 01:03:29,120 --> 01:03:33,440 Dus as van hierdie punt, nou lyne is die enigste manier wat jy kan toegang tot lyne. 697 01:03:36,450 --> 01:03:38,770 >> Vrae? 698 01:03:41,000 --> 01:03:42,460 Ja. 699 01:03:42,460 --> 01:03:45,880 [Student] Heeltemal van die onderwerp af, maar jy hoef nie PHP met die >> Jy hoef nie te sluit. 700 01:03:45,880 --> 01:03:47,730 Okay. 701 01:03:47,730 --> 01:03:53,790 [Bowden] Ek sou so ver gaan as om te sê dit is swak praktyk om hulle te sluit. 702 01:03:53,790 --> 01:03:57,580 Dit is waarskynlik 'n oordrywing, veral in 'n script, 703 01:03:57,580 --> 01:04:03,740 maar laat ons kyk wat gebeur as ek dit doen. 704 01:04:03,740 --> 01:04:08,890 Dit het niks gedoen nie. Wat as ek wou - [sug] 705 01:04:13,870 --> 01:04:16,960 Ek nodig het om 'n argument te slaag. 706 01:04:19,000 --> 01:04:22,050 Skiet. Ek noem dit verkeerd. 707 01:04:24,340 --> 01:04:28,310 So php.unique.php met 'n argument. 708 01:04:28,310 --> 01:04:30,980 Nou het ek nie eens nie nodig nie. 709 01:04:34,520 --> 01:04:37,740 Ek sal dit 'n geldige argument slaag. 710 01:04:37,740 --> 01:04:42,050 Hierdie gedruk wat dit ookal is druk. 711 01:04:45,260 --> 01:04:50,080 Ek druk kopie en 'n afskrif bestaan ​​nie. So lyne. 712 01:04:53,650 --> 01:04:58,270 Dit alles druk, en dan agterkom al hierdie junk hier neer, 713 01:04:58,270 --> 01:05:06,690 want in PHP enigiets wat buite PHP tags 714 01:05:06,690 --> 01:05:09,520 is net gaan om te word letterlik gedruk. 715 01:05:09,520 --> 01:05:18,050 Dit is die rede waarom HTML, dit is so lekker dat ek div blah, blah, blah klas of wat ookal kan doen, 716 01:05:18,050 --> 01:05:25,140 blah, blah, blah en dan doen 'n PHP-kode en dan doen einde div. 717 01:05:25,140 --> 01:05:36,460 En nou druk ek kry my mooi div tot bo, alles wat PHP gedrukte, div aan die onderkant. 718 01:05:36,460 --> 01:05:43,510 Rampspoedige wanneer so iets gebeur, wat is redelik algemeen, 719 01:05:43,510 --> 01:05:47,930 net 'n verdwaalde newline aan die onderkant van die lêer. 720 01:05:47,930 --> 01:05:50,940 Sou jy nie dink dat dit sou wees dat die groot van 'n deal 721 01:05:50,940 --> 01:05:58,660 totdat jy kyk na die feit dat met blaaiers - 722 01:05:58,660 --> 01:06:03,880 >> Hoe aansture werk of basies enige headers werk, 723 01:06:03,880 --> 01:06:07,980 wanneer jy jou verbinding na 'n webwerf en stuur dit terug al hierdie headers en dinge 724 01:06:07,980 --> 01:06:12,020 soos reaksie 200 of reaksie aanstuur of wat ook al, 725 01:06:12,020 --> 01:06:18,230 headers is net geldig tot die eerste byte van data gestuur word. 726 01:06:18,230 --> 01:06:23,140 Jy kan jou verwys na duisende van tye, maar so gou as die eerste byte van data gestuur 727 01:06:23,140 --> 01:06:26,120 Jy is nie veronderstel om weer aanstuur. 728 01:06:26,120 --> 01:06:31,860 >> As jy 'n verdwaalde newline aan die onderkant van 'n lêer 729 01:06:31,860 --> 01:06:37,260 en laat ons sê dat jy hierdie funksie gebruik en dan wat jy wil - 730 01:06:41,580 --> 01:06:52,870 Kom ons sê dit is 'n ander lêer wat index.php en jy require_once iets - 731 01:06:52,870 --> 01:06:56,920 Ek kan nie dink van 'n goeie voorbeeld daarvan. 732 01:06:56,920 --> 01:07:04,740 Die probleem gebeur wanneer hierdie lyn aan die onderkant kry eggo. 733 01:07:04,740 --> 01:07:08,660 Jy wil nie enigiets te gewees het nog eggo. 734 01:07:10,820 --> 01:07:15,700 Selfs al is jy nie van plan is op enigiets kry eggo het iets eggo kry 735 01:07:15,700 --> 01:07:17,990 en so nou is jy nie veronderstel om nie meer headers te stuur 736 01:07:17,990 --> 01:07:20,030 en jy gaan om klagtes te kry. 737 01:07:22,170 --> 01:07:24,420 Jy hoef net nie dié sluiting tags. 738 01:07:24,420 --> 01:07:27,420 As jy van plan is om iets te doen met HTML - 739 01:07:27,420 --> 01:07:30,490 en dit is heeltemal redelik om te doen hier neer div watter 740 01:07:30,490 --> 01:07:39,450 en dan op hierdie punt wat jy kan of jy kan sluit nie. 741 01:07:39,450 --> 01:07:41,590 Dit maak nie regtig saak nie. 742 01:07:41,590 --> 01:07:45,450 Maar in PHP scripts dit is skaars om dit te sluit. 743 01:07:45,450 --> 01:07:50,400 Wanneer alles is PHP, alles, 744 01:07:50,400 --> 01:07:55,460 jy nie regtig nodig het om dit te sluit / moet jy dit nie naby. 745 01:08:02,030 --> 01:08:05,720 >> Hantering met stringe is baie mooier as in C. 746 01:08:05,720 --> 01:08:09,470 In PHP jy kan spesifiseer 'n string met 'n enkel of dubbel aanhalings. 747 01:08:09,470 --> 01:08:12,820 Met aanhalingstekens jy nie kan "ontsnap" rye gebruik. 748 01:08:12,820 --> 01:08:17,640 Voortdurend ontsnap, blah, blah, blah. 749 01:08:19,920 --> 01:08:24,010 So printf is baie skaars in PHP. 750 01:08:24,010 --> 01:08:32,290 Ek dink ek printf sou gebruik as ek wou 'n soort van ding te doen - in pset 5 wat jy gebruik sprintf of wat ookal. 751 01:08:32,290 --> 01:08:36,060 Maar jy wil 001.jpg en 002.jpg te doen. 752 01:08:36,060 --> 01:08:40,300 So vir daardie soort van ding waar ek eintlik wil die teks te formateer ek sou printf gebruik. 753 01:08:40,300 --> 01:08:44,689 Maar anders sou ek net gebruik string aaneenskakellling. 754 01:08:44,689 --> 01:08:47,000 Ek het nooit regtig printf gebruik. 755 01:08:49,229 --> 01:09:00,170 Ons is net die onderskeid van die besonderhede tussen aanhalingstekens en dubbele aanhalingstekens. 756 01:09:00,170 --> 01:09:07,490 Die grootste verskil is dat aanhalingstekens, sal dit letterlik gedruk word. 757 01:09:07,490 --> 01:09:15,390 Daar is geen char datatipe in PHP, in teenstelling met C, so dit is gelykstaande aan. 758 01:09:15,390 --> 01:09:17,970 Hulle is beide stringe. 759 01:09:17,970 --> 01:09:29,180 En die lekker ding oor 'n enkele aanhaling snare is ek kon sê "hello world!" blah, blah, blah, 760 01:09:29,180 --> 01:09:33,340 $ $ Wooo. 761 01:09:33,340 --> 01:09:38,260 Wat gebeur wanneer ek print hierdie is dit letterlik druk. 762 01:09:38,260 --> 01:09:40,680 Laat ons ontslae te raak van al ons goed. 763 01:09:40,680 --> 01:09:44,700 So eggo $ str1; 764 01:09:48,569 --> 01:09:56,570 Dit letterlik al daardie dinge: dollar tekens gedruk, 765 01:09:56,570 --> 01:09:58,770 backslash n, wat sou jy dink sou wees newlines - 766 01:09:58,770 --> 01:10:01,500 al hierdie dinge is dit druk letterlik. 767 01:10:01,500 --> 01:10:05,650 Die enigste ding wat jy nodig het om te ontsnap is enkele aanhalings 768 01:10:05,650 --> 01:10:09,470 want anders sou dink dat dit die aanhalingstekens se sluitingsprys. 769 01:10:09,470 --> 01:10:15,050 Dubbele aanhalingstekens, heeltemal anders. 770 01:10:20,300 --> 01:10:25,870 Sien ons reeds die accentuering cluing ons op wat is om te gaan verskriklik verkeerd. 771 01:10:25,870 --> 01:10:36,190 php.unique. Undefined variable: wooo, want dit word geïnterpreteer as 'n veranderlike genaamd wooo. 772 01:10:36,190 --> 01:10:42,400 Dubbele aanhalingstekens laat jy 'veranderlikes in - 773 01:10:42,400 --> 01:10:52,730 Kom ons sê $ name = "Rob"; 774 01:10:52,730 --> 01:10:58,020 So echo "Hallo, my naam is $ naam!"; 775 01:10:58,020 --> 01:11:09,260 Dit erken dit as 'n veranderlike. 776 01:11:09,260 --> 01:11:21,210 Wanneer ek hardloop dat - en ek sal voeg 'n newline - Hi, my naam is Rob! en hello world! 777 01:11:21,210 --> 01:11:24,910 Dit is omdat ek nooit die druk van die wooo verwyder hierbo. 778 01:11:24,910 --> 01:11:30,020 Daar is 1 verdere stap wat jy kan doen. 779 01:11:30,020 --> 01:11:39,250 $ Array = [1, 2, 3]; 780 01:11:39,250 --> 01:11:43,270 Wat gebeur as ek wil die eerste indeks van skikking te druk? 781 01:11:43,270 --> 01:11:45,150 Jy doen $ array [0]. 782 01:11:45,150 --> 01:11:49,280 Die accentuering is 'n leidraad. Wat gaan dit doen? 783 01:11:52,320 --> 01:11:54,510 php.unique. 784 01:11:54,510 --> 01:11:59,860 Hi, my naam is 1! wat is nie wat ek wou hê. 785 01:11:59,860 --> 01:12:05,050 Accentuering vir my gelieg. 786 01:12:05,050 --> 01:12:13,020 Kom ons probeer om 'n "-> 1, 'b' -> 2. 787 01:12:18,450 --> 01:12:21,440 Dit is hoe ek wil hê om dit te skryf. 788 01:12:26,350 --> 01:12:32,160 Onverwagte enkele aanhaling (T_ENCAPSED blah, blah, blah, blah, blah). 789 01:12:32,160 --> 01:12:41,780 Die idee is dat dit nie die erkenning van hierdie as deel van die skikking. 790 01:12:41,780 --> 01:12:46,620 Dit is nie die erkenning van hierdie array geïndekseer deur letter a. 791 01:12:46,620 --> 01:12:49,870 Jy wil om te doen wat tussen accolades, 792 01:12:49,870 --> 01:12:54,730 en nou is alles wat in hierdie krullerige brace sal geïnterpoleer moet word, 793 01:12:54,730 --> 01:13:00,340 wat is die woord wat ons gebruik om mettertyd die invoeging van hierdie veranderlikes in die regte plekke. 794 01:13:00,340 --> 01:13:04,280 Nou doen, php.unique en Hi, my naam is 1! soos verwag 795 01:13:04,280 --> 01:13:07,720 of Hi, my naam is Rob! 796 01:13:14,110 --> 01:13:23,130 Een ding wat is soort van mooi oor aanhalingstekens is dat - 797 01:13:23,130 --> 01:13:28,480 Daar is 'n paar koste te interpol. 798 01:13:30,520 --> 01:13:35,100 As jy gebruik dubbele aanhalingstekens, die tolk het om te gaan oor hierdie string, 799 01:13:35,100 --> 01:13:41,500 om seker te maak dat, "O, hier is 'n veranderlike Nou moet ek gaan kry dat die veranderlike en plaas dit hier." 800 01:13:41,500 --> 01:13:48,930 Selfs as jy nie gebruik nie enige veranderlikes, 801 01:13:48,930 --> 01:13:52,220 niks binnekant van hierdie dubbele aanhalingstekens moet word geïnterpoleerd, 802 01:13:52,220 --> 01:13:56,800 maar dit sal nog stadiger wees, want dit moet gaan oor die dubbele aanhalingstekens 803 01:13:56,800 --> 01:14:00,130 op soek na dinge wat aangespreek moet word geïnterpoleerd. 804 01:14:00,130 --> 01:14:05,360 So aanhalingstekens kan 'n bietjie vinniger as niks moet word geïnterpoleerd, 805 01:14:05,360 --> 01:14:15,650 en ek is geneig om selfs Gebruik aanhalingstekens, "Hi, my naam is '. $ Array ['a'] in elk geval. 806 01:14:15,650 --> 01:14:20,430 Dit gaan te wees gelykstaande aan wat ons gehad het voordat. 807 01:14:24,840 --> 01:14:28,440 Maar dit is 'n kwessie van voorkeur. 808 01:14:28,440 --> 01:14:34,750 As jy met behulp van PHP, het jy waarskynlik sorg nie oor die spoed verskil. 809 01:14:34,750 --> 01:14:39,480 Daar is nie genoeg om hulle uit te redeneer om te begin met. 810 01:14:39,480 --> 01:14:43,030 >> Die finale en enige vrae? 811 01:14:47,430 --> 01:14:51,710 >> Ons het eintlik het nie eens kry deur dit alles, maar hierdie dinge was vervelig. 812 01:14:51,710 --> 01:14:59,080 Die laaste ding wat dit is soort van mooi in PHP is wanneer jy te doen het met HTML, 813 01:14:59,080 --> 01:15:06,450 jy gebruik dit 'n bietjie, sodat die mooi kortpad sintaksis vir die druk van 'n veranderlike. 814 01:15:32,400 --> 01:15:36,730 Sonder om PHP hier, is hierdie kort tags genoem. 815 01:15:36,730 --> 01:15:44,330 Amptelik as van PHP 5,4, word dit afgekeur. 816 01:15:44,330 --> 01:15:48,640 Jy word aanbeveel om php te sit. 817 01:15:48,640 --> 01:15:55,770 Dit is nog steeds ondersteun, so kort tags met die <= is nog steeds heeltemal fyn. 818 01:15:55,770 --> 01:16:02,480 Dit is by verstek ondersteun, sodat jy kan gebruik hierdie as jy wil, en hulle is redelik gerieflik. 819 01:16:02,480 --> 01:16:05,700 >> Enige vrae? 820 01:16:07,780 --> 01:16:09,270 Alles reg. 821 01:16:10,840 --> 01:16:13,800 >> Bly classy, ​​San Diego. 822 01:16:13,800 --> 01:16:16,070 [Chuckles] 823 01:16:18,620 --> 01:16:22,660 Bye. [Lag] 824 01:16:24,350 --> 01:16:28,470 [Applous] [lag] 825 01:22:46,460 --> 01:22:49,460 >> [CS50.TV]