1 00:00:00,000 --> 00:00:11,330 2 00:00:11,330 --> 00:00:12,360 >> DAVID MALAN: Tudo bem. 3 00:00:12,360 --> 00:00:15,970 Este é CS50, e este é o final de semana nove. 4 00:00:15,970 --> 00:00:18,560 Tem sido um turbilhão sobre nos últimos dias. 5 00:00:18,560 --> 00:00:21,580 E sete conjunto de problemas, se você for joelho profundamente dentro dele, percebe que há um grande 6 00:00:21,580 --> 00:00:23,340 pouco novo que está lá dentro. 7 00:00:23,340 --> 00:00:26,660 Mas vamos ver se não podemos remendar tudo junto aqui brevemente 8 00:00:26,660 --> 00:00:29,230 antes, em seguida, desviando em mais outra direção e visão 9 00:00:29,230 --> 00:00:30,510 onde mais podemos ir. 10 00:00:30,510 --> 00:00:32,630 >> Então, até agora, nós já conversamos sobre HTML. 11 00:00:32,630 --> 00:00:33,740 Nós conversamos sobre CSS. 12 00:00:33,740 --> 00:00:34,705 Nós conversamos sobre PHP. 13 00:00:34,705 --> 00:00:36,520 Você começou a experimentar SQL. 14 00:00:36,520 --> 00:00:38,360 Hoje, vamos falar um pouco sobre JavaScript. 15 00:00:38,360 --> 00:00:41,230 Mas como fazer tudo isso díspares línguas se encaixam? 16 00:00:41,230 --> 00:00:44,970 >> Então nós conversamos na semana passada sobre o noção de ter um servidor. 17 00:00:44,970 --> 00:00:48,470 Então vamos chamar este retângulo como um servidor web aqui. 18 00:00:48,470 --> 00:00:52,200 E um servidor web serve certamente arquivos. 19 00:00:52,200 --> 00:00:54,640 E alguns desses arquivos podem ser arquivos HTML. 20 00:00:54,640 --> 00:00:58,270 Então, uma das coisas que um servidor web pode cuspir pode ser um arquivo que 21 00:00:58,270 --> 00:01:01,290 nós vamos chamar assim contendo um pouco de HTML. 22 00:01:01,290 --> 00:01:04,786 Assim, em termos leigos, o que O HTML permitem que você faça? 23 00:01:04,786 --> 00:01:06,036 >> AUDIÊNCIA: Olhar Página agradável. 24 00:01:06,036 --> 00:01:09,670 25 00:01:09,670 --> 00:01:12,310 >> DAVID MALAN: OK, fazer uma página de boa aparência, embora eu acho que eu tenho provado 26 00:01:12,310 --> 00:01:13,370 que de outra forma. 27 00:01:13,370 --> 00:01:18,250 Assim HTML deixa você colocar para fora páginas estruturalmente, e ele permite que você 28 00:01:18,250 --> 00:01:22,410 tipo de esteticamente marcar uma página, marcar o conteúdo estático, de modo que você 29 00:01:22,410 --> 00:01:23,640 pode, então, vê-lo com um web browser. 30 00:01:23,640 --> 00:01:24,690 >> Mas essa é a chave. 31 00:01:24,690 --> 00:01:26,130 É conteúdo estático. 32 00:01:26,130 --> 00:01:28,590 Você escreve-lo, salvá-lo, e, em seguida, enviá-lo para você. 33 00:01:28,590 --> 00:01:31,130 E o servidor web serve então -lo para os seus visitantes. 34 00:01:31,130 --> 00:01:35,700 >> Mas nós estilizar coisas usando um diferente linguagem completamente. 35 00:01:35,700 --> 00:01:40,150 Começamos a usar um atributo de estilo em certos tags. 36 00:01:40,150 --> 00:01:43,400 E o atributo de estilo, vamos definir coisas como o tamanho da fonte e cor. 37 00:01:43,400 --> 00:01:46,460 E você provavelmente já começaram a descobrir, ou você vai logo para a final 38 00:01:46,460 --> 00:01:50,160 projetos potencialmente, ainda outro propriedades que você pode usar no CSS. 39 00:01:50,160 --> 00:01:54,710 E assim, em termos leigos, o que realmente, será que o CSS faz? 40 00:01:54,710 --> 00:01:57,810 Esses são apenas alguns exemplos dos mesmos. 41 00:01:57,810 --> 00:02:00,730 O que é que você faz isso HTML Não parece que a partir de 42 00:02:00,730 --> 00:02:02,606 que já vimos até agora? 43 00:02:02,606 --> 00:02:04,850 >> AUDIÊNCIA: Definir estilos por si mesmo. 44 00:02:04,850 --> 00:02:06,700 >> DAVID MALAN: Definir estilos por si mesmo. 45 00:02:06,700 --> 00:02:10,280 Assim, definir as coisas como aulas de como você pode ter encontrado, ou exclusivamente 46 00:02:10,280 --> 00:02:13,800 identificar nós em um documento para que você pode estilizar-los. 47 00:02:13,800 --> 00:02:16,890 Mas, mais especificamente, eu diria que a CSS realmente permite que você levar as coisas a 48 00:02:16,890 --> 00:02:20,790 última milha e permite que você especifique muito mais precisamente a estética, 49 00:02:20,790 --> 00:02:24,340 enquanto HTML para a maior parte deixa você estruturar suas páginas. 50 00:02:24,340 --> 00:02:27,310 >> E mesmo que existam alguns padrões, como vimos a tag para 51 00:02:27,310 --> 00:02:30,690 uma tag título, que a grosso modo fez coisas grandes e em negrito. 52 00:02:30,690 --> 00:02:34,250 Isso é uma definição muito genérica da marca - grande e corajoso. 53 00:02:34,250 --> 00:02:35,260 O tamanho da fonte é essa? 54 00:02:35,260 --> 00:02:36,080 Que cor é essa? 55 00:02:36,080 --> 00:02:36,890 Como negrito é isso? 56 00:02:36,890 --> 00:02:39,830 E CSS permite mais finamente sintonizar coisas assim. 57 00:02:39,830 --> 00:02:42,150 Bem como disposição, como alguns de vocês já viram. 58 00:02:42,150 --> 00:02:45,180 >> E, francamente, CSS é um pouco de uma linguagem confusa. 59 00:02:45,180 --> 00:02:48,370 É muito poderosa em que você pode fazer literalmente qualquer site que você tem 60 00:02:48,370 --> 00:02:51,880 visto na web hoje com ele, mas é um tipo de dor no pescoço. 61 00:02:51,880 --> 00:02:54,440 E alguns de vocês já bateu sua cabeça contra as paredes já só para fazer 62 00:02:54,440 --> 00:02:58,560 algo estúpido como centro de um menu no conjunto de problemas de sete se você chegou a 63 00:02:58,560 --> 00:02:59,470 Nesse ponto já. 64 00:02:59,470 --> 00:03:01,530 >> Mas perceber, essas coisas ficar mais fácil com o tempo. 65 00:03:01,530 --> 00:03:02,820 Você começa a notar padrões. 66 00:03:02,820 --> 00:03:06,020 E mais uma vez, o Google vai ser seu amigo para as várias maneiras em que você pode 67 00:03:06,020 --> 00:03:07,220 resolver estes tipos de problemas. 68 00:03:07,220 --> 00:03:11,520 >> E atrevo-me a dizer, com CSS, HTML e mais Geralmente, você pode resolver problemas em 69 00:03:11,520 --> 00:03:15,910 muitas outras maneiras, que pode muito bem ser correto, do que você poderia 70 00:03:15,910 --> 00:03:18,900 em algo como C, mesmo agora PHP ou JavaScript. 71 00:03:18,900 --> 00:03:21,080 Há apenas muitos diferentes maneiras para colocar as coisas para fora. 72 00:03:21,080 --> 00:03:22,570 >> Mas isso começou a ficar bagunçado, dissemos. 73 00:03:22,570 --> 00:03:26,480 Apenas tipo de commingling seu HTML e seu CSS com o atributo de estilo foi 74 00:03:26,480 --> 00:03:27,590 um pouco desleixado. 75 00:03:27,590 --> 00:03:31,460 E, assim, em vez disse, mais ou menos abstratamente falando, que você deve 76 00:03:31,460 --> 00:03:34,050 pelo menos começar a fator o seu CSS provavelmente. 77 00:03:34,050 --> 00:03:37,430 Atributos não seu estilo, mas pelo menos usar a tag de estilo dentro do que 78 00:03:37,430 --> 00:03:38,840 parte da página web? 79 00:03:38,840 --> 00:03:39,560 >> AUDIÊNCIA: Head. 80 00:03:39,560 --> 00:03:40,120 >> DAVID MALAN: Na cabeça. 81 00:03:40,120 --> 00:03:43,270 Até agora, só tínhamos o título se lá, mas você também pode adicionar um estilo 82 00:03:43,270 --> 00:03:47,230 marcar, e você pode colocar o seu CSS aproximadamente falando em direção ao topo da página. 83 00:03:47,230 --> 00:03:52,550 Mas, então, levou as coisas um passo adiante e nós consignado que mais 84 00:03:52,550 --> 00:03:54,130 em um arquivo separado. 85 00:03:54,130 --> 00:03:57,240 >> E assim, esses dois arquivos foram de alguma forma, agora ligados. 86 00:03:57,240 --> 00:03:59,550 E, de fato, foi o tag que fez isso. 87 00:03:59,550 --> 00:04:02,920 E o que foi um dos abrangente motivações para a nossa factoring CSS 88 00:04:02,920 --> 00:04:04,057 tudo o mais? 89 00:04:04,057 --> 00:04:05,280 >> AUDIÊNCIA: Reutilização. 90 00:04:05,280 --> 00:04:05,785 >> DAVID MALAN: Reutilização. 91 00:04:05,785 --> 00:04:06,150 Certo? 92 00:04:06,150 --> 00:04:09,470 Você pode ter visto em p definir sete já que muitas das páginas, a 93 00:04:09,470 --> 00:04:12,260 página de compra, a página de venda, o portfolio página, são, provavelmente, 94 00:04:12,260 --> 00:04:13,550 estruturado forma um tanto semelhante. 95 00:04:13,550 --> 00:04:17,579 Há um logotipo CS50 finanças no topo a não ser que você decidiu mudá-lo. 96 00:04:17,579 --> 00:04:19,839 Há um rodapé na inferior das páginas. 97 00:04:19,839 --> 00:04:24,315 E CSS permite que você depois de levar para fora lo em um arquivo separado para que se 98 00:04:24,315 --> 00:04:27,780 você quer mudar alguma coisa no mundo ao longo de todo o seu site, você pode realmente 99 00:04:27,780 --> 00:04:29,390 basta alterá-lo em um lugar. 100 00:04:29,390 --> 00:04:32,750 >> Mas há um preço a pagar potencialmente por ter consignado o 101 00:04:32,750 --> 00:04:38,380 CSS do meu arquivo HTML em um separado arquivo de referência com o 102 00:04:38,380 --> 00:04:40,650 tag, que vimos na segunda-feira. 103 00:04:40,650 --> 00:04:43,850 O que poderia ser o lado negativo disso? 104 00:04:43,850 --> 00:04:48,830 Pensando de uma semana atrás, para quando estamos falando sobre HTTP e TCP / IP e como 105 00:04:48,830 --> 00:04:52,070 a internet funciona. 106 00:04:52,070 --> 00:04:53,530 Algo aqui? 107 00:04:53,530 --> 00:04:54,730 >> AUDIÊNCIA: É preciso mais tempo. 108 00:04:54,730 --> 00:04:55,470 >> DAVID MALAN: É preciso mais tempo. 109 00:04:55,470 --> 00:04:56,750 Por quê? 110 00:04:56,750 --> 00:04:59,450 >> AUDIÊNCIA: [inaudível]. 111 00:04:59,450 --> 00:04:59,750 >> DAVID MALAN: Yeah. 112 00:04:59,750 --> 00:05:01,240 Por isso, sem dúvida, leva um pouco mais de tempo. 113 00:05:01,240 --> 00:05:04,290 Porque um, o CSS está obviamente não no mesmo arquivo. 114 00:05:04,290 --> 00:05:06,920 Então, agora você não tem que fazer um, mas dois pedidos. 115 00:05:06,920 --> 00:05:11,230 E cada um desses pedidos, como vimos em Chrome no chamado Inspector, 116 00:05:11,230 --> 00:05:15,740 e nós olhamos a guia de rede, cada desses arquivos requer um HTTP 117 00:05:15,740 --> 00:05:18,360 pedido, o que vimos leva uma certa quantidade de tempo. 118 00:05:18,360 --> 00:05:19,290 Agora, talvez não seja muito. 119 00:05:19,290 --> 00:05:20,670 Talvez seja apenas 20 milésimos de segundo. 120 00:05:20,670 --> 00:05:22,260 Talvez seja a 200 milissegundos. 121 00:05:22,260 --> 00:05:25,530 >> Mas pensar em uma página, como Facebook, ou CNN, ou o Google, que são muito 122 00:05:25,530 --> 00:05:28,060 maior do que os exemplos que temos olhei até agora. 123 00:05:28,060 --> 00:05:32,070 Essas páginas podem ter dezenas de arquivos, cada um dos quais pode exigir um 124 00:05:32,070 --> 00:05:33,550 Download de um arquivo. 125 00:05:33,550 --> 00:05:35,800 Então, as coisas podem potencialmente começar a desacelerar. 126 00:05:35,800 --> 00:05:39,280 >> E, especialmente nestes dias em que todos nós têm telefones móveis em nossos bolsos e 127 00:05:39,280 --> 00:05:43,010 conexões de internet mais lentas, ter que esperar mais alguns milissegundos, alguns 128 00:05:43,010 --> 00:05:46,110 mais milissegundos para adicional ficheiros podem realmente ser lento. 129 00:05:46,110 --> 00:05:50,430 Latência é a palavra que descreve o tipo de esperar que você tem que 130 00:05:50,430 --> 00:05:53,110 experimentar ao esperar algum pedaço de informação. 131 00:05:53,110 --> 00:05:54,430 >> Mas há um lado positivo. 132 00:05:54,430 --> 00:05:56,600 Portanto, não é todo o tipo de um - 133 00:05:56,600 --> 00:05:58,170 ele realmente é um pouco de uma gangorra aqui. 134 00:05:58,170 --> 00:06:02,970 Desvantagem agora, mas o que os navegadores podem fazer se eles são inteligentes, a fim de evitar 135 00:06:02,970 --> 00:06:08,870 ter que solicitar o mesmo styles.css arquivo novamente pode ser para fazer o quê? 136 00:06:08,870 --> 00:06:09,390 >> Cache-lo. 137 00:06:09,390 --> 00:06:10,370 Então cache - 138 00:06:10,370 --> 00:06:11,690 C-A-C-H-E - 139 00:06:11,690 --> 00:06:15,810 geralmente significa aqui apenas para salvar a arquivo que você solicitou pela primeira vez, e 140 00:06:15,810 --> 00:06:17,440 em seguida, verificar o seu cache para ele. 141 00:06:17,440 --> 00:06:20,400 Verifique você está tipo de recipiente de armazenamento, e se você já tem um 142 00:06:20,400 --> 00:06:24,520 cópia do styles.css, mesmo que algum outro página na p-set, ou em qualquer site, 143 00:06:24,520 --> 00:06:28,560 solicita-lo novamente, só para dar o usuário que mesmo cópia em cache. 144 00:06:28,560 --> 00:06:30,140 Não se preocupe que o solicite. 145 00:06:30,140 --> 00:06:32,560 >> Desvantagem lá, porém, como alguns de vocês ter tropeçado no p-set. 146 00:06:32,560 --> 00:06:35,870 Se você fizer uma alteração no servidor e você voltar para o navegador e você 147 00:06:35,870 --> 00:06:39,250 recarregar, por vezes, o navegador faz um favor e não se incomoda 148 00:06:39,250 --> 00:06:43,660 re-download de seu arquivo styles.css porque, vamos lá, quais são as chances 149 00:06:43,660 --> 00:06:47,620 que estes estilos que o Facebook usa vão mudar hora a hora ou 150 00:06:47,620 --> 00:06:48,140 dia-a-dia? 151 00:06:48,140 --> 00:06:48,800 É muito baixo. 152 00:06:48,800 --> 00:06:52,260 Eles podem mudar ao longo do tempo, mas não por minuto ou por hora. 153 00:06:52,260 --> 00:06:55,810 >> Assim, um truque, apenas FYI ao fazer web desenvolvimento, é frequentemente mantenha pressionada a 154 00:06:55,810 --> 00:06:59,500 chave mudar, por exemplo, e depois clique em recarregar no seu navegador, e que a vontade 155 00:06:59,500 --> 00:07:03,280 tipicamente dizer a recarga navegador tudo, até mesmo se você já tem 156 00:07:03,280 --> 00:07:04,180 no cache. 157 00:07:04,180 --> 00:07:06,630 Então, novamente, vantagens e desvantagens, mas todos eles 158 00:07:06,630 --> 00:07:08,260 em última instância, decisões de design. 159 00:07:08,260 --> 00:07:11,520 >> Então, agora, nós não apenas terminar a história aqui. 160 00:07:11,520 --> 00:07:15,790 Se eu agora ir para trás e para trás e para trás e volta, começamos a introduzir não apenas 161 00:07:15,790 --> 00:07:18,060 HTML, mas PHP. 162 00:07:18,060 --> 00:07:20,786 Assim, em termos leigos, o que O PHP vamos fazer? 163 00:07:20,786 --> 00:07:22,770 >> AUDIÊNCIA: [inaudível]. 164 00:07:22,770 --> 00:07:24,258 >> DAVID MALAN: O que é isso? 165 00:07:24,258 --> 00:07:25,250 >> AUDIÊNCIA: Apresente lógica no código. 166 00:07:25,250 --> 00:07:26,620 >> DAVID MALAN: Sim, introduzir lógica em seu código. 167 00:07:26,620 --> 00:07:29,570 Portanto, é uma linguagem de programação de verdade com loops e variáveis, e 168 00:07:29,570 --> 00:07:32,620 funções e condições, e todos as coisas que tenho usado caminho de volta 169 00:07:32,620 --> 00:07:33,780 quando, desde o início. 170 00:07:33,780 --> 00:07:36,780 E PHP, que já vimos, pode ser usado ou na linha de comando - é 171 00:07:36,780 --> 00:07:39,190 não tem que ter nada a ver com a web, mesmo que isso é 172 00:07:39,190 --> 00:07:43,150 realmente suas origens e que tende para ser bom e propício para - 173 00:07:43,150 --> 00:07:47,130 mas você pode usar o PHP apenas pela natureza o facto de que ele tem uma impressão () 174 00:07:47,130 --> 00:07:49,660 função, e uma função () printf, ou uma função () echo. 175 00:07:49,660 --> 00:07:52,440 Há grupos de maneiras que você pode imprimir um texto com PHP. 176 00:07:52,440 --> 00:07:56,540 >> Portanto, você pode usar esta programação língua para saída exactamente 177 00:07:56,540 --> 00:07:58,460 o que estávamos falando antes. 178 00:07:58,460 --> 00:08:01,360 Você pode gerar dinamicamente seu HTML. 179 00:08:01,360 --> 00:08:02,300 Talvez não toda ela. 180 00:08:02,300 --> 00:08:06,460 Talvez as coisas códigos rígidos, como o cabeçalho e rodapé, e logotipo, 181 00:08:06,460 --> 00:08:07,950 e suas folhas de estilo, e tudo isso. 182 00:08:07,950 --> 00:08:11,190 Mas para algo como-p definir sete, onde você está manipulando ações e 183 00:08:11,190 --> 00:08:14,690 mostrando a carteira do usuário, que é vai mudar dinamicamente, você pode 184 00:08:14,690 --> 00:08:18,960 certamente usar o PHP ea lógica que dá você como uma linguagem de programação para 185 00:08:18,960 --> 00:08:22,320 saída subconjuntos dinamicamente da página. 186 00:08:22,320 --> 00:08:25,900 >> Então, quando você fala sobre sites dinâmicos, ou programação web, que é 187 00:08:25,900 --> 00:08:27,200 o que você está realmente falando. 188 00:08:27,200 --> 00:08:31,450 Usando uma linguagem como PHP, ou coisas chamado Python, ou Ruby ou Java, ou 189 00:08:31,450 --> 00:08:35,900 Ainda outras línguas, para consultar um banco de dados muitas vezes, ou outro servidor, e 190 00:08:35,900 --> 00:08:38,580 depois cuspir dinamicamente HTML. 191 00:08:38,580 --> 00:08:42,470 >> Agora, o resultado final, como um aparte, é que o HTML da maioria dos sites, 192 00:08:42,470 --> 00:08:45,970 incluindo o seu set-p sete, é, provavelmente, vai ser uma grande confusão se 193 00:08:45,970 --> 00:08:48,060 você olhar para a fonte código em um navegador. 194 00:08:48,060 --> 00:08:49,010 Isso não é um grande negócio. 195 00:08:49,010 --> 00:08:51,550 Neste momento, quando nos preocupamos estilo, nos preocupamos com o 196 00:08:51,550 --> 00:08:52,740 coisas que você escreve. 197 00:08:52,740 --> 00:08:56,240 Não se preocupam com as coisas que o que suas saídas de código. 198 00:08:56,240 --> 00:08:59,520 Então não se preocupe com recuo aqui, se é que é PHP 199 00:08:59,520 --> 00:09:01,190 na verdade, a saída de material. 200 00:09:01,190 --> 00:09:04,430 Afinal de contas, o navegador não vai se importar, e um ser humano não estará olhando 201 00:09:04,430 --> 00:09:05,400 na fonte de qualquer maneira. 202 00:09:05,400 --> 00:09:09,000 Nós os funcionários, por exemplo, seria estar a olhar para o seu PHP. 203 00:09:09,000 --> 00:09:13,440 >> Então deixe-me dar um exemplo rápido agora de por que mais isso pode ser útil. 204 00:09:13,440 --> 00:09:18,620 Então, francamente, eu não me lembro da última vez que eu usei C para resolver um problema em 205 00:09:18,620 --> 00:09:19,620 no mundo real. 206 00:09:19,620 --> 00:09:22,330 Foi, provavelmente, na pós-graduação quando Eu precisava usar uma linguagem que 207 00:09:22,330 --> 00:09:26,710 foi bastante baixo nível e me deu a oportunidade de fazer algo muito alta 208 00:09:26,710 --> 00:09:30,720 realização de realmente salvar o maior número CPU ciclos como eu poderia, em grande parte, 209 00:09:30,720 --> 00:09:33,990 porque eu estava usando enormes conjuntos de dados, e todos os ciclos de CPU contadas. 210 00:09:33,990 --> 00:09:37,750 E, francamente, mesmo em coisas como telefones estes dias e outros dispositivos 211 00:09:37,750 --> 00:09:39,910 onde você não consegue ter tanto memória e você não consegue ter como 212 00:09:39,910 --> 00:09:44,160 muito CPU, usando linguagens mais rápidas ainda é atraente. 213 00:09:44,160 --> 00:09:47,290 >> Mas no mundo real, quando você acabou de quero jogar algum programa juntos para 214 00:09:47,290 --> 00:09:50,340 analisar alguns dados, ou se você tiver recolhido um monte de inscrições para 215 00:09:50,340 --> 00:09:53,330 algum grupo de estudantes e você quer muito rapidamente automatizar o envio de e-mails 216 00:09:53,330 --> 00:09:56,240 um por um para cada um daqueles inscritos, você está indo para alcançar 217 00:09:56,240 --> 00:09:59,240 uma linguagem de alto nível a C, por assim dizer. 218 00:09:59,240 --> 00:10:04,060 Algo como PHP ou Python, ou Ruby, ou uma meia dúzia de outros que existem 219 00:10:04,060 --> 00:10:04,550 nos dias de hoje. 220 00:10:04,550 --> 00:10:07,200 Mas os três são provavelmente o direito mais moderno agora. 221 00:10:07,200 --> 00:10:10,840 >> E o que isto significa é que você pode abrir um editor de texto como o gedit ou 222 00:10:10,840 --> 00:10:14,030 mais que qualquer outra coisa e depois é só começar escrever código sem ter que se preocupar 223 00:10:14,030 --> 00:10:17,800 sobre a compilação, sem ter que realmente se preocupar com o gerenciamento de memória, 224 00:10:17,800 --> 00:10:20,820 manter em mente que um pouco sloppiness acabará por voltar 225 00:10:20,820 --> 00:10:24,790 para mordê-lo, se o conjunto de dados fica maior ou o problema fica grande. 226 00:10:24,790 --> 00:10:27,230 Mas o que isso significa para nós é o seguinte. 227 00:10:27,230 --> 00:10:29,860 >> Deixe-me ir em frente e correr speller problema de definir seis. 228 00:10:29,860 --> 00:10:33,480 Então, esta é a minha implementação baseada em trie que I utilizado na grande 229 00:10:33,480 --> 00:10:35,500 placa onde eu não realizada tão bem. 230 00:10:35,500 --> 00:10:38,720 Nós vamos voltar em uma semana e revisitar aqueles que se acabar no topo da 231 00:10:38,720 --> 00:10:40,430 placa grande em nossa última aula. 232 00:10:40,430 --> 00:10:44,520 Mas, por agora, deixe-me ir em frente e apenas executar a minha solução no texto, e vamos fazer 233 00:10:44,520 --> 00:10:48,460 Bíblia do Rei James, e aqui vamos nós. 234 00:10:48,460 --> 00:10:51,080 >> Portanto, estas são todas as supostamente palavras com erros ortográficos fora de 235 00:10:51,080 --> 00:10:52,240 a Bíblia do Rei James. 236 00:10:52,240 --> 00:10:55,560 E minha implementação levou uma segunda metade do total. 237 00:10:55,560 --> 00:10:58,270 Então não é tão ruim neste determinado computador. 238 00:10:58,270 --> 00:11:01,540 Mas pense o quanto código que eu tinha que escrever. 239 00:11:01,540 --> 00:11:02,880 Pense em quanto código você tinha que escrever. 240 00:11:02,880 --> 00:11:06,170 Pense quantas horas você gastou no D-hall ou seu dormitório ou onde quer 241 00:11:06,170 --> 00:11:07,890 realmente codificação se essa solução. 242 00:11:07,890 --> 00:11:11,850 >> Bem, se eu realmente tenho um nível mais elevado linguagem como PHP, tome nota do 243 00:11:11,850 --> 00:11:13,350 o que posso fazer aqui. 244 00:11:13,350 --> 00:11:16,410 Em primeiro lugar, suponhamos que este é, ao invés seu código de distribuição. 245 00:11:16,410 --> 00:11:17,790 Este é um arquivo chamado speller. 246 00:11:17,790 --> 00:11:20,220 Ele está disponível como parte de hoje código de distribuição. 247 00:11:20,220 --> 00:11:22,670 E eu vou acenar minha mão, no máximo, dos detalhes, mas isso é realmente 248 00:11:22,670 --> 00:11:25,500 um exemplo interessante de como você pode portar uma linguagem 249 00:11:25,500 --> 00:11:28,870 como C até PHP. 250 00:11:28,870 --> 00:11:33,420 Eu literalmente abriu duas janelas de texto, uma com a minha versão C de speller.c, 251 00:11:33,420 --> 00:11:36,960 e eu só comecei a traduzi-lo em meu cabeça para PHP e digitando-lo usando 252 00:11:36,960 --> 00:11:38,840 os mais próximos funções equivalentes. 253 00:11:38,840 --> 00:11:40,100 >> Então, algumas dessas coisas são diferentes. 254 00:11:40,100 --> 00:11:43,730 Vimos da última vez que o PHP não usa incluir no exatamente da mesma maneira. 255 00:11:43,730 --> 00:11:47,050 Ele usa requerem tipicamente, embora incluem existe. 256 00:11:47,050 --> 00:11:50,330 Definir é um pouco diferente do # Define em C, mas isso é 257 00:11:50,330 --> 00:11:51,890 como nós fazemos uma constante. 258 00:11:51,890 --> 00:11:55,860 $ Argc despeja existe em PHP, por isso temos visto isso antes. 259 00:11:55,860 --> 00:11:58,650 Estes são apenas variáveis, todos que começam com cifrões. 260 00:11:58,650 --> 00:12:00,590 Lembre-se estes são apenas um bando de pontos flutuantes. 261 00:12:00,590 --> 00:12:03,970 >> Assim, longa história curta, você é bem-vindo para folhear este se curiosos, esta é 262 00:12:03,970 --> 00:12:10,010 quase uma conversão de linha para linha do Versão C de speller.c em PHP. 263 00:12:10,010 --> 00:12:12,630 E você pode fazer isso de novo para meia dúzia de outras línguas. 264 00:12:12,630 --> 00:12:14,910 >> Mas o que é interessante é isso. 265 00:12:14,910 --> 00:12:16,910 Ou o que é francamente desanimador é o seguinte. 266 00:12:16,910 --> 00:12:20,790 Deixe-me ir em frente e escrever sobre dictionary.php, e afirmam que eu sou 267 00:12:20,790 --> 00:12:23,670 indo para ir em frente e re-implementar problema de definir seis aqui. 268 00:12:23,670 --> 00:12:27,530 >> Então, vamos propor que, neste primeiro arquivo, que será implementado em 269 00:12:27,530 --> 00:12:30,550 PHP, então deixe-me abrir minhas marcas assim. 270 00:12:30,550 --> 00:12:34,780 Deixe-me dar-me um mundial variável, $ tamanho fica zero. 271 00:12:34,780 --> 00:12:36,710 E eu vou dar me uma tabela hash. 272 00:12:36,710 --> 00:12:38,110 Vou usar uma tabela hash para esta coisa. 273 00:12:38,110 --> 00:12:42,070 Como faço para declarar uma tabela hash em PHP? 274 00:12:42,070 --> 00:12:42,990 Concluído. 275 00:12:42,990 --> 00:12:43,980 OK. 276 00:12:43,980 --> 00:12:48,870 >> Então abra o suporte próximo suporte representa que em PHP, como vimos? 277 00:12:48,870 --> 00:12:51,850 Uma matriz, mas uma matriz que podia ser uma matriz associativa. 278 00:12:51,850 --> 00:12:54,320 Uma matriz associativa é uma estrutura de dados 279 00:12:54,320 --> 00:12:55,860 chaves associados com valores. 280 00:12:55,860 --> 00:12:59,430 >> Agora, o mais simples indexada numericamente matriz, as chaves são o quê? 281 00:12:59,430 --> 00:13:02,250 282 00:13:02,250 --> 00:13:03,960 Zero, um, dois, três, certo? 283 00:13:03,960 --> 00:13:08,780 Old school coisas de volta a partir de C. Mas pode também ser strings como foo e bar, 284 00:13:08,780 --> 00:13:12,210 ou Maxwell, ou qualquer string. 285 00:13:12,210 --> 00:13:14,240 Então eu posso aproveitar essa em apenas um momento. 286 00:13:14,240 --> 00:13:17,550 >> Deixe-me ir em frente e declarar uma função como - 287 00:13:17,550 --> 00:13:19,020 vamos fazer load () em primeiro lugar. 288 00:13:19,020 --> 00:13:20,690 Assim, a função load (). 289 00:13:20,690 --> 00:13:23,440 E PHP é um pouco diferente, já que você literalmente tipo de função, mas você 290 00:13:23,440 --> 00:13:24,930 não digitar um tipo de retorno. 291 00:13:24,930 --> 00:13:28,760 Eu estou indo para ir em frente e dizer que o função load () deve levar em 292 00:13:28,760 --> 00:13:31,000 argumento $ dicionário, apenas como a versão C fez. 293 00:13:31,000 --> 00:13:32,510 Eu estou fazendo isso da memória. 294 00:13:32,510 --> 00:13:34,910 >> E proponho que eu sou vai fazer isso. 295 00:13:34,910 --> 00:13:37,080 Estou simplesmente vai fazer foreach. 296 00:13:37,080 --> 00:13:40,710 Eu vou chamar uma função chamada file (), passando o nome da 297 00:13:40,710 --> 00:13:44,990 ficheiro, que é a variável $ $ Dicionário como palavra. 298 00:13:44,990 --> 00:13:49,410 E, em seguida, dentro do meu laço for aqui, eu sou indo para ir em frente e guardar na minha 299 00:13:49,410 --> 00:13:57,440 $ $ Word tabela que fica verdadeiro. 300 00:13:57,440 --> 00:13:57,918 Concluído. 301 00:13:57,918 --> 00:14:01,264 Oh, espere. 302 00:14:01,264 --> 00:14:02,422 Concluído. 303 00:14:02,422 --> 00:14:02,760 OK. 304 00:14:02,760 --> 00:14:04,970 >> Isto é uma função da carga () dizer em PHP. 305 00:14:04,970 --> 00:14:05,865 Agora, por que isso funciona? 306 00:14:05,865 --> 00:14:07,010 E eu sou o tipo de trapaça aqui. 307 00:14:07,010 --> 00:14:09,980 >> Então, um, foreach vimos brevemente última vez. 308 00:14:09,980 --> 00:14:13,680 Significa apenas que você pode iterar uma matriz, sem se preocupar com i 309 00:14:13,680 --> 00:14:16,150 e n e, mais além, e tudo isso. 310 00:14:16,150 --> 00:14:21,350 Dicionário é, naturalmente, o nome do arquivo, algo como grande ou pequeno, os dois 311 00:14:21,350 --> 00:14:22,830 dicionários foram utilizados pela última vez. 312 00:14:22,830 --> 00:14:26,715 O arquivo é uma função que abre o texto arquivo, lê-lo em linha por linha, e 313 00:14:26,715 --> 00:14:29,840 mãos para trás um enorme variedade, cada um de cujos elementos é um 314 00:14:29,840 --> 00:14:31,340 linha desse arquivo. 315 00:14:31,340 --> 00:14:36,040 Então essa é a combinação de fopen, e fread, e enquanto loop, e fclose, 316 00:14:36,040 --> 00:14:37,080 e tudo isso. 317 00:14:37,080 --> 00:14:40,150 Finalmente, como a palavra significa apenas que o variável que eu vou ter acesso a 318 00:14:40,150 --> 00:14:41,890 em cada iteração neste loop. 319 00:14:41,890 --> 00:14:46,910 >> Assim, em breve, este forro aqui significa abrir o arquivo cujo nome é em 320 00:14:46,910 --> 00:14:50,750 dicionário, a variável, iterar linha por linha, e cada vez que você começa 321 00:14:50,750 --> 00:14:54,290 uma linha, loja em um chamado palavra variável, e, em seguida, fazer algo com a palavra. 322 00:14:54,290 --> 00:14:55,280 O que eu quero fazer? 323 00:14:55,280 --> 00:14:58,110 Eu quero colocar palavras na minha tabela de hash. 324 00:14:58,110 --> 00:15:00,860 >> Bem, eu posso colocar alguma coisa na minha tabela hash, assim como em C 325 00:15:00,860 --> 00:15:02,140 usando colchetes. 326 00:15:02,140 --> 00:15:03,660 Este é o nome de minha tabela de hash. 327 00:15:03,660 --> 00:15:07,180 Vou índice para esse hash mesa neste local. 328 00:15:07,180 --> 00:15:08,920 Portanto, não suporte a zero, não um suporte. 329 00:15:08,920 --> 00:15:11,990 Bracket citação unquote alguma coisa, o que essa palavra é. 330 00:15:11,990 --> 00:15:15,200 E, assim como você pode ter em seu tabela hash trabalho trie, basta armazenar 331 00:15:15,200 --> 00:15:17,650 efetivamente um valor booleano, implicitamente ou explicitamente. 332 00:15:17,650 --> 00:15:18,260 Concluído. 333 00:15:18,260 --> 00:15:20,000 Eu estou armazenando o valor verdadeiro. 334 00:15:20,000 --> 00:15:23,150 >> Agora há um par de coisas Estou cortando cantos aqui. 335 00:15:23,150 --> 00:15:27,720 Tecnicamente, não vai ser um nova linha irritante, / n, no final de 336 00:15:27,720 --> 00:15:28,820 cada uma dessas palavras. 337 00:15:28,820 --> 00:15:31,770 Então, eu provavelmente deveria chamar uma função PHP chamado costeleta (), que será 338 00:15:31,770 --> 00:15:33,460 literalmente cortar aquilo. 339 00:15:33,460 --> 00:15:35,020 E eu realmente preciso fazer outra coisa. 340 00:15:35,020 --> 00:15:38,380 Eu provavelmente deveria incrementar o tamanho de cada iteração, por isso estou mantendo o controle 341 00:15:38,380 --> 00:15:39,560 global do que é. 342 00:15:39,560 --> 00:15:43,180 E, francamente, e este é um dos aspectos estúpidos de PHP, se você estiver 343 00:15:43,180 --> 00:15:46,950 usando uma variável global, você precisa dizer explicitamente que você é. 344 00:15:46,950 --> 00:15:51,670 Então, eu estou indo realmente digitar mundial $ Tamanho, $ tabela global, e agora 345 00:15:51,670 --> 00:15:52,690 minha função é completa. 346 00:15:52,690 --> 00:15:57,475 >> Portanto, não é tão simples como antes, mas provavelmente levou menos tempo do que o C 347 00:15:57,475 --> 00:15:58,220 versão, talvez? 348 00:15:58,220 --> 00:15:58,730 OK. 349 00:15:58,730 --> 00:16:00,390 >> Então, agora vamos fazer a função de verificação (). 350 00:16:00,390 --> 00:16:04,300 Vamos ver se isso pelo menos levou o horas a fio que nos levaram em C. Então 351 00:16:04,300 --> 00:16:06,500 deixe-me ir em frente e declarar verificar como uma função. 352 00:16:06,500 --> 00:16:09,070 Toma na argumentação palavra, que é vai vir de speller. 353 00:16:09,070 --> 00:16:13,410 E eu estou indo só para verificar se o seguindo isset variável, mesa 354 00:16:13,410 --> 00:16:18,400 suporte strtolower de palavra - 355 00:16:18,400 --> 00:16:20,590 vamos equilibrar todos os meus parênteses - 356 00:16:20,590 --> 00:16:24,275 em seguida, retornar verdadeiro. 357 00:16:24,275 --> 00:16:27,020 358 00:16:27,020 --> 00:16:28,460 Else - 359 00:16:28,460 --> 00:16:30,330 que era realmente o disco parte deste programa. 360 00:16:30,330 --> 00:16:31,940 Caso contrário, retornará false. 361 00:16:31,940 --> 00:16:32,630 Concluído. 362 00:16:32,630 --> 00:16:33,460 Isso é cheque (). 363 00:16:33,460 --> 00:16:34,520 >> Agora, por que isso funciona? 364 00:16:34,520 --> 00:16:37,040 Bem, um passei em uma palavra, que é uma string. 365 00:16:37,040 --> 00:16:41,400 Dois, eu estou verificando dentro do hash mesa, que é chamado de $ table. 366 00:16:41,400 --> 00:16:45,470 Estou forçando-o a minúsculas chamando uma função tolower bastante semelhante () em 367 00:16:45,470 --> 00:16:48,580 C, mas isso não a palavra inteira, não um único personagem. 368 00:16:48,580 --> 00:16:52,680 E se isso for definido, em outras palavras, não é um valor definido, por outras palavras, 369 00:16:52,680 --> 00:16:54,880 se for verdade, então sim, esta é uma palavra. 370 00:16:54,880 --> 00:16:56,530 Porque eu colocá-lo lá com load (). 371 00:16:56,530 --> 00:16:59,100 E se não, eu vou retornar false. 372 00:16:59,100 --> 00:17:00,090 >> Agora, os outros são fácil. 373 00:17:00,090 --> 00:17:03,570 Tamanho function (), como eu faço isso? 374 00:17:03,570 --> 00:17:05,230 Eu basicamente não retornar $ size. 375 00:17:05,230 --> 00:17:07,770 Mas tecnicamente precisa fazer essa coisa irritante. 376 00:17:07,770 --> 00:17:10,640 E na verdade se ouvir, eu estava cortando um canto muitos. 377 00:17:10,640 --> 00:17:12,920 Eu realmente preciso fazer $ table global. 378 00:17:12,920 --> 00:17:16,260 >> Mas o que foi dito, descarregar). 379 00:17:16,260 --> 00:17:17,380 Descarregar () é incrível. 380 00:17:17,380 --> 00:17:20,500 Função descarregar (). 381 00:17:20,500 --> 00:17:23,990 Como é que eu quero implementar descarregar (?) 382 00:17:23,990 --> 00:17:25,079 Concluído. 383 00:17:25,079 --> 00:17:25,450 OK. 384 00:17:25,450 --> 00:17:28,900 >> Então descarregar (), gerenciamento de memória é completamente tomado cuidado para você 385 00:17:28,900 --> 00:17:31,800 algo como PHP e muito de linguagens de alto nível. 386 00:17:31,800 --> 00:17:32,600 Então, isso é incrível. 387 00:17:32,600 --> 00:17:36,080 Como por que diabos nós passamos o passado oito semanas, além de redação C 388 00:17:36,080 --> 00:17:41,030 aparentemente muito lento, muito tempo problemas de consumo com dezenas de horas 389 00:17:41,030 --> 00:17:42,530 de trabalho sob os cintos? 390 00:17:42,530 --> 00:17:46,110 >> Bem, por um lado, isso pode funcionar muito bem para pequenos programas. 391 00:17:46,110 --> 00:17:47,840 Ele certamente acelerou o meu tempo de desenvolvimento. 392 00:17:47,840 --> 00:17:49,790 Mas vamos ver o que acontece no mundo real. 393 00:17:49,790 --> 00:17:52,370 >> Deixe-me ir para este diretório em uma janela de terminal. 394 00:17:52,370 --> 00:17:53,370 Há speller. 395 00:17:53,370 --> 00:17:56,570 E observe como um aparte, e você pode encontrei este conjunto de problemas em 396 00:17:56,570 --> 00:17:58,190 seis ou sete conjunto de problemas. 397 00:17:58,190 --> 00:18:01,610 Você não tem estritamente acabar com arquivos PHP com. php. 398 00:18:01,610 --> 00:18:05,250 Se você colocar uma linha como a primeira em o topo, que é uma linha especial 399 00:18:05,250 --> 00:18:10,980 de sintaxe que significa, essencialmente, encontrar o programa chamado PHP e usá-lo para 400 00:18:10,980 --> 00:18:12,270 interpretar este arquivo. 401 00:18:12,270 --> 00:18:15,410 Então, agora ninguém sabe realmente o que Estou executando um programa PHP. 402 00:18:15,410 --> 00:18:19,860 Eu posso executá-lo apenas como se foram algo compilados em C. 403 00:18:19,860 --> 00:18:20,650 >> Mas aqui está a coisa. 404 00:18:20,650 --> 00:18:21,600 Na verdade, vamos fazer isso de novo. 405 00:18:21,600 --> 00:18:23,530 Dropbox/pset6 /. 406 00:18:23,530 --> 00:18:25,390 Há speller. 407 00:18:25,390 --> 00:18:26,720 OK, 0,44 segundos. 408 00:18:26,720 --> 00:18:28,080 Ele ficou mais rápido dessa vez. 409 00:18:28,080 --> 00:18:29,745 >> Agora vamos para a versão PHP. 410 00:18:29,745 --> 00:18:43,070 411 00:18:43,070 --> 00:18:44,320 Toque agradável. 412 00:18:44,320 --> 00:18:50,830 413 00:18:50,830 --> 00:18:53,285 Mas basta pensar quanto tempo Salvei em horário de expediente. 414 00:18:53,285 --> 00:18:56,990 415 00:18:56,990 --> 00:18:57,790 OK. 416 00:18:57,790 --> 00:19:01,020 >> Então 3,59 segundo, o que realmente não soa precisa também. 417 00:19:01,020 --> 00:19:03,710 Mas isso é porque longa história curta, quando você estiver imprimindo uma grande quantidade 418 00:19:03,710 --> 00:19:06,840 de material para a tela, que si atrasa as coisas. 419 00:19:06,840 --> 00:19:11,260 O que realmente levou o CPU no aparelho foi de 3,59 segundos, em 420 00:19:11,260 --> 00:19:15,260 contraste com C, que tomaram 0,44 segundos mais recentemente. 421 00:19:15,260 --> 00:19:17,620 Isso é realmente uma ordem de magnitude diferente. 422 00:19:17,620 --> 00:19:20,280 >> Então, onde é que o preço vem? 423 00:19:20,280 --> 00:19:21,790 Por que é muito mais lento? 424 00:19:21,790 --> 00:19:24,220 Por que o PHP executar tão mal? 425 00:19:24,220 --> 00:19:25,242 Danielle? 426 00:19:25,242 --> 00:19:26,550 >> AUDIÊNCIA: Você realmente não utilizar uma tabela hash. 427 00:19:26,550 --> 00:19:27,710 >> DAVID MALAN: Eu realmente não utilizar uma tabela hash. 428 00:19:27,710 --> 00:19:28,760 Então eu meio que fiz. 429 00:19:28,760 --> 00:19:29,870 Portanto, é um array associativo. 430 00:19:29,870 --> 00:19:33,650 O mais provável é que as pessoas em PHP são muito inteligente, eles usavam por baixo da 431 00:19:33,650 --> 00:19:39,520 capa uma tabela hash que foi realmente executado em algo como C ou C + +. 432 00:19:39,520 --> 00:19:41,290 Mas. 433 00:19:41,290 --> 00:19:42,760 Sim. 434 00:19:42,760 --> 00:19:44,010 >> AUDIÊNCIA: [inaudível]. 435 00:19:44,010 --> 00:19:46,690 436 00:19:46,690 --> 00:19:47,080 >> DAVID MALAN: Yeah. 437 00:19:47,080 --> 00:19:50,780 Assim, cada uma das funções que eu escrevi agora - Na verdade, você pode dizer que mais uma vez por 438 00:19:50,780 --> 00:19:51,480 pouco mais alto? 439 00:19:51,480 --> 00:19:54,509 >> AUDIÊNCIAS: Cada uma das funções que você incluiu tem muito mais completo 440 00:19:54,509 --> 00:19:56,610 capacidade do que - 441 00:19:56,610 --> 00:19:57,550 >> DAVID MALAN: Então, isso é muito verdadeiro. 442 00:19:57,550 --> 00:20:01,490 Há muito mais sobrecarga que estamos não realmente vendo, concentrando-se apenas em 443 00:20:01,490 --> 00:20:03,730 dictionary.php, que eu acabei de escrever. 444 00:20:03,730 --> 00:20:08,020 Por outro lado, há um intérprete inteiro ir ao fundo. 445 00:20:08,020 --> 00:20:12,040 Na verdade, quando eu corri este programa, ele não estava funcionando zeros e uns compilados 446 00:20:12,040 --> 00:20:14,290 projetado para o meu CPU Intel. 447 00:20:14,290 --> 00:20:19,270 Em vez disso, ele estava correndo linha por linha Código PHP que parece exatamente 448 00:20:19,270 --> 00:20:20,350 como se digitou. 449 00:20:20,350 --> 00:20:22,475 E assim, sempre que você usar uma linguagem interpretada, você 450 00:20:22,475 --> 00:20:23,850 realmente fazer pagar esse preço. 451 00:20:23,850 --> 00:20:27,010 Vai levar algum tempo para ler seu topo arquivo para baixo, da esquerda para 452 00:20:27,010 --> 00:20:30,740 direita, e então executar cada linha de novo e de novo. 453 00:20:30,740 --> 00:20:34,250 >> Agora, na realidade, especialmente na web, você pode realmente acelerar esse processo 454 00:20:34,250 --> 00:20:38,660 armazenando em cache os resultados da Código PHP que está sendo interpretado. 455 00:20:38,660 --> 00:20:41,640 E isso faz sentido na web, porque se você não tiver um usuário, como 456 00:20:41,640 --> 00:20:46,300 me aqui, mas 1.000 ou 10.000 usuários, em seguida, talvez a primeira vez que o arquivo é 457 00:20:46,300 --> 00:20:49,050 acessada é lento, mas, posteriormente, é muito mais rápido. 458 00:20:49,050 --> 00:20:51,000 >> Mas isso também, mais uma vez, é um trade off. 459 00:20:51,000 --> 00:20:53,870 E para algo como um dados de pesquisa conjunto, ou mesmo algo grande como 460 00:20:53,870 --> 00:20:58,330 isso, seus usuários, eventualmente, começar a sentir que a desaceleração. 461 00:20:58,330 --> 00:21:02,670 >> Assim, em breve, interpretado línguas são muito em voga, muito popular, e 462 00:21:02,670 --> 00:21:06,710 francamente são, provavelmente, os idiomas que deve chegar para a resolução de problemas 463 00:21:06,710 --> 00:21:08,200 subsequente para CS50. 464 00:21:08,200 --> 00:21:12,720 Mas perceba o quanto você está realmente tendo por certo debaixo do capô 465 00:21:12,720 --> 00:21:15,910 realmente essas últimas semanas em Hash tabelas e árvores, e tentativas, 466 00:21:15,910 --> 00:21:20,770 os quais são utilizados, em última instância para realmente implementar coisas como suporte aberto, 467 00:21:20,770 --> 00:21:24,200 colchete, que podemos agora gratidão tomar para concedido. 468 00:21:24,200 --> 00:21:26,360 >> Então, vamos dar uma olhada agora neste contexto web. 469 00:21:26,360 --> 00:21:29,890 E eu mencionei da última vez que não há um bando de superglobais em PHP que 470 00:21:29,890 --> 00:21:32,490 não são realmente relevantes na linha de comando. 471 00:21:32,490 --> 00:21:36,210 Eles são mais relevantes no contexto de usar o PHP em um contexto web. 472 00:21:36,210 --> 00:21:41,220 Então, rodando o PHP em um servidor web, a fim para gerar coisas como HTML. 473 00:21:41,220 --> 00:21:44,540 >> E olhou para $ _GET e $ _POST, e que é onde os usuários automaticamente ' 474 00:21:44,540 --> 00:21:49,100 entrada acaba simplesmente se você enviar uma formulário para um arquivo que termina em. php em um web 475 00:21:49,100 --> 00:21:50,460 servidor como o aparelho. 476 00:21:50,460 --> 00:21:53,310 Mas vamos examinar brevemente $ _COOKIE E $ _SESSION. 477 00:21:53,310 --> 00:21:56,670 >> Em termos leigos, o que é um cookie como entendê-lo no contexto de 478 00:21:56,670 --> 00:21:58,220 usando a web? 479 00:21:58,220 --> 00:21:59,450 >> AUDIÊNCIA: ficheiro para o computador. 480 00:21:59,450 --> 00:21:59,920 >> DAVID MALAN: Yeah. 481 00:21:59,920 --> 00:22:03,500 É um arquivo no computador do usuário plantada por qualquer website 482 00:22:03,500 --> 00:22:04,410 acontecer de você visitar. 483 00:22:04,410 --> 00:22:07,334 Então, quando você vai para o Facebook, quando você vai para bankofamerica.com, quando você vai 484 00:22:07,334 --> 00:22:10,330 para google.com, quando você vai a quase qualquer website no mundo nos dias de hoje, 485 00:22:10,330 --> 00:22:14,850 incluindo cs50.net, um cookie é plantada no seu computador, o que é 486 00:22:14,850 --> 00:22:19,800 ou um valor armazenado na memória RAM em seu computador na memória do seu navegador, ou 487 00:22:19,800 --> 00:22:22,800 às vezes, na verdade um arquivo armazenado em seu disco rígido. 488 00:22:22,800 --> 00:22:26,960 >> E o que normalmente armazenados no arquivo não é o seu nome de usuário, e não o seu 489 00:22:26,960 --> 00:22:31,060 senha, normalmente não é algo sensível a menos que o site não é tão 490 00:22:31,060 --> 00:22:35,040 bom com a sua segurança, mas sim é um grande identificador exclusivo entre 491 00:22:35,040 --> 00:22:35,680 outras coisas. 492 00:22:35,680 --> 00:22:38,920 É um número aleatório grande plantado em seu computador, mas você pode pensar como 493 00:22:38,920 --> 00:22:42,740 uma espécie de selo de mão virtual como de um clube ou algum parque de diversões que 494 00:22:42,740 --> 00:22:47,160 permite que a equipe, os proprietários desse serviço, para lembrar quem você é. 495 00:22:47,160 --> 00:22:51,030 Então, se o número aleatório grande é como 12345678, apesar de que, obviamente, 496 00:22:51,030 --> 00:22:54,180 não muito aleatório, pense que, como o selo de mão que quando você visita 497 00:22:54,180 --> 00:22:57,930 facebook.com pela primeira vez, eles carimbar esse número em sua mão. 498 00:22:57,930 --> 00:23:01,510 E então, porque você fala HTTP, você sendo um navegador, e por causa do Facebook 499 00:23:01,510 --> 00:23:06,440 obviamente fala o mesmo que um web servidor do protocolo HTTP que diz 500 00:23:06,440 --> 00:23:09,930 sempre que, posteriormente, visitar facebook.com, quer se trate de um segundo 501 00:23:09,930 --> 00:23:13,560 mais tarde, uma hora mais tarde, mesmo no dia seguinte, contanto que você não tem explicitamente 502 00:23:13,560 --> 00:23:17,050 desconectado, o que efetivamente é como lavar as mãos. 503 00:23:17,050 --> 00:23:20,280 HTTP diz que você deve apresentar seu selo mão toda vez que você 504 00:23:20,280 --> 00:23:22,020 voltar para o site. 505 00:23:22,020 --> 00:23:24,390 >> O Facebook, então não é que eles olha aquele selo de mão e 506 00:23:24,390 --> 00:23:26,850 eles dizem, oh, 123456789. 507 00:23:26,850 --> 00:23:30,260 Eu não sei, à primeira vista que este é David Malan, em Cambridge, 508 00:23:30,260 --> 00:23:34,690 Massachusetts, mas eles podem verificar o seu banco de dados e dizer, oh, a pessoa 509 00:23:34,690 --> 00:23:39,930 em cujo computador plantamos 123456789 é David Malan de Cambridge, 510 00:23:39,930 --> 00:23:40,440 Massachusetts. 511 00:23:40,440 --> 00:23:46,000 Vamos mostrar que o usuário, em seguida, o perfil dele página ou do seu Feed de notícias. 512 00:23:46,000 --> 00:23:49,660 >> Mas há um problema aqui, se este É assim que a web de fato funciona. 513 00:23:49,660 --> 00:23:51,390 Vamos dar uma olhada em um exemplo rápido. 514 00:23:51,390 --> 00:23:55,190 Vamos realmente ir dizer facebook.com. 515 00:23:55,190 --> 00:23:58,130 Mas antes que pudéssemos ir para lá, vamos me ir em frente e abrir Chrome 516 00:23:58,130 --> 00:23:59,790 Inspector aqui. 517 00:23:59,790 --> 00:24:01,140 Deixe-me olhar para a aba de rede. 518 00:24:01,140 --> 00:24:06,020 E agora vamos em frente e digite em https://facebook.com. 519 00:24:06,020 --> 00:24:09,410 E eu estou fazendo isso para que nós não vemos todos esses redirecionamentos e resíduos 520 00:24:09,410 --> 00:24:10,660 tempo olhando através delas. 521 00:24:10,660 --> 00:24:12,690 Deixe-me aperte enter. 522 00:24:12,690 --> 00:24:13,130 >> Tudo bem. 523 00:24:13,130 --> 00:24:14,580 Nós vemos um monte de pedidos. 524 00:24:14,580 --> 00:24:15,640 Chega Facebook. 525 00:24:15,640 --> 00:24:16,930 Há um monte de arquivos. 526 00:24:16,930 --> 00:24:19,290 E aqui, por minha menção de latência da última vez, isso é 527 00:24:19,290 --> 00:24:21,240 um monte de solicitações HTTP. 528 00:24:21,240 --> 00:24:23,700 Mas o primeiro é provavelmente o mais interessante. 529 00:24:23,700 --> 00:24:26,420 >> Então, vamos rolar para baixo aqui, e Vou aumentar o zoom em um segundo. 530 00:24:26,420 --> 00:24:29,090 Esta vai ser uma espécie de uma bagunça, mas vamos ver. 531 00:24:29,090 --> 00:24:31,660 Facebook está nos enviando um todo monte de coisas. 532 00:24:31,660 --> 00:24:33,490 >> Mas ei, interessante. 533 00:24:33,490 --> 00:24:37,880 Eles estão plantando não um, mas quatro selos de mão para o meu lado aqui. 534 00:24:37,880 --> 00:24:40,400 Set-Cookie, Set-Cookie, set-cookie set-cookie. 535 00:24:40,400 --> 00:24:44,030 E existem algumas características aqui. 536 00:24:44,030 --> 00:24:46,170 Todos eles mencionar alguns tipo de validade. 537 00:24:46,170 --> 00:24:50,090 E parece que o Facebook está esperando para me lembrar até 2015. 538 00:24:50,090 --> 00:24:53,670 Então, isso é, presumivelmente, o tempo em que Devo sair ou eles simplesmente 539 00:24:53,670 --> 00:24:55,710 assumem automaticamente que eu sou não voltar. 540 00:24:55,710 --> 00:24:57,840 Então, isso é realmente um decente quantidade de tempo. 541 00:24:57,840 --> 00:24:59,170 >> E há alguma outra coisas acontecendo aqui. 542 00:24:59,170 --> 00:25:03,036 Este cookie parece ser forçosamente excluída, dizendo que expirou em 1970 543 00:25:03,036 --> 00:25:04,460 antes existia cookies. 544 00:25:04,460 --> 00:25:06,510 Assim, o navegador é só ir assumir OK, isso é como 545 00:25:06,510 --> 00:25:07,910 lavando o selo mãos. 546 00:25:07,910 --> 00:25:11,240 >> Mas agora, quando meu navegador faz um pedido posterior - 547 00:25:11,240 --> 00:25:14,340 deixe-me ir em frente e fazer isso novamente e reload. 548 00:25:14,340 --> 00:25:18,170 Agora deixe-me rolar de volta para a pedido topo e descer 549 00:25:18,170 --> 00:25:20,760 aqui, solicitar cabeçalhos. 550 00:25:20,760 --> 00:25:21,390 Observe isso. 551 00:25:21,390 --> 00:25:25,280 Então agora eu estou sob cabeçalhos não resposta, mas aviso que diz cabeçalhos de solicitação. 552 00:25:25,280 --> 00:25:29,220 E note que o meu computador, como parte de o seu pedido depois de bater de recarga tem 553 00:25:29,220 --> 00:25:32,780 enviado pelo menos os seguintes informações. 554 00:25:32,780 --> 00:25:34,670 Não Set-Cookie, mas cookie. 555 00:25:34,670 --> 00:25:38,750 Portanto, esta é a linha, o cabeçalho HTTP para dizer, onde o meu navegador é uma espécie 556 00:25:38,750 --> 00:25:43,340 de sem que eu soubesse apresentando minha mão para inspeção do Facebook. 557 00:25:43,340 --> 00:25:46,020 >> Então, esses cookies podem ser usado então para quê? 558 00:25:46,020 --> 00:25:49,420 Para se lembrar de quem você é, ou se lembrar de como muitas vezes você já esteve lá, ou 559 00:25:49,420 --> 00:25:50,280 realmente nada. 560 00:25:50,280 --> 00:25:52,742 >> Então aqui está counter.php. 561 00:25:52,742 --> 00:25:53,780 E deixe-me ampliar a fonte. 562 00:25:53,780 --> 00:25:58,380 E cada vez que eu recarregue esta página, aviso é lembrar quantas vezes 563 00:25:58,380 --> 00:25:59,250 Eu estive lá. 564 00:25:59,250 --> 00:26:00,570 Bem, isso não é tão impressionante. 565 00:26:00,570 --> 00:26:03,140 Vamos fechar essa guia, e agora vamos voltar para 566 00:26:03,140 --> 00:26:07,860 http://localhost/counter.php. 567 00:26:07,860 --> 00:26:08,970 >> Oh, isso é interessante. 568 00:26:08,970 --> 00:26:10,960 Ele ainda se lembrava, mesmo embora eu fechei a guia. 569 00:26:10,960 --> 00:26:14,010 E, francamente, se eu fechar o browser, se implementada da maneira certa, eu 570 00:26:14,010 --> 00:26:18,950 poderia ainda lembrar que este usuário é que ele ou ela era a primeira vez, e 571 00:26:18,950 --> 00:26:22,840 apenas uma vez eu vou para o menu do Chrome, que aqui está aqui, e ir para 572 00:26:22,840 --> 00:26:25,990 Histórico e clique em Limpar dados de navegação, como alguns de vocês podem ter no 573 00:26:25,990 --> 00:26:33,050 passado, só então os cookies realmente ser apagado durante web 574 00:26:33,050 --> 00:26:33,970 desenvolvimento. 575 00:26:33,970 --> 00:26:35,340 >> Então, se nós vamos - 576 00:26:35,340 --> 00:26:37,080 vamos fechar-se gedit aqui. 577 00:26:37,080 --> 00:26:38,910 E se nós vamos agora para este arquivo. 578 00:26:38,910 --> 00:26:44,210 Deixe-me ir para o nosso vhosts / localhost / public, e deixe-me fazer 579 00:26:44,210 --> 00:26:46,340 counter.php. 580 00:26:46,340 --> 00:26:48,350 Observe que esta é uma bonita programa simples. 581 00:26:48,350 --> 00:26:50,250 É um site bem simples. 582 00:26:50,250 --> 00:26:51,770 >> Assim, a parte superior do arquivo está apenas a comentários. 583 00:26:51,770 --> 00:26:54,930 Mas aqui está uma nova linha que você pode Já vimos em-p definir sete, 584 00:26:54,930 --> 00:26:56,000 session_start (). 585 00:26:56,000 --> 00:27:00,380 Esta é uma linha de código PHP que essencialmente, diz o servidor web, fazer 586 00:27:00,380 --> 00:27:03,400 Certifique-se de carimbar as mãos e fazer Certifique-se de verificar carimbos manuais. 587 00:27:03,400 --> 00:27:06,810 Isso é tudo o que a linha faz, e faz todo esse processo para nós. 588 00:27:06,810 --> 00:27:09,510 Então observe Eu só tenho duas filiais aqui. 589 00:27:09,510 --> 00:27:14,150 Se o contador chave dentro desta variável global especial chamada 590 00:27:14,150 --> 00:27:18,010 $ _ Session está definido - por outras palavras, se há algum valor lá - 591 00:27:18,010 --> 00:27:22,440 vamos obtê-lo e armazená-lo em um local de variável chamada $ contador. 592 00:27:22,440 --> 00:27:27,000 Senão, vamos atribuir $ counter o valor padrão de 0. 593 00:27:27,000 --> 00:27:30,320 >> Ora aqui está um aspecto do PHP que é tanto uma bênção e uma maldição. 594 00:27:30,320 --> 00:27:32,080 PHP é um pouco desleixado. 595 00:27:32,080 --> 00:27:35,160 Assim, enquanto no C, o que seria o âmbito do contador foram 596 00:27:35,160 --> 00:27:36,725 seja aqui ou aqui? 597 00:27:36,725 --> 00:27:39,270 598 00:27:39,270 --> 00:27:41,690 >> Teria sido confinado a essas chaves. 599 00:27:41,690 --> 00:27:42,090 Adivinha o quê? 600 00:27:42,090 --> 00:27:46,920 No PHP, ele existe mesmo fora dos chaves, aqui, e aqui, 601 00:27:46,920 --> 00:27:49,120 e aqui, e aqui, e mesmo abaixo. 602 00:27:49,120 --> 00:27:52,400 Então eu digo isso é uma bênção, no sentido que você não tem que pensar como 603 00:27:52,400 --> 00:27:54,070 duro como fizemos semanas. 604 00:27:54,070 --> 00:27:56,880 Mas também é um pouco de uma maldição em que não importa onde você usa uma variável em 605 00:27:56,880 --> 00:28:00,020 PHP, pelo menos em um programa como este, é globalmente acessível para 606 00:28:00,020 --> 00:28:01,170 melhor ou para pior. 607 00:28:01,170 --> 00:28:06,130 Então você tem que ter em mente agora que suas variáveis ​​não pode ser indefinido. 608 00:28:06,130 --> 00:28:07,640 Você pode ter definido outro lugar. 609 00:28:07,640 --> 00:28:09,460 >> Mas o que é que eu vou fazer, em última instância? 610 00:28:09,460 --> 00:28:13,160 Eu estou indo para armazenar dentro desse mundial variável como um valor do 611 00:28:13,160 --> 00:28:17,060 contador chave o resultado de fazendo contra mais 1. 612 00:28:17,060 --> 00:28:18,910 Portanto, esta é apenas a aritmética que faz o 613 00:28:18,910 --> 00:28:20,590 incrementação do contador que. 614 00:28:20,590 --> 00:28:24,850 E o fato de que eu estou armazenando que valor de volta aqui é meio para 615 00:28:24,850 --> 00:28:29,970 essencialmente atualizar o banco de dados para lembrar que 123456789 utilizador esteve 616 00:28:29,970 --> 00:28:31,010 aqui duas vezes. 617 00:28:31,010 --> 00:28:33,780 E quando eu fazê-lo novamente na próxima vez que recarregar a página, ele vai verificar 618 00:28:33,780 --> 00:28:36,710 meu selo mão e dizer, oh, 123456789 usuário tem agora 619 00:28:36,710 --> 00:28:38,410 Estive aqui três vezes. 620 00:28:38,410 --> 00:28:43,390 >> E então o que linguagens PHP e similares estão fazendo para nós é que eles estão tentando 621 00:28:43,390 --> 00:28:47,720 como e onde e por quanto tempo para armazenar valores neste especial 622 00:28:47,720 --> 00:28:48,830 superglobal. 623 00:28:48,830 --> 00:28:52,750 E esse superglobal na próxima vez que visite a página é uma espécie de passe de mágica 624 00:28:52,750 --> 00:28:57,440 pré-povoada, cheia de valores que estavam lá a última vez que você visitou, 625 00:28:57,440 --> 00:29:02,310 se isso era um segundo atrás, uma semana atrás, ou em 2013, e agora estamos falando 626 00:29:02,310 --> 00:29:03,790 sobre 2015. 627 00:29:03,790 --> 00:29:07,600 PHP eo servidor web cuidar de tudo isso para você. 628 00:29:07,600 --> 00:29:08,850 >> AUDIÊNCIA: [inaudível]. 629 00:29:08,850 --> 00:29:11,900 630 00:29:11,900 --> 00:29:15,760 >> DAVID MALAN: Variáveis ​​em PHP são essencialmente global, a menos que você sempre 631 00:29:15,760 --> 00:29:18,400 declará-los dentro de uma função, e, em seguida, eles são locais para 632 00:29:18,400 --> 00:29:19,420 apenas a função. 633 00:29:19,420 --> 00:29:22,300 Mas porque eu não tenho escrito qualquer funções, eles estão agora efetivamente 634 00:29:22,300 --> 00:29:25,090 mundial ao longo de todo o meu arquivo aqui. 635 00:29:25,090 --> 00:29:26,040 >> AUDIÊNCIA: Existe uma maneira para torná-los local? 636 00:29:26,040 --> 00:29:28,470 >> DAVID MALAN: Existe alguma forma a torná-los local? 637 00:29:28,470 --> 00:29:30,680 Só por envolvê-los em funções. 638 00:29:30,680 --> 00:29:32,790 Que na última versão do PHP, você pode fazer isso com 639 00:29:32,790 --> 00:29:34,130 uma função anônima. 640 00:29:34,130 --> 00:29:35,930 Mas mais sobre isso no contexto de JavaScript. 641 00:29:35,930 --> 00:29:37,260 Mas a resposta é não. 642 00:29:37,260 --> 00:29:40,888 A resposta mais longa é sim. 643 00:29:40,888 --> 00:29:42,380 Nice. 644 00:29:42,380 --> 00:29:43,380 Boa pergunta quiz. 645 00:29:43,380 --> 00:29:43,930 Tudo bem. 646 00:29:43,930 --> 00:29:47,760 >> Então, por fim, a página em si é realmente muito simples. 647 00:29:47,760 --> 00:29:51,470 Observe que uma vez que eu sair do modo PHP, lembre-se que todo este material para baixo 648 00:29:51,470 --> 00:29:53,700 abaixo é só ir para obter espeto a matéria para o navegador. 649 00:29:53,700 --> 00:29:57,050 O que é bom, porque eu quero enviar o usuário um pouco de HTML, mas eu quero 650 00:29:57,050 --> 00:29:59,140 para atualizar dinamicamente que HTML. 651 00:29:59,140 --> 00:30:03,930 E uma maneira que eu posso fazer é classificar de cair muito rapidamente de volta para PHP 652 00:30:03,930 --> 00:30:07,730 modo, use aberto suporte de interrogação sinal de igual, e, em seguida, o valor de saída 653 00:30:07,730 --> 00:30:08,650 do contador. 654 00:30:08,650 --> 00:30:12,360 >> Ou, se isso parece um pouco enigmática, este sinal de igual é na verdade apenas alguns 655 00:30:12,360 --> 00:30:16,190 açúcar sintático para este printf ($ contador). 656 00:30:16,190 --> 00:30:19,160 Mas, francamente, isso é só um pouco feio e um pouco chato de digitar. 657 00:30:19,160 --> 00:30:23,660 Então PHP muito bem oferece esse recurso onde você pode apenas dizer que mais 658 00:30:23,660 --> 00:30:25,450 sucinta da mesma maneira. 659 00:30:25,450 --> 00:30:26,940 >> Então, o que está acontecendo por baixo o capô? 660 00:30:26,940 --> 00:30:31,210 Vamos olhar rapidamente na rede guia aqui para counter.php. 661 00:30:31,210 --> 00:30:35,090 E deixe-me ir em frente e primeiro Vamos limpar os cookies. 662 00:30:35,090 --> 00:30:38,670 Limpar dados de navegação Vamos desde o início do tempo. 663 00:30:38,670 --> 00:30:39,680 Agora vamos voltar para cá. 664 00:30:39,680 --> 00:30:41,340 Agora vamos recarregar a página. 665 00:30:41,340 --> 00:30:42,170 E eu estou de volta a zero. 666 00:30:42,170 --> 00:30:44,810 Porque o meu selo de mão foi lavado, Agora começa um novo cookie. 667 00:30:44,810 --> 00:30:48,780 >> De fato, se eu olhar para o guia da rede e olhar para cabeçalhos de resposta, observe 668 00:30:48,780 --> 00:30:51,960 que o aparelho está me enviando um cookie cujo nome é um pouco 669 00:30:51,960 --> 00:30:55,820 arbitrariamente, mas o tipo de razoavelmente, PHPSESSID. 670 00:30:55,820 --> 00:30:58,440 E isso está me mandando isso realmente número aleatório grande. 671 00:30:58,440 --> 00:30:59,440 Não é um bom número. 672 00:30:59,440 --> 00:31:00,390 Não é bem hexadecimal. 673 00:31:00,390 --> 00:31:03,600 É uma espécie de seqüência alfanumérica, mas provavelmente é aleatória. 674 00:31:03,600 --> 00:31:06,830 E esse é o selo de mão, de modo a falar que eu estou me referindo. 675 00:31:06,830 --> 00:31:11,960 >> Enquanto isso, se eu clicar em recarregar e, em seguida, olhar para esta segunda linha para a minha segunda 676 00:31:11,960 --> 00:31:17,600 pedido, observe agora que o meu pedido cabeçalhos incluem PHPSESSID iguala esta, 677 00:31:17,600 --> 00:31:19,390 não set-cookie, mas apenas cookie. 678 00:31:19,390 --> 00:31:22,950 E isso é a apresentação do meu navegador do meu selo de mão. 679 00:31:22,950 --> 00:31:28,820 >> Então, agora como um teaser, e nós vamos falar mais sobre isso em uma semana ou assim, mas 680 00:31:28,820 --> 00:31:31,590 de que forma isso faz você vulnerável, sua conta de Facebook 681 00:31:31,590 --> 00:31:34,137 vulneráveis, e outros, tais contas vulneráveis? 682 00:31:34,137 --> 00:31:35,510 >> AUDIÊNCIA: Se alguém tem o seu cookie. 683 00:31:35,510 --> 00:31:36,750 >> DAVID MALAN: Sim, se alguém tem seu cookie. 684 00:31:36,750 --> 00:31:39,920 Quero dizer, realmente, muito parecido com alguns de vocês poderia ter tentado a como um clube ou um 685 00:31:39,920 --> 00:31:44,030 parque de diversões, se você tentar alguma coisa como este para copiar o selo, embora 686 00:31:44,030 --> 00:31:47,560 para trás a mão de outra pessoa, e então ele ou ela apresenta como 687 00:31:47,560 --> 00:31:53,250 conta própria, se ele realmente se parece idênticos, 123456789, então a teia 688 00:31:53,250 --> 00:31:57,980 servidor aparentemente está indo só para confiar em que o usuário é você. 689 00:31:57,980 --> 00:32:01,450 >> E isso é realmente um direito fundamental ameaça a qualquer momento você usar cookies 690 00:32:01,450 --> 00:32:05,420 porque se alguém apenas satiriza assim falar o seu cookie, descobre o que 691 00:32:05,420 --> 00:32:08,660 é, seja por realmente copiá-lo , olhando para o seu computador 692 00:32:08,660 --> 00:32:09,890 e sendo assim, OK. 693 00:32:09,890 --> 00:32:14,520 Bolinho de David é JJ3JIK e assim por diante, e, em seguida, eles são inteligentes o suficiente para saber 694 00:32:14,520 --> 00:32:18,080 como classificar de enviar manualmente que biscoito a partir de uma ou de um navegador 695 00:32:18,080 --> 00:32:22,350 programa eles escrevem, eles poderiam totalmente entrar em um site que você. 696 00:32:22,350 --> 00:32:28,560 Não é tão difícil de fingir ser outra pessoa, a menos que revisitar p-set 697 00:32:28,560 --> 00:32:30,790 dois, que introduziu o quê? 698 00:32:30,790 --> 00:32:32,065 >> AUDIÊNCIA: Criptografia. 699 00:32:32,065 --> 00:32:33,860 >> DAVID MALAN: Um pouco bit de criptografia. 700 00:32:33,860 --> 00:32:36,550 Criptografia simples, pelo menos na Standard Edition, mas crypto 701 00:32:36,550 --> 00:32:36,870 no entanto. 702 00:32:36,870 --> 00:32:37,410 menos. 703 00:32:37,410 --> 00:32:41,440 Assim, verifica-se se você criptografar todos estes cabeçalhos usando algo que você 704 00:32:41,440 --> 00:32:48,770 pode agora saber mais familiarmente como SSL, secure socket layer, ou URLs https:// 705 00:32:48,770 --> 00:32:51,890 em seguida, todas essas coisas que estivemos olhando são realmente criptografado, 706 00:32:51,890 --> 00:32:54,800 o que significa que é como se você não consegue ler o selo mão. 707 00:32:54,800 --> 00:32:59,350 Apenas facebook.com pode, ou google.com, ou, neste caso, o aparelho pode 708 00:32:59,350 --> 00:33:00,550 leia esse selo mão. 709 00:33:00,550 --> 00:33:04,020 >> Tragicamente, porém, e mais uma vez, este é muito apropriado com o material NSA 710 00:33:04,020 --> 00:33:06,410 de tarde, mesmo SSL é quebrável. 711 00:33:06,410 --> 00:33:09,850 E na verdade não é tão difícil até mesmo quebrar a criptografia. 712 00:33:09,850 --> 00:33:12,040 Não tanto por quebrar a criptografia, mas enganando o 713 00:33:12,040 --> 00:33:15,720 navegador para descriptografar os dados prematuramente. 714 00:33:15,720 --> 00:33:17,880 Mas, novamente, vamos provocá-lo com que em pouco tempo. 715 00:33:17,880 --> 00:33:21,242 Por agora, basta ter medo. 716 00:33:21,242 --> 00:33:23,070 É tragicamente tipo de verdade. 717 00:33:23,070 --> 00:33:23,760 >> Tudo bem. 718 00:33:23,760 --> 00:33:27,910 Então, onde é que isto agora nos deixa? 719 00:33:27,910 --> 00:33:29,010 Bem, vamos fazer isso. 720 00:33:29,010 --> 00:33:31,790 Vamos em frente e dê uma rápida provocação antes de fazer uma pausa. 721 00:33:31,790 --> 00:33:33,790 E eu acho que nós vamos demorar um pouco mais hoje, mas vamos mergulhar 722 00:33:33,790 --> 00:33:37,850 algo novo e sexy, que será aguçar o apetite para mais. 723 00:33:37,850 --> 00:33:38,950 Então, isso é o teaser. 724 00:33:38,950 --> 00:33:41,520 >> Então, SQL, começamos a falar sobre sempre tão brevemente última vez. 725 00:33:41,520 --> 00:33:44,670 Você realmente vai sujar as mãos com alguns deles em-p definir sete. 726 00:33:44,670 --> 00:33:46,480 E, em termos leigos, o que faz SQL - 727 00:33:46,480 --> 00:33:47,110 S-Q-L - 728 00:33:47,110 --> 00:33:49,850 para você? 729 00:33:49,850 --> 00:33:50,310 O que é isso? 730 00:33:50,310 --> 00:33:51,546 Sim. 731 00:33:51,546 --> 00:33:53,240 >> AUDIÊNCIA: Vamos-lhe dados de acesso. 732 00:33:53,240 --> 00:33:53,360 >> DAVID MALAN: Yeah. 733 00:33:53,360 --> 00:33:55,120 É você deixar os dados de acesso numa base de dados. 734 00:33:55,120 --> 00:33:56,710 Structured Query Language. 735 00:33:56,710 --> 00:33:59,890 E isto é, essencialmente, um linguagem de programação. 736 00:33:59,890 --> 00:34:03,400 Existem recursos de que não vamos mesmo usar em sala de aula. 737 00:34:03,400 --> 00:34:04,710 Mas você pode efetivamente definir funções. 738 00:34:04,710 --> 00:34:06,870 Eles são chamados armazenados procedimentos em SQL. 739 00:34:06,870 --> 00:34:09,860 Mas nós vamos mantê-lo bastante simples e apenas usá-lo para algumas operações básicas 740 00:34:09,860 --> 00:34:14,320 como a seleção de dados, inserção de dados, atualização de dados e exclusão de dados. 741 00:34:14,320 --> 00:34:17,400 >> E você pode realmente pensar em um banco de dados, como um banco de dados SQL, como apenas 742 00:34:17,400 --> 00:34:18,800 sendo Microsoft Excel. 743 00:34:18,800 --> 00:34:21,989 Como o SQL se refere a um relacional base de dados, onde 744 00:34:21,989 --> 00:34:23,480 relação significa apenas tabelas. 745 00:34:23,480 --> 00:34:24,739 Linhas e colunas. 746 00:34:24,739 --> 00:34:27,929 Então, qualquer coisa que você pode colocar em uma planilha assim ou o Google Docs, 747 00:34:27,929 --> 00:34:32,460 você poderia colocar em um banco de dados SQL declarando uma tabela. 748 00:34:32,460 --> 00:34:34,800 >> Agora, como você realmente acessar essa informação? 749 00:34:34,800 --> 00:34:38,239 Bem, com comandos ou consultas como esta. 750 00:34:38,239 --> 00:34:40,199 SELECT, INSERT, UPDATE e DELETE. 751 00:34:40,199 --> 00:34:44,489 E para a maioria dos casos, estes são o quatro apenas ingredientes que você precisa para 752 00:34:44,489 --> 00:34:47,370 fazer algo bastante poderosamente no conjunto de problemas sete. 753 00:34:47,370 --> 00:34:49,940 >> Agora, de volta ao dia, você realmente interagir com um banco de dados em um 754 00:34:49,940 --> 00:34:52,730 janela do terminal preto e branco em um prompt piscando assim. 755 00:34:52,730 --> 00:34:56,370 E o banco de dados que estamos executando no aparelho é chamado MySQL, que é 756 00:34:56,370 --> 00:34:58,560 motor de banco de dados livre e open source. 757 00:34:58,560 --> 00:35:02,240 Se você Google e ler a Wikipedia artigo, você vai saber que o nome é 758 00:35:02,240 --> 00:35:05,060 um pouco de transição para alguns versões do Linux. 759 00:35:05,060 --> 00:35:10,460 Banco de dados de Maria é na verdade um garfo para falar de MySQL. 760 00:35:10,460 --> 00:35:12,740 >> Longa história curta, a Oracle comprou a MySQL. 761 00:35:12,740 --> 00:35:13,870 A Oracle é uma grande empresa. 762 00:35:13,870 --> 00:35:17,010 As pessoas têm medo de que seria já não permanecem bastante como open source, 763 00:35:17,010 --> 00:35:20,930 então este é apenas uma cópia do MySQL que é ainda livre, ainda open source, e 764 00:35:20,930 --> 00:35:23,550 instalado no Fedora Linux por padrão. 765 00:35:23,550 --> 00:35:26,130 >> Mas este é um tipo de dor no pescoço para se familiarizar com a 766 00:35:26,130 --> 00:35:27,310 banco de dados desta forma. 767 00:35:27,310 --> 00:35:30,560 Assim, incluir no aparelho CS50 uma ferramenta open source gratuito chamado 768 00:35:30,560 --> 00:35:31,700 phpMyAdmin. 769 00:35:31,700 --> 00:35:33,940 Apenas uma coincidência que é escrito em PHP. 770 00:35:33,940 --> 00:35:36,450 Não há nenhuma base necessidade de PHP aqui. 771 00:35:36,450 --> 00:35:40,090 Mas esta é apenas uma ferramenta baseada na Web que que baixado gratuitamente, instalado em 772 00:35:40,090 --> 00:35:43,850 o aparelho, que nos permite ter uma interface gráfica do usuário com o qual 773 00:35:43,850 --> 00:35:48,610 para explorar a base de dados de sete-p definida com que para criar novos bancos de dados, 774 00:35:48,610 --> 00:35:51,980 dizer para o seu próprio projeto final se tivesse como e, finalmente, criar 775 00:35:51,980 --> 00:35:55,900 sites dinâmicos como CS50 Finanças que lhe permitem consultar dados e 776 00:35:55,900 --> 00:35:58,140 atualizar os dados dinamicamente. 777 00:35:58,140 --> 00:36:01,420 >> Você não vai ter que usar apenas um arquivo de texto simples ou CSV. 778 00:36:01,420 --> 00:36:05,950 Você pode realmente usar um banco de dados inteligente programa para que você possa executar mais 779 00:36:05,950 --> 00:36:10,240 consultas sofisticadas do que apenas a leitura através de tudo de forma linear. 780 00:36:10,240 --> 00:36:14,150 >> Assim, por exemplo, é isso que nós damos você fora da caixa para-p definir sete. 781 00:36:14,150 --> 00:36:18,280 Esta é uma tabela com, aparentemente, pelo menos três colunas, uma das quais está 782 00:36:18,280 --> 00:36:21,450 nome de utilizador, um dos quais é de hash, e o outro dos quais é ID. 783 00:36:21,450 --> 00:36:26,200 >> Mas a coisa interessante, e apenas para destrinchar um pensamento aqui, nome de usuário 784 00:36:26,200 --> 00:36:29,270 é, presumivelmente, já único, certo? 785 00:36:29,270 --> 00:36:31,190 Quero dizer, a maioria qualquer site, se você tem um nome de usuário, não 786 00:36:31,190 --> 00:36:32,370 Não pode haver dois Césares. 787 00:36:32,370 --> 00:36:33,440 Não pode haver dois Malans. 788 00:36:33,440 --> 00:36:34,950 Não pode haver dois jharvards. 789 00:36:34,950 --> 00:36:35,600 A sua única. 790 00:36:35,600 --> 00:36:38,610 Caso contrário, eles não sabem o que jharvard que realmente é. 791 00:36:38,610 --> 00:36:42,710 Então, o que pode ser a motivação para também tendo uma terceira coluna da esquerda 792 00:36:42,710 --> 00:36:46,970 lá chamado ID, o que parece um número que é semelhante única? 793 00:36:46,970 --> 00:36:51,300 Parece um pouco redundante para mim à primeira vista. 794 00:36:51,300 --> 00:36:54,910 Por isso pode ser atraente para ter não apenas nomes de usuários únicos, 795 00:36:54,910 --> 00:36:56,837 mas também números exclusivos? 796 00:36:56,837 --> 00:36:59,460 >> AUDIÊNCIA: Eles poderiam ter a mesma senha. 797 00:36:59,460 --> 00:37:01,720 >> DAVID MALAN: As pessoas podem ter a mesma senha, com certeza. 798 00:37:01,720 --> 00:37:03,900 Isso pode absolutamente acontecer. 799 00:37:03,900 --> 00:37:08,270 Mas se eles têm esse nome de usuário único, I diria que isso não faz muito 800 00:37:08,270 --> 00:37:11,630 matéria, porque se eles digitar seu nome de usuário, eu só preciso verificar a sua 801 00:37:11,630 --> 00:37:15,060 senha, seu hash de facto. 802 00:37:15,060 --> 00:37:15,970 Por que mais? 803 00:37:15,970 --> 00:37:17,950 >> AUDIÊNCIA: Mais rápido pesquisando. 804 00:37:17,950 --> 00:37:18,680 >> DAVID MALAN: Faster pesquisa. 805 00:37:18,680 --> 00:37:19,548 Por quê? 806 00:37:19,548 --> 00:37:21,460 >> AUDIÊNCIA: ID é apenas um. 807 00:37:21,460 --> 00:37:24,040 >> DAVID MALAN: ID é apenas um personagem, ou para ser mais preciso, é um número, 808 00:37:24,040 --> 00:37:26,910 por isso é provavelmente 32 bits ou algo assim. 809 00:37:26,910 --> 00:37:30,270 Considerando que o nome de utilizador, aparentemente Jason Up de Hirschhorn não é uma espécie de 810 00:37:30,270 --> 00:37:33,900 ridiculamente muito tempo, e que vai me levar muito mais tempo para string 811 00:37:33,900 --> 00:37:40,910 comparar H-I-R-S-C-H-H-O-R-N, e talvez a / 0 ou algo assim, em ordem 812 00:37:40,910 --> 00:37:45,100 para procurar Jason, ao invés de apenas dizendo-me dar o número do usuário dois. 813 00:37:45,100 --> 00:37:46,510 Isso é 32 bits. 814 00:37:46,510 --> 00:37:48,550 É um único INT que você tem que comparar. 815 00:37:48,550 --> 00:37:52,150 E, de fato, é exatamente por isso que os bancos de dados tendem a atribuir IDs únicos para 816 00:37:52,150 --> 00:37:53,710 linhas neles. 817 00:37:53,710 --> 00:37:56,280 >> Agora, o que outros tipos de dados estão lá além de INT e, aparentemente, 818 00:37:56,280 --> 00:37:57,160 cordas como este? 819 00:37:57,160 --> 00:37:59,700 Bem, para ser mais adequada, Bancos de dados SQL, como 820 00:37:59,700 --> 00:38:02,060 MySQL, têm campos CHAR. 821 00:38:02,060 --> 00:38:05,320 E CHAR um pouco enganadora não é uma única CHAR. 822 00:38:05,320 --> 00:38:10,290 Um campo CHAR em um banco de dados MySQL é um ou mais caracteres, mas é um 823 00:38:10,290 --> 00:38:11,780 número fixo de caracteres. 824 00:38:11,780 --> 00:38:15,710 >> Assim, por exemplo, se eu passar por cima de phpMyAdmin como você já deve ter ou 825 00:38:15,710 --> 00:38:21,340 em breve um conjunto de problemas de sete, e eu vou para o meu banco de dados, e apenas por diversão, 826 00:38:21,340 --> 00:38:25,700 vamos criar uma nova tabela chamada testar com apenas duas colunas. 827 00:38:25,700 --> 00:38:27,160 Eu vou clique em Ir. 828 00:38:27,160 --> 00:38:30,070 E isso vai se tornar muito familiar, especialmente quando você mexer 829 00:38:30,070 --> 00:38:31,130 em torno de seu próprio país. 830 00:38:31,130 --> 00:38:34,140 Aqui posso digitar ID para criar uma nova tabela do tipo INT. 831 00:38:34,140 --> 00:38:37,770 Mas aqui eu pode digitar nome de usuário para recriar a tabela anterior. 832 00:38:37,770 --> 00:38:40,700 E notem que eu tenho um grupo inteiro de tipos para escolher. 833 00:38:40,700 --> 00:38:43,610 >> E isso também é por isso que phpMyAdmin é uma espécie de bom. 834 00:38:43,610 --> 00:38:46,770 É uma espécie de auto-aprendizagem, em que você pode apenas uma espécie de ponto e clique, e 835 00:38:46,770 --> 00:38:50,730 olhar para menus suspensos, e inferir que o que lhe dá poderes SQL. 836 00:38:50,730 --> 00:38:54,090 >> E, de fato, se eu escolher CHAR, então eu tem que especificar o comprimento, ou como 837 00:38:54,090 --> 00:38:55,940 diversos valores, quantos CHARs. 838 00:38:55,940 --> 00:39:00,090 Valores muito comuns são coisas como 255, mas isso é um pouco longo. 839 00:39:00,090 --> 00:39:02,250 Comumente é de oito para um nome de usuário. 840 00:39:02,250 --> 00:39:03,590 Mas isso é um pouco pequeno estes dias. 841 00:39:03,590 --> 00:39:05,430 Portanto, esta é uma decisão de projeto. 842 00:39:05,430 --> 00:39:08,630 É 8 caracteres no máximo, 32, 255, 1000? 843 00:39:08,630 --> 00:39:09,830 É realmente até você. 844 00:39:09,830 --> 00:39:12,350 Mas um campo CHAR é um número fixo. 845 00:39:12,350 --> 00:39:16,420 Portanto, escolha muito poucos e você é do tipo parafusado, se você quer um nome de usuário maior. 846 00:39:16,420 --> 00:39:19,132 Escolha demais e que é a desvantagem? 847 00:39:19,132 --> 00:39:20,820 >> AUDIÊNCIA: [inaudível]. 848 00:39:20,820 --> 00:39:21,620 >> DAVID MALAN: É um desperdício. 849 00:39:21,620 --> 00:39:24,835 Assim como em C, se você tem uma maior pedaço de memória que você precisa, você está 850 00:39:24,835 --> 00:39:27,190 apenas perdendo tempo e desperdiçando espaço. 851 00:39:27,190 --> 00:39:31,430 Assim, como uma alternativa, existe VARCHAR, que resolve este problema 852 00:39:31,430 --> 00:39:36,390 Duração do tratamento e não como um comprimento fixo, mas como o comprimento máximo, e usando um 853 00:39:36,390 --> 00:39:40,990 número variável de caracteres, que, em seguida, tende a usar apenas o número de CHARs como você 854 00:39:40,990 --> 00:39:42,710 realmente precisa. 855 00:39:42,710 --> 00:39:43,670 Isso soa perfeito. 856 00:39:43,670 --> 00:39:45,640 >> Por que não se livrar do Tipo de dados char, então? 857 00:39:45,640 --> 00:39:48,500 O que poderia ser a desvantagem de usando VARCHARs, que soa 858 00:39:48,500 --> 00:39:51,644 como se fosse uma bela vitória? 859 00:39:51,644 --> 00:39:52,596 Sim? 860 00:39:52,596 --> 00:39:53,846 >> AUDIÊNCIA: [inaudível]. 861 00:39:53,846 --> 00:39:57,360 862 00:39:57,360 --> 00:39:57,790 >> DAVID MALAN: OK, muito bom. 863 00:39:57,790 --> 00:40:01,101 Então, se todos os seus dados é o mesmo comprimento, qual é a preocupação? 864 00:40:01,101 --> 00:40:05,250 >> AUDIÊNCIA: Porque você está desperdiçando dados, dizendo-lhes tudo. 865 00:40:05,250 --> 00:40:09,060 >> DAVID MALAN: Então, se todos os seus dados é o mesmo comprimento, porém, eu diria 866 00:40:09,060 --> 00:40:12,300 especificando que o comprimento máximo em VARCHAR não é diferente de 867 00:40:12,300 --> 00:40:16,070 especificando um comprimento fixo sobre se CHAR você sabe que o número de antecedência. 868 00:40:16,070 --> 00:40:19,500 Mas não é verdade, e eu vou classificar de extrair que a resposta à realidade 869 00:40:19,500 --> 00:40:22,610 que ainda há um máximo, o que poderia ser irritante, especialmente se você 870 00:40:22,610 --> 00:40:25,920 encontrar o nome de uma pessoa que está excepcionalmente longo que você não fez 871 00:40:25,920 --> 00:40:26,860 antecipar. 872 00:40:26,860 --> 00:40:31,420 E também é um pouco menos eficiente para realmente pesquisar sobre VARCHARs como 873 00:40:31,420 --> 00:40:35,620 oposição à busca CHARs, especialmente para mesas compridas que têm lotes e 874 00:40:35,620 --> 00:40:36,510 grandes quantidades de dados. 875 00:40:36,510 --> 00:40:40,060 Portanto, aqui também, temática é novamente nenhuma escolha óbvia. 876 00:40:40,060 --> 00:40:42,870 >> Então, só para lhe dar uma sensação de outro tipos de dados que podem ser de seu interesse 877 00:40:42,870 --> 00:40:45,400 tanto para p-set sete ou o futuro, há INT. 878 00:40:45,400 --> 00:40:47,270 Há BIGINT, que é como long long. 879 00:40:47,270 --> 00:40:48,880 Ele tende a ser de 64 bits. 880 00:40:48,880 --> 00:40:51,640 Há decimal, que você verá no o conjunto de problemas, que é um tanto 881 00:40:51,640 --> 00:40:55,300 limpador resposta aos problemas que encontrado com flutuador e flutuando 882 00:40:55,300 --> 00:40:55,980 imprecisão ponto. 883 00:40:55,980 --> 00:40:57,390 E depois há DATETIME. 884 00:40:57,390 --> 00:41:01,530 Há, literalmente, um tipo de dados que tem a aparência de um ano, um mês, um dia, 885 00:41:01,530 --> 00:41:03,730 e uma hora, minuto e segundo. 886 00:41:03,730 --> 00:41:07,470 >> Mas bancos de dados SQL também têm coisas que vou chamar índices. 887 00:41:07,470 --> 00:41:11,630 E um índice é algo que você especificar ao criar a tabela de 888 00:41:11,630 --> 00:41:15,720 fazer pesquisas e outras operações mais eficiente. 889 00:41:15,720 --> 00:41:18,550 Especificamente, há algo chamado o índice primário que você poderia 890 00:41:18,550 --> 00:41:19,440 declarar como se segue. 891 00:41:19,440 --> 00:41:22,330 >> Fizemos isso para você com a tabela de usuários que te dar. 892 00:41:22,330 --> 00:41:26,160 Mas repare se eu fosse recriar manualmente a tabela de usuários aqui dando 893 00:41:26,160 --> 00:41:27,110 um nome de usuários. 894 00:41:27,110 --> 00:41:28,125 Eu já especificado ID. 895 00:41:28,125 --> 00:41:29,330 Eu especifiquei INT. 896 00:41:29,330 --> 00:41:32,000 Eu especifiquei nome de usuário com máximo de 32 caracteres. 897 00:41:32,000 --> 00:41:36,140 Mas se continuarmos a rolagem neste bastante ampla janela, observe que há uma 898 00:41:36,140 --> 00:41:38,260 monte de outras coisas que eu posso especificar. 899 00:41:38,260 --> 00:41:40,950 >> Um deles, posso especificar atributos como, você sabe o quê, isso 900 00:41:40,950 --> 00:41:42,190 INT deve ser assinado. 901 00:41:42,190 --> 00:41:45,510 Eu não quero que os números negativos, então vamos fazê-lo sem sinal. 902 00:41:45,510 --> 00:41:48,660 Nulo não é relevante aqui porque Eu quero que cada usuário 903 00:41:48,660 --> 00:41:49,640 têm um número ímpar. 904 00:41:49,640 --> 00:41:50,830 Eu não quero que seja nulo. 905 00:41:50,830 --> 00:41:52,330 >> Mas isso é interessante. 906 00:41:52,330 --> 00:41:57,780 Eu posso especificar que ID seja o chave primária desta base de dados, ou é 907 00:41:57,780 --> 00:42:00,620 texto único, ou é indexado, ou completo. 908 00:42:00,620 --> 00:42:05,630 Assim, para fins de hoje, a longa história , principal meio curto que este deve 909 00:42:05,630 --> 00:42:10,570 ser tanto conceitualmente e tecnicamente o campo que usamos para excepcionalmente 910 00:42:10,570 --> 00:42:12,140 identificar os usuários. 911 00:42:12,140 --> 00:42:16,140 >> Assim, quando olhamos para os usuários, esta é uma espécie de uma promessa de procurá-los principalmente por 912 00:42:16,140 --> 00:42:17,370 que identificador exclusivo. 913 00:42:17,370 --> 00:42:21,930 E o banco de dados irá garantir que, se você tem um número de usuário 3, você não pode 914 00:42:21,930 --> 00:42:25,400 inserir fisicamente outro usuário com o mesmo número 3. 915 00:42:25,400 --> 00:42:28,380 O banco de dados vai simplesmente se recusam para salvar suas alterações. 916 00:42:28,380 --> 00:42:32,310 Que é uma coisa boa, porque você pode proteger-se de si mesmo. eu 917 00:42:32,310 --> 00:42:34,270 >> Alternativamente, o nome de usuário. 918 00:42:34,270 --> 00:42:37,670 Assim, a segunda linha, aviso, é o campo de nome de usuário. 919 00:42:37,670 --> 00:42:41,860 Assim, a segunda linha aqui é nome de utilizador, como fizemos no canto esquerdo lá. 920 00:42:41,860 --> 00:42:43,940 >> Então, o que mais eu poderia querer especificar? 921 00:42:43,940 --> 00:42:47,840 Eu não estou autorizado, de acordo com o SQL, para especificar duas chaves primárias. 922 00:42:47,840 --> 00:42:50,750 você pode especificar uma chave de conjunto, onde você olhar para ambos os campos, mas não podem 923 00:42:50,750 --> 00:42:52,260 ser individualmente chaves primárias. 924 00:42:52,260 --> 00:42:54,750 Então, isso é fora de questão. 925 00:42:54,750 --> 00:42:56,040 Então, o que eu poderia querer escolher? 926 00:42:56,040 --> 00:42:59,710 >> Bem, UNIQUE é semelhante em espírito a um chave primária, onde você especificar esta 927 00:42:59,710 --> 00:43:03,570 campo deve ser único, mas é não vai ser o único 928 00:43:03,570 --> 00:43:04,410 Eu uso o tempo todo. 929 00:43:04,410 --> 00:43:08,450 E nós não estamos indo para usar este tudo o tempo para o que razão outra vez? 930 00:43:08,450 --> 00:43:10,490 É mais lento, potencialmente, se é uma longa username. 931 00:43:10,490 --> 00:43:11,740 É apenas um desperdício de tempo. 932 00:43:11,740 --> 00:43:16,140 >> INDEX, por sua vez, especifica que é não vai ser único, mas eu gostaria 933 00:43:16,140 --> 00:43:19,470 você trabalhar sua magia debaixo do capô para torná-lo mais rápido para mim 934 00:43:19,470 --> 00:43:21,420 pesquisa neste campo. 935 00:43:21,420 --> 00:43:23,320 Então, isso provavelmente não é relevante aqui. 936 00:43:23,320 --> 00:43:26,500 Para nome de usuário, eu diria que UNIQUE é uma boa resposta. 937 00:43:26,500 --> 00:43:31,200 Mas suponha que fizemos os usuários mais interessante do que apenas nomes de usuário, 938 00:43:31,200 --> 00:43:32,430 hashes, e números de identificação. 939 00:43:32,430 --> 00:43:33,860 E se deu às pessoas nomes completos? 940 00:43:33,860 --> 00:43:37,700 E se nós lhes deu endereços e outros dados sobre eles? 941 00:43:37,700 --> 00:43:43,360 >> Bem, se você especificar que uma coluna em uma banco de dados é indexado, isso significa que 942 00:43:43,360 --> 00:43:47,730 MySQL ou Oracle, ou qualquer banco de dados você está usando, deve trabalhar a sua magia 943 00:43:47,730 --> 00:43:51,300 e usar algum tipo de dados fantasia estrutura como uma árvore, ou uma trie, ou um 944 00:43:51,300 --> 00:43:55,940 tabela hash, ou algo para garantir que quando você pesquisar dados usando 945 00:43:55,940 --> 00:43:58,150 selecionar nesse campo em particular - 946 00:43:58,150 --> 00:44:01,310 como eu mostrar a todos que vive em Oxford Street. 947 00:44:01,310 --> 00:44:02,540 Uma consulta assim. 948 00:44:02,540 --> 00:44:06,250 Se você tiver especificado de antemão que você quer um índice em que campo, o 949 00:44:06,250 --> 00:44:09,050 pesquisas serão muito, muito mais rápido. 950 00:44:09,050 --> 00:44:12,090 >> Se você não especificar um índice, o melhor você pode fazer é uma busca linear se 951 00:44:12,090 --> 00:44:13,030 ele não está classificada. 952 00:44:13,030 --> 00:44:16,220 Mas se você especificar INDEX, o inteligente pessoas que fizeram o banco de dados - 953 00:44:16,220 --> 00:44:19,340 pessoas como você que agora conhece árvores e tentativas e tabelas de hash - 954 00:44:19,340 --> 00:44:23,220 vai construir automaticamente um tal de dados estrutura na memória RAM para se certificar de que 955 00:44:23,220 --> 00:44:26,050 essas pesquisas são muito mais rápidos. 956 00:44:26,050 --> 00:44:29,660 >> FULLTEXT, entretanto, é semelhante em espírito, mas permite que você faça curinga 957 00:44:29,660 --> 00:44:35,480 pesquisas, como eu mostrar a todos que mora em ruas que começam com a 958 00:44:35,480 --> 00:44:36,960 letra O, por qualquer motivo. 959 00:44:36,960 --> 00:44:38,850 Você pode fazer pesquisas curinga assim. 960 00:44:38,850 --> 00:44:45,880 Ou coisas mais fortes, como mostram me todos os que tem a palavra - 961 00:44:45,880 --> 00:44:49,400 me mostrar a todos cujo nome começa com uma carta particular. 962 00:44:49,400 --> 00:44:51,880 Você pode pesquisar por palavras-chave desta forma. 963 00:44:51,880 --> 00:44:52,630 Tudo bem. 964 00:44:52,630 --> 00:44:55,760 >> Assim, oportunidades de design há potencial. 965 00:44:55,760 --> 00:44:57,740 Há outros que eu vou acenar as mãos no. 966 00:44:57,740 --> 00:45:00,530 Acontece que você pode ter mecanismos de armazenamento diferentes. 967 00:45:00,530 --> 00:45:04,390 E isso é mais misterioso do que precisamos certamente para o problema de definir sete. 968 00:45:04,390 --> 00:45:06,920 Por padrão, o que vocês estão usando algo chamado InnoDB. 969 00:45:06,920 --> 00:45:10,910 Você verá menção a isso em algum lugar A interface do phpMyAdmin mais provável. 970 00:45:10,910 --> 00:45:14,130 Mas sei que há outro projeto decisões que são de potencial 971 00:45:14,130 --> 00:45:18,030 juros vêm projetos finais se você faz algo baseado na web. 972 00:45:18,030 --> 00:45:19,330 >> Mas vamos fazer isso. 973 00:45:19,330 --> 00:45:23,130 Vamos em frente e colocar isso no tela como um teaser para uma história 974 00:45:23,130 --> 00:45:26,330 envolvendo você, um companheiro de quarto, e um copo de leite. 975 00:45:26,330 --> 00:45:28,240 Vamos dar um dois minutos ou então quebrar aqui. 976 00:45:28,240 --> 00:45:31,060 E se você pode ficar por aqui, vamos chegar para trás, olhar um pouco mais em SQL, e 977 00:45:31,060 --> 00:45:35,160 em seguida, um pouco de JavaScript com -p definir oito em mente. 978 00:45:35,160 --> 00:45:36,120 >> Tudo bem. 979 00:45:36,120 --> 00:45:40,420 Então, vamos começar a pensar sobre um caso canto que pode muito facilmente surgir 980 00:45:40,420 --> 00:45:44,240 no contexto da utilização de um banco de dados, ou francamente, mesmo usando as coisas do mundo real 981 00:45:44,240 --> 00:45:46,280 como caixas eletrônicos para conseguir dinheiro. 982 00:45:46,280 --> 00:45:47,640 Então aqui está um frigorífico. 983 00:45:47,640 --> 00:45:50,040 Suponha que você tem um também em seu dormitório ou sua casa. 984 00:45:50,040 --> 00:45:54,990 E você tem um companheiro de quarto, e ambos você realmente gosta de leite, por exemplo. 985 00:45:54,990 --> 00:45:57,210 >> Então você chega em casa da aula um dia. 986 00:45:57,210 --> 00:45:58,490 Ele ou ela ainda não voltou. 987 00:45:58,490 --> 00:45:59,180 Você abre a geladeira. 988 00:45:59,180 --> 00:46:00,870 Você realmente quer um grande copo de leite. 989 00:46:00,870 --> 00:46:01,820 Não há leite. 990 00:46:01,820 --> 00:46:02,920 Então, o que você faz? 991 00:46:02,920 --> 00:46:03,840 Você fecha da geladeira. 992 00:46:03,840 --> 00:46:04,670 Você agarra suas chaves. 993 00:46:04,670 --> 00:46:05,930 Você sai para a praça. 994 00:46:05,930 --> 00:46:09,240 E você começa na fila CVS àqueles coisas Self Checkout, que sempre 995 00:46:09,240 --> 00:46:11,180 demorar mais tempo do que realmente ter caixas. 996 00:46:11,180 --> 00:46:11,820 De qualquer forma. 997 00:46:11,820 --> 00:46:15,490 >> Então, enquanto isso, dot dot dot, seu companheiro de quarto chega em casa e ele ou ela 998 00:46:15,490 --> 00:46:17,440 da mesma forma tem um desejo ardente um pouco de leite. 999 00:46:17,440 --> 00:46:20,380 Assim, ele ou ela abre a geladeira, olha para dentro, e oh, droga. 1000 00:46:20,380 --> 00:46:21,160 Não há leite. 1001 00:46:21,160 --> 00:46:24,750 Assim, ele ou ela vai para fora, acontece a ir para o outro CVS, que era apenas um 1002 00:46:24,750 --> 00:46:27,900 bloquear afastado por algum motivo, e ele ou ela fica na fila para comprar um pouco de leite. 1003 00:46:27,900 --> 00:46:30,480 >> Enquanto isso, você chega em casa, ele ou ela chega em casa, eo que fazer 1004 00:46:30,480 --> 00:46:31,980 você finalmente tem? 1005 00:46:31,980 --> 00:46:33,080 Duas vezes mais leite. 1006 00:46:33,080 --> 00:46:34,620 Mas você realmente não gosto leite muito. 1007 00:46:34,620 --> 00:46:37,300 Então agora você tem tanto leite que agora um deles só vai azedar 1008 00:46:37,300 --> 00:46:37,820 eventualmente. 1009 00:46:37,820 --> 00:46:39,370 Portanto, este é um problema muito ruim. 1010 00:46:39,370 --> 00:46:39,900 Certo? 1011 00:46:39,900 --> 00:46:41,990 >> Então o que aconteceu? 1012 00:46:41,990 --> 00:46:44,810 Então, fundamentalmente, este é o tipo de um exemplo ridículo. 1013 00:46:44,810 --> 00:46:48,580 Mas debaixo do capô, o que nós tivemos acontecer aqui é tanto de você verificados 1014 00:46:48,580 --> 00:46:52,390 o estado de algum pedaço de memória, a geladeira. 1015 00:46:52,390 --> 00:46:54,420 Ambos você verificou o estado de alguma variável. 1016 00:46:54,420 --> 00:46:57,360 Vocês dois tiraram uma conclusão que, em seguida, executado. 1017 00:46:57,360 --> 00:47:01,420 Mas, infelizmente, enquanto seu companheiro de quarto estava na loja, o estado desse 1018 00:47:01,420 --> 00:47:05,670 variável mudou, ele ou ela voltou e agora quer mudar o estado, mas 1019 00:47:05,670 --> 00:47:07,480 ele já foi mudado sobre ele ou ela. 1020 00:47:07,480 --> 00:47:11,120 E, claro, ele ou ela não teria ido à loja se eles sabiam 1021 00:47:11,120 --> 00:47:13,010 que já estavam a caminho. 1022 00:47:13,010 --> 00:47:16,430 >> Assim, no mundo real, como você pôde evitar esse problema, supondo que você tem 1023 00:47:16,430 --> 00:47:18,940 uma geladeira, você tem um companheiro de quarto, e você realmente gosta de leite? 1024 00:47:18,940 --> 00:47:19,760 >> AUDIÊNCIA: Comunicação. 1025 00:47:19,760 --> 00:47:20,580 >> DAVID MALAN: Comunicação. 1026 00:47:20,580 --> 00:47:21,160 OK. 1027 00:47:21,160 --> 00:47:22,500 Mas como você pode se comunicar? 1028 00:47:22,500 --> 00:47:23,990 >> AUDIÊNCIA: Deixe um recado. 1029 00:47:23,990 --> 00:47:25,480 >> DAVID MALAN: Deixe uma nota, certo? 1030 00:47:25,480 --> 00:47:28,025 Sempre deixar uma nota, por os fãs da série. 1031 00:47:28,025 --> 00:47:31,580 Tudo bem, então sempre deixar um bilhete, ou colocar verdadeiramente como um cadeado ou algo 1032 00:47:31,580 --> 00:47:35,440 na geladeira que mantém o seu companheiro de quarto de inspecionar o estado de 1033 00:47:35,440 --> 00:47:36,540 essa variável. 1034 00:47:36,540 --> 00:47:40,800 >> Agora, por que isso pode ser pertinente para conjunto de problemas de sete, ou para caixas eletrônicos. 1035 00:47:40,800 --> 00:47:46,780 Bem, imagine um mundo em um caixa eletrônico, onde você pode ser capaz de ir até um caixa eletrônico 1036 00:47:46,780 --> 00:47:48,920 máquina aqui, e outra caixa eletrônico aqui. 1037 00:47:48,920 --> 00:47:50,680 E isso acontece com bastante frequência. 1038 00:47:50,680 --> 00:47:54,150 E suponha que você tinha dois cartões ATM, que é possível obter. 1039 00:47:54,150 --> 00:47:57,420 E você entrar em ambas as máquinas efetivamente ao mesmo tempo, espero que 1040 00:47:57,420 --> 00:47:58,660 enquanto ninguém está olhando. 1041 00:47:58,660 --> 00:48:01,260 E então você digitar seu PIN aproximadamente ao mesmo tempo. 1042 00:48:01,260 --> 00:48:06,280 E então você faz uma consulta equilíbrio ver quanto dinheiro você tem. 1043 00:48:06,280 --> 00:48:08,920 E digamos que você tem $ 100 deixou em sua conta. 1044 00:48:08,920 --> 00:48:13,310 Então, basicamente ao mesmo tempo, você dizer um, zero, zero, entrar. 1045 00:48:13,310 --> 00:48:16,000 E espero voltar algum dinheiro. 1046 00:48:16,000 --> 00:48:18,440 >> Mas quanto dinheiro você pode receber de volta? 1047 00:48:18,440 --> 00:48:21,710 Agora, os computadores, no final do dia, especialmente se eles estão falando 1048 00:48:21,710 --> 00:48:27,360 servidores, não necessariamente fazer coisas na ordem em que é esperado. 1049 00:48:27,360 --> 00:48:30,860 >> Então suponho que o que acontece, por causa da qualquer rede problemas de velocidade lá 1050 00:48:30,860 --> 00:48:34,530 são, ou questões de CPU existem, ou nada disso, suponha que o 1051 00:48:34,530 --> 00:48:38,530 primeiro ATM verifica seu saldo e vê, oh, essa pessoa tem US $ 100. 1052 00:48:38,530 --> 00:48:41,840 Mas, então, se distrai porque talvez uma cópia de segurança está acontecendo e por isso é 1053 00:48:41,840 --> 00:48:42,500 abrandar. 1054 00:48:42,500 --> 00:48:45,080 Ou talvez durante a verificação, a rede conexão ficou um pouco mais lento porque 1055 00:48:45,080 --> 00:48:45,910 isso simplesmente acontece. 1056 00:48:45,910 --> 00:48:47,100 Eles são dispositivos físicos. 1057 00:48:47,100 --> 00:48:49,330 Então, enquanto isso, a segunda caixa eletrônico é fazendo a mesma pergunta. 1058 00:48:49,330 --> 00:48:53,030 Quanto dinheiro é que David tem? US $ 100 é a resposta. 1059 00:48:53,030 --> 00:48:58,930 Mas porque a primeira ATM ainda não enviou a mensagem subtrair US $ 100, ambos 1060 00:48:58,930 --> 00:49:03,000 ATMs ter inspecionado cofre do banco, vendo há 100 dólares lá, e agora 1061 00:49:03,000 --> 00:49:07,160 ambas as máquinas são potencialmente vai cuspir uma resposta. 1062 00:49:07,160 --> 00:49:12,240 >> Agora, isso é ótimo para você, em algum sentido se o que o banco faz, em última instância 1063 00:49:12,240 --> 00:49:17,200 é mudar o valor para menos de 100 por definindo a variável igual ao seu 1064 00:49:17,200 --> 00:49:21,570 conta bancária igual a 0, em oposição a fazer menos 100. 1065 00:49:21,570 --> 00:49:24,410 Agora, no pior caso para o Bank - 1066 00:49:24,410 --> 00:49:27,470 ou, no melhor para o banco, por sua vez, eles dão-lhe US $ 200, e 1067 00:49:27,470 --> 00:49:31,690 sua conta bancária agora mostra negativo US $ 100, o que realmente não faz 1068 00:49:31,690 --> 00:49:32,950 beneficiá-lo em tudo. 1069 00:49:32,950 --> 00:49:36,500 Mas o ponto é que esta corrida condição para a obtenção de dois companheiros de quarto 1070 00:49:36,500 --> 00:49:40,660 leite, ou para dois caixas eletrônicos que tentam obter dinheiro e alterar o estado de um cofre 1071 00:49:40,660 --> 00:49:44,510 ao mesmo tempo, existe alguma vez que você tem um banco de dados. 1072 00:49:44,510 --> 00:49:48,290 >> Agora, no conjunto de problemas de sete, esta questão surge no sentido de que se você comprar um 1073 00:49:48,290 --> 00:49:52,110 parcela de ações do Facebook, e em seguida para exemplo, você comprar uma segunda parcela de 1074 00:49:52,110 --> 00:49:55,160 Facebook estoque, você precisa fazer uma decisão como programador. 1075 00:49:55,160 --> 00:49:58,710 A fim de decidir como atualizar o banco de dados, a probabilidade de que você vai 1076 00:49:58,710 --> 00:50:02,250 tem uma linha para que o estoque, e este é uma maneira de implementá-lo. 1077 00:50:02,250 --> 00:50:06,640 E você vai ter uma ação do FB, que é seu símbolo de cotações da bolsa 1078 00:50:06,640 --> 00:50:10,120 para este nome de usuário, ou este usuário ID, o identificador único. 1079 00:50:10,120 --> 00:50:12,340 >> Mas a mesma história pode acontecer aqui. 1080 00:50:12,340 --> 00:50:15,800 Se você fizer um SELECT em SQL, como você verá no conjunto de problemas de sete, quando você vê, 1081 00:50:15,800 --> 00:50:18,460 oh, David tem uma partes de ações do Facebook. 1082 00:50:18,460 --> 00:50:23,240 Deixa-me mudar isso para ser duas ações, porque ele quer comprar um 1083 00:50:23,240 --> 00:50:24,120 segunda parte. 1084 00:50:24,120 --> 00:50:27,860 Mas suponha que David realmente tinha dois janelas do navegador abertas, ou supor que 1085 00:50:27,860 --> 00:50:32,150 é uma conta conjunta com dois cônjuges, e ambos estão tentando realizar 1086 00:50:32,150 --> 00:50:36,770 a mesma operação, existe, também, o existe potencial para uma decisão a ser 1087 00:50:36,770 --> 00:50:39,670 feita com base na anterior estado do mundo - 1088 00:50:39,670 --> 00:50:41,290 a conta tem uma ação - 1089 00:50:41,290 --> 00:50:45,630 e as duas pessoas ou dois servidores, agora tente dizer incrementá-lo para duas ações. 1090 00:50:45,630 --> 00:50:49,020 Mas, neste caso, você pode ter cobrado me dinheiro para ambas as partes, mas 1091 00:50:49,020 --> 00:50:50,830 incrementado apenas aquela vez. 1092 00:50:50,830 --> 00:50:54,730 >> Assim, em breve, o problema fundamental aqui, como com a piada sobre deixando um 1093 00:50:54,730 --> 00:50:58,750 notar, ou colocar um cadeado nele, é se duas pessoas, ou dois tópicos - 1094 00:50:58,750 --> 00:50:59,930 acho que volta a zero - 1095 00:50:59,930 --> 00:51:03,220 pode inspecionar o estado de alguma variável e, em seguida, tentar mudar essa variável, 1096 00:51:03,220 --> 00:51:07,950 mas essas duas coisas não acontecem no mesmo tempo, mas pode ficar interrompido 1097 00:51:07,950 --> 00:51:11,500 por outras coisas que estão acontecendo, os dados podem entrar em um estado muito estranho. 1098 00:51:11,500 --> 00:51:15,450 E você pode se beneficiar ou você pode sofrer no sentido do exemplo de dinheiro. 1099 00:51:15,450 --> 00:51:18,110 >> Assim, no conjunto de problemas sete, nós damos-lhe esta linha de código, que por muito tempo 1100 00:51:18,110 --> 00:51:21,000 Resumindo, resolve este problema no MySQL. 1101 00:51:21,000 --> 00:51:24,950 Esta muito longa instrução que não faz mesmo caber em uma linha na 1102 00:51:24,950 --> 00:51:30,370 tela aqui garante que a sua operação é o que se chama atômica. 1103 00:51:30,370 --> 00:51:33,720 Tudo acontece de uma vez, ou isso não acontece em todos. 1104 00:51:33,720 --> 00:51:37,530 Esta mesma frase longa não pode ficar interrompido parcialmente. 1105 00:51:37,530 --> 00:51:39,840 >> E o que ele faz é literalmente o que diz. 1106 00:51:39,840 --> 00:51:44,200 Insira em alguma mesa da seguinte três campos esses valores específicos 1107 00:51:44,200 --> 00:51:47,280 mas em chave duplicada, não faça uma inserção. 1108 00:51:47,280 --> 00:51:48,280 Faça uma atualização. 1109 00:51:48,280 --> 00:51:52,450 Então, isso é como fazer um SELECT e um INSERIR por assim dizer, ao mesmo tempo. 1110 00:51:52,450 --> 00:51:55,150 E o que é a chave que provavelmente é sendo referido aqui? 1111 00:51:55,150 --> 00:51:58,300 1112 00:51:58,300 --> 00:52:01,380 >> Acontece, e você vai ver isso em conjunto de problemas de sete de especificação, porque 1113 00:52:01,380 --> 00:52:06,040 nós já declarou que haja uma chave única nesta tabela particular tal que 1114 00:52:06,040 --> 00:52:08,480 você não pode ter várias linhas para o mesmo utilizador, com a 1115 00:52:08,480 --> 00:52:10,150 mesmo símbolo tostão estoque - 1116 00:52:10,150 --> 00:52:13,780 neste exemplo, aqui, é DVN.V um tostão estoque bobo que nós 1117 00:52:13,780 --> 00:52:14,980 referem-se na especificação. 1118 00:52:14,980 --> 00:52:17,860 Porque nós já declarou que ele seja único, o que isto significa é que se você 1119 00:52:17,860 --> 00:52:23,580 tentar inserir uma linha duplicada, você está em vez de ir para atualizá-lo sem 1120 00:52:23,580 --> 00:52:27,020 qualquer outra pessoa ter uma chance de mudar o estado do mundo, quer. 1121 00:52:27,020 --> 00:52:29,400 Assim, em breve, o que garante coisas são atômicas. 1122 00:52:29,400 --> 00:52:32,530 >> Mais geralmente, no entanto, as bases de dados como MySQL - 1123 00:52:32,530 --> 00:52:35,460 e você não precisa desse recurso para p-set sete, mas mantê-lo em mente para 1124 00:52:35,460 --> 00:52:36,200 o futuro - 1125 00:52:36,200 --> 00:52:38,870 apoiar o que são chamados de transações, onde você pode dizer 1126 00:52:38,870 --> 00:52:40,990 START TRANSACTION literalmente. 1127 00:52:40,990 --> 00:52:43,270 Você pode então executar duas instruções SQL. 1128 00:52:43,270 --> 00:52:45,710 E uma instrução SQL, como você verá in-p definir sete, parece um pouco 1129 00:52:45,710 --> 00:52:46,750 algo como isto. 1130 00:52:46,750 --> 00:52:48,820 Atualizar uma tabela chamada conta. 1131 00:52:48,820 --> 00:52:52,550 Definir a coluna equilíbrio igual a tudo o que a coluna de equilíbrio atualmente 1132 00:52:52,550 --> 00:52:57,280 é menos 1,000, onde o número, o número da conta, como o ID do usuário, 1133 00:52:57,280 --> 00:53:00,830 igual a 2, e, em seguida, atualizar conta dot dot dot. 1134 00:53:00,830 --> 00:53:04,350 >> Assim, em termos leigos, o que esses dois consultas parecem estar fazendo na 1135 00:53:04,350 --> 00:53:05,840 sentido real da banca? 1136 00:53:05,840 --> 00:53:07,440 >> AUDIÊNCIA: Transferindo-se para a poupança. 1137 00:53:07,440 --> 00:53:08,020 >> DAVID MALAN: Exatamente. 1138 00:53:08,020 --> 00:53:10,470 Transferência de fundos de uma conta para o outro. 1139 00:53:10,470 --> 00:53:14,400 E este é outro exemplo onde você realmente quer essas duas coisas para acontecer 1140 00:53:14,400 --> 00:53:15,570 ou não acontecer. 1141 00:53:15,570 --> 00:53:18,880 Você não quer algo para entrar no meio deles e potencialmente atrapalhar 1142 00:53:18,880 --> 00:53:22,220 a matemática, ou bagunçar o quanto dinheiro que você tem, ou quanto 1143 00:53:22,220 --> 00:53:23,170 dinheiro que o banco tem. 1144 00:53:23,170 --> 00:53:26,890 Então, o que é muito legal sobre transações no MySQL é que, e 1145 00:53:26,890 --> 00:53:30,160 bases de dados de forma mais geral, é que eles e pessoas inteligentes que já implementadas 1146 00:53:30,160 --> 00:53:33,670 esses recursos descobrir como fazer Certifique-se que ambas as coisas acontecem 1147 00:53:33,670 --> 00:53:35,120 ou não em todos. 1148 00:53:35,120 --> 00:53:38,580 >> E se você está realmente aspiram a fazer um site que é usado por pessoas em 1149 00:53:38,580 --> 00:53:41,490 campus, as pessoas no mundo real, fazendo algo no sentido de inicialização, 1150 00:53:41,490 --> 00:53:43,300 estes são os tipos de decisões de design que 1151 00:53:43,300 --> 00:53:45,020 tornar-se sempre tão importante. 1152 00:53:45,020 --> 00:53:48,240 Caso contrário, você começa a perder dados, perdem utilizadores, ou, no pior caso, 1153 00:53:48,240 --> 00:53:51,800 nós vimos aqui, potencialmente perder dinheiro. 1154 00:53:51,800 --> 00:53:56,180 Então, novamente, mais sobre isso em conjunto de problemas sete, bem como, talvez, para alguns dos 1155 00:53:56,180 --> 00:53:57,530 você em projetos finais. 1156 00:53:57,530 --> 00:54:01,870 >> Então vamos mudar essa imagem que tínhamos há pouco apenas em mais de uma maneira. 1157 00:54:01,870 --> 00:54:04,070 Então deixe-me ver se eu realmente pode - 1158 00:54:04,070 --> 00:54:06,030 nope, que se foi. 1159 00:54:06,030 --> 00:54:06,690 Aqui está. 1160 00:54:06,690 --> 00:54:09,020 >> Portanto, este é o lugar onde nós deixamos da última vez. 1161 00:54:09,020 --> 00:54:12,390 E acontece que nós estamos indo para atirar mais uma coisa na mistura por aqui - 1162 00:54:12,390 --> 00:54:14,510 uma linguagem chamada JavaScript. 1163 00:54:14,510 --> 00:54:18,060 Então JavaScript realmente se encaixa nesta parte - 1164 00:54:18,060 --> 00:54:22,086 e eu não queria muito deixar espaço suficiente, então isso não é agora em escala. 1165 00:54:22,086 --> 00:54:23,900 OK, isso é realmente patético. 1166 00:54:23,900 --> 00:54:27,075 OK, então isso é JavaScript. 1167 00:54:27,075 --> 00:54:27,340 Tudo bem. 1168 00:54:27,340 --> 00:54:28,760 Estou realmente fazendo um desserviço. 1169 00:54:28,760 --> 00:54:29,390 Tudo bem. 1170 00:54:29,390 --> 00:54:34,790 >> Então JavaScript é outra programação linguagem, e nosso passado, Se isso ajuda 1171 00:54:34,790 --> 00:54:37,770 reafirmar que não há muito mais dos hidrantes aqui. 1172 00:54:37,770 --> 00:54:41,100 Assim JavaScript é também uma interpretação linguagem, o que significa que você não 1173 00:54:41,100 --> 00:54:42,670 compilá-lo em zeros e uns. 1174 00:54:42,670 --> 00:54:43,690 Você só executá-lo. 1175 00:54:43,690 --> 00:54:47,680 Mas o que é fundamentalmente diferente com JavaScript geralmente é que você 1176 00:54:47,680 --> 00:54:49,815 não executá-lo no seu servidor web. 1177 00:54:49,815 --> 00:54:52,570 Ele não se correr na aparelho em si. 1178 00:54:52,570 --> 00:54:57,490 Em vez disso, ele é baixado por um usuário via HTTP em seu navegador - 1179 00:54:57,490 --> 00:55:00,260 Chrome, Safari, Internet Explorer, Firefox, o que for - 1180 00:55:00,260 --> 00:55:03,860 e é o navegador que executa este especial linguagem de programação. 1181 00:55:03,860 --> 00:55:08,000 >> Então, para ser claro, PHP, até agora, tem sido executado ou na linha de comando em 1182 00:55:08,000 --> 00:55:11,290 nossa janela preto e branco, em um servidor como o aparelho, um computador 1183 00:55:11,290 --> 00:55:14,490 como o aparelho, ou tem sido executado por um servidor web 1184 00:55:14,490 --> 00:55:15,860 rodando em um computador. 1185 00:55:15,860 --> 00:55:20,490 Mas o tema aqui é que, até agora, PHP foi executado do lado do servidor, de modo 1186 00:55:20,490 --> 00:55:24,820 o usuário eo navegador do usuário nunca vê uma linha de código PHP. 1187 00:55:24,820 --> 00:55:28,530 >> Na verdade, se você nunca abrir um navegador para seu site ou outro e você 1188 00:55:28,530 --> 00:55:32,400 realmente ver o código PHP em sua janela, alguém tem asneira. 1189 00:55:32,400 --> 00:55:34,950 Porque não é para ser enviada para um navegador da directamente. 1190 00:55:34,950 --> 00:55:38,150 É suposto ser executado e virou em algo como HTML. 1191 00:55:38,150 --> 00:55:40,120 >> Mas JavaScript é essencialmente o oposto. 1192 00:55:40,120 --> 00:55:44,350 É concebido para ser executado normalmente dentro da janela do navegador do usuário. 1193 00:55:44,350 --> 00:55:46,840 E que tipos de sites usam JavaScript seguida, nos dias de hoje? 1194 00:55:46,840 --> 00:55:49,640 1195 00:55:49,640 --> 00:55:52,180 >> Como literalmente cada site popular. 1196 00:55:52,180 --> 00:55:55,430 Cada site que vocês provavelmente usar uso diário JavaScript para o 1197 00:55:55,430 --> 00:55:57,330 mais simples e até mesmo o características mais quentes. 1198 00:55:57,330 --> 00:55:59,800 >> Então, algo como o Facebook Converse se você usar isso. 1199 00:55:59,800 --> 00:56:01,040 Como é que isso realmente funciona? 1200 00:56:01,040 --> 00:56:05,090 Bem, até agora, todas as coisas que tenho feito com HTML e PHP assume que 1201 00:56:05,090 --> 00:56:08,750 você puxe uma URL, e você pressionar Enter, e você vê algum conteúdo HTML. 1202 00:56:08,750 --> 00:56:11,970 E você clicar no link, que muda a URL, muda a página, e recarrega 1203 00:56:11,970 --> 00:56:12,740 algum novo conteúdo. 1204 00:56:12,740 --> 00:56:16,340 Clique em outra URL ou enviar um formulário, você se levado para outra página e 1205 00:56:16,340 --> 00:56:17,420 você vê algum conteúdo novo. 1206 00:56:17,420 --> 00:56:22,710 >> Mas usar algo como o Facebook Chat, ou Gchat, ou o Google Maps, raramente 1207 00:56:22,710 --> 00:56:27,350 faz toda a página de atualização de modo que você verá uma tela branca momentaneamente e 1208 00:56:27,350 --> 00:56:28,470 em seguida, um novo conteúdo. 1209 00:56:28,470 --> 00:56:32,610 Em vez disso, as páginas web hoje são dinamicamente sendo atualizado de novo e 1210 00:56:32,610 --> 00:56:35,570 novo e de novo todo o tipo de bastidores. 1211 00:56:35,570 --> 00:56:38,560 E verifica-se que quando você vai fazer a algo como o Facebook, ou Gchat, 1212 00:56:38,560 --> 00:56:43,050 ou Gmail, e as atualizações da página automaticamente sem recarregar a 1213 00:56:43,050 --> 00:56:47,630 tela inteira, o que aconteceu é que o navegador fez uma espécie de segredo 1214 00:56:47,630 --> 00:56:49,410 solicitações HTTP adicionais - 1215 00:56:49,410 --> 00:56:52,740 não para páginas web inteiras, mas apenas para pequenos blocos de dados, como o 1216 00:56:52,740 --> 00:56:55,740 mensagem instantânea que o seu amigo apenas enviou-lhe, ou a atualização de status que 1217 00:56:55,740 --> 00:56:58,210 alguém apenas lhe enviou, ou o tweet que alguém acabou de enviar. 1218 00:56:58,210 --> 00:57:02,120 É só fazer pequenos pedidos de de dados, e em seguida, usando JavaScript, este 1219 00:57:02,120 --> 00:57:06,370 linguagem de programação, para mudar o que a página da web parece sem a 1220 00:57:06,370 --> 00:57:09,860 servidor de ajuda, sem o servidor geração que HTML. 1221 00:57:09,860 --> 00:57:13,820 >> Assim, em breve, o JavaScript pode ser usado, em seguida, não só para buscar novos dados 1222 00:57:13,820 --> 00:57:16,750 o servidor sem recarregar um todo página ou enviar um formulário. 1223 00:57:16,750 --> 00:57:20,060 Ele também pode ser usado para a mudança o chamado MOD - 1224 00:57:20,060 --> 00:57:21,520 Document Object Model - 1225 00:57:21,520 --> 00:57:24,620 que é apenas a maneira extravagante para dizendo que a árvore de HTML 1226 00:57:24,620 --> 00:57:26,220 que vimos da última vez. 1227 00:57:26,220 --> 00:57:31,640 >> Então, para tranquilizar, JavaScript sintaticamente tão semelhante a C também. 1228 00:57:31,640 --> 00:57:32,820 Não há nenhuma função principal. 1229 00:57:32,820 --> 00:57:35,430 Você acabou de começar a escrever o código e serão executados, ou 1230 00:57:35,430 --> 00:57:36,900 interpretadas de maneira mais adequada. 1231 00:57:36,900 --> 00:57:38,660 Condições será parecido com este. 1232 00:57:38,660 --> 00:57:41,230 Não é diferente a partir de C ou PHP para essa matéria. 1233 00:57:41,230 --> 00:57:43,890 Expressões booleanas ou-ed juntos será parecido com este. 1234 00:57:43,890 --> 00:57:45,590 ANDed juntos semelhante a este. 1235 00:57:45,590 --> 00:57:47,750 >> Switches será parecido com este. 1236 00:57:47,750 --> 00:57:49,440 Por voltas será parecido com este. 1237 00:57:49,440 --> 00:57:51,060 While loops será parecido com este. 1238 00:57:51,060 --> 00:57:53,316 Do while será parecido com este. 1239 00:57:53,316 --> 00:57:54,780 >> Isso é novo. 1240 00:57:54,780 --> 00:57:58,753 Então JavaScript não tem um foreach construir, por si só, mas este constructo 1241 00:57:58,753 --> 00:58:03,870 para a variável i na matriz, e eu neste caso torna-se um valor de índice. 1242 00:58:03,870 --> 00:58:06,880 Portanto, é um pouco diferente do que foreach, embora as novas versões do 1243 00:58:06,880 --> 00:58:10,280 JavaScript estão saindo o tempo todo, assim mesmo esses recursos de linguagem 1244 00:58:10,280 --> 00:58:10,880 estão evoluindo. 1245 00:58:10,880 --> 00:58:16,920 >> E como um aparte, JavaScript nestes dias também pode ser usado em um servidor tal como 1246 00:58:16,920 --> 00:58:19,920 PHP usando uma estrutura chamada Node.js. 1247 00:58:19,920 --> 00:58:24,670 Um de CS50 TFs, Kevin, levou um seminário sobre Node.js que está disponível em 1248 00:58:24,670 --> 00:58:26,440 cs50.net/seminars. 1249 00:58:26,440 --> 00:58:28,830 Então, se você está curioso, saiba que você pode usar esta no lado do servidor como 1250 00:58:28,830 --> 00:58:33,870 bem, mas isso é uma tendência relativamente recente, mas um poderoso nisso. 1251 00:58:33,870 --> 00:58:35,270 >> Este é um pouco diferente. 1252 00:58:35,270 --> 00:58:37,910 Esta é uma matriz em JavaScript. 1253 00:58:37,910 --> 00:58:40,115 E o que lhe parece diferente contra C ou PHP? 1254 00:58:40,115 --> 00:58:43,890 1255 00:58:43,890 --> 00:58:47,420 Existem algumas histórias rápidas podemos dizer aqui. 1256 00:58:47,420 --> 00:58:49,367 O que está faltando em relação PHP? 1257 00:58:49,367 --> 00:58:51,652 >> AUDIÊNCIA: [inaudível]. 1258 00:58:51,652 --> 00:58:52,110 >> DAVID MALAN: Sim? 1259 00:58:52,110 --> 00:58:53,322 Desculpe, dizer de novo? 1260 00:58:53,322 --> 00:58:54,740 >> AUDIÊNCIA: Não declarando o tipo de variável. 1261 00:58:54,740 --> 00:58:56,390 >> DAVID MALAN: Não estamos declarando o tipo de variável. 1262 00:58:56,390 --> 00:58:59,630 Então, na verdade, bastante como PHP, não estamos especificando os tipos de esta variável. 1263 00:58:59,630 --> 00:59:02,670 Em vez disso, estamos mais genericamente dizendo var para a variável. 1264 00:59:02,670 --> 00:59:06,690 Não temos de incômodo do PHP sinal de dólar, enquanto que tedioso 1265 00:59:06,690 --> 00:59:09,160 tipo, faz mais claro que algo é uma variável. 1266 00:59:09,160 --> 00:59:11,830 Enquanto aqui, nós somos uma espécie de volta ao A abordagem de C por apenas chamar um 1267 00:59:11,830 --> 00:59:14,500 variável com o nome que queremos para dar-lhe, como números. 1268 00:59:14,500 --> 00:59:17,170 E também como PHP, temos colchetes para a 1269 00:59:17,170 --> 00:59:19,170 valores dentro dessa matriz. 1270 00:59:19,170 --> 00:59:22,490 >> Assim, as variáveis ​​em JavaScript também pode ser assim. 1271 00:59:22,490 --> 00:59:26,900 Observe aqui esta é uma string chamada s, mas da mesma forma que nós não especificada 1272 00:59:26,900 --> 00:59:28,750 que é uma string. 1273 00:59:28,750 --> 00:59:33,160 Aqui, porém, é uma característica que não faz existe exatamente da mesma maneira em PHP, 1274 00:59:33,160 --> 00:59:34,460 mas um pouco semelhante. 1275 00:59:34,460 --> 00:59:36,530 Este é um objeto em JavaScript. 1276 00:59:36,530 --> 00:59:42,110 E os objetos são uma espécie de exército suíço Faca de uma estrutura de dados em que 1277 00:59:42,110 --> 00:59:43,900 pode usá-los para qualquer número de coisas. 1278 00:59:43,900 --> 00:59:46,860 >> Aqui, por exemplo, estamos declarando uma variável chamada cotação. 1279 00:59:46,860 --> 00:59:49,110 O tipo de variável que é um objeto. 1280 00:59:49,110 --> 00:59:53,550 Você pode pensar nisso como um struct C que tem as chaves e valores. 1281 00:59:53,550 --> 00:59:55,250 Symbol é uma chave. 1282 00:59:55,250 --> 00:59:57,350 FB é um valor, aparentemente um símbolo de ação. 1283 00:59:57,350 --> 00:59:57,930 Vírgula. 1284 00:59:57,930 --> 01:00:02,180 O preço é outra chave, e seu valor é aparentemente um ponto flutuante, ou um 1285 01:00:02,180 --> 01:00:06,510 número mais geral em JavaScript, de 49,26 dólares. 1286 01:00:06,510 --> 01:00:09,030 >> Então PHP não tem - 1287 01:00:09,030 --> 01:00:12,980 não temos visto em objetos PHP bastante assim, mas fizemos ver um analógico, 1288 01:00:12,980 --> 01:00:14,093 que era o que? 1289 01:00:14,093 --> 01:00:14,980 >> AUDIÊNCIA: [inaudível]. 1290 01:00:14,980 --> 01:00:16,110 >> DAVID MALAN: Matrizes associativas. 1291 01:00:16,110 --> 01:00:19,990 Assim, enquanto o PHP tem arrays associativos cuja sintaxe é sempre um pouco para 1292 01:00:19,990 --> 01:00:20,370 diferente - 1293 01:00:20,370 --> 01:00:21,780 vimos os colchetes. 1294 01:00:21,780 --> 01:00:23,860 Vimos os símbolos setas estranhas. 1295 01:00:23,860 --> 01:00:27,330 JavaScript tem objetos, mas esta é principalmente uma diferença semântica e uma 1296 01:00:27,330 --> 01:00:29,260 sinônimo diferente por enquanto. 1297 01:00:29,260 --> 01:00:35,060 No entanto, como um aparte, PHP também tem objectos de uma maneira que Java e outros 1298 01:00:35,060 --> 01:00:37,810 línguas têm objetos em programação orientada a objetos. 1299 01:00:37,810 --> 01:00:40,440 Mas vamos usar estes apenas para os tipos de dados para agora. 1300 01:00:40,440 --> 01:00:42,170 Os objetos e arrays associativos. 1301 01:00:42,170 --> 01:00:44,140 >> Este pode torná-lo um pouco mais clara. 1302 01:00:44,140 --> 01:00:45,890 Aqui está o porquê de um objeto é útil. 1303 01:00:45,890 --> 01:00:48,760 Quando você deseja declarar um estudante, como Zamyla, podemos realmente 1304 01:00:48,760 --> 01:00:52,630 encapsular assim dizer no interior do referido objeto usando chaves como 1305 01:00:52,630 --> 01:00:55,060 antes de um monte de chaves e os valores aqui. 1306 01:00:55,060 --> 01:00:59,150 Temos uma identificação, uma casa, e um nome para Zamyla, seguido por um ponto e vírgula como 1307 01:00:59,150 --> 01:01:00,690 habitual no final. 1308 01:01:00,690 --> 01:01:04,840 >> Por aqui também, isso é um pouco diferentes, mas também muito potente 1309 01:01:04,840 --> 01:01:05,690 nos dias de hoje. 1310 01:01:05,690 --> 01:01:08,780 Aqui está uma matriz, e eu sei disso porque há um colchete up 1311 01:01:08,780 --> 01:01:11,090 superior e um colchete na parte inferior. 1312 01:01:11,090 --> 01:01:16,050 E isto é uma matriz de dados que digite aparentemente em JavaScript? 1313 01:01:16,050 --> 01:01:21,260 Esta é uma matriz de parece como três objetos. 1314 01:01:21,260 --> 01:01:24,580 E eu sei que é apenas um objeto por causa das chaves. 1315 01:01:24,580 --> 01:01:28,760 E note que há chaveta aberta, algumas coisas, perto chaveta, vírgula, 1316 01:01:28,760 --> 01:01:31,180 em seguida, um pouco mais, vírgula, e, em seguida, um pouco mais. 1317 01:01:31,180 --> 01:01:33,800 Então, isso é três argumentos separadas por duas vírgulas. 1318 01:01:33,800 --> 01:01:36,810 >> Portanto, esta é uma matriz de três objetos. 1319 01:01:36,810 --> 01:01:39,940 E cada um dos objectos a ser exibida um estudante ou funcionário de algum 1320 01:01:39,940 --> 01:01:42,370 tipo, cada um com um ID, casa, e nome. 1321 01:01:42,370 --> 01:01:45,060 Mas eu chamei este algo chamado JSON - 1322 01:01:45,060 --> 01:01:47,450 JavaScript Object Notation. 1323 01:01:47,450 --> 01:01:52,060 E isto é um formato de dados que realmente é tão popular e em 1324 01:01:52,060 --> 01:01:55,100 voga nestes dias que se você escrever um aplicação que utiliza o Facebook 1325 01:01:55,100 --> 01:01:59,150 API, a API do Twitter, realmente quase qualquer API lá fora nos dias de hoje, 1326 01:01:59,150 --> 01:02:02,820 incluindo alguns dos próprio CS50, o dados que você receber de volta não está na 1327 01:02:02,820 --> 01:02:04,720 formato CSV da velha escola. 1328 01:02:04,720 --> 01:02:06,780 >> Porque lembre-se que CSV é super simples. 1329 01:02:06,780 --> 01:02:10,230 Fica apenas a colunas separadas por vírgulas. 1330 01:02:10,230 --> 01:02:13,190 Dados JSON dá-lhe mais de metadados. 1331 01:02:13,190 --> 01:02:17,800 Ele associa uma chave com todos os valores assim eles não tem que simplesmente assumir que 1332 01:02:17,800 --> 01:02:22,460 a coluna de ordem zero é um valor, coluna uma outra, de duas colunas é outro. 1333 01:02:22,460 --> 01:02:26,790 Tudo em um objeto JSON aqui é uma espécie de auto-descritivo, porque cada 1334 01:02:26,790 --> 01:02:30,940 um dos nomes neste arquivo tem literalmente nome na frente dele como um 1335 01:02:30,940 --> 01:02:32,510 string. 1336 01:02:32,510 --> 01:02:34,950 >> Então, vamos dar uma olhada em um alguns exemplos aqui. 1337 01:02:34,950 --> 01:02:36,800 Deixe-me ir para dentro do aparelho. 1338 01:02:36,800 --> 01:02:41,000 E deixe-me ir para o nosso vhost diretório em público. 1339 01:02:41,000 --> 01:02:45,590 E deixe-me ir para o JavaScript diretório. 1340 01:02:45,590 --> 01:02:49,610 E vamos em frente e abrir dom-0.html, onde DOM significa apenas 1341 01:02:49,610 --> 01:02:51,010 Document Object Model. 1342 01:02:51,010 --> 01:02:53,490 É o material árvore para que Me referi anteriormente. 1343 01:02:53,490 --> 01:02:54,950 >> E deixe-me propor o seguinte. 1344 01:02:54,950 --> 01:02:57,720 Aqui está uma página web cujo corpo é bastante simples. 1345 01:02:57,720 --> 01:03:00,170 Então, aqui em baixo, na parte inferior, perceber Eu tenho um formulário. 1346 01:03:00,170 --> 01:03:01,500 Vimos aqueles antes. 1347 01:03:01,500 --> 01:03:07,600 Ele tem duas entradas, uma das quais contém um ID de nome, um dos quais tem um Tipo de 1348 01:03:07,600 --> 01:03:09,830 apresentar, e do primeiro um do tipo é texto. 1349 01:03:09,830 --> 01:03:11,900 Então, isso realmente soa bastante simples. 1350 01:03:11,900 --> 01:03:13,090 >> Vamos aqui. 1351 01:03:13,090 --> 01:03:15,390 Vamos voltar para esta página aqui. 1352 01:03:15,390 --> 01:03:21,030 Vamos entrar em localhost, e entra nosso diretório JavaScript, e ir para 1353 01:03:21,030 --> 01:03:24,640 dom-0, e aqui temos essa forma. 1354 01:03:24,640 --> 01:03:26,550 Então, isso é, aparentemente, tudo isso página faz. 1355 01:03:26,550 --> 01:03:28,740 Ele tem um campo de nome com um botão Enviar. 1356 01:03:28,740 --> 01:03:30,340 Mas eu não vou usar o PHP aqui. 1357 01:03:30,340 --> 01:03:34,310 Eu vou fazer tudo o lado cliente por assim dizer, em JavaScript da seguinte forma. 1358 01:03:34,310 --> 01:03:39,100 >> Observe que eu realmente dado o nome campo de entrada esta uma única 1359 01:03:39,100 --> 01:03:42,350 identificador, que será, na verdade, salva-me algum tempo em um momento. 1360 01:03:42,350 --> 01:03:45,480 E note que eu tenho apresentado uma outra tag na cabeça da minha página web, o 1361 01:03:45,480 --> 01:03:46,565  tag. 1362 01:03:46,565 --> 01:03:50,120 >> Portanto, é neste sentido que é JavaScript uma linguagem de programação do lado do cliente. 1363 01:03:50,120 --> 01:03:55,020 Neste caso, como CSS, eu coloquei em linha reta dentro do meu HTML. 1364 01:03:55,020 --> 01:03:58,810 Mas note que eu declarada uma função que parece um pouco com PHP 1365 01:03:58,810 --> 01:04:01,530 sintaticamente, mas esta é realmente JavaScript, porque mais uma vez, é 1366 01:04:01,530 --> 01:04:03,920 do lado do cliente no navegador. 1367 01:04:03,920 --> 01:04:07,590 E dar um palpite que isso vai fazer, mesmo que alguns da sintaxe 1368 01:04:07,590 --> 01:04:09,338 aqui é novo. 1369 01:04:09,338 --> 01:04:11,760 >> AUDIÊNCIA: Diga Olá para quem quer. 1370 01:04:11,760 --> 01:04:14,020 >> DAVID MALAN: Vai dizer Olá para quem visita esta página. 1371 01:04:14,020 --> 01:04:15,120 Então, como? 1372 01:04:15,120 --> 01:04:18,070 >> Então, observe, verifica-se em JavaScript há um alerta () função. 1373 01:04:18,070 --> 01:04:22,840 Esta é uma função muito triste que tipo de realmente só tende a incomodar os usuários. 1374 01:04:22,840 --> 01:04:25,440 Não é que você realmente deve usar normalmente, mas é um rápido e sujo 1375 01:04:25,440 --> 01:04:27,710 forma de uma espécie de impressão de algo a um utilizador gráfica 1376 01:04:27,710 --> 01:04:29,180 interface, como um browser. 1377 01:04:29,180 --> 01:04:31,400 Observe aqui que eu tenho um cadeia entre aspas simples. 1378 01:04:31,400 --> 01:04:36,010 Acontece que ao contrário de C, JavaScript pode realmente você tem uso único 1379 01:04:36,010 --> 01:04:38,730 cita, e, francamente, é só tipo da convenção estilística entre 1380 01:04:38,730 --> 01:04:41,180 JavaScript programadores usar aspas simples. 1381 01:04:41,180 --> 01:04:43,750 PHP, eles realmente têm um pouco significado diferente. 1382 01:04:43,750 --> 01:04:45,810 Mas, por enquanto, só sei que essa é a única razão. 1383 01:04:45,810 --> 01:04:49,270 A convenção em JavaScript é muitas vezes a usar aspas simples, mas poderíamos usar 1384 01:04:49,270 --> 01:04:50,950 aspas duplas em ambos os lugares também. 1385 01:04:50,950 --> 01:04:52,610 >> Então, isso é interessante. 1386 01:04:52,610 --> 01:04:56,430 Lembre-se da última vez que tivemos que imagem na tela que desenhou uma árvore 1387 01:04:56,430 --> 01:04:59,720 onde você tinha o nó HTML, eo cabeça nó eo nó corpo, 1388 01:04:59,720 --> 01:05:00,800 e, em seguida, algum texto. 1389 01:05:00,800 --> 01:05:04,700 Mas não houve um nó especial no muito superior que liguei para o documento. 1390 01:05:04,700 --> 01:05:08,260 Bem, acontece que em JavaScript, qualquer vez que você escrever um programa em JavaScript 1391 01:05:08,260 --> 01:05:11,040 em um navegador, você tem acesso a uma variável global especial. 1392 01:05:11,040 --> 01:05:14,130 Similares em espírito à superglobais do PHP, este é chamado em 1393 01:05:14,130 --> 01:05:16,050 todo documento minúsculas. 1394 01:05:16,050 --> 01:05:21,480 >> É como uma estrutura, mas esta estrutura também tem funções dentro dela. 1395 01:05:21,480 --> 01:05:23,790 Assim, um struct C só tem dados normalmente. 1396 01:05:23,790 --> 01:05:29,060 Mas um objeto JavaScript como este tecnicamente é também tem funções, 1397 01:05:29,060 --> 01:05:31,830 também conhecido como métodos, no interior do mesmo. 1398 01:05:31,830 --> 01:05:35,750 E você pode chamar uma função dentro de este objeto literalmente fazendo a sua 1399 01:05:35,750 --> 01:05:39,610 nome, ponto, e depois o nome a função, ou ainda método. 1400 01:05:39,610 --> 01:05:41,160 É apenas um sinônimo, realmente. 1401 01:05:41,160 --> 01:05:42,450 >> E o que essa função faz? 1402 01:05:42,450 --> 01:05:43,840 Você pode tipo de adivinhar o seu nome. 1403 01:05:43,840 --> 01:05:45,590 Obter elemento por ID. 1404 01:05:45,590 --> 01:05:50,040 Então, isso vai pesquisar a página da web, pesquisar a árvore, olhando para 1405 01:05:50,040 --> 01:05:55,210 tudo o que nó, elemento AKA, tem uma ID única de citação nome unquote. 1406 01:05:55,210 --> 01:05:56,560 E então o que é que eu vou fazer? 1407 01:05:56,560 --> 01:06:00,350 Eu estou indo para obter o valor dentro de esse nó na árvore, e eu vou 1408 01:06:00,350 --> 01:06:02,580 de alguma forma, dizer Olá a esse nome. 1409 01:06:02,580 --> 01:06:05,360 >> Então dê um palpite, mesmo que nós não temos vi isso ainda, o que fazer a mais 1410 01:06:05,360 --> 01:06:07,396 símbolos significam aqui e aqui, provavelmente? 1411 01:06:07,396 --> 01:06:08,230 >> AUDIÊNCIA: Concatenar. 1412 01:06:08,230 --> 01:06:09,220 >> DAVID MALAN: Concatenar. 1413 01:06:09,220 --> 01:06:11,290 Certo, e estes são apenas tipo de decisões de projeto 1414 01:06:11,290 --> 01:06:12,280 pessoas fizeram anos atrás. 1415 01:06:12,280 --> 01:06:15,190 No PHP, você concatenar coisas com pontos. 1416 01:06:15,190 --> 01:06:18,800 Em C, você saltar através de aros e várias funções como strcopy (call) ou 1417 01:06:18,800 --> 01:06:20,600 strcat () ou outras funções. 1418 01:06:20,600 --> 01:06:22,060 Mas em JavaScript, você usa trunfos. 1419 01:06:22,060 --> 01:06:24,770 Portanto, esta é apenas a concatenação três cordas - 1420 01:06:24,770 --> 01:06:27,850 Olá, um nome, e, em seguida, um ponto de exclamação. 1421 01:06:27,850 --> 01:06:30,390 >> Então, quando e por que essa função chamado embora? 1422 01:06:30,390 --> 01:06:33,150 Bem, dar um palpite do HTML na parte inferior. 1423 01:06:33,150 --> 01:06:35,810 Por que cumprimentar () chamado, ou quando? 1424 01:06:35,810 --> 01:06:39,730 1425 01:06:39,730 --> 01:06:44,030 >> Aparentemente, o melhor que eu posso dizer, em apresentar, quando este formulário é enviado, 1426 01:06:44,030 --> 01:06:47,200 Eu vou fazer o que for dentro destas citações. 1427 01:06:47,200 --> 01:06:50,900 E, especificamente, eu vou ligar para cumprimentar () e, em seguida, retornar false. 1428 01:06:50,900 --> 01:06:53,090 >> Bem, vamos ver o que a rede efeito aqui é o primeiro. 1429 01:06:53,090 --> 01:06:58,290 Então deixe-me ir em frente e escrever em, digamos, Loren, em Enviar. 1430 01:06:58,290 --> 01:06:59,440 Olá Loren. 1431 01:06:59,440 --> 01:07:02,990 Vamos ver se talvez este foi apenas uma implementação de sorte. 1432 01:07:02,990 --> 01:07:03,200 Não.. 1433 01:07:03,200 --> 01:07:05,990 Então está digitando o que quer que nome eu realmente colocar lá. 1434 01:07:05,990 --> 01:07:07,970 >> Mas note que não está mudando. 1435 01:07:07,970 --> 01:07:10,360 A URL ainda é dom-0.html. 1436 01:07:10,360 --> 01:07:11,820 Não há register.php. 1437 01:07:11,820 --> 01:07:13,110 Não há segundo arquivo. 1438 01:07:13,110 --> 01:07:14,930 Não há nenhum atributo action. 1439 01:07:14,930 --> 01:07:19,720 Então, qual é essa falsa retorno presumivelmente fazendo? 1440 01:07:19,720 --> 01:07:23,660 Por que eu estou chamando cumprimentar () e, em seguida, retornando falso provavelmente? 1441 01:07:23,660 --> 01:07:26,420 O que normalmente acontece quando você clica Enviar em um formulário que ainda temos 1442 01:07:26,420 --> 01:07:27,854 visto na semana passada? 1443 01:07:27,854 --> 01:07:29,900 >> AUDIÊNCIA: [inaudível]. 1444 01:07:29,900 --> 01:07:30,860 >> DAVID MALAN: Vai em algum lugar, certo? 1445 01:07:30,860 --> 01:07:32,720 Ele vai para um URL de destino. 1446 01:07:32,720 --> 01:07:34,120 Mas eu não quero que isso aconteça aqui. 1447 01:07:34,120 --> 01:07:37,620 Eu quero a minha página da web para ser completamente dinâmico como Gmail, onde uma vez que você é 1448 01:07:37,620 --> 01:07:38,650 lá, você ficar lá. 1449 01:07:38,650 --> 01:07:42,900 O URL não muda de um modo que indica a página inteira está recarregando. 1450 01:07:42,900 --> 01:07:46,680 Em vez disso, eu só quero mudar alguma coisa como imprimir algo 1451 01:07:46,680 --> 01:07:48,320 aqui na tela. 1452 01:07:48,320 --> 01:07:49,630 >> Bem, deixe-me limpar isso -se um pouco. 1453 01:07:49,630 --> 01:07:55,370 Deixe-me abrir não dom-0, mas deixe-me abrir dom-2. 1454 01:07:55,370 --> 01:07:57,350 Só para que você tenha visto alguma sintaxe aqui. 1455 01:07:57,350 --> 01:08:02,080 >> Acontece que o que acabamos de se está usando JavaScript cru. 1456 01:08:02,080 --> 01:08:04,420 Portanto, esta é verdadeiramente a linguagem JavaScript. 1457 01:08:04,420 --> 01:08:07,340 Alguns de vocês podem saber de uma biblioteca chamada jQuery. 1458 01:08:07,340 --> 01:08:09,980 >> Assim jQuery não é a mesma coisa como JavaScript. 1459 01:08:09,980 --> 01:08:14,110 É apenas uma biblioteca que realmente inteligente cara escreveu e popularizado como 1460 01:08:14,110 --> 01:08:18,100 que quase todos no mundo agora usa jQuery ao usar JavaScript. 1461 01:08:18,100 --> 01:08:20,890 E à primeira vista, honestamente, parece um pouco mais enigmática. 1462 01:08:20,890 --> 01:08:24,990 Mas você vai encontrar, especialmente se você for lá para o seu projeto final com web 1463 01:08:24,990 --> 01:08:29,029 desenvolvimento, você verá que este limpa as coisas e você economiza bastante 1464 01:08:29,029 --> 01:08:30,229 algumas linhas de código. 1465 01:08:30,229 --> 01:08:33,189 >> Então vamos olhar para como este formulário está funcionando. 1466 01:08:33,189 --> 01:08:35,664 Observe o que eu remover aparentemente do meu HTML? 1467 01:08:35,664 --> 01:08:38,240 1468 01:08:38,240 --> 01:08:40,630 Não há em enviar manipulador por assim dizer. 1469 01:08:40,630 --> 01:08:41,470 Não há nenhum atributo. 1470 01:08:41,470 --> 01:08:43,359 Porque você sabe, o que Eu realmente não gosto? 1471 01:08:43,359 --> 01:08:45,640 Eu me senti como se estivesse caindo em velhos hábitos lá. 1472 01:08:45,640 --> 01:08:49,340 Assim como ele estava começando a sentir-se desleixado se misturar tanto com CSS 1473 01:08:49,340 --> 01:08:52,149 HTML, porque você está meio que jogando línguas diferentes em todo o 1474 01:08:52,149 --> 01:08:56,180 lugar, da mesma forma que isso começar a se sentir como um mau caminho para ir até onde 1475 01:08:56,180 --> 01:09:01,069 Estou colocando o código JavaScript dentro da minha HTML em vez de factoring-lo. 1476 01:09:01,069 --> 01:09:02,279 >> Então essa é a lição aqui. 1477 01:09:02,279 --> 01:09:05,080 Em dom-2.html, estou factoring-lo. 1478 01:09:05,080 --> 01:09:07,399 E eu estou fazendo as coisas um pouco de forma diferente. 1479 01:09:07,399 --> 01:09:09,630 Por enquanto, eu vou acenar as mãos o que isso realmente 1480 01:09:09,630 --> 01:09:10,590 debaixo do capô. 1481 01:09:10,590 --> 01:09:14,210 Mas por agora assumir que esse primeiro linha de código nesta biblioteca 1482 01:09:14,210 --> 01:09:18,170 chamado jQuery significa apenas quando o documento está pronto, faça o seguinte. 1483 01:09:18,170 --> 01:09:20,080 >> Como as páginas da web podem ter algum tempo para carregar. 1484 01:09:20,080 --> 01:09:23,029 Você pode estar em uma internet lenta conexão, e pode estar girando 1485 01:09:23,029 --> 01:09:25,290 e girando, e, finalmente, ele é carregado. 1486 01:09:25,290 --> 01:09:29,060 Essa linha de código apenas diz esperar até a página inteira estiver pronto, o documento 1487 01:09:29,060 --> 01:09:31,189 está pronto, antes de executar este código. 1488 01:09:31,189 --> 01:09:34,390 >> E agora percebe, este é, provavelmente, o mais útil primeiro 1489 01:09:34,390 --> 01:09:36,189 tirar de jQuery. 1490 01:09:36,189 --> 01:09:42,140 Esta linha aqui é muito semelhante em espírito para essa linha por muito mais tempo aqui. 1491 01:09:42,140 --> 01:09:46,920 Considerando que o código JavaScript cru, não existe um objeto global documento que 1492 01:09:46,920 --> 01:09:50,460 tem uma função chamada getElementById () as pessoas que escreveram 1493 01:09:50,460 --> 01:09:55,720 jQuery simplificado que apenas dizer sinal de dólar, e, em seguida, dentro de 1494 01:09:55,720 --> 01:10:00,250 parênteses colocar duas citações, e, em seguida, colocar um símbolo de hash seguido pelo 1495 01:10:00,250 --> 01:10:02,250 ID exclusivo que você quer pegar. 1496 01:10:02,250 --> 01:10:06,170 Então, isso é equivalente a document.getElementById. 1497 01:10:06,170 --> 01:10:11,090 >> Enquanto isso, a submeter-se. Apenas significa em apresentação de qualquer forma você está 1498 01:10:11,090 --> 01:10:14,240 referindo-se à esquerda, ir em frente e executar isso. 1499 01:10:14,240 --> 01:10:16,600 Mas isso é agora a curiosidade também. 1500 01:10:16,600 --> 01:10:19,560 O que é estranho sobre o que Tenho destacado aqui? 1501 01:10:19,560 --> 01:10:23,840 1502 01:10:23,840 --> 01:10:28,594 Não só é uma espécie de sintaticamente novo, também há algo faltando. 1503 01:10:28,594 --> 01:10:29,558 >> AUDIÊNCIA: É só uma chamada de função? 1504 01:10:29,558 --> 01:10:31,970 Não é chamado de alerta? 1505 01:10:31,970 --> 01:10:32,440 >> DAVID MALAN: Yeah. 1506 01:10:32,440 --> 01:10:35,450 Bem, então alert () é baixo aqui, para ser justo. 1507 01:10:35,450 --> 01:10:39,520 Mas não há nenhuma menção de um nome, como você sabe, foo ou 1508 01:10:39,520 --> 01:10:40,980 algo aqui em cima. 1509 01:10:40,980 --> 01:10:43,830 E, de fato, esta é uma das características de JavaScript que é bastante 1510 01:10:43,830 --> 01:10:45,370 poderoso, mas também muito novo. 1511 01:10:45,370 --> 01:10:47,460 E PHP realmente tem isso também. 1512 01:10:47,460 --> 01:10:49,500 >> Deixe-me ir em frente e fazer algo bem rápido. 1513 01:10:49,500 --> 01:10:52,030 Deixe-me ir em frente e colocar isso aqui. 1514 01:10:52,030 --> 01:10:52,600 Deixe-me fazer isso. 1515 01:10:52,600 --> 01:10:53,690 Função. 1516 01:10:53,690 --> 01:10:56,455 Vamos chamar esse manipulador (). 1517 01:10:56,455 --> 01:10:58,290 A função de manipulador por assim dizer. 1518 01:10:58,290 --> 01:11:00,110 Algo que lida com alguma operação. 1519 01:11:00,110 --> 01:11:02,700 Deixe-me limpar o meu recuo. 1520 01:11:02,700 --> 01:11:04,380 E colocar isso aqui. 1521 01:11:04,380 --> 01:11:06,090 E colocar isso aqui. 1522 01:11:06,090 --> 01:11:06,470 Yep. 1523 01:11:06,470 --> 01:11:07,060 OK. 1524 01:11:07,060 --> 01:11:10,300 >> Então agora eu tenho uma função chamada handler () que eu realmente não sei 1525 01:11:10,300 --> 01:11:10,890 o que ele faz ainda. 1526 01:11:10,890 --> 01:11:12,710 Ele só ainda tem essas coisas. 1527 01:11:12,710 --> 01:11:13,900 Gritos. 1528 01:11:13,900 --> 01:11:15,820 Demorou muito. 1529 01:11:15,820 --> 01:11:18,490 Vamos fazer isso. 1530 01:11:18,490 --> 01:11:18,990 Tudo bem. 1531 01:11:18,990 --> 01:11:20,240 Desculpe. 1532 01:11:20,240 --> 01:11:23,140 1533 01:11:23,140 --> 01:11:23,690 Tudo bem. 1534 01:11:23,690 --> 01:11:24,720 Deixe-me fazer isso. 1535 01:11:24,720 --> 01:11:25,020 OK. 1536 01:11:25,020 --> 01:11:27,040 Isso parece bom e em linha reta encaminhar agora. 1537 01:11:27,040 --> 01:11:29,090 Deixe-me fazer isso. 1538 01:11:29,090 --> 01:11:29,860 Faça isso. 1539 01:11:29,860 --> 01:11:30,950 E OK. 1540 01:11:30,950 --> 01:11:33,080 Então, agora, vamos colocar isso aqui. 1541 01:11:33,080 --> 01:11:35,840 1542 01:11:35,840 --> 01:11:37,270 Não há mais a programação em tempo real. 1543 01:11:37,270 --> 01:11:37,900 OK. 1544 01:11:37,900 --> 01:11:40,000 >> Então, agora, vamos voltar para onde a história começou. 1545 01:11:40,000 --> 01:11:43,530 Anteriormente, eu disse que essa linha aqui significa que quando o documento estiver pronto, vá 1546 01:11:43,530 --> 01:11:44,380 em frente e fazer isso. 1547 01:11:44,380 --> 01:11:45,660 O que eu quero fazer? 1548 01:11:45,660 --> 01:11:49,070 Bem, especificamente, eu quero ir em frente e faça o seguinte. 1549 01:11:49,070 --> 01:11:53,700 Executar esta linha de código, e em seguida o que eu quero que você faça é chamar este 1550 01:11:53,700 --> 01:11:56,370 funcionar quando o formulário é enviado. 1551 01:11:56,370 --> 01:11:57,730 >> Agora isso é o que é interessante. 1552 01:11:57,730 --> 01:11:59,170 Isto não é em si mesmo uma função. 1553 01:11:59,170 --> 01:12:02,540 Repare que eu não estou colocando parênteses aqui de uma forma normal. 1554 01:12:02,540 --> 01:12:06,800 Estou literalmente passando por uma função chamada manipulador () para outra função 1555 01:12:06,800 --> 01:12:10,800 chamado submit () como um argumento como mas é como uma variável. 1556 01:12:10,800 --> 01:12:14,290 E esta é uma das características de JavaScript, é si funções 1557 01:12:14,290 --> 01:12:15,710 são realmente apenas objetos. 1558 01:12:15,710 --> 01:12:18,350 Na verdade, eles são realmente apenas variáveis ​​de algum tipo. 1559 01:12:18,350 --> 01:12:21,340 E se o nome da função é manipulador (), não há nenhuma razão pela qual eu não posso 1560 01:12:21,340 --> 01:12:23,390 passá-la como um argumento daqui. 1561 01:12:23,390 --> 01:12:27,530 E isso significa que quando a forma com o ID de demonstração é 1562 01:12:27,530 --> 01:12:29,320 submetido, chamar esta função. 1563 01:12:29,320 --> 01:12:32,770 >> Mas agora, se eu desfazer de tudo isso, por que então eu talvez fazer 1564 01:12:32,770 --> 01:12:34,850 este um momento atrás? 1565 01:12:34,850 --> 01:12:36,840 Bem, esta é uma função anônima. 1566 01:12:36,840 --> 01:12:41,080 Porque, francamente, eu percebi por que eu sou se preocupar em perder tempo declarando uma 1567 01:12:41,080 --> 01:12:45,540 função chamada manipulador () apenas para chamar lo em um e somente um lugar? 1568 01:12:45,540 --> 01:12:48,640 Se eu não preciso do nome, e eu não precisa chamá-lo mais de um lugar, 1569 01:12:48,640 --> 01:12:51,200 vamos implementar a função bem onde eu precisar dele. 1570 01:12:51,200 --> 01:12:55,190 E assim, JavaScript e PHP apoiar o que são chamados de funções anônimas que 1571 01:12:55,190 --> 01:12:57,900 me permite fazer exatamente isso aqui. 1572 01:12:57,900 --> 01:12:59,570 >> Mas estamos apenas arranhando a superfície. 1573 01:12:59,570 --> 01:13:02,430 Vamos brincar com apenas um par exemplos finais aqui. 1574 01:13:02,430 --> 01:13:04,600 >> Se eu entrar em quote.php. 1575 01:13:04,600 --> 01:13:07,160 1576 01:13:07,160 --> 01:13:11,870 Observe que este é realmente um PHP função, um programa PHP, que eu escrevi 1577 01:13:11,870 --> 01:13:15,270 espera que um parâmetro HTTP chamado símbolo, e eu posso passar em 1578 01:13:15,270 --> 01:13:16,730 um valor como FB. 1579 01:13:16,730 --> 01:13:20,010 E se nós realmente olhar para a fonte código, isso está consultando um site gratuito 1580 01:13:20,010 --> 01:13:23,680 chamado Yahoo Finance, como p-set sete, e ele está retornando para mim 1581 01:13:23,680 --> 01:13:26,580 algo aparentemente o formato conhecido é JSON - 1582 01:13:26,580 --> 01:13:28,010 JavaScript Object Notation. 1583 01:13:28,010 --> 01:13:28,810 É apenas um objeto. 1584 01:13:28,810 --> 01:13:32,500 Observe as chaves, as citações, do cólon, e as vírgulas. 1585 01:13:32,500 --> 01:13:34,720 >> Agora, entretanto, isso é muito legal. 1586 01:13:34,720 --> 01:13:38,520 Porque eu provavelmente pode usar uma programação linguagem para gerar URLs 1587 01:13:38,520 --> 01:13:40,370 que se parecem com esta dinâmica, certo? 1588 01:13:40,370 --> 01:13:43,340 Eu posso mudar isso para o Google e voltar do Google 1589 01:13:43,340 --> 01:13:47,930 preço das ações de US $ 1,017.55. 1590 01:13:47,930 --> 01:13:49,640 Então, vamos ver se não podemos usar isso agora. 1591 01:13:49,640 --> 01:13:56,590 >> Deixe-me ir para ajax-0 aqui, que parece com o seguinte. 1592 01:13:56,590 --> 01:13:59,750 É apenas um site que tem um formulário com um botão. 1593 01:13:59,750 --> 01:14:05,860 Deixe-me aqui, vá em frente e digite YHOO para o símbolo das ações do Yahoo, clique em Obter 1594 01:14:05,860 --> 01:14:10,530 Quote, e agora percebe que eu comecei um alerta com 32,86. 1595 01:14:10,530 --> 01:14:14,050 >> Deixe-me realmente ir para uma versão mais extravagante desta página, versão dois, e 1596 01:14:14,050 --> 01:14:17,530 digitar digamos Microsoft, MSFT. 1597 01:14:17,530 --> 01:14:18,410 Obter cotação. 1598 01:14:18,410 --> 01:14:19,850 E agora perceber, nenhum alerta. 1599 01:14:19,850 --> 01:14:22,770 Observe onde diz preço a ser determinado? 1600 01:14:22,770 --> 01:14:27,060 Não é o mais simples dos exemplos que aponta para o que Gchat e Facebook 1601 01:14:27,060 --> 01:14:30,070 Bate-papo, e Gmail, e outros tais sites estão fazendo por realmente 1602 01:14:30,070 --> 01:14:31,290 mudar a página da web. 1603 01:14:31,290 --> 01:14:31,800 >> Observe isso. 1604 01:14:31,800 --> 01:14:33,120 Deixe-me recarregar a página. 1605 01:14:33,120 --> 01:14:35,080 Deixe-me abrir Inspector do Chrome. 1606 01:14:35,080 --> 01:14:36,890 Deixe-me ir para os elementos guia aqui. 1607 01:14:36,890 --> 01:14:42,310 Agora note, se eu aumentar o zoom até aqui e abrir isso, perceber que esta é a minha 1608 01:14:42,310 --> 01:14:44,500 HTML DOM - o meu modelo de objeto de documento. 1609 01:14:44,500 --> 01:14:45,920 Este é o meu HTML. 1610 01:14:45,920 --> 01:14:48,750 Mas agora percebe, mesmo que está acontecendo ser um pouco difícil de vê-lo em ambos 1611 01:14:48,750 --> 01:14:52,080 lugares ao mesmo tempo, se eu digitar no FB aqui em cima, observe a parte inferior 1612 01:14:52,080 --> 01:14:54,110 da tela só. 1613 01:14:54,110 --> 01:14:57,720 >> É realmente mudando meu HTML na mosca. 1614 01:14:57,720 --> 01:15:01,670 E está fazendo isso muito simplesmente fazendo algo assim. 1615 01:15:01,670 --> 01:15:06,800 Se eu abrir ajax-2, aviso implementação algo tão sexy como 1616 01:15:06,800 --> 01:15:09,560 que, apesar de ser muito feio, mas tão sofisticado como esse 1617 01:15:09,560 --> 01:15:11,910 funcionalmente, tem alguns HTML na parte inferior. 1618 01:15:11,910 --> 01:15:13,810 Mas note que eu usei para marcar. 1619 01:15:13,810 --> 01:15:16,640 Nós não usei isso antes, mas esta é como uma, mas não força 1620 01:15:16,640 --> 01:15:17,840 tudo em uma nova linha. 1621 01:15:17,840 --> 01:15:20,830 Ela só faz uma região retangular na mesma linha, essencialmente. 1622 01:15:20,830 --> 01:15:22,870 >> Observe que eu dei-lhe um ID de preço. 1623 01:15:22,870 --> 01:15:26,800 E acontece que, utilizando o mesmo Biblioteca JavaScript, eu tenho uma função 1624 01:15:26,800 --> 01:15:30,440 chamado quote () que é chamado sempre que o formulário é enviado. 1625 01:15:30,440 --> 01:15:31,800 E o que eu estou fazendo é isso. 1626 01:15:31,800 --> 01:15:35,730 Estou declarando uma variável em JavaScript chamado url, salvando o valor 1627 01:15:35,730 --> 01:15:38,650 quote.php? símbolo =. 1628 01:15:38,650 --> 01:15:44,220 Em outras palavras, eu mesmo estou começando para preparar uma solicitação HTTP, e depois 1629 01:15:44,220 --> 01:15:49,250 Estou concatenando para que com um plus qualquer que seja o elemento com o ID 1630 01:15:49,250 --> 01:15:54,190 de símbolo é, que o aviso é que campo de texto bem aqui. 1631 01:15:54,190 --> 01:15:56,630 Então, assim como tínhamos formas no passado. 1632 01:15:56,630 --> 01:16:01,450 >> E então ele se transforma em jQuery, se você chamar. val (), que chama de um val 1633 01:16:01,450 --> 01:16:05,900 função, uma função de valor, que recebe tudo o que o usuário digitou dentro 1634 01:16:05,900 --> 01:16:08,920 E, em seguida, todo o tráfego de rede o que acontece é isso. 1635 01:16:08,920 --> 01:16:11,230 $. GetJSON. 1636 01:16:11,230 --> 01:16:13,720 >> E, como um aparte, sinal de dólar é apenas uma notação abreviada. 1637 01:16:13,720 --> 01:16:16,860 É realmente jQuery.getJSON. 1638 01:16:16,860 --> 01:16:21,520 Tirem-me para JSON a partir desta URL, e quando o pedido vem de volta, chamar este 1639 01:16:21,520 --> 01:16:26,550 função e passar como argumento o que veio de volta a partir do servidor. 1640 01:16:26,550 --> 01:16:31,205 >> Portanto, em outras palavras, se eu voltar para a navegador, e eu voltar para quote.php, 1641 01:16:31,205 --> 01:16:35,590 o meu navegador está fazendo é ficar este bloco de dados. 1642 01:16:35,590 --> 01:16:38,930 E quando eu ir a esta página web aqui, perceber se em vez de ir para a rede 1643 01:16:38,930 --> 01:16:43,820 separador e limpá-la, e em seguida, digite algo como GOOG para o Google e ganhe 1644 01:16:43,820 --> 01:16:46,340 Citação, observe a página não se alterou. 1645 01:16:46,340 --> 01:16:50,990 Mas uma solicitação HTTP foi feito, eo que voltei aqui, se olharmos para o 1646 01:16:50,990 --> 01:16:56,130 resposta é um monte de JSON que acedida finalmente com 1647 01:16:56,130 --> 01:16:58,070 esta linha simples aqui. 1648 01:16:58,070 --> 01:17:00,150 >> Dados é o que foi obtido a partir do servidor. 1649 01:17:00,150 --> 01:17:02,120 O preço é o nome do chave que me interessa. 1650 01:17:02,120 --> 01:17:05,230 Então data.price me dá isso. 1651 01:17:05,230 --> 01:17:07,540 >> Agora, entretanto, e este é o último exemplo. 1652 01:17:07,540 --> 01:17:09,280 Você pode fazer ainda mais com a página. 1653 01:17:09,280 --> 01:17:12,440 Uma verdade, bem dois. 1654 01:17:12,440 --> 01:17:14,780 Nós podemos trazer de volta a tag, se você se lembrar disso. 1655 01:17:14,780 --> 01:17:15,850 Isso é JavaScript. 1656 01:17:15,850 --> 01:17:17,110 Nós podemos fazer isso. 1657 01:17:17,110 --> 01:17:17,690 Muito emocionante. 1658 01:17:17,690 --> 01:17:18,800 Vamos deixar isso como um cliffhanger. 1659 01:17:18,800 --> 01:17:21,590 >> Mas o mais empolgante, você pode fazer coisas como esta. 1660 01:17:21,590 --> 01:17:25,940 Se eu for para geolocalização-1, verifica-se que o Chrome sabe que estamos em 1661 01:17:25,940 --> 01:17:30,672 longitude latitude 42,37. -71,10. 1662 01:17:30,672 --> 01:17:32,940 Assim, há ainda mais lá à sua disposição. 1663 01:17:32,940 --> 01:17:34,290 Mas mais sobre isso na próxima semana. 1664 01:17:34,290 --> 01:17:35,540 Vejo você segunda-feira. 1665 01:17:35,540 --> 01:17:37,558