1 00:00:00,000 --> 00:00:02,610 [Powered by Google Translate] [Одељак 8 - Више Удобан] 2 00:00:02,610 --> 00:00:04,910 [Роб Бовден - Универзитет Харвард] 3 00:00:04,910 --> 00:00:07,070 [Ово је ЦС50. - ЦС50.ТВ] 4 00:00:11,520 --> 00:00:14,160 >> Ове недеље секција белешке ће бити прилично кратак, 5 00:00:14,160 --> 00:00:19,070 па ћу само да говоримо, ви идете да поставља питања, 6 00:00:19,070 --> 00:00:22,720 а ми ћемо покушати да попуни онолико времена колико је то могуће. 7 00:00:22,720 --> 00:00:31,950 Многи људи мисле да је ово псет није нужно тешко, али то је веома дуго. 8 00:00:31,950 --> 00:00:37,070 Псет спец сама траје сат да чита. 9 00:00:40,530 --> 00:00:45,730 Дајемо вам пуно на СКЛ можете евентуално треба да користите. 10 00:00:45,730 --> 00:00:50,520 Ми вас провести кроз много тога, тако да не би требало да буде лоше. 11 00:00:50,520 --> 00:00:54,560 Да ли је неко почео или завршио? 12 00:00:55,380 --> 00:00:59,710 То је последња псет. Ох, мој Боже. 13 00:00:59,710 --> 00:01:05,400 Обично постоји једна ЈаваСкрипт након овога, али промена календара ствари 14 00:01:05,400 --> 00:01:09,560 чини све 1 седмица краћи, а ми више не поседујете ЈаваСцрипт псет. 15 00:01:09,560 --> 00:01:12,310 Ја не знам како то утиче да ли је ЈаваСцрипт ће се појавити на испиту 16 00:01:12,310 --> 00:01:15,510 или Квиз 1. 17 00:01:15,510 --> 00:01:22,260 Претпостављам да ће бити нешто као што треба да знате високом нивоу ствари о ЈаваСцрипт-а, 18 00:01:22,260 --> 00:01:26,460 али сумњам да бих само да вам дам праву ЈаваСцрипт кода 19 00:01:26,460 --> 00:01:28,720 јер нисте имали псет у њему. 20 00:01:28,720 --> 00:01:33,000 Али то ће бити ствар за квиз преглед следеће недеље. 21 00:01:33,000 --> 00:01:36,320 >> Секција питања. 22 00:01:36,320 --> 00:01:43,870 Многе од ових ствари је нешто лоше формулисана, али ћемо разговарати зашто. 23 00:01:43,870 --> 00:01:50,220 За разлику од Ц, ПХП је "динамички откуцали" језик. Шта то значи, питате се? 24 00:01:50,220 --> 00:01:53,830 Па, рецимо збогом свима онима цхар, флоат, инт, и друге кључне речи треба да користите 25 00:01:53,830 --> 00:01:56,190 када декларисање променљивих и функција у Ц 26 00:01:56,190 --> 00:02:00,420 У ПХП, променљива је типа одређује вредност која се тренутно држи. 27 00:02:00,420 --> 00:02:04,990 Дакле, пре него што упишете ову шифру у фајлу под називом динамиц.пхп, 28 00:02:04,990 --> 00:02:12,670 ПХП је динамички откуца. То је истина. 29 00:02:12,670 --> 00:02:17,590 Не слажем се са чињеницом да то значи да смо поздрављали цхар, флоат, инт, 30 00:02:17,590 --> 00:02:20,620 и друге кључне речи. 31 00:02:20,620 --> 00:02:25,510 Тачан Разлика између динамички куцани и алтернативно, 32 00:02:25,510 --> 00:02:32,010 која је статички откуцан, да је динамички откуцао, све ваше типа провера и ствари 33 00:02:32,010 --> 00:02:37,350 дешава у време извршавања, док статички откуцан се дешава на компајлирања. 34 00:02:37,350 --> 00:02:43,030 Реч статичка уопште изгледа да значи нешто компајлирања. 35 00:02:43,030 --> 00:02:48,170 Претпостављам да постоје и други користи за њега, али у Ц када прогласимо статичку променљиву, 36 00:02:48,170 --> 00:02:52,650 његова складиштење додељено компајлирања. 37 00:02:52,650 --> 00:02:59,260 Ево, динамички откуцао само значи да - 38 00:02:59,260 --> 00:03:04,350 У Ц ако покушате да додате ниску и цео број, када га саставити, 39 00:03:04,350 --> 00:03:11,000 то ће да се жале, јер је хтео да кажем да не можете да додате инт и показивач. 40 00:03:11,000 --> 00:03:14,710 То једноставно није валидан операција. 41 00:03:14,710 --> 00:03:21,170 То је још једна ствар која ми ћемо доћи до у секунд. 42 00:03:21,170 --> 00:03:24,860 Али та врста провере, чињеница да се жали на компајлирања, 43 00:03:24,860 --> 00:03:29,220 је статичан тип провера. 44 00:03:29,220 --> 00:03:35,220 Постоје језици којима не треба да кажем цхар, флоат, инт, и све те ствари, 45 00:03:35,220 --> 00:03:40,940 али језик може рећи из контекста ствари које врсте је то требало да буде, 46 00:03:40,940 --> 00:03:43,980 али је и даље статично откуца. 47 00:03:43,980 --> 00:03:49,000 Дакле, ако узмете 51, ОЦамл, никада нећете морати да користите било који од ових типова, 48 00:03:49,000 --> 00:03:58,700 али ипак ће у време компајлирања кажу да не можете да урадите, јер сте мешање инт и стринг. 49 00:03:58,700 --> 00:04:05,650 Динамички откуцали само значи да је негде током Рун Тиме ћете добити жалбу. 50 00:04:05,650 --> 00:04:13,430 Ако сте и ви користили Јава раније, у принципу, скоро свака Ц-тип језика 51 00:04:13,430 --> 00:04:20,070 ће бити статички откуцао, па Ц, Ц + +, Јава, сви они су углавном статицки откуца. 52 00:04:20,070 --> 00:04:22,910 У Јави кад састави нешто и кажеш 53 00:04:22,910 --> 00:04:26,670 стринг с једнако нову нешто што није ниска, 54 00:04:26,670 --> 00:04:28,950 који ће да се жале, јер те врсте једноставно не подударају. 55 00:04:28,950 --> 00:04:31,180 То ће да се жале на компајлирања. 56 00:04:31,180 --> 00:04:36,750 Али такође има неку динамичку време ствари се допада ако покушате да баци нешто 57 00:04:36,750 --> 00:04:40,500 на типу који је прецизнији од свог тренутног типа, 58 00:04:40,500 --> 00:04:45,610 не постоји ништа што може да уради на време компајлирања да провери да ли је цаст ће успети. 59 00:04:45,610 --> 00:04:51,130 Јава има неку врсту провере динамичан да чим се стигне до те линије кода 60 00:04:51,130 --> 00:04:54,130 када се она извршава, то ће да уради баци, 61 00:04:54,130 --> 00:04:56,260 проверите да ли је био валидан цаст на првом месту, 62 00:04:56,260 --> 00:04:59,890 а ако није, онда ће да се жале да имате неважећи тип. 63 00:04:59,890 --> 00:05:03,200 Динамички тип провере. 64 00:05:03,200 --> 00:05:07,010 Укуцајте ово у фајл под називом динамиц.пхп. 65 00:05:10,130 --> 00:05:12,380 Динамиц.пхп. 66 00:05:14,580 --> 00:05:17,190 Ја ћу распакујте ту обликовање. 67 00:05:18,750 --> 00:05:21,880 Имамо променљиву, ми смо га поставили на цео 7, 68 00:05:21,880 --> 00:05:27,930 онда ћемо одштампати и% с - 69 00:05:27,930 --> 00:05:32,830 Ох, ми смо штампање тип, па геттипе ће да врати тип променљиве. 70 00:05:32,830 --> 00:05:35,720 Ми само штампањем тип изнова и изнова. 71 00:05:35,720 --> 00:05:39,440 Ми само пхп.динамиц.пхп. 72 00:05:39,440 --> 00:05:45,920 Ми ћемо видети да се она мења из цео у низу на Боолеан као што смо проћи. 73 00:05:45,920 --> 00:05:54,590 У Ц постоји Булова тип података, не постоји низ података типа. 74 00:05:54,590 --> 00:06:00,500 Има цхар * и Булова само тежи да буде инт или цхар или тако нешто. 75 00:06:00,500 --> 00:06:05,690 У ПХП ове врсте не постоје, и то је једна од великих предности над ПХП Ц - 76 00:06:05,690 --> 00:06:13,290 да стринг операције су бескрајно лакше него у ПХП Ц. Они само раде. 77 00:06:13,290 --> 00:06:18,290 >> Тако смо дошли овамо. 78 00:06:18,290 --> 00:06:21,260 Трчали смо динамиц.пхп. 79 00:06:21,260 --> 00:06:26,710 То говори ПХП преводилац, назван пхп, за покретање ПХП кода у динамиц.пхп. 80 00:06:26,710 --> 00:06:30,250 Ако имате било какве грешке у датотеци, преводилац ће вам рећи! 81 00:06:30,250 --> 00:06:39,110 Тумач, ово је још једна велика разлика између ПХП и Ц. 82 00:06:39,110 --> 00:06:48,200 У Ц морате да састави нешто и онда покренути тај саставио датотеку. 83 00:06:48,200 --> 00:06:50,490 У ПХП никад саставити ништа. 84 00:06:50,490 --> 00:06:57,200 Дакле, ПХП преводилац основи само читају ову линију по линију. 85 00:06:57,200 --> 00:07:02,900 Он удари вар = 7 онда удари иф онда удари вар онда удари принтф и тако даље. 86 00:07:02,900 --> 00:07:10,910 Постоји мало састављања то ради, и то кешира резултате 87 00:07:10,910 --> 00:07:15,510 па ако покренете скрипту касније можете да урадите неке, 88 00:07:15,510 --> 00:07:19,280 али у суштини то је то ред по ред ствари. 89 00:07:19,280 --> 00:07:25,280 То значи да многи од оптимизацијама које смо добили у Ц, 90 00:07:25,280 --> 00:07:31,920 као прикупљање, то је само генерално компајлер може да уради много трикова за вас. 91 00:07:31,920 --> 00:07:36,110 То може да потраје од неискоришћених променљиве, то може да уради све оваквим стварима, 92 00:07:36,110 --> 00:07:38,660 може да уради рекурзија рампа. 93 00:07:38,660 --> 00:07:42,550 У ПХП нећеш добити ту предност 94 00:07:42,550 --> 00:07:45,690 само зато што ће почети извршење линију по линију по линију, 95 00:07:45,690 --> 00:07:49,950 и то није заиста препознају ове ствари тако лако 96 00:07:49,950 --> 00:07:54,440 јер није 1 велика компилација пролаз преко ствари и онда извршење; 97 00:07:54,440 --> 00:07:56,860 то је само по линији. 98 00:08:00,730 --> 00:08:02,750 Тако да је преводилац. 99 00:08:02,750 --> 00:08:06,840 >> Вратимо се нашем динамичном куцања: кул, а? 100 00:08:06,840 --> 00:08:08,640 Ти дефинитивно не могу да урадим у Ц! 101 00:08:08,640 --> 00:08:11,860 Дакле, видите да ли можете да схватим тип сваког од следећих вредности. 102 00:08:11,860 --> 00:08:14,760 Погледајте ово за референцу. 103 00:08:14,760 --> 00:08:19,420 Тако 3,50. Који тип мислите да ће то бити? 104 00:08:24,480 --> 00:08:26,370 Овде су типови имамо. 105 00:08:26,370 --> 00:08:30,430 Имамо боолс, целих бројева, плутајући поена, жице, низови, објекти, 106 00:08:30,430 --> 00:08:38,370 и онда ресурси, који је некако нејасан. 107 00:08:38,370 --> 00:08:41,010 Мислим да заправо постоји овде пример. 108 00:08:41,010 --> 00:08:43,740 Затим, ту је НУЛЛ. НУЛЛ је посебан тип. 109 00:08:43,740 --> 00:08:47,140 За разлику од Ц где НУЛЛ је само показивач на адреси 0, 110 00:08:47,140 --> 00:08:54,930 у ПХП, НУЛЛ је сопствени тип, где једина валидна ствар тог типа је НУЛЛ. 111 00:08:57,560 --> 00:09:00,670 Ово је много више користан за проверавање грешака. 112 00:09:00,670 --> 00:09:04,310 У Ц где смо имали овај проблем где ако се врати НУЛЛ 113 00:09:04,310 --> 00:09:08,660 да ли то значи да се враћамо на НУЛЛ показивач или коришћење НУЛЛ да означи грешку 114 00:09:08,660 --> 00:09:12,380 или све те конфузије смо имали у једном тренутку. 115 00:09:12,380 --> 00:09:18,440 Ево, враћа НУЛЛ обично значи грешку. 116 00:09:20,860 --> 00:09:27,300 Много ствари се такође вратити фалсе за грешке. 117 00:09:27,300 --> 00:09:33,140 Али поента је НУЛЛ типа, једина ствар НУЛЛ типа је НУЛЛ. 118 00:09:33,140 --> 00:09:40,090 Тада је као повратни можете дефинисати неке анонимне функције. 119 00:09:40,090 --> 00:09:46,420 Ви не морате да дате функцији име, али нећете морати да се позабавимо овде. 120 00:09:46,420 --> 00:09:53,940 Гледајући типова који они очекују од нас да зна, 121 00:09:53,940 --> 00:09:59,000 Шта мислите тип 3,50 је? >> [Ученик] Пливајући. 122 00:09:59,000 --> 00:10:00,370 Да. 123 00:10:00,370 --> 00:10:06,290 Дакле овде, шта мислите тип је ово? >> [Ученик] Арраи. 124 00:10:06,290 --> 00:10:09,890 Да. Први је био пловак, други је низ. 125 00:10:09,890 --> 00:10:14,500 Обратите пажњу да је ово низ није као Ц низу 126 00:10:14,500 --> 00:10:19,610 где имате индекс 0 има неку вредност, индекс 1 има неку вредност. 127 00:10:19,610 --> 00:10:26,320 Овде су индекси су, б, и ц и вредности су 1, 2 и 3. 128 00:10:26,320 --> 00:10:33,980 У ПХП постоји разлика између асоцијативног низа и само редован низу 129 00:10:33,980 --> 00:10:36,740 као што би било да томе у Ц. 130 00:10:36,740 --> 00:10:43,040 Постоји само ово, а испод хаубе редовна низ је само асоцијативна низа 131 00:10:43,040 --> 00:10:50,000 где 0 мапе за неке вредности исти начин мапе на неку вредност. 132 00:10:50,000 --> 00:11:00,410 Из тог разлога, ПХП може бити прилично лоша за стварно брзе кода / бенчмаркинг ствари 133 00:11:00,410 --> 00:11:07,930 јер у Ц када користите низ знате да приступе члана је константна времена. 134 00:11:07,930 --> 00:11:11,860 У ПХП приступа члана је ко зна колико времена? 135 00:11:11,860 --> 00:11:18,970 То је вероватно константна, ако га исправно хасхови. 136 00:11:18,970 --> 00:11:21,620 Ко зна шта је то стварно ради испод хаубе? 137 00:11:21,620 --> 00:11:25,600 Ви заиста треба погледати на имплементацију да видимо како ће да се позабави тиме. 138 00:11:25,600 --> 00:11:28,550 Дакле фопен. 139 00:11:28,550 --> 00:11:36,420 Ја сам овде мислим да само ПХП мануал фопен да погледате повратног типа. 140 00:11:36,420 --> 00:11:41,260 Ми овде видимо можете погледати прилично било коју функцију у ПХП приручнику 141 00:11:41,260 --> 00:11:47,540 и то је нека врста човека страни ПХП. 142 00:11:47,540 --> 00:11:51,060 Повратни тип ће бити ресурс. 143 00:11:51,060 --> 00:11:56,050 Зато сам га погледао, јер ми није стварно дефинише ресурс. 144 00:11:56,050 --> 00:12:04,110 Идеја добра, у Ц ли некако добио ФИЛЕ * или било шта друго; 145 00:12:04,110 --> 00:12:07,200 у ПХП ресурс је ваша ФИЛЕ *. 146 00:12:07,200 --> 00:12:10,360 То је оно што ће се читајући, то је оно што ће бити писмено. 147 00:12:10,360 --> 00:12:20,710 То је обично спољна, тако да је ресурс можете повући ствари од и бацају ствари. 148 00:12:20,710 --> 00:12:26,520 И на крају, шта је тип НУЛЛ? >> [Ученик] НУЛЛ. 149 00:12:26,520 --> 00:12:30,650 Да. Дакле, једина ствар која је НУЛЛ НУЛЛ је. 150 00:12:30,650 --> 00:12:33,480 НУЛЛ је НУЛЛ. 151 00:12:35,490 --> 00:12:41,170 >> Једна од особина система типа ПХП (за боље или горе) је његова способност да жонглира типова. 152 00:12:41,170 --> 00:12:44,390 Када пишете линију ПХП кода који комбинује вредности различитих типова, 153 00:12:44,390 --> 00:12:46,670 ПХП ће покушати да уради разумна ствар. 154 00:12:46,670 --> 00:12:48,920 Испробајте сваки од следећих линија ПХП кода. Шта је одштампан? 155 00:12:48,920 --> 00:12:51,000 Да ли је то оно што сте очекивали? Зашто или зашто не? 156 00:12:51,000 --> 00:12:58,600 Ова чињеница о ПХП је шта га чини оно што зовемо слабо откуцан. 157 00:12:58,600 --> 00:13:04,610 Слабо откуцана и снажно откуцао, 158 00:13:04,610 --> 00:13:06,840 постоје различити користи за тим терминима, 159 00:13:06,840 --> 00:13:12,020 али већина људи користи слабо откуцано и снажно откуцао да значи овакве ствари 160 00:13:12,020 --> 00:13:15,920 где ("1" + 2), да ради. 161 00:13:15,920 --> 00:13:18,290 У Ц то не би функционисало. 162 00:13:18,290 --> 00:13:22,490 Можете замислити то не ради. 163 00:13:22,490 --> 00:13:29,200 Многи људи мешају динамичан куцање и слабу куцање и статичку куцање и јаку куцање. 164 00:13:29,200 --> 00:13:34,050 Питон је још један пример језика који се динамично унели. 165 00:13:34,050 --> 00:13:41,770 Можете да баци око типова у варијабли и да ће то утврдити у време извршавања 166 00:13:41,770 --> 00:13:44,680 Свака грешка цхецкингс. 167 00:13:44,680 --> 00:13:50,740 У Питхон да ће да изврши ово и да ће видети ("1" + 2); 168 00:13:50,740 --> 00:13:55,920 и то неће успети, јер каже да не можете да додате ниску и цео број. 169 00:13:55,920 --> 00:14:00,860 У ПХП, која је баш као динамички откуцао, ово неће успети. 170 00:14:00,860 --> 00:14:04,220 Слаба куцање има везе са чињеницом да је чини ствари са типовима 171 00:14:04,220 --> 00:14:07,800 да стварно не смисла нужно. 172 00:14:07,800 --> 00:14:17,420 Дакле, ("1" + 2), ја могу да замислим да буде ниска 12, могу да замислим да то не буде ниска 3, 173 00:14:17,420 --> 00:14:20,710 Могу да замислим да то не буде цео 3. 174 00:14:20,710 --> 00:14:24,530 То није нужно добро дефинисан, а ми вероватно ћемо видети овде 175 00:14:24,530 --> 00:14:29,140 када смо одштампали ("1" + 2); вероватно ће завршити као другачији 176 00:14:29,140 --> 00:14:32,320 од штампања (1 + "2"). 177 00:14:32,320 --> 00:14:39,700 А ово тежи да буде, по мом мишљењу, за горе. 178 00:14:39,700 --> 00:14:44,240 Овде можемо пробати ово. 179 00:14:44,240 --> 00:14:48,740 Још један мали трик у вези ПХП је да не треба да се заиста пише датотеку. 180 00:14:48,740 --> 00:14:52,790 Нема се покренете ову команду режим. 181 00:14:52,790 --> 00:14:57,710 Дакле, пхп-р, онда можемо бацити у команди овде: 182 00:14:57,710 --> 00:15:06,610 "Принт ('1 '+ 2)," а ја ћу бацити нову линију. 183 00:15:19,550 --> 00:15:23,970 Овај штампани 3. 184 00:15:31,100 --> 00:15:35,330 Изгледа као да штампа 3 и то је цео 3. 185 00:15:35,330 --> 00:15:38,420 Дакле, хајде да пробамо обрнуто: 186 00:15:38,420 --> 00:15:42,970 "Принт (1 + '2 '); 187 00:15:45,560 --> 00:15:50,490 Ми смо добили 3, а такође ће бити цео 3? Ја искрено немам појма. 188 00:15:50,490 --> 00:15:54,030 Изгледа да је доследна. 189 00:15:54,030 --> 00:15:59,550 Не постоји било каква шанса да се она ниска 12 или нешто слично 190 00:15:59,550 --> 00:16:08,080 јер ПХП, за разлику од Јава и Јава такође, 191 00:16:08,080 --> 00:16:11,670 има посебан оператор за спајање. 192 00:16:11,670 --> 00:16:14,930 Спајање у ПХП је тачка. 193 00:16:14,930 --> 00:16:22,950 Дакле, штампа (1 '2 '.) Ће нам дати 12. 194 00:16:25,790 --> 00:16:32,420 Ово има тенденцију да доведе до забуне где људи покушавају да ураде нешто ул + = 195 00:16:32,420 --> 00:16:37,840 нека друга ствар коју желите да додате на крају свог ниске, и да ће успети. 196 00:16:37,840 --> 00:16:40,770 Потребно је да урадите ул =. 197 00:16:42,000 --> 00:16:46,240 Зато не заборавите спајање у ПХП је тачка. 198 00:16:46,240 --> 00:16:52,100 Друге ствари које треба да испробате: принт ("ЦС" + 50); 199 00:16:55,750 --> 00:17:03,610 Рекао сам ти да не постоји нада за ово резултира ЦС50 200 00:17:03,610 --> 00:17:06,119 јер спајање није +. 201 00:17:06,119 --> 00:17:08,440 Шта мислите да ће ово завршити као? 202 00:17:10,359 --> 00:17:13,460 Ја искрено немам појма. 203 00:17:14,250 --> 00:17:16,460 Изгледа као да је само 50. 204 00:17:16,460 --> 00:17:21,490 Она види стринг, а кладим се да ако ставимо 123ЦС - 205 00:17:21,490 --> 00:17:29,640 Она види прву жицу, он покушава да прочитате цео из ње или број из њега. 206 00:17:29,640 --> 00:17:31,710 У овом случају то види 123ЦС. 207 00:17:31,710 --> 00:17:35,190 "То нема никаквог смисла као цео број, па ћу само да мислим на 123". 208 00:17:35,190 --> 00:17:38,580 Дакле, 123 + 50 ће бити 173. 209 00:17:38,580 --> 00:17:40,740 И овде почиње читањем ово као цео број. 210 00:17:40,740 --> 00:17:45,690 Он не види ништа, па то је само третира га као 0. Дакле 0 + 50 ће бити 50. 211 00:17:45,690 --> 00:17:51,600 Ово Претпостављам ће да уради нешто слично. 212 00:17:51,600 --> 00:17:54,310 Размишљам 99. 213 00:17:54,310 --> 00:17:57,580 Да, зато што ће узети први - 214 00:18:12,880 --> 00:18:15,730 Тако 99. 215 00:18:15,730 --> 00:18:21,970 Овде (10/7), ако је ово Ц, шта би то вратити? 216 00:18:23,700 --> 00:18:29,630 [Ученик] 1. >> Да, то би било 1, јер 10/7 дели 2 цела броја. 217 00:18:29,630 --> 00:18:32,910 Целобројна подељен цео број ће се вратити цео број. 218 00:18:32,910 --> 00:18:37,750 То не може да се врати било шта 1 тачке које ће бити, па то је само ће да се врате 1. 219 00:18:37,750 --> 00:18:46,120 Овде штампање (10/7), то ће заправо тумаче то. 220 00:18:46,120 --> 00:18:53,760 А то значи да, ако сте заиста желите да урадите цео заокруживање и слично, 221 00:18:53,760 --> 00:18:59,950 морате да урадите принт (спрат (10/7)); 222 00:18:59,950 --> 00:19:08,460 У Ц вероватно је чудно да се можете ослонити на цео скраћења редовно, 223 00:19:08,460 --> 00:19:12,260 али у ПХП не можете јер аутоматски ће га претворити у флоат. 224 00:19:13,430 --> 00:19:17,610 А онда (7 + истина), шта мислите да ће то бити? 225 00:19:18,550 --> 00:19:23,640 Претпостављам 8 Ако ће то протумачити као тачно 1. 226 00:19:23,640 --> 00:19:25,740 Изгледа као да је 8. 227 00:19:25,740 --> 00:19:31,710 >> Тако нешто смо урадили у протеклих 10 минута да апсолутно не треба никада учинити. 228 00:19:31,710 --> 00:19:39,870 Видећете кода који чини ово. 229 00:19:39,870 --> 00:19:42,700 То не мора да буде тако једноставан као овај. 230 00:19:42,700 --> 00:19:47,240 Могли сте 2 променљиве и 1 променљива се дешава да се стринг 231 00:19:47,240 --> 00:19:51,310 и друге променљиве деси да буде инт, а онда додати заједно ових променљивих. 232 00:19:51,310 --> 00:20:00,120 Пошто ПХП динамички откуцан и то неће учинити никакву проверу типа за вас 233 00:20:00,120 --> 00:20:03,640 а пошто је слабо откуцано и пошто ће само бацити заједно аутоматски ове ствари 234 00:20:03,640 --> 00:20:11,490 и све ће само радити, тешко је чак и знају да то мора да буде променљива сада ниска, 235 00:20:11,490 --> 00:20:14,930 тако да не би требало да га додате ове променљиве, што је цео број. 236 00:20:18,780 --> 00:20:24,560 Најбоља пракса је ако променљива стринг, држите га као стринг заувек. 237 00:20:24,560 --> 00:20:26,980 Ако променљива инт га задржи као инт заувек. 238 00:20:26,980 --> 00:20:30,770 Ако желите да се баве целих и гудаче, 239 00:20:30,770 --> 00:20:36,970 можете да користите варсинт - то је ЈаваСцрипт. 240 00:20:36,970 --> 00:20:42,520 Интвал. Ја ово све време. ПХП и Јава сам помешати све. 241 00:20:42,520 --> 00:20:47,600 Дакле, интвал ће вратити цео вредност променљиве. 242 00:20:47,600 --> 00:20:56,550 Ако прођемо у "штампе (интвал ('123 ')); добијате 123. 243 00:21:06,820 --> 00:21:15,850 Интвал сама неће да уради проверу за нас да то искључиво је цео број. 244 00:21:15,850 --> 00:21:20,460 ПХП мануал, постоји само толико функција доступна, 245 00:21:20,460 --> 00:21:26,560 ево ја мислим да оно што бих ја користим је ис_нумериц први. 246 00:21:26,560 --> 00:21:32,590 Нагађам да врати фалсе. 247 00:21:32,590 --> 00:21:35,780 То је још једна ствар коју морамо да пређемо јесте. === 248 00:21:37,850 --> 00:21:44,020 Дакле ис_нумериц ('123дф '), не би пало на памет да као ис_нумериц. 249 00:21:44,020 --> 00:21:46,720 У Ц да би требало да прелазили преко свих знакова 250 00:21:46,720 --> 00:21:50,410 и проверите да ли сваки знак је цифра или шта год. 251 00:21:50,410 --> 00:21:53,850 Овде ис_нумериц ће то за нас, 252 00:21:53,850 --> 00:21:56,520 и то се враћа фалсе. 253 00:21:56,520 --> 00:22:02,120 Дакле, када сам штампани тога штампани ништа, па ево ја сам у односу да види, 254 00:22:02,120 --> 00:22:05,490 да ли вам се деси да буде нетачно? И тако сада је штампа 1. 255 00:22:05,490 --> 00:22:10,060 Изгледа да штампа 1 као истинито, уместо штампања истина као истина. 256 00:22:10,060 --> 00:22:15,790 Питам се да ли ја принт_р. Не, још увек не 1. 257 00:22:15,790 --> 00:22:26,760 >> Враћајући се ===, == још увек постоји, 258 00:22:26,760 --> 00:22:32,260 и ако разговарате са Томијем ће рећи == је савршено у реду. 259 00:22:32,260 --> 00:22:37,700 Ја ћу да кажем да == је ужасан и да никада не треба користити. == 260 00:22:37,700 --> 00:22:44,870 Разлика је у томе што == пореди ствари 261 00:22:44,870 --> 00:22:48,450 где може да буде истина, чак и ако они нису исти тип, 262 00:22:48,450 --> 00:22:53,810 док === пореди ствари и прво проверава да су исти тип? 263 00:22:53,810 --> 00:22:58,010 Да. Ок, сад ћу да видим да ли они заправо упореди да буду једнаки. 264 00:22:58,010 --> 00:23:08,890 Добићете чудне ствари као што је једнако 10 - Да видимо шта ту пише. 265 00:23:08,890 --> 00:23:15,570 Дакле, ('10 '== '1 Е1'); 266 00:23:15,570 --> 00:23:17,980 То враћа истина. 267 00:23:17,980 --> 00:23:21,420 Да ли неко има било нагађања зашто се враћа истина? 268 00:23:25,180 --> 00:23:27,120 Није реч само о томе. Можда је ово наговештај. 269 00:23:27,120 --> 00:23:33,170 Али ако бих да променим на ф - то Дарн! Ја га користим дупле наводнике. 270 00:23:33,170 --> 00:23:38,780 Разлог су наводници су викали на мене зато што сам ставио ово у наводницима. 271 00:23:38,780 --> 00:23:43,850 Тако да сам могао да побегне дупле наводнике овде, али апострофе лакше. 272 00:23:43,850 --> 00:23:49,120 Дакле, ('10 '== '1 Ф1'); не штампа истина. ('10 '== '1 Е1'); штампа истина. 273 00:23:49,120 --> 00:23:56,330 [Ученик] Да ли је хексадецимални? >> Није хексадецимално, али је близу да то изгледа - 274 00:23:56,330 --> 00:24:01,060 1е1, научни нотација. 275 00:24:01,060 --> 00:24:07,950 Она признаје 1е1 као 1 * 10 ^ 1 или било шта друго. 276 00:24:07,950 --> 00:24:11,510 Они су равноправни бројеви. 277 00:24:11,510 --> 00:24:15,930 Ако радимо === онда ће то бити лажна. 278 00:24:15,930 --> 00:24:28,490 Ја стварно немам појма, ако радимо == шта (10 и '10абц '); У реду. Дакле, то је истина. 279 00:24:28,490 --> 00:24:35,940 Дакле, баш као када сте радили (10 + '10абц '), и то би било 20, 280 00:24:35,940 --> 00:24:38,800 Овде (10 == '10абц '), је истина. 281 00:24:38,800 --> 00:24:45,350 Још горе су ствари као што су (лажни == НУЛЛ); је истина 282 00:24:45,350 --> 00:24:52,210 или (лажни == 0); је истина, (лажно == []); 283 00:24:52,210 --> 00:25:00,970 Постоје чудни случајеви - То је једна од оних чудних случајева. 284 00:25:00,970 --> 00:25:08,110 Приметимо да је (лажно == []), је истина. 285 00:25:08,110 --> 00:25:11,950 ('0 '== Фалсе); је истина. 286 00:25:11,950 --> 00:25:16,090 ('0 '== []), Је лажна. 287 00:25:16,090 --> 00:25:19,090 Дакле, == никако прелазној. 288 00:25:19,090 --> 00:25:26,830 може бити једнако Б и може бити једнак ц, 289 00:25:26,830 --> 00:25:29,340 али је б можда неће бити једнака ц. 290 00:25:29,340 --> 00:25:35,580 То је одвратно за мене, и увек треба користити. === 291 00:25:35,580 --> 00:25:38,590 [Ученик] Можемо ли == као добро!? >> [Боуден] Да. 292 00:25:38,590 --> 00:25:44,600 Еквивалент би било! = И ==. 293 00:25:44,600 --> 00:25:48,230 То је заправо одрастао у псет спец 294 00:25:48,230 --> 00:25:52,000 где много повратка функције - 295 00:25:52,000 --> 00:25:53,890 ПХП упутство је добро о томе. 296 00:25:53,890 --> 00:25:59,140 Она ставља у великом црвеном пољу, "Ово ће вратити фалсе ако постоји грешка." 297 00:25:59,140 --> 00:26:03,940 Али повратку 0 је сасвим разумна ствар да се врате. 298 00:26:03,940 --> 00:26:08,250 Размислите о било коју функцију коју се очекује да ће вратити цео број. 299 00:26:11,250 --> 00:26:17,880 Рецимо ова функција треба да пребројите број линија у датотеци или тако нешто. 300 00:26:17,880 --> 00:26:23,490 Под нормалним околностима, прођете ове функције датотеку 301 00:26:23,490 --> 00:26:27,120 и то ће вратити цео број који представља број линија. 302 00:26:27,120 --> 00:26:30,820 Дакле, 0 је сасвим разуман број ако датотека је само празна. 303 00:26:30,820 --> 00:26:36,810 Али шта ако му прође неважећи фајл и функција дешава да се врати фалсе 304 00:26:36,810 --> 00:26:38,860 ако му прође неважећи фајл? 305 00:26:38,860 --> 00:26:46,500 Ако само не == нисте разликовање случај између неважеће датотеке и празан фајл. 306 00:26:48,870 --> 00:26:51,350 Увек користите. === 307 00:26:55,690 --> 00:26:58,000 То је све од њих. 308 00:26:58,000 --> 00:27:01,660 >> У ПХП-у, низ врста се разликује од онога што сте навикли у Ц. 309 00:27:01,660 --> 00:27:06,650 Заиста, можда сте већ приметили ово горе када сте видели да је ово типа низа. 310 00:27:06,650 --> 00:27:15,640 Носач синтакса је ново као ПХП 5,4, што је најновија верзија ПХП-а. 311 00:27:15,640 --> 00:27:36,960 Пре тога си увек морао да напише низ ('' -> 1, 'б' -> 2. 312 00:27:36,960 --> 00:27:41,160 То је конструктор за низа. 313 00:27:41,160 --> 00:27:45,950 Сада ПХП коначно дошао око на лепу синтаксом само угластим заградама, 314 00:27:45,950 --> 00:27:50,900 који је тако много боље него низа. 315 00:27:50,900 --> 00:27:54,480 Али с обзиром на ПХП 5,4 је најновија верзија, 316 00:27:54,480 --> 00:27:59,090 можете наићи места која немају ни ПХП 5.3. 317 00:27:59,090 --> 00:28:08,220 Током лета смо наишли на овај проблем, где ПХП 5,3 је оно што смо имали на апарату, 318 00:28:08,220 --> 00:28:14,480 али сервер који смо применили све наше разред књигу и достави и све те ствари да 319 00:28:14,480 --> 00:28:16,750 био ПХП 5.4. 320 00:28:16,750 --> 00:28:23,060 Не знајући то, развили смо у 5,3, гурнути на 5,4, 321 00:28:23,060 --> 00:28:25,660 и сад одједном нико нашег кода ради 322 00:28:25,660 --> 00:28:28,680 јер се десило да су промене између 5.3 и 5.4 323 00:28:28,680 --> 00:28:31,030 који нису компатибилни уназад, 324 00:28:31,030 --> 00:28:35,770 и морамо да идемо и поправити све наше ствари које не раде за ПХП 5.4. 325 00:28:39,210 --> 00:28:42,320 За ову класу, пошто апарат има ПХП 5.4, 326 00:28:42,320 --> 00:28:45,490 то је сасвим у реду да користите угласте заграде. 327 00:28:47,240 --> 00:28:50,440 Али, ако сте у потрази горе ствари око интернета, 328 00:28:50,440 --> 00:28:54,880 ако тражиш неку врсту низа ствари, највероватније ћете видети 329 00:28:54,880 --> 00:29:02,020 срицати синтаксе низа конструктора, јер то је било још од ПХП рођен 330 00:29:02,020 --> 00:29:07,340 и заграда синтакса је око већ последњих неколико месеци 331 00:29:07,340 --> 00:29:10,020 или када је дошао око 5,4. 332 00:29:10,020 --> 00:29:12,710 Ово је начин да индекс. 333 00:29:12,710 --> 00:29:30,610 Баш као у Ц како би Индекс угластим заградама, као што $ низ [0], $ арраи [1], $ арраи [2], 334 00:29:30,610 --> 00:29:36,320 Ви индекс на исти начин уколико се догоди да ваша индекси бити ниске. 335 00:29:36,320 --> 00:29:40,440 Тако $ низ [''] и $ арраи ['б']. 336 00:29:40,440 --> 00:29:47,410 $ Низ [б]. Зашто би то било у реду? 337 00:29:52,490 --> 00:29:59,870 Вероватно ће генерисати упозорење, али и даље ради. ПХП тежи да се то уради. 338 00:29:59,870 --> 00:30:04,890 Она тежи да само: "Ја ћу да вас упозорим, али само ћу да наставим 339 00:30:04,890 --> 00:30:07,550 "И учинити све што могу." 340 00:30:07,550 --> 00:30:11,500 Вероватно ће превести ово на ниске, 341 00:30:11,500 --> 00:30:15,000 али је могуће да ће у неком тренутку у прошлости неко рекао 342 00:30:15,000 --> 00:30:20,180 дефинисати б да буду "ХЕЛЛО ВОРЛД '. 343 00:30:20,180 --> 00:30:28,740 Дакле, сада б може бити константна и $ низ [б] ће заиста бити рад "ХЕЛЛО ВОРЛД '. 344 00:30:28,740 --> 00:30:32,380 Мислим да у овом тренутку, или бар наше ПХП подешавања, 345 00:30:32,380 --> 00:30:37,870 ако покушате да индекс у низу и да кључ не постоји, она ће успети. 346 00:30:37,870 --> 00:30:40,150 Ја не мислим да је то само ће вас упозорити. 347 00:30:40,150 --> 00:30:44,560 Или барем можете да подесите тако да не само да вас упозорим, то право само до успе. 348 00:30:44,560 --> 00:30:49,290 >> Начин да проверите да ли постоји заиста таква индекс иссет. 349 00:30:49,290 --> 00:30:54,690 Дакле иссет ($ низ ['ЗДРАВО СВЕТ']) ће вратити фалсе. 350 00:30:54,690 --> 00:30:59,160 иссет ($ низ ['б']) ће вратити тачно. 351 00:31:06,830 --> 00:31:09,880 Можете да комбинујете ове синтаксе. 352 00:31:15,060 --> 00:31:22,440 Прилично сам сигуран шта је то низ завршити као ис - Можемо га испробате. 353 00:31:43,290 --> 00:31:45,700 Ох, морам ПХПВорд. 354 00:31:53,960 --> 00:32:00,260 То је мешање синтаксу где сте навели шта је кључ 355 00:32:00,260 --> 00:32:03,330 и не прецизира шта је кључ. 356 00:32:03,330 --> 00:32:05,520 Дакле 3 овде је вредност. 357 00:32:05,520 --> 00:32:08,080 Ви нисте експлицитно рекао оно што њен кључ ће бити. 358 00:32:08,080 --> 00:32:11,670 Шта мислите њен кључ ће бити? 359 00:32:11,670 --> 00:32:21,410 [Ученик] 0. >> Нагађам 0 само зато што је то први нисмо навели. 360 00:32:21,410 --> 00:32:23,500 Ми смо заправо може да уради пар ових случајева. 361 00:32:23,500 --> 00:32:28,030 Дакле принт_р је штампање рекурзивна. То ће одштампати цео низ. 362 00:32:28,030 --> 00:32:32,700 То би одштампали субарраис низа ако их је било. 363 00:32:32,700 --> 00:32:36,630 Дакле принт_р ($ низ); пхп.тест.пхп. 364 00:32:36,630 --> 00:32:38,810 То изгледа као да је дао 0. 365 00:32:38,810 --> 00:32:43,530 Постоји заправо нешто имати на уму овде, али ћемо се вратити на то у секунди. 366 00:32:43,530 --> 00:32:45,850 Али шта ако се деси да овај индекс 1? 367 00:32:45,850 --> 00:32:51,170 ПХП не прави разлику између индекса и гудачке целобројних индекса, 368 00:32:51,170 --> 00:33:00,280 тако да у овом тренутку управо сам дефинисали индекс 1 и ја могу да урадим како $ низ [1] и $ арраи ['1 '] 369 00:33:00,280 --> 00:33:06,250 и то ће бити исти индекс и исти кључ. 370 00:33:06,250 --> 00:33:13,000 Па сад шта мислиш 3 ће бити? >> [Ученик] 2. >> [Бовден] Предпостављам 2. 371 00:33:16,000 --> 00:33:18,690 Да. То је 2. 372 00:33:18,690 --> 00:33:24,790 Шта ако смо урадили ово је 10, то је 4? Шта мислите индекс 3 ће бити? 373 00:33:27,360 --> 00:33:29,110 Размишљам 11. 374 00:33:29,110 --> 00:33:33,060 Моја претпоставка о томе шта ради ПХП - и мислим да сам видео ово раније - 375 00:33:33,060 --> 00:33:39,760 је то само води евиденцију о томе шта највише нумерички индекс се он користи до сада је. 376 00:33:39,760 --> 00:33:44,230 То никада неће доделити индекс ниске до 3. Увек ће бити нумерички индекс. 377 00:33:44,230 --> 00:33:47,690 Тако да води евиденцију о највишем једне то је додељен до сада, што се дешава да буде 10, 378 00:33:47,690 --> 00:33:52,540 и то ће дати 11 до 3. 379 00:33:52,540 --> 00:34:02,110 Оно што сам рекао раније, приметите како се штампа овај низ. 380 00:34:02,110 --> 00:34:06,850 Он штампа кључну 10, тастер 4, кључ 11, тастер д. 381 00:34:06,850 --> 00:34:09,790 Или чак да урадимо - 382 00:34:15,760 --> 00:34:22,489 Претпостављам да нисам ставио 0, али је штампање 1, 2, 3, 4. 383 00:34:22,489 --> 00:34:29,330 Шта ако ја овде пребацити? Или хајде да ствари пребацити ове 2. 384 00:34:29,330 --> 00:34:31,940 Сада штампа 2, 1, 3, 4. 385 00:34:31,940 --> 00:34:41,270 ПХП низови су не само као ваш редовни хеш табели. 386 00:34:41,270 --> 00:34:45,570 То је сасвим разумно да мислимо о њима као хасх табела 99% времена. 387 00:34:45,570 --> 00:34:53,790 Али у вашим хасх табеле нема смисла за ред у коме су убачене ствари. 388 00:34:53,790 --> 00:34:56,639 Дакле, чим га убаците у свој хасх табели, 389 00:34:56,639 --> 00:35:00,590 Претпостављам да нема повезан листа и можете да процените у повезану листу 390 00:35:00,590 --> 00:35:03,980 који је први пут постављена. 391 00:35:03,980 --> 00:35:10,060 Али овде убацили смо 2 прва и зна када је штампање овај низ да 2 долази прво. 392 00:35:10,060 --> 00:35:13,090 Она га не штампа у било ком редоследу. 393 00:35:13,090 --> 00:35:17,550 Техничка структура података да се то користи је наредио карта, 394 00:35:17,550 --> 00:35:24,690 тако да мапира кључеве на вредности и памти редослед којим су убачени ти кључеви. 395 00:35:24,690 --> 00:35:31,600 У суштини то је до неких компликација где је досадно да се заправо - 396 00:35:31,600 --> 00:35:34,510 Рецимо да имате низ 0, 1, 2, 3, 4, 5 397 00:35:34,510 --> 00:35:37,700 и желите да се индекс 2. 398 00:35:37,700 --> 00:35:47,750 Један од начина да се то ради, хајде да видимо шта то личи. 399 00:35:47,750 --> 00:35:50,410 0, 2, 1, 3, 4. 400 00:35:50,410 --> 00:35:54,880 Невезаног дешава ресетовање обе променљиве и низа индекса. 401 00:35:54,880 --> 00:35:58,630 Тако постављена ($ низ [2]); 402 00:35:58,630 --> 00:36:03,430 Сада шта ће то изгледати? 2 је управо отишао, тако да је то сасвим у реду. 403 00:36:03,430 --> 00:36:11,670 Више досадно је ако желите да се ствари заиста буде као низа. 404 00:36:11,670 --> 00:36:14,910 Ставићу случајних бројева. 405 00:36:14,910 --> 00:36:20,400 Сада приметите моје индексе. 406 00:36:20,400 --> 00:36:26,860 Желим само да буде као Ц низа где иде од 0 до дужине - 1 407 00:36:26,860 --> 00:36:30,810 и ја могу прелазили преко тога, као што су. 408 00:36:30,810 --> 00:36:38,520 Али, чим сам ресетовање други индекс, шта је било у индексу 3 сада не постане индекс 2. 409 00:36:38,520 --> 00:36:44,790 Уместо тога, само уклања тај индекс и сада идете 0, 1, 3, 4. 410 00:36:44,790 --> 00:36:48,740 Ово је савршено разумно. 411 00:36:48,740 --> 00:36:53,950 То је само досадни и ви морате да урадите ствари као низа Сплице. Да. 412 00:36:53,950 --> 00:36:57,200 >> [Ученик] Шта ће се десити ако је за петљу 413 00:36:57,200 --> 00:36:59,630 а ви хтели да иду преко свих елемената? 414 00:36:59,630 --> 00:37:02,290 Када је ударио 2, да ли би икада донети? 415 00:37:02,290 --> 00:37:10,150 Итератинг преко низа. Постоје 2 начина да се то уради. 416 00:37:10,150 --> 00:37:12,770 Можете користити редовно за петљу. 417 00:37:12,770 --> 00:37:22,000 Ово је још један сложеност ПХП. 418 00:37:22,000 --> 00:37:27,420 Већина језика, ја бих рекао, имају неку врсту дужине или ЛЕН или нешто 419 00:37:27,420 --> 00:37:30,470 указује на дужину низа. 420 00:37:30,470 --> 00:37:32,820 У ПХП је гроф. 421 00:37:32,820 --> 00:37:36,160 Дакле, цоунт ($ низ); $ и + +) 422 00:37:36,160 --> 00:37:42,950 Хајде само да штампа ($ низ [$ и]); 423 00:37:45,920 --> 00:37:48,820 Нотице: Ундефинед оффсет: 2. 424 00:37:48,820 --> 00:37:51,610 То ће да пропадне. 425 00:37:51,610 --> 00:38:03,020 То је разлог да, у највећем делу, никада нећете морати да вршите итерацију кроз низ овако. 426 00:38:03,020 --> 00:38:07,110 То може бити претеривање, али никада нећете морати да вршите итерацију кроз низ овако 427 00:38:07,110 --> 00:38:19,410 јер ПХП обезбеђује његову фореацх синтаксу где фореацх ($ $ арраи као ставка). 428 00:38:19,410 --> 00:38:31,830 Сада, ако се штампају ($ ставка) - ве'лл томе разговарати у секунди - који ради савршено добро. 429 00:38:31,830 --> 00:38:38,960 Начин на који фореацх ради је први аргумент је низ које сте итератинг преко. 430 00:38:38,960 --> 00:38:44,060 А други аргумент ставка, кроз сваку од пролаза за петље 431 00:38:44,060 --> 00:38:52,690 то ће да се на следећем ствар у низу. Дакле, запамтите низ има налог. 432 00:38:52,690 --> 00:38:55,690 Први пут кроз фор петљи, ставка ће бити 123 433 00:38:55,690 --> 00:38:59,540 онда ће бити 12 онда ће бити 13 онда ће бити 23 онда ће бити 213. 434 00:38:59,540 --> 00:39:04,670 Ствари се заиста чудно кад радиш нешто фореацх. 435 00:39:04,670 --> 00:39:07,480 Хајде да видимо шта се дешава, јер никада не би требало да урадите. 436 00:39:07,480 --> 00:39:13,320 Шта ако невезаног ($ арраи [1]); 437 00:39:20,410 --> 00:39:26,030 То је вероватно очекивао. 438 00:39:26,030 --> 00:39:30,950 Ти итератинг у овом низу, и сваки пут када се унсеттинг први индекс. 439 00:39:30,950 --> 00:39:39,720 Дакле, за индекс 0, прва ствар, ставка узима вредност 0, тако да ће бити 123. 440 00:39:39,720 --> 00:39:44,630 Али унутар петље за нас невезаног индекс 1, па то значи да 12 је нестало. 441 00:39:44,630 --> 00:39:57,480 Тако штампа. ПХП_ЕОЛ. 442 00:39:57,480 --> 00:40:03,580 ПХП_ЕОЛ је само нови ред, али је техницки преносив 443 00:40:03,580 --> 00:40:08,890 јер редовима у Виндовс разликује од редовима на Мац и Уник. 444 00:40:08,890 --> 00:40:18,040 На Виндовс нови ред је \ р \ н, а свуда има тенденцију само да се \ н. 445 00:40:18,040 --> 00:40:25,150 ПХП_ЕОЛ је конфигурисан тако да користи, без обзира на нови ред вашег система. 446 00:40:25,150 --> 00:40:29,310 Тако принт то. Немојмо принт_р ($ низ) на крају. 447 00:40:32,830 --> 00:40:37,390 Нисам имао појма да ће то бити понашање. 448 00:40:41,740 --> 00:40:48,960 Ставка и даље траје на вредности 12 иако смо ресетовање 12 пре него што смо икада добили на њега из низа. 449 00:40:52,770 --> 00:40:58,840 Не узимам реч о томе, али изгледа као да фореацх креира копију низа 450 00:40:58,840 --> 00:41:02,160 и онда ставка узима све вредности те копије. 451 00:41:02,160 --> 00:41:07,760 Дакле, чак и ако измените низ унутар фор петљи, 452 00:41:07,760 --> 00:41:17,240 то није брига. Ставка ће се на првобитне вредности. 453 00:41:17,240 --> 00:41:19,240 Хајде да покушамо унсеттинг га. 454 00:41:19,240 --> 00:41:24,460 Шта ако је ово $ арраи [1] = "здраво"; 455 00:41:24,460 --> 00:41:31,770 Иако смо ставили "здраво" у низу, тачка никада не одузима на тој вредности. 456 00:41:31,770 --> 00:41:37,430 Постоји још једна синтакса за фореацх петље 457 00:41:37,430 --> 00:41:45,900 где сте ставили 2 променљиве раздвојене стрелом. 458 00:41:45,900 --> 00:41:49,680 Овај први променљива ће бити кључ те вредности, 459 00:41:49,680 --> 00:41:53,050 а ова друга варијабла ће бити исти тачан ставка. 460 00:41:53,050 --> 00:42:01,610 То се овде незанимљива, али ако се вратимо на наш првобитни случај 'А' -> 1, 461 00:42:01,610 --> 00:42:06,090 'Б' -> 1, 462 00:42:06,090 --> 00:42:14,470 овде ако смо само прелазили за сваку низа као ставке, ставка ће бити 1 сваки пут. 463 00:42:14,470 --> 00:42:18,170 Али ако ми такође желимо да знамо кључ повезан са том ставком 464 00:42:18,170 --> 00:42:25,230 онда ми као $ тастер -> $ итем. 465 00:42:25,230 --> 00:42:31,980 Тако сада можемо да урадимо за штампање ($ кеи ':'.. 466 00:42:31,980 --> 00:42:39,380 Сада је итератинг изнова и штампа сваки тастер и њену повезану вредност. 467 00:42:39,380 --> 00:42:47,030 >> Додатни ствар коју можете да урадите у фореацх петљи је можда видети ову синтаксу. 468 00:42:47,030 --> 00:42:54,770 Амперсандс пре променљивих имена имају тенденцију да буде како ПХП ради референце. 469 00:42:54,770 --> 00:43:00,460 Где референце су врло сличне показивачима, 470 00:43:00,460 --> 00:43:04,820 немате тројки, тако да никада баве меморије директно. 471 00:43:04,820 --> 00:43:12,620 Али ви немате референце где 1 променљива се односи на исту ствар као и друге променљиве. 472 00:43:12,620 --> 00:43:21,450 Унутар овде урадимо $ ставка. Хајде да се вратимо на 1, 10. 473 00:43:21,450 --> 00:43:28,800 Урадимо $ ставка + +; То још увек постоји у ПХП-у. Још увек можете да урадите + +. 474 00:43:28,800 --> 00:43:38,260 пхп.тест.пхп. Морам да га одштампате. принт_р ($ низ); 475 00:43:38,260 --> 00:43:42,730 Штампамо 2, 11. 476 00:43:42,730 --> 00:43:49,560 Ако само учинио фореацх ($ низ ас $ итем), онда ставка ће бити вредност 1 477 00:43:49,560 --> 00:43:54,190 Први пут кроз петљу. То ће увећати 1 до 2 и онда смо готови. 478 00:43:54,190 --> 00:43:57,260 Онда ће ићи кроз друге пролазе од петље и да ставка 10. 479 00:43:57,260 --> 00:44:01,570 То повећава тачка на 11, а онда је само бацити. 480 00:44:01,570 --> 00:44:06,670 Онда смо принт_р ($ арраи), и хајде да видимо да је то само 1, 10. 481 00:44:06,670 --> 00:44:09,070 Дакле, прираст смо је изгубили. 482 00:44:09,070 --> 00:44:13,410 Али фореацх ($ низ као & $ ставка) 483 00:44:13,410 --> 00:44:21,910 Сада ова ставка је иста ставка као ово овде. То је иста ствар. 484 00:44:21,910 --> 00:44:26,820 Тако $ ставка + + је низ измена 0. 485 00:44:29,330 --> 00:44:41,850 У суштини, можете да урадите $ К -> $ ставку и можете да урадите $ низ [$ к] + +; 486 00:44:41,850 --> 00:44:48,650 >> Дакле, још један начин да ради, ми смо слободни да мењате ставке, 487 00:44:48,650 --> 00:44:54,070 али да неће мењати своју оригиналну низ. 488 00:44:54,070 --> 00:44:59,720 Али ако користимо К, који је наш кључни, онда можемо само индекс у нашем низу користећи тај кључ 489 00:44:59,720 --> 00:45:01,530 и инкрементирање то. 490 00:45:01,530 --> 00:45:05,410 Ово више директно мења наш оригинални низ. 491 00:45:05,410 --> 00:45:10,690 Можете чак и да то ако из неког разлога желели могућност да промени - 492 00:45:10,690 --> 00:45:13,510 Заправо, ово је савршено разумно. 493 00:45:13,510 --> 00:45:16,020 Ниси хтела да напише $ низ [$ к] + +, 494 00:45:16,020 --> 00:45:27,890 само хтео да напише $ ставка + +, али још увек желели да кажу да ли ($ к === '') 495 00:45:27,890 --> 00:45:30,620 онда инкрементирање ставку, а затим одштампате наш низ. 496 00:45:30,620 --> 00:45:36,290 Па сад шта очекујемо принт_р да радимо? Које вредности треба да се штампа? 497 00:45:36,290 --> 00:45:43,770 [Ученик] 2 и 10. >> [Бовден] Само ако кључ је "" ми заправо одштампате то. 498 00:45:51,940 --> 00:45:55,670 >> Ви вероватно веома ретко, ако икада, потребно је дефинисати функције у ПХП-у, 499 00:45:55,670 --> 00:46:03,370 али можда ћете видети нешто слично где дефинисати функцију као функцију вхатевер. 500 00:46:03,370 --> 00:46:09,900 Обично би рекли ($ фоо, бар $), а затим га дефинишу бити свеједно. 501 00:46:09,900 --> 00:46:17,580 Али ако то урадим, онда то значи да без обзира шта год позива, 502 00:46:17,580 --> 00:46:25,110 год зове Баз, па први аргумент прослеђен Баз може бити промењена. 503 00:46:25,110 --> 00:46:38,100 Урадимо $ фоо + +; 504 00:46:38,100 --> 00:46:48,020 и унутар овде урадимо Баз ($ ставка); 505 00:46:48,020 --> 00:46:52,250 Сада позивамо функцију. 506 00:46:52,250 --> 00:46:56,780 Аргумент се узима позивањем, што значи да ако га измени 507 00:46:56,780 --> 00:47:00,390 ми допунама ствар која је прошла ин 508 00:47:00,390 --> 00:47:04,420 А штампање ове очекујемо - осим ако сам забрљао синтаксу - имамо 2, 11, 509 00:47:04,420 --> 00:47:06,300 тако да је заправо повећава. 510 00:47:06,300 --> 00:47:08,790 ОБАВЕШТЕЊЕ морамо референце у 2 места. 511 00:47:08,790 --> 00:47:13,050 Шта ако сам урадио ово? Шта ово значи? 512 00:47:13,050 --> 00:47:15,810 [Ученик] То ће се променити. >> Да. 513 00:47:15,810 --> 00:47:18,290 Ставка је само копија вредности у низу. 514 00:47:18,290 --> 00:47:26,670 Дакле, ставка ће се променити у 2, али низ [''] ће и даље бити 1. 515 00:47:26,670 --> 00:47:32,560 Или, шта ако урадим ово? 516 00:47:32,560 --> 00:47:39,260 Сада ставка послата као копију Баз. 517 00:47:39,260 --> 00:47:46,330 Дакле, копија аргумента ће бити увећан до 2, 518 00:47:46,330 --> 00:47:49,240 али ставка сама никада није увећан за 2. 519 00:47:49,240 --> 00:47:52,880 А ставка је иста ствар као низа носач шта год, 520 00:47:52,880 --> 00:47:55,380 тако да низ никада није увећан. 521 00:47:55,380 --> 00:47:57,960 Дакле, оба та места треба. 522 00:47:57,960 --> 00:48:03,830 >> ПХП је обично прилично паметно о томе. 523 00:48:03,830 --> 00:48:06,570 Можда мислиш да желим да прође по референци - 524 00:48:06,570 --> 00:48:09,560 То је, заправо, питање о једном од псетс. 525 00:48:09,560 --> 00:48:14,480 То је била ствар куестионс.ткт где је рекао, 526 00:48:14,480 --> 00:48:19,280 Зашто би желите да проследите ову струцт позивањем? 527 00:48:19,280 --> 00:48:21,250 Шта је одговор на то? 528 00:48:21,250 --> 00:48:25,100 [Ученик] Тако да не морате да копирате нешто велико. >> Да. 529 00:48:25,100 --> 00:48:32,920 Струцт могу бити произвољно велики, а када прође струцт се као аргумент 530 00:48:32,920 --> 00:48:36,800 потребно је да копирате тај цео струцт да га усвоји до функције, 531 00:48:36,800 --> 00:48:40,410 а ако само прође струцт позивањем 532 00:48:40,410 --> 00:48:46,530 онда само треба да копирате 4-бајта адресу као аргумент функције. 533 00:48:48,520 --> 00:48:52,320 ПХП је мало паметнији од тога. 534 00:48:52,320 --> 00:49:00,650 Ако имам неку функцију и прећи на њега низ од 1.000 ствари, 535 00:49:00,650 --> 00:49:03,990 да ли то значи да ће морати да копирате све 1.000 тих ствари 536 00:49:03,990 --> 00:49:10,450 да прође га у функцију? То не мора да то уради одмах. 537 00:49:10,450 --> 00:49:15,940 Ако унутар ове функције она заправо никада није модификује фоо, 538 00:49:15,940 --> 00:49:22,660 па ако ($ фоо === 'здраво') ретурн.; 539 00:49:22,660 --> 00:49:26,460 Обавештење ми заправо никада модификован аргумента унутар ове функције, 540 00:49:26,460 --> 00:49:30,010 што значи да све што је усвојен као трла не мора да буде копирана 541 00:49:30,010 --> 00:49:32,100 јер није то то мењање. 542 00:49:32,100 --> 00:49:39,240 Дакле, начин на који ПХП дела је да су аргументи су увек прошли по референци 543 00:49:39,240 --> 00:49:42,170 док ви у ствари покушавају да га мењају. 544 00:49:42,170 --> 00:49:51,160 Сада, ако кажем $ фоо + +, то ће сада направити копију оригиналне фоо и мењати копију. 545 00:49:51,160 --> 00:49:53,090 То штеди време. 546 00:49:53,090 --> 00:49:58,210 Ако никад не додирујете овај масиван низ, заправо никада не мења, 547 00:49:58,210 --> 00:50:02,360 да не треба да направи копију, 548 00:50:02,360 --> 00:50:06,640 а ако смо само ставили ову амперсанд То значи да чак и не да га копирате 549 00:50:06,640 --> 00:50:08,640 чак и ако могу да измените. 550 00:50:08,640 --> 00:50:10,680 Ово понашање се зове копија-на-писања. 551 00:50:10,680 --> 00:50:17,380 Ви ћете га видети у другим местима, посебно ако се узме оперативног система курс. 552 00:50:17,380 --> 00:50:23,880 Цопи-он-врите је прилично уобичајена образац где не треба да направи копију нешто 553 00:50:23,880 --> 00:50:26,650 уколико се заиста мења. Да. 554 00:50:26,650 --> 00:50:29,520 [Ученик] Шта ако сте имали пораст унутар теста, 555 00:50:29,520 --> 00:50:33,700 па само 1 елемент од 1.000 би требало да се промени? 556 00:50:33,700 --> 00:50:38,770 Нисам сигуран. 557 00:50:38,770 --> 00:50:51,250 Мислим да би копирали целу ствар, али је могуће да је довољно паметан да - 558 00:50:51,250 --> 00:51:00,020 Заправо, оно што ја мислим је замислити да смо имали низ који изгледа овако: $ низ2 = [ 559 00:51:00,020 --> 00:51:11,000 Онда ИНДЕКС '' је низ [1 2 3 4], а индекс 'Б' је низ вхатевер. 560 00:51:11,000 --> 00:51:15,380 Морам зарезе између свих њих. Замислите постоје зарези. 561 00:51:15,380 --> 00:51:21,210 Затим 'ц' је вредност 3. 562 00:51:24,210 --> 00:51:26,290 Ок. 563 00:51:26,290 --> 00:51:33,440 Сада рецимо радимо $ баз ($ низ2); 564 00:51:33,440 --> 00:51:36,540 где баз не узме ово референце. 565 00:51:43,510 --> 00:51:47,370 Тако $ фоо ['ц'] + +; 566 00:51:47,370 --> 00:51:52,340 То је такав пример где смо пролази арраи2 као аргумент 567 00:51:52,340 --> 00:51:57,010 и онда се измене посебан индекс низа тако да увецава. 568 00:51:57,010 --> 00:52:01,090 Ја искрено немам појма шта ПХП ће да уради. 569 00:52:01,090 --> 00:52:07,200 Лако може да направи копију целог ствар, али ако је паметан, 570 00:52:07,200 --> 00:52:15,030 то ће направити копију ових тастера, где ће имати своју посебну вредност 571 00:52:15,030 --> 00:52:20,620 али то и даље може указати на истом низу 1,2,3,4 572 00:52:20,620 --> 00:52:22,320 а то даље може указати на истом низу. 573 00:52:22,320 --> 00:52:24,170 Ја ћу га иПад. 574 00:52:28,900 --> 00:52:45,950 Пролазимо у овом низу, где је овај момак бодова до 3, овај момак поена [1,2,3,4], 575 00:52:45,950 --> 00:52:51,350 Овај момак указује на [...] 34, 576 00:52:51,350 --> 00:52:58,590 Сада када смо то пролази на Баз, ми смо мењање ово. 577 00:52:58,590 --> 00:53:03,550 Ако ПХП је паметан, само може да уради - 578 00:53:11,850 --> 00:53:18,230 Ми смо увек морали да копирате неку меморију, али ако је било огромне угнежђене субарраис 579 00:53:18,230 --> 00:53:21,560 нисмо морали да копирате њих. 580 00:53:21,560 --> 00:53:27,530 Ја не знам да ли је то оно што ради, али могу да замислим да то раде. 581 00:53:29,050 --> 00:53:36,690 Ово је такође прилично велика предност над Ц ПХП. 582 00:53:36,690 --> 00:53:40,320 >> ПХП чини живот много лакши за много ствари, 583 00:53:40,320 --> 00:53:45,060 али некако немам појма колико добро ће обављати 584 00:53:45,060 --> 00:53:52,530 јер ја немам појма испод хаубе када је прављење ових копија ствари, 585 00:53:52,530 --> 00:53:55,170 Ох, јесте да ће бити константа време копија, 586 00:53:55,170 --> 00:54:01,140 је то само ће се променити 1 показивач, да ли ће бити смешно тешко линеарно копија? 587 00:54:01,140 --> 00:54:03,000 Шта ако не можемо да нађемо простор? 588 00:54:03,000 --> 00:54:06,760 Да ли је онда потребно да покренете колекцију смеће добити мало више простора? 589 00:54:06,760 --> 00:54:11,210 А смеће може да произвољно дуго. 590 00:54:11,210 --> 00:54:13,600 У Ц не морате да бринете о тим стварима. 591 00:54:13,600 --> 00:54:19,780 Сваки ред можете да ти пишем можеш прилично разлога о томе како ће то обављати. 592 00:54:26,800 --> 00:54:29,150 >> Да се ​​осврнем на ово. 593 00:54:35,400 --> 00:54:37,520 Како је лепо да не морате да се баве хеш функција, 594 00:54:37,520 --> 00:54:39,010 повезане листе, или тако нешто? 595 00:54:39,010 --> 00:54:41,980 Пошто рад са табелама хасх је тако лако сада, ево забавно слагалица за рад. 596 00:54:41,980 --> 00:54:45,920 Отворите фајл под називом уникуе.пхп иу њему написати ПХП програм 597 00:54:45,920 --> 00:54:48,330 (Такође познат као "сценарио"). 598 00:54:48,330 --> 00:54:55,700 Ми смо склони да их назовем скрипте ако су кратке ствари да раде у командној линији. 599 00:54:55,700 --> 00:55:02,950 У суштини, сваки језик који се не компајлира али ћеш да покренете извршни 600 00:55:02,950 --> 00:55:05,920 у командној линији, можете назвати скрипту извршну. 601 00:55:05,920 --> 00:55:08,510 Могао баш као и написати Ц програм који ради ово, 602 00:55:08,510 --> 00:55:12,300 али ја не зовем сценарио, јер сам први пут га састави, а затим покрените бинарни. 603 00:55:12,300 --> 00:55:15,480 Али ово ПХП програм ћемо позвати сценарио. 604 00:55:15,480 --> 00:55:23,830 Или, ако га је писао у Питхон или Перл или Ноде.јс или било тих ствари, 605 00:55:23,830 --> 00:55:26,500 ми бисмо их зову сви скриптови јер сте их покрене на командној линији 606 00:55:26,500 --> 00:55:30,040 али ми их не саставити. 607 00:55:30,860 --> 00:55:33,400 Могли би ово прилично брзо. 608 00:55:36,960 --> 00:55:41,480 Нећемо користити аргв. Хајде да експлодира кроз ово. 609 00:55:41,480 --> 00:55:45,730 Назовите то јединствена, написати програм. 610 00:55:45,730 --> 00:55:49,400 Можете претпоставити да ће улаз садржати једну реч по линији. 611 00:55:49,400 --> 00:55:52,020 Заправо, аргв ће бити прилично тривијалне за употребу. 612 00:56:03,730 --> 00:56:06,720 уникуе.пхп. 613 00:56:08,550 --> 00:56:13,750 Прва ствар прво, желимо да провери да ли смо прошли 1 командне линије аргумент. 614 00:56:13,750 --> 00:56:20,900 Баш као што бисте очекивали аргц и аргв у Ц, и даље имамо оне у ПХП-у. 615 00:56:20,900 --> 00:56:33,900 Дакле, ако ($ аргц == 2!), Онда нећу бавити штампањем поруку или нешто слично. 616 00:56:33,900 --> 00:56:37,340 Ја ћу изаћи, код грешке од 1. 617 00:56:37,340 --> 00:56:41,340 Такође сам могао да се врати 1. 618 00:56:41,340 --> 00:56:53,180 Ретко у ПХП сте у том стању где смо - 619 00:56:53,180 --> 00:56:57,820 Обично сте у функцији расписао функцију зове по функцији позван од функције. 620 00:56:57,820 --> 00:57:02,070 А ако нешто крене наопако, а ви само желите да изађете све у потпуности, 621 00:57:02,070 --> 00:57:05,680 излаз само завршава програм. 622 00:57:05,680 --> 00:57:08,160 То такође постоји у Ц. 623 00:57:08,160 --> 00:57:10,700 Ако сте у функцији у функцији у функцији у функцији 624 00:57:10,700 --> 00:57:17,540 и желите да само убити програм, можете позвати екит и то ће само изаћи. 625 00:57:17,540 --> 00:57:23,120 Али у ПХП је још реткост да смо на овом врхунском нивоу. 626 00:57:23,120 --> 00:57:26,090 Обично смо у некаквом функције, тако зовемо излаз 627 00:57:26,090 --> 00:57:29,650 тако да не морамо да се врате за 1 ствар која онда схвата да је грешка 628 00:57:29,650 --> 00:57:32,270 тако да се враћа ако препозна било грешка. 629 00:57:32,270 --> 00:57:35,270 Ми не желимо да се бавимо тиме, тако да излазак (1); 630 00:57:35,270 --> 00:57:38,240 повратак (1), у овом случају би била еквивалент. 631 00:57:38,240 --> 00:57:44,000 >> Онда оно што желите да отворите желимо да фопен. 632 00:57:44,000 --> 00:57:46,760 Аргументи ће изгледају прилично слично. 633 00:57:46,760 --> 00:57:51,600 Желимо да фопен ($ аргв [1], а ми желимо да га отвори за читање. 634 00:57:51,600 --> 00:57:55,720 То даје ресурс који идемо звати ф. 635 00:57:55,720 --> 00:58:02,180 Ово изгледа прилично слично како то ради, осим Ц не морамо да кажемо * Филе. 636 00:58:02,180 --> 00:58:06,170 Уместо тога, само реци $ ф. Ок. 637 00:58:06,170 --> 00:58:17,190 Заправо, мислим да је то чак нам даје наговештај о томе да ПХП функцију зове фајл. ПХП Филе. 638 00:58:17,190 --> 00:58:23,990 Шта ће се то уради је да прочитате целу датотеку у низу. 639 00:58:23,990 --> 00:58:29,770 Не морате чак ни да фопен га. То ће учинити то за вас. 640 00:58:37,450 --> 00:58:43,700 Дакле, $ линија = филе ($ аргв [1]); 641 00:58:43,700 --> 00:58:49,680 Сада све линије датотеке су у редовима. Сада желимо да сортирате редове. 642 00:58:49,680 --> 00:58:52,180 Како можемо разврстати линије? 643 00:58:52,180 --> 00:58:54,920 Ми смо сортирали линије. 644 00:58:54,920 --> 00:58:58,080 А сада можемо да штампамо их или било шта друго. 645 00:58:58,080 --> 00:59:05,580 Вероватно најлакши начин је фореацх ($ $ линије као линија) ецхо $ линија; 646 00:59:05,580 --> 00:59:10,960 [Ученик] не би ми чак прелазе линије које референцирање нешто у врсте? 647 00:59:10,960 --> 00:59:28,850 Ово је место где би некако да се дефинише као функција сорт ($ & низ). 648 00:59:28,850 --> 00:59:32,650 Када позовете функцију да не прође референцу. 649 00:59:32,650 --> 00:59:36,900 То је функција која дефинише га као да је узимајући као референцу. 650 00:59:36,900 --> 00:59:40,900 То је заправо оно што је пошло наопако 651 00:59:40,900 --> 00:59:46,220 када смо ставили све да нашим серверима, када смо отишли ​​из 5,3 до 5,4. 652 00:59:46,220 --> 00:59:53,800 До 5,4, ово је било сасвим разумно. 653 00:59:53,800 --> 00:59:58,740 Функција не очекује да га узме као референца, али можете да га проћи као референцу 654 00:59:58,740 --> 01:00:02,860 па ако функција не деси да га модификује, она је и даље мењати. 655 01:00:02,860 --> 01:00:05,850 Као од 5,4, ви не би требало да урадите. 656 01:00:05,850 --> 01:00:11,740 Тако сада једини начин да прође позивајући је да ако функција изричито ради. 657 01:00:11,740 --> 01:00:19,840 Ако не желите да га модификује, онда морате да урадите $ $ = примерак линије и пасс копија. 658 01:00:19,840 --> 01:00:24,820 Дакле, сада линије ће бити очувана и копија ће бити промењена. 659 01:00:27,670 --> 01:00:31,460 пхп.уникуе.пхп. Можда сам забрљао нешто. 660 01:00:31,460 --> 01:00:33,190 Неочекивани 'врста'. 661 01:00:38,320 --> 01:00:43,850 Ту ће бити нешто што то ради за нас. 662 01:00:43,850 --> 01:00:45,820 Није ни тамо. 663 01:00:45,820 --> 01:00:52,140 Обратите пажњу када читате приручник који први аргумент се очекује да буде низ 664 01:00:52,140 --> 01:00:56,490 и то узети по референци. 665 01:00:58,160 --> 01:01:03,540 Зашто је ова жале на мене? Зато што имам ту функцију какву још увек овде да ја не желим. 666 01:01:03,540 --> 01:01:09,210 Ок, пхп.уникуе.пхп. Нисам га положе аргумент, јер ја немам датотеку. 667 01:01:09,210 --> 01:01:13,560 То је пхп.уникуе.пхп на тест.пхп. 668 01:01:13,560 --> 01:01:19,080 Овде је све тест.пхп штампан у лепој сортираном редоследу. 669 01:01:19,080 --> 01:01:24,600 Приметимо да сортирају како би је некако чудно кода датотеке 670 01:01:24,600 --> 01:01:27,460 јер сви наши празних линија ће доћи прво 671 01:01:27,460 --> 01:01:30,190 онда ће доћи сви наши 1 степен удубљења 672 01:01:30,190 --> 01:01:33,360 онда долазе сви наши без удубљења. 673 01:01:33,360 --> 01:01:38,620 Да. >> [Ученик] Дакле, за изворни код није прошао по референци? 674 01:01:38,620 --> 01:01:42,240 Да ли је то уопште прошао вредности? 675 01:01:42,240 --> 01:01:50,240 [Бовден] Када позовете функцију, никада се утврђује да ли је прошао по референци. 676 01:01:50,240 --> 01:01:53,960 То је функција дефиниција која одређује да ли је прошао по референци. 677 01:01:53,960 --> 01:01:59,450 И гледа функцији дефинисања врсте или само гледа ово, 678 01:01:59,450 --> 01:02:02,820 потребно аргумент по референци. 679 01:02:02,820 --> 01:02:07,160 Дакле, без обзира на то да ли желите да га узме по референци, ипак узми по референци. 680 01:02:07,160 --> 01:02:10,200 Она мења низ на месту. 681 01:02:10,200 --> 01:02:17,400 Ово једноставно није дозвољено. Не смете да урадите. >> [Ученик] Ох, у реду. 682 01:02:17,400 --> 01:02:22,410 [Бовден] То се, некако ће да се линије по референци и мењати га. 683 01:02:22,410 --> 01:02:26,850 А опет, ако нисте хтели да урадите, можете да направите копију врсте. 684 01:02:26,850 --> 01:02:35,850 Чак иу том случају, копија није заправо копија линија. 685 01:02:35,850 --> 01:02:40,620 То само указује на исту ствар све док се први пут добија модификовани, 686 01:02:40,620 --> 01:02:44,430 где је први пут ће се мењати у функцији сортирања, 687 01:02:44,430 --> 01:02:50,940 где, јер је копија-на-писати, сад копија копије ће бити направљен. 688 01:02:57,500 --> 01:03:04,250 Такође можете да урадите ово. То је друго место можете видети амперсанд. 689 01:03:04,250 --> 01:03:07,190 Видиш у фореацх петље, можете га видети у функцији декларацијама, 690 01:03:07,190 --> 01:03:10,040 а ви га видите када је само додељивања варијабли. 691 01:03:10,040 --> 01:03:12,350 Сада смо постигли ништа на овај начин 692 01:03:12,350 --> 01:03:15,600 јер копирање и линије су буквално иста ствар. 693 01:03:15,600 --> 01:03:19,940 Можете користити линије и копирање синоними. 694 01:03:19,940 --> 01:03:25,430 То можете да урадите унсет ($ копију), и да не унсет линије, 695 01:03:25,430 --> 01:03:29,120 само изгубити референцу на исту ствар. 696 01:03:29,120 --> 01:03:33,440 Дакле, од овог тренутка, сада линије је једини начин да приступите линије. 697 01:03:36,450 --> 01:03:38,770 >> Питања? 698 01:03:41,000 --> 01:03:42,460 Да. 699 01:03:42,460 --> 01:03:45,880 [Ученик] Потпуно офф топиц, али не морате да затворите ПХП са - >> ти не. 700 01:03:45,880 --> 01:03:47,730 Ок. 701 01:03:47,730 --> 01:03:53,790 [Бовден] Ја бих ишао тако далеко да кажем да је лоша пракса да их затвори. 702 01:03:53,790 --> 01:03:57,580 То је вероватно претеривање, посебно у сценарију, 703 01:03:57,580 --> 01:04:03,740 али хајде да видимо шта ће се десити ако то урадим. 704 01:04:03,740 --> 01:04:08,890 То није ништа. Шта ако сам желео - [уздаси] 705 01:04:13,870 --> 01:04:16,960 Морам да прође аргумент. 706 01:04:19,000 --> 01:04:22,050 Пуцај. Звала сам је погрешно. 707 01:04:24,340 --> 01:04:28,310 Тако пхп.уникуе.пхп свађом. 708 01:04:28,310 --> 01:04:30,980 Сада не морате чак ни то. 709 01:04:34,520 --> 01:04:37,740 Ја ћу га донети исправну аргумент. 710 01:04:37,740 --> 01:04:42,050 Ова штампа шта год да је штампа. 711 01:04:45,260 --> 01:04:50,080 Ја штампање копија и копија не постоји. Тако линије. 712 01:04:53,650 --> 01:04:58,270 Он штампа све, а онда примети све ово смеће овде доле, 713 01:04:58,270 --> 01:05:06,690 јер у ПХП све што је изван ПХП тагова 714 01:05:06,690 --> 01:05:09,520 је само ће бити буквално штампа. 715 01:05:09,520 --> 01:05:18,050 Зато ХТМЛ, то је тако лепо да могу да урадим див бла, бла, бла класу или шта год, 716 01:05:18,050 --> 01:05:25,140 бла, бла, бла, а онда неки ПХП код и онда див завршетка. 717 01:05:25,140 --> 01:05:36,460 И сада штампа ово ћу добити леп див до врха, све да ПХП штампани, див на дну. 718 01:05:36,460 --> 01:05:43,510 Катастрофалан када се нешто овако деси, што је прилично уобичајено, 719 01:05:43,510 --> 01:05:47,930 само залутали нови ред на дну фајла. 720 01:05:47,930 --> 01:05:50,940 Ти не би помислио да би било да је велик посао 721 01:05:50,940 --> 01:05:58,660 док не узме у обзир чињеница да је са претраживача - 722 01:05:58,660 --> 01:06:03,880 >> Како преусмерава рад или практично било заглавља рад, 723 01:06:03,880 --> 01:06:07,980 када правите своју везу на веб сајту и поново шаље све ове заглавља и ствари 724 01:06:07,980 --> 01:06:12,020 као одговор 200 или одговора преусмеравање или шта год, 725 01:06:12,020 --> 01:06:18,230 Заглавља су важеће само док први бајт података је послат. 726 01:06:18,230 --> 01:06:23,140 Можете преусмерити на хиљаде пута, али чим први бајт података је послат 727 01:06:23,140 --> 01:06:26,120 Ниси ти требао поново да преусмери. 728 01:06:26,120 --> 01:06:31,860 >> Ако имате залутали нови ред на дну датотеке 729 01:06:31,860 --> 01:06:37,260 и рецимо да користите ову функцију, а затим желите да - 730 01:06:41,580 --> 01:06:52,870 Рецимо да је то још један фајл који је индек.пхп и рекуире_онце нешто - 731 01:06:52,870 --> 01:06:56,920 Ја не могу да смислим добар пример тога. 732 01:06:56,920 --> 01:07:04,740 Питање се дешава када се та линија на дну добија одјек. 733 01:07:04,740 --> 01:07:08,660 Не желим ништа да још није одјекивао. 734 01:07:10,820 --> 01:07:15,700 Иако нисте намеравали на шта добијање одјекнула, нешто није се поновио 735 01:07:15,700 --> 01:07:17,990 па сад ти не би требало да пошаље било још заглавља 736 01:07:17,990 --> 01:07:20,030 и ти ћеш добити жалбе. 737 01:07:22,170 --> 01:07:24,420 Ви једноставно не треба те ознаке ријеч. 738 01:07:24,420 --> 01:07:27,420 Ако планирате да радиш нешто са ХТМЛ - 739 01:07:27,420 --> 01:07:30,490 и то је сасвим разумно да се уради овде див год 740 01:07:30,490 --> 01:07:39,450 и онда у овом тренутку можете или не можете да их укључите. 741 01:07:39,450 --> 01:07:41,590 То није ни битно. 742 01:07:41,590 --> 01:07:45,450 Али у ПХП скрипти је ретко да га затворили. 743 01:07:45,450 --> 01:07:50,400 Када је све ПХП, апсолутно све, 744 01:07:50,400 --> 01:07:55,460 ти стварно не треба га затворити / не треба га затворити. 745 01:08:02,030 --> 01:08:05,720 >> Суочавање са стринговима је много лепше него у Ц. 746 01:08:05,720 --> 01:08:09,470 У ПХП можете да наведете стринг са једним или двоструким наводницима. 747 01:08:09,470 --> 01:08:12,820 Са апострофа не можете да користите "Бекство" секвенце. 748 01:08:12,820 --> 01:08:17,640 Стално побегне, бла, бла, бла. 749 01:08:19,920 --> 01:08:24,010 Дакле принтф је веома ретка у ПХП. 750 01:08:24,010 --> 01:08:32,290 Претпостављам да бих принтф употребити ако сам желео да урадим овакве ствари - у псет 5 сте користили спринтф или шта год. 751 01:08:32,290 --> 01:08:36,060 Али ви желите да урадите 001.јпг 002.јпг и. 752 01:08:36,060 --> 01:08:40,300 Дакле, за такве ствари где сам заправо желе да обликујете текст бих принтф користи. 753 01:08:40,300 --> 01:08:44,689 Али иначе сам користио би спајање жица. 754 01:08:44,689 --> 01:08:47,000 Ја заиста никада не користим принтф. 755 01:08:49,229 --> 01:09:00,170 Ми само диференцирање детаља између апострофа и двоструких наводника. 756 01:09:00,170 --> 01:09:07,490 Највећа разлика је у томе што апострофе, то ће бити буквално штампа. 757 01:09:07,490 --> 01:09:15,390 Нема инт тип података у ПХП, за разлику од Ц, тако да је ово еквивалентно томе. 758 01:09:15,390 --> 01:09:17,970 Они су обе жице. 759 01:09:17,970 --> 01:09:29,180 И лепа ствар о појединачним наводницима жицама је да сам могао да кажем 'хелло свет!' бла, бла, бла, 760 01:09:29,180 --> 01:09:33,340 $ $ Вооо. 761 01:09:33,340 --> 01:09:38,260 Шта се дешава када одштампате је да ће га штампати буквално. 762 01:09:38,260 --> 01:09:40,680 Идемо ослободити све наше ствари. 763 01:09:40,680 --> 01:09:44,700 Дакле ецхо $ стр1; 764 01:09:48,569 --> 01:09:56,570 Буквално штампан све те ствари: Долар знакова, 765 01:09:56,570 --> 01:09:58,770 бацксласх н, коју би помислио би неулинес - 766 01:09:58,770 --> 01:10:01,500 све те ствари које су буквално штампа. 767 01:10:01,500 --> 01:10:05,650 Једина ствар коју треба да побегне су самохране цитати 768 01:10:05,650 --> 01:10:09,470 јер у супротном би било да је то затварања апострофе. 769 01:10:09,470 --> 01:10:15,050 Двоструки наводници, потпуно различити. 770 01:10:20,300 --> 01:10:25,870 Ми смо већ видели истицање синтаксе нас цлуинг на оно што је о томе да иде страшно лоше. 771 01:10:25,870 --> 01:10:36,190 пхп.уникуе. Ундефинед вариабле: Вооо јер се тумачи као променљиву зове Вооо. 772 01:10:36,190 --> 01:10:42,400 Двоструки наводници омогућавају да убаците променљиве у - 773 01:10:42,400 --> 01:10:52,730 Рецимо $ име = "Роб"; 774 01:10:52,730 --> 01:10:58,020 Дакле ецхо "Здраво, моје име је $ име!"; 775 01:10:58,020 --> 01:11:09,260 Он препознаје као променљиву. 776 01:11:09,260 --> 01:11:21,210 Када трчим да - и ја ћу убацити нови ред - Здраво, моје име је Роб! и здраво свет! 777 01:11:21,210 --> 01:11:24,910 То је зато што никада нисам уклонио штампање Вооо горе. 778 01:11:24,910 --> 01:11:30,020 Ту је 1 корак даље можете да урадите. 779 01:11:30,020 --> 01:11:39,250 $ Низ = [1, 2, 3]; 780 01:11:39,250 --> 01:11:43,270 Шта ако желим да одштампате прву индекс низа? 781 01:11:43,270 --> 01:11:45,150 Знаш $ низ [0]. 782 01:11:45,150 --> 01:11:49,280 На истицање синтаксе је траг. Шта ће ово да урадим? 783 01:11:52,320 --> 01:11:54,510 пхп.уникуе. 784 01:11:54,510 --> 01:11:59,860 Здраво, моје име је 1! што није оно што сам желео. 785 01:11:59,860 --> 01:12:05,050 Истицање синтаксе лагали мене. 786 01:12:05,050 --> 01:12:13,020 Хајде да покушамо '"-> 1,' б '-> 2. 787 01:12:18,450 --> 01:12:21,440 Тако сам морао да га напишем. 788 01:12:26,350 --> 01:12:32,160 Неочекивана један цитат (Т_ЕНЦАПСЕД бла, бла, бла, бла, бла). 789 01:12:32,160 --> 01:12:41,780 Идеја је да то није признавање ово као део низа. 790 01:12:41,780 --> 01:12:46,620 Није признајући то као низ индексирана писмом а. 791 01:12:46,620 --> 01:12:49,870 Желите да урадите окружен заграда, 792 01:12:49,870 --> 01:12:54,730 а сада оно што је у овом коврџавом браце биће интерполирано, 793 01:12:54,730 --> 01:13:00,340 што је реч коју користимо за магично убацивање ове променљиве у правим местима. 794 01:13:00,340 --> 01:13:04,280 Сада радим ово, пхп.уникуе и Здраво, моје име је 1! као што се очекује 795 01:13:04,280 --> 01:13:07,720 или Здраво, моје име је Роб! 796 01:13:14,110 --> 01:13:23,130 Једна ствар која је некако лепо о апострофа је да - 797 01:13:23,130 --> 01:13:28,480 Има неки трошак за интерполацијом. 798 01:13:30,520 --> 01:13:35,100 Ако користите дупле наводнике, преводилац мора да иде преко ове ниске, 799 01:13:35,100 --> 01:13:41,500 уверивши се да: "О, ево променљива Сада морам да одем ту променљиву и убаците га овде.". 800 01:13:41,500 --> 01:13:48,930 Чак и ако не користите никакве променљиве 801 01:13:48,930 --> 01:13:52,220 Ништа унутар ове наводнике треба интерполирано, 802 01:13:52,220 --> 01:13:56,800 али ће ипак бити спорији јер је потребно да се иде преко дупле наводнике 803 01:13:56,800 --> 01:14:00,130 у потрази за ствари које треба да се интерполира. 804 01:14:00,130 --> 01:14:05,360 Дакле, апострофе може бити мало брже ако ништа треба да се интерполирано, 805 01:14:05,360 --> 01:14:15,650 и ја имају тенденцију да користе чак и апострофе за "Здраво, моје име је '. $ Низ [''] свеједно. 806 01:14:15,650 --> 01:14:20,430 То ће бити еквивалентна ономе што смо раније имали. 807 01:14:24,840 --> 01:14:28,440 Али то је ствар личног опредељења. 808 01:14:28,440 --> 01:14:34,750 Ако користите ПХП, вероватно вам није стало до брзине разлике. 809 01:14:34,750 --> 01:14:39,480 Нема довољно да их размишљају до почетка. 810 01:14:39,480 --> 01:14:43,030 >> Свака коначна питања? 811 01:14:47,430 --> 01:14:51,710 >> Ми заправо нису ни добили кроз све то, али ова ствар је досадно. 812 01:14:51,710 --> 01:14:59,080 Последња ствар која је врста лепо у ПХП је када имате посла са ХТМЛ, 813 01:14:59,080 --> 01:15:06,450 ћете га користити мало, тако да је лепо приручни синтаксу за штампање променљиву. 814 01:15:32,400 --> 01:15:36,730 Без стављања ПХП овде, ово се зове кратке цртице. 815 01:15:36,730 --> 01:15:44,330 Званично од ПХП 5,4, ово је застарела. 816 01:15:44,330 --> 01:15:48,640 Препоручује се да ставите пхп. 817 01:15:48,640 --> 01:15:55,770 Ово је још подржава, тако кратке ознаке са <= још увек савршено у реду. 818 01:15:55,770 --> 01:16:02,480 То је по дефаулту подржан, тако да можете да користите као желите, и они су прилично згодно. 819 01:16:02,480 --> 01:16:05,700 >> Има ли питања? 820 01:16:07,780 --> 01:16:09,270 У реду. 821 01:16:10,840 --> 01:16:13,800 >> Останите отмено, Сан Дијего. 822 01:16:13,800 --> 01:16:16,070 [Цхуцклес] 823 01:16:18,620 --> 01:16:22,660 Ћао. [Смех] 824 01:16:24,350 --> 01:16:28,470 [Аплауз] [смех] 825 01:22:46,460 --> 01:22:49,460 >> [ЦС50.ТВ]