1 00:00:00,000 --> 00:00:02,610 [Powered by Google Translate] [Section 8 - більш комфортною] 2 00:00:02,610 --> 00:00:04,910 [Rob Боуден - Гарвардський університет] 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 Зазвичай є наявність одного за це, але всі зміни календаря 14 00:01:05,400 --> 00:01:09,560 робить всі 1 тиждень коротше, і у нас більше немає PSET JavaScript. 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 Я думаю, це буде щось на зразок вам потрібно знати високому рівні речей про 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 Ну, скажімо до побачення всім тим, CHAR, FLOAT, 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 Я не згоден з тим, що це означає, що ми прощалися з CHAR, FLOAT, 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 Є мови, в яких ви не потребуєте сказати, CHAR, FLOAT, 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 Якщо ви також використовується Java, перш ніж, загалом, практично будь C-тип мови 51 00:04:13,430 --> 00:04:20,070 збирається бути статично типізований, так C, C + +, Java, всі ці, як правило, статично типізований. 52 00:04:20,070 --> 00:04:22,910 У Java при компіляції щось, і ви говорите, 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 Java також має деякі динамічні перевірки типів, що як тільки він потрапляє в цей рядок коду 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 Там в символ * і логічні просто, як правило, Int або символ або щось ще. 75 00:06:00,500 --> 00:06:05,690 У PHP ці типи дійсно існують, і це одне з найбільших переваг PHP на C - 76 00:06:05,690 --> 00:06:13,290 , Що операції з рядками набагато простіше, ніж в PHP C. Вони просто працюють. 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 Вона вражає змінна = 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 покажчика або за допомогою 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. 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 є? >> [Студент] Float. 122 00:09:59,000 --> 00:10:00,370 Так. 123 00:10:00,370 --> 00:10:06,290 Так то ось, як ви думаєте, типу цього? >> [Студент] Array. 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 Отже Еореп. 139 00:11:28,550 --> 00:11:36,420 Я думаю, що тут давайте просто PHP Керівництво Еореп дивитися на тип значення, що повертається. 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 ви начебто є FILE * або будь-який інший; 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 Python є ще одним прикладом мова, яка динамічно типізованих. 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 В 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-р, то ми можемо кинути в команду тут: 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 Інші речі, щоб спробувати: Print ("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), якби це було C, то що б це повернути? 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 це, напевно, дивно, що ви можете покластися на цілих усікання регулярно, 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 та інші змінні, трапляється, INT, а потім додати ці змінні разом. 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 вам доведеться перебрати всі символи 250 00:21:46,720 --> 00:21:50,410 і перевірити, якщо кожен символ цифрою або будь-який інший. 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 Але якщо я зміню, що F - палки! Я продовжую використанні подвійних лапках. 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 f1'); не друкує правда. ('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 або будь-який інший. 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 '== False); це правда. 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 Кронштейн синтаксис нового на PHP 5.4, який є новітньою версією PHP. 311 00:27:15,640 --> 00:27:36,960 До цього ви завжди були написати масив ('A' -> 1, 'B' -> 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], $ array [1], $ array [2], 334 00:29:30,610 --> 00:29:36,320 Ви індексу Точно так само, якщо вам трапиться, щоб ваші індекси бути рядками. 335 00:29:36,320 --> 00:29:40,440 Так масиві $ [''] і $ масив ['B']. 336 00:29:40,440 --> 00:29:47,410 $ Масив [б]. Чому це було б не так? 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 >> Те, як ви переконаєтеся в тому, насправді є такий індекс Ісеть. 349 00:30:49,290 --> 00:30:54,690 Так Ісеть ($ масив ['Hello World']) поверне брехня. 350 00:30:54,690 --> 00:30:59,160 Ісеть ($ масив ['B']) поверне істину. 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 О, мені потрібно 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 Це буде друкувати подмассіва масиву, чи є. 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 Масивах не просто як звичайного хеш-таблиці. 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 Я хочу, щоб просто бути як масив C, де вона йде від 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 Це ще одна складність 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 Давайте просто друк ($ масив [$ я]); 423 00:37:45,920 --> 00:37:48,820 Notice: Undefined зсув: 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 тому що PHP надає своїм Еогеасп синтаксис, де Еогеасп ($ масив $ пункту). 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 Все стає дійсно дивно, коли ви робите щось на зразок 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 новарядок \ г \ п, в той час як скрізь він прагне тільки, щоб бути \ п. 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 Не вірте мені на слово з цього питання, але, схоже, Еогеасп створює копію масиву 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] = "Hello"; 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 Амперсанди до імен змінних, як правило, як 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 Якби я тільки що зробив Еогеасп ($ масив $ пункту), то елемент буде значення 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 Але Еогеасп ($ масив, як і $ пункту) 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 все, що викликає Баз, так що перший аргумент, переданий Баз може бути змінений. 503 00:46:25,110 --> 00:46:38,100 Давайте зробимо $ FOO + +; 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 >> 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 Чому може ви хочете передати цю структуру за посиланням? 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 PHP трохи розумніші. 534 00:48:52,320 --> 00:49:00,650 Якщо у мене є деякі функції, і я пройти до нього масив з 1000 речей, 535 00:49:00,650 --> 00:49:03,990 це означає, що це буде мати, щоб скопіювати всі 1000 з цих речей 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 Так що, якщо ($ Foo === 'привіт') повертає істинне. 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], а індекс «б» являє собою масив завгодно. 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 Тепер припустимо, що ми робимо $ Баз ($ array2); 564 00:51:33,440 --> 00:51:36,540 де Баз не скористатися цим посиланням. 565 00:51:43,510 --> 00:51:47,370 Таким чином, $ Foo ['C'] + +; 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 Тепер, коли ми передаємо його до Баз, ми змінюємо це. 577 00:52:58,590 --> 00:53:03,550 Якщо PHP розумний, він може просто зробити - 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 Це також досить велику перевагу над 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 Я міг би з таким же успіхом написати програму C, що робить це, 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 Це також існує в C. 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 >> Тоді те, що ми хочемо відкрити ми хочемо Еореп. 632 00:57:44,000 --> 00:57:46,760 Аргументи буде виглядати дуже схоже. 633 00:57:46,760 --> 00:57:51,600 Ми хочемо, щоб Еореп ($ ARGV [1], і ми хочемо, щоб відкрити його для читання. 634 00:57:51,600 --> 00:57:55,720 Це повертає ресурс, який ми будемо називати ф. 635 00:57:55,720 --> 00:58:02,180 Це виглядає подібно тому, як це робить C, за винятком, ми не повинні сказати, FILE *. 636 00:58:02,180 --> 00:58:06,170 Замість цього ми просто скажемо, $ F. Добре. 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 Вам не потрібно навіть Еореп його. Він буде робити це за вас. 640 00:58:37,450 --> 00:58:43,700 Таким чином, $ ліній = файл ($ ARGV [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 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 Ви бачите це в петлі Еогеасп, ви бачите його в оголошенні функції, 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 код, а потім робити наприкінці справ. 717 01:05:25,140 --> 01:05:36,460 А тепер роздрукувати це я отримаю гарну справ нагорі, все, що PHP друкованої, розділ внизу. 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 і це цілком розумно робити тут все, що справ 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 >> Робота з рядками набагато приємніше, ніж у C. 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 або будь-який інший. 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 І хороша річ про одного рядка цитата Я міг би сказати 'привіт світ! " бла, бла, бла, 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 Так Ехо $ str1; 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 Ми вже бачимо, підсвічування синтаксису 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 Скажімо, $ Name = "Rob"; 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 Це тому, що я ніколи не знімав друку 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 Давайте спробуємо "а" -> 1, 'B' -> 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 Там-то вартість інтерполяції. 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 [Сміється] 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 >> [CS50.TV]