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 [Ова е CS50. - CS50.TV] 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 Многу луѓе мислат дека ова pset не е секогаш тешко, но тоа е многу долго. 8 00:00:31,950 --> 00:00:37,070 На pset спецификации се зема еден час да ја прочитате. 9 00:00:40,530 --> 00:00:45,730 Ние ви даде многу на SQL најверојатно ќе треба да се користи. 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 Тоа е последната pset. О, мојот Бог. 13 00:00:59,710 --> 00:01:05,400 Обично таму е да го вклучите Javascript еден по ова, но календар промени работите 14 00:01:05,400 --> 00:01:09,560 го прави сето 1 недела пократки, а ние веќе не имаат pset вклучите Javascript-. 15 00:01:09,560 --> 00:01:12,310 Не знам како тоа влијае на тоа дали го вклучите Javascript-се случува да се појави на испит 16 00:01:12,310 --> 00:01:15,510 или Квиз 1. 17 00:01:15,510 --> 00:01:22,260 Претпоставувам дека ќе биде нешто како што треба да знаете високо ниво нешта за JavaScript, 18 00:01:22,260 --> 00:01:26,460 но јас се сомневам ние само ќе ви даде право JavaScript код 19 00:01:26,460 --> 00:01:28,720 бидејќи не сте имале pset во неа. 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 За разлика од C, PHP е "динамично внесе" јазик. Што значи ова, ви се молам? 24 00:01:50,220 --> 00:01:53,830 Па, да речеме збогум на сите оние знак, плови, int, и други клучни зборови треба да користите 25 00:01:53,830 --> 00:01:56,190 кога прогласување променливи и функции во C. 26 00:01:56,190 --> 00:02:00,420 Во PHP, тип на променлива се дефинира од вредноста што тоа е во моментов држи. 27 00:02:00,420 --> 00:02:04,990 Па пред да напишеш овој код во датотека наречена dynamic.php, 28 00:02:04,990 --> 00:02:12,670 PHP е динамички отчукува. Тоа е вистина. 29 00:02:12,670 --> 00:02:17,590 Јас не се согласувам со фактот дека тоа значи дека ние велиме збогум на знак, плови, int, 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 Претпоставувам дека има и други намени за тоа, но во C, кога ќе се изјасни за статичен променлива, 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 Во C ако се обидете да додадете стринг и број, кога ќе го собере, 39 00:03:04,350 --> 00:03:11,000 тоа нема да се жалат поради тоа што се случува да се каже дека не можете да додадете int и покажувач. 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 Постојат јазици каде што не треба да се каже знак, плови, int, и сите тие работи, 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, OCaml, никогаш не треба да користите било кој од овие видови, 48 00:03:49,000 --> 00:03:58,700 но сепак ќе во компајлирате време велат дека не може да го направи тоа затоа што сте мешање на int и низа. 49 00:03:58,700 --> 00:04:05,650 Динамички внесе само значи дека некаде во текот кандидира време ви се случува да се добие тужба. 50 00:04:05,650 --> 00:04:13,430 Ако, исто така, се користи Јава пред, воопшто, речиси секој C-тип јазик 51 00:04:13,430 --> 00:04:20,070 ќе биде статички отчукува, па C, C + +, Java, сите тие се генерално статички отчукува. 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 Внесете тоа во датотека наречена dynamic.php. 65 00:05:10,130 --> 00:05:12,380 Dynamic.php. 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 тогаш ние ќе треба да го испечатите и% s - 69 00:05:27,930 --> 00:05:32,830 О, ние сме печатење на типот на тоа, па gettype се случува да се врати од типот на променлива. 70 00:05:32,830 --> 00:05:35,720 Ние сме само печатење видот одново и одново. 71 00:05:35,720 --> 00:05:39,440 Ние само php.dynamic.php. 72 00:05:39,440 --> 00:05:45,920 Ќе видиме дека таа се менува од број да стринг за да Булова како што ние одиме преку. 73 00:05:45,920 --> 00:05:54,590 Во C не постои Булова тип на податоци, не постои низа тип на податок. 74 00:05:54,590 --> 00:06:00,500 Има char * и Булова само има тенденција да биде int или знак или нешто. 75 00:06:00,500 --> 00:06:05,690 Во PHP овие видови не постојат, и тоа е една од големите предности на PHP над C - 76 00:06:05,690 --> 00:06:13,290 дека низа операции се бескрајно полесно во PHP од В тие само работат. 77 00:06:13,290 --> 00:06:18,290 >> Значи ние се врати тука. 78 00:06:18,290 --> 00:06:21,260 Ние се стрча dynamic.php. 79 00:06:21,260 --> 00:06:26,710 Ова му кажува на PHP преведувач, наречен PHP, да се кандидира на PHP код во dynamic.php. 80 00:06:26,710 --> 00:06:30,250 Ако имате било какви грешки во датотека, преведувач ќе ти кажам! 81 00:06:30,250 --> 00:06:39,110 Преведувач, ова е уште една голема разлика меѓу PHP и C. 82 00:06:39,110 --> 00:06:48,200 Во C мора да ги собере нешто и потоа да го извршите тоа состави датотека. 83 00:06:48,200 --> 00:06:50,490 Во PHP никогаш не сте ги собере ништо. 84 00:06:50,490 --> 00:06:57,200 Па преведувач PHP е во основа, само читањето на оваа линија по линија. 85 00:06:57,200 --> 00:07:02,900 Тоа хитови var = 7 тогаш тоа хитови printf тогаш тоа хитови var тогаш тоа хитови printf и така натаму. 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 Тоа значи дека многу од оптимизации што ги добиваме во C, 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 Во PHP вие нема да добиете дека предност 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 Ти дефинитивно не можеше да го стори тоа во C! 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 Ние имаме bools, цели броеви, лебдечки точки, стрингови, низи, предмети, 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 Потоа, тука е NULL. NULL е специјален тип. 109 00:08:43,740 --> 00:08:47,140 За разлика од C каде NULL е само покажувач со адреса 0, 110 00:08:47,140 --> 00:08:54,930 во PHP, NULL е свој тип каде што важи само нешто од тој тип е NULL. 111 00:08:57,560 --> 00:09:00,670 Ова е многу повеќе корисни за грешка проверка. 112 00:09:00,670 --> 00:09:04,310 Во C каде што имавме овој проблем каде што ако се врати NULL, 113 00:09:04,310 --> 00:09:08,660 дали тоа значи дека се враќа е нулти покажувачот или со користење NULL да означува грешка 114 00:09:08,660 --> 00:09:12,380 или сите од таа конфузија имавме во еден момент. 115 00:09:12,380 --> 00:09:18,440 Еве, враќајќи NULL обично значи грешка. 116 00:09:20,860 --> 00:09:27,300 А многу работи, исто така, се врати лажни за грешка. 117 00:09:27,300 --> 00:09:33,140 Но поентата е NULL тип, единственото нешто на NULL тип е NULL. 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 Забележете дека оваа низа не е како низа C 126 00:10:14,500 --> 00:10:19,610 каде што треба индекс 0, има некои вредност, индексот 1 има некои вредност. 127 00:10:19,610 --> 00:10:26,320 Тука индекси се a, b и c и вредности се 1, 2, и 3. 128 00:10:26,320 --> 00:10:33,980 Во PHP постои никаква разлика помеѓу асоцијативна низа и само редовни низа 129 00:10:33,980 --> 00:10:36,740 како што би помислил на тоа во C. 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 За оваа причина, PHP може да биде прилично лошо за навистина брзо код / ​​компаративни работи 133 00:11:00,410 --> 00:11:07,930 бидејќи во C, кога сте со користење низа знаете дека пристапот член е константна време. 134 00:11:07,930 --> 00:11:11,860 Во PHP пристап до член е кој знае колку време? 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 Па тогаш fopen. 139 00:11:28,550 --> 00:11:36,420 Мислам дека тука нека е само PHP прирачник fopen да се погледне на враќање тип. 140 00:11:36,420 --> 00:11:41,260 Гледаме тука можете да барате до доста било функција во PHP прирачник 141 00:11:41,260 --> 00:11:47,540 и ова е вид на човек страница на PHP. 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 Идејата за ресурс, во C сте вид на доби Датотека * или што; 145 00:12:04,110 --> 00:12:07,200 во PHP ресурс е вашата датотека *. 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 И, конечно, она што е од типот на NULL? >> [Студент] NULL. 149 00:12:26,520 --> 00:12:30,650 Да. Значи единственото нешто што е NULL е NULL. 150 00:12:30,650 --> 00:12:33,480 NULL е NULL. 151 00:12:35,490 --> 00:12:41,170 >> Една карактеристика на тип систем PHP е (за подобро или за полошо) е во неговата способност да жонглирам типови. 152 00:12:41,170 --> 00:12:44,390 Кога пишувате една линија на PHP код, кои ги комбинира вредностите на различни видови, 153 00:12:44,390 --> 00:12:46,670 PHP ќе се обиде да го направи разумен нешто. 154 00:12:46,670 --> 00:12:48,920 Пробајте секоја од следните линии на PHP код. Што се испечати? 155 00:12:48,920 --> 00:12:51,000 Тоа е она што сте очекувале? Зошто да или зошто не? 156 00:12:51,000 --> 00:12:58,600 Овој факт за PHP е она што го прави она што го нарекуваме слабо внесе. 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 Во C дека не би сакал да работиш. 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 ниедна грешка checkings. 167 00:13:44,680 --> 00:13:50,740 Во Python тоа се случува да се изврши ова и ќе видите ("1" + 2); 168 00:13:50,740 --> 00:13:55,920 и ова нема да успее, бидејќи вели дека не може да додадете стринг и цел број. 169 00:13:55,920 --> 00:14:00,860 Во PHP, што е само како динамички отчукува, ова не ќе пропадне. 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 Друг малку трик за PHP е дека не треба да всушност ја запишам датотеката. 180 00:14:48,740 --> 00:14:52,790 Тоа го прави да ја извршите оваа команда на владата. 181 00:14:52,790 --> 00:14:57,710 Значи php-r, тогаш може да се фрли во командната тука: 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 затоа што PHP, за разлика од вклучите Javascript-и Java исто така, 191 00:16:08,080 --> 00:16:11,670 има посебен оператор за конкатенација. 192 00:16:11,670 --> 00:16:14,930 Конкатенација во PHP е точка. 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 Па не заборавајте конкатенација во PHP е точка. 198 00:16:46,240 --> 00:16:52,100 Други работи кои треба да се обидете: печати ("CS" + 50); 199 00:16:55,750 --> 00:17:03,610 Сум ви кажал дека не постои надеж за овој резултира со CS50 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 Го гледа низа, и се обложувам дека ако ги 123CS - 205 00:17:21,490 --> 00:17:29,640 Го гледа првата низа, се обидува да го прочитате целобројна од него или број од него. 206 00:17:29,640 --> 00:17:31,710 Во овој случај тоа гледа 123CS. 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 Во C тоа е веројатно чудно што може да се потпре на број truncation редовно, 223 00:19:08,460 --> 00:19:12,260 но во PHP не можете, бидејќи тоа автоматски ќе ја претвори во плови. 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 Од PHP е динамички отчукува и тоа нема да се направи секаков вид проверка за вас 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 Ако променливата е цел број, го чувам како int засекогаш. 238 00:20:26,980 --> 00:20:30,770 Ако сакате да се справи со цели броеви и стрингови, 239 00:20:30,770 --> 00:20:36,970 можете да го користите varsint - тоа е да го вклучите Javascript. 240 00:20:36,970 --> 00:20:42,520 Intval. Јас го направите ова цело време. PHP и го вклучите Javascript-се измеша сè. 241 00:20:42,520 --> 00:20:47,600 Значи intval се случува да се врати на целобројна вредност на променливата. 242 00:20:47,600 --> 00:20:56,550 Ако се поминува во "печати (intval ('123 ')); ќе добиете 123. 243 00:21:06,820 --> 00:21:15,850 Intval сама по себе не се случува да се направи проверка за нас дека тоа е исклучиво цел број. 244 00:21:15,850 --> 00:21:20,460 Во упатството PHP, постојат само толку многу функции на располагање, 245 00:21:20,460 --> 00:21:26,560 па тука мислам дека она што јас би го користите е is_numeric во прв план. 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 Значи is_numeric ('123df "), вие не би помислил на тоа како is_numeric. 249 00:21:44,020 --> 00:21:46,720 Во C вие ќе треба да iterate во текот на сите ликови 250 00:21:46,720 --> 00:21:50,410 и проверете дали секој карактер е цифра или whatever. 251 00:21:50,410 --> 00:21:53,850 Еве is_numeric се случува да го направи тоа за нас, 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 Се прашувам, ако го направам print_r. Не, тоа се уште не 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 E1'); 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 E1'); отпечатоци вистина. 273 00:23:49,120 --> 00:23:56,330 [Студент] Дали е тоа хексадецимален? >> Тоа не е хексадецимален, но тоа е блиску што тоа е како - 274 00:23:56,330 --> 00:24:01,060 1e1, научни нотација. 275 00:24:01,060 --> 00:24:07,950 Тој признава 1e1 како 1 * 10 ^ 1 или whatever. 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 и '10abc ');? Во ред. Значи тоа е вистина. 279 00:24:28,490 --> 00:24:35,940 Значи исто како кога си направил (10 + '10abc '); и тоа ќе биде 20, 280 00:24:35,940 --> 00:24:38,800 тука (10 == '10abc '); е вистина. 281 00:24:38,800 --> 00:24:45,350 Дури и полошо се работи како (лажни == NULL); е вистина 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 Ова е, всушност, израснати во pset спецификации 294 00:25:48,230 --> 00:25:52,000 каде што голем број на функции враќање - 295 00:25:52,000 --> 00:25:53,890 Прирачникот PHP е добро за ова. 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 >> Во PHP, низа тип е различно од она што сте навикнати да во C. 309 00:27:01,660 --> 00:27:06,650 Всушност, може да имате веќе забележав ова погоре кога виде дека ова е од типот низа. 310 00:27:06,650 --> 00:27:15,640 Заградата синтакса е ново од 5,4 PHP, кој е најновата верзија на PHP. 311 00:27:15,640 --> 00:27:36,960 Пред тоа секогаш мораше да пишуваат array ('A' -> 1, 'б' -> 2. 312 00:27:36,960 --> 00:27:41,160 Тоа беше конструктор за низа. 313 00:27:41,160 --> 00:27:45,950 Сега PHP конечно се дојде до убав синтаксата на само загради, 314 00:27:45,950 --> 00:27:50,900 која е толку многу подобро отколку низа. 315 00:27:50,900 --> 00:27:54,480 Но, со оглед на PHP 5.4 е најновата верзија, 316 00:27:54,480 --> 00:27:59,090 може да се судрите места кои дури и не мора PHP 5.3. 317 00:27:59,090 --> 00:28:08,220 Во текот на летото ние трчаше во ова прашање, каде PHP 5,3 е она што го имавме на апаратот, 318 00:28:08,220 --> 00:28:14,480 но на серверот дека ние распоредени сите наши одделение книга и го доставува и сите нешта да 319 00:28:14,480 --> 00:28:16,750 е PHP 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 и треба да одиме и да ја поправите сите наши работи кои не работат за PHP 5.4. 325 00:28:39,210 --> 00:28:42,320 За оваа класа, бидејќи апаратот има PHP 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 магија од низа конструктор синтакса, бидејќи тоа е околу бидејќи PHP е роден 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 Исто како и во C Како би индексот со квадратни загради како $ низа [0], $ низа [1], $ низа [2], 334 00:29:30,610 --> 00:29:36,320 сте индексирање на ист начин, ако се случи да имате индекси се стрингови. 335 00:29:36,320 --> 00:29:40,440 Значи $ низа ['A'] и $ низа ['б']. 336 00:29:40,440 --> 00:29:47,410 $ Низа [b]. Зошто ова би било погрешно? 337 00:29:52,490 --> 00:29:59,870 Тоа веројатно ќе генерираат предупредување, но се уште работат. PHP има тенденција да се направи тоа. 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 дефинираат б да биде "Hello World". 343 00:30:20,180 --> 00:30:28,740 Па сега б би можело да биде постојана и $ низа [b], всушност, ќе се прави "Hello World". 344 00:30:28,740 --> 00:30:32,380 Мислам дека во овој момент, или барем нашата поставувања за PHP, 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 >> Начинот на кој се провери да се види дали има всушност е таква индекс е isset. 349 00:30:49,290 --> 00:30:54,690 Значи isset ($ низа ['Hello World']) ќе се врати лажни. 350 00:30:54,690 --> 00:30:59,160 isset ($ низа ['б']) ќе се вратат вистина. 351 00:31:06,830 --> 00:31:09,880 Можете да се меша овие syntaxes. 352 00:31:15,060 --> 00:31:22,440 Јас сум прилично сигурни дека она што оваа низа ќе заврши се е - Можеме да го пробате. 353 00:31:43,290 --> 00:31:45,700 О, ми треба PHPWord. 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 Значи print_r е печати рекурзивен. Тоа ќе печати целата низа. 362 00:32:28,030 --> 00:32:32,700 Тоа ќе печати subarrays на низата дали имало било. 363 00:32:32,700 --> 00:32:36,630 Значи print_r ($ низа); php.test.php. 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 PHP не се разликува помеѓу стринг индекси и број индекси, 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 Моја претпоставка за тоа што PHP не - и мислам дека сум го видел ова пред - 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 Низи PHP не се само како вашиот редовни хаш табелата. 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 Но овде inserted 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 Сакам само да биде како низа C каде оди од 0 до должина - 1 407 00:36:26,860 --> 00:36:30,810 и можам да iterate над неа како таков. 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 Ова е уште еден лавиринт на PHP. 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 Во PHP е брои. 421 00:37:32,820 --> 00:37:36,160 Значи брои ($ низа); $ i + +) 422 00:37:36,160 --> 00:37:42,950 Ајде само печати ($ низа [$ i]); 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 Ова е од причина што, во најголем дел, никогаш не треба да iterate преку низа допаѓа ова. 426 00:38:03,020 --> 00:38:07,110 Тоа би можело да биде претерување, но никогаш не треба да iterate преку низа вака 427 00:38:07,110 --> 00:38:19,410 затоа што PHP обезбедува на своите foreach синтакса каде foreach ($ низа како $ точка). 428 00:38:19,410 --> 00:38:31,830 Сега ако ние печати ($ содржина); - we'll се дискутира за тоа во вториот - кој работи совршено добро. 429 00:38:31,830 --> 00:38:38,960 Начинот на кој foreach работи е првиот аргумент е низа која сте процесирањето завршена. 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 Работите се навистина чудно кога ќе се направи нешто како foreach. 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 Значи печати. PHP_EOL. 442 00:39:57,480 --> 00:40:03,580 PHP_EOL е само линија, но тоа е технички повеќе преносни 443 00:40:03,580 --> 00:40:08,890 од новите редови во Windows е различен од новите редови на Mac и UNIX. 444 00:40:08,890 --> 00:40:18,040 На Windows линија е \ r \ n, додека секаде на друго место тоа се стреми само да бидат \ n. 445 00:40:18,040 --> 00:40:25,150 PHP_EOL е конфигуриран така што го користи без оглед на линија на вашиот систем е. 446 00:40:25,150 --> 00:40:29,310 Значи печати тоа. Да не print_r ($ низа) на крајот. 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 Не земајте мојот збор за тоа, но тоа изгледа како foreach креира копија на низата 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 Има уште една синтакса за foreach петелки 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 Ова е неинтересен тука, но ако ние одиме назад кон нашето изворно случај на 'A' -> 1, 461 00:42:01,610 --> 00:42:06,090 "B" -> 1, 462 00:42:06,090 --> 00:42:14,470 тука ако ние само iterate за секоја низа како точка, точка ќе биде 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 >> Дополнителна работа што можеме да направиме во foreach петелки е може да се види оваа синтакса. 468 00:42:47,030 --> 00:42:54,770 Ampersands пред променлива имиња имаат тенденција да бидат како PHP прави референци. 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 Ајде да го направите $ точка + +, а тоа се уште постои во PHP. Се уште можете да направите + +. 474 00:43:28,800 --> 00:43:38,260 php.test.php. Морам да го испечатите. print_r ($ низа); 475 00:43:38,260 --> 00:43:42,730 Ние печати 2, 11. 476 00:43:42,730 --> 00:43:49,560 Ако имав само направено foreach ($ низа како $ точка) тогаш точка ќе биде вредност 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 Тогаш ние print_r ($ низа), и ајде да видиме дека ова е само 1, 10. 481 00:44:06,670 --> 00:44:09,070 Па прираст ние го сторивме беше изгубена. 482 00:44:09,070 --> 00:44:13,410 Но foreach ($ низа како и $ точка) 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 Во суштина, исто така можете да направите $ k -> $ точка и што можете да направите $ низа [$ k] + +; 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 Но, ако ние ги користиме k, која е нашата клуч, тогаш можеме да само индекс во нашата низа користење на тој клуч 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 Вие не сакате да мора да пишуваат $ низа [$ k] + +, 494 00:45:16,020 --> 00:45:27,890 само сакав да напишам $ точка + +, но се 'уште сака да се каже ако ($ K ===' а ') 495 00:45:27,890 --> 00:45:30,620 тогаш прираст точка, а потоа печати нашите низа. 496 00:45:30,620 --> 00:45:36,290 Па сега што очекуваме print_r да направам? Кои вредности треба да бидат отпечатени? 497 00:45:36,290 --> 00:45:43,770 [Студент] 2 и 10. >> [Бауден] Само ако клучот е "а" ние всушност печати тоа. 498 00:45:51,940 --> 00:45:55,670 >> Најверојатно многу ретко, ако некогаш, ќе треба да се дефинираат функции во PHP, 499 00:45:55,670 --> 00:46:03,370 но можеби ќе видите нешто слично, каде што се дефинира функција како функција сеедно. 500 00:46:03,370 --> 00:46:09,900 Обично ќе каже ($ foo, $ лента), а потоа се дефинира да биде сеедно. 501 00:46:09,900 --> 00:46:17,580 Но, ако го направам тоа, тогаш тоа значи дека она што го нарекува она, 502 00:46:17,580 --> 00:46:25,110 она што го нарекува baz, така што првиот аргумент проследен до baz може да се промени. 503 00:46:25,110 --> 00:46:38,100 Ајде да го направите $ foo + +; 504 00:46:38,100 --> 00:46:48,020 и во внатрешноста на тука ајде да направиме baz ($ содржина); 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 Сега содржина е пратена како копија на baz. 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 >> PHP е обично прилично паметни за тоа. 523 00:48:03,830 --> 00:48:06,570 Можеби мислите Сакам да помине со повикување - 524 00:48:06,570 --> 00:48:09,560 Ова беше всушност прашање на еден од psets. 525 00:48:09,560 --> 00:48:14,480 Тоа беше questions.txt нешто каде што рече, 526 00:48:14,480 --> 00:48:19,280 Зошто можеби ќе сакате да го помине овој struct со повикување? 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 А struct може да биде произволно големи, и кога ќе стигнете на struct како аргумент 530 00:48:32,920 --> 00:48:36,800 тоа треба да го копирате целиот тој struct да го помине на функција, 531 00:48:36,800 --> 00:48:40,410 а ако само го положат struct со упатување 532 00:48:40,410 --> 00:48:46,530 тогаш тоа само треба да го копирате 4-бајт адреса како аргумент на функцијата. 533 00:48:48,520 --> 00:48:52,320 PHP е малку попаметен од тоа. 534 00:48:52,320 --> 00:49:00,650 Ако имам некоја функција и јас помине да го низа од 1000 работи, 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 Ако внатрешноста на оваа функција никогаш всушност модифицира foo, 538 00:49:15,940 --> 00:49:22,660 па ако ($ foo === "hello") враќање вистина;. 539 00:49:22,660 --> 00:49:26,460 Забележете ние никогаш всушност изменета аргумент во внатрешноста на оваа функција, 540 00:49:26,460 --> 00:49:30,010 што значи дека она што беше донесен како никогаш foo треба да бидат копирани 541 00:49:30,010 --> 00:49:32,100 бидејќи тоа не е тоа менување. 542 00:49:32,100 --> 00:49:39,240 Па начинот на PHP дела е аргументи секогаш се донесени од страна на референтни 543 00:49:39,240 --> 00:49:42,170 додека вие всушност се обидуваат да го менувате. 544 00:49:42,170 --> 00:49:51,160 Сега ако кажам $ foo + +, сега тој ќе направи копија на оригиналот foo и менувате копија. 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 елемент од 1000 ќе треба да се промени? 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 Всушност, она што мислам е да се замисли имавме низа која изгледа вака: $ array2 = [ 559 00:51:00,020 --> 00:51:11,000 Потоа "на" индекс е низа од [1 2 3 4], а индексот "b" е низа од сеедно. 560 00:51:11,000 --> 00:51:15,380 Ми треба запирки помеѓу сите нив. Замислете има запирки. 561 00:51:15,380 --> 00:51:21,210 Потоа "c" е вредноста 3. 562 00:51:24,210 --> 00:51:26,290 Во ред. 563 00:51:26,290 --> 00:51:33,440 Сега да речеме правиме $ baz ($ array2); 564 00:51:33,440 --> 00:51:36,540 каде baz не ја искористам оваа референца. 565 00:51:43,510 --> 00:51:47,370 Значи $ foo ['в'] + +; 566 00:51:47,370 --> 00:51:52,340 Ова е таков пример, каде што се поминува array2 како аргумент 567 00:51:52,340 --> 00:51:57,010 а потоа се модифицира одредена индекс на низата преку зголемување него. 568 00:51:57,010 --> 00:52:01,090 Јас искрено немам идеја што PHP е случува да се направи. 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 Ке iPad неа. 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 Сега дека ние сме го поминува во baz, ние сме промената ова. 577 00:52:58,590 --> 00:53:03,550 Ако PHP е паметен, тоа само може да го направи - 578 00:53:11,850 --> 00:53:18,230 Имаме уште да го копирате некои меморија, но ако имало овие огромни вгнездени subarrays 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 Ова е исто така прилично голема предност на C над PHP. 582 00:53:36,690 --> 00:53:40,320 >> PHP го прави животот многу полесно за многу нешта, 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 Во C вие не мора да се грижите за овие работи. 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 Отвори датотека наречена unique.php и во него се напише програма PHP 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 Но оваа програма PHP ние ќе да се јавите на сценариото. 604 00:55:15,480 --> 00:55:23,830 Или ако ние го напишал во Python или Perl или Node.js или било која од тие работи, 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 Ние не се случува да се користи argv. Ајде само удар преку ова. 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 Всушност, argv ќе биде прилично тривијална да го користите. 612 00:56:03,730 --> 00:56:06,720 unique.php. 613 00:56:08,550 --> 00:56:13,750 Првото нешто што прво, ние сакаме да се провери ако се донесе 1 командната линија аргумент. 614 00:56:13,750 --> 00:56:20,900 Исто како што би очекувале argc и argv во C, ние се уште имаат оние во PHP. 615 00:56:20,900 --> 00:56:33,900 Значи, ако ($ argc! == 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 Ретко во PHP сте во оваа држава каде сме во - 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 Но во PHP тоа е дури и повеќе ретки дека ние сме во ова највисоко ниво. 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 >> Потоа она што сакате да го отворите сакаме да fopen. 632 00:57:44,000 --> 00:57:46,760 Аргументите се случува да изгледа прилично слични. 633 00:57:46,760 --> 00:57:51,600 Ние сакаме да fopen ($ avg [1], и ние сакаме да го отвори за читање. 634 00:57:51,600 --> 00:57:55,720 Што враќа ресурс кој ние ќе се јавите ѓ. 635 00:57:55,720 --> 00:58:02,180 Ова изгледа прилично слични на тоа како C го прави освен што не треба да се каже СЛИКА *. 636 00:58:02,180 --> 00:58:06,170 Наместо тоа, ние само велат $ ѓ. Во ред. 637 00:58:06,170 --> 00:58:17,190 Всушност, мислам дека ова дури ни дава помош за PHP функцијата се нарекува датотека. PHP датотеката. 638 00:58:17,190 --> 00:58:23,990 Што е ова се случува да направите е да прочитате целата датотека во низа. 639 00:58:23,990 --> 00:58:29,770 Вие дури и не треба да fopen неа. Тоа ќе го направи тоа за вас. 640 00:58:37,450 --> 00:58:43,700 Значи $ линии = датотека ($ avg [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 И сега можеме да ги испечатите или whatever. 645 00:58:58,080 --> 00:59:05,580 Веројатно најлесниот начин е foreach ($ линии како $ линија) echo $ линија; 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 php.unique.php. Јас би можеле да имаат Слободен нешто. 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 Океј, php.unique.php. И јас не ја помине аргумент, бидејќи јас немам датотека. 667 01:01:09,210 --> 01:01:13,560 Тоа е php.unique.php на test.php. 668 01:01:13,560 --> 01:01:19,080 Тука е test.php сите отпечатени во еден убав подредени ред. 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 Можете да ги види во foreach петелки, ти го гледаш во функција декларации, 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 [Студент] Сосема надвор од темата, но вие не треба да се затвори PHP со - >> Ти не. 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 Значи php.unique.php со аргумент. 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 бидејќи во PHP нешто што е надвор на PHP тагови 714 01:05:06,690 --> 01:05:09,520 е само ќе бидат испечатени буквално. 715 01:05:09,520 --> 01:05:18,050 Тоа е зошто HTML, тоа е толку убаво тоа што можам да направам div бла, бла, бла класа или што, 716 01:05:18,050 --> 01:05:25,140 бла, бла, бла, а потоа направи некои PHP код и потоа направете крајот div. 717 01:05:25,140 --> 01:05:36,460 И сега печатење оваа можам да добијам моите убави div до врвот, сè што PHP печатени, div на дното. 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 Да речеме дека тоа е уште еден фајл кој е index.php и require_once нешто - 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 Ако планирате да правите нешто со HTML - 739 01:07:27,420 --> 01:07:30,490 и тоа е совршено разумно да се направи овде div што 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 Но во PHP скрипти тоа е ретко да го затворите. 743 01:07:45,450 --> 01:07:50,400 Кога сè е PHP, апсолутно се, 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 Во PHP можете да наведете еден стринг со единечен или двојни наводници. 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 Значи printf е многу ретка во PHP. 750 01:08:24,010 --> 01:08:32,290 Претпоставувам дека ќе го користат printf ако сакав да направам еден вид на работа - во pset 5 ќе се користи sprintf или whatever. 751 01:08:32,290 --> 01:08:36,060 Но сакате да го направите 001.jpg и 002.jpg. 752 01:08:36,060 --> 01:08:40,300 Па за тој вид на работа, каде што всушност сакате да го форматирате текстот би го користите printf. 753 01:08:40,300 --> 01:08:44,689 Но инаку јас само ќе го користи низа конкатенација. 754 01:08:44,689 --> 01:08:47,000 Јас всушност никогаш не го користите printf. 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 Не постои знак тип на податоци во PHP, за разлика од C, па ова е еквивалент на ова. 758 01:09:15,390 --> 01:09:17,970 Тие се двете жици. 759 01:09:17,970 --> 01:09:29,180 И убаво нешто за еден цитат стрингови е можев да кажам "Hello World!" бла, бла, бла, 760 01:09:29,180 --> 01:09:33,340 $ $ Wooo. 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 Значи echo $ str1; 764 01:09:48,569 --> 01:09:56,570 Тоа буквално печатени на сите оние нешта: доларот знаци, 765 01:09:56,570 --> 01:09:58,770 обратна коса црта n, што ќе помислите ќе биде новите редови - 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 Ние веќе ја видите синтакса за нагласување ни cluing на она што е за да одат наопаку. 771 01:10:25,870 --> 01:10:36,190 php.unique. Недефиниран променлива wooo бидејќи ова се толкува како променлива наречена wooo. 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 Значи echo "Здраво, моето име е $ име!"; 775 01:10:58,020 --> 01:11:09,260 Тој признава ова како променлива. 776 01:11:09,260 --> 01:11:21,210 Кога ќе ја стартувате тоа - и јас ќе ја внесе нова линија - Здраво, моето име е Роб! и Hello World! 777 01:11:21,210 --> 01:11:24,910 Тоа е затоа што никогаш не сум отстранета печатење на wooo погоре. 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 php.unique. 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 Да се ​​обидеме 'A' -> 1, 'б' -> 2. 787 01:12:18,450 --> 01:12:21,440 Тоа е како јас ќе треба да го пишувам. 788 01:12:26,350 --> 01:12:32,160 Неочекувано еден цитат (T_ENCAPSED бла, бла, бла, бла, бла). 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 Сега тоа, php.unique и Здраво, моето име е 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 Има некои трошоци за interpolating. 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 Ако сте со користење на PHP, веројатно не им е грижа за брзината разлика. 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 Последно нешто што е вид на убаво во PHP е кога си имаш работа со HTML, 813 01:14:59,080 --> 01:15:06,450 ќе го користите малку, па убаво кратенка синтакса за печатење променлива. 814 01:15:32,400 --> 01:15:36,730 Без ставање PHP тука, ова се нарекува краток тагови. 815 01:15:36,730 --> 01:15:44,330 Официјално, како на PHP 5.4, ова е запоставена. 816 01:15:44,330 --> 01:15:48,640 Ви се препорачува да се стави PHP. 817 01:15:48,640 --> 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 [Chuckles] 823 01:16:18,620 --> 01:16:22,660 Bye. [Се смее] 824 01:16:24,350 --> 01:16:28,470 [Аплауз] [се смее] 825 01:22:46,460 --> 01:22:49,460 >> [CS50.TV]