1 00:00:00,000 --> 00:00:03,920 >> [Música tocando] 2 00:00:03,920 --> 00:00:11,760 3 00:00:11,760 --> 00:00:13,800 >> DAVID J. MALAN: Tudo bem. 4 00:00:13,800 --> 00:00:15,640 Este é CS50. 5 00:00:15,640 --> 00:00:17,620 Este é o início da semana oito. 6 00:00:17,620 --> 00:00:22,440 E você deve se lembrar que paramos última vez olhando para uma nova linguagem 7 00:00:22,440 --> 00:00:23,240 completamente. 8 00:00:23,240 --> 00:00:25,905 Na verdade, um que é bastante leve e não é mesmo 9 00:00:25,905 --> 00:00:26,940 uma linguagem de programação. 10 00:00:26,940 --> 00:00:31,100 É uma linguagem de marcação que nos permite realmente estruturar e tornar as páginas web. 11 00:00:31,100 --> 00:00:33,350 E quando você algo mais em conjunto com isto-- 12 00:00:33,350 --> 00:00:35,670 ou você em breve, se você não tiver já. 13 00:00:35,670 --> 00:00:38,530 Nós estamos indo para usar em cascata Style Sheets, ou CSS, que 14 00:00:38,530 --> 00:00:40,971 é um outro tipo de linguagem com propriedades e valores 15 00:00:40,971 --> 00:00:43,220 que vai nos deixar fazer coisas como mudar a cor 16 00:00:43,220 --> 00:00:46,010 e mudar a posição e estes tipos de ajustes. 17 00:00:46,010 --> 00:00:49,940 Mas hoje em diante, começamos a concentrar em linguagens mais poderosas, 18 00:00:49,940 --> 00:00:52,810 linguagens de programação como PHP reais. 19 00:00:52,810 --> 00:00:54,880 >> Então PHP tem sido em torno de algum tempo. 20 00:00:54,880 --> 00:00:56,810 E como você vai ver, foi projetado principalmente 21 00:00:56,810 --> 00:01:00,280 cedo para real utilizar no desenvolvimento web 22 00:01:00,280 --> 00:01:02,360 e, na verdade, gerar páginas web. 23 00:01:02,360 --> 00:01:04,849 Então, que tipo de recursos faz uma linguagem 24 00:01:04,849 --> 00:01:10,040 precisa, a fim de fazer web páginas dinamicamente com ele? 25 00:01:10,040 --> 00:01:14,760 >> Em outras palavras, se você quiser gerar conteúdo dynamically-- como Facebook de 26 00:01:14,760 --> 00:01:19,480 Newsfeed, que muda constantemente, ou mensagens instantâneas que surgem de tempos 27 00:01:19,480 --> 00:01:21,872 para tempo-- como o que é a peça-chave da funcionalidade 28 00:01:21,872 --> 00:01:24,580 que você precisa em uma linguagem de programação que iria deixá-lo dinamicamente 29 00:01:24,580 --> 00:01:28,070 imprimir novas informações para a tela? 30 00:01:28,070 --> 00:01:28,685 >> ALUNO: Code. 31 00:01:28,685 --> 00:01:29,560 DAVID J. MALAN: Code. 32 00:01:29,560 --> 00:01:30,440 Está bem. 33 00:01:30,440 --> 00:01:31,995 Vamos levar isso. 34 00:01:31,995 --> 00:01:35,310 Um pouco mais preciso. 35 00:01:35,310 --> 00:01:37,639 Quero dizer, nós poderíamos fazer isso com C, francamente. 36 00:01:37,639 --> 00:01:38,930 Seria uma dor no pescoço. 37 00:01:38,930 --> 00:01:41,045 Mas-- é esse compromisso? 38 00:01:41,045 --> 00:01:41,895 >> Estudante: Sim. 39 00:01:41,895 --> 00:01:42,677 Variáveis, talvez? 40 00:01:42,677 --> 00:01:43,760 DAVID J. MALAN: Variáveis. 41 00:01:43,760 --> 00:01:44,160 OK, com certeza. 42 00:01:44,160 --> 00:01:45,740 As variáveis ​​podem certamente ajudar-nos. 43 00:01:45,740 --> 00:01:47,020 E até mesmo algo mais simples. 44 00:01:47,020 --> 00:01:50,640 Nós usamos isso no primeiro programa do primeiro dia 45 00:01:50,640 --> 00:01:55,686 quando nós realmente disse "Olá mundo". 46 00:01:55,686 --> 00:01:56,570 >> ESTUDANTE: Print. 47 00:01:56,570 --> 00:01:57,778 >> DAVID J. MALAN: Print, certo? 48 00:01:57,778 --> 00:02:01,050 Imprimir ou printf no mundo de C. Então todo esse tempo, 49 00:02:01,050 --> 00:02:03,362 que tivemos em nossa disposição um language-- C, 50 00:02:03,362 --> 00:02:05,570 em particular-- e até mesmo Zero para que o assunto que 51 00:02:05,570 --> 00:02:07,400 pode gerar trechos de texto. 52 00:02:07,400 --> 00:02:11,090 >> Bem, se HTML, como vimos na semana passada, é apenas um monte de seqüências de texto 53 00:02:11,090 --> 00:02:14,692 embora com colchetes abertos e fechados suportes e algum tipo de rima 54 00:02:14,692 --> 00:02:16,650 ea razão por trás disso, bem, então nós poderíamos realmente 55 00:02:16,650 --> 00:02:20,440 começar a gerar páginas web ou manualmente, digitando-los em gedit 56 00:02:20,440 --> 00:02:23,870 ou no Microsoft Word, para que matter-- que só precisa de um editor de texto. 57 00:02:23,870 --> 00:02:26,830 >> Ou poderíamos escrever o código, a sua sugestão 58 00:02:26,830 --> 00:02:30,435 anteriormente, que nos deixou gerar dinamicamente HTML, 59 00:02:30,435 --> 00:02:32,560 e é isso que nós estamos indo para começar a fazer com PHP 60 00:02:32,560 --> 00:02:34,900 e, finalmente, mesmo com um linguagem chamada JavaScript, 61 00:02:34,900 --> 00:02:37,910 é usar uma linguagem para gerar outra. 62 00:02:37,910 --> 00:02:40,720 E, de fato, é isso que Facebook e muitos, muitos outros sites 63 00:02:40,720 --> 00:02:44,530 fazer para realmente dinamicamente apresentar novas informações para você. 64 00:02:44,530 --> 00:02:47,117 >> Então, vamos começar com um isto-- linha de olhar enigmático, mas um 65 00:02:47,117 --> 00:02:48,450 que é realmente muito poderoso. 66 00:02:48,450 --> 00:02:51,210 Até agora, estamos usando C, que é uma linguagem compilada. 67 00:02:51,210 --> 00:02:55,050 E apenas uma rápida recap-- um compilado linguagem tem que característica? 68 00:02:55,050 --> 00:02:59,050 Você, obviamente, precisa compilar isso, mas o que isso significa? 69 00:02:59,050 --> 00:03:00,505 Sim? 70 00:03:00,505 --> 00:03:02,940 >> ALUNO: Ele precisa ser montado em código de máquina. 71 00:03:02,940 --> 00:03:03,060 >> DAVID J. MALAN: OK. 72 00:03:03,060 --> 00:03:04,530 Ele precisa ser montada em código de máquina. 73 00:03:04,530 --> 00:03:07,340 Então você pega o seu código-fonte, que é uma espécie de Inglês-like. 74 00:03:07,340 --> 00:03:09,270 Você convertê-lo em algo nível mais baixo, 75 00:03:09,270 --> 00:03:11,590 que é, em última instância chamada objeto code-- 0 e 1s. 76 00:03:11,590 --> 00:03:14,830 E é nesses 0 e 1s que uma CPU, como aqueles feitos pela Intel, 77 00:03:14,830 --> 00:03:16,110 realmente entender. 78 00:03:16,110 --> 00:03:19,690 >> Agora, PHP e Python e Ruby e JavaScript e cachos de outro 79 00:03:19,690 --> 00:03:23,190 línguas não são compilados línguas, mas linguagens interpretadas, 80 00:03:23,190 --> 00:03:26,630 o que significa que você acabou de escrevê-los e, em seguida, você não transformá-los em 0 e 1.. 81 00:03:26,630 --> 00:03:30,790 Você ao invés de apenas fornecer então como entrada para o programa de outra pessoa, 82 00:03:30,790 --> 00:03:32,080 chamado de um intérprete. 83 00:03:32,080 --> 00:03:34,460 E dessa pessoa programa foi concebido 84 00:03:34,460 --> 00:03:38,280 para entender o que cada um e cada símbolo em Python ou PHP 85 00:03:38,280 --> 00:03:42,650 ou Ruby ou qualquer número de outras línguas significa. 86 00:03:42,650 --> 00:03:44,760 >> E assim, tudo o que precisamos é algo como isto. 87 00:03:44,760 --> 00:03:46,350 Então, na verdade, eu vou ir para o aparelho 88 00:03:46,350 --> 00:03:48,100 aqui, apenas em qualquer janela antiga, e estamos 89 00:03:48,100 --> 00:03:52,580 indo para ir em frente e aberto um arquivo chamado, digamos, Olá. 90 00:03:52,580 --> 00:03:55,780 Agora anteriormente, eu poderia ter salvado isso mesmo com uma extensão de arquivo, 91 00:03:55,780 --> 00:03:57,910 mas eu vou fazer algo ainda mais simples aqui. 92 00:03:57,910 --> 00:04:02,450 Eu estou indo para ir em frente e começar este arquivo com esta sintaxe enigmática. 93 00:04:02,450 --> 00:04:06,310 Assim, "usuário, bin, env, para o ambiente, php. " 94 00:04:06,310 --> 00:04:10,670 >> Isto é simplesmente uma linha de código que é vai dizer o meu sistema operacional, 95 00:04:10,670 --> 00:04:13,730 ir encontrar no seu local de ambiente seja o que for, 96 00:04:13,730 --> 00:04:18,149 onde quer que o PHP é-- interpreter-- e vá em frente e usar esse intérprete 97 00:04:18,149 --> 00:04:20,589 para interpretar o código a seguir. 98 00:04:20,589 --> 00:04:22,760 Agora, isso é uma espécie de uma característica feia do PHP. 99 00:04:22,760 --> 00:04:24,980 Mas nesta língua, qualquer vez que você escrever código PHP, 100 00:04:24,980 --> 00:04:29,200 você precisa ter um destes feio Tags PHP demarcando o início 101 00:04:29,200 --> 00:04:32,220 de sua code-- 00:04:37,430 >> Mas a seguir aqui, agora posso fazer alguma coisa bastante simples, como printf Olá vírgula 103 00:04:37,430 --> 00:04:40,922 mundo barra invertida n perto citação, perto parênteses. 104 00:04:40,922 --> 00:04:42,630 E depois é só para o bem medida, eu vou 105 00:04:42,630 --> 00:04:45,380 para ir em frente e perto minha tag php aqui 106 00:04:45,380 --> 00:04:47,390 Para que tudo parece bem bonito impresso. 107 00:04:47,390 --> 00:04:50,780 >> E assim que eu clicar em Salvar, gedit é realmente inteligente o suficiente 108 00:04:50,780 --> 00:04:54,620 a olhar para aquela primeira linha e perceber, oh, você está escrevendo código PHP. 109 00:04:54,620 --> 00:04:56,710 Permitam-me destacar sintaxe -lo com as cores 110 00:04:56,710 --> 00:04:58,690 aqui de modo que esteja um pouco mais. 111 00:04:58,690 --> 00:05:01,300 Mas agora eu estou indo para ir até a minha janela de terminal. 112 00:05:01,300 --> 00:05:02,340 Vou ampliar. 113 00:05:02,340 --> 00:05:06,860 >> Este programa foi chamado de "Olá", então eu vou fazer barra dot Olá, 114 00:05:06,860 --> 00:05:07,990 mas a permissão negada. 115 00:05:07,990 --> 00:05:08,490 E bash. 116 00:05:08,490 --> 00:05:10,610 Nós, na verdade, ouvi falar disso coisa que um par de semanas atrás 117 00:05:10,610 --> 00:05:13,140 no contexto de Shellshock, um desses bugs. 118 00:05:13,140 --> 00:05:16,240 >> Mas permissão negada vimos antes, talvez em um contexto diferente. 119 00:05:16,240 --> 00:05:19,060 Alguém lembra de como você pode corrigir alguma coisa 120 00:05:19,060 --> 00:05:22,100 onde permissão é negada como este? 121 00:05:22,100 --> 00:05:23,490 Qual é o comando, pelo menos? 122 00:05:23,490 --> 00:05:24,159 >> ESTUDANTE: chmod. 123 00:05:24,159 --> 00:05:26,700 DAVID J. MALAN: Sim, chmod, para alterar o modo de um arquivo. 124 00:05:26,700 --> 00:05:30,171 E você vai ter todos os mais utilizados para esta próxima semana com um problema posterior 125 00:05:30,171 --> 00:05:30,670 definido. 126 00:05:30,670 --> 00:05:33,211 Mas, por agora, eu vou mudar o modo para não ser legível, 127 00:05:33,211 --> 00:05:36,650 mas para dar a todos executeability privilégios, a capacidade 128 00:05:36,650 --> 00:05:37,710 para executar esse arquivo. 129 00:05:37,710 --> 00:05:40,360 E eu vou atribuir que para o arquivo Olá. 130 00:05:40,360 --> 00:05:45,150 >> Se eu agora fazer barra dot Olá entra, você ver, de fato, o meu programa, Olá mundo. 131 00:05:45,150 --> 00:05:48,760 E o passo que eu fiz claramente ignorar por completo? 132 00:05:48,760 --> 00:05:49,520 Compilando. 133 00:05:49,520 --> 00:05:51,680 Então, eu apenas corri este programa bastante simples. 134 00:05:51,680 --> 00:05:55,690 >> E verifica-se que você pode fazer isso com um lote de sintaxe reminiscente de C. 135 00:05:55,690 --> 00:06:03,400 Deixe-me ir para o código de hoje, que eu coloquei em meu diretório vHost 136 00:06:03,400 --> 00:06:05,250 aqui, por razões reais nós vamos voltar. 137 00:06:05,250 --> 00:06:09,350 E eu estou indo para ir em, digamos, as condições de um. 138 00:06:09,350 --> 00:06:12,450 >> E você vai ver aqui, em primeiro lugar e acima de tudo, um monte de comentários. 139 00:06:12,450 --> 00:06:15,240 Mas esta é realmente uma recriação em PHP 140 00:06:15,240 --> 00:06:18,960 de um programa que fizemos na semana um chamado condições 1.c 141 00:06:18,960 --> 00:06:20,690 onde o propósito de vida deste programa 142 00:06:20,690 --> 00:06:22,950 é aparentemente para pedir o usuário para um número inteiro 143 00:06:22,950 --> 00:06:25,270 e, em seguida, fazer alguma fofo análise sobre ele através do qual 144 00:06:25,270 --> 00:06:29,510 você diz se é positivo ou negativo ou igual a zero. 145 00:06:29,510 --> 00:06:34,220 E eu trago este acima só porque, à exceção talvez de um pequeno detalhe, 146 00:06:34,220 --> 00:06:37,150 é indistinguível tão longe de C. 147 00:06:37,150 --> 00:06:39,930 >> Qual é a única característica aqui que talvez salta 148 00:06:39,930 --> 00:06:41,410 para você como um pouco diferente? 149 00:06:41,410 --> 00:06:42,160 Talvez duas coisas. 150 00:06:42,160 --> 00:06:42,660 Sim? 151 00:06:42,660 --> 00:06:44,070 >> ESTUDANTE: Dólar sinal n? 152 00:06:44,070 --> 00:06:44,944 >> DAVID J. MALAN: Yeah. 153 00:06:44,944 --> 00:06:46,210 Então cifrão n está presente. 154 00:06:46,210 --> 00:06:48,120 E cifrões, como vamos ver, vamos 155 00:06:48,120 --> 00:06:51,460 ser uma solução para o início de qualquer variável em PHP. 156 00:06:51,460 --> 00:06:54,250 É tanto o bem bom e bad-- em que é uma espécie de óbvio o que é 157 00:06:54,250 --> 00:06:56,797 uma variável, mal em que é mais uma coisa para escrever. 158 00:06:56,797 --> 00:06:58,630 E há um outro coisa que não tem muito 159 00:06:58,630 --> 00:07:00,876 visto, pelo menos por esta grafia. sim? 160 00:07:00,876 --> 00:07:01,630 >> ALUNO: Readline. 161 00:07:01,630 --> 00:07:02,671 >> DAVID J. MALAN: Readline. 162 00:07:02,671 --> 00:07:06,550 Readline nós não ver, por si só, em C, mesmo que existe algo 163 00:07:06,550 --> 00:07:09,530 semelhante, mas nós usamos getString, e esta é sua homóloga. 164 00:07:09,530 --> 00:07:12,950 Então, se eu entrar nessa diretório, que passa a ser, 165 00:07:12,950 --> 00:07:18,030 como eu vou explicar um pouco na minha vHost diretório e minha fonte de um diretório, 166 00:07:18,030 --> 00:07:22,730 e eu ir em frente e fazer o corte de ponto conditions-- barra dot whoops-- 167 00:07:22,730 --> 00:07:26,710 condições 1, você vai ver, mais uma vez, a mesma permissão issue-- negado. 168 00:07:26,710 --> 00:07:33,610 >> Então deixe-me aproximar e fazer chmod um plus x sobre as condições, as condições do corte de ponto. 169 00:07:33,610 --> 00:07:35,222 Eu gostaria de um número inteiro, por favor, 50. 170 00:07:35,222 --> 00:07:36,930 E nós poderíamos jogar este jogo durante todo o dia. 171 00:07:36,930 --> 00:07:39,140 Ele vai se comportar exatamente como o fez em uma semana. 172 00:07:39,140 --> 00:07:42,860 >> OK, portanto, não muito diferente, exceto não apenas que leve pouco de sintaxe, 173 00:07:42,860 --> 00:07:45,490 mas, na parte superior, I novamente tinha essa linha que 174 00:07:45,490 --> 00:07:49,760 me permitiu criar algo que parece um programa em C chamado Olá, 175 00:07:49,760 --> 00:07:51,150 chamadas condições 1. 176 00:07:51,150 --> 00:07:54,520 Mas não é 0 e os Estou executando diretamente. 177 00:07:54,520 --> 00:07:57,620 É, em vez de executar esse intérprete, cujo nome 178 00:07:57,620 --> 00:07:59,440 passa a ser idêntico ao idioma. 179 00:07:59,440 --> 00:08:04,970 O programa é chamado de PHP, e meu código abaixo da linha de um está sendo passado para ele. 180 00:08:04,970 --> 00:08:07,740 >> Podemos fazer outra bastante simples exemplo uma reminiscência de algo 181 00:08:07,740 --> 00:08:09,240 fizemos semanas atrás. 182 00:08:09,240 --> 00:08:12,020 Mais uma vez, esta é uma espécie de pedaço de código arbitrário 183 00:08:12,020 --> 00:08:14,000 que, aparentemente, faz que quando você executá-lo? 184 00:08:14,000 --> 00:08:15,625 O que é que isto vai imprimir, presumivelmente? 185 00:08:15,625 --> 00:08:23,540 186 00:08:23,540 --> 00:08:28,250 >> Então, inicialmente na linha 16, é vai dizer que x é agora 2, provavelmente. 187 00:08:28,250 --> 00:08:30,920 % D é o mesmo que para printf $ i. 188 00:08:30,920 --> 00:08:33,460 Então é cubing, ponto, ponto, ponto, na linha 17. 189 00:08:33,460 --> 00:08:36,299 E depois a linha 18 aparece para chamar uma função Cubed. 190 00:08:36,299 --> 00:08:37,600 E onde é definido Cubed? 191 00:08:37,600 --> 00:08:40,319 >> Bem, parece que na linha 25, de modo que não é assim tão diferente. 192 00:08:40,319 --> 00:08:42,610 Eu tenho alguns comentários acima -lo, mas, na maior parte, 193 00:08:42,610 --> 00:08:45,370 é um bastante simples portabilidade ou conversão 194 00:08:45,370 --> 00:08:48,470 do programa em C para a versão PHP. 195 00:08:48,470 --> 00:08:52,670 Mas agora há um par de diferenças que talvez deve saltar para fora. 196 00:08:52,670 --> 00:08:56,100 O que mais é diferente sobre como você pode escrever este mesmo programa em C? 197 00:08:56,100 --> 00:08:57,900 >> Estudante: [inaudível]. 198 00:08:57,900 --> 00:09:00,070 >> DAVID J. MALAN: Não há nenhum protótipo em cima. 199 00:09:00,070 --> 00:09:03,210 Então PHP-- e, francamente, um monte de languages-- moderno 200 00:09:03,210 --> 00:09:06,920 são muito mais inteligentes e mais útil de C compiladores em que você 201 00:09:06,920 --> 00:09:09,740 pode colocar a função aqui em cima, você pode colocar uma função aqui em baixo, 202 00:09:09,740 --> 00:09:12,740 eo intérprete vai para fazer-lhe o favor de ler 203 00:09:12,740 --> 00:09:16,010 o arquivo inteiro antes de decidir que alguma função não existir. 204 00:09:16,010 --> 00:09:17,970 Então boas melhorias anos mais tarde. 205 00:09:17,970 --> 00:09:22,126 Mas há também algo outra coisa diferente ou ausente aqui. 206 00:09:22,126 --> 00:09:22,626 Sim? 207 00:09:22,626 --> 00:09:25,084 >> Estudante: [inaudível]. 208 00:09:25,084 --> 00:09:27,750 DAVID J. MALAN: Nós não temos que declarar os tipos de variáveis, 209 00:09:27,750 --> 00:09:31,780 então vamos ver o pouco tempo que existem diferentes tipos em PHP, 210 00:09:31,780 --> 00:09:34,970 mas você não precisa especificá-los, o que também é bom e ruim. 211 00:09:34,970 --> 00:09:36,623 E há uma outra coisa que falta. 212 00:09:36,623 --> 00:09:37,430 >> Estudante: Não há bibliotecas. 213 00:09:37,430 --> 00:09:38,630 >> DAVID J. MALAN: Não há bibliotecas. 214 00:09:38,630 --> 00:09:39,350 OK, então isso é bom. 215 00:09:39,350 --> 00:09:40,540 Recebemos muito mais fora da caixa. 216 00:09:40,540 --> 00:09:43,373 Portanto, não há realmente muito mais coisas que eu achava que eram diferentes. 217 00:09:43,373 --> 00:09:44,350 Que tal maneira em volta? 218 00:09:44,350 --> 00:09:46,032 O que é isso? 219 00:09:46,032 --> 00:09:46,740 Diga-se mais uma vez? 220 00:09:46,740 --> 00:09:47,960 >> ALUNO: Pointer. 221 00:09:47,960 --> 00:09:49,270 >> DAVID J. MALAN: Sem ponteiros. 222 00:09:49,270 --> 00:09:51,280 OK, pelo menos, neste exemplo, não. 223 00:09:51,280 --> 00:09:52,070 Isso é justo. 224 00:09:52,070 --> 00:09:55,090 Portanto, não existem indicações em PHP, na verdade, em geral. 225 00:09:55,090 --> 00:09:58,730 Há algo chamado referências, mas não vamos gastar muito tempo lá. 226 00:09:58,730 --> 00:09:59,520 E o que mais? 227 00:09:59,520 --> 00:10:00,185 >> ALUNO: Principal. 228 00:10:00,185 --> 00:10:01,060 DAVID J. MALAN: Main. 229 00:10:01,060 --> 00:10:02,768 Portanto, este foi o Biggie Eu estava pensando. 230 00:10:02,768 --> 00:10:04,660 Observe que não há ponto de entrada principal. 231 00:10:04,660 --> 00:10:06,525 Você simplesmente começar a escrever seu código. 232 00:10:06,525 --> 00:10:08,400 E este é, na verdade, vai ser vantajoso 233 00:10:08,400 --> 00:10:10,560 quando nós fazemos a transição momentaneamente para realmente usando 234 00:10:10,560 --> 00:10:13,980 esta mesma linguagem para web baseada em de programação, para os quais nós 235 00:10:13,980 --> 00:10:16,580 não quero ter apenas um ponto de entrada. 236 00:10:16,580 --> 00:10:19,980 Podemos querer ter um monte de URLs, um monte de arquivos diferentes 237 00:10:19,980 --> 00:10:22,930 tudo tendo em entrada do usuário e produzindo saída. 238 00:10:22,930 --> 00:10:27,130 >> Mas aqui é o muito desanimador exemplo que prometi da última vez, 239 00:10:27,130 --> 00:10:30,130 nomeadamente neste pasta aqui, os erros ortográficos. 240 00:10:30,130 --> 00:10:33,680 Portanto, neste ortográfico arquivo, que não vai gastar muito tempo em, há 241 00:10:33,680 --> 00:10:37,870 essencialmente um porting-- P-O-P-A. É apenas a palavra dada quando, digamos, 242 00:10:37,870 --> 00:10:40,800 converter de uma língua a outra normalmente manualmente. 243 00:10:40,800 --> 00:10:45,680 >> Esta é uma portabilidade de PC versão do verificador ortográfico do PSET 5. 244 00:10:45,680 --> 00:10:48,856 E eu essencialmente tentou convertê linha por linha, tanto quanto eu puder. 245 00:10:48,856 --> 00:10:51,730 Então, se você gosta deste tipo de coisa, ele realmente vale a pena em algum momento 246 00:10:51,730 --> 00:10:54,229 puxando os dois lado a lado e ver o que é o mesmo 247 00:10:54,229 --> 00:10:55,230 eo que é diferente. 248 00:10:55,230 --> 00:10:57,510 Mas eles são muito danado similar. 249 00:10:57,510 --> 00:11:00,110 Se você se lembra do que ortográfico ainda parecia, 250 00:11:00,110 --> 00:11:02,110 mesmo que você não fez tem que mudar esse arquivo, 251 00:11:02,110 --> 00:11:04,860 é bastante semelhante estruturalmente com apenas um par 252 00:11:04,860 --> 00:11:06,200 de mudanças aqui e ali. 253 00:11:06,200 --> 00:11:10,140 >> Então, isso é só para dizer que é muito simples para converter ortográfico 254 00:11:10,140 --> 00:11:12,000 de C para PHP. 255 00:11:12,000 --> 00:11:15,390 Mas no dicionário, não há algo ainda mais atraente. 256 00:11:15,390 --> 00:11:19,270 Deixe-me ir em frente e criar meu próprio arquivo dictionary.php. 257 00:11:19,270 --> 00:11:24,010 Assim ligeiramente diferente em que vamos chamá-lo .php ao invés de .c. 258 00:11:24,010 --> 00:11:26,980 Porque este é um arquivo PHP, I fazer-- ligeiramente annoyingly-- ter 259 00:11:26,980 --> 00:11:30,132 para iniciar o arquivo com uma tag php assim. 260 00:11:30,132 --> 00:11:32,340 E eu estou indo para ir em frente e definir algumas funções. 261 00:11:32,340 --> 00:11:35,770 Função chamada de verificação, que é vai levar em uma palavra como antes. 262 00:11:35,770 --> 00:11:37,520 Mas este argumento vai ter um dólar 263 00:11:37,520 --> 00:11:39,840 assinar, porque nós estamos, mais uma vez, usando PHP. 264 00:11:39,840 --> 00:11:42,350 Outra função do dictionary.c era carga 265 00:11:42,350 --> 00:11:47,120 e demorou em nome de um dicionário, por isso vou começar essa função pronto para ir. 266 00:11:47,120 --> 00:11:50,920 >> Outro em dictionary.c foi o quê? 267 00:11:50,920 --> 00:11:54,580 Tamanho foi um dos mais bonitos, em menos se você manteve alguma variável ao redor. 268 00:11:54,580 --> 00:11:57,830 por isso o tamanho só tem que devolver uma variável. 269 00:11:57,830 --> 00:11:59,090 E então houve descarga. 270 00:11:59,090 --> 00:12:02,830 >> Assim, havia estes quatro funções no conjunto de problemas 5 271 00:12:02,830 --> 00:12:06,770 que você precisava para implementar com alguma estrutura ou estruturas de dados. 272 00:12:06,770 --> 00:12:10,170 Então eu prometi que em PHP, podemos declarar 273 00:12:10,170 --> 00:12:14,490 uma tabela hash, por exemplo, tudo o que mais facilmente. 274 00:12:14,490 --> 00:12:17,377 Na verdade, se eu quiser uma tabela hash, Eu só vou ir assim 275 00:12:17,377 --> 00:12:18,460 e não é a minha tabela de hash. 276 00:12:18,460 --> 00:12:21,555 E essa é a nota, desanimador, que paramos na última vez. 277 00:12:21,555 --> 00:12:23,930 E você sabe que, se eu quisesse uma variável de tamanho, bem, 278 00:12:23,930 --> 00:12:25,867 este não é tudo que diferente de C, 279 00:12:25,867 --> 00:12:27,450 mas eu estou indo para ir em frente e fazer isso. 280 00:12:27,450 --> 00:12:28,630 E observe nenhum tipo de dados. 281 00:12:28,630 --> 00:12:31,180 E eu vou voltar mais tarde e realmente acrescentar alguns comentários aqui. 282 00:12:31,180 --> 00:12:32,480 Mas o que dizer de carga? 283 00:12:32,480 --> 00:12:35,780 >> Se dicionário cifrão é o nome do meu arquivo 284 00:12:35,780 --> 00:12:39,600 e eu realmente quero carregar palavras em esta tabela agora, 285 00:12:39,600 --> 00:12:42,360 Eu posso realmente fazer algo bastante simples. 286 00:12:42,360 --> 00:12:44,880 Um-- e este é minorly annoying-- em PHP, 287 00:12:44,880 --> 00:12:47,710 você tem que especificar no interior de uma função, se você 288 00:12:47,710 --> 00:12:51,060 deseja acessar alguns mundial variável que é definida fora. 289 00:12:51,060 --> 00:12:53,530 >> Mas isso não é particularmente interessante no momento. 290 00:12:53,530 --> 00:12:57,920 O que é mais interessante é isso para cada construir que eu mencionei da última vez. 291 00:12:57,920 --> 00:13:01,880 E verifica-se que o PHP tem uma função chamado arquivo cujo propósito na vida 292 00:13:01,880 --> 00:13:05,550 é abrir um arquivo e ler em todas as suas linhas em uma matriz 293 00:13:05,550 --> 00:13:06,840 e entregá-los de volta para. 294 00:13:06,840 --> 00:13:12,170 >> O que quer dizer que posso fazer tão dicionário que agora efetivamente quando eu chamo de arquivo, 295 00:13:12,170 --> 00:13:15,472 isso vai me devolver uma série de palavras do arquivo. 296 00:13:15,472 --> 00:13:16,430 Não é tudo de bom. 297 00:13:16,430 --> 00:13:20,130 Ele ainda vai ser uma linha de palavras, algo linear. 298 00:13:20,130 --> 00:13:23,880 Mas eu posso ir em frente e fazer uma iteração sobre cada uma dessas palavras usando 299 00:13:23,880 --> 00:13:25,710 que a sintaxe que vimos brevemente última vez. 300 00:13:25,710 --> 00:13:27,940 E você vai vê-lo mais no próximo PSET. 301 00:13:27,940 --> 00:13:32,070 >> Mas agora eu tenho uma iteração de loop sobre cada palavra no dicionário. 302 00:13:32,070 --> 00:13:36,100 E em cada iteração, lembro que eu sou chamando a palavra atual "palavra". 303 00:13:36,100 --> 00:13:39,790 E tudo isso vai levar a colocar uma palavra no dicionário é 304 00:13:39,790 --> 00:13:43,530 vai ser palavra palpite "verdade". 305 00:13:43,530 --> 00:13:44,740 Essa é a minha função de inserção. 306 00:13:44,740 --> 00:13:46,661 Essa é a minha função de carga para o meu dicionário. 307 00:13:46,661 --> 00:13:49,410 Agora é um pouco de uma fraude, porque, Você sabe o que, não há, na verdade, 308 00:13:49,410 --> 00:13:52,920 n de barra invertida no final das palavras que eu provavelmente deveria se livrar, 309 00:13:52,920 --> 00:13:56,380 mas isso não é um problema, porque o PHP tem uma costeleta que função chamada literalmente 310 00:13:56,380 --> 00:13:58,480 Costeletas de fora um personagem bem no final. 311 00:13:58,480 --> 00:13:59,400 Então, não há problema nenhum. 312 00:13:59,400 --> 00:14:02,199 Temos ido em frente e, na verdade, encurtado que apenas isso. 313 00:14:02,199 --> 00:14:05,240 E agora eu provavelmente deve manter o controle de tamanho, então vamos pelo menos fazer isso- 314 00:14:05,240 --> 00:14:05,835 tamanho ++. 315 00:14:05,835 --> 00:14:07,339 Eu posso fazer isso como antes. 316 00:14:07,339 --> 00:14:10,380 E então este é provavelmente vai funcionar muito bem, de modo que de retornar verdadeiro. 317 00:14:10,380 --> 00:14:10,930 Feito. 318 00:14:10,930 --> 00:14:11,797 PSET 5. 319 00:14:11,797 --> 00:14:13,545 >> [Risos] 320 00:14:13,545 --> 00:14:14,420 >> DAVID J. MALAN: OK. 321 00:14:14,420 --> 00:14:16,628 Nós vamos fazer isso de novo com a seguinte PSET, também. 322 00:14:16,628 --> 00:14:18,730 Assim que sobre o tamanho? 323 00:14:18,730 --> 00:14:22,080 Bem, espero que este é de cerca de como seria de esperar da última vez, 324 00:14:22,080 --> 00:14:24,460 embora eu tenho que fazer essa coisa estúpida mundial. 325 00:14:24,460 --> 00:14:26,610 É apenas um artefato de projeto da linguagem. 326 00:14:26,610 --> 00:14:28,450 >> Mas cheque é um pouco mais interessante. 327 00:14:28,450 --> 00:14:31,420 Então, se eu passei em dólar assinar palavra, eu primeiro 328 00:14:31,420 --> 00:14:34,060 quer ter acesso a que a tabela variável global. 329 00:14:34,060 --> 00:14:36,700 E agora, se eu quiser verificar se uma palavra está lá, 330 00:14:36,700 --> 00:14:44,350 Eu posso simplesmente dizer se é verdade que o seguinte é definido na tabela, 331 00:14:44,350 --> 00:14:49,957 então vá em frente e retorno true; mais, return false. 332 00:14:49,957 --> 00:14:51,180 Feito. 333 00:14:51,180 --> 00:14:52,440 A outra metade do PSET 5. 334 00:14:52,440 --> 00:14:54,540 >> Tudo bem, então, novamente, eu sou cortar alguns cantos. 335 00:14:54,540 --> 00:14:56,831 Para ser justo, eu provavelmente deveria gastar mais alguns segundos 336 00:14:56,831 --> 00:14:58,300 nesta aplicação. 337 00:14:58,300 --> 00:15:01,860 E eu provavelmente não deveria zombar de tudo o hora que você colocar na PSET tanto. 338 00:15:01,860 --> 00:15:04,045 Então strtolower é uma função. 339 00:15:04,045 --> 00:15:06,670 Algo semelhante existencialista C em, pelo menos, para os caracteres, 340 00:15:06,670 --> 00:15:08,560 mas o PHP tem uma versão corda toda. 341 00:15:08,560 --> 00:15:11,226 >> Isso vai forçar tudo em minúsculas, o que alguns de vocês 342 00:15:11,226 --> 00:15:14,944 poderia ter feito para canonizar o que você estava colocando em seu dicionário. 343 00:15:14,944 --> 00:15:16,360 E agora você pode fazer isso em C, também. 344 00:15:16,360 --> 00:15:17,780 Isto não tem nada a ver com o PHP. 345 00:15:17,780 --> 00:15:20,260 >> Mas sempre que você tem uma condição booleana, 346 00:15:20,260 --> 00:15:22,680 como algo na linha 10 lá, o que só é 347 00:15:22,680 --> 00:15:27,145 vai avaliar a verdade ou falsa, e seu caso mais claramente 348 00:15:27,145 --> 00:15:33,620 está retornando verdadeiro ou falso, eu poderia simplesmente realmente fazer isso mais sexy 349 00:15:33,620 --> 00:15:38,360 e apenas fazer algo como isto. 350 00:15:38,360 --> 00:15:40,500 De modo que não é a minha função de verificação. 351 00:15:40,500 --> 00:15:42,560 Certo, se o booleano retorna verdadeiro ou falso, 352 00:15:42,560 --> 00:15:44,630 vamos devolvê-lo imediatamente. 353 00:15:44,630 --> 00:15:47,340 >> E há alguns outros ajustes Eu poderia fazer aqui e ali. 354 00:15:47,340 --> 00:15:51,380 Descarregamento Load--, aliás, que é feito. 355 00:15:51,380 --> 00:15:52,850 Nada a fazer lá. 356 00:15:52,850 --> 00:15:55,840 Uma vez que toda a memória em PHP e muitas outras línguas 357 00:15:55,840 --> 00:15:57,570 é realmente conseguiu para você. 358 00:15:57,570 --> 00:16:00,330 Assim, enquanto no C, como você aprendeu dolorosamente, 359 00:16:00,330 --> 00:16:04,700 qualquer coisa que você malloc ou calloc ou realloc, você tem que se livrar. 360 00:16:04,700 --> 00:16:08,770 Qualquer coisa que você fopen, você tem que usar fclose, para que os recursos são finalmente libertados 361 00:16:08,770 --> 00:16:11,690 e ferramentas como Valgrind não fazer perceber e não se queixam, 362 00:16:11,690 --> 00:16:13,570 que é uma coisa boa para correr com eles. 363 00:16:13,570 --> 00:16:16,190 >> Mas, certamente, não deve haver alguma captura, certo? 364 00:16:16,190 --> 00:16:19,400 Caso contrário, nós meio que desperdiçado um monte de semanas. 365 00:16:19,400 --> 00:16:23,270 Portanto, há uma série de razões por que tipo de tomar essa trajetória, 366 00:16:23,270 --> 00:16:24,440 mas há um trade-off. 367 00:16:24,440 --> 00:16:25,820 Certo, isso tem sido temática. 368 00:16:25,820 --> 00:16:29,690 >> Então, o que pode um trade-off aqui se deslocam, de C para PHP? 369 00:16:29,690 --> 00:16:33,250 Sinto como se todos ganham tão longe que não um pouco de feiúra aqui ou ali. 370 00:16:33,250 --> 00:16:34,040 Sim. 371 00:16:34,040 --> 00:16:34,700 O que é isso? 372 00:16:34,700 --> 00:16:36,064 >> Estudante: [inaudível] de memória. 373 00:16:36,064 --> 00:16:36,980 DAVID J. MALAN: Speed. 374 00:16:36,980 --> 00:16:37,479 Está bem. 375 00:16:37,479 --> 00:16:40,720 Bem, a minha velocidade era muito rápido. 376 00:16:40,720 --> 00:16:42,020 Certo? 377 00:16:42,020 --> 00:16:44,320 Mas a velocidade de execução do programa? 378 00:16:44,320 --> 00:16:45,580 OK, então isso é um ponto justo. 379 00:16:45,580 --> 00:16:50,930 >> Então, como isso iria acontecer, eu antecipadamente cued-se tanto a minha solução tentativa, a um 380 00:16:50,930 --> 00:16:53,510 Eu tinha na placa grande era uma solução à base de tentativa, 381 00:16:53,510 --> 00:16:55,510 e eu tenho que neste diretório aqui. 382 00:16:55,510 --> 00:16:58,510 Então, eu, em um momento, eu posso ir em frente e executar isso na Bíblia King James, 383 00:16:58,510 --> 00:16:59,657 pressionar Enter. 384 00:16:59,657 --> 00:17:01,990 E isso é esperançosamente correto execução no final, 385 00:17:01,990 --> 00:17:05,109 me dá tempo no total de 0,38 segundos para que 386 00:17:05,109 --> 00:17:07,270 um exemplo de algum modo arbitrário. 387 00:17:07,270 --> 00:17:09,270 >> E se eu agora ir para este segunda janela de terminal 388 00:17:09,270 --> 00:17:14,569 aqui onde eu abri primeiro gedit, vamos me entrar em code-- de hoje que, novamente, 389 00:17:14,569 --> 00:17:19,650 É neste diretório aqui-- e deixe-me ir em frente e correr ortográfico. 390 00:17:19,650 --> 00:17:23,470 Então, só para ficar claro, esta é a versão do PHP. 391 00:17:23,470 --> 00:17:25,170 Estou apenas mostrando o início da mesma aqui. 392 00:17:25,170 --> 00:17:32,020 >> Então, se eu faço ortográfico de til CS50 PSet cinco textos, King James, entrar. 393 00:17:32,020 --> 00:17:39,700 394 00:17:39,700 --> 00:17:43,050 É ainda mais rápido do que a escrita -lo em C, mas o tempo total de 395 00:17:43,050 --> 00:17:47,650 é, o aviso prévio, de 0,93, ao passo que o meu Implementação baseada em C foi de 0,38. 396 00:17:47,650 --> 00:17:49,110 Então é uma diferença não-trivial. 397 00:17:49,110 --> 00:17:51,100 >> E este é apenas em um arquivo. 398 00:17:51,100 --> 00:17:53,480 Se você fosse para executar os dois programas contra o grande conselho 399 00:17:53,480 --> 00:17:56,510 e tem um monte de entradas testados, este seria certamente somar. 400 00:17:56,510 --> 00:18:00,310 E se tivéssemos conjuntos de dados ainda maiores, isso, também, que se somam ainda mais. 401 00:18:00,310 --> 00:18:04,820 Então, sim, pagar algum preço de velocidade é realmente o caso. 402 00:18:04,820 --> 00:18:05,470 O que mais? 403 00:18:05,470 --> 00:18:08,000 404 00:18:08,000 --> 00:18:08,860 Sim? 405 00:18:08,860 --> 00:18:10,340 >> ESTUDANTE: Quantidade de uso de memória RAM. 406 00:18:10,340 --> 00:18:11,756 >> DAVID J. MALAN: Quantidade de uso de memória RAM. 407 00:18:11,756 --> 00:18:15,380 Então eu não dar um segundo pensou ao escrever esta PHP 408 00:18:15,380 --> 00:18:17,300 versão de quanto memória que eu estava usando. 409 00:18:17,300 --> 00:18:22,080 Estou completamente adiar isso para PHP si e quem escreveu esse programa. 410 00:18:22,080 --> 00:18:24,500 E isso pode ser OK, mas se eu realmente 411 00:18:24,500 --> 00:18:28,420 preocupam com apertando tanto o desempenho fora do meu programa ou fora do meu site 412 00:18:28,420 --> 00:18:31,150 ou fora de qualquer ferramenta Estou construindo, talvez 413 00:18:31,150 --> 00:18:33,310 PHP, na verdade, não é a linguagem certa. 414 00:18:33,310 --> 00:18:36,330 >> E, de fato, é por isso que, para exemplo, muitos web servers-- 415 00:18:36,330 --> 00:18:38,980 os programas que reais servir-se content-- web 416 00:18:38,980 --> 00:18:41,810 não são escritas em PHP ou em Python ou Ruby. 417 00:18:41,810 --> 00:18:44,630 Eles são escritos, como agora você vai fazer com PSet 6, 418 00:18:44,630 --> 00:18:48,120 em C, de modo que você pode espremer cada bit de desempenho fora dele 419 00:18:48,120 --> 00:18:50,780 e realmente exercer controle de grão fino sobre o que é 420 00:18:50,780 --> 00:18:52,980 acontecendo sob a capa e não apenas tomá-lo 421 00:18:52,980 --> 00:18:54,890 para concedido algum superior estrutura de dados nível. 422 00:18:54,890 --> 00:18:58,071 >> Considere-se, apesar de tudo, quem em PHP implementado 423 00:18:58,071 --> 00:19:00,070 essa noção de um hash mesa-- é realmente mais 424 00:19:00,070 --> 00:19:04,260 apropriadamente chamado de array-- associativa ele faz ou ela tem alguma idéia de que tipo 425 00:19:04,260 --> 00:19:07,090 de entradas que vão ser colocar na estrutura? 426 00:19:07,090 --> 00:19:08,260 Então, obviamente, não, certo? 427 00:19:08,260 --> 00:19:10,340 É uma ferramenta genérica no conjunto de ferramentas que é 428 00:19:10,340 --> 00:19:13,430 fornecida para quem quer para usá-lo, e por isso certamente que 429 00:19:13,430 --> 00:19:17,680 não pode ser optimizado, em última análise exatamente o que você quer fazer. 430 00:19:17,680 --> 00:19:21,180 >> Assim, o tempo de desenvolvimento trade-offs-- pode diferentes, o desempenho pode ser diferente, 431 00:19:21,180 --> 00:19:23,120 complexidade ou uso de memória pode ser diferente. 432 00:19:23,120 --> 00:19:24,820 E então o que você vai encontrar cada vez mais é que não há 433 00:19:24,820 --> 00:19:26,570 vai ser diferente ferramentas para o comércio. 434 00:19:26,570 --> 00:19:31,160 E, de fato, para um super maioria dos projetos finais das pessoas nesta classe, 435 00:19:31,160 --> 00:19:34,360 acredite ou não, C não vai ser a linguagem certa para usar. 436 00:19:34,360 --> 00:19:37,880 >> E, de fato, um dos delivery em última análise, para qualquer classe como este 437 00:19:37,880 --> 00:19:40,510 é para você pensar sobre, bem, o que você deve retirar 438 00:19:40,510 --> 00:19:42,710 prateleira quando quiser para resolver algum problema. 439 00:19:42,710 --> 00:19:46,720 E, de fato, nós vamos atravessar essa ponte ainda mais quando olhamos para mais idiomas 440 00:19:46,720 --> 00:19:47,920 mesmo para além de hoje. 441 00:19:47,920 --> 00:19:50,530 >> Então transição vamos agora para talvez um contexto mais familiarizados 442 00:19:50,530 --> 00:19:52,480 para a utilização de uma linguagem como PHP. 443 00:19:52,480 --> 00:19:56,720 É pouco comum para usar em linha de comando, escrevendo roteiros 444 00:19:56,720 --> 00:19:59,050 como eu fiz, mas é muito, muito mais comum. 445 00:19:59,050 --> 00:20:02,350 E foi destinado a ser utilizado em a forma de ficheiros que tipicamente terminam 446 00:20:02,350 --> 00:20:05,060 em .php-- mas isso é não um prerequisite-- 447 00:20:05,060 --> 00:20:07,990 que se gerar o conteúdo da web. 448 00:20:07,990 --> 00:20:11,310 >> Então deixe-me ir em frente e abrir um pouco exemplos que eu preparado com antecedência. 449 00:20:11,310 --> 00:20:15,100 E estes são, na verdade, uma espécie de verdade histórias em que uma das primeiras coisas 450 00:20:15,100 --> 00:20:18,200 Eu nunca me fez depois de terminar CS50 e talvez, eu acho, 451 00:20:18,200 --> 00:20:21,350 CS51 anos atrás é o meu companheiro de quarto e eu estava ajudando 452 00:20:21,350 --> 00:20:24,320 para executar o intramural calouro programa de desporto, o que, no momento, 453 00:20:24,320 --> 00:20:28,610 calouro tinha de se inscrever para várias esportes, preenchendo uma folha de papel, 454 00:20:28,610 --> 00:20:31,800 como era chamado, andando em todo o quintal para Wigglesworth, 455 00:20:31,800 --> 00:20:34,030 e deixá-la cair em algum queda porta de Proctor. 456 00:20:34,030 --> 00:20:37,210 E então ele ou ela iria passar por los e, em seguida, na verdade, um e-mail manualmente 457 00:20:37,210 --> 00:20:39,140 que foram registrados por algum esporte. 458 00:20:39,140 --> 00:20:41,166 >> Então, claramente, uma oportunidade para melhorias. 459 00:20:41,166 --> 00:20:44,040 Estes dias, você pode recorrer a apenas Formas do Google, mas volta no dia, 460 00:20:44,040 --> 00:20:46,914 tivemos de realmente alcançar este for-- Não foi mesmo que a longo ago-- chegar 461 00:20:46,914 --> 00:20:49,410 para uma programação linguagem que não era PHP. 462 00:20:49,410 --> 00:20:51,200 Na época, era algo chamado Perl, 463 00:20:51,200 --> 00:20:52,890 que já saiu de moda desde então. 464 00:20:52,890 --> 00:20:54,160 Mas a ideia é a mesma. 465 00:20:54,160 --> 00:20:58,940 >> E eu, essencialmente, sentou-se para tentar a porta vai versões Perl para PHP, 466 00:20:58,940 --> 00:21:03,710 mas na negação completa, não deu qualquer pensamento para a estética ainda. 467 00:21:03,710 --> 00:21:04,960 Então, aqui é uma página web. 468 00:21:04,960 --> 00:21:05,670 Este é um arquivo. 469 00:21:05,670 --> 00:21:09,470 Se eu aumentar o zoom, sua aparentemente chamado froshim0.php 470 00:21:09,470 --> 00:21:12,060 só porque é o nosso primeiro exemplo desta série. 471 00:21:12,060 --> 00:21:15,970 E perceber que ele tem o que parece para ser um formulário HTML muito feio, 472 00:21:15,970 --> 00:21:18,680 mas uma forma é interessante porque permite 473 00:21:18,680 --> 00:21:21,910 me proporcionar a entrada do usuário para o navegador. 474 00:21:21,910 --> 00:21:27,730 >> Agora última vez quando tivemos um formulário, para quem é que nos submetemos nosso parâmetro de consulta, 475 00:21:27,730 --> 00:21:30,450 o parâmetro de fila, como era chamado? 476 00:21:30,450 --> 00:21:31,330 Então, para o Google, certo? 477 00:21:31,330 --> 00:21:34,090 Estamos totalmente punted na idéia de fazer qualquer coisa com essa entrada. 478 00:21:34,090 --> 00:21:36,160 >> Mas hoje, nós começamos a produzir a saída. 479 00:21:36,160 --> 00:21:39,420 E o comportamento que eu vou ver aqui, inicialmente, é bastante trivial. 480 00:21:39,420 --> 00:21:42,980 David, eu vou marcar gênero aqui, diz Matthews aqui. 481 00:21:42,980 --> 00:21:43,800 Eu não vou ser o capitão. 482 00:21:43,800 --> 00:21:45,410 Vou clique em registrar. 483 00:21:45,410 --> 00:21:50,720 E note que a URL tem alterado para registrar-0.php, 484 00:21:50,720 --> 00:21:52,310 e depois há este texto feio aqui. 485 00:21:52,310 --> 00:21:54,460 Eu não pensou em a formatação deste. 486 00:21:54,460 --> 00:21:59,900 >> Mas o que é interessante é que três Os valores foram aparentemente passado. 487 00:21:59,900 --> 00:22:02,960 Esta é uma espécie de PHP equivalente a printf-- 488 00:22:02,960 --> 00:22:06,330 vamos ver o que é realmente chamado em um bit-- que apenas imprime 489 00:22:06,330 --> 00:22:08,300 o que você passou para ele. 490 00:22:08,300 --> 00:22:11,414 Então isso sugere que essa forma tinham, pelo menos, três campos para isso, 491 00:22:11,414 --> 00:22:12,580 e você me viu digitá-los. 492 00:22:12,580 --> 00:22:15,739 Um deles era o meu nome, uma era gênero, um era dormitório. 493 00:22:15,739 --> 00:22:18,780 E o capitão nem sequer são enviados para o servidor, porque eu não verificá-lo. 494 00:22:18,780 --> 00:22:22,150 >> Então, isso quer dizer, aparentemente, quando você enviar as coisas na web, 495 00:22:22,150 --> 00:22:26,830 não só a URL às vezes change-- às vezes isso não acontece. 496 00:22:26,830 --> 00:22:30,330 Na verdade, o nome do arquivo alterado, mas o que está ausente da URL 497 00:22:30,330 --> 00:22:32,861 que nós vimos da última vez com o Google. 498 00:22:32,861 --> 00:22:33,360 Sim? 499 00:22:33,360 --> 00:22:34,380 >> ESTUDANTE: Não string de consulta 500 00:22:34,380 --> 00:22:35,220 >> DAVID J. MALAN: Não há nenhuma string de consulta. 501 00:22:35,220 --> 00:22:37,270 Não há nenhum ponto de interrogação alguma coisa. 502 00:22:37,270 --> 00:22:40,050 Não há nenhum ponto de interrogação q é igual a gatos, como fizemos da última vez. 503 00:22:40,050 --> 00:22:42,170 E não há dúvida nenhuma Nome de ponto de interrogação é igual a 504 00:22:42,170 --> 00:22:46,310 David ou dormitório é igual Matthews, Então, onde é que tudo está indo? 505 00:22:46,310 --> 00:22:51,290 >> Bem, deixe-me voltar para gedit aqui e abrir o primeiro desses arquivos 506 00:22:51,290 --> 00:22:57,020 no meu vhost, host local, público diretório aqui e ir para froshim0. 507 00:22:57,020 --> 00:23:02,060 Assim, verifica-se que quase tudo desta página é apenas HTML. 508 00:23:02,060 --> 00:23:05,410 E isso pode ser estranho para você, mas logo será mais assim com PSET 6 509 00:23:05,410 --> 00:23:07,370 e PSET 7 e 8 PSET. 510 00:23:07,370 --> 00:23:09,160 Mas esta é apenas uma página HTML. 511 00:23:09,160 --> 00:23:12,400 >> E a coisa interessante parece ser aqui. 512 00:23:12,400 --> 00:23:16,290 A tag form cuja ação atributo tem um valor de registro 0. 513 00:23:16,290 --> 00:23:18,890 É por isso que quando eu submeto isso, ele vai para o arquivo. 514 00:23:18,890 --> 00:23:20,620 Mas o método é diferente pós today--. 515 00:23:20,620 --> 00:23:23,120 Assim, verifica-se que há pelo menos dois métodos utilizados na web 516 00:23:23,120 --> 00:23:24,911 para enviar informações a partir do navegador para o servidor. 517 00:23:24,911 --> 00:23:25,980 Get coloca na URL. 518 00:23:25,980 --> 00:23:27,950 Publicar o coloca em outro lugar. 519 00:23:27,950 --> 00:23:30,570 E quando e por que você pode realmente quer um site 520 00:23:30,570 --> 00:23:34,110 usar post, então, em vez de obter, apenas intuitivamente? 521 00:23:34,110 --> 00:23:37,080 Qualquer site. 522 00:23:37,080 --> 00:23:42,010 Que tipo de dados devem ser passados ​​apenas por inferência agora via correio, por oposição 523 00:23:42,010 --> 00:23:45,184 para chegar, se nós vimos as duas diferenças? 524 00:23:45,184 --> 00:23:46,350 Estudante: [inaudível] seguro. 525 00:23:46,350 --> 00:23:47,790 DAVID J. MALAN: Se você quiser algo para ser seguro. 526 00:23:47,790 --> 00:23:50,360 Então, você pode digitar uma senha em um site, um cartão de crédito 527 00:23:50,360 --> 00:23:53,030 em um site faria tipo de estes sub-óptima 528 00:23:53,030 --> 00:23:56,220 se o navegador que colocar valor dentro da URL. 529 00:23:56,220 --> 00:23:57,680 Por quê? 530 00:23:57,680 --> 00:24:00,059 Você vê, o que não faz parece ser um negócio tão grande, 531 00:24:00,059 --> 00:24:03,350 mas as probabilidades são que você anda muito freqüentemente longe de seu computador computador ou uso 532 00:24:03,350 --> 00:24:05,310 laboratórios, e assim por alguém pessoa ou mesmo um companheiro de quarto 533 00:24:05,310 --> 00:24:08,220 poderia facilmente caminhar para cima e ver que informações privadas. 534 00:24:08,220 --> 00:24:10,220 Quando você envia um e-mail via web, você provavelmente 535 00:24:10,220 --> 00:24:12,350 Não quero esse final de dados se na URL também. 536 00:24:12,350 --> 00:24:15,266 E por isso há uma série de razões por isso que pode querer colocá-lo aqui. 537 00:24:15,266 --> 00:24:18,610 E bem photos--, eu não posso mesmo bastante imaginar como você levaria um gráfico, 538 00:24:18,610 --> 00:24:21,480 como um JPEG, e colocá-lo em uma URL. 539 00:24:21,480 --> 00:24:22,330 Você poderia fazê-lo. 540 00:24:22,330 --> 00:24:25,840 Há maneiras de codificar-lo, mas é apenas não é simples assim. 541 00:24:25,840 --> 00:24:29,030 >> Então inscreva 0 é realmente muito abaixo do esperado. 542 00:24:29,030 --> 00:24:31,610 Tudo o que diz, literalmente, é isso. 543 00:24:31,610 --> 00:24:35,910 Ele imprime dentro de alguns Tags HTML o seguinte. 544 00:24:35,910 --> 00:24:38,640 Eu tenho um código PHP aqui aninhada dentro de uma tag de pré. 545 00:24:38,640 --> 00:24:42,300 "Pré" significa apenas texto pré-formatado, mono-espaçada, como uma máquina de escrever. 546 00:24:42,300 --> 00:24:44,836 >> Printr é uma função recursiva de impressão. 547 00:24:44,836 --> 00:24:46,710 E depois há este coisa interessante aqui. 548 00:24:46,710 --> 00:24:48,835 E nós vamos voltar a este porque há outros, 549 00:24:48,835 --> 00:24:51,140 mas sublinhado cifrão pós parece ser 550 00:24:51,140 --> 00:24:56,110 uma variável em PHP no qual nada você envia a partir do navegador para o servidor 551 00:24:56,110 --> 00:24:58,040 fica armazenado para você. 552 00:24:58,040 --> 00:25:00,930 E vamos ver como chegar em que a informação antes do tempo. 553 00:25:00,930 --> 00:25:04,000 >> Mas, primeiro, vamos voltar para um exemplo um pouco diferente. 554 00:25:04,000 --> 00:25:09,050 Indo para register-- ou em vez disso, froshims1.php, 555 00:25:09,050 --> 00:25:10,470 que parece um pouco diferente. 556 00:25:10,470 --> 00:25:12,670 Tomei um pouco mais esforço com a formatação, 557 00:25:12,670 --> 00:25:14,370 mesmo que ele ainda é muito feio. 558 00:25:14,370 --> 00:25:16,990 Mas eu estou indo para ir em frente e digite "David" agora. 559 00:25:16,990 --> 00:25:17,850 Masculino. 560 00:25:17,850 --> 00:25:19,360 Vamos verificar "capitão" desta vez. 561 00:25:19,360 --> 00:25:20,660 Faremos Matthews. 562 00:25:20,660 --> 00:25:22,430 E se cadastrar. 563 00:25:22,430 --> 00:25:24,110 >> E desta vez ele diz que, hm, não realmente. 564 00:25:24,110 --> 00:25:26,180 Tudo bem, então o que é registrar um? 565 00:25:26,180 --> 00:25:30,509 Deixe-me entrar em registo aberto um hm e-. 566 00:25:30,509 --> 00:25:32,300 Tudo bem, então isso é interessante, e este 567 00:25:32,300 --> 00:25:34,880 é um trampolim em direção agora programas mais interessantes. 568 00:25:34,880 --> 00:25:38,970 >> Observe o início desse arquivo tem um PHP tag bem como a alguns comentários. 569 00:25:38,970 --> 00:25:42,590 E estes são, para já, uma distração então vamos nos livrar desses comentários 570 00:25:42,590 --> 00:25:47,070 como eles estão em C. E eu reclamo com este pedaço de código com um comentário 571 00:25:47,070 --> 00:25:49,280 que este código é validando a apresentação. 572 00:25:49,280 --> 00:25:51,690 >> Bem, acontece que variáveis ​​como cifrão 573 00:25:51,690 --> 00:25:53,739 sublinhado post são chamado de super globals. 574 00:25:53,739 --> 00:25:55,530 Eles são como estes variáveis ​​globais especiais 575 00:25:55,530 --> 00:25:58,840 que são apenas omni-presentemente disponível dentro de seu programa. 576 00:25:58,840 --> 00:26:03,870 E você pode usar a notação de colchete indexar para eles não usando números 577 00:26:03,870 --> 00:26:07,460 como 0, 1, 2, 3, mas as palavras reais. 578 00:26:07,460 --> 00:26:12,100 >> Assim, você pode pensar em cifrão sublinhado posto como uma espécie de tabela hash 579 00:26:12,100 --> 00:26:15,920 que você poderia passar uma chave em uma pesquisa palavra-nos entre os colchetes, 580 00:26:15,920 --> 00:26:19,370 e ele vai lhe dar de volta o valor que o usuário realmente fornecido. 581 00:26:19,370 --> 00:26:21,210 PHP tem uma função chamado vazio que só 582 00:26:21,210 --> 00:26:23,720 diz sim ou não, este variável está vazia ou não. 583 00:26:23,720 --> 00:26:27,250 Temos estas barras duplas, que apenas significa ou, como em C. 584 00:26:27,250 --> 00:26:31,740 >> Então, na verdade, essa linha 4 é apenas dizendo que se o usuário não dar um nome 585 00:26:31,740 --> 00:26:36,540 ou não deu um gênero ou não dar um dormitório, vá em frente e redirecioná-lo 586 00:26:36,540 --> 00:26:38,184 ou ela via essa linha aqui. 587 00:26:38,184 --> 00:26:40,600 Então, isso é um pouco enigmática, mas isso apenas significa literalmente 588 00:26:40,600 --> 00:26:43,330 voltar a este local, por isso, o utilizador pontapés 589 00:26:43,330 --> 00:26:45,420 de volta para onde quer que ele ou ela veio. 590 00:26:45,420 --> 00:26:47,880 Mas é um pouco deselegante em que ele codificado. 591 00:26:47,880 --> 00:26:52,150 >> Mas e se essa condição se não avalia a verdade? 592 00:26:52,150 --> 00:26:55,790 E se o usuário me deu seu ou o nome dela e dormitório e de gênero? 593 00:26:55,790 --> 00:26:58,540 Que, se a condição não é vai avaliar a verdade, 594 00:26:58,540 --> 00:27:00,650 então eu não acertar a saída na linha 7. 595 00:27:00,650 --> 00:27:01,680 Então o que acontece? 596 00:27:01,680 --> 00:27:03,880 E isso é o que é interessante sobre PHP. 597 00:27:03,880 --> 00:27:07,470 >> Você pode deixar cair para dentro e fora de modo PHP, por assim dizer. 598 00:27:07,470 --> 00:27:10,985 Se você quiser algum código para executar, você pode abrir e fechar a tag PHP 599 00:27:10,985 --> 00:27:13,010 e colocar o código lá como eu fiz aqui. 600 00:27:13,010 --> 00:27:16,810 Assim que você fechar a tag PHP, o servidor 601 00:27:16,810 --> 00:27:19,407 é só ir para cuspir o que você colocar lá. 602 00:27:19,407 --> 00:27:21,740 E, de fato, isso era parte do o projeto original do PHP, 603 00:27:21,740 --> 00:27:25,280 para melhor ou pior, foi esta fungibilidade de código e marcação 604 00:27:25,280 --> 00:27:25,920 língua. 605 00:27:25,920 --> 00:27:28,670 E veremos que esta muito rapidamente se transforma em uma bagunça. 606 00:27:28,670 --> 00:27:31,280 E assim vamos fazer melhor do que este, em última instância, mas apenas 607 00:27:31,280 --> 00:27:35,620 perceber a facilidade com que eu sou realmente capazes de executar alguma lógica. 608 00:27:35,620 --> 00:27:37,440 >> Mas ainda um pouco abaixo do esperado. 609 00:27:37,440 --> 00:27:41,210 Vamos abrir versão dois de Frosh IMs, que 610 00:27:41,210 --> 00:27:44,270 aparentemente se submete a register2.php. 611 00:27:44,270 --> 00:27:47,600 Portanto, este arquivo está realmente acontecendo olhar quase o mesmo. 612 00:27:47,600 --> 00:27:50,780 Eu estou indo para ir para Frosh IMs 2. 613 00:27:50,780 --> 00:27:53,050 Mas em Frosh GI 2, vamos ver o que acontece. 614 00:27:53,050 --> 00:27:58,110 >> David, clique no botão de rádio, como ele é chamado; Matthews, sem capitão. 615 00:27:58,110 --> 00:27:59,230 Registre-se. 616 00:27:59,230 --> 00:28:00,130 Está registrado. 617 00:28:00,130 --> 00:28:00,700 Não é realmente. 618 00:28:00,700 --> 00:28:02,574 Oh, espere, nós fizemos Nesse exemplo, não foi? 619 00:28:02,574 --> 00:28:04,520 Tudo bem, fique. 620 00:28:04,520 --> 00:28:06,602 Nós vamos fazer a três. 621 00:28:06,602 --> 00:28:08,560 É evidente que algo é sobre acontecer com o Gmail. 622 00:28:08,560 --> 00:28:09,600 Nós vamos chegar lá. 623 00:28:09,600 --> 00:28:11,900 >> Então Frosh IMs 3 se parece com isso. 624 00:28:11,900 --> 00:28:13,050 Não é diferente. 625 00:28:13,050 --> 00:28:19,850 Mas quando eu faço David, do sexo masculino, Matthews, e registrar, esta terceira e última versão 626 00:28:19,850 --> 00:28:22,230 reivindicações, simplesmente você, são registrados realmente. 627 00:28:22,230 --> 00:28:23,560 Esse é o tipo de imaterial. 628 00:28:23,560 --> 00:28:25,600 Mas eu afirmo com este terceira e última versão 629 00:28:25,600 --> 00:28:30,610 Tenho agora recriada exatamente o que meu companheiro de quarto e eu construído para os IMs Frosh 630 00:28:30,610 --> 00:28:31,731 anos do programa atrás. 631 00:28:31,731 --> 00:28:32,480 E era simples. 632 00:28:32,480 --> 00:28:34,330 Não havia banco de dados, nenhuma planilha Excel. 633 00:28:34,330 --> 00:28:36,450 Mas, mais importante, não havia mais papel 634 00:28:36,450 --> 00:28:42,520 porque o que fizemos com este programa era, na verdade, e-mail o inspetor, que 635 00:28:42,520 --> 00:28:44,530 estava recebendo anteriormente estas coisas através de formulários. 636 00:28:44,530 --> 00:28:48,890 >> E, aparentemente, temos programado isso em tal maneira que, quando alguém registra, 637 00:28:48,890 --> 00:28:52,470 E-mails da conta de John Harvard a proctor-- ou a si mesmo neste caso, 638 00:28:52,470 --> 00:28:55,960 John Harvard-- com a seguinte texto-- "Esta pessoa acabou de registrar." 639 00:28:55,960 --> 00:29:00,560 Nome é David, o capitão está em branco; gênero, do sexo masculino; e dormitório, Matthews. 640 00:29:00,560 --> 00:29:01,560 >> Então o que aconteceu lá? 641 00:29:01,560 --> 00:29:05,360 Bem, o arquivo em questão aqui é aparentemente register3.php. 642 00:29:05,360 --> 00:29:09,080 E se eu abrir isso, você vai ver tanto o poder do código como este 643 00:29:09,080 --> 00:29:12,380 e também, francamente, a insegurança de um sistema como o e-mail. 644 00:29:12,380 --> 00:29:16,290 Acabo efetivamente fingiu ser John Harvard da seguinte maneira. 645 00:29:16,290 --> 00:29:20,920 >> Tenho a tag php aberto em cima, o que apenas diz aí vem algum código PHP. 646 00:29:20,920 --> 00:29:23,155 Aqui em baixo, gira lá fora são bibliotecas em PHP. 647 00:29:23,155 --> 00:29:26,410 Você só não precisa incluir arquivos de cabeçalho como muito. 648 00:29:26,410 --> 00:29:28,900 Você ganha mais com a pia da cozinha, por assim dizer. 649 00:29:28,900 --> 00:29:31,820 >> Mas, desta vez na linha 4, eu faço quer biblioteca especial chamado 650 00:29:31,820 --> 00:29:36,087 PHP mailer, que é algo que você pode instalar gratuitamente em muitos sistemas. 651 00:29:36,087 --> 00:29:37,920 Aqui embaixo estou validando a apresentação apenas 652 00:29:37,920 --> 00:29:40,540 verificando se o usuário dar me um nome, um gênero e um dormitório. 653 00:29:40,540 --> 00:29:44,130 E se assim for, vá em frente e instanciar um mailer. 654 00:29:44,130 --> 00:29:47,020 >> Você pode pensar nisso como sendo uma linha de código que só aloca. 655 00:29:47,020 --> 00:29:48,950 É como malloc, mas é um pouco mais sexy 656 00:29:48,950 --> 00:29:51,790 em que você não mencionar apenas malloc e algum número genérico. 657 00:29:51,790 --> 00:29:55,030 Você diz que me dar um destes, dá-me um novo um destes. 658 00:29:55,030 --> 00:29:57,950 >> E se você já programou em Java ou C ++ ou outras linguagens, 659 00:29:57,950 --> 00:29:59,130 você pode ter visto isso. 660 00:29:59,130 --> 00:30:01,840 Mas a curto do que, se desconhecido, esta linha 661 00:30:01,840 --> 00:30:05,410 coloca em correio cifrão uma estrutura especial chamada 662 00:30:05,410 --> 00:30:08,731 um objeto que foi construído com funcionalidade de e-mail. 663 00:30:08,731 --> 00:30:10,355 E, de fato, perceber e sintaxe similar. 664 00:30:10,355 --> 00:30:11,900 >> Este não é um ponteiro, per se. 665 00:30:11,900 --> 00:30:13,990 PHP apenas usa a mesma sintaxe. 666 00:30:13,990 --> 00:30:17,660 Esta linha está dizendo utilização SMTP-- Simple Mail Transfer 667 00:30:17,660 --> 00:30:20,900 Protocolo, que é apenas o protocolo usado para enviar e-mails. 668 00:30:20,900 --> 00:30:24,240 Este é que especifica a utilização Servidor SMTP de Harvard, que 669 00:30:24,240 --> 00:30:25,830 está em algum lugar aqui no campus. 670 00:30:25,830 --> 00:30:28,480 >> Isto está dizendo que o TCP número da porta para conversar, 671 00:30:28,480 --> 00:30:31,650 e eu só percebi isso por pesquisando ou perguntando ao help desk. 672 00:30:31,650 --> 00:30:34,640 E depois porque Harvard usa algum segurança do sistema na server-- correio 673 00:30:34,640 --> 00:30:37,060 pelo menos para criptografar tráfego entre você e ele, 674 00:30:37,060 --> 00:30:41,380 mesmo que qualquer pessoa pode enviar para ele-- Vou ligar o protocolo TLS 675 00:30:41,380 --> 00:30:42,710 para manter esta seguro. 676 00:30:42,710 --> 00:30:44,730 >> Mas é aí que as coisas ficar um pouco assustador. 677 00:30:44,730 --> 00:30:47,970 Eu posso apenas arbitrariamente dizer que estou jharvard, 678 00:30:47,970 --> 00:30:51,930 e eu posso apenas arbitrariamente enviar e-mail me aqui. 679 00:30:51,930 --> 00:30:55,650 E então eu posso especificar um assunto com essa linha aqui. 680 00:30:55,650 --> 00:30:58,460 >> E isso só parece feia, mas é apenas um monte de concatenação. 681 00:30:58,460 --> 00:31:04,480 Acontece que o PHP tem um símbolo super útil, como algumas línguas, o operador ponto, 682 00:31:04,480 --> 00:31:07,340 que apenas literalmente concatena cadeia após cadeia depois de cadeia, 683 00:31:07,340 --> 00:31:09,810 e você não tem que malloc ou figura o comprimento total da cadeia. 684 00:31:09,810 --> 00:31:10,820 Você só faz isso. 685 00:31:10,820 --> 00:31:15,220 E, de fato, porque eu estou concatenando em todas essas coisas com esses pontos, 686 00:31:15,220 --> 00:31:18,330 é por isso que o e-mail que eu enviado olhou como fez. 687 00:31:18,330 --> 00:31:20,610 >> E então, finalmente aqui, estou enviando mail. 688 00:31:20,610 --> 00:31:22,580 Então, se isso é falso, Eu só vou morrer, 689 00:31:22,580 --> 00:31:25,680 que é uma função que apenas impressões para a tela alguns mensagem de erro. 690 00:31:25,680 --> 00:31:29,170 Mas é, de facto, chamando a função de envio. 691 00:31:29,170 --> 00:31:31,780 Caso contrário, se tudo isso falhar, ele me redireciona para cá. 692 00:31:31,780 --> 00:31:34,050 >> E por que eu vejo que Estou registado realmente? 693 00:31:34,050 --> 00:31:36,110 Bem, isso aconteceu aqui. 694 00:31:36,110 --> 00:31:38,170 Então eu trago isso para um par de razões. 695 00:31:38,170 --> 00:31:41,542 >> Um deles, é exatamente assim que se você construir algum site para um projeto final 696 00:31:41,542 --> 00:31:44,000 ou para o mundo real, este é como você enviar lembretes de e-mail 697 00:31:44,000 --> 00:31:45,924 para seus clientes ou seus assinantes. 698 00:31:45,924 --> 00:31:47,590 Isto é como você enviar lembretes de senhas. 699 00:31:47,590 --> 00:31:50,760 Isto é como você enviar mensagens de pessoas que eles têm um novo Facebook 700 00:31:50,760 --> 00:31:52,990 mensagem pendente ou algo parecido. 701 00:31:52,990 --> 00:31:55,010 >> Mas também fala o facto de que esta podia 702 00:31:55,010 --> 00:31:58,160 têm sido muito bem desde Davin ou qualquer outra pessoa. 703 00:31:58,160 --> 00:32:00,567 E eu digo que esse tipo de com um sorriso, porque eu sou 704 00:32:00,567 --> 00:32:03,400 muita certeza do que está passando por várias de suas mentes neste momento. 705 00:32:03,400 --> 00:32:11,910 Mas este é um daqueles faça como eu digo, não como eu faço tipo de coisas, 706 00:32:11,910 --> 00:32:14,480 porque é trivial forjar e-mails como este. 707 00:32:14,480 --> 00:32:16,480 Mas, como você pode ter visto ou ler no Crimson, 708 00:32:16,480 --> 00:32:18,271 de tarde também é muito trivial para pessoas 709 00:32:18,271 --> 00:32:20,050 rastreá-las para alguma origem. 710 00:32:20,050 --> 00:32:23,790 E perguntar-me algum tempo, talvez em CS50 almoço, como eu primeiro 711 00:32:23,790 --> 00:32:27,080 conheceram muito de perto quase às tabuleiro ed muitos anos 712 00:32:27,080 --> 00:32:30,890 atrás, quando eu descobri como a internet funcionou. 713 00:32:30,890 --> 00:32:36,940 Assim, em qualquer case-- ligeiramente depois que o conselho fez ed. 714 00:32:36,940 --> 00:32:42,300 >> Assim, em qualquer caso, existe uma todo grupo de super-globals, 715 00:32:42,300 --> 00:32:45,960 como são chamados aqui, um dos quais nós saw-- pós dólar sinal de sublinhado. 716 00:32:45,960 --> 00:32:49,530 Há uma contrapartida chamado get, que é onde o material a partir de uma URL 717 00:32:49,530 --> 00:32:50,690 acaba indo. 718 00:32:50,690 --> 00:32:54,051 E há um monte de outros, sessão demasiado-- e servidor e cookie. 719 00:32:54,051 --> 00:32:55,800 Vamos voltar a biscoito algum outro momento, 720 00:32:55,800 --> 00:33:01,340 mas sessão é legal porque neste agora- até agora- 721 00:33:01,340 --> 00:33:06,350 tudo o que fizemos com um navegador web é uma espécie de apátrida, por assim dizer. 722 00:33:06,350 --> 00:33:10,060 Posso clicar em volta, o acesso arquivos no servidor, algo 723 00:33:10,060 --> 00:33:13,500 acontece na tela, mas em seguida, a conexão é fechada. 724 00:33:13,500 --> 00:33:17,450 O Internet Explorer ou o Ícone do Firefox pára de girar 725 00:33:17,450 --> 00:33:20,340 e você só ver o que essa página web contém. 726 00:33:20,340 --> 00:33:23,530 >> Então HTTP é apátrida em que uma vez que ele faz uma conexão, 727 00:33:23,530 --> 00:33:25,050 recebe alguns dados, é isso. 728 00:33:25,050 --> 00:33:29,940 Não há mais respeito, ao contrário do Skype, ao contrário Facetime, GChat ao contrário, o que 729 00:33:29,940 --> 00:33:32,180 mantém uma constante ligação ao servidor. 730 00:33:32,180 --> 00:33:34,650 A web é fundamentalmente desconectado, mas vamos 731 00:33:34,650 --> 00:33:36,630 ver em pouco tempo como podemos simular coisas 732 00:33:36,630 --> 00:33:39,300 como o Facebook chat e GChat, aquelas que mantêm a illusion-- 733 00:33:39,300 --> 00:33:41,680 ou realmente fazer manter um conexão constante com 734 00:33:41,680 --> 00:33:43,270 tecnologia mais moderna. 735 00:33:43,270 --> 00:33:49,000 >> Mas se eu for para, digamos, counter.php, este é mais um exemplo simples, 736 00:33:49,000 --> 00:33:52,700 como veremos, que pensa atualmente Eu visitei o site tempo zero. 737 00:33:52,700 --> 00:33:56,790 Mas se eu simplesmente recarregar a página, que de alguma forma sabe que eu estava aqui antes. 738 00:33:56,790 --> 00:33:58,840 Se eu recarregar novamente, sabe que eu estava aqui antes. 739 00:33:58,840 --> 00:34:01,100 E de novo e de novo e de novo e de novo. 740 00:34:01,100 --> 00:34:03,610 >> Então, há alguma mais-plussing acontecendo, mas aviso 741 00:34:03,610 --> 00:34:07,090 a pequena coisa gira sempre tão brevemente em cima e depois desconecta, 742 00:34:07,090 --> 00:34:11,179 então não é como se eu tivesse uma constante conexão com o meu aparelho. 743 00:34:11,179 --> 00:34:16,929 Bem, se eu entrar em counter.php, perceber como é simples. 744 00:34:16,929 --> 00:34:19,080 A primeira vez que chamar isso de especial função que veremos em breve 745 00:34:19,080 --> 00:34:21,513 começar a tomar para concedido chamado de início de sessão. 746 00:34:21,513 --> 00:34:22,179 Iniciar uma sessão. 747 00:34:22,179 --> 00:34:25,095 >> E uma sessão a partir de agora é apenas vai ser um balde, como um shopping 748 00:34:25,095 --> 00:34:28,120 carrinho em que você pode colocar valores e tipo de confiança como um programador 749 00:34:28,120 --> 00:34:31,590 que eles vão estar aqui quando que o usuário vem traseira-- uma segunda 750 00:34:31,590 --> 00:34:35,670 depois, uma hora mais tarde, mesmo um ano depois, contanto que ele ou ela não desaparecer 751 00:34:35,670 --> 00:34:37,602 seus cookies, como vamos finalmente ver. 752 00:34:37,602 --> 00:34:39,310 E agora eu só tenho uma condição se aqui. 753 00:34:39,310 --> 00:34:44,679 Então, se a seguinte chave, chamado de contador, é definido dentro 754 00:34:44,679 --> 00:34:49,210 dessa super global-- esse hash mesa, se você will-- chamado sessão, 755 00:34:49,210 --> 00:34:53,350 então vá em frente e pegue o valor do think session-- 756 00:34:53,350 --> 00:34:55,250 deste como um shopping cart-- e armazená-lo 757 00:34:55,250 --> 00:34:57,680 em uma variável temporária chamado contador. 758 00:34:57,680 --> 00:35:02,240 >> Caso contrário, se o valor do contador foi não definido no chamado carrinho de compras, 759 00:35:02,240 --> 00:35:04,430 apenas inicializar a 0. 760 00:35:04,430 --> 00:35:09,830 Por último, aqui em baixo, vá e coloque de volta para os carrinhos de compras ou a sessão 761 00:35:09,830 --> 00:35:13,000 o valor do contador de um. 762 00:35:13,000 --> 00:35:16,730 Assim, verifica-se que este aqui-- especial recipiente 763 00:35:16,730 --> 00:35:20,355 que, de novo, é um destes associado matrizes, uma matriz que você pode indexar 764 00:35:20,355 --> 00:35:25,010 em palavras, em vez de Números de persiste mesmo depois que o usuário vai embora. 765 00:35:25,010 --> 00:35:26,510 Mais uma vez, eu vou voltar para a página agora. 766 00:35:26,510 --> 00:35:28,400 Tem sido um minuto ou assim. 767 00:35:28,400 --> 00:35:31,300 Mas lembra que eu tenho estive aqui 19 vezes antes. 768 00:35:31,300 --> 00:35:32,740 Este é o meu 20º visita. 769 00:35:32,740 --> 00:35:36,560 >> E assim é que isto vai ser a chave para implementação de qualquer site que se lembra 770 00:35:36,560 --> 00:35:40,640 que você está conectado, que você colocou algo literal em seu carrinho de compras 771 00:35:40,640 --> 00:35:43,902 para comprar ou que você tem algum número de mensagens pendentes. 772 00:35:43,902 --> 00:35:45,610 Sempre que você quiser lembrar de informações, 773 00:35:45,610 --> 00:35:48,130 vamos ver que o PHP, como diversas outras linguagens, 774 00:35:48,130 --> 00:35:53,640 fornece-nos com essa ilusão de estado embora, como você verá em PSET 6, 775 00:35:53,640 --> 00:35:57,642 como você está fazendo solicitações HTTP do cliente para o servidor, é isso. 776 00:35:57,642 --> 00:35:59,850 Uma vez que você receber de volta esse resposta, não há nada mais 777 00:35:59,850 --> 00:36:01,790 voltando do servidor por padrão. 778 00:36:01,790 --> 00:36:03,820 Mas vamos ver como resolver isso. 779 00:36:03,820 --> 00:36:07,430 >> Bem, agora, vamos tentar limpar isso um pouco. 780 00:36:07,430 --> 00:36:09,470 Nós vimos alguns diferentes exemplos lá. 781 00:36:09,470 --> 00:36:12,250 Ah, e como um aparte, para os familiares ou não, 782 00:36:12,250 --> 00:36:14,230 a razão pela qual o Exemplo Frosh IMs foi 783 00:36:14,230 --> 00:36:18,060 de olhar realmente feio para slightly-- bem, 784 00:36:18,060 --> 00:36:23,160 ainda ugly-- a ligeiramente menos feio embora ainda feio 785 00:36:23,160 --> 00:36:25,230 é porque se olharmos o código fonte aqui, 786 00:36:25,230 --> 00:36:28,240 verifica-se que eu tenho essa no topo do arquivo. 787 00:36:28,240 --> 00:36:32,570 >> Acontece que de bootstrap é um dos muitos bibliotecas livremente disponíveis lá fora 788 00:36:32,570 --> 00:36:37,140 que não existe para linguagens de programação sempre, mas para CSS ou JavaScript para 789 00:36:37,140 --> 00:36:39,190 ou HTML ou qualquer número de idiomas. 790 00:36:39,190 --> 00:36:42,160 >> E essas pessoas aqui-- originalmente saiu 791 00:36:42,160 --> 00:36:44,730 de Twitter-- só tem um monte de estilos. 792 00:36:44,730 --> 00:36:47,360 É um arquivo enorme aqui que alguém escreveu, 793 00:36:47,360 --> 00:36:51,020 ou alguém da escreveu, ao longo do tempo que especifica as cores e formatação 794 00:36:51,020 --> 00:36:53,740 e outros enfeites para que eu possa tipo de emprestar sua sintaxe 795 00:36:53,740 --> 00:36:56,157 e não tem que descobrir como colocar meu formulário. 796 00:36:56,157 --> 00:36:57,990 Isto também é minified de modo que um computador pode 797 00:36:57,990 --> 00:37:00,560 compreendê-lo, mas não necessariamente um ser humano. 798 00:37:00,560 --> 00:37:03,050 Então, isso é só por isso que o estilização não mudou. 799 00:37:03,050 --> 00:37:05,450 >> Mas vamos agora fazer melhor em termos de design, 800 00:37:05,450 --> 00:37:07,490 porque se ficarmos para baixo esta estrada por muito tempo, 801 00:37:07,490 --> 00:37:11,290 nosso código vai ficar confuso e bagunçado. 802 00:37:11,290 --> 00:37:13,040 Então, vamos concentrar-se nesses exemplos aqui. 803 00:37:13,040 --> 00:37:15,090 A última de hoje. 804 00:37:15,090 --> 00:37:18,720 >> Então aqui vai uma super simples versão 1.0 do site da CS50. 805 00:37:18,720 --> 00:37:21,250 Ele só tem links para palestras e conteúdos programáticos, 806 00:37:21,250 --> 00:37:25,490 e ele está usando essa lista não ordenada tag-- a marca UL que usamos última vez. 807 00:37:25,490 --> 00:37:28,800 E se, na verdade, se eu abrir View Page Source, 808 00:37:28,800 --> 00:37:31,710 você vai ver que isso é realmente, HTML muito simples. 809 00:37:31,710 --> 00:37:35,460 E, de fato, mesmo que esta seja um arquivo PHP debaixo do capô, 810 00:37:35,460 --> 00:37:38,620 ele é ainda apenas cuspindo fora apenas HTML para agora. 811 00:37:38,620 --> 00:37:41,312 >> Então, se eu clicar em palestras, vemos isso acontecer. 812 00:37:41,312 --> 00:37:43,020 E se eu clicar em semana zero, vemos isso. 813 00:37:43,020 --> 00:37:44,920 E se eu clicar em Quarta-feira, nós vemos isso. 814 00:37:44,920 --> 00:37:47,900 E isso, aparentemente, foi o PDF dos slides a partir daquele dia. 815 00:37:47,900 --> 00:37:52,020 Tudo o que eu tenho feito é ligação com um âncora tag para este URL aqui. 816 00:37:52,020 --> 00:37:55,400 >> Então, isso é só para dizer que este é um bonito versão simples do site do CS50. 817 00:37:55,400 --> 00:37:56,790 Vamos ver como ele é implementado. 818 00:37:56,790 --> 00:38:01,240 Se eu ir para o diretório mvc0, vamos ver alguns arquivos. 819 00:38:01,240 --> 00:38:03,250 Um deles é um README, então se alguns isso é muito rápido, 820 00:38:03,250 --> 00:38:05,166 você pode apenas bisbilhotar mais vagaroso mais tarde. 821 00:38:05,166 --> 00:38:07,930 E aviso aqui é um arquivo index.php. 822 00:38:07,930 --> 00:38:09,960 Acontece que, se você mesmo, o ser humano, 823 00:38:09,960 --> 00:38:14,460 não especificar um nome definitivo em uma URL, o servidor web normalmente 824 00:38:14,460 --> 00:38:17,010 infere algum nome padrão para você. 825 00:38:17,010 --> 00:38:20,060 Um índice dot algo é geralmente o padrão. 826 00:38:20,060 --> 00:38:23,010 >> Então é por isso um momento atrás quando visitei este URL aqui, 827 00:38:23,010 --> 00:38:26,750 nenhum nome de arquivo, nenhum arquivo extensão, nenhum período na URL. 828 00:38:26,750 --> 00:38:29,710 Ele só sabia que de alguma forma magicamente a olhar para index.php. 829 00:38:29,710 --> 00:38:30,870 É apenas uma convenção. 830 00:38:30,870 --> 00:38:32,360 Poderia ser chamado de qualquer coisa. 831 00:38:32,360 --> 00:38:35,110 >> Então, se eu agora vá em index.php, você verá 832 00:38:35,110 --> 00:38:37,100 que, indeed-- vamos se livrar dos comentários 833 00:38:37,100 --> 00:38:39,500 aqui porque não há realmente nada de interessante para ele-- 834 00:38:39,500 --> 00:38:41,579 este é apenas codificado HTML. 835 00:38:41,579 --> 00:38:43,370 Então, isso é consistente, porém, com o meu pedido 836 00:38:43,370 --> 00:38:45,230 que você pode misturar HTML e PHP. 837 00:38:45,230 --> 00:38:48,060 Não há real lógica de programação aqui. 838 00:38:48,060 --> 00:38:51,030 >> E os outros arquivos são bastante muito tão desinteressante. 839 00:38:51,030 --> 00:38:56,240 É só uma semana hard-coded aqui para uma semana m e uma semana w, 840 00:38:56,240 --> 00:38:57,510 para segunda-feira e quarta-feira. 841 00:38:57,510 --> 00:39:01,890 E então se eu abrir semana zero, notar que é quase idêntico. 842 00:39:01,890 --> 00:39:03,320 >> E isso é uma espécie de takeaway chave. 843 00:39:03,320 --> 00:39:06,180 Observe o quão redundante que é isso. 844 00:39:06,180 --> 00:39:10,710 Esses arquivos mal mudar, e ainda assim eu puxou um desses postos de trabalho de copiar / colar 845 00:39:10,710 --> 00:39:13,420 onde tomei um file-- presumivelmente na semana zero-- copiados por 846 00:39:13,420 --> 00:39:16,320 quando uma semana chegou, e ajustados alguns valores. 847 00:39:16,320 --> 00:39:18,590 Nós provavelmente deve ser capaz de fazer melhor do que isso. 848 00:39:18,590 --> 00:39:21,800 >> Então, vamos voltar até mvc e vai para a versão um. 849 00:39:21,800 --> 00:39:24,810 E note que eu tenho um alguns arquivos, porque o que 850 00:39:24,810 --> 00:39:29,870 era comum a todos esses arquivos apenas uma momento ago-- se eu voltar para a versão 0, 851 00:39:29,870 --> 00:39:32,600 vamos voltar para o índice, e apenas postulate-- 852 00:39:32,600 --> 00:39:36,090 uma vez para me livrar do comments-- que parte desta página 853 00:39:36,090 --> 00:39:40,072 é, presumivelmente, em cada um dos meus arquivos? 854 00:39:40,072 --> 00:39:40,780 Basta chamá-lo para fora. 855 00:39:40,780 --> 00:39:44,620 Que linhas são duplicados provavelmente através de todas estas páginas? 856 00:39:44,620 --> 00:39:45,120 Sim? 857 00:39:45,120 --> 00:39:46,110 >> Estudante: [inaudível]. 858 00:39:46,110 --> 00:39:47,660 >> DAVID J. MALAN: 1 a 9. 859 00:39:47,660 --> 00:39:48,720 Sim, com certeza. 860 00:39:48,720 --> 00:39:52,080 De 1 a 9, exceto talvez 8 muda um pouco, porque CS50 861 00:39:52,080 --> 00:39:54,650 torna-se palestras ou semana zero ou algo assim. 862 00:39:54,650 --> 00:39:55,970 Mas quase idêntica. 863 00:39:55,970 --> 00:39:58,657 Então, tudo isso é apenas tipo de copiado e colado. 864 00:39:58,657 --> 00:40:00,490 E há um casal outras linhas que posso pensar 865 00:40:00,490 --> 00:40:05,000 de que são provavelmente idênticos em todos os arquivos. 866 00:40:05,000 --> 00:40:06,315 >> Estudante: 12 e 13. 867 00:40:06,315 --> 00:40:07,190 DAVID J. MALAN: Yeah. 868 00:40:07,190 --> 00:40:11,220 Claro, 12, 13 e 14, provavelmente, só porque as coisas interessantes 869 00:40:11,220 --> 00:40:15,460 está acontecendo em linhas de 11 e 10, pelo menos assim parece. 870 00:40:15,460 --> 00:40:18,350 Então, vamos olhar para a versão 1, que tenta melhorar isso. 871 00:40:18,350 --> 00:40:24,020 Na versão 1 do presente example-- mvc nós vamos explicar o que mvc meio de uma moment-- 872 00:40:24,020 --> 00:40:27,420 se eu entrar em índice, tipo de parece um pouco confuso agora. 873 00:40:27,420 --> 00:40:28,880 Não é tão simples como antes. 874 00:40:28,880 --> 00:40:30,906 >> Mas uma vez que você começa a lê-lo com cuidado, é 875 00:40:30,906 --> 00:40:32,530 bastante simples o que está fazendo. 876 00:40:32,530 --> 00:40:34,397 Aparentemente, a linha 1 e linha 8 substituíram 877 00:40:34,397 --> 00:40:37,230 todas as coisas que você acabou de identified-- embora apenas para uma boa medida, 878 00:40:37,230 --> 00:40:41,900 Deixei os MMSS não apenas no caso de alguns dias, não tenho uma lista de coisas. 879 00:40:41,900 --> 00:40:47,860 E assim o exigem é como libra incluir em C. Ele copia e cola 880 00:40:47,860 --> 00:40:50,470 os conteúdos de forma eficaz aqui neste arquivo. 881 00:40:50,470 --> 00:40:53,650 >> Assim, em header.php, como você pode inferir a partir do seu nome, 882 00:40:53,650 --> 00:40:55,330 vai ser o cabeçalho da página. 883 00:40:55,330 --> 00:40:57,110 É uma espécie de orfandade aqui. 884 00:40:57,110 --> 00:41:01,820 Ele só tem a parte superior a ele, mas Não há mais conteúdo abaixo. 885 00:41:01,820 --> 00:41:05,070 >> E se eu olhar para rodapé, entretanto, que foi o outro arquivo mentioned-- 886 00:41:05,070 --> 00:41:08,830 este é ainda menos interessante, mas, novamente, é comum a tudo. 887 00:41:08,830 --> 00:41:10,250 Então este é o rodapé. 888 00:41:10,250 --> 00:41:11,300 Este é o cabeçalho. 889 00:41:11,300 --> 00:41:13,950 Este é o arquivo que é mudando, então por que não 890 00:41:13,950 --> 00:41:18,140 tentar fatorar o comunalidade com estas duas linhas aqui? 891 00:41:18,140 --> 00:41:20,090 >> Mas podemos limpar isso até um pouco mais. 892 00:41:20,090 --> 00:41:23,260 Eu estou indo para ir em frente e abrir versão dois, onde 893 00:41:23,260 --> 00:41:27,106 veremos que há um novo arquivo, helpers.php. 894 00:41:27,106 --> 00:41:28,610 Vamos ver o que que está em um momento. 895 00:41:28,610 --> 00:41:30,930 Vamos para o índice, como o ponto de entrada como antes. 896 00:41:30,930 --> 00:41:35,230 >> E agora percebe que eu estou requerendo helpers.php, não cabeçalho ou rodapé. 897 00:41:35,230 --> 00:41:41,720 Mas ajudantes é tipo de gosto helpers.c e helpers.h de PSET 2 898 00:41:41,720 --> 00:41:46,150 ou PSET 3 há muito tempo quando você realmente se procurar e encontrar para que PSET, 899 00:41:46,150 --> 00:41:50,950 e você teve todo o seu código para classificar e busca em um arquivo separado. 900 00:41:50,950 --> 00:41:52,510 Isso é o que está acontecendo aqui. 901 00:41:52,510 --> 00:41:54,390 >> E agora a linha 3 parece um pouco diferente. 902 00:41:54,390 --> 00:41:55,920 E isso é apenas uma linha. 903 00:41:55,920 --> 00:41:57,950 Para tornar isso ainda mais claro, eu poderia apenas 904 00:41:57,950 --> 00:42:01,820 Não que isso seja estilisticamente consistente com tudo o que fizemos. 905 00:42:01,820 --> 00:42:04,130 Mas isso não é realmente alterar a funcionalidade. 906 00:42:04,130 --> 00:42:05,880 É apenas uma linha de código real. 907 00:42:05,880 --> 00:42:09,010 >> Aparentemente, há uma função em algum lugar chamado tornar cabeçalho, 908 00:42:09,010 --> 00:42:11,420 E é aí que as coisas ficar muito poderoso. 909 00:42:11,420 --> 00:42:17,040 Note-se que no interior das suas parênteses é o que outra peça de sintaxe? 910 00:42:17,040 --> 00:42:19,780 911 00:42:19,780 --> 00:42:23,350 É provavelmente um pouco difícil de dizer, mas notar there's-- eu vou colocar algum branco 912 00:42:23,350 --> 00:42:24,300 espaço. 913 00:42:24,300 --> 00:42:25,530 Há colchetes. 914 00:42:25,530 --> 00:42:29,700 >> E colchetes vimos um pouco atrás no contexto de matrizes de associação, 915 00:42:29,700 --> 00:42:31,580 que são, de novo, como tabelas de hash. 916 00:42:31,580 --> 00:42:36,230 E se você acha que agora a C, o ordem dos argumentos em uma função 917 00:42:36,230 --> 00:42:37,570 tem de ser sempre a mesma. 918 00:42:37,570 --> 00:42:41,146 Você tem que lembrar que o encomendar x é--, y, z ou z, y, x-- 919 00:42:41,146 --> 00:42:44,020 e você tem que fornecer-lhes sempre na mesma ordem ou procurá-los 920 00:42:44,020 --> 00:42:45,100 se você esqueceu. 921 00:42:45,100 --> 00:42:51,140 >> Mas esta parece ser uma maneira inteligente de passar um valor de chave arbitrária 922 00:42:51,140 --> 00:42:55,840 pares pelo qual título é o nome de um argumento, neste caso, 923 00:42:55,840 --> 00:42:58,334 e CS50 é o seu valor. 924 00:42:58,334 --> 00:43:00,250 E o fato de eu ter esses colchetes 925 00:43:00,250 --> 00:43:02,560 aqui significa que eu pudesse também passar em algo 926 00:43:02,560 --> 00:43:07,550 como uma semana ou 1 é 0 ou 2 ou 3. 927 00:43:07,550 --> 00:43:10,550 Então, nós parametrizado esta função, de tal forma 928 00:43:10,550 --> 00:43:15,180 que pode levar várias entradas, mas por enquanto é apenas uma. 929 00:43:15,180 --> 00:43:20,060 >> Se eu agora vá em helpers.php, perceber o que está fazendo. 930 00:43:20,060 --> 00:43:22,030 Este é um pouco de novas funcionalidades, 931 00:43:22,030 --> 00:43:24,190 mas por agora apenas tomar na fé de que este é 932 00:43:24,190 --> 00:43:26,570 a sintaxe com a qual você definir uma função em PHP. 933 00:43:26,570 --> 00:43:27,840 Você literalmente dizer função. 934 00:43:27,840 --> 00:43:30,090 Você não especificar um retorno tipo, e isso é consistente 935 00:43:30,090 --> 00:43:33,880 com o pormenor da variável anteriormente onde você realmente não fortemente digitar. 936 00:43:33,880 --> 00:43:35,650 >> Isso só especifica que, por padrão, este 937 00:43:35,650 --> 00:43:37,460 leva uma associativo matriz como um argumento. 938 00:43:37,460 --> 00:43:38,210 E você sabe o quê? 939 00:43:38,210 --> 00:43:41,450 Se o usuário não passar uma em, assumir um valor padrão. 940 00:43:41,450 --> 00:43:44,680 >> Este é um recurso que C não tem para nós, o que é bom, porque agora 941 00:43:44,680 --> 00:43:46,430 dados, mesmo se você não dar-lhe qualquer coisa, 942 00:43:46,430 --> 00:43:49,300 vai ser um matriz, mas um vazio. 943 00:43:49,300 --> 00:43:51,860 E como um aparte, extrato só faz algo funky 944 00:43:51,860 --> 00:43:56,380 onde leva todas as chaves a partir deste matriz associativa, todas as coisas 945 00:43:56,380 --> 00:43:59,950 você poderia colocar entre colchetes, e cria variáveis ​​fora delas 946 00:43:59,950 --> 00:44:06,270 para que possamos, finalmente, ter acesso a eles em footet.php e header.php. 947 00:44:06,270 --> 00:44:08,950 Isso é um pouco abstrato, então deixe-me apontar isso. 948 00:44:08,950 --> 00:44:12,990 >> Em index.php, perceber que eu sou passando um par de valores-chave do título 949 00:44:12,990 --> 00:44:14,850 com um valor de CS50. 950 00:44:14,850 --> 00:44:18,660 Se eu agora olhar para helpers.php, notar que RenderHeader 951 00:44:18,660 --> 00:44:23,870 é extrair os dados que eu estou passando em, em seguida, exigindo header.php. 952 00:44:23,870 --> 00:44:27,970 O que eu fiz é uma espécie de um pobre homem de implementação de agora o seguinte. 953 00:44:27,970 --> 00:44:31,720 >> Se eu abrir header.php, Repare que eu não tenho mais difícil 954 00:44:31,720 --> 00:44:34,890 codificado a palavra CS50 neste arquivo de cabeçalho. 955 00:44:34,890 --> 00:44:39,310 Eu coloquei este reconhecidamente atrozmente função chamada, HTML caracteres especiais, 956 00:44:39,310 --> 00:44:40,170 lá dentro. 957 00:44:40,170 --> 00:44:41,640 Mas observe o que eu fiz. 958 00:44:41,640 --> 00:44:44,240 Eu tenho HTML aberta. 959 00:44:44,240 --> 00:44:47,420 Eu, então, ter a cabeça aberta e título em aberto. 960 00:44:47,420 --> 00:44:52,380 >> E, em seguida, dentro do título do aberto e tags de perto, eu tenho um pouco de código PHP. 961 00:44:52,380 --> 00:44:56,670 E este é um bom, mas de sintaxe, o que significa apenas eco fora. 962 00:44:56,670 --> 00:44:59,840 Isso significa, literalmente, isto-- ecoar o following-- 963 00:44:59,840 --> 00:45:01,910 mas esta é a mais sexy de escrever. 964 00:45:01,910 --> 00:45:05,000 Ecoam o título que foi passado. 965 00:45:05,000 --> 00:45:07,560 >> Mas o que você acha HTML caractere especial é sobre todos, 966 00:45:07,560 --> 00:45:10,590 especialmente se você tiver alguma experiência anterior em HTML? 967 00:45:10,590 --> 00:45:14,050 Que personagens pode ser perigoso para passar para uma página 968 00:45:14,050 --> 00:45:17,980 onde você está gerando dinamicamente a página da web com um código como este? 969 00:45:17,980 --> 00:45:21,370 970 00:45:21,370 --> 00:45:24,650 Deixe-me ir para esse arquivo, versão dois, e ver se eu não posso induzir isso. 971 00:45:24,650 --> 00:45:26,210 >> Versão dois é esta. 972 00:45:26,210 --> 00:45:28,510 E observe tudo está bem, trabalhando bem. 973 00:45:28,510 --> 00:45:35,280 Mas suponha que eu entro em index.php e I especificado que o título da minha página 974 00:45:35,280 --> 00:45:36,630 Não é CS50. 975 00:45:36,630 --> 00:45:44,930 É alerta roteiro suporte aberto Olá mundo, citações próximo single, 976 00:45:44,930 --> 00:45:49,740 próximo parêntese, ponto e vírgula, suporte aberto, roteiro barra. 977 00:45:49,740 --> 00:45:51,897 >> Script, como veremos eventualmente ver, é uma tag 978 00:45:51,897 --> 00:45:54,480 que você pode usar para usar de outro linguagem de programação chamada 979 00:45:54,480 --> 00:45:56,330 JavaScript dentro de uma página web. 980 00:45:56,330 --> 00:45:57,960 E agora perceber a lógica aqui. 981 00:45:57,960 --> 00:45:59,840 Aqui está uma chave chamada título. 982 00:45:59,840 --> 00:46:02,690 Aqui é que é de valor a longo louco agora. 983 00:46:02,690 --> 00:46:07,840 >> Mas se eu for para os ajudantes page- ou melhor, a página de cabeçalho, 984 00:46:07,840 --> 00:46:11,310 Eu estou chamando esta função em que o título pela primeira vez. 985 00:46:11,310 --> 00:46:15,250 Então, se eu agora recarregue esta página, eu ver isso, que parece ridículo, 986 00:46:15,250 --> 00:46:16,110 mas é seguro. 987 00:46:16,110 --> 00:46:17,310 Ele apenas parece estúpido. 988 00:46:17,310 --> 00:46:20,320 >> Mas suponha que em vez Eu tinha esquecido isso. 989 00:46:20,320 --> 00:46:24,660 E marque minhas palavras, um número diferente de zero de você esquecer de fazer isso 990 00:46:24,660 --> 00:46:27,790 e você vai ter algum trabalhador estudante ou amigo chegando 991 00:46:27,790 --> 00:46:31,540 para você na feira CS50 ou anonimamente à noite bisbilhotando em seu site 992 00:46:31,540 --> 00:46:35,300 e, essencialmente, injectando código sem o seu conhecimento em seu site 993 00:46:35,300 --> 00:46:35,800 de alguma forma. 994 00:46:35,800 --> 00:46:39,000 >> Porque se eu simplesmente cuspir a título aqui e título 995 00:46:39,000 --> 00:46:44,330 há-- bem, se o título literalmente se parece com isso e PHP 996 00:46:44,330 --> 00:46:47,660 como uma linguagem que pode cuspir fora outros idiomas texto, 997 00:46:47,660 --> 00:46:50,650 esta é, literalmente, indo para substituir essa tag com, 998 00:46:50,650 --> 00:46:53,010 é claro, o que eu coloquei em outros lugares. 999 00:46:53,010 --> 00:46:57,640 >> Então, se eu agora vá aqui e recarregar após desfazer esses mecanismos de segurança, 1000 00:46:57,640 --> 00:46:59,982 agora eu tenho Olá mundo aqui. 1001 00:46:59,982 --> 00:47:02,690 Agora isso não é tudo que de um grande lidar, mas você poderia fazer algo 1002 00:47:02,690 --> 00:47:05,119 um pouco mais malicioso aqui, como há 1003 00:47:05,119 --> 00:47:08,410 outro tags-- como veremos, uma vez que gastamos mais tempo em JavaScript-- como localização 1004 00:47:08,410 --> 00:47:14,910 dot href recebe, citações, fecha aspas, HTTP business.com, mas o oposto do que 1005 00:47:14,910 --> 00:47:15,950 a partir do outro dia. 1006 00:47:15,950 --> 00:47:20,120 E agora você pode induzir um web página para realmente ir imediatamente 1007 00:47:20,120 --> 00:47:21,190 a esta página web aqui. 1008 00:47:21,190 --> 00:47:23,000 >> E na verdade, eu não quero até mesmo para ir para business.com 1009 00:47:23,000 --> 00:47:24,749 porque eu não quero para saber o que é. 1010 00:47:24,749 --> 00:47:28,710 Mas isso, também, irá desencadear código para ser injectado desta página. 1011 00:47:28,710 --> 00:47:32,680 Então, isso é só para dizer que, apesar de estamos introduzindo super cedo em alguns 1012 00:47:32,680 --> 00:47:36,800 destas estruturas mais complexas, é tudo para um fim de certificar-se 1013 00:47:36,800 --> 00:47:39,320 que o código não é explorável. 1014 00:47:39,320 --> 00:47:40,960 >> Então, agora uma terceira versão aqui. 1015 00:47:40,960 --> 00:47:42,470 Está ficando um pouco mais extravagante. 1016 00:47:42,470 --> 00:47:44,875 Eu realmente não como-- o lado anal de mim 1017 00:47:44,875 --> 00:47:47,750 estava ficando um pouco irritado com a fato de que eu tinha uma função chamada 1018 00:47:47,750 --> 00:47:51,940 RenderHeader e RenderFooter que eram quase idênticos. 1019 00:47:51,940 --> 00:47:55,400 Então, ocorreu-me, por que não fazer Eu parametrizar estas funções 1020 00:47:55,400 --> 00:47:59,180 em apenas um chamado render, têm que ter um segundo argumento 1021 00:47:59,180 --> 00:48:04,420 como o nome do modelo, a final para render-- qualquer cabeçalho ou rodapé? 1022 00:48:04,420 --> 00:48:07,160 E, em seguida, opcionalmente, se eu quiser para passar em alguns pares de valores-chave 1023 00:48:07,160 --> 00:48:10,580 como eu faço para o título para o cabeçalho, mas não para o rodapé, 1024 00:48:10,580 --> 00:48:11,800 Eu poderia fazer isso. 1025 00:48:11,800 --> 00:48:16,510 >> E agora, se eu entrar em helpers.php, é um pouco mais complexa. 1026 00:48:16,510 --> 00:48:19,670 E eu vou acenar as mãos no detalhes, mas é apenas uma função. 1027 00:48:19,670 --> 00:48:21,890 Então isso é um passo em direção a um projeto melhor. 1028 00:48:21,890 --> 00:48:23,360 >> Podemos dar um passo adiante. 1029 00:48:23,360 --> 00:48:28,890 Se eu vou para o meu quarto versão deste, observe agora 1030 00:48:28,890 --> 00:48:31,320 que eu estou fazendo algo ainda mais espécie de enigmático. 1031 00:48:31,320 --> 00:48:33,230 E eu sei que este é um muito para absorver de uma vez, 1032 00:48:33,230 --> 00:48:35,080 mas nós somos apenas uma espécie de limpeza coisas. 1033 00:48:35,080 --> 00:48:38,550 Agora eu estou colocando meus ajudantes arquivo em uma pasta chamada 1034 00:48:38,550 --> 00:48:41,190 includes-- apenas um arbitrário nome onde eu quero colocar coisas 1035 00:48:41,190 --> 00:48:44,300 que eu quero include-- e depois o resto desta é o mesmo. 1036 00:48:44,300 --> 00:48:47,140 >> Mas se eu olhar agora no gedit, aviso que eu comecei livrar 1037 00:48:47,140 --> 00:48:51,940 de todos esses outros arquivos e não tenho moveu-los, por exemplo, para aqui. 1038 00:48:51,940 --> 00:48:55,110 E então, em modelos, Eu tenho esse também. 1039 00:48:55,110 --> 00:48:59,292 E assim tudo isso é agora em direção a um passo de usar um muito melhor padrão de design. 1040 00:48:59,292 --> 00:49:01,000 E nós estamos muito rapidamente indo a afastar 1041 00:49:01,000 --> 00:49:03,870 da funcionalidade padrão do PHP, que nós começamos aqui com, 1042 00:49:03,870 --> 00:49:07,655 onde você só misturar PHP, e HTML, e seu CSS, 1043 00:49:07,655 --> 00:49:09,780 e você simplesmente cuspi-la e você vai fazer sobre o seu caminho. 1044 00:49:09,780 --> 00:49:11,404 Não vai ser muito fácil de manter. 1045 00:49:11,404 --> 00:49:14,481 Assim como em C, que começamos a usar múltiplos arquivos e múltiplas funções 1046 00:49:14,481 --> 00:49:15,730 e factoring coisas isso. 1047 00:49:15,730 --> 00:49:16,688 Nós vamos fazer o mesmo aqui. 1048 00:49:16,688 --> 00:49:19,970 E, de fato, no quinto e último versão aqui, eu fiz uma outra coisa. 1049 00:49:19,970 --> 00:49:23,710 Você ainda pode usar dot dot, que, mais uma vez, é apenas o diretório pai. 1050 00:49:23,710 --> 00:49:28,260 Para ser ainda mais consciente de segurança, porque se eu olhar para a escuta 1051 00:49:28,260 --> 00:49:32,450 aqui para quinta e versão final, aviso que eu tenho um diretório chamado aqui 1052 00:49:32,450 --> 00:49:35,180 público e, em seguida, no mesmo nível, por assim dizer, 1053 00:49:35,180 --> 00:49:38,490 Tenho inclui e modelos e, em seguida, esse arquivo de texto leia-me. 1054 00:49:38,490 --> 00:49:41,130 >> E a razão pela qual eu tenho estruturado ele gosta isto-- e tantos web 1055 00:49:41,130 --> 00:49:44,330 hospedeiros, especialmente os US $ 5 por os meses ou uns 10 dólares mês, 1056 00:49:44,330 --> 00:49:47,170 se você já teve um desses services-- o que muitos deles fazem 1057 00:49:47,170 --> 00:49:50,690 é que eles só esperam que você despejar todo de seus arquivos em um diretório, 1058 00:49:50,690 --> 00:49:53,640 como já fizemos com este primeiro exemplo. 1059 00:49:53,640 --> 00:49:56,740 >> Mas assim que você começar a construir mais locais sofisticados que apenas armazenam 1060 00:49:56,740 --> 00:50:00,480 dados que se preocupam e arquivos que você preocupam, realmente organizar as coisas 1061 00:50:00,480 --> 00:50:05,060 correctamente e com mais segurança consciência na mente pode 1062 00:50:05,060 --> 00:50:07,927 começamos a defender contra todos os amigos 1063 00:50:07,927 --> 00:50:10,135 que você tem dentro ou fora desta classe que, 1064 00:50:10,135 --> 00:50:12,510 assim que você começar a fazer programas se na web, 1065 00:50:12,510 --> 00:50:15,140 vão começar a escolher sobre você e sobre eles. 1066 00:50:15,140 --> 00:50:17,420 >> E assim vamos olhar em última análise, o seu design. 1067 00:50:17,420 --> 00:50:20,010 Esta é apenas uma imagem que descreve a seguir. 1068 00:50:20,010 --> 00:50:22,897 Nós vamos colocar todo o nosso lógica de programação em um ou mais arquivos, 1069 00:50:22,897 --> 00:50:25,230 e vamos apenas começar chamando esses controladores. 1070 00:50:25,230 --> 00:50:28,022 É onde o cérebro de nossos sites realmente são. 1071 00:50:28,022 --> 00:50:29,730 Então nós vamos têm vista, e vista 1072 00:50:29,730 --> 00:50:32,480 são tão simples como apenas separado files-- chamados templates, muitas vezes. 1073 00:50:32,480 --> 00:50:34,410 Eles só têm a estética da minha página, 1074 00:50:34,410 --> 00:50:37,020 o que eu quero a página para olhar como-- as cores eo layout 1075 00:50:37,020 --> 00:50:38,870 e as posições de todas as variáveis. 1076 00:50:38,870 --> 00:50:41,120 >> E, em seguida, mais interessante que vai finalmente chegar a 1077 00:50:41,120 --> 00:50:45,420 é o modelo, o que vai ser apenas a palavra que bater em outras tecnologias 1078 00:50:45,420 --> 00:50:47,771 que trazemos para o imagem, como bases de dados reais, 1079 00:50:47,771 --> 00:50:49,520 de modo que quando você quer para salvar as informações, 1080 00:50:49,520 --> 00:50:52,140 que não basta enviar um e-mail para o seu proctor ou a si mesmo, 1081 00:50:52,140 --> 00:50:57,350 você realmente armazená-lo em um banco de dados usando outra linguagem conhecida como SQL. 1082 00:50:57,350 --> 00:51:00,450 E assim nós vamos sair daqui hoje e pegar com este na quarta-feira 1083 00:51:00,450 --> 00:51:02,990 e introduzir as bases de dados, em seguida. 1084 00:51:02,990 --> 00:51:06,940 >> [Música tocando] 1085 00:51:06,940 --> 00:54:24,555