1 00:00:00,000 --> 00:00:02,610 [Powered by Google Translate] [Rozdział 8 - bardziej komfortowe] 2 00:00:02,610 --> 00:00:04,910 [Rob Bowden - Harvard University] 3 00:00:04,910 --> 00:00:07,070 [To jest CS50. - CS50.TV] 4 00:00:11,520 --> 00:00:14,160 >> Te notatki sekcja tygodnie będą dość krótki, 5 00:00:14,160 --> 00:00:19,070 więc jestem po prostu będzie rozmawiać, macie zamiar trzymać zadawanie pytań, 6 00:00:19,070 --> 00:00:22,720 i postaramy się wypełnić jak najwięcej czasu, jak to możliwe. 7 00:00:22,720 --> 00:00:31,950 Wiele osób uważa, że ​​to pset niekoniecznie trudne, ale jest to bardzo długo. 8 00:00:31,950 --> 00:00:37,070 Pset specyfikacja sama zajmuje godziny czytać. 9 00:00:40,530 --> 00:00:45,730 Dajemy Ci wiele SQL mogłoby ewentualnie potrzebne do użycia. 10 00:00:45,730 --> 00:00:50,520 Mamy Cię przez wiele go, więc nie powinno być tak źle. 11 00:00:50,520 --> 00:00:54,560 Czy ktoś zaczął lub skończył? 12 00:00:55,380 --> 00:00:59,710 To ostatni zbior. Och, mój Boże. 13 00:00:59,710 --> 00:01:05,400 Zazwyczaj istnieje JavaScript jeden po tym, ale rzeczy zmieniają kalendarza 14 00:01:05,400 --> 00:01:09,560 czyni wszystko 1 tydzień krótszy, a my nie będziemy mieli Pset JavaScript. 15 00:01:09,560 --> 00:01:12,310 Nie wiem, jak to wpływa czy JavaScript zamierza pojawić się na egzaminie 16 00:01:12,310 --> 00:01:15,510 lub Quiz 1. 17 00:01:15,510 --> 00:01:22,260 Wyobrażam sobie to będzie coś, co musisz wiedzieć wysokie rzeczy o JavaScripcie 18 00:01:22,260 --> 00:01:26,460 ale wątpię, że po prostu daje prosty kodu JavaScript 19 00:01:26,460 --> 00:01:28,720 ponieważ nie miał PSET w nim. 20 00:01:28,720 --> 00:01:33,000 Ale to będzie coś do przeglądu quizu w przyszłym tygodniu. 21 00:01:33,000 --> 00:01:36,320 >> Sekcja pytań. 22 00:01:36,320 --> 00:01:43,870 Wiele z tych rzeczy jest trochę źle sformułowane, ale omówimy dlaczego. 23 00:01:43,870 --> 00:01:50,220 W przeciwieństwie do C, PHP jest "dynamicznie wpisywanych" język. Co to znaczy, pytasz? 24 00:01:50,220 --> 00:01:53,830 Cóż, pożegnać się wszystkie te char, float, int, i słów kluczowych innych trzeba użyć 25 00:01:53,830 --> 00:01:56,190 podczas deklarowania zmiennych i funkcji w C. 26 00:01:56,190 --> 00:02:00,420 W PHP, Typ zmiennej jest określany przez wartość, która jest aktualnie dominującej. 27 00:02:00,420 --> 00:02:04,990 Więc zanim wpisać ten kod w pliku o nazwie dynamic.php, 28 00:02:04,990 --> 00:02:12,670 PHP jest dynamicznie wpisane. To prawda. 29 00:02:12,670 --> 00:02:17,590 Nie zgadzam się z tym, że to oznacza, że ​​pożegnanie char, float, int, 30 00:02:17,590 --> 00:02:20,620 i inne słowa kluczowe. 31 00:02:20,620 --> 00:02:25,510 Dokładna różnica między dynamicznie wpisywanych i ewentualnie, 32 00:02:25,510 --> 00:02:32,010 która jest statycznie wpisane, że dynamicznie typowanym, wszystkie z kontroli typu i rzeczy 33 00:02:32,010 --> 00:02:37,350 dzieje się w czasie pracy, natomiast statycznie wpisane zdarza się w czasie kompilacji. 34 00:02:37,350 --> 00:02:43,030 Słowo static w ogóle wydaje się oznaczać rzeczy czasie kompilacji. 35 00:02:43,030 --> 00:02:48,170 Myślę, że istnieją inne zastosowania dla niego, ale w C Kiedy deklarujesz zmienną statyczną, 36 00:02:48,170 --> 00:02:52,650 ich przechowywanie ma przydzielone w czasie kompilacji. 37 00:02:52,650 --> 00:02:59,260 Tutaj dynamicznie typowanym prostu oznacza, że ​​- 38 00:02:59,260 --> 00:03:04,350 W C jeśli spróbujesz dodać ciąg i liczbą całkowitą, gdy go skompilować, 39 00:03:04,350 --> 00:03:11,000 to będzie narzekać, bo to będzie, że nie można dodać int i wskaźnik. 40 00:03:11,000 --> 00:03:14,710 To nie tylko ważne działanie. 41 00:03:14,710 --> 00:03:21,170 To jest inna sprawa, że ​​my się do w sekund. 42 00:03:21,170 --> 00:03:24,860 Ale tego rodzaju kontroli, fakt, że skarży się w czasie kompilacji, 43 00:03:24,860 --> 00:03:29,220 jest statyczna kontrola typów. 44 00:03:29,220 --> 00:03:35,220 Istnieją języki, w którym nie trzeba mówić char, float, int, i wszystkie z tych rzeczy, 45 00:03:35,220 --> 00:03:40,940 ale język można powiedzieć, z kontekstu rzeczy, jakiego typu ma być, 46 00:03:40,940 --> 00:03:43,980 ale nadal statycznie wpisane. 47 00:03:43,980 --> 00:03:49,000 Więc jeśli wziąć 51, OCAML, nigdy nie będziesz musiał korzystać z tych typów, 48 00:03:49,000 --> 00:03:58,700 ale nadal będzie w czasie kompilacji, mówią, że nie może tego zrobić, ponieważ jesteś mieszanie int i ciąg. 49 00:03:58,700 --> 00:04:05,650 Dynamicznie typowanym oznacza tylko, że kiedyś w czasie pracy będziesz dostać skargę. 50 00:04:05,650 --> 00:04:13,430 Jeśli przed Java również, ogólnie, prawie każdego typu C Język 51 00:04:13,430 --> 00:04:20,070 zostanie statycznie wpisane, więc C, C + +, Java, wszystkie te są ogólnie statycznie wpisane. 52 00:04:20,070 --> 00:04:22,910 W Javie podczas kompilacji coś i mówisz 53 00:04:22,910 --> 00:04:26,670 string s równa się nowe coś, co nie jest ciągiem znaków, 54 00:04:26,670 --> 00:04:28,950 że będzie na co narzekać, ponieważ te typy po prostu nie pasują do siebie. 55 00:04:28,950 --> 00:04:31,180 To się dzieje na co narzekać w czasie kompilacji. 56 00:04:31,180 --> 00:04:36,750 Ale ma też pewne rzeczy, jak dynamiczny czas jeśli spróbujesz rzucić coś 57 00:04:36,750 --> 00:04:40,500 do typu, który jest bardziej szczegółowy niż obecnie rodzaju, 58 00:04:40,500 --> 00:04:45,610 nic nie może zrobić w czasie kompilacji, aby sprawdzić, czy odlew będzie sukces. 59 00:04:45,610 --> 00:04:51,130 Java ma także pewne dynamiczną kontrolę typu, że tak szybko, jak to robi do tej linii kodu 60 00:04:51,130 --> 00:04:54,130 kiedy jest faktycznie wykonywana, to będzie zrobić obsadę 61 00:04:54,130 --> 00:04:56,260 Jeśli sprawdzenie ważności, że odlewane w pierwszym miejscu, 62 00:04:56,260 --> 00:04:59,890 i jeśli nie był, to się skarżą, że masz nieprawidłowy. 63 00:04:59,890 --> 00:05:03,200 Dynamiczna kontrola typów. 64 00:05:03,200 --> 00:05:07,010 Wpisz to w pliku o nazwie dynamic.php. 65 00:05:10,130 --> 00:05:12,380 Dynamic.php. 66 00:05:14,580 --> 00:05:17,190 Ja rozpakować że formatowanie. 67 00:05:18,750 --> 00:05:21,880 Mamy zmienną, możemy ustawić ją do liczby całkowitej 7, 68 00:05:21,880 --> 00:05:27,930 wtedy będziemy go wydrukować i% s - 69 00:05:27,930 --> 00:05:32,830 Oh, my drukowania typ to, więc gettype będzie zwraca typ zmiennej. 70 00:05:32,830 --> 00:05:35,720 Jesteśmy po prostu drukowania typu kółko. 71 00:05:35,720 --> 00:05:39,440 Właśnie php.dynamic.php. 72 00:05:39,440 --> 00:05:45,920 Zobaczymy, że zmienia się z liczby całkowitej na ciąg na Boolean jak przejść. 73 00:05:45,920 --> 00:05:54,590 W C nie ma typ danych logicznych, nie ma danych typu ciąg. 74 00:05:54,590 --> 00:06:00,500 Jest char * i Boolean tak bywa int lub char lub coś. 75 00:06:00,500 --> 00:06:05,690 W PHP te typy nie istnieją, i to jest jedna z wielkich zalet PHP ponad C - 76 00:06:05,690 --> 00:06:13,290 że operacje na łańcuchach są nieskończenie łatwiejsze w PHP niż C. Oni po prostu działają. 77 00:06:13,290 --> 00:06:18,290 >> Więc tu wrócić. 78 00:06:18,290 --> 00:06:21,260 Pobiegliśmy dynamic.php. 79 00:06:21,260 --> 00:06:26,710 Ten mówi interpreter PHP, o nazwie PHP, aby uruchomić kod PHP w dynamic.php. 80 00:06:26,710 --> 00:06:30,250 Jeśli masz jakieś błędy w pliku, tłumacz powie! 81 00:06:30,250 --> 00:06:39,110 Tłumacz, to inna wielka różnica między PHP i C. 82 00:06:39,110 --> 00:06:48,200 W C musisz skompilować coś, a potem uruchomić tego skompilowanego pliku. 83 00:06:48,200 --> 00:06:50,490 W PHP nie musisz nic kompilować. 84 00:06:50,490 --> 00:06:57,200 Więc interpreter PHP jest zasadniczo właśnie czyta ten wiersz po wierszu. 85 00:06:57,200 --> 00:07:02,900 Uderza var = 7 uderzy printf następnie uderza var następnie uderza printf itd.. 86 00:07:02,900 --> 00:07:10,910 Jest trochę kompilacji to robi, i to buforuje rezultaty 87 00:07:10,910 --> 00:07:15,510 więc jeśli uruchomić skrypt później można zrobić niektóre, 88 00:07:15,510 --> 00:07:19,280 ale w zasadzie jest to linia wg linii rzeczy. 89 00:07:19,280 --> 00:07:25,280 Oznacza to, że wiele z optymalizacji, które otrzymujemy w C, 90 00:07:25,280 --> 00:07:31,920 jak kompilacji, to jest po prostu generalnie kompilator może zrobić wiele sztuczek dla Ciebie. 91 00:07:31,920 --> 00:07:36,110 Można go wyjąć nieużywanych zmiennych, można zrobić wszystkie te różne rzeczy, 92 00:07:36,110 --> 00:07:38,660 może zrobić rekurencję ogonową. 93 00:07:38,660 --> 00:07:42,550 W PHP nie dostaniesz tej korzyści 94 00:07:42,550 --> 00:07:45,690 bo to po prostu będzie rozpoczęcie wykonywania linii przez linia po linii, 95 00:07:45,690 --> 00:07:49,950 i tak naprawdę nie uznają tych rzeczy tak łatwo 96 00:07:49,950 --> 00:07:54,440 ponieważ nie 1 duży przebieg kompilacji na rzeczy, a następnie wykonanie jest; 97 00:07:54,440 --> 00:07:56,860 to jest po prostu linia po linii. 98 00:08:00,730 --> 00:08:02,750 Więc to jest interpreter. 99 00:08:02,750 --> 00:08:06,840 >> Powrót do naszego dynamicznego wpisując: całkiem fajne, co? 100 00:08:06,840 --> 00:08:08,640 Na pewno nie da się tego zrobić w C! 101 00:08:08,640 --> 00:08:11,860 Teraz zobacz, czy możesz dowiedzieć się typ każdej z następujących wartości. 102 00:08:11,860 --> 00:08:14,760 Zobacz ten punkt odniesienia. 103 00:08:14,760 --> 00:08:19,420 Więc 3,50. Jaki rodzaj myślisz, że będzie? 104 00:08:24,480 --> 00:08:26,370 Oto typy mamy. 105 00:08:26,370 --> 00:08:30,430 Mamy bools, wartości, punkty pływające, stringi, tablice, obiekty, 106 00:08:30,430 --> 00:08:38,370 i zasobów, co jest raczej niejasne. 107 00:08:38,370 --> 00:08:41,010 Myślę, że jest rzeczywiście przykładem. 108 00:08:41,010 --> 00:08:43,740 Potem jest NULL. NULL to specjalny typ. 109 00:08:43,740 --> 00:08:47,140 W przeciwieństwie do C, gdzie null jest tylko wskaźnik o adresie 0, 110 00:08:47,140 --> 00:08:54,930 w PHP, NULL jest jego własny rodzaj, gdzie obowiązuje tylko sprawa tego typu jest NULL. 111 00:08:57,560 --> 00:09:00,670 Jest to o wiele bardziej przydatne dla kontroli błędów. 112 00:09:00,670 --> 00:09:04,310 W C, gdzie mieliśmy ten problem, jeśli zwróci null, 113 00:09:04,310 --> 00:09:08,660 znaczy jesteś powrocie wskaźnikiem NULL lub używając NULL oznaczać błąd 114 00:09:08,660 --> 00:09:12,380 lub wszystkie z tego zamieszania, jakie mieliśmy w jednym punkcie. 115 00:09:12,380 --> 00:09:18,440 Tu wraca NULL zazwyczaj oznacza błąd. 116 00:09:20,860 --> 00:09:27,300 Wiele rzeczy, także return false błędu. 117 00:09:27,300 --> 00:09:33,140 Ale chodzi o to NULL typu, jedyną rzeczą, na NULL typu NULL. 118 00:09:33,140 --> 00:09:40,090 Następnie callback jest jak można zdefiniować pewne anonimowe funkcje. 119 00:09:40,090 --> 00:09:46,420 Nie musisz dać funkcję nazwę, ale nie będzie miał do czynienia z tym tutaj. 120 00:09:46,420 --> 00:09:53,940 Patrząc na typy, że należy się spodziewać, abyśmy wiedzieli, 121 00:09:53,940 --> 00:09:59,000 co myślisz typ 3,50 jest? >> [Uczeń] Float. 122 00:09:59,000 --> 00:10:00,370 Tak. 123 00:10:00,370 --> 00:10:06,290 Więc tutaj, co o tym myślisz typ to jest? >> [Uczeń] Array. 124 00:10:06,290 --> 00:10:09,890 Tak. Pierwszy był float, drugi jest tablicą. 125 00:10:09,890 --> 00:10:14,500 Zauważ, że ta tablica nie jest jak tablica C 126 00:10:14,500 --> 00:10:19,610 gdzie masz indeks 0 ma pewną wartość, index 1 ma pewną wartość. 127 00:10:19,610 --> 00:10:26,320 Tutaj są wskaźniki a, b, c i wartości 1, 2, i 3. 128 00:10:26,320 --> 00:10:33,980 W PHP nie ma żadnej różnicy między tablicy asocjacyjnej i zaledwie tablicy regularnej 129 00:10:33,980 --> 00:10:36,740 jak można myśleć w C. 130 00:10:36,740 --> 00:10:43,040 Jest tylko to, a pod maską jest tylko regularne tablica asocjacyjna 131 00:10:43,040 --> 00:10:50,000 gdzie 0 mapy do pewnej wartości sam sposób mapy do pewnej wartości. 132 00:10:50,000 --> 00:11:00,410 Z tego powodu, PHP może być bardzo szkodliwe dla bardzo szybki kod / benchmarking rzeczy 133 00:11:00,410 --> 00:11:07,930 ponieważ w C, gdy używasz tablicę wiesz, że dostęp do członka jest stała czasowa. 134 00:11:07,930 --> 00:11:11,860 W PHP dostęp członka jest kto wie, ile czasu? 135 00:11:11,860 --> 00:11:18,970 To chyba stała jeżeli jest ono hashe poprawnie. 136 00:11:18,970 --> 00:11:21,620 Kto wie, co to naprawdę robi się pod maską? 137 00:11:21,620 --> 00:11:25,600 Naprawdę trzeba patrzeć na życie, aby zobaczyć jak to będzie sobie z tym poradzić. 138 00:11:25,600 --> 00:11:28,550 Więc fopen. 139 00:11:28,550 --> 00:11:36,420 Myślę, że tutaj niech tylko podręcznik PHP fopen spojrzeć na typ zwracany. 140 00:11:36,420 --> 00:11:41,260 Widzimy tutaj można wyszukać prawie żadnych funkcji w PHP instrukcji 141 00:11:41,260 --> 00:11:47,540 i to jest jakby w manualu PHP. 142 00:11:47,540 --> 00:11:51,060 Typ zwracany będzie zasobem. 143 00:11:51,060 --> 00:11:56,050 Dlatego poszukaliśmy go, bo tak naprawdę nie określają zasób. 144 00:11:56,050 --> 00:12:04,110 Pomysł zasobu, w C masz rodzaj ma plik * lub cokolwiek; 145 00:12:04,110 --> 00:12:07,200 w PHP zasobem jest Twój plik *. 146 00:12:07,200 --> 00:12:10,360 To co masz zamiar być czytanie ze, to co masz zamiar napisać do. 147 00:12:10,360 --> 00:12:20,710 Jest to zwykle zewnętrzne, więc jest to zasób można wyciągnąć rzeczy od i rzucać rzeczy. 148 00:12:20,710 --> 00:12:26,520 I w końcu, co to jest typ NULL? >> [Uczeń] NULL. 149 00:12:26,520 --> 00:12:30,650 Tak. Więc jedyną rzeczą, która jest NULL NULL. 150 00:12:30,650 --> 00:12:33,480 NULL NULL. 151 00:12:35,490 --> 00:12:41,170 >> Jedną z cech systemu typu PHP (na lepsze lub na gorsze) jest jego zdolność do żonglowania typy. 152 00:12:41,170 --> 00:12:44,390 Kiedy piszesz wiersz kodu PHP, który łączy w sobie wartości różnych typów, 153 00:12:44,390 --> 00:12:46,670 PHP będzie próbował zrobić coś sensownego. 154 00:12:46,670 --> 00:12:48,920 Wypróbuj każdy z następujących linii kodu PHP. Co drukowane? 155 00:12:48,920 --> 00:12:51,000 Czy to jest to, czego oczekuje? Dlaczego lub dlaczego nie? 156 00:12:51,000 --> 00:12:58,600 Fakt ten o PHP jest to, co sprawia, że ​​to, co nazywamy słabo wpisane. 157 00:12:58,600 --> 00:13:04,610 Słabo i silnie wpisane na maszynie, 158 00:13:04,610 --> 00:13:06,840 istnieją różne zastosowania dla tych pojęć, 159 00:13:06,840 --> 00:13:12,020 ale większość ludzi używa słabo wpisane i zdecydowanie wpisane oznaczać coś takiego 160 00:13:12,020 --> 00:13:15,920 gdzie ("1" i 2), która działa. 161 00:13:15,920 --> 00:13:18,290 W C, który nie działał. 162 00:13:18,290 --> 00:13:22,490 Można sobie wyobrazić, to nie działa. 163 00:13:22,490 --> 00:13:29,200 Wielu ludzi mieszać dynamiczne typowanie i słabą wpisywania i statycznego typowania i silne wpisywanie. 164 00:13:29,200 --> 00:13:34,050 Python to kolejny przykład języka, który jest dynamicznie wpisałeś. 165 00:13:34,050 --> 00:13:41,770 Możesz rzucić wokół typów w zmiennych i to będzie do ustalenia w czasie wykonywania 166 00:13:41,770 --> 00:13:44,680 żadnych checkings błędach. 167 00:13:44,680 --> 00:13:50,740 W Pythonie to będzie wykonać to i to zobaczyć ("1" + 2); 168 00:13:50,740 --> 00:13:55,920 i to nie dlatego, że mówi, że nie można dodać ciąg i liczbą całkowitą. 169 00:13:55,920 --> 00:14:00,860 W PHP, które jest tak samo dynamicznie typowanym, nie zawiedzie. 170 00:14:00,860 --> 00:14:04,220 Słaby pisania ma do czynienia z tym, że robi rzeczy z typami 171 00:14:04,220 --> 00:14:07,800 że tak naprawdę nie ma sensu niekoniecznie. 172 00:14:07,800 --> 00:14:17,420 Więc ("1" + 2), mogę sobie wyobrazić, że jest ciąg 12, mogę sobie wyobrazić, że jest ciąg 3, 173 00:14:17,420 --> 00:14:20,710 Mogę sobie wyobrazić, że jest liczbą całkowitą 3. 174 00:14:20,710 --> 00:14:24,530 To nie koniecznie dobrze zdefiniowane, a my prawdopodobnie będzie zobaczyć tutaj 175 00:14:24,530 --> 00:14:29,140 że podczas drukowania ("1" + 2), to pewnie skończy się inności 176 00:14:29,140 --> 00:14:32,320 niż drukowanie (1 + "2"). 177 00:14:32,320 --> 00:14:39,700 I to wydaje się być, moim zdaniem, na gorsze. 178 00:14:39,700 --> 00:14:44,240 Tutaj możemy spróbować tych. 179 00:14:44,240 --> 00:14:48,740 Kolejny mały trick o PHP to nie trzeba do zapisu pliku. 180 00:14:48,740 --> 00:14:52,790 To ma uruchomić ten tryb komend. 181 00:14:52,790 --> 00:14:57,710 Więc php-r, to możemy rzucić w poleceniu tutaj: 182 00:14:57,710 --> 00:15:06,610 "Print ('1 '+ 2);" i dorzucę nowy wiersz. 183 00:15:19,550 --> 00:15:23,970 Ten drukowane 3. 184 00:15:31,100 --> 00:15:35,330 Wygląda na to, drukuje 3 i jest to liczba całkowita 3. 185 00:15:35,330 --> 00:15:38,420 Więc teraz spróbujmy na odwrót: 186 00:15:38,420 --> 00:15:42,970 "Print (1 + 2"); 187 00:15:45,560 --> 00:15:50,490 Dostajemy 3, i jest to również będzie liczbą całkowitą 3? Szczerze mówiąc nie mam pojęcia. 188 00:15:50,490 --> 00:15:54,030 Wygląda na to, że jest spójna. 189 00:15:54,030 --> 00:15:59,550 Nigdy nie ma szans na to jest 12 ciąg czy coś jest, że 190 00:15:59,550 --> 00:16:08,080 ponieważ PHP, JavaScript i Java przeciwieństwie też 191 00:16:08,080 --> 00:16:11,670 ma osobny operator dla konkatenacji. 192 00:16:11,670 --> 00:16:14,930 Łączenie w PHP jest kropka. 193 00:16:14,930 --> 00:16:22,950 Więc drukowanie (1 2 ".) Ma dać nam 12. 194 00:16:25,790 --> 00:16:32,420 To często prowadzi do nieporozumień, gdy ludzie starają się zrobić coś jak str + = 195 00:16:32,420 --> 00:16:37,840 inna sprawa, że ​​chcą dodać na końcu ich ciąg, i że będzie na porażkę. 196 00:16:37,840 --> 00:16:40,770 Trzeba zrobić, ul. = 197 00:16:42,000 --> 00:16:46,240 Nie zapomnij więc łączenie w PHP jest kropka. 198 00:16:46,240 --> 00:16:52,100 Inne rzeczy do wypróbowania: print ("CS" + 50); 199 00:16:55,750 --> 00:17:03,610 Mówiłem ci, że nie ma nadziei na to powoduje CS50 200 00:17:03,610 --> 00:17:06,119 ponieważ nie jest to łączenie +. 201 00:17:06,119 --> 00:17:08,440 Jak myślisz, co to będzie w końcu jest? 202 00:17:10,359 --> 00:17:13,460 I szczerze nie mają żadnego pojęcia. 203 00:17:14,250 --> 00:17:16,460 Wygląda na to, że to tylko 50. 204 00:17:16,460 --> 00:17:21,490 Widzi ciąg, i założę się, jeśli założymy 123CS - 205 00:17:21,490 --> 00:17:29,640 Widzi pierwszy łańcuch, próbuje odczytać liczbę całkowitą z niej lub numer z niego. 206 00:17:29,640 --> 00:17:31,710 W tym przypadku widzi 123CS. 207 00:17:31,710 --> 00:17:35,190 "To nie ma sensu, jako integer, więc jestem po prostu myśleć o 123". 208 00:17:35,190 --> 00:17:38,580 Więc 123 + 50 będzie 173. 209 00:17:38,580 --> 00:17:40,740 I tu zaczyna się czytając to jako liczba całkowita. 210 00:17:40,740 --> 00:17:45,690 Nie widzę nic, więc to po prostu traktuje to jako 0. Tak 0 + 50 będzie 50. 211 00:17:45,690 --> 00:17:51,600 Jestem zakładając ten zrobi coś podobnego. 212 00:17:51,600 --> 00:17:54,310 Myślę 99. 213 00:17:54,310 --> 00:17:57,580 Tak, bo to zajmie pierwsze - 214 00:18:12,880 --> 00:18:15,730 Więc 99. 215 00:18:15,730 --> 00:18:21,970 Tutaj (10/7), gdyby to było C, co by to wrócić? 216 00:18:23,700 --> 00:18:29,630 [Uczeń] 1. >> Tak, to będzie 1, bo 10/7 dzieli 2 liczby całkowite. 217 00:18:29,630 --> 00:18:32,910 Podzielona przez całkowitą liczbę całkowitą będzie zwracać liczbę całkowitą. 218 00:18:32,910 --> 00:18:37,750 Nie może wrócić 1 punkt cokolwiek to będzie, więc to po prostu się do powrotu 1. 219 00:18:37,750 --> 00:18:46,120 Tutaj drukowania (10/7), to będzie rzeczywiście zinterpretować. 220 00:18:46,120 --> 00:18:53,760 A to oznacza, że ​​jeśli rzeczywiście chcą zrobić całkowitą zaokrąglanie i rzeczy w tym stylu, 221 00:18:53,760 --> 00:18:59,950 trzeba zrobić print (floor (10/7)); 222 00:18:59,950 --> 00:19:08,460 W C to chyba dziwne, że można polegać na całkowitej obcinania regularnie 223 00:19:08,460 --> 00:19:12,260 ale w PHP nie można, ponieważ automatycznie włączy ją do pływaka. 224 00:19:13,430 --> 00:19:17,610 A potem (7 + true); co myślisz, że będzie? 225 00:19:18,550 --> 00:19:23,640 Zgaduję, 8 czy to będzie prawdziwe, jak interpretować 1. 226 00:19:23,640 --> 00:19:25,740 Wygląda na to, że to 8. 227 00:19:25,740 --> 00:19:31,710 >> Więc wszystko co zrobiliśmy w ciągu ostatnich 10 minut powinieneś nigdy absolutnie zrobić. 228 00:19:31,710 --> 00:19:39,870 Pojawi się kod, który to robi. 229 00:19:39,870 --> 00:19:42,700 Nie muszą być takie proste, jak w tym. 230 00:19:42,700 --> 00:19:47,240 Można mieć 2 zmienne i 1 zmienna bywa ciąg 231 00:19:47,240 --> 00:19:51,310 a druga zmienna bywa int, a następnie dodać te zmienne razem. 232 00:19:51,310 --> 00:20:00,120 Ponieważ PHP jest dynamicznie wpisane i nie będzie robić żadnych kontrola typów dla Ciebie 233 00:20:00,120 --> 00:20:03,640 i ponieważ jest słabo wpisane i ponieważ będzie to tylko automatycznie wyrzucić te rzeczy razem 234 00:20:03,640 --> 00:20:11,490 i wszystko będzie po prostu działać, trudno nawet wiedzieć, że zmienna ta musi być ciąg teraz 235 00:20:11,490 --> 00:20:14,930 tak, że nie należy dodawać do tej zmiennej, która jest liczbą całkowitą. 236 00:20:18,780 --> 00:20:24,560 Najlepszym rozwiązaniem jest, czy zmienna jest ciągiem znaków, przechowywać go jako ciąg zawsze. 237 00:20:24,560 --> 00:20:26,980 Jeśli zmienna jest int, utrzymać ją jako int zawsze. 238 00:20:26,980 --> 00:20:30,770 Jeśli chcesz zajmować się liczb i łańcuchów, 239 00:20:30,770 --> 00:20:36,970 można użyć varsint - to JavaScript. 240 00:20:36,970 --> 00:20:42,520 Intval. Robię to przez cały czas. PHP i JavaScript I wymieszać wszystko. 241 00:20:42,520 --> 00:20:47,600 Więc intval zamierza powrócić wartość całkowitą zmiennej. 242 00:20:47,600 --> 00:20:56,550 Jeśli przechodzą w "print (intval ('123 ')); dostaniesz 123. 243 00:21:06,820 --> 00:21:15,850 Intval sama nie zrobi czek dla nas, że to jest wyłącznie całkowitą. 244 00:21:15,850 --> 00:21:20,460 Obsługi PHP, istnieje tak wiele funkcji dostępne, 245 00:21:20,460 --> 00:21:26,560 więc myślę, że to, co używam jest is_numeric pierwszy. 246 00:21:26,560 --> 00:21:32,590 Zgaduję, że zwrócone false. 247 00:21:32,590 --> 00:21:35,780 To kolejna rzecz, którą musimy przejść przez to. === 248 00:21:37,850 --> 00:21:44,020 Więc is_numeric ('123df "), to nie myśleć, że jak is_numeric. 249 00:21:44,020 --> 00:21:46,720 W C trzeba by iterować wszystkie znaki 250 00:21:46,720 --> 00:21:50,410 i sprawdzić, czy każdy znak jest cyfrą lub cokolwiek. 251 00:21:50,410 --> 00:21:53,850 Tutaj is_numeric zrobi to za nas, 252 00:21:53,850 --> 00:21:56,520 i to zwracać wartość false. 253 00:21:56,520 --> 00:22:02,120 Więc kiedy drukowane, że to nic nie drukowane, więc mam porównanie, aby zobaczyć, 254 00:22:02,120 --> 00:22:05,490 nie zdarzy ci się być fałszywe? I tak teraz jest drukowanie 1. 255 00:22:05,490 --> 00:22:10,060 Podobno to drukuje 1 jako prawdziwe zamiast drukować prawdziwa jak prawda. 256 00:22:10,060 --> 00:22:15,790 Zastanawiam się, czy zrobić print_r. Nie, to jeszcze nie 1. 257 00:22:15,790 --> 00:22:26,760 >> Wracając do ===, == nadal istnieje, 258 00:22:26,760 --> 00:22:32,260 i jeśli porozmawiasz z Tommym powie == jest idealnie czysty. 259 00:22:32,260 --> 00:22:37,700 Mam zamiar powiedzieć, że == jest straszna i nigdy nie powinno się używać. == 260 00:22:37,700 --> 00:22:44,870 Różnica jest taka, że ​​== porównuje rzeczy 261 00:22:44,870 --> 00:22:48,450 , gdzie może być prawdą, nawet jeśli nie są one tego samego typu, 262 00:22:48,450 --> 00:22:53,810 natomiast === porównuje rzeczy i pierwszy sprawdza, czy są one tego samego typu? 263 00:22:53,810 --> 00:22:58,010 Tak. Ok, teraz mam zamiar sprawdzić, czy rzeczywiście porównać równe. 264 00:22:58,010 --> 00:23:08,890 Się dziwne rzeczy, jak 10 równa - Zobaczmy, co to mówi. 265 00:23:08,890 --> 00:23:15,570 So ('10 '== '1 E1 "); 266 00:23:15,570 --> 00:23:17,980 Zwraca true. 267 00:23:17,980 --> 00:23:21,420 Czy ktoś ma jakieś domysły, dlaczego zwraca true? 268 00:23:25,180 --> 00:23:27,120 To nie jest tylko o tym. Może to jest wskazówka. 269 00:23:27,120 --> 00:23:33,170 Ale jeśli mogę zmienić na f - cholernie to! I zachować przy użyciu cudzysłowów. 270 00:23:33,170 --> 00:23:38,780 Powodem podwójne cytaty krzyczeć na mnie, ponieważ mam umieścić to w cudzysłów. 271 00:23:38,780 --> 00:23:43,850 Więc mogłem uciec cudzysłowia w tutaj, ale pojedyncze cudzysłowy ułatwić. 272 00:23:43,850 --> 00:23:49,120 So ('10 '== '1 f1'); nie drukuje prawdziwe. ('10 '== '1 E1 "); drukuje prawdziwe. 273 00:23:49,120 --> 00:23:56,330 [Student] Czy hex? >> To nie jest hex, ale jest blisko, że jest to jak - 274 00:23:56,330 --> 00:24:01,060 1E1, notacja naukowa. 275 00:24:01,060 --> 00:24:07,950 Uznaje 1E1 jako 1 * 10 ^ 1 lub cokolwiek. 276 00:24:07,950 --> 00:24:11,510 Są równe całkowitymi. 277 00:24:11,510 --> 00:24:15,930 Jeśli robimy === wtedy będzie fałszywe. 278 00:24:15,930 --> 00:24:28,490 I rzeczywiście nie ma pojęcia, jeśli robimy == co (10 i '10abc ');? Dobrze. Tak, że to prawda. 279 00:24:28,490 --> 00:24:35,940 Więc jak, kiedy ty (10 + '10abc ") i będzie to 20, 280 00:24:35,940 --> 00:24:38,800 tu (10 == '10abc '); to prawda. 281 00:24:38,800 --> 00:24:45,350 Jeszcze gorsze są takie rzeczy jak (false == NULL) jest prawdziwe 282 00:24:45,350 --> 00:24:52,210 lub (false == 0); to prawda, (false == []); 283 00:24:52,210 --> 00:25:00,970 Istnieje dziwne przypadki - To jeden z tych dziwnych przypadków. 284 00:25:00,970 --> 00:25:08,110 Zauważmy, że (false == []); prawda. 285 00:25:08,110 --> 00:25:11,950 ('0 '== False) jest prawdziwe. 286 00:25:11,950 --> 00:25:16,090 ('0 '== []) Jest fałszywe. 287 00:25:16,090 --> 00:25:19,090 Więc == jest w żaden sposób przechodni. 288 00:25:19,090 --> 00:25:26,830 może być równa i B mogą być równe C, 289 00:25:26,830 --> 00:25:29,340 b, ale nie może być równy C. 290 00:25:29,340 --> 00:25:35,580 To jest obrzydliwością dla mnie, i zawsze należy stosować. === 291 00:25:35,580 --> 00:25:38,590 [Uczeń] możemy zrobić! ==, Jak również? >> [Bowden] Tak. 292 00:25:38,590 --> 00:25:44,600 Odpowiednik będzie! = I! ==. 293 00:25:44,600 --> 00:25:48,230 To jest faktycznie wychowywane w Pset specyfikacji 294 00:25:48,230 --> 00:25:52,000 gdzie wiele powrotu funkcji - 295 00:25:52,000 --> 00:25:53,890 Obsługi PHP jest dobry na ten temat. 296 00:25:53,890 --> 00:25:59,140 To stawia w dużym polu czerwonym "To zwróci false, jeśli jest błąd." 297 00:25:59,140 --> 00:26:03,940 Ale 0 powrocie jest całkowicie uzasadnione, co do powrotu. 298 00:26:03,940 --> 00:26:08,250 Pomyśl o dowolnej funkcji, które ma nastąpić zwraca liczbę całkowitą. 299 00:26:11,250 --> 00:26:17,880 Powiedzmy, że ta funkcja ma policzyć liczbę linii w pliku, czy coś. 300 00:26:17,880 --> 00:26:23,490 W normalnych warunkach, możesz przekazać tę funkcję plik 301 00:26:23,490 --> 00:26:27,120 i to będzie zwracać liczbę całkowitą, która reprezentuje liczbę linii. 302 00:26:27,120 --> 00:26:30,820 Więc 0 jest całkowicie uzasadnione numer, jeśli plik jest po prostu pusty. 303 00:26:30,820 --> 00:26:36,810 Ale co jeśli przekazana nieprawidłowy plik i funkcja dzieje return false 304 00:26:36,810 --> 00:26:38,860 jeśli przekazana nieprawidłowy plik? 305 00:26:38,860 --> 00:26:46,500 Jeśli po prostu zrobić == nie jesteś różnicującym sprawy pomiędzy nieprawidłowy plik i plik pusty. 306 00:26:48,870 --> 00:26:51,350 Zawsze należy stosować. === 307 00:26:55,690 --> 00:26:58,000 To wszystko z tych. 308 00:26:58,000 --> 00:27:01,660 >> W PHP, rodzaj tablicy jest inny od tego, co masz w zwyczaju w C. 309 00:27:01,660 --> 00:27:06,650 Rzeczywiście, można już zauważyć to powyżej, kiedy zobaczył, że to jest z tablicy znamionowej. 310 00:27:06,650 --> 00:27:15,640 Składnia jest nowy uchwyt w PHP 5.4, który jest najnowszą wersją PHP. 311 00:27:15,640 --> 00:27:36,960 Przed tym zawsze miałem napisać array ('a' -> 1, 'b' -> 2. 312 00:27:36,960 --> 00:27:41,160 To był konstruktor tablicy. 313 00:27:41,160 --> 00:27:45,950 Teraz wreszcie nadszedł PHP wokół do miłego składni zaledwie nawiasach kwadratowych, 314 00:27:45,950 --> 00:27:50,900 która jest po prostu o wiele lepiej niż tablicy. 315 00:27:50,900 --> 00:27:54,480 Jednak biorąc pod PHP 5.4 to najnowsza wersja, 316 00:27:54,480 --> 00:27:59,090 można napotkać miejsca, które nie mają nawet w PHP 5.3. 317 00:27:59,090 --> 00:28:08,220 W lecie wpadliśmy w tej sprawie, gdzie PHP 5,3 było to, co mieliśmy na urządzenia, 318 00:28:08,220 --> 00:28:14,480 ale serwer, który wdrożyliśmy wszystkie klasy książkę i złożyć i wszystkie rzeczy do 319 00:28:14,480 --> 00:28:16,750 to PHP 5.4. 320 00:28:16,750 --> 00:28:23,060 Nie wiedząc o tym, opracowaliśmy w 5,3, pchnął do 5,4, 321 00:28:23,060 --> 00:28:25,660 a teraz nagle nikt z naszego kodu działa 322 00:28:25,660 --> 00:28:28,680 bo akurat były zmiany między 5,3 a 5,4 323 00:28:28,680 --> 00:28:31,030 które nie są kompatybilne, 324 00:28:31,030 --> 00:28:35,770 i mamy iść i naprawić wszystkie nasze rzeczy, które nie działają dla PHP 5.4. 325 00:28:39,210 --> 00:28:42,320 Do tej klasy, gdyż urządzenie ma PHP 5.4 326 00:28:42,320 --> 00:28:45,490 to perfekcyjnie używać nawiasów kwadratowych. 327 00:28:47,240 --> 00:28:50,440 Ale jeśli jesteś patrząc na rzeczy w Internecie, 328 00:28:50,440 --> 00:28:54,880 jeśli szukasz trochę takich rzeczy tablicy, najprawdopodobniej masz zamiar zobaczyć 329 00:28:54,880 --> 00:29:02,020 przeliterować składni konstruktora Array ponieważ było około od PHP urodził 330 00:29:02,020 --> 00:29:07,340 i kwadratowych składnia wspornik już od kilku ostatnich miesięcy 331 00:29:07,340 --> 00:29:10,020 lub w każdym przypadku 5,4 przyszłaś. 332 00:29:10,020 --> 00:29:12,710 To jest jak indeks. 333 00:29:12,710 --> 00:29:30,610 Podobnie jak w języku C, jak byś index nawiasy kwadratowe jak $ tablica [0], $ tablica [1], $ tablica [2], 334 00:29:30,610 --> 00:29:36,320 indeksowania w ten sam sposób, jeśli zdarzy się, że Twoje indeksy są ciągami. 335 00:29:36,320 --> 00:29:40,440 Więc $ array ['a'] i $ array ['b']. 336 00:29:40,440 --> 00:29:47,410 $ Tablica [b]. Dlaczego miałoby to być nie tak? 337 00:29:52,490 --> 00:29:59,870 To prawdopodobnie będzie generować ostrzeżenie, ale nadal działa. PHP ma tendencję do tego. 338 00:29:59,870 --> 00:30:04,890 To skłania do po prostu, "Będę cię ostrzec o tym, ale mam zamiar iść dalej 339 00:30:04,890 --> 00:30:07,550 "I robić, co się da." 340 00:30:07,550 --> 00:30:11,500 Prawdopodobnie będzie przełożyć to na ciąg znaków, 341 00:30:11,500 --> 00:30:15,000 jednak jest możliwe, że w pewnym momencie w przeszłości że ktoś 342 00:30:15,000 --> 00:30:20,180 define b, aby być "HELLO WORLD". 343 00:30:20,180 --> 00:30:28,740 Więc teraz b może być stała i $ array [b] będzie faktycznie robi 'Hello World'. 344 00:30:28,740 --> 00:30:32,380 Myślę, że w tym momencie, a przynajmniej nasze ustawienia PHP, 345 00:30:32,380 --> 00:30:37,870 jeśli spróbujesz indeksu do tablicy i ten klucz nie istnieje, nie powiedzie się. 346 00:30:37,870 --> 00:30:40,150 Nie sądzę, że będzie to tylko ostrzeżenie. 347 00:30:40,150 --> 00:30:44,560 Albo przynajmniej można ustawić go tak, że nie tylko ostrzegam, to tylko prosto nie. 348 00:30:44,560 --> 00:30:49,290 >> Sposób można sprawdzić, czy faktycznie jest taki indeks isset. 349 00:30:49,290 --> 00:30:54,690 Więc isset ($ array ['Hello World']) zwróci false. 350 00:30:54,690 --> 00:30:59,160 isset ($ array ['b']) zwróci true. 351 00:31:06,830 --> 00:31:09,880 Można mieszać te składnie. 352 00:31:15,060 --> 00:31:22,440 Jestem pewien, że to, co ta tablica będzie w końcu jest to - możemy przetestować go. 353 00:31:43,290 --> 00:31:45,700 Oh, muszę PHPWord. 354 00:31:53,960 --> 00:32:00,260 To mieszanie składni, gdzie można wskazać, jakie klucz jest 355 00:32:00,260 --> 00:32:03,330 i nie precyzuje, jakie klucz. 356 00:32:03,330 --> 00:32:05,520 Więc 3 tutaj jest wartość. 357 00:32:05,520 --> 00:32:08,080 Masz wyraźnie nie powiedział, co jego klucz będzie. 358 00:32:08,080 --> 00:32:11,670 Co sądzisz jego klucz ma być? 359 00:32:11,670 --> 00:32:21,410 [Uczeń] 0. >> Zgaduję 0 tylko dlatego, że jest to pierwszy jeden nie został określony. 360 00:32:21,410 --> 00:32:23,500 Rzeczywiście możemy zrobić kilka takich przypadków. 361 00:32:23,500 --> 00:32:28,030 Więc print_r jest wydrukować rekurencyjne. Będą w nim całą tablicę. 362 00:32:28,030 --> 00:32:32,700 Byłoby drukować subarrays tablicy, gdyby nie było żadnych. 363 00:32:32,700 --> 00:32:36,630 Więc print_r ($ tablica); php.test.php. 364 00:32:36,630 --> 00:32:38,810 To nie wygląda na to, że dał mu 0. 365 00:32:38,810 --> 00:32:43,530 Jest rzeczywiście coś pamiętać tutaj, ale wrócimy do niego w sekund. 366 00:32:43,530 --> 00:32:45,850 Ale co, jeśli zdarzy mi się zrobić tego indeksu 1? 367 00:32:45,850 --> 00:32:51,170 PHP nie rozróżnia indeksów łańcuchowych i indeksów całkowitych, 368 00:32:51,170 --> 00:33:00,280 więc w tym momencie mam tylko określony indeks 1 i można zrobić zarówno $ tablica [1] i $ tablica ['1 '] 369 00:33:00,280 --> 00:33:06,250 i będzie to samo indeks i sam klucz. 370 00:33:06,250 --> 00:33:13,000 Więc teraz co myślisz 3 będzie? >> [Student] 2. >> [Bowden] Zgaduję 2. 371 00:33:16,000 --> 00:33:18,690 Tak. To 2. 372 00:33:18,690 --> 00:33:24,790 , Co oznacza, że ​​nie jest to 10, to jest 4? Co sądzisz indeks 3 będzie? 373 00:33:27,360 --> 00:33:29,110 Myślę 11. 374 00:33:29,110 --> 00:33:33,060 Zgaduję, co PHP robi - i myślę, że widziałem to wcześniej - 375 00:33:33,060 --> 00:33:39,760 jest to po prostu śledzi co najwyższy indeks numeryczny jest używany do tej pory jest. 376 00:33:39,760 --> 00:33:44,230 To nigdy nie będzie przypisać indeks string do 3. To zawsze będzie indeks numeryczny. 377 00:33:44,230 --> 00:33:47,690 Więc to śledzi na najwyższy jest przypisany do tej pory, co zdarza się 10, 378 00:33:47,690 --> 00:33:52,540 i to da 11 do 3. 379 00:33:52,540 --> 00:34:02,110 To, co powiedziałem wcześniej, zauważyć sposób jego drukowania tej tablicy. 380 00:34:02,110 --> 00:34:06,850 Wypisuje klucz 10, klucz 4, klucz 11, klucz d. 381 00:34:06,850 --> 00:34:09,790 Albo jeszcze zróbmy - 382 00:34:15,760 --> 00:34:22,489 Chyba nie umieścić 0, ale to jest druk 1, 2, 3, 4. 383 00:34:22,489 --> 00:34:29,330 Co jeśli zmienię tutaj? Albo niech faktycznie przełączyć te 2. 384 00:34:29,330 --> 00:34:31,940 Teraz drukuje 2, 1, 3, 4. 385 00:34:31,940 --> 00:34:41,270 PHP tablice nie są jak do zwykłej tabeli hash. 386 00:34:41,270 --> 00:34:45,570 Jest to całkowicie uzasadnione, aby myśleć o nich jako hash tablic 99% czasu. 387 00:34:45,570 --> 00:34:53,790 Ale w swoich tablicach hash nie ma sensu z rzędu, w którym rzeczy zostały wstawione. 388 00:34:53,790 --> 00:34:56,639 Więc jak tylko wstawić go do tabeli mieszania, 389 00:34:56,639 --> 00:35:00,590 zakładamy, że nie ma połączonej listy i można było ocenić w połączonej listy 390 00:35:00,590 --> 00:35:03,980 które wprowadzono pierwszy. 391 00:35:03,980 --> 00:35:10,060 Ale tu wstawione 2 pierwsze i wie, kiedy to drukowanie tej tablicy, że 2 jest pierwsze. 392 00:35:10,060 --> 00:35:13,090 Nie ma go wydrukować tylko w dowolnej kolejności. 393 00:35:13,090 --> 00:35:17,550 Techniczna struktura danych jest za pomocą jest sortowane na mapę, 394 00:35:17,550 --> 00:35:24,690 więc odwzorowuje klucze do wartości i zapamiętuje kolejność, w których te klucze zostały wstawione. 395 00:35:24,690 --> 00:35:31,600 Zasadniczo jest to do pewnych komplikacji, gdzie jest to naprawdę irytujące - 396 00:35:31,600 --> 00:35:34,510 Powiedzmy, że masz tablicę 0, 1, 2, 3, 4, 5 397 00:35:34,510 --> 00:35:37,700 i chcesz wziąć indeks 2. 398 00:35:37,700 --> 00:35:47,750 Jeden sposób to zrobić, zobaczymy, co to wygląda. 399 00:35:47,750 --> 00:35:50,410 0, 2, 1, 3, 4. 400 00:35:50,410 --> 00:35:54,880 Unset dzieje się rozbroić obie zmienne i wskaźniki tablicy. 401 00:35:54,880 --> 00:35:58,630 Więc unset ($ tablica [2]); 402 00:35:58,630 --> 00:36:03,430 Teraz, co to będzie wyglądać? 2 jest po prostu nie ma, tak że jest całkiem dobrze. 403 00:36:03,430 --> 00:36:11,670 Bardziej irytujące jest, jeśli chcesz rzeczy rzeczywiście być jak tablicy. 404 00:36:11,670 --> 00:36:14,910 Powiem liczb losowych. 405 00:36:14,910 --> 00:36:20,400 Zauważcie swoje indeksy. 406 00:36:20,400 --> 00:36:26,860 Chcę, aby po prostu być jak tablicy C, gdzie idzie od 0 do długości - 1 407 00:36:26,860 --> 00:36:30,810 i mogę iteracyjne nad nim jako takie. 408 00:36:30,810 --> 00:36:38,520 Ale jak tylko zniszczy drugiego indeksu, co było w indeksie 3 nie teraz staje index 2. 409 00:36:38,520 --> 00:36:44,790 Zamiast tego, po prostu usuwa ten indeks, a teraz idziesz 0, 1, 3, 4. 410 00:36:44,790 --> 00:36:48,740 Jest to całkowicie uzasadnione. 411 00:36:48,740 --> 00:36:53,950 To jest po prostu irytujące i trzeba robić takie rzeczy jak splice tablicy. Tak. 412 00:36:53,950 --> 00:36:57,200 >> [Uczeń] Co by się stało, gdybyś miał dla pętli 413 00:36:57,200 --> 00:36:59,630 i chcesz przejść na wszystkie elementy? 414 00:36:59,630 --> 00:37:02,290 Kiedy uderzył 2, to wydajność kiedykolwiek? 415 00:37:02,290 --> 00:37:10,150 Iteracja tablicy. Istnieją 2 sposoby, można to zrobić. 416 00:37:10,150 --> 00:37:12,770 Możesz używać regularnie na pętli. 417 00:37:12,770 --> 00:37:22,000 Jest to kolejna zawiłość z PHP. 418 00:37:22,000 --> 00:37:27,420 Większość języków, chciałbym powiedzieć, mieć jakiś długości lub len czy coś 419 00:37:27,420 --> 00:37:30,470 określająca długość tablicy. 420 00:37:30,470 --> 00:37:32,820 W PHP jest to count. 421 00:37:32,820 --> 00:37:36,160 Więc count ($ tablica); $ i + +) 422 00:37:36,160 --> 00:37:42,950 Miejmy print ($ tablica [$ i]); 423 00:37:45,920 --> 00:37:48,820 Notice: Undefined offset: 2. 424 00:37:48,820 --> 00:37:51,610 To po prostu się nie powiedzie. 425 00:37:51,610 --> 00:38:03,020 To jest powodem, że w przeważającej części, nigdy nie będziesz musiał iteracyjne nad tablicę takiego. 426 00:38:03,020 --> 00:38:07,110 To może być przesada, ale nie musisz iteracyjne nad tablicę takiego 427 00:38:07,110 --> 00:38:19,410 ponieważ PHP zapewnia jej składni foreach gdzie foreach ($ tablica as $ item). 428 00:38:19,410 --> 00:38:31,830 Jeśli teraz wydrukować ($ item) - we'll omówić go w drugim - że działa doskonale. 429 00:38:31,830 --> 00:38:38,960 Sposób, że foreach działa jest pierwszym argumentem jest tablica, że ​​jesteś iteracja. 430 00:38:38,960 --> 00:38:44,060 I drugi argument, poz, przez każdego przebiegu pętli for 431 00:38:44,060 --> 00:38:52,690 to zajmie na pierwszego w tablicy. Więc pamiętaj tablica ma rozkaz. 432 00:38:52,690 --> 00:38:55,690 Za pierwszym razem przez pętlę for, poz będzie 123 433 00:38:55,690 --> 00:38:59,540 to będzie 12 to będzie 13 to będzie 23 to będzie 213. 434 00:38:59,540 --> 00:39:04,670 Robi się naprawdę dziwnie, gdy coś jak foreach. 435 00:39:04,670 --> 00:39:07,480 Zobaczmy, co się dzieje, ponieważ nigdy nie należy tego robić. 436 00:39:07,480 --> 00:39:13,320 Co jeśli unset ($ array [1]); 437 00:39:20,410 --> 00:39:26,030 To był prawdopodobnie spodziewać. 438 00:39:26,030 --> 00:39:30,950 Jesteś iteracja tej tablicy i za każdym razem jesteś wyłączania pierwszy indeks. 439 00:39:30,950 --> 00:39:39,720 Więc dla indeksu 0, pierwszą rzeczą, poz przyjmuje wartość 0, więc to będzie 123. 440 00:39:39,720 --> 00:39:44,630 Ale wewnątrz pętli for my unset index 1, więc oznacza to 12 już nie ma. 441 00:39:44,630 --> 00:39:57,480 Tak drukować. PHP_EOL. 442 00:39:57,480 --> 00:40:03,580 PHP_EOL jest tylko znak nowej linii, ale jest technicznie bardziej przenośne 443 00:40:03,580 --> 00:40:08,890 ponieważ newlines w systemie Windows różni się od nowej linii na Mac i UNIX. 444 00:40:08,890 --> 00:40:18,040 W systemach Windows linii jest \ r \ n, a wszędzie indziej ma tendencję żeby być \ n. 445 00:40:18,040 --> 00:40:25,150 PHP_EOL jest tak skonfigurowany, że używa cokolwiek newline Twojego systemu jest. 446 00:40:25,150 --> 00:40:29,310 Tak drukować, że. Niech nie print_r ($ array) na końcu. 447 00:40:32,830 --> 00:40:37,390 Nie miałem pojęcia, że ​​to byłoby zachowanie. 448 00:40:41,740 --> 00:40:48,960 Pozycja nadal przyjmuje wartość 12 chociaż unset 12 zanim kiedykolwiek dostał się do niego z tablicy. 449 00:40:52,770 --> 00:40:58,840 Nie wierz mi na słowo, ale to wygląda jak foreach tworzy kopię tablicy 450 00:40:58,840 --> 00:41:02,160 a następnie element nabiera wszystkich wartości tej kopii. 451 00:41:02,160 --> 00:41:07,760 Tak więc nawet w przypadku modyfikowania tablicy wewnątrz pętli for 452 00:41:07,760 --> 00:41:17,240 to nie obchodzi. Artykuł będzie na oryginalnych wartości. 453 00:41:17,240 --> 00:41:19,240 Spróbujmy wyłączania go. 454 00:41:19,240 --> 00:41:24,460 Co jeśli jest to $ array [1] = "hello"; 455 00:41:24,460 --> 00:41:31,770 Nawet jeśli stawiamy "hello" do tablicy, nie pozycja przyjmuje tę wartość. 456 00:41:31,770 --> 00:41:37,430 Jest inna składnia pętli foreach 457 00:41:37,430 --> 00:41:45,900 gdzie umieścić 2 zmiennych rozdzielonych strzałką. 458 00:41:45,900 --> 00:41:49,680 Ta pierwsza zmienna będzie kluczem tej wartości, 459 00:41:49,680 --> 00:41:53,050 i ta druga zmienna będzie dokładnie taki sam element. 460 00:41:53,050 --> 00:42:01,610 To jest nieinteresujące tutaj, ale jeśli wrócimy do naszej pierwotnej przypadku 'a' -> 1, 461 00:42:01,610 --> 00:42:06,090 "B" -> 1, 462 00:42:06,090 --> 00:42:14,470 tutaj jeśli tylko iteracyjne dla każdej tablicy jako elementu, pozycja będzie 1 za każdym razem. 463 00:42:14,470 --> 00:42:18,170 Ale jeśli chcemy też poznać klucz związany z tym elementem 464 00:42:18,170 --> 00:42:25,230 potem robimy as $ klucz -> $ element. 465 00:42:25,230 --> 00:42:31,980 Więc teraz możemy zrobić print ($ klucz. ':'. 466 00:42:31,980 --> 00:42:39,380 Teraz to iteracja i drukowanie każdy klawisz i związane z nią wartości. 467 00:42:39,380 --> 00:42:47,030 >> Dodatkową rzeczą, jaką możemy zrobić w pętli foreach jest można zobaczyć tej składni. 468 00:42:47,030 --> 00:42:54,770 Znaków handlowego przed nazwami zmiennych wydają się być jak PHP czy referencje. 469 00:42:54,770 --> 00:43:00,460 Gdzie odniesienia są bardzo podobne do wskaźników, 470 00:43:00,460 --> 00:43:04,820 nie ma wskazówek, więc nie można sobie z pamięci bezpośrednio. 471 00:43:04,820 --> 00:43:12,620 Ale masz referencje, gdzie 1 zmienna odnosi się do tego samego, co inne zmienne. 472 00:43:12,620 --> 00:43:21,450 Wewnątrz tutaj zróbmy $ item. Wróćmy do 1, 10. 473 00:43:21,450 --> 00:43:28,800 Zróbmy $ item + +, to nadal istnieje w PHP. Nadal można zrobić + +. 474 00:43:28,800 --> 00:43:38,260 php.test.php. Mam go wydrukować. print_r ($ tablica); 475 00:43:38,260 --> 00:43:42,730 Drukujemy 2, 11. 476 00:43:42,730 --> 00:43:49,560 Gdybym tylko zrobić foreach ($ tablica as $ item), a następnie produkt będzie wartość 1 477 00:43:49,560 --> 00:43:54,190 pierwszy przez pętlę. To przyrost 1 do 2, a następnie gotowe. 478 00:43:54,190 --> 00:43:57,260 Więc to będzie przejść przez sekunda przejściu pętli i że pozycja jest 10. 479 00:43:57,260 --> 00:44:01,570 To pozycja zwiększa do 11, a następnie, że jest po prostu wyrzucić. 480 00:44:01,570 --> 00:44:06,670 Potem print_r ($ tablica); i zobaczymy, że to tylko 1, 10. 481 00:44:06,670 --> 00:44:09,070 Więc przyrost zrobiliśmy zaginął. 482 00:44:09,070 --> 00:44:13,410 Ale foreach ($ array, jak & $ item) 483 00:44:13,410 --> 00:44:21,910 teraz ten element jest taki sam jak ten element tutaj. To jest to samo. 484 00:44:21,910 --> 00:44:26,820 Więc $ item + + modyfikuje tablicę 0. 485 00:44:29,330 --> 00:44:41,850 Zasadniczo, można też zrobić $ k -> $ item i można zrobić $ array [$ k] + +; 486 00:44:41,850 --> 00:44:48,650 >> Więc inny sposób robi, że jesteśmy wolni, aby zmienić pozycję, 487 00:44:48,650 --> 00:44:54,070 ale nie będą modyfikować naszą oryginalną tablicę. 488 00:44:54,070 --> 00:44:59,720 Ale jeśli używamy k, który jest naszym kluczem, to może po prostu indeks do naszej tablicy przy użyciu tego klucza 489 00:44:59,720 --> 00:45:01,530 i przyrost tego. 490 00:45:01,530 --> 00:45:05,410 Ten bardziej bezpośrednio modyfikuje naszą oryginalnej tablicy. 491 00:45:05,410 --> 00:45:10,690 Możesz to zrobić nawet, że jeśli z jakiegoś powodu chciał możliwość modyfikowania - 492 00:45:10,690 --> 00:45:13,510 Faktycznie, jest to całkowicie uzasadnione. 493 00:45:13,510 --> 00:45:16,020 Nie chcę mieć do zapisu $ array [$ k] + +, 494 00:45:16,020 --> 00:45:27,890 po prostu chciałem napisać $ item + +, ale nadal chciał powiedzieć if ($ k === 'a') 495 00:45:27,890 --> 00:45:30,620 następnie zwiększyć element, a następnie wydrukować naszą tablicę. 496 00:45:30,620 --> 00:45:36,290 Więc teraz co mamy oczekiwać print_r zrobić? Jakie wartości powinny być drukowane? 497 00:45:36,290 --> 00:45:43,770 [Tablica] 2 i 10. >> [Bowden] Tylko, jeśli klucz jest "a" mamy właściwie drukować to. 498 00:45:51,940 --> 00:45:55,670 >> Prawdopodobnie bardzo rzadko, jeśli w ogóle, będą musiały określić funkcje w PHP, 499 00:45:55,670 --> 00:46:03,370 ale można zobaczyć coś podobnego, gdzie można zdefiniować funkcję jak cokolwiek funkcji. 500 00:46:03,370 --> 00:46:09,900 Wysyłka powiedziałbyś ($ foo, $ bar), a następnie określić, że jest cokolwiek. 501 00:46:09,900 --> 00:46:17,580 Ale jeśli tego nie zrobię, to znaczy, że wszystko, co zwraca cokolwiek, 502 00:46:17,580 --> 00:46:25,110 co nazywa baz, więc pierwszy argument przekazany do baz może być zmieniony. 503 00:46:25,110 --> 00:46:38,100 Zróbmy $ foo + +; 504 00:46:38,100 --> 00:46:48,020 i wewnątrz tutaj zróbmy BAZ ($ item); 505 00:46:48,020 --> 00:46:52,250 Teraz wywołanie funkcji. 506 00:46:52,250 --> 00:46:56,780 Argument podejmuje odniesienia, co oznacza, że ​​jeśli modyfikować 507 00:46:56,780 --> 00:47:00,390 jesteśmy modyfikując rzecz, że został przekazany w. 508 00:47:00,390 --> 00:47:04,420 I drukowania tego spodziewamy - chyba zawiedli składni - mamy 2, 11, 509 00:47:04,420 --> 00:47:06,300 tak było rzeczywiście zwiększany. 510 00:47:06,300 --> 00:47:08,790 Zawiadomienie musimy odniesień w 2 miejscach. 511 00:47:08,790 --> 00:47:13,050 Co zrobić, jeśli to zrobił? Co to znaczy? 512 00:47:13,050 --> 00:47:15,810 [Uczeń] Warto zmienić. >> Tak. 513 00:47:15,810 --> 00:47:18,290 Artykuł jest tylko kopia wartości w tablicy. 514 00:47:18,290 --> 00:47:26,670 Więc pozycja zmieni się na 2, ale tablica ['a'] nadal będzie 1. 515 00:47:26,670 --> 00:47:32,560 A co jeśli to zrobić? 516 00:47:32,560 --> 00:47:39,260 Teraz pozycja jest wysyłana jako kopię baz. 517 00:47:39,260 --> 00:47:46,330 Więc kopia argumentu zostanie zwiększony do 2, 518 00:47:46,330 --> 00:47:49,240 ale sama nigdy nie została pozycja zwiększana do 2. 519 00:47:49,240 --> 00:47:52,880 I pozycja jest to samo, co wspornika tablicy czymkolwiek, 520 00:47:52,880 --> 00:47:55,380 tak, że tablica nie została zwiększona. 521 00:47:55,380 --> 00:47:57,960 Tak więc oba te miejsca potrzebują. 522 00:47:57,960 --> 00:48:03,830 >> PHP jest zwykle bardzo mądry o tym. 523 00:48:03,830 --> 00:48:06,570 Możesz myśleć, że chcę przekazać przez odniesienie - 524 00:48:06,570 --> 00:48:09,560 To był właściwie pytanie na jednym z psets. 525 00:48:09,560 --> 00:48:14,480 Było questions.txt rzeczą gdzie powiedział, 526 00:48:14,480 --> 00:48:19,280 Dlaczego warto przekazać tę struct przez odwołanie? 527 00:48:19,280 --> 00:48:21,250 Jaka była odpowiedź na to? 528 00:48:21,250 --> 00:48:25,100 [Uczeń] Więc nie trzeba skopiować coś wielkiego. >> Tak. 529 00:48:25,100 --> 00:48:32,920 Struct może być dowolnie duża, a kiedy przechodzą w struct jako argument 530 00:48:32,920 --> 00:48:36,800 potrzebuje skopiować ten cały struct przekazać je do funkcji, 531 00:48:36,800 --> 00:48:40,410 natomiast jeżeli po prostu przekazać struct przez odniesienie 532 00:48:40,410 --> 00:48:46,530 potem po prostu musi kopiować 4-bajtowy adres jako argument funkcji. 533 00:48:48,520 --> 00:48:52,320 PHP jest trochę lepsze niż to. 534 00:48:52,320 --> 00:49:00,650 Jeśli mam jakąś funkcję i przejść do niego tablicę 1.000 rzeczy, 535 00:49:00,650 --> 00:49:03,990 to oznacza, że ​​będzie musiał skopiować cały 1.000 z tych rzeczy 536 00:49:03,990 --> 00:49:10,450 przekazać je do funkcji? Nie musi to zrobić natychmiast. 537 00:49:10,450 --> 00:49:15,940 Jeśli wewnątrz tej funkcji nigdy faktycznie modyfikuje foo, 538 00:49:15,940 --> 00:49:22,660 więc jeśli ($ foo === 'hello') zwróci true.; 539 00:49:22,660 --> 00:49:26,460 Zauważ, że nigdy właściwie zmodyfikowane wnętrze argumentem tej funkcji, 540 00:49:26,460 --> 00:49:30,010 co oznacza, że ​​wszystko, co zostało przekazywane jako nie należy foo kopiowane 541 00:49:30,010 --> 00:49:32,100 ponieważ nie jest modyfikacją. 542 00:49:32,100 --> 00:49:39,240 Więc sposób PHP działa to argumenty zawsze są przekazywane przez referencję 543 00:49:39,240 --> 00:49:42,170 aż faktycznie spróbować zmodyfikować go. 544 00:49:42,170 --> 00:49:51,160 Teraz, jeśli mówię $ foo + +, będzie teraz zrobić kopię oryginalnego foo i modyfikować kopię. 545 00:49:51,160 --> 00:49:53,090 Pozwala to zaoszczędzić trochę czasu. 546 00:49:53,090 --> 00:49:58,210 Jeśli nigdy nie dotykać tej ogromnej tablicy, nigdy tak naprawdę go zmodyfikować, 547 00:49:58,210 --> 00:50:02,360 nie trzeba zrobić kopię, 548 00:50:02,360 --> 00:50:06,640 natomiast jeśli tylko umieścić ten znak handlowego to znaczy, że nie ma nawet go skopiować 549 00:50:06,640 --> 00:50:08,640 nawet jeśli nie modyfikować. 550 00:50:08,640 --> 00:50:10,680 Takie zachowanie nazywa się copy-on-write. 551 00:50:10,680 --> 00:50:17,380 Zobaczysz je w innych miejscach, zwłaszcza jeśli wziąć kurs systemu operacyjnego. 552 00:50:17,380 --> 00:50:23,880 Copy-on-write to całkiem zwykły wzór, w którym nie trzeba zrobić kopię coś 553 00:50:23,880 --> 00:50:26,650 chyba że to faktycznie zmienia. Tak. 554 00:50:26,650 --> 00:50:29,520 [Uczeń] Co jeśli miał przyrost wewnątrz testu, 555 00:50:29,520 --> 00:50:33,700 tak tylko 1 element z 1.000 należałoby zmienić? 556 00:50:33,700 --> 00:50:38,770 Nie jestem pewien. 557 00:50:38,770 --> 00:50:51,250 Myślę, że byłoby skopiować całą rzecz, ale jest możliwe, to jest na tyle sprytny, że - 558 00:50:51,250 --> 00:51:00,020 Właściwie, co ja to sobie wyobrazić mieliśmy tablicę, która wygląda tak: $ tablica2 = [ 559 00:51:00,020 --> 00:51:11,000 Następnie index '' jest tablica [1 2 3 4], a indeksu "b" jest tablicą cokolwiek. 560 00:51:11,000 --> 00:51:15,380 Muszę przecinków pomiędzy wszystkich tych. Wyobraź sobie, że są przecinki. 561 00:51:15,380 --> 00:51:21,210 Następnie 'c' jest 3 wartości. 562 00:51:24,210 --> 00:51:26,290 Okay. 563 00:51:26,290 --> 00:51:33,440 Powiedzmy, że mamy $ baz ($ tablica2); 564 00:51:33,440 --> 00:51:36,540 gdzie baz nie wziąć to jako odnośnik. 565 00:51:43,510 --> 00:51:47,370 Więc $ foo ['c'] + +; 566 00:51:47,370 --> 00:51:52,340 To jest taki przykład, gdzie mijamy tablica2 jako argument 567 00:51:52,340 --> 00:51:57,010 a następnie jest modyfikacja określonego indeksu tablicy, zwiększając to. 568 00:51:57,010 --> 00:52:01,090 Szczerze mówiąc nie mam pojęcia co PHP ma zamiar zrobić. 569 00:52:01,090 --> 00:52:07,200 To można łatwo zrobić kopię całej rzeczy, ale jeśli jest mądry, 570 00:52:07,200 --> 00:52:15,030 będzie wykonanie kopii tych kluczy, gdzie będzie to miało swoją odrębną wartość 571 00:52:15,030 --> 00:52:20,620 ale można jeszcze wskazać na samej tablicy 1,2,3,4 572 00:52:20,620 --> 00:52:22,320 i może jeszcze w tym samym punktu tablicy. 573 00:52:22,320 --> 00:52:24,170 Będę iPad to. 574 00:52:28,900 --> 00:52:45,950 Mijamy w tej tablicy, gdzie ten facet punkty 3, wskazuje to facet [1,2,3,4], 575 00:52:45,950 --> 00:52:51,350 Ten facet wskazuje na [34, ...] 576 00:52:51,350 --> 00:52:58,590 Teraz, kiedy przekazujemy go do baz, to modyfikujemy to. 577 00:52:58,590 --> 00:53:03,550 Jeśli PHP jest inteligentny, to może po prostu zrobić - 578 00:53:11,850 --> 00:53:18,230 Mieliśmy jeszcze skopiować trochę pamięci, ale jeśli były te ogromne zagnieżdżone subarrays 579 00:53:18,230 --> 00:53:21,560 nie trzeba kopiować tych. 580 00:53:21,560 --> 00:53:27,530 Nie wiem, czy to, co robi, ale mogę sobie wyobrazić, że to robić. 581 00:53:29,050 --> 00:53:36,690 Jest to również dość duża zaleta C przez PHP. 582 00:53:36,690 --> 00:53:40,320 >> PHP sprawia, że ​​życie jest o wiele łatwiejsze dla wielu rzeczy, 583 00:53:40,320 --> 00:53:45,060 ale niby nie mają żadnego pojęcia, jak dobrze będzie wykonywać 584 00:53:45,060 --> 00:53:52,530 bo nie mam pojęcia, pod maską, gdy robi te kopie rzeczy, 585 00:53:52,530 --> 00:53:55,170 oh, jest to, że będzie stała kopia razem 586 00:53:55,170 --> 00:54:01,140 jest to po prostu zmieni się 1 wskaźnik, czy to będzie śmiesznie trudny liniowy kopia? 587 00:54:01,140 --> 00:54:03,000 Co zrobić, jeśli nie można znaleźć miejsca? 588 00:54:03,000 --> 00:54:06,760 To wtedy trzeba uruchomić zbieranie śmieci, aby uzyskać pewne więcej miejsca? 589 00:54:06,760 --> 00:54:11,210 I zbieranie śmieci może dowolnie długo. 590 00:54:11,210 --> 00:54:13,600 W języku C nie musisz martwić się o tych rzeczach. 591 00:54:13,600 --> 00:54:19,780 Każda linia pisania Możesz bardzo dużo o tym, jak rozum to będzie wykonać. 592 00:54:26,800 --> 00:54:29,150 >> Spójrzmy wstecz na te. 593 00:54:35,400 --> 00:54:37,520 Jak miłe jest to, że nie masz do czynienia z funkcji mieszania, 594 00:54:37,520 --> 00:54:39,010 związane listy, albo coś takiego? 595 00:54:39,010 --> 00:54:41,980 Od pracy z tabel mieszania jest tak łatwo się teraz, tutaj jest zabawa puzzle pracować. 596 00:54:41,980 --> 00:54:45,920 Otwórz plik o nazwie unique.php aw nim napisać program PHP 597 00:54:45,920 --> 00:54:48,330 (Znany również jako "skryptu"). 598 00:54:48,330 --> 00:54:55,700 Mamy tendencję, aby połączyć je skrypty jeśli są krótkie rzeczy, które działają w wierszu poleceń. 599 00:54:55,700 --> 00:55:02,950 Zasadniczo, każdy język, że nie skompilować, ale masz zamiar uruchomić plik wykonywalny 600 00:55:02,950 --> 00:55:05,920 w linii poleceń, można wywołać ten skrypt wykonywalny. 601 00:55:05,920 --> 00:55:08,510 Mógłbym równie dobrze napisać program w C który robi to, 602 00:55:08,510 --> 00:55:12,300 ale ja nie nazywam to skrypt od kiedy pierwszy raz go skompilować i uruchomić program. 603 00:55:12,300 --> 00:55:15,480 Ale ten program PHP mamy zamiar wywołać skrypt. 604 00:55:15,480 --> 00:55:23,830 Lub jeśli napisał to w Pythonie lub Perl lub Node.js ani z tych rzeczy, 605 00:55:23,830 --> 00:55:26,500 którą nazywamy je wszystkie skrypty, bo je uruchomić w wierszu polecenia 606 00:55:26,500 --> 00:55:30,040 ale nie ich kompilacji. 607 00:55:30,860 --> 00:55:33,400 Możemy to zrobić dość szybko. 608 00:55:36,960 --> 00:55:41,480 Nie będziemy używać argv. Miejmy tylko dmuchać przez to. 609 00:55:41,480 --> 00:55:45,730 Nazwijmy to wyjątkowy, napisać program. 610 00:55:45,730 --> 00:55:49,400 Można założyć, że wejście będzie zawierać jedno słowo w wierszu. 611 00:55:49,400 --> 00:55:52,020 Właściwie, argv będzie dość banalny w obsłudze. 612 00:56:03,730 --> 00:56:06,720 unique.php. 613 00:56:08,550 --> 00:56:13,750 Pierwszą rzeczą po pierwsze, chcemy sprawdzić czy zostały przekazane 1 argument wiersza polecenia. 614 00:56:13,750 --> 00:56:20,900 Tak jak można się spodziewać ARGC i ARGV w C, nadal mamy te w PHP. 615 00:56:20,900 --> 00:56:33,900 Więc jeśli ($ argc! == 2) wtedy nie będzie zajmować się drukowania wiadomości lub cokolwiek. 616 00:56:33,900 --> 00:56:37,340 Ja po prostu wyjść, kod błędu 1. 617 00:56:37,340 --> 00:56:41,340 Mógłbym także powrócić 1. 618 00:56:41,340 --> 00:56:53,180 Rzadko w PHP czy w tym stanie, w którym jesteśmy na - 619 00:56:53,180 --> 00:56:57,820 Zwykle jesteś w funkcji o nazwie przez funkcję o nazwie przez funkcję o nazwie przez funkcję. 620 00:56:57,820 --> 00:57:02,070 A jeśli coś pójdzie nie tak i po prostu chcesz, aby zakończyć wszystko w całości, 621 00:57:02,070 --> 00:57:05,680 zjazd po prostu kończy program. 622 00:57:05,680 --> 00:57:08,160 To samo występuje w C. 623 00:57:08,160 --> 00:57:10,700 Jeśli jesteś w funkcji w funkcji w funkcji w funkcji 624 00:57:10,700 --> 00:57:17,540 i chcesz po prostu zabić program można wywołać wyjście i będzie to tylko wyjść. 625 00:57:17,540 --> 00:57:23,120 Ale w PHP jest bardziej rzadkie, że jesteśmy na tym najwyższym poziomie. 626 00:57:23,120 --> 00:57:26,090 Zazwyczaj jesteśmy w środku jakiejś funkcji, więc nazywamy wyjście 627 00:57:26,090 --> 00:57:29,650 tak, że nie mamy do powrotu do 1 rzeczy, które następnie realizuje tam błąd 628 00:57:29,650 --> 00:57:32,270 tak, że zwraca się, jeśli uznaje, że nie było błędu. 629 00:57:32,270 --> 00:57:35,270 Nie chcemy, aby sobie z tym poradzić, więc wyjść (1); 630 00:57:35,270 --> 00:57:38,240 Powrót (1), w tym przypadku za równoważne. 631 00:57:38,240 --> 00:57:44,000 >> Wtedy to, co chcemy, aby otworzyć chcemy fopen. 632 00:57:44,000 --> 00:57:46,760 Argumenty będą wyglądać dość podobnie. 633 00:57:46,760 --> 00:57:51,600 Chcemy fopen ($ argv [1], a my chcemy, aby go otworzyć do czytania. 634 00:57:51,600 --> 00:57:55,720 Które zwraca zasób który zamierzamy zadzwonić f. 635 00:57:55,720 --> 00:58:02,180 Wygląda to bardzo podobne do tego, jak robi to C chyba nie mamy do powiedzenia plik *. 636 00:58:02,180 --> 00:58:06,170 Zamiast po prostu powiedzieć, $ f. Okay. 637 00:58:06,170 --> 00:58:17,190 Właściwie, myślę, że to nawet daje nam wskazówkę co do funkcji PHP o nazwie pliku. Plik PHP. 638 00:58:17,190 --> 00:58:23,990 Co to będzie zrobić, to przeczytać cały plik do tablicy. 639 00:58:23,990 --> 00:58:29,770 Nie trzeba nawet fopen go. To zrobi to za Ciebie. 640 00:58:37,450 --> 00:58:43,700 Więc $ lines = file ($ argv [1]); 641 00:58:43,700 --> 00:58:49,680 Teraz wszystkie wiersze pliku są w linii. Teraz chcemy, aby posortować wiersze. 642 00:58:49,680 --> 00:58:52,180 Jak możemy posortować linie? 643 00:58:52,180 --> 00:58:54,920 Mamy posortować wiersze. 644 00:58:54,920 --> 00:58:58,080 I teraz możemy wydrukować je lub cokolwiek. 645 00:58:58,080 --> 00:59:05,580 Prawdopodobnie najłatwiej jest foreach ($ lines as $ linia) echo $ line; 646 00:59:05,580 --> 00:59:10,960 [Uczeń] nie możemy nawet przekroczyć linii odwołując coś w rodzaju? 647 00:59:10,960 --> 00:59:28,850 To jest, gdzie rodzaj zdefiniowany jako rodzaj funkcji (& $ tablica). 648 00:59:28,850 --> 00:59:32,650 Podczas wywoływania funkcji nie przekazać go przez odniesienie. 649 00:59:32,650 --> 00:59:36,900 Jest to funkcja, która określa ją jako biorąc go jako punkt odniesienia. 650 00:59:36,900 --> 00:59:40,900 To jest dokładnie to, co się stało 651 00:59:40,900 --> 00:59:46,220 kiedy postawił wszystko na naszych serwerach, kiedy poszliśmy z 5,3 do 5,4. 652 00:59:46,220 --> 00:59:53,800 Aż do 5,4, to było całkowicie uzasadnione. 653 00:59:53,800 --> 00:59:58,740 Funkcja nie spodziewamy się go jako punkt odniesienia, ale można przekazać go jako odniesienie 654 00:59:58,740 --> 01:00:02,860 więc jeśli funkcja nie stanie zmodyfikować go, to jeszcze zmienione. 655 01:00:02,860 --> 01:00:05,850 Począwszy od 5,4, nie powinieneś tego robić. 656 01:00:05,850 --> 01:00:11,740 Więc teraz jedynym sposobem przechodzą przez odniesienie jest, jeśli funkcja jawnie robi. 657 01:00:11,740 --> 01:00:19,840 Jeśli nie chcesz, aby go zmodyfikować, a następnie trzeba zrobić kopię $ = $ linii i kopia pass. 658 01:00:19,840 --> 01:00:24,820 Więc teraz linie zostaną zachowane i kopia zostanie zmieniony. 659 01:00:27,670 --> 01:00:31,460 php.unique.php. Mógłbym pomieszane coś. 660 01:00:31,460 --> 01:00:33,190 Unexpected "sort". 661 01:00:38,320 --> 01:00:43,850 Nie będzie to coś, że robi to dla nas. 662 01:00:43,850 --> 01:00:45,820 To nie jest nawet tam. 663 01:00:45,820 --> 01:00:52,140 Zauważyć podczas przeczytać instrukcję, że pierwszy argument należy spodziewać się tablica 664 01:00:52,140 --> 01:00:56,490 i jest wykonane przez odniesienie. 665 01:00:58,160 --> 01:01:03,540 Dlaczego jest to skargę do mnie? Bo ja mam ten rodzaj funkcji jeszcze tutaj, że nie chcę. 666 01:01:03,540 --> 01:01:09,210 Okay, php.unique.php. Nie przekazać go argument, bo nie ma pliku. 667 01:01:09,210 --> 01:01:13,560 To php.unique.php na test.php. 668 01:01:13,560 --> 01:01:19,080 Oto test.php wszystkie wydrukowane w ładnym porządku sortowanie. 669 01:01:19,080 --> 01:01:24,600 Zauważ, że posortowanych jest dziwne dla pliku z kodem 670 01:01:24,600 --> 01:01:27,460 ponieważ wszystkie nasze puste linie będą na pierwszym miejscu 671 01:01:27,460 --> 01:01:30,190 następnie będą pochodzić wszystkich naszych 1 poziomu wcięć 672 01:01:30,190 --> 01:01:33,360 następnie przyjść wszyscy nasi bez wcięć. 673 01:01:33,360 --> 01:01:38,620 Tak. >> [Uczeń] Tak dla kodu źródłowego nie był przekazywany przez odwołanie? 674 01:01:38,620 --> 01:01:42,240 Jest to, że na ogół przekazywane przez wartość? 675 01:01:42,240 --> 01:01:50,240 [Bowden] Po wywołaniu funkcji, nigdy nie określa, czy to było przekazywane przez referencję. 676 01:01:50,240 --> 01:01:53,960 To określenie funkcji, które określa, czy została przyjęta przez odniesienie. 677 01:01:53,960 --> 01:01:59,450 I patrząc na definicji funkcji sort lub po prostu patrząc na to, 678 01:01:59,450 --> 01:02:02,820 trwa argumentu przez odniesienie. 679 01:02:02,820 --> 01:02:07,160 Więc niezależnie od tego, czy chcesz go wziąć go przez odniesienie, to robi się to przez odniesienie. 680 01:02:07,160 --> 01:02:10,200 Modyfikuje tablicy w miejscu. 681 01:02:10,200 --> 01:02:17,400 To jest nie tylko dozwolone. Nie wolno tego robić. >> [Uczeń] Oh, w porządku. 682 01:02:17,400 --> 01:02:22,410 [Bowden] To, sortowanie zajmie linie przez odniesienie i modyfikować. 683 01:02:22,410 --> 01:02:26,850 I znowu, jeśli nie chcesz, aby to zrobić, można zrobić kopię rodzaju. 684 01:02:26,850 --> 01:02:35,850 Nawet w tym przypadku, kopiowanie nie jest faktycznie kopia linii. 685 01:02:35,850 --> 01:02:40,620 To po prostu wskazuje na to samo, aż po raz pierwszy zostaje zmieniony, 686 01:02:40,620 --> 01:02:44,430 gdzie jest 1-cia zamiar się modyfikować w funkcji sortowania, 687 01:02:44,430 --> 01:02:50,940 gdzie, bo to copy-on-write, teraz kopię karty zostanie wykonane. 688 01:02:57,500 --> 01:03:04,250 Można też to zrobić. To jest inne miejsce, można zobaczyć znak handlowego. 689 01:03:04,250 --> 01:03:07,190 Widać to w pętli foreach, widzisz to w deklaracji funkcji, 690 01:03:07,190 --> 01:03:10,040 i widać to, gdy tylko przypisywania zmiennych. 691 01:03:10,040 --> 01:03:12,350 Teraz osiągnęliśmy nic to robi 692 01:03:12,350 --> 01:03:15,600 ponieważ kopiowanie i linie są dosłownie to samo. 693 01:03:15,600 --> 01:03:19,940 Możesz używać linii i skopiować zamiennie. 694 01:03:19,940 --> 01:03:25,430 Możesz zrobić kopię unset ($), i że nie usuwa linie, 695 01:03:25,430 --> 01:03:29,120 po prostu traci odniesienie do tej samej rzeczy. 696 01:03:29,120 --> 01:03:33,440 Więc z tego punktu, teraz linie to jedyny sposób można uzyskać dostęp do linii. 697 01:03:36,450 --> 01:03:38,770 >> Pytania? 698 01:03:41,000 --> 01:03:42,460 Tak. 699 01:03:42,460 --> 01:03:45,880 [Uczeń] Zupełnie nie na temat, ale nie masz do zamknięcia PHP z - >> nie masz. 700 01:03:45,880 --> 01:03:47,730 Okay. 701 01:03:47,730 --> 01:03:53,790 [Bowden] chciałbym iść tak daleko, aby powiedzieć, że jest złą praktyką, aby je zamknąć. 702 01:03:53,790 --> 01:03:57,580 To chyba przesada, zwłaszcza w skrypcie, 703 01:03:57,580 --> 01:04:03,740 ale zobaczymy, co się stanie, jeśli to zrobić. 704 01:04:03,740 --> 01:04:08,890 Że nic nie zrobił. Co zrobić, jeśli chciałam - [wzdycha] 705 01:04:13,870 --> 01:04:16,960 Trzeba przekazać argument. 706 01:04:19,000 --> 01:04:22,050 Strzelać. Nazwałem to źle. 707 01:04:24,340 --> 01:04:28,310 Więc php.unique.php z argumentem. 708 01:04:28,310 --> 01:04:30,980 Teraz nie trzeba nawet tego. 709 01:04:34,520 --> 01:04:37,740 Będę go przekazywać poprawny argument. 710 01:04:37,740 --> 01:04:42,050 To, co jest drukowane druk. 711 01:04:45,260 --> 01:04:50,080 Jestem drukowania kopii i kopia nie istnieje. Więc linie. 712 01:04:53,650 --> 01:04:58,270 To wszystko, co drukowane, a następnie zauważyć wszystkie te śmieci tu, 713 01:04:58,270 --> 01:05:06,690 ponieważ w PHP, który jest cokolwiek poza PHP tagów 714 01:05:06,690 --> 01:05:09,520 jest po prostu będzie drukowane dosłownie. 715 01:05:09,520 --> 01:05:18,050 Dlatego HTML, to jest tak miło, że mogę zrobić div bla, bla, bla klasę lub cokolwiek, 716 01:05:18,050 --> 01:05:25,140 bla, bla, bla, a następnie wykonaj kod PHP, a następnie wykonaj div zakończenia. 717 01:05:25,140 --> 01:05:36,460 A teraz to mogę wydrukować mój miły div do góry, wszystko, PHP drukowanej div na dole. 718 01:05:36,460 --> 01:05:43,510 Katastrofalne, gdy coś takiego się dzieje, co jest dość powszechne, 719 01:05:43,510 --> 01:05:47,930 tylko NEWLINE rozproszenia na dole pliku. 720 01:05:47,930 --> 01:05:50,940 Nie sądzę, że to będzie wielka sprawa 721 01:05:50,940 --> 01:05:58,660 aż pod uwagę fakt, że w przeglądarkach - 722 01:05:58,660 --> 01:06:03,880 >> Jak przekierowuje pracy lub w zasadzie każda praca nagłówki 723 01:06:03,880 --> 01:06:07,980 podczas wykonywania połączenia do serwisu WWW i wysyła z powrotem te wszystkie nagłówki i miejscach 724 01:06:07,980 --> 01:06:12,020 jak odpowiedzi 200 lub odpowiedzi przekierowania lub cokolwiek, 725 01:06:12,020 --> 01:06:18,230 nagłówki są ważne tylko do pierwszego bajtu danych jest wysyłany. 726 01:06:18,230 --> 01:06:23,140 Możesz przekierować tysiące razy, ale jak tylko pierwszy bajt danych wysłany 727 01:06:23,140 --> 01:06:26,120 nie powinieneś przekierować ponownie. 728 01:06:26,120 --> 01:06:31,860 >> Jeśli masz bezpańskich nowej linii na końcu pliku 729 01:06:31,860 --> 01:06:37,260 i powiedzmy, że można korzystać z tej funkcji, a następnie chcesz - 730 01:06:41,580 --> 01:06:52,870 Powiedzmy, że jest to inny plik to index.php i require_once coś - 731 01:06:52,870 --> 01:06:56,920 Nie mogę myśleć o dobrym przykładem. 732 01:06:56,920 --> 01:07:04,740 Problem dzieje się, kiedy ta linia na dole zostanie wyświetlony. 733 01:07:04,740 --> 01:07:08,660 Nie chcesz nic zostały echem jeszcze. 734 01:07:10,820 --> 01:07:15,700 Nawet jeśli nie miał zamiaru na nic coraz echem, coś dostał echem 735 01:07:15,700 --> 01:07:17,990 i tak teraz nie powinniśmy się już więcej wysyłać nagłówki 736 01:07:17,990 --> 01:07:20,030 i masz zamiar się skarg. 737 01:07:22,170 --> 01:07:24,420 Po prostu nie potrzebuję tych tagów zamykających. 738 01:07:24,420 --> 01:07:27,420 Jeśli planujesz zrobić coś z HTML - 739 01:07:27,420 --> 01:07:30,490 i jest to całkowicie uzasadnione i tutaj div cokolwiek 740 01:07:30,490 --> 01:07:39,450 , a następnie w tym miejscu można lub nie można włączyć je. 741 01:07:39,450 --> 01:07:41,590 To naprawdę nie ma znaczenia. 742 01:07:41,590 --> 01:07:45,450 Ale w skryptach PHP to rzadko, aby je zamknąć. 743 01:07:45,450 --> 01:07:50,400 Kiedy wszystko jest PHP, absolutnie wszystko, 744 01:07:50,400 --> 01:07:55,460 naprawdę nie trzeba go zamknąć / nie należy go zamknąć. 745 01:08:02,030 --> 01:08:05,720 >> Radzenie sobie ze strun jest o wiele ładniejszy niż w C. 746 01:08:05,720 --> 01:08:09,470 W PHP można określić ciąg pojedyncze lub podwójne cudzysłowy. 747 01:08:09,470 --> 01:08:12,820 Z apostrofami nie można używać "Escape" sekwencje. 748 01:08:12,820 --> 01:08:17,640 Ciągle uciekać, bla, bla, bla. 749 01:08:19,920 --> 01:08:24,010 Więc printf jest bardzo rzadkie w PHP. 750 01:08:24,010 --> 01:08:32,290 Chyba byłoby użyć printf gdybym chciał zrobić coś takiego - w Pset 5 użyłeś sprintf lub cokolwiek. 751 01:08:32,290 --> 01:08:36,060 Ale chcesz zrobić 001.jpg i 002.jpg. 752 01:08:36,060 --> 01:08:40,300 Więc dla tego rodzaju rzeczy, gdzie rzeczywiście chcesz sformatować tekst chciałbym użyć printf. 753 01:08:40,300 --> 01:08:44,689 Ale w przeciwnym razie po prostu użyć konkatenacji. 754 01:08:44,689 --> 01:08:47,000 Tak naprawdę nigdy nie używać printf. 755 01:08:49,229 --> 01:09:00,170 My tylko różnicowania szczegóły między apostrofami i cudzysłowy. 756 01:09:00,170 --> 01:09:07,490 Największą różnicą jest to, że pojedyncze cytaty, zostanie on wydrukowany dosłownie. 757 01:09:07,490 --> 01:09:15,390 Nie ma char typ danych w PHP, w przeciwieństwie do C, więc jest to równoznaczne z tym. 758 01:09:15,390 --> 01:09:17,970 Są oba ciągi. 759 01:09:17,970 --> 01:09:29,180 I miłą rzeczą pojedynczych strun cytat mógłbym powiedzieć 'Hello World! " bla, bla, bla, 760 01:09:29,180 --> 01:09:33,340 $ $ Woo. 761 01:09:33,340 --> 01:09:38,260 Co dzieje się podczas drukowania to wypisze to dosłownie. 762 01:09:38,260 --> 01:09:40,680 Pozbądźmy się wszystkich naszych rzeczy. 763 01:09:40,680 --> 01:09:44,700 Więc echo $ str1; 764 01:09:48,569 --> 01:09:56,570 Dosłownie wydrukowane wszystkie z tych rzeczy: znaki dolara, 765 01:09:56,570 --> 01:09:58,770 backslash n, które uważasz, że byłoby newlines - 766 01:09:58,770 --> 01:10:01,500 wszystkie z tych rzeczy wypisuje dosłownie. 767 01:10:01,500 --> 01:10:05,650 Jedyne co musisz uciec to pojedyncze cytaty 768 01:10:05,650 --> 01:10:09,470 bo inaczej to myślę, że to zamknięcie apostrofów. 769 01:10:09,470 --> 01:10:15,050 Cudzysłów, zupełnie inna. 770 01:10:20,300 --> 01:10:25,870 Już teraz widać, że podświetlanie składni jest cluing nas do tego, co o to, aby iść strasznie źle. 771 01:10:25,870 --> 01:10:36,190 php.unique. Undefined variable: woo, ponieważ ta jest interpretowana jako zmienna o nazwie woo. 772 01:10:36,190 --> 01:10:42,400 Podwójne cudzysłowy pozwala wstawić zmienne do - 773 01:10:42,400 --> 01:10:52,730 Powiedzmy $ name = "Rob"; 774 01:10:52,730 --> 01:10:58,020 Więc echo "Cześć, mam na imię $ name!"; 775 01:10:58,020 --> 01:11:09,260 Uznaje to jako zmienną. 776 01:11:09,260 --> 01:11:21,210 Kiedy uruchomić, że - i wstawić znak nowej linii - Witam, nazywam się Rob! i hello world! 777 01:11:21,210 --> 01:11:24,910 To dlatego, że nigdy nie usuwa drukowanie woo powyżej. 778 01:11:24,910 --> 01:11:30,020 Jest 1 kolejny krok można zrobić. 779 01:11:30,020 --> 01:11:39,250 Tablica $ = [1, 2, 3]; 780 01:11:39,250 --> 01:11:43,270 Co zrobić, aby wydrukować pierwszą indeks tablicy? 781 01:11:43,270 --> 01:11:45,150 Robisz $ tablica [0]. 782 01:11:45,150 --> 01:11:49,280 Podświetlanie składni jest wskazówka. Co to ma zrobić? 783 01:11:52,320 --> 01:11:54,510 php.unique. 784 01:11:54,510 --> 01:11:59,860 Cześć, nazywam się 1! co nie jest to, co chciałem. 785 01:11:59,860 --> 01:12:05,050 Podświetlanie składni mnie okłamał. 786 01:12:05,050 --> 01:12:13,020 Spróbujmy 'a' -> 1, 'b' -> 2. 787 01:12:18,450 --> 01:12:21,440 To w jaki sposób mam to napisać. 788 01:12:26,350 --> 01:12:32,160 Unexpected pojedynczy cudzysłów (T_ENCAPSED bla, bla, bla, bla, bla). 789 01:12:32,160 --> 01:12:41,780 Chodzi o to, że nie jest uznając to jako część tablicy. 790 01:12:41,780 --> 01:12:46,620 To nie uznając tego jako tablicy indeksowanej pismem a. 791 01:12:46,620 --> 01:12:49,870 Chcesz zrobić w nawiasach klamrowych, 792 01:12:49,870 --> 01:12:54,730 i teraz wszystko, co jest w tej nawiasem klamrowym będzie interpolowana, 793 01:12:54,730 --> 01:13:00,340 który jest słowo, którego używamy do magicznie wstawienie tych zmiennych w odpowiednich miejscach. 794 01:13:00,340 --> 01:13:04,280 Teraz robi to, php.unique i Hi, my name is 1! zgodnie z oczekiwaniami 795 01:13:04,280 --> 01:13:07,720 lub Hi, my name is Rob! 796 01:13:14,110 --> 01:13:23,130 Jedno, co miłe o apostrofach, że - 797 01:13:23,130 --> 01:13:28,480 Jest jakiś koszt interpolację. 798 01:13:30,520 --> 01:13:35,100 Jeśli użyć cudzysłowów, tłumacz musi przejść przez ten ciąg, 799 01:13:35,100 --> 01:13:41,500 upewniając się, że: "O, tu jest zmienna. Teraz muszę iść po tej zmiennej i wstawić go tutaj." 800 01:13:41,500 --> 01:13:48,930 Nawet, jeśli nie używać żadnych zmiennych, 801 01:13:48,930 --> 01:13:52,220 nic wewnątrz tych cudzysłowach należy interpolowana, 802 01:13:52,220 --> 01:13:56,800 ale to nadal będzie wolniej, ponieważ musi przejść przez podwójne cudzysłowy 803 01:13:56,800 --> 01:14:00,130 szukam rzeczy, które muszą być interpolowane. 804 01:14:00,130 --> 01:14:05,360 Więc pojedyncze cudzysłowy mogą być nieco szybciej, jeśli nic nie jest interpolowana, 805 01:14:05,360 --> 01:14:15,650 i staram się nawet użyć apostrofów dla "Cześć, mam na imię". $ Array ['a'] tak. 806 01:14:15,650 --> 01:14:20,430 Że będzie to odpowiednik tego, co mieliśmy wcześniej. 807 01:14:24,840 --> 01:14:28,440 Ale jest to kwestia preferencji. 808 01:14:28,440 --> 01:14:34,750 Jeśli używasz PHP, prawdopodobnie nie dbam o prędkości różnicy. 809 01:14:34,750 --> 01:14:39,480 Nie wystarczy, aby rozumować je na początku. 810 01:14:39,480 --> 01:14:43,030 >> Jakieś ostatnie pytania? 811 01:14:47,430 --> 01:14:51,710 >> Tak naprawdę nawet nie dostać przez to wszystko, ale to rzeczy było nudne. 812 01:14:51,710 --> 01:14:59,080 Ostatnią rzeczą jest to miłe w PHP jest, kiedy mamy do czynienia z HTML, 813 01:14:59,080 --> 01:15:06,450 będziesz używać go trochę, więc ładny składnię skrótów drukowania zmienną. 814 01:15:32,400 --> 01:15:36,730 Pominięciem PHP tutaj, jest to tzw krótkie znaczniki. 815 01:15:36,730 --> 01:15:44,330 Oficjalnie w PHP 5.4, jest to przestarzałe. 816 01:15:44,330 --> 01:15:48,640 Zaleca się umieścić php. 817 01:15:48,640 --> 01:15:55,770 To nadal jest obsługiwany, tak krótkich znaczników z 01:16:02,480 Jest domyślnie obsługiwane, więc można z nich korzystać, jak chcesz, i są one dość wygodne. 819 01:16:02,480 --> 01:16:05,700 >> Masz pytanie? 820 01:16:07,780 --> 01:16:09,270 Dobrze. 821 01:16:10,840 --> 01:16:13,800 >> Stay classy, ​​San Diego. 822 01:16:13,800 --> 01:16:16,070 [Śmieje się] 823 01:16:18,620 --> 01:16:22,660 Bye. [Śmieje się] 824 01:16:24,350 --> 01:16:28,470 [Oklaski] [śmiech] 825 01:22:46,460 --> 01:22:49,460 >> [CS50.TV]