[Powered by Google Translate] [Semana 8] [David J Malan] [Harvard University] [Esta é CS50.] [CS50.TV] Bem-vindo de volta. Este é CS50, e este é o início da semana 8. Um par de oportunidades, esta semana, entre eles essa conversa aqui, em que alguns alimentos será servido. Para mais detalhes confira os slides que estão online. E também um outro evento nesta semana pelo nosso próprio Thomas Carriero. Ele é um dos companheiros CS50 do ex-chefe de ensino que está agora no Dropbox, e ele é o cara que se entusiasmem por US com o que você sabe o que, por isso, se você quer mais do que a cabeça de sua conversa esta tarde para Dropbox e muito mais. CS50 almoço é nesta sexta-feira. Fazer se juntar a nós, se você é capaz, 01:15, como de costume, no Fogo e Gelo. E agora nós mergulhar em algo chamado de Seminários. Nossos CS50 Seminários, Recall, são essas classes opcionais liderados pelos companheiros de ensino e assistentes do curso e amigos do curso, pessoas de um grupo do campus chamado ABCD, que é um grupo de tecnófilos no campus, bem como um grupo chamado HCS, a Harvard Computer Society, alunos de graduação que estão similarmente interessados ​​em computação. A programação deste ano inclui seminários de seminários sobre Android e iOS e JavaScript e PHP, Unix, Vim, e mais, para perceber que estes seminários estão chegando. Se você gostaria de RSVP para qualquer um deles ir para a URL lá. Nós, então, publicaremos no site do curso os tempos e lugares, uma vez que são finalizados. Mas sei que vale a pena lá de 5 anos de seminários anteriores disponíveis online, muitos dos quais ainda estão muito atual em termos de tecnologias você pode quero jogar com para seus projetos finais, assim que a cabeça lá para alguns vídeos disponíveis da mesma. CSS, aqueles de vocês que estão familiarizados com a CSS já, o que é isso em poucas palavras? O que é CSS? É cascading style sheets, eo que isso significa? O que isso faz para nós, CSS? Tudo bem, vamos aquecer com um mais fácil, HTML, linguagem de marcação de hipertexto. O que isso faz para nós? Qualquer pessoa em tudo? Está ficando realmente difícil fazer estas perguntas. HTML, linguagem de marcação de hipertexto. Sim? Não? [Resposta do aluno inaudível] Ok, bom, que nos permite marcar texto para exibir em um navegador da web. Não é uma linguagem de programação. É de fato uma linguagem de marcação, o que significa que instrui o navegador como exibir informações, de modo que o mais simples encarnação deste, como vimos é algo super simples, como negritar, aberto suporte b suporte fechado, diz fazer este texto em negrito, e que na verdade é apenas uma das muitas maneiras em que podemos fazer isso e, de fato, estes dias uma abordagem melhor para estilizar sua página da web, tornando as coisas em negrito e itálico e centrado e justificava e semelhantes, não é feito por meio de etiquetas HTML sozinho mas sim com uma técnica chamada CSS, folhas de estilo em cascata. Esta é uma linguagem em si. Ela também não é uma linguagem de programação, mas- todos, este é o Dan, que mantém juntar a nós hoje. Algumas dificuldades técnicas. Não é um problema. CSS nos permite estilizar uma página definindo o que são chamados de propriedades, por isso vamos dar uma olhada nisso por meio de alguns exemplos básicos. Deixe-me ir para o aparelho hoje. Eu tenho a fonte de 8 diretório segunda-feira em aqui, e eu estou indo para ir em um diretório chamado CSS, onde temos um monte de arquivos esperando por nós aqui, e nesta pasta que temos, por exemplo search0.html, da última vez. Agora, recordar com search0 deixamos esta nota por tipo de implementação do Google ou realmente apenas o fim da frente para ele uma semana atrás, e perceber que tivemos algumas novas etiquetas lá. Tivemos h1 para um título grande, em negrito, forma, o que nos permitiu realmente tem um formulário HTML para entrada do usuário. Ação, qual era o significado de um atributo action na etiqueta de formulário HTML? Qual foi o significado desta ação,? Eu só vou fazer isso hoje. Ação é o destino para onde o formulário vai ser submetido. O fato de que a ação que diz = "google.com / search" significa que quando o usuário clica no botão de envio ou o equivalente qualquer que seja a forma que eles campos preenchidos vão ser enviados para o nosso servidor não ou o nosso aparelho, mas sim para que URL específica no Google. E o método que vai utilizar é chamado de obter, e se, por enquanto, é apenas uma técnica para passar informações junto a um servidor web por meio da URL, por isso vamos dar uma rápida olhada para trás em como isso funciona. Observe que há uma entrada cujo nome é q cujo tipo é texto e, em seguida, uma segunda entrada do tipo apresentar cujo valor é CS50 Pesquisa, e de fato, se abrirmos esse arquivo aqui, search0.html, é uma forma super simples, e se eu procurar por algo como ciência da computação e tecle enter ou clique em Pesquisar CS50 perceber que o que acontece é além de obter no Google Eu especificamente terminou no URL na parte superior, google.com / search? q = computador + ciência, e ciência da computação é, obviamente, o que eu digitado dentro O + significa apenas que é onde um caractere de espaço foi, e é feito pelo navegador apenas para se certificar de que não há confusão e espaço em branco na URL real. E, em seguida, q, naturalmente, é o nome do parâmetro. Nós não vimos como nós, o programador, pode realmente acessar q ainda. Podemos supor que o Google sabe o que fazer com isso aqui, mas nós vamos chegar lá no devido tempo hoje. Mas deixe-me dar uma olhada em vez de search1.html, que se parece um pouco diferente, porque eu decidi que este formulário aqui foi um pouco manco. Quero dizer, é no canto superior esquerdo. Não há realmente nenhuma estética a ele, e assim que eu quero para estilizar este um pouco mais como o Google, cuja página inicial, recall, mesmo que você não pode visitá-lo que, muitas vezes, parece que isso hoje no Halloween. Se em vez abrir uma versão deste arquivo, 1.html pesquisa, eu centrado lo. , Ainda bem feio, mas pelo menos agora eu comecei a controlar a estética desta página não apenas a marcação de facto. Vamos dar uma olhada em uma pesquisa, e não há realmente apenas uma diferença aqui, que pode saltar para fora para você, ou talvez não, mas o que é a linha de um ou trecho de diferença? Há este atributo de estilo, então verifica-se que em HTML a maioria dos elementos, a maioria das etiquetas pode ter um atributo estilo sobre eles, e dentro desse atributo de estilo é de uma string, e que string é CSS. Você pode colocar folhas de estilo em cascata lá especificando-lo como um nome de propriedade seguida de dois pontos, seguido por um valor. Esta é uma espécie de decisão de projeto infeliz, há alguns anos que CSS é uma linguagem em si mesma, mas sintaticamente é muito diferente de HTML. Neste caso, vemos que dentro do meu site, que é escrito em HTML, Eu tenho CSS dentro dessas citações, e da Convenção para CSS é que você tem o que é chamado de uma propriedade seguido, novamente, dois pontos, seguido pelo valor da propriedade, por isso não há sinal de igual. Não há citações adicionais. É só isso cólon par valor separado chave, e linha de texto faz exatamente o que diz. Ele alinha o texto no corpo da página, que é realmente a coragem da página, no centro. Ok, então o resultado final, para ficar claro, é esta. Nem todos os mais sexy isso, mas pelo menos é centrado e um pouco mais como o Google real. Mas e se eu, em vez abrir versão 2 do presente e apontar aqui uma marca totalmente nova? Agora na cabeça da minha página, que anteriormente só tinha que tag em todos os exemplos anteriores? Ele só tinha esse, o título. Um momento atrás da marca de cabeça olhou como este. Agora, em vez tem uma marca de estilo dentro dela, e isso também, eu peço desculpas, sintaticamente parece muito diferente do HTML, mas você se acostuma, em que dentro da marca de estilo Agora posso fatorar o que era um momento atrás um atributo, o atributo de estilo, e eu posso colocá-lo no topo da minha página. Por quê? Bem, este é um passo para limpar as coisas, bem como em escrever código C nós, às vezes, escrever funções para fatorar funcionalidade comum. É apenas um pouco mais limpo para começar a fatoração de coisas como a estética para uma localização central, em vez de ter tudo intercalam em todo o seu HTML. Isso também faz o que diz, mesmo que não haja um pouco de nova sintaxe. Isso aqui é um seletor, e do corpo significa apenas selecionar o elemento do corpo e aplicar as seguintes propriedades para ele. Bem, a propriedade é exatamente o mesmo. Para uma boa medida que eu adicionei um ponto e vírgula no final, que tende a ser de convenções, e eu envolto essa propriedade toda entre chaves, porque eu poderia realmente ter coisas diferentes aqui. Eu poderia realmente dizer algo como color: blue; Agora isso também não vai ser um passo para nada tudo o que mais bonita, mas se eu voltar agora para a versão 2 que eu pelo menos já fez o corpo do meu texto página toda azul. O botão permanece o mesmo porque é um insumo. Não é texto puro. Mas tudo o que é texto, como CS50 Pesquisa em cima, é em azul fato. Mais uma vez, tudo o que fizemos agora é remover a marca do corpo, aviso prévio, o atributo de estilo, e nós temos consignado isso aqui. Isso não é uma grande melhoria, mas se tomarmos um passo adiante perceber o que podemos fazer nesta terceira versão aqui. Em search3.html página da web é quase idêntico exceto para o novo tag agora? Link, então esta não é muito apropriadamente chamado porque você não está ligando, no sentido de um hiperlink clicável. Em vez disso, você é meio de fazer o equivalente a # include em C qual a marca de link com um atributo href e um atributo rel diz vá em frente e copie e cole o conteúdo de um arquivo chamado search3.css aqui, essencialmente. Ele não chega a fazer isso, mas esse é o espírito da coisa. Ele diz que vai abrir esse arquivo, search3.css, e tratá-lo como se o usuário tivesse digitado isso aqui na cabeça da página assim como eu fiz no exemplo anterior. Search3.css, entretanto, é bastante simples. É realmente só contém exatamente o que foi um momento atrás na marca de estilo, mas eu tenho consignado aqui fora em seu próprio arquivo. Mesmo que não passei muito tempo a todos em HTML ou de programação web apenas intuitivamente qual é a motivação, talvez, por fatoração este pequeno trecho até mesmo de CSS em seu próprio arquivo e incluindo-o com esta tag link aqui? [Resposta do aluno inaudível] Ok, é mais fácil de ler no sentido de que você tem o seu CSS em um arquivo CSS. Você tem o seu código HTML em seu arquivo HTML, por isso é mais legível nesse sentido. O que mais pode ser atraente? Sim. [Resposta do aluno inaudível] Sim, para que você possa incluí-lo muitas vezes, então agora nós estamos fazendo estes exemplos básicos com arquivos individuais, mas vamos supor que você está realmente fazendo um site de verdade, como você vai para pset 7 ou o seu projeto final, talvez, e você quer ter várias páginas da Web, como é certamente comum em a rede mundial real Geral, e que seria uma espécie de coxo ter que copiar e colar a mesma cor azul e mesmo texto alinhado centro em cada uma dessas páginas. Em vez disso, faz mais sentido para fatorar, assim como temos feito em C com o arquivo h., colocá-lo em um lugar central, neste search3.css caso, e então permitir que qualquer arquivo em seu site para realmente incluir esse arquivo por meio de essa marca aqui na linha 16. Como é tipicamente o caso, que começou com a versão 0, que tipo de obras mas não é necessariamente o melhor, e com cada etapa, busca 1, busca 2, e agora busca 3 temos tido estes passos de bebê para os projetos que são um pouco mais limpo e mais preparatório para as páginas mais complexas que podemos fazer na estrada. Deixe-me abrir um último exemplo aqui apenas para mostrar uma página ainda mais estilizado, mas primeiro vamos olhar para o código HTML. Este é search4.html, e notar que estruturalmente é quase o mesmo exceto para a introdução de uma nova marca, DIV. Div é uma marca que apresenta uma divisão da página. Você pode pensar nisso como um retângulo invisível. É uma espécie de cria uma faixa de área no site que pode estilizar todos de uma vez. O que eu tenho feito aqui é a seguinte. Dentro do meu corpo tag, que tem sido ali o tempo todo, Eu estou dizendo criar uma divisão da página aqui através de linhas de 45 a 47, o que significa, essencialmente, dar-me um retângulo invisível na parte superior da página. Então me dê um segundo retângulo, embora invisível, abaixo disso, e identificá-lo pelo teor de nome, e depois, por último, dá-me uma terceira divisão da página na parte inferior chamado ID. Vamos ver por que eu fiz isso em apenas um momento, mas conceitualmente Tenho uma divisão de cabeçalho. Eu tenho uma divisão de conteúdo, e eu tenho uma divisão rodapé da página mesmo que estes sejam apenas na marcação. O usuário não vai ver três retângulos, mas uma espécie de estruturalmente há por trás das cenas eles são realmente presente. Agora, quem se importa? Por que realmente fazer isso? Tudo o mais na página é a mesma que já vimos antes. Aqui está a minha forma. Aqui está a minha entrada, a minha entrada, uma quebra de linha e assim por diante. Aqui está uma imagem, no entanto, então vamos ver de onde veio isso em apenas um momento. Aqui está um rodapé, que é novo, só porque eu queria introduzir conteúdo um pouco mais aqui. Se rolar até perceber que ID desta div é cabeçalho. O ID deste div é o conteúdo, eo ID de um presente é de rodapé. E, como o nome sugere, quando você tem um atributo ID em HTML, por definição, deve identificar um dos elementos, um dos tags em sua página. O fardo é totalmente em que você se lembre que você tem um ID cabeçalho já. Você tem um rodapé. Você tem um ID de conteúdo já. O computador não vai descobrir o que um ID disponível é para você, assim você pode acidentalmente dar 2 tags um ID do cabeçalho, e que seria apenas errado. Você tem que manter em mente o que você criou, mas uma vez que você tiver feito isso observe o que podemos fazer aqui. Agora posso especificar na minha marca de estilo no topo ou equivalentemente no meu arquivo CSS, se eu ainda estava usando essa versão, Eu posso dizer # header, eo que isso significa é que, independentemente tag neste site tem uma identificação de cabeçalho e #, apenas por convenção humana, representa ID. O sinal de sustenido ou libra signo representa ID. Cabeçalho é o nome que eu dei. Isto significa aplicar esta propriedade CSS para qualquer tag nesta página tem um ID de cabeçalho. Mesma coisa aqui. Aplicar esta propriedade, que passa a ser o mesmo, a qualquer elemento cujo ID é o conteúdo, e depois aqui notar que eu tenho um pouco mais sofisticado, com rodapé. Qualquer elemento cujo ID é rodapé, de que não pode haver apenas um, por definição, vá em frente e faça o seu tamanho de fonte menor, sua ousada peso da fonte, a sua margem de 20 pixels. O que significa isso? É apenas uma margem na parte superior, parte inferior, e à esquerda e à direita. Isso significa dar-me uma margem de 20 pixels invisível em torno dele apenas para empurrar tudo mais longe dele um pouco, como você pode fazer no Word, Microsoft Word ou Pages ou similar. E então o texto alinhar centro. Vamos ver o resultado final, e depois vamos voltar até o trecho de um remanescente de CSS lá. Esta é a versão 4, o nosso passado para os exemplos de pesquisa, e é mais sexy, muito, muito. Agora, com justiça, eu só Googled "google gerador de logotipo da fonte." E o que me permitiu criar um GIF, um formato de imagem, que parece que não. Na verdade, você pode fazer isso também. Temos "google gerador de logotipo fontes." Vamos ver se podemos fazer isso. Ok, acho que este é o site que eu usei. Podemos dizer Ec 10, por exemplo, e fazer-lhes a sua própria. Você pode jogar com isso o dia inteiro e, em seguida, clique direito sobre ele e depois baixar o GIF real, que é tudo o que eu fiz. E, de fato, é por isso que no meu HTML, lembre-se, aqui Eu tinha uma tag de imagem, o que vimos brevemente na semana passada cuja fonte é logo.gif. E o que mais uma vez foi a motivação para ter esse atributo alt, este atributo alternativa? Sim. [Resposta do aluno inaudível] Bom, para duas razões muito, se o navegador não pode puxar para cima a imagem porque você tem uma conexão de rede lenta ou a imagem está corrompida ou algo assim, pelo menos, o ser humano pode ver "CS50 busca", e, em seguida, também por razões de acessibilidade. Se você tem um usuário que é cego e está usando um leitor de tela e, portanto, obviamente, não pode ver as imagens podem pelo menos ouvir texto se o seu computador fala a eles. Em geral, esta é a melhor prática, quando se trata da acessibilidade das páginas para que os usuários, mesmo nessa situação pode ouvir ou ver, por assim dizer, o que é que está em sua página. Há uma outra coisa que eu fiz aqui que é um pouco interessante, e vamos ver mais sobre isso em conjunto de problemas 7 através de um dos curtas liderados por um dos companheiros de ensino. Mas # conteúdo refere-se a tag cujo ID é o conteúdo, mas depois há um espaço em branco, e então há a entrada de palavra. Bem, o que é interessante sobre CSS é que você pode referem-se a marcas em uma espécie de página hierarquicamente, e que esse trecho de via CSS é encontrar a tag cujo ID é o conteúdo, e depois aplicar as seguintes propriedades para todas as marcas de entrada que são descendentes de conteúdo, isto é, que são recuadas no interior do mesmo. Recuo, de novo, é apenas importante para o computador, e não ao humano, mas por convenção que travessão coisas como nós ir mais fundo em uma página, assim, isto significa aplicar uma margem de 5 pixels a qualquer elemento de entrada que está em algum lugar dentro ou aninhado dentro de  o elemento cujo ID é o conteúdo. Quem é que isso se aplica? Bem, não há realmente apenas essas duas caras aqui. Observe que dentro da forma há duas entradas, como tem havido para todos estes exemplos. Mas aviso que essas duas entradas acontecer de ser aninhados dentro, embora um pouco profundamente, um par de camadas de recuo, dentro da tag cujo ID é o conteúdo. O que isso significa? Se formos para o navegador aqui você pode ver sempre assim ligeiramente- deixe-me aproximar-que há um pouco de preenchimento entre o botão e entre o campo de texto. Deixe-me temporariamente desligar isso. Deixe-me ir para o meu CSS, e deixe-me ir em frente e apenas mudar essa margem de 5 pixels para 0 pixels. Deixe-me ir à frente e, em seguida, salvar o arquivo, volte para o motor de busca e recarregar, e vê no meio da página. Tudo ficou comprimido juntos, e quando eu chicoteado este exemplo se Eu pensei que parecia estúpido com o campo de texto e, em seguida, o botão imediatamente abaixo dela. Eu queria almofada-lo um pouco, então eu apresentei margens. O que não vamos fazer é ir na aula através da várias dezenas Propriedades CSS que existem porque, novamente, há coisas como o tamanho da fonte, peso da fonte, margem, texto alinhar, e uma dúzia de outros poucos, e vamos encaminhá-lo no conjunto de problemas 7 a vários tutoriais on-line e as referências que lhe permitem escolher essas coisas. Mas o que é realmente importante no final do dia é entender como essas coisas são aplicadas. Novamente, se temos a marca de estilo dentro da qual podem ir os seletores, o tipo de identificadores que especificam para quem quer aplicar essas propriedades, e depois você coloca as propriedades como par valor-chave separados por dois pontos e terminou com um ponto e vírgula, ou você pode copiar todos os que e colocá-lo em um arquivo CSS separado em si mesmo. Tudo bem, todas as perguntas sobre os conceitos ou a grande figura da CSS? Você vai ver de novo mais do mesmo em pset 7, mas vamos mantê-lo geralmente muito simples. Não? Tudo bem. É hora de uma linguagem de programação real, e vamos voltar a um pouco de CSS na forma de um exemplo. PHP é realmente uma linguagem maravilhosamente acessíveis na medida em que é quase equivalente ao sintaticamente C. Em outras palavras, se você sabe C, você sabe para o PHP maior parte, pelo menos sintaticamente, apesar de existirem algumas novas funcionalidades e alguns novos conceitos que vamos ter de olhar. Mas para a maior parte, agora que a transição de C para PHP a maior parte do novo material é realmente a grande figura, como você usa uma linguagem de programa na Web em vez de na linha de comando ou em um prompt piscando como temos vindo a fazer até agora. Para referência, especialmente com pset 7 eo projeto final em diante, não aproveitar essa URL aqui se você gostaria de ler sobre as formalidades do PHP. É realmente como um livro online grátis de forma eficaz, e você também vai descobrir que o que é realmente agradável sobre PHP é que existem centenas de funções que vêm com ele, enquanto que em C você não necessariamente têm acesso a mais funções que estavam na biblioteca de matemática, a biblioteca CS50. Em PHP e um monte de línguas modernas, Python e Ruby entre eles, você tem acesso a tantas mais funções, o que significa que você começa a escrever muito menos código, pois você pode estar sobre os ombros de outras pessoas que já tenha escrito algumas coisas para você. Vamos dar um rápido passeio da sintaxe do PHP e em seguida, escrever alguns exemplos. O que é legal sobre o PHP em primeiro lugar é que não há função principal. Se você quiser escrever um programa em PHP que você acabou de começar a escrever código, e você não tem que se preocupar principal. Não há int. Não há retorno. Não há argv, argc o que é necessário quando você escreve o programa. Em vez disso você pode simplesmente começar a escrever código, e isso é, em parte, porque o PHP é o que é chamado de uma linguagem interpretada. C foi compilado, e ele foi compilado no sentido de que você começa com código fonte, executá-lo através Clang, que é um compilador, e, finalmente, após um certo número de passos que você obter o código objeto, 0s e 1s. PHP e Python e Ruby e Pearl e outros diferentes tipos de línguas em que você não compilá-los. Você não precisa ir a partir do código-fonte para 0s e 1s. Basta executar o código-fonte, e você corre o código fonte escrevendo em um arquivo de texto normal, que termina em. php, neste caso, em vez de. c, e que o programa faz no seu computador é literalmente interpreta seu código linha por linha por linha. Em outras palavras, ao invés de escrever um programa e executar o programa diretamente você, em vez escrever um programa com um arquivo com extensão. php. Então você executar um programa real chamado php.exe, se você estiver no Windows, ou apenas PHP, se você estiver no Mac OS ou Linux, e você fornecer como entrada para o programa PHP seu próprio código fonte, e seu propósito na vida é ler o seu topo código para baixo, da esquerda para a direita, e fazer o que você disse para ele fazer. Vamos ver o que isso vai significar sintaticamente. No PHP temos condições. Este slide é idêntico ao que você viu na semana 1 porque sintaticamente condições, ifs e else ifs e else em PHP exatamente assim. Quando se trata de expressões booleanas que vão exatamente assim. Quando se trata de anding coisas juntos como boleanos que vai exatamente assim. Muda a mesma aparência, e você terá a vantagem em PHP que os interruptores em C só poderia mudar em um char ou int. Você não pode ligar um valor de cadeia. No PHP você pode realmente ter uma expressão que é uma variável cujo conteúdo é uma string, e você pode realmente fazer comparação de string na forma real intuitivo, Não comparação ponteiro, a fim de decidir se a fazer caso i ou j ou outra coisa. Vamos ver o que potencialmente antes do tempo. Loops também maravilhosamente são os mesmos. Para loops ter uma inicialização, uma condição, e um número de atualizações. Enquanto laços também existem em PHP. Fazer enquanto laços também existem em PHP, e matrizes existe no PHP, mas é aqui onde a sintaxe começa a ficar um pouco diferente, mas os conceitos são os mesmos, e os conceitos são realmente a mesma como eram em 0 Semana com o Scratch. Primeiro e mais importante é o sinal $. Esta foi uma decisão de projeto em PHP que qualquer variável em PHP por design começa com sinal $. Não há mais X, Y, Z. É agora $ X, Y $, $ Z apenas porque. É algo para se manter em mente, e agora no lado direito este é semelhante a uma matriz, mas estamos usando colchetes aqui. Em PHP e em JavaScript, como vai finalmente ver, declarar uma matriz que você faz colchete aberto e fechado colchete, e então você tem uma lista separada por vírgula de valores, se ints ou cordas ou caracteres, o que quiser, dentro do que a expressão de lá. Agora, como nós fizemos algo como isso em C? Qual foi a sintaxe para estaticamente declarar uma matriz de números conhecidos? Foi chaves, diferença tão pequena aqui, mas em ambos os PHP e, eventualmente, ele só usa JavaScript colchetes, então realmente O único detalhe interessante aqui é o sinal $ para o nome da variável e também os colchetes, e há uma coisa curiosa que foi omitido, bem como sobre o lado esquerdo do sinal de =. O que está faltando que estamos exigindo há semanas? Sim. [Resposta do aluno inaudível] O tamanho, de modo que não há menção ao tamanho da matriz. Francamente, não há nenhuma menção de colchetes no lado esquerdo do sinal =, eo que mais está faltando na linha? Sim. >> [Resposta do aluno inaudível] O tipo, então o que é interessante, em especial sobre o PHP é que não é fortemente tipado como C é, e que está fortemente digitado no sentido de que você deve dizer char, você deve dizer int, você deve dizer float. Sempre que você quiser uma variável que você tem a dizer Clang que seu tipo é. PHP é um pouco mais preguiçoso. É vagamente digitado no sentido de que você pode ter carros alegóricos e chars e cordas e ints e assim por diante, mas a própria linguagem realmente não se importa com o que você coloca dentro de uma variável. Você não tem que informar com antecedência que tipo de dados vai em uma variável. É inteiramente até você, então isso é bom em que você não tem que se preocupar tanto com os dados digitando e se preocupar que seus argumentos são e assim por diante. Isto também significa que, eventualmente, funções em PHP vai ser capaz de retornar ou mais um int do tempo e, talvez, de vez em quando eles vão retornar um bool, um falso boolean, por exemplo, para indicar que algo deu errado. Isso nos dá alguns upsides, mas também nos fará tipo de projeto por um pouco mais preguiçoso quando se trata de digitação de dados. O que mais há para se manter em mente aqui? Variáveis ​​olhar bastante como este, portanto $ s = "Olá, mundo." Isso é, talvez, inferida a partir do exemplo anterior, e nós temos um outro tipo de laço. Este nós vamos realmente ver de vez em quando, já que é bastante útil, uma construção foreach. Neste caso, o loop foreach leva dentro de parênteses suas três palavras normalmente, $ Algo primeiro, que é o que matriz quer iterar sobre os membros, então, literalmente, a palavra-chave como, e então, finalmente, outro nome de variável que você começa a escolher. Pode ser foo, bar, ou elemento, e que esta construção faz é se a matriz $ contém 10 elementos a cada iteração dessa matriz, desculpe, a cada iteração deste laço o elemento variável chamada vai ser actualizado para ser o primeiro elemento na matriz, em seguida, o segundo elemento da matriz, em seguida, o terceiro elemento da matriz, obviando assim a necessidade para fazer a notação de colchetes ligeiramente irritante quadrado e $ I, a fim de índice em uma matriz. PHP faz todo esse trabalho para você e em cada iteração apenas lhe entrega o próximo elemento da matriz sem você ter que saber ou se preocupam com o seu local de índice numérico. E então, finalmente, para já, há uma outra característica do PHP que vai ser extremamente útil, especialmente quando começamos a programação na Web, e que é conhecido como uma matriz associativa. As matrizes que sabemos até agora como de 20 segundos atrás e para as últimas 8 semanas são numericamente indexados matrizes, tipo de matrizes tradicionais, onde os índices são ints, 0, 1, 2, todo o caminho para cima. As matrizes de associação são muito mais poderosos. Eles permitem que você tenha chaves arbitrárias, índices arbitrários e valores arbitrários. Considerando que, em uma matriz tradicional é 0, 1, 2, em uma matriz associativa que você pode ter um índice ou uma chave de foo cujo valor é bar. Você pode então ter outra chave cujo nome é baz e cujo valor é qux. Mais uma vez, estúpidas informática genéricos nomes de variáveis ​​aqui, mas o ponto é que essa matriz não tem suporte 0 ou suporte 1. É vez vai ter suporte foo e suporte de Baz. Este é muito mais versátil em que nós vamos ser capazes de associar palavras com outras palavras, as chaves com valores completamente arbitrariamente, e nós vamos ser capazes de obter esses valores de volta em tempo constante pois debaixo da capa que uma matriz associativa realmente está é uma tabela hash. Lembre-se que uma tabela hash permite que você coloque em alguma entrada como colocar a palavra David se você deseja inserir David em algum tipo de dicionário, e depois você voltar algum valor normalmente. No caso de speller, verdadeiro ou falso. David ou qualquer palavra que está ou não está no dicionário. Uma matriz associativa é realmente apenas uma tabela hash, mas é uma encarnação muito mais amigável do mesmo. Como veremos, isso vai nos permitir fazer algumas coisas muito, muito facilmente. Vamos dar uma olhada em algumas básica do PHP exemplos e ver o que podemos fazer com esta linguagem. Deixe-me ir em frente e abrir-se em nosso diretório de origem hoje um arquivo chamado hello1.php. Este arquivo é mais um comentário do que é o código real, então deixe-me realmente remover todos os comentários a partir do arquivo e apresentar-lhe, talvez, o mais simples programa PHP aqui. 5 linhas, e alguns dos que são espaço em branco, para notar algumas diferenças-chave aqui. O arquivo é chamado hello1.php. A primeira linha, porém, é , significa que é tudo para o meu código PHP. Vamos ver como executar isso. Eu vou voltar para a minha janela de terminal aqui. Eu estou indo para ir para o meu diretório PHP. Observe que temos um monte de arquivos, o primeiro dos quais é ola.php. Deixe-me ir em frente e executar este hello1.php, entrar. Permissão negada. Okay. Como temos fixado coisas como esta no passado? O que é isso? >> [Resposta do aluno inaudível] Precisamos ler e escrever, mas deixe-me fazer ls-l. Lembre-se esta saída um tanto enigmático pelo qual hello1 parece ser lidos e escritos por mim mas legível por todos. Acontece que este realmente não é um passo na direção certa. A diferença, mais uma vez, com uma linguagem interpretada é que você não executar o programa diretamente. Você vez executado um intérprete e entregá-lo o código que você escreveu para que possa interpretá-lo linha por linha. Neste caso, o intérprete ou programa que eu realmente quero correr é chamado literalmente PHP. Em algum lugar neste disco rígido do aparelho há um programa alguém escreveu chamado PHP, ou no Windows php.exe. O que eu vou fazer aqui é que eu vou rodar o PHP mas dá-lo como um argumento de linha de comando do código que eu escrevi, e então eu vou diminuir o zoom e aperte enter. Corre-se o meu programa para mim, de cima para baixo, da esquerda para a direita. Deixe-me ir à frente e abrir uma pequena variação desta. No aviso hello2.php que isto também é principalmente comentários, então deixe-me livrar-se deles como uma distração, eo que é claramente diferente agora sobre este arquivo? Há essa nova linha, um tanto enigmática no topo. Na linha 1 é #! / Bin / php. Bin é uma convenção sobre Linux e Mac OS para binários, assim / bin significa que esta é uma pasta contendo um monte de binários que está programado, um dos quais é o PHP. O #! é apelidado shebang, que é a forma mais rápida de dizer isso, eo que isso significa é que quando você executar este programa agora há uma dica no topo do arquivo que diz ao computador o intérprete de usar. Fica um pouco chato se você tivesse que dizer a seus usuários e seus clientes "Ei, nós escrevemos este programa chamado hello1.php". Tudo que você tem a fazer é para sempre executar o PHP e, em seguida, o nome do programa. Francamente, seria apenas mais agradável para executar hello1.php, e, de fato, nós podemos, se faça o seguinte. Deixe-me ir em frente e fazer ls-l, e aviso em hello2 ainda é apenas ler escrever e em seguida, ler ler, por isso ainda não posso fazer isso, hello2.php. Mas introduziu esta sempre assim momentaneamente última vez, o comando chmod. Se eu fizer um chmod + x, o que significa que todos os executabilidade mais, e depois hello2.php e depois fazer ls-l novamente perceber o que mudou. Um, o Linux está me mostrando o nome do arquivo em verde para transmitir a idéia de que é executável, mas, mais importante ainda, no lado da mão esquerda perceber que o pouco que representa x para executável já foi definido. O que isto significa é agora eu posso correr ./hello2.php como de costume, aperte enter, e por causa da shebang no topo do arquivo isso é uma dica, de novo, para o Linux que diz usar este intérprete para executar este arquivo. Não se preocupe em forçar o usuário a digitar realmente isso. E o que é legal agora é que é meio irrelevante para meus clientes ou meus amigos o idioma que eu escrevi este programa em, para que eu possa ir em frente com mv e renomear essa coisa de hello2, por exemplo. E agora se eu fizer ./hello2 e zoom out meu programa continua a funcionar. Essas extensões de arquivo são uma convenção humana que é necessário para algo como Clang e fazer que olhar para eles. Mas para PHP, eu poderia chamar isso de nada extensão de arquivo que eu quero. Eu poderia enganar o mundo a pensar que eu sou realmente bom em Ruby, e eu poderia escrever hello2.rb e execute isso, e pronto, agora eu tenho a versão Ruby, que é uma mentira completa. Mas as extensões de arquivo são sem sentido se o arquivo é executável e tem essa dica especial no topo do arquivo. Agora, como um aparte, deixe-me mostrar-lhe rapidamente a versão 3, que é uma espécie de truque útil saber. Em hello3 eu fiz algo um pouco errado que eu vou atualizar o código fonte online. Na versão 3 verifica-se que na maioria dos computadores Linux há um programa chamado env para o ambiente, eo que você pode fazer aqui é se você não tem idéia de onde o PHP é instalado na unidade de disco rígido, porque de facto ela pode variar com base no computador que alguém está usando, env diz apenas executa env, que é na maioria dos sistemas, e descobrir onde o PHP é. Apenas um truque comum para que você não tem que se preocupar em encontrar para fora onde um programa é. Mas se você se importa para descobrir onde um programa é e você não ter se importado até agora você pode usar o comando que. Deixe-me afastar e tipo que php, e perceber que me diz que é, na verdade, em usr / bin / php. É uma espécie de uma mentira. É também no lixo. É só me mostrando o primeiro hit. Se você já se perguntou onde é Clang, que Clang, que está em usr / bin / bumbum, que fazer, usr / bin / fazer, e isso significa que todo esse tempo você poderia ter sido digitando usr / bin / clang entrar para executar Clang, mas é o tipo de tedioso para fazer isso, então algumas pastas como usr / bin e bin são consideradas padrões de modo que o computador sabe olhar para eles para você. Qualquer dúvida sobre como escrever um super, super simples programa World Olá em PHP e em seguida executá-lo? Porque agora nós vamos começar a introduzir a sintaxe mais atraente. Tudo bem, aqui vamos nós. Estes programas que temos visto, na verdade, todos eles antes. Se eu abrir, por exemplo, vamos fazer beer1.php, não vamos passar por várias versões deste, mas o que eu fiz foi eu sentei e derramou ou convertido meu código C para o código PHP aqui. A maior parte do início do arquivo é comentários aqui. Acontece que há uma nova função que precisamos chamado readline. GetString, recall, para a partir Semana 0 foi uma coisa CS50. PHP vem com sua função user-friendly, chamada readline que leva um argumento que especifica o prompt que você quer mostrar para o usuário, e que faz readline é ele retorna o que o usuário digita pol Neste caso, eu estou declarando uma variável chamada $ n. Eu sou armazenar nele o valor de retorno de readline depois de avisar o usuário com essa seqüência. Só para backup, para realmente executar essa coisa, deixe-me ir em frente e executar beer1.php php. Quantas garrafas haverá? Vamos fazer dois desta vez. Enter. Isto é tudo. O programa é funcionalmente idêntico ao da versão C de semanas. Mas sintaticamente vamos ver o que é diferente. Depois que eu receber um int a partir da notificação do usuário que eu estou fazendo alguma verificação de erros, e se n for menor que 1 eu sair e eu imprimir uma mensagem muito para o usuário e de saída com 1. Isso também é um pouco diferente.  Em C o que vamos fazer? Em C voltamos 1. No PHP você sair com uma, que francamente é que eu acho que um pouco mais intuitiva porque você está literalmente sair do programa. Tudo bem, e então aqui a música irritante é idêntico sintaticamente com exceção da variável, então aqui na linha 24 em diante notar meu laço for é quase o mesmo, mas eu tenho R $ na frente do i e n, e que também está em falta a partir da linha 26 que tivemos no passado quando se declara uma variável i? Não há nenhum tipo. É incorreto em PHP para dizer int. Você simplesmente não precisa fazer isso. O computador, o interpretador do PHP é inteligente o suficiente para perceber que se você colocar um número em $ I ele será tratado como um número para você. E então aqui estamos na ficha $ i, $ i, $ i - 1. Tudo isso é a mesma, e então aqui nós fazemos um "Uau, isso é chato" printf e depois sair (0). Mais uma vez, o takeaway aqui é que mesmo que nós vamos gastar relativamente pouco de tempo em PHP, certamente contra o que fizemos em C, é quase o mesmo, e assim o que vamos fazer hoje e na próxima semana e além é focar realmente em algumas das novas idéias. Só para ver que outra coisa não traduzir mais de C, este foi um programa super simples que fizemos na semana 1 ou 2, que um valor de cubos. Mas o que era interessante no momento sobre este programa é que ele introduziu a noção de uma função personalizada escrito que nós mesmos escreveram. A sintaxe do PHP é quase o mesmo. Aqui está o meu programa em cima. Note novamente ausente é qualquer noção de principal. Eu começar a escrever código, e isso é o que vai começar executado pelo intérprete. Eu imprimir x agora é 2, presumivelmente. Então eu reclamar cubing ... Então eu chamar a função cubo e passar $ x e atribuir o valor de retorno para $ x. Então eu afirmo que ele é em cubos, e então eu digo isso, o que espero vai dizer que x é agora 8. A sintaxe para a função em PHP é sempre assim ligeiramente diferente. Novamente falta é o tipo de retorno. Novamente falta é o tipo de retorno e também falta é que outro tipo? [Resposta do aluno inaudível] Bem, ok, isso é bom. Vamos voltar a isso em um segundo. Não temos, por exemplo, int aqui. Nós não, por exemplo, ter int aqui porque, mais uma vez, em PHP você simplesmente não precisa e não deve fazer isso, mas há esta nova palavra-chave chamada função. No PHP é quase um pouco mais claro, porque quando você quer uma função você literalmente dizer função, é dar-lhe um nome e, em seguida, uma lista separada por vírgula se algum de seus argumentos. Não é preciso dizer nula ou qualquer coisa assim, e depois de retorno é o mesmo, $ A $ * a * $ a. O que também está faltando? Sammy apontou isso aqui. Na parte superior do arquivo completamente ausente em PHP também é um protótipo. Isso também é por design. Línguas e intérpretes como PHP são mais espertos do que C sempre foi em compiladores como Clang. Lembre-se que Clang, se você não disse a ele que existe cubo, se você não diga a ele que printf existe como com um protótipo ou com um # include, bem, ele estava indo para gritar com você e nem mesmo compilar o código. PHP e linguagens mais modernas são muito mais inteligentes quando se trata de presente. Eles vão encarregar-se de ler todo o seu código e então gritar com você somente se encontrar em nenhum lugar cubo. Não importa se cubo é no fundo ou na parte superior ou mesmo em algum arquivo separado. Linguagens PHP e similares são agora inteligente o suficiente para olhar em frente em tudo antes de você considerando como tendo cometido um erro. Onde isso nos deixa? Vamos fazer um último exemplo aqui em condições, e se eu abrir aviso conditions2.php também sintaxe aqui é quase o mesmo. Estou usando readline vez de GetString, mas que a linha é a mesma que antes, "Eu gostaria de um inteiro por favor." Eu, então, ter uma condição se, uma outra se, e em seguida, uma outra pessoa, mas funcionalmente este programa também é idêntico ao que fizemos semanas atrás, por isso, se eu executar essa coisa, php de conditions2, e eu dar-lhe um número como 23 - Eu escolhi um número positivo. Se eu dar-lhe -1 eu peguei um número negativo. Se eu dou 0 Eu, na verdade pegou 0. Então, quem se importa com tudo isso? Bem, um do tipo divertido de exercícios aqui pelo menos para mim era ir para trás e ver o quão rápido eu poderia implementar pset 5, o pset erros ortográficos. Lembre-se que havia um arquivo chamado speller.c, e havia um arquivo chamado dictionary.c. O que eu fiz foi tipo de gasto alguns minutos e eu converti o código C para o código PHP, e não vamos gastar muito tempo em speller porque assim como em pset 5, você realmente não precisa gastar muito tempo em speller em si, porque sua atenção estava no dicionário. Basta dizer que, se você ler speller, este arquivo aqui, que é muito bonito equivalente ao código C que lhe deu para pset 5. Acabei acrescentado cerca de US $ em alguns lugares. Eu mudei os nomes das funções certas, se não existe no PHP. Há uma coisa adicional aqui, preg_match, que é a maneira um pouco mais sofisticado de fazer algo, mas vamos voltar a isso eventualmente. Mas em suma, speller é quase idêntica, e se você olhar bem no fundo o que, eventualmente, cospe é este aqui, palavras com erros ortográficos, palavras de dicionário, palavras no texto. Tudo bem, então o que é interessante agora é o seguinte. No topo do meu arquivo que estou exigindo dictionary.php. Assim como C tem # include PHP tem uma função especial chamada requerem que praticamente faz a mesma coisa, exigem um arquivo chamado dictionary.php. Como eu posso ir sobre a implementação de pset 5? Deixe-me ir em frente e abrir um arquivo aqui. Deixe-me dar uma pequena referência aqui. E deixe-me criar um novo arquivo e começar a chamar esta dictionary.php. Deixe-me colocar em outra pasta, para que possamos fazer isso ao vivo. E agora eu vou zoom in Vou começar o meu arquivo PHP com suporte aberto php fechado suporte. E então aqui havia algumas funções que eu precisava para implementar para pset 5, então deixe-me começar a implementar algumas das pessoas, para verificação de função, que teve de levar uma palavra em como um argumento. Nós vamos fazer isso e voltar a ele em um momento. Não havia carga, função que teve no que como um argumento? Dicionário, para que o arquivo que eu realmente queria carregar. Houve dimensão, função que não recebe nenhum argumento e havia-função que era o outro? Descarregar, que não tomou nenhuma argumentação. Estas são as quatro funções que eu precisaria agora implementar em PHP, eo que eu vou fazer é ir em frente e fazer isso. Um monte de que você usou uma tabela hash em pset 5, então deixe-me ir em frente e criar uma tabela hash em PHP. Concluído. Isso me dá uma tabela hash. Bem, por que? Um deles, a variável é chamada $ tabela, apenas para evocar a idéia de uma tabela de hash. Os colchetes, no entanto, recordar, representam o que? Uma matriz, mas em matrizes PHP não tem que ser indexada numericamente. Eles também podem ser matrizes de associação, o que significa que você pode ter chaves arbitrárias e valores. Assim como no pset 5, aqueles de vocês que fez implementações tabela hash você provavelmente introduzido a palavra e depois inserido em uma cadeia de listas ligadas, ou armazenados em algum lugar o valor de verdade ou algo nesse sentido. Você de alguma forma lembrou-se do fato de que a palavra estava lá. Por agora, que vai ser a minha tabela hash, e agora para ir sobre como implementar a função de verificação Eu só preciso olhar para dentro daquela tabela hash e ver se uma palavra está lá. O que eu vou fazer é que eu vou dizer, se- digamos isset, que é uma função do PHP que, literalmente, significa apenas que é o conjunto de chaves, assim isset ($ tabela [$ palavra], e se assim retornar true. É isso aí. Isso é pset 5 em PHP. Bem, com justiça, tudo bem. Else return false, então ele não está lá. O que realmente está acontecendo aqui? Bem, se a tabela de mesa ou hash aqui mais geral- é uma matriz associativa que significa que você pode indexar nele com uma palavra como "palavra", e você tem que voltar algum valor. Estamos meio de obter um passo à frente de nós mesmos. Seria uma espécie de bom se realmente carregou o primeiro arquivo, para carga não é tão simples, mas deixe-me ir em frente e chicote  uma implementação muito rápida de carga. Deixe-me ir em frente e dizer palavras recebe arquivo de dicionário. A função de arquivo em PHP abre um arquivo e retorna para você uma série de todas as palavras que o arquivo, apenas entrega-los para você. Isso foi uma grande dor também, não foi? Agora foreach, esta é a nossa nova construção, foreach ($ palavras as $ palavra). Este ciclo vai começar a iteração sobre as palavras de matriz e atribuir à variável $ palavra cada palavra no arquivo a partir do primeiro para o segundo para o terceiro ao quarto todo o caminho então eu não tenho que fazer o chato [i] notação e similares. E o que eu estou simplesmente vai fazer para cada uma dessas palavras é armazená-lo em minha mesa de indexação na tabela e depois fazer verdade, porque para lembrar que uma palavra no meu dicionário é tudo o que eu tenho que fazer é tipo de virar um pouco e dizer esta palavra em minha tabela hash é lá, é verdade. E se ele não estiver lá, eu não tenho que colocar explicitamente falsa, caso contrário, eu teria que colocar falsa para todas as palavras possíveis no universo. É suficiente para mim apenas para definir um valor de índice a verdade se uma palavra é, na verdade, na minha tabela hash. Agora, eu estou cortando um par de cantos aqui que eu vou acenar as mãos menos por enquanto, , mas agora a função de carga é feito. Eu carregar todas as palavras a partir do arquivo em um array. Eu iterar dessa matriz e para cada palavra na matriz Eu ligá-lo em minha tabela hash com uma linha de código. Isso é divertido. Você sabe como podemos implementar tamanho agora? Bem, o tamanho é sempre muito fácil, na justiça. Aqui podemos apenas fazer retornar a contagem de mesa. Isso é muito fácil também, contar o número de coisas em cima da mesa. Isso é realmente o tipo de não o mais eficiente. Eu provavelmente deveria ter um tamanho variável chamada para que possamos fazê-lo em tempo constante, mas que é bastante fácil. Ah, e em seguida, descarregar, se realmente queremos ser anal aqui podemos dizer que é como você descarregar alguma coisa. Você acabou de definir a variável igual a uma matriz vazia, e se livrar de tudo o que estava lá. Não há necessidade de ligar gratuitamente. Mais uma vez, eu cortei alguns cantos, e peço desculpas para a atribuição conjunto de problemas 5 talvez em C, mas se agora vá em frente e executar isso, Vou rodar a versão que eu escrevi com antecedência apenas para que eu não cometa erros sintáticos qualquer. Deixe-me ir em frente e correr speller. A utilização é a mesma. Aqui está um arquivo de dicionário que contém apenas a palavra foo. Aqui está um arquivo de texto que contém apenas foo bar. Vamos soletrar verificar isso, speller assim, usando este arquivo de dicionário sobre este arquivo de texto. Não há uma palavra grafada incorretamente, bar, e voila. Feito com pset 5. Vamos dar um intervalo de 5 minutos aqui, e nós vamos voltar e mais em PHP. Tudo bem, estamos de volta. Vamos fazer-me odiar por um tempo. Vamos agora ver se realmente este não era um positivo realmente implementar isso em PHP. Concedido, levou 45 segundos para executar. Mas vamos em frente agora e correr as coisas. Deixe-me ir em frente e executar uma versão C de speller, e vamos executá-lo em um dos maiores arquivos, que é a Bíblia King James. E isso aqui é em-vamos para a nossa pasta C, speller em King James, a 5. Um monte de palavras com erros ortográficos. Ok, então essa é a saída que você provavelmente tem mesmo que as vezes são um pouco diferentes, se você tem tudo funcionando corretamente, e assim que o tempo no total, para a verificação ortográfica a Bíblia King James foi 0,38 segundo, de modo muito bom usar essa implementação. Agora deixe-me ir para a versão do PHP, que acabou de escrever. Deixa-me correr speller em King James. Opa, ignorar esse erro. Eu estou no diretório errado. Speller sobre King James, a 5. Quase pronto. Ok, o astuto observador vai perceber que foi mais de 3 segundos de lá. Esse é o verdadeiro tempo em execução. Acontece que é preciso tempo para cuspir grande quantidade de texto para fora porque de buffer questões, mas longa história curta, que foi de 3,15 segundos de tempo de máquina, tempo de CPU, versus o que foi um momento atrás? Como 0,3. Quero dizer, é uma ordem de magnitude mais lento, então onde é que desaceleração ridículo vindo? Bem, como tem sido o caso com a maioria todo o projeto de decisão que fizemos na classe ao longo dos últimos nove semanas há quase sempre essa compensação. Às vezes, apenas um espaço entre, por vezes, entre o espaço eo tempo, espaço, tempo e esforço de desenvolvimento, e de fato aqui, embora que salvou uma quantidade enorme de tempo, talvez potencialmente 10-20-30 horas tempo de desenvolvimento implementar o verificador ortográfico chicoteando-o em apenas 45 segundos com esta linguagem o preço que pagamos é que é uma ordem de magnitude mais lento, como resultado, e este é geralmente o caso com mais qualquer linguagem interpretada, PHP, Python, Ruby, Pearl ou outros em que se você estiver indo para executá-lo através de um intérprete e que ele leia o seu código linha por linha, de cima para baixo, da esquerda para a direita, intermediário que vai levar algum tempo próprio, eo que você estava sentindo aqui em 3 segundos ao invés de 0,3 segundo é o facto de não existir este intermediário que tem que literalmente interpretar o nosso código linha por linha, e Deus me livre se você está dentro de um loop com um enorme arquivo contendo centenas de milhares de palavras. Essa sobrecarga vai somar e somar e somar e somar. Para uma ferramenta como esta provavelmente não é a melhor linguagem a utilizar para a implementação um corretor ortográfico se imediatismo é de interesse para seus usuários e para você. Mas o luxo que temos em um momento é se você usar uma linguagem como PHP ou um monte de linguagens interpretadas no contexto da Web, para que o assunto, você tem o benefício que a internet é muito mais lento do que a maioria dos computadores. Você tem uma CPU GHz em seu computador, 2 GHz, talvez ainda mais nos dias de hoje. Mas a realidade está na internet há uma quantidade elevada de latência qual para um navegador para conversar com um servidor, mesmo que vimos na semana passada que isso é muito rápido, metade de um milésimo de segundo ou assim, que também acrescenta-se, e se você está baixando coisas como uma imagem ou uma foto no Facebook ou recebendo mensagens instantâneas sobre conversas do Facebook, Gchat ou semelhantes, todos estes tempos de ida e volta entre o navegador eo servidor de início para somar, o que torna a sua escolha particular de linguagem, em muitos casos não tão relevante, então você está muito bem usando uma linguagem um pouco mais lento como PHP ou Python ou Ruby mas para os quais existem upsides enormes para você e seus colegas e seus amigos, porque você pode implementar coisas muito, muito mais rápido. E além disso, você tem muito menos risco de falhas de segurança determinados. Não há ponteiros em PHP. Não há falhas seg que você pode facilmente induzir da mesma maneira que você poderia no C. Com C você é super perto do hardware. Com linguagens PHP e semelhante você é uma espécie de nível superior, por assim dizer, com um monte de defesas entre você eo que está realmente acontecendo dentro da máquina, e é apenas uma troca. Temos chegado ao ponto de ter essas mais modernas, linguagens de alto nível como PHP por causa das lições aprendidas em linguagens como PHP em C. Mas se você não entende o que está acontecendo debaixo do capô de todo esse tempo você certamente não pode tomar as decisões de design apropriadas, e, certamente, quando se trata de trabalhar em um lugar como o Facebook ou o Google ou qualquer um desses lugares que estão cada vez mais jogar com grandes conjuntos de dados mesmo se você voltar atrás e fazer PREMED e estamos trabalhando com alguns MD em alguns grande conjunto de dados envolvendo pacientes e médicos e como usar as ferramentas certas é imensamente atraente porque de outra forma a sua análise de um conjunto de dados pode levar segundos, ou pode literalmente levar horas. Este é apenas um exemplo, para não frustrá-lo com esforço, quanto mais foi em C, mas para ajudar a perceber que quando você implementar algo em C você realmente entender, ou em teoria, realmente entender como tudo é ou deveria estar trabalhando, e você tem o controle quase total sobre o que está acontecendo debaixo do capô, e com essas linguagens de alto nível você tem que abrir mão de mais controle para as pessoas que inventaram e estão sujeitos mais para suas decisões de design do que o seu. Mas se tomarmos como certo que o desempenho não é tão importante na Web por causa dessas outras questões, velocidades de rede são apenas um pouco mais lento do que as velocidades de CPU de qualquer maneira, assim podemos classificar de dar ao luxo de usar uma linguagem um pouco mais lento se os upsides são podemos desenvolver coisas 10 vezes mais rápido ou mais. Vamos ver como podemos começar a usar isso. Deixe-me ir para uma pasta entre os exemplos de hoje denominado frosh.ims, e este foi realmente pessoalmente motivado pelo fato de que a primeira coisa Eu escrevi para a Web anos atrás depois de tomar CS50 e CS51 era um site para o programa de mensagens instantâneas Frosh, esportes caloiro intramuros, que na época era bastante anos atrás, que no momento não havia nenhum site para o programa, mesmo que não houvesse uma Web, e em vez disso havia um inspetor em Wigglesworth em que se você quisesse para se registrar para vôlei ou futebol ou o que quer que você preencher um pedaço de papel. Você, então, atravessar o pátio. Você, então, bater em sua porta e deslize em sua porta ou a mão ao proctor um pedaço de papel com o seu nome, se deseja ou não que ser um capitão da equipe, o que o esporte que você queria fazer, eo que você estava dentro do dormitório Era uma espécie de uma maneira antiga escola de fazer as coisas, e este foi um nobre oportunidade de automatizar um monte de este processo. É só ir para o site. Você digita algo dentro Você recebe um email de confirmação, e pronto, está feito. Esta foi a primeira coisa que eu fiz, ainda que em uma linguagem chamada Pearl, mas é relativamente fácil de fazer em PHP, e isso é uma espécie de representante dos problemas que você pode começar a resolver quando você pode se expressar programaticamente e não tem que confiar em coisas como sites do Google ou Excel ou ferramentas que são entregues a você. Vocês agora têm a capacidade de fazer coisas como esta. Esta é uma versão super feio de um formulário, mas vamos usá-lo para o início da conversa em que este é aproximadamente o que a forma parecia anos atrás para nós para permitir que as pessoas na web para se inscrever para Frosh IMs. Pedimos para um nome, uma caixa de seleção para se ou não queria ser capitão, homem ou mulher, e então o que eles estavam no dormitório, e depois iriam enviar este formulário. Vamos primeiro olhar debaixo do capô o HTML que representa esta página. Deixe-me ir para froshims0, e como um aparte, para pset 7 Estou levando para concedido os diretórios e as pastas que estou colocando as coisas dentro Vamos levá-lo através exatamente onde a coisa tem de ir no aparelho, quais comandos mod você tem que correr, então não se preocupe com toda a detalhes estúpidos sincronização a partir do get-go aqui. Tudo bem, aqui está froshims0.php. Deixe-me rolar para baixo, eo que é curioso aqui, este é um arquivo PHP, mas o que está dentro dele, de forma clara? É um monte de HTML, e de fato, PHP origens realmente eram para ser uma linguagem Web-centric. Um momento atrás, usou-a para implementar o exemplo cerveja, as condições de exemplo, o exemplo Olá, e isso é bom. Você pode usar o PHP como uma linguagem de script onde um script é realmente apenas uma nomenclatura dada a um programa rápido e sujo ou algo que você escreve em um roteiro ou, mais geralmente uma linguagem interpretada. PHP é super útil para que, porque você já viu como rapidamente relativamente podemos chicote de programas em PHP. Mas foi realmente concebido para ser usado para a Web, e projetado para a Web no sentido de que notar-se aqui no início do arquivo Eu começam com