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 таму што там здарылася, было ніякіх зьменаў паміж 05/03 і 05/04 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 Але як толькі я скінуць 2. індэкс, што было ў індэксе 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]