[Música tocando] COLUNA 1: Este é CS50 e este é o fim de semana de sete. Hoje é talvez onde nós realmente ensinando idiomas. Nós introduzimos no último par de semanas HTML e CSS, nenhuma das quais são linguagens de programação. E, de fato, embora nós não olhar para quase todas as tags que vem com HTML e quase todos das propriedades CSS que vem com, isso é meio-lo para HTML e CSS. Nós vamos apenas geralmente começar a assumir que compreender as idéias gerais de tags e atributos, e sendo enviado páginas do cliente para o servidor. Porque hoje nós começamos a olhar para outra linguagem de programação, PHP. Nós vamos fazer isso super rápido. Nós não estamos indo para ensinar-lhe PHP per se, muito como nós não aspirar a ensinar-lhe C, por si só, mas em vez de programação. E, de fato, um dos metas para este curso não é para ensinar-lhe C, ou HTML ou CSS, ou PHP, ou qualquer número de outros palavras de zumbido ou siglas, mas sim a ciência da computação e como programar fundamentalmente. E, de fato, hoje nós começamos a tomar aquelas rodinhas todo o ainda por voar através de uma linguagem PHP chamada, como se segue. Aqui está o que esta linguagem parece. Acontece que não há necessidade de uma função principal em um programa escrito em uma linguagem chamada PHP. De modo que já soa um pouco mais simples de C, com a qual estamos familiarizados. Acontece que se você quer declarar uma variável, você fazê-lo de forma quase idêntica a C. Mas há claramente uma diferença aqui quando eu declarar uma string, ou talvez duas diferenças. O que parece diferente? AUDIÊNCIA: O sinal de dólar. COLUNA 1: Sim, há dólar assinar, que nós nunca vimos antes. E o que está faltando? Sim? AUDIÊNCIA: [inaudível] COLUNA 1: Sim, não há nenhum tipo de dados. Assim, verifica-se que o PHP é o que nós chamar uma linguagem fracamente tipada, onde C é fortemente tipado. Vagamente digitado apenas significa que existem diferentes tipos de dados, há seqüências de caracteres e ints e carros alegóricos. Mas os números de computadores isso. Você o programador humano não tem que descobrir isso. Então tudo que você tem a fazer para declarar uma variável é sinal de dólar, o nome da sua variável e, em seguida, por exemplo, entre aspas, Olá mundo. Bem, isso é o que um condição parece em PHP. Quaisquer diferenças? Não. Então não é que estes são idênticos. E você pode ter menos sucursais ou mais ramos, mas as voltas de sintaxe exatamente o mesmo. Expressões booleana pode ser encomendados juntos. As expressões booleanas pode ser anded juntos. Você ainda tem switches. Mesmo se você não tiver usado Destes, estes existem em C e eles são funcionalmente equivalente em PHP. E, na verdade, eles estão em PHP um pouco mais forte. Em C, você só pode comparar certo tipos de dados como inteiros e caracteres, Considerando que, em PHP você pode realmente comparar cordas pleno desenvolvimento, sem ter de se preocupar com os ponteiros e semelhantes. Então aqui está um loop. Este é apenas pseudocódigo código, se você quiser. Mas é estruturalmente idêntico ao C. Aqui está o loop while, um pseudocódigo therefore-- idêntico ao C. Aqui está um tumulto enquanto loop-- idênticos. E assim há um tipo de este padrão pelo qual aqui há alguns outros sintática recursos que estamos realmente indo para ver. Na verdade, aqui é um bom PHP na forma segundo a qual, se você quiser fazer uma iteração sobre uma matriz, e você não querem saltar através do aros mentais e sintáticas de ter int i é igual a 0, i menos que n, i, mais que plus-- é apenas um monte de sintaxe irritante. Você pode falar um pouco mais de forma fluida para cada um números como número, onde neste caso Números do sinal de dólar, eu estou supondo, é como uma matriz de números chamados. E então eu estou supondo que o número, singular, vai ser uma variável. E o PHP vai fazer por mim como eu fazer uma iteração ao longo deste ciclo é, em cada iteração, ele vai atualizar o número da variável para ser o i-ésimo elemento em números, plural. Então ele só lida com tudo isso para mim. Não há colchetes, não sinal de dólar, não há ponto e vírgula. É apenas um pouco mais simples. Bem, se você quer um array, verifica-se que você pode fazer algo bastante semelhante ao C. A sintaxe é um pouco diferente. Mas aqui está uma matriz chamada dólar assinado números. E eu uso, em PHP, praça suportes, ao que parece. E nós estamos indo para ver estes novamente em JavaScript-- ainda outro idioma. Eu só usar a notação de colchete ter uma lista separada por vírgulas de inteiros, neste caso. Mas isso me dá uma matriz. Mas ainda mais poderoso em PHP, temos também o que são, em geral chamado matrizes associativas. E um monte de línguas tem estes também. A coisa sobre matrizes C é que os índices para uma matriz, a coisa que você usar em colchetes, através do qual você acessar elementos, deve ser o que? AUDIÊNCIA: [inaudível] COLUNA 1: Eles têm de ser números ou inteiros, especificamente de zero em cima. Bem, em PHP, e, ao que parece para fora, em outros idiomas, você pode começar a ter índices que não são numéricos. Mas eles são realmente palavras ou frases, de modo que, em vez de tente se lembrar onde algo é, ou armazenado em uma variável i, você pode realmente usar uma palavra e dizer isso-- você pode dizer uma palavra como essa. Então Citação sinal de dólar é a nome de uma variável aqui. Este é um pouco descolados sintaxe isso é associar dois valor de chave pares para essa variável. Especificamente, isso está me dando uma matriz que é de comprimento 2. Mas os índices não são 0 e 1. Os índices estão entre aspas símbolo e cotação de preço fecha aspas. E os valores desses índices, respectivamente, é FB no Facebook e $ 79,53, quando eu durar verificado um preço por isso. O que isso significa? Bem, isso significa que em vez de escrever código como este, onde eu costumava fazer algo como dólar sign-- ou melhor, em C Eu não teria sequer um sinal de dólar. Gostaria de fazer algo como citações e, em seguida, Eu faria suporte de i para chegar em algum arbitrariamente numericamente valor indexado. A partir de hoje em PHP, se você deseja obter em algum valor, que tipo de ter mais expressividade semântica. Apenas uma maneira elegante de dizer que pudermos apenas chamar as coisas o que são. E se você quiser começar em algo símbolo, agora você literalmente fazer citar símbolo unquote entre colchetes em vez de um mero número. Portanto, é uma conveniência agradável. E isso é uma espécie de tudo por agora. Há cachos de outros recursos no PHP. E, de fato, PHP vem com a pia da cozinha proverbial. Dezenas, centenas de funções vêm com PHP-- tantos mais que veio com C. E que não se destina a oprimir, mas sim ajudá- você perceber que nós não já não têm de escrever código que é uma espécie de aqui conceitualmente. Agora, podemos começar a tirar partido de muito mais avançados recursos que linguagens como PHP tem. Portanto, não precisa se preocupar com mover as coisas na memória. Nós não temos que se preocupar com malloc e todos estes nível inferior, detalhes poderosas que você lutará com, se não lutar com, pset5, mas você pode começar a logo tomar para concedido. Na verdade, vamos escrever um super- programa simples em PHP, como se segue. Eu estou indo para ir cabeça em CS50 IDE aqui, eo que eu vou fazer é criar um novo arquivo, que muito simplesmente vai ser chamado Olá dot PHP. Então, ao invés de ponto c, é vai ser chamado ponto PHP. E então neste arquivo, Eu posso começar a digitar. Mas acontece que o uma coisa que eu tenho que saber é que qualquer arquivo PHP em geral, precisa começar com uma sintaxe especial. Similares em espírito à HTML, mas, novamente, PHP é uma linguagem de programação, não uma linguagem de marcação. Assim, cada arquivo, e é uma espécie de olhar estúpido eu admito. Abrir suporte, ponto de interrogação, PHP. E isso é só o forma de linguagem de dizer: hey, computador vem aqui algum código escrito em uma linguagem chamada PHP. E então, no final do seu arquivo, você faz o tipo de espécie de oposto. Você não escreve PHP novamente, você só fazer ponto de interrogação, suporte de ângulo. E então qualquer coisa que você colocar dentro destas duas marcas, por assim dizer, será, ou deveria ser, o código PHP. Então, vamos fazer algo super simples. Eu estou indo para ir em frente e fazer impressão def, Olá mundo, barra invertida n, salvar. E agora a minha linha, eu vou fazer, fazer hello-- não, eu vou fazer, dot cortar Olá. Não, barra ponto, hm. Então, alguma coisa é diferente. E, de fato, esta é uma diferença fundamental entre PHP e linguagens como C C. foi uma chamada linguagem compilada. O que isso significa para C para ser compilado? Qual foi a implicação? Sim. AUDIÊNCIA: Escreveu-o em código de máquina para que pudesse ser executado pelo computador. COLUNA 1: Exatamente. Temos que primeiro convertê-la em chamada de código de máquina, zeros e uns, antes ele vai realmente ser executável e compreendido pelo computador. Intel por dentro. Pela CPU no interior do computador. PHP, pelo contrário, é o que é chamado uma linguagem interpretada, que significa que você não compilá-lo em zeros e uns, código de máquina, você, em vez deixá-lo como código-fonte. E você, em vez passá-lo como entrada para um programa, um intérprete que outra pessoa escreveu anos atrás, que o entende linha por linha, caráter para o personagem. Assim, em outras palavras, os seres humanos lá fora, escreveu um programa que vai olhar em seu código linha por linha, e descobrir o que o computador deve fazer, sem convertê-lo diretamente a zeros e uns. Então, se ele vê um loop for, este chamado intérprete vai ser como, tudo bem, eu deveria fazer algo de novo e de novo e de novo. O que devo fazer? Deixe-me olhar para a próxima linha. Deixe-me olhar para a próxima linha. E ele realmente interpreta linha a linha. Então, para executá-lo, eu não uso maquiagem. Eu não uso barra dot neste caso. I em vez do PHP, que é o nome de um programa, a.k.a. Um intérprete, que é pré-instalado em CS50 IDE, e agora eu preciso passar um argumento de linha de comando, que é simplesmente o nome do arquivo que eu quero interpretar. Ou mais casualmente, que eu quero correr. E se eu pressione Enter, não temos. Ola mundo. Agora acontece que eu def impressão usado deliberadamente para nós ponte de C para PHP. A maioria dos programadores PHP, como você vai ver, não se incomodam mesmo usando print def. Eles só usar uma função chamada impressão, que C não tem. E por isso, se eu executá-lo novamente agora, ele realmente comporta-se funcionalmente ao mesmo. Eu não posso usar o percentual s e i por cento e assim por diante, mas há outras maneiras em PHP de fazer isso. Mas esta é apenas a dizer que sintaticamente, exceto algumas coisas estranhas up superior, e alguns caracteres estranhos para baixo na parte inferior, os conceitos de agora programação nesta outra língua vão ser exatamente o mesmo. Na verdade, vamos fazer um outro exemplo. Então, eu estou indo para ir em frente e feche este arquivo. Deixe-me criar um outro que Vou ligar condições 1 ponto PHP. Portanto, não zero, porque o que eu fiz era eu olhei para trás, há algumas semanas, tivemos um arquivo chamado condições de 1 ponto C. E o que Que fiz foi converteu-o em minha cabeça, e, aqui no papel, e logo no curso de website, linha por linha em PHP. Assim, na versão C, fizemos algo como string s recebe obter string. Portanto, é um pouco diferente fazer isso em PHP. Em vez disso, eu só vou para fazer, ou melhor, I poderia ter feito int n recebe chegar int, neste exemplo anterior. Então, ao invés disso, eu vou fazer n obtém linha de ler, eu gostaria de um número inteiro, Por favor. Portanto, esta é apenas a minha indicação. E assim se vê, e Eu só sei que isto de ter lido ou visto a função antes, as linhas de função em PHP ler leva um argumento que é um prompt para o ser humano, e seu propósito na vida é ler uma linha de texto que ele ou ela em tipos. E depois que ele armazena texto para a variável n. E agora eu poderia querer fazer algo como eu fiz semanas atrás, em como semana um da classe. Se n for maior do que zero, então, eu vou para emprestar sintaxe que acabamos de ver, print def, você escolheu um número positivo, n barra invertida. Else if n é igual a igual a zero, eu sou indo para ir em frente e dizer: print def, você pegou de zero barra invertida n. Senão, o caso deve é claro ser, print def, você escolheu um número negativo. E certamente podemos implementar a lógica dessa coisa em um monte de diferentes maneiras, mas o ponto aqui é que sintacticamente, quase nada é novo. É apenas o sinal de dólar e uma nova função e linha de ler. Mas, fundamentalmente, o que há de novo Agora é que eu estou interpretando isso. Eu estou passando como entrada para outro programa. Então, se eu quiser executar isso, se Eu não cometer erros, Eu estou indo para executar PHP, de 1 ponto condições PHP, entrar, Eu estou indo para digitar o número 50, e vamos assumir por agora ele funciona. Uma vez que a lógica é a mesmo material que uma semana. Tudo bem, então isso é muito underwhelming, certo? Nós poderíamos fazer isso em qualquer número de línguas. Vamos fazer algo muito mais poderoso. Vamos problema acabamento definir cinco. Então, eu estou indo para ir em frente e fazer isso. Eu estou indo para criar um arquivo chamado dicionário dot PHP, e inclinado como você pode ser scramble para baixo lotes de notas, as notas só irá ajudá- se você está permitido para implementar problemas definir cinco em PHP. Mas vamos ver o quão rápido agora nós pode implementar esse mesmo conjunto de problemas. Então no dicionário dot PHP, eu vou assumir que já existe um arquivo no mundo chamado ortográfico. E, de fato, eu fiz isso com antecedência, e não vamos andar por esta linha por linha, mas se você estiver Curioso quer mais tarde e realmente para envolver sua mente em torno do diferenças entre C e PHP, literalmente comparar esse arquivo, Speller, a partir do código fonte de hoje que vou postar mais tarde hoje, contra p set cinco ortográfico ponto c que nós damos-lhe, e é quase a mesma linha por linha. Há mais alguns cifrões. Algumas funções são um pouco diferente. Mas é uma boa forma de sorte de ver como você traduzir de uma língua para outra. E é quase idêntico linha para linha. Mas eu estou indo supor que essa existe, eo que eu vou fazer aqui é tentar explodir o seu mente por reimplementar a totalidade do problema ajustou cinco maneira mais rápido do que você tem feito até agora. Assim, por exemplo, eu vou primeiro declarar uma variável global chamada size, e configurá-lo igual a zero. Agora isso não é muita economia. As probabilidades são que você implementou tamanho praticamente o mesmo, ou dica dica, vai esta noite ou amanhã, apenas usando uma variável global chamada tamanho, e defini-la igual a zero. Isso não é um particularmente Spoiler incrível. Então, quais foram os seus dados estruturas de escolha, aqueles de vocês que mergulharam em e ler a especificação, estruturas de dados que ter a maioria de vocês têm vindo a utilizar? Uma tabela ou tentar, talvez algumas variantes. Assim, a implementação de uma tabela hash, pelo menos, é uma espécie de um monte de linhas de código, certo? E nem todos eles pode ser funcional neste momento na semana, mas isso é bom. Porque em PHP, se eu quer uma tabela hash, feito. Certo? Então, essa variável que eu tenho apenas declarado é, obviamente, chamada tabela sinal de dólar, por a introdução antes. Mas eu realmente só quero, pelo no final do dia, uma matriz. Mas não um indexado numericamente array, porque isso é como duas semanas material, quando falamos sobre matrizes. Eu quero uma tabela hash. Mas uma tabela hash é realmente apenas uma maneira concreta de dizer: você quer uma matriz associativa. Você quer ser capaz de chaves associadas com valores. Chaves com valores. O que é um dicionário, realmente? Bem, é um monte de chaves. Palavras como maçã, pêra e banana, e todas estas palavras inglesas que entregar-lhe. E os valores que você está efetivamente inserir em seu dicionário ou são verdadeiras, ou a ausência, false. Em outras palavras, você está inserindo um monte de pares de valores-chave, maçã, verdade, pera, verdadeira, banana, é verdade. De modo que quando você recuperar ou olhar -se que os dados em sua tabela hash com a sua função de verificação, você é quer receber de volta uma resposta, sim, eu encontrei em meu complexo hash de tabela, ou não, ele não está lá, assim que você retornar falso. Então, para fazer isso, tudo que eu preciso é o de dados estrutura como propus antes. Eu só preciso ser capaz associar palavras como, entre aspas, símbolo, com um valor como, é verdade. Portanto, há a minha tabela de hash. Vamos realmente usá-lo. Portanto, há algumas funções Eu preciso implementar. Eu estou indo para ir em frente e morder fora de um tamanho função chamada. Ele não tem argumentos. Não tem que se preocupar com a palavra, vazio, em PHP. Eu estou indo simplesmente para retornar tamanho. E como um aparte, PHP tem esse detalhe minorly irritante, onde se algo é global, você tem que dizer a função em que você estiver usando que, hey, essa é uma variável global. Então, menor estupidez, mas você tem que fazê-lo, no entanto. Assim que sobre carga? Eu estou indo para implementar uma carga função chamada que leva, em nome de um dicionário, assim como no problema ajustou cinco. E antes de prosseguir, notar que eu não tenho foi bastante digitando as mesmas coisas. O que é obviamente diferente em PHP sobre como você declarar uma função contra C? Sim. AUDIÊNCIA: [inaudível] COLUNA 1: Nenhum tipo de retorno. E, de fato, esse é o caso, PHP na medida em que está vagamente digitado, Também é um pouco desleixado nesse sentido. Você não especificar como o programador o que esta função retorna. Você teria que realmente olhar no código para descobrir isso. Ou ler os comentários ou a documentação. Então prós e contras de estes tipos de decisões. Mas eu tenho que dizer a palavra-chave, a função. E quando aprendemos JavaScript em algumas semanas vamos ver a mesma coisa novamente, mas é a mesma idéia. O nome da função, o seu argumento ou argumentos ou a falta dela, e agora aqui é a implementação. Então eu vou cortar alguns cantos apenas para ser dramático por apenas um momento. Mas eu estou indo para ir em frente e dizer isso. Isto é como eu pode carregar um arquivo em um array. Há uma função em PHP chamado arquivo. Você entregá-lo o nome de um arquivo. Ele entrega-lhe de volta uma matriz, dentro de que é cada linha do arquivo. A partir de zero, um, no máximo a n menos 1 linhas. É isso aí, certo? Não há nenhuma f leitura. Não há nenhuma f get s. Não há por cento s. Não há dores de cabeça. Não há nenhuma feof. Todo esse material com o qual você foi lutar talvez, com p definir quatro e cinco, vai embora. Então, eu só ler essas linhas em o arquivo e, em seguida, você sabe o quê? Se eu quero iterar sobre essas palavras, Eu posso fazer, para cada um linhas como linha. Lembre-se que esta era uma espécie de inteligente caminho de iteração sobre uma matriz, índice pelo índice, e em cada chamada iteração a linha atual, linha sinal de dólar. E aqui eu estou indo para ir e dizer tabela, suporte, linha, fica verdadeiro. Em outras palavras, é assim que eu inserir em minha tabela hash em PHP. Eu digo tabela sinal de dólar, o que é a minha matriz associativa que foi vazio por a linha de código em cima. Então eu índice para ele não, utilizando um número, mas utilizando o literalmente palavra-chave que me interessa. Talvez seja a maçã ou pêra ou banana ou qualquer outra coisa, mas especificamente Estou indexação para ele como se eu proposto anteriormente. Eu tomo o nome do meu matriz associativa, e então eu usar entre aspas no colchetes com uma corda, em vez de um número real. E então é isso. A função de carga é feito. Uma vez que loop for, eu coloquei tudo na tabela de hash. Agora pequeno aviso legal, há uma algumas coisas que eu não precisam de correção. E a versão Vou postar on-line terá todas as nuances, mas é na maior parte apenas vai ser alguma verificação de erros e alguns pequenos ajustes. Mas isso é de fato a essência dele. Se eu agora quero implementar a função chamada verificar, que espera um palavra como seu argumento, como eu poderia ir sobre como fazer isso? Bem, eu estou indo simplesmente para dizer que, se dentro da minha mesa, a palavra de localização, Se estiver definido. Assim, se houver é-- na verdade, você sabe o quê? Eu vou fazê-lo em um pouco de pseudocódigo. Mas a ideia é a mesma. Se isso for igual a true, retorna true. Tudo certo. Else-- você pode tipo de ver onde este é going-- para retornar falso. Feito. Verificação é feita. Pretty nice, certo? E então o que é isso realmente chegar? E isso também, eu cortar alguns cantos. Olhe para a versão on-line para todas as ligeiras diferenças. Mas essa é a essência dele. Índice em seu matriz associativa, a.k.a. Tabela hash, ver se há um valor lá, se ele é definido como verdadeiro, e se assim for, return true. Então, nós temos reduzidos toda a complexidade. Assim, tipo de sopro da mente, certo? Eu não vou incomodar terminá-lo com descarga, porque em fact-- oh, você sabe o quê? Sim, vamos terminá-lo com descarga. Descarregar em uma tabela hash pode parecer como função de descarregamento, o retorno. OK assim que é de descarregamento. Porque não há nada para descarregar, certo? Não há nenhuma malloc. Eu não explicitamente pedir ao sistema operacional para qualquer coisa. Eu só comecei a usar variáveis. E assim isso também é uma manifestação de características de linguagens de alto nível. Então, novamente, a maior parte desse prazo temos lidado aqui com C. Super baixo nível. Você pode ver a memória do computador. Você pode tocar em qualquer coisa que você quer na memória RAM do seu computador, por bem ou por mal. Até aqui, nós vamos a dar-se esse poder. Mas, meu Deus, olha como muito menos código que eu escrevi. Na verdade, se eu não estava falando e falando sobre a minha digitação, que teria sido feito com Neste exemplo há cinco minutos. Então o que é o preço a ser pago? Bem, vamos dar uma olhada. Vamos dar uma olhada. Eu estou indo para ir em frente e correr CS50. Deixe-me ir primeiro em exemplos de hoje onde Eu tenho o diretório textos como antes. Eu estou indo para executar a solução que ele vem com problema ajustou cinco chamado Speller, que está na conta do CS50. E eu estou indo para executá-lo em algo grande como a Bíblia King James, apenas para que possamos realmente colocar o soluções do pessoal para o teste. Agora, por vezes, a internet é um pouco mais lento, um pouco mais rápido, Pode demorar um pouco para se deslocar. Mas levou um total de .56 segundos corrigir a ortografia da King James Bíblia usando a solução de equipe. Então, muito bom. O seu pode ser muito mais lento, e isso é totalmente bom. Mas é correto aqui. Então essa é a solução equipe. Se eu entrar e limpar a versão do PHP. E eu vou fazer um pouco como fermento espetáculo coisa. Nós vamos pegar o código que eu escrevi antes, por isso é perfeitamente correta. Porque o código que eu escrevi não vai para ser perfeitamente correto apenas agora. Mas se eu executar a versão do PHP, o que eu tenho que desistir de hoje? Levei cinco minutos para implementar p ajustou cinco, eu afirmo. Qual o preço que eu pago? Sim. AUDIÊNCIA: Speed. COLUNA 1: Speed. O que você quer dizer? AUDIÊNCIA: Vai levar mais tempo. COLUNA 1: Tudo bem. Vamos ver. Vai demorar mais tempo, não escrever, mas para executá-lo. Sim. Então, vamos tentar isso. Então aqui eu estou indo para ir em frente e fazer PHP do speller, e porque o arquivo de chamado ortográfico. Então eu não estou correndo o dicionário, recall, Estou executando o programa chamado ortográfico. Eu vou passar na mesma arquivo, King James o quinto. Ele está voando. Este poderia ser apenas velocidade à Internet, por isso não ler muito para isso. Mas ele se sente mais com certeza. 1,26 segundos. Agora que ainda é muito maldito rápido, certo? E a única razão que me senti como mais como três, ou quatro, ou cinco segundo, isso é só porque a internet estava sendo lento. O tempo de computador passado foi de 1,26 segundo, contra Acho 0,56. Assim, mais do que duas vezes mais lenta. Agora que ainda é muito danado rápido, mas é uma manifestação de fato, esse preço exato. Porque nós estamos interpretando no código linha por linha, e esse programa PHP é ler o meu top código para baixo, da esquerda para a direita, ele tem que fazer mais do pensamento. Tem que tipo de converter -lo dentro da própria correspondente à máquina código em tempo real, por assim dizer, embora os mecanismos são um pouco diferentes. Em vez de apenas para alimentar o Intel CPU os zeros e uns matérias- que entende nativamente. Então, absolutamente, mãos para baixo, nós pagamos um preço. E código escrito em uma linguagem como PHP tende a ser mais lento. Mas meu deus. Então agora quando eu soletrar verificar o meu arquivo, eu gastar um extra de 0,7 ou então segundos vs 20 horas para implementar um corretor ortográfico mais rápido, certo? É uma espécie de um trade-off. E se você está apenas começando p definir cinco, pode não ser de 20 horas. Pode ser muito menos do que isso. Mas é um trade-off, de verdade. E se você estiver executando o código em realmente grande conjuntos de dados, ou mesmo em hardware mais antigo, esses tipos de diferenças certamente pode somar. Quaisquer perguntas até agora? Sim. AUDIÊNCIA: [inaudível] COLUNA 1: Desculpe, pode você dizer isso mais uma vez? AUDIÊNCIA: [inaudível] COLUNA 1: Você está dando-se tempo. Bem, então sim. Está a poupar tempo, não ter de compilá-lo, se é isso que você está perguntando. E, de fato, em CS50, a maioria dos programas, mesmo que pode demorar um pouco para escrever, eles são relativamente curto. Algumas dezenas, algumas centenas de linhas de código, e assim eles compilar muito rapidamente. Mas quando você começa escrever programas maiores, como se você for Microsoft ou se você estiver Google e escrever realmente grandes programas em C, ou C ++ ou semelhante compilado línguas, poderia levar muitos segundos, ou mesmo minutos ou mais para compilar milhões de linhas de código. E há também, que diferença vai somar. E, de fato, uma vez que hoje transição, mesmo dia hoje, para programação web utilizando PHP, você é indo encontrá-lo apenas tanto mais agradável para escrever código quando você não tem que fazer estes estúpidos medidas como a mudança para o seu terminal janela, tipo de make Olá, re executá-lo, recarregar a janela. Apenas tantos estúpido etapas que mecânicos apenas ficar no caminho de fazer o interessante, o trabalho divertido. E, de fato nós jogar isso fora com PHP. E nós podemos interagir com mais rapidamente. Sim. AUDIÊNCIA: [inaudível] COLUNA 1: Claro. Posso esclarecer o que significa ser interpretado? Quando você compilar uma linguagem como C, ele vai para baixo como dissemos à máquina código, zeros e uns. E a Intel decidiu anos atrás, que certos padrões de zeros e uns representam disso, ou subtração, ou impressão, ou outras operações básicas. No mundo de uma linguagem interpretada como PHP ou JavaScript, ou Python, ou Ruby, ou cachos de outros, em vez alguém escreveu um interpreter-- neste caso, É também chamado de PHP, idêntico ao Nome do language-- que, essencialmente, tem um grande laço nele que itera ao longo de todas as linhas do código que eu alimentá-lo como entrada, como Olá dot PHP, ou dicionário dot PHP. E então você pode pensar em sua grande laço como tendo uma série de condições. E essas condições dizer, se o humano tem escrito a palavra-chave para, começar a fazer o seu código de novo e de novo. Ou se o humano tem escrito a linha de código, se, apenas a executar a sua próxima linha condicionalmente. Então, é realmente como interpretar em um sentido humano, linha por linha, e que apenas leva tempo. Leva sobrecarga. E o que é um preço-- boa question-- nós pagamos. Então vamos fazer outra demo isso é um pouco mais dramático. Há, eu diria, um estádio isto em 90% de probabilidade de falhar horrivelmente, mas você vai se surpreender com 10% de probabilidade. Assim, a cada ano nós tentamos para fazer isso, pelo qual tentar escrever um programa que passa por conjunto de problemas zero, para as quais você tem apresentados os números de telefone e um monte de outras informações demográficas, e nós programaticamente enviar-lhe uma mensagem de texto. E então o telefone de todos começa a apitar ou vibrando, e é apenas surpreendente, porque bem, olhar para o que os computadores podem fazer. Isso raramente funciona corretamente ao que parece, em grande parte, porque eu normalmente ficar na lista negra pelo Gmail ou algum outro serviço para realmente tentando fazer isso em escala. Mas engraçado é também, desde que Não temos todos aqui hoje, diversão fato a última vez que o tempo tentei isso há dois anos, Eu acho que eu escrevi um programa que se sentou em uma iteração de loop sobre todos os alunos da turma, e cada um deles uma mensagem de texto, e ele disse algo como: por que não está na aula? Amor, CS50 bot. Você não tem idéia de quantos se desculparam e e-mails espécie de dolorosas Recebi como resposta do n menos 100 pessoas que não estavam aqui aquele dia. E ainda mais engraçado, mais vergonhoso story-- você sabe, vamos colocá-lo lá fora. É já em vídeo de alguns anos atrás. Assim, em breve você vai ver-me escrever um loop for, em que é muito fácil escrever um bug em que para circuito, de tal modo que pela primeira vez através do laço, você enviar uma mensagem de texto. A segunda vez através do laço I deveria ter enviado mais uma mensagem de texto, e, em seguida, mais um texto mensagem, e mais um. Mas acontece que se você cometer um erro de digitação Durante a programação, às vezes você pode escrever programas que enviam um mensagem de texto, em seguida, duas mensagens de texto, em seguida, três mensagens de texto para todos que já recebeu uma mensagem de texto. E como você sabe, fazer alguma coisa, mais alguma coisa, algo mais, mais alguma coisa, é grande O de um lote de mensagens de texto, ou n ao quadrado, ou $ 0,10 em uma mensagem de texto, US $ 20.000. Felizmente eu pressione Control-C antes que aconteceu, mas eu devo pelo menos um de seus antecessores $ 20 para o 200 algumas mensagens de texto estranhas que, não só foi para o seu telefone, mas também era como um telefone flip mais velho por isso gostaria empurrado para fora de seu memória qualquer outro texto pessoal mensagem que ele tinha realmente chegado. Portanto, temos um objetivo hoje, para não fazer isso. Talvez ativar o modo avião. Tudo certo. Então, vamos entrar em um aqui callled-- programa que chamarei texto dot PHP. E com antecedência, eu tenho dois arquivos aqui. Eu fiz um arquivo para apenas pessoal, que tem todas as informações do pessoal, todos os nomes no site do curso. E então por enquanto eu só colocar alguns números falsos 555-1212. Assim, estes não seria realmente ir a qualquer lugar. Mas observe o interior deste arquivo CSV, que falamos brevemente antes no contexto de arquivo IO. O que é um arquivo CSV? Separados por vírgula variáveis. E isso é como uma espécie de muito banco de dados leve, se você quiser. Há uma espécie de tipo de quatro colunas neste arquivo, e não irregular, mas essencialmente as vírgulas representam colunas no arquivo. A primeira coluna é o TF ou o nome do CA. A segunda coluna é o seu sobrenome. Terceira coluna é o seu número de telefone. E quarta coluna aparentemente é-- quarta coluna é, aparentemente, o quê? OK, por isso é seu portador. Então, Verizon, ou Sprint, ou que não. E se eu misspoke anteriormente, CSV. Valores separados por vírgula CSV é aqui. Então, o que eu posso fazer com isso? Bem, este é apenas um arquivo de texto grande, e é uma espécie de muito tempo, certo? Como é que isto vai ser meio chato. E verifica-se, porém, que, se eu quiser enviar uma mensagem de texto para, vamos Alex dizer aqui. Deixe-me entrar em meu navegador e sair do modo de tela cheia só assim eu posso alternar. Acontece, vamos ver, se eu entrar aqui, e fazer login no Gmail, tudo bem. Não olhe para esta parte. Assim eu começo a ver. é claro que o livestream pode ainda ver o que estou fazendo. Tudo certo. Então aqui é apenas com Gmail O relato de John Harvard. Então, se eu quiser enviar uma mensagem de texto para Alex, Eu posso, claro compor uma mensagem. E ao que parece, e eu tenho testei com Alex antes aqui, assim você pode acrescentar um certo domínio nomear para os números de telefone das pessoas, porque não existe no mundo coisas chamado de SMS para enviar e-mail gateways. Que é uma maneira elegante de dizer tudo de nós que têm telefones celulares que têm números de telefone, é claro, há provavelmente para a sua operadora, um sufixo como em certa Vtext.com para Verizon mensagem de texto dot com, que você pode acrescentar ao seu número de telefone pessoal próprio, e, em seguida, você ou amigos, ou seus pais podem texto que naquele endereço particular. E Verizon tem um servidor, um e-mail servidor, que ao receber este e-mail, olha para a parte numérica e, em seguida, usa qualquer magia especial indústria eles têm de realmente enviá-lo para fora sobre as ondas de rádio para o seu celular particular telefone. Agora, isso é bom porque eu não faço realmente sabe como enviar uma mensagem de texto ou escrever código ainda para o meu telefone celular, e você pode fazer exatamente isso para um projeto final, mas por enquanto tudo Eu tenho é o meu laptop aqui. Então, eu quero iterar que CSV arquivo, linha, por linha, por linha, por linha, agarrar cada um dos números de telefone do pessoal, e sua operadora e programaticamente, concatenar, ou seja, ligar o telefone número com o nome de domínio apropriado e, em seguida, enviar um e-mail. Então, isso é um monte de etapas. E boa sorte de fazer isso em C. É um pesadelo de uma situação para abrir um arquivo, lê-lo linha, por linha, por linha, como você estão vendo, ou pode ver em breve com conjunto de problemas cinco, se não problema definir quatro, e em seguida para concatenar dinamicamente duas cordas juntos, porque em C, a tomar duas cordas e combiná-los, o que você faz minimamente precisa fazer mais provável? Você precisa declarar mais memória, certo? E perguntar, malloc, posso ter mais memória? Portanto, posso colocar metade deste aqui, metade deste aqui. É apenas tantos passos. E por esse ponto que você perdeu interesse na pequena demonstração estúpida onde você faz telefone beep de todos. Vamos fazer esse tipo de PHP estilo, pelo qual apenas começar a utilizar mais do que pia da cozinha. E as idéias são fundamentalmente o mesmo, mas nós não temos que preocupar-se muito muito sobre esse nível inferior. Então vamos ver como eu poderia vai fazer sobre isso. E só assim que eu não faço repetir os erros do passado, Eu escrevi algumas notas para mim aqui. E vamos ver se consigo Caminhemos através de algumas das etapas fundamentais, e, em seguida, por causa do tempo nós vamos talvez alguns cantos cortados no final. Eu estou indo para ir em frente e fazer aberto suporte de PHP para começar este arquivo. E eu estou indo para ir em frente e fazer isso. Identificador de arquivo, como você vai em breve, na verdade, chama uma função chamada f aberto. E lembre-se isso abre um arquivo. E a citação, fecha aspas, r significa que, mais uma vez? Basta abri-lo para leitura. Agora em p conjunto para, você fez isso. E lidar poderia ser qualquer coisa, fu, bar, bas, qualquer nome de variável. Mas, geralmente, um computador cientista chamaria um arquivo aberto, dando-lhe um identificador de arquivo, algo para agarrar por assim dizer. Eu só vou fazer alguns verificação de erros. Portanto, se o identificador é falsa, assim como no C, eu vou fazer algo como: não pôde abrir arquivo, barra invertida n. E então eu só vou para ir em frente e sair. E verifica-se, em PHP, Eu não estou dentro de uma função. Não há nenhuma função principal aqui. Então eu não voltar, per se. Eu sair. Que é essencialmente a mesma coisa. E eu estou saindo com um y provavelmente. Uma significa apenas um erro de algum tipo. É diferente de zero, por isso é um erro. Tudo bem, então se eu estou aqui agora no meu programa eu abrir o arquivo. Eu estou indo para ir em frente e declarar uma matriz denominada endereços, e em C Eu teria que saber o tamanho da matriz de antecedência, certo? Ou eu teria de declarar esta é um ponteiro, e depois usar malloc. E, em seguida, cada vez que leio através de outra linha no arquivo, Eu estou indo a necessidade de malloc mais memória, malloc mais memória. Isso é uma dor no pescoço. E, felizmente, PHP e Ruby, e Python e JavaScript, que vai crescer suas matrizes para você automaticamente. Não mais malloc. Não há mais o gerenciamento de memória. O computador cuida disso. Mas o preço que você paga. É um pouco mais lento. E para um programa como este nós não vamos notar. Nós vamos enviar 100 mensagens de texto. Por exemplo, não vai sentir isso. É realmente só começa a importa idioma de sua escolha quando seus dados ou seus programas obter muito, muito considerável, como será o caso, de modo mais com nosso material baseado na web. Mas, por agora, vamos seguir em frente. Enquanto despeja há uma função em C chamada f obter CSV. Arquivo obter CSV, que leva um identificador de arquivo como argumento, e ele passa, em seguida, linha por linha, por linha, para ler em uma fileira. Então ele só lê uma linha de texto do arquivo. Mas o que é agradável sobre esta função, não apenas entregar-me uma linha de texto. Ele procura por essas vírgulas, e analisa a linha. E para analisar a linha significa dividir que em determinados valores neste contexto. Em outras palavras, o sinal de dólar linha é uma variável que é vai me dar um monte de índices. Este vai ser o primeira coluna na minha CSV. Este vai ser o segundo coluna, este vai ser o terceiro, e este vai ser o quarto. Porque recall, e não o Excel cooperar a última vez que fiz isso, mas se eu baixar equipe dot CSV. Opa, não renomear. Se eu baixar equipe dot CSV, e tente abri-la, Eu já registered-- oh I não fez a atualização Excel desde a última vez. Você vai ver que, em equipe dot CSV, eu tenho quatro colunas. Então, quando eu li no primeira linha para Abby aqui, dólar sinal linha 0 é Abby, dólar sinal de linha é Lyons, dólar sinal linha dois é o número dela, e, em seguida, portadora de seu telefone. Então, isso é tudo. E isso é bom, porque eu não tem que descobrir agora fora onde todos estes são realmente vírgulas. Então, eu estou indo para ir em frente e fazer isso, dado que a definição, Eu vou dizer que seu nome é em suporte de linha zero, como prometido. E eu vou grab-- e na verdade, você sabe o quê? Eu não estou indo para se preocupar o seu nome, neste caso. Eu vou mantê-lo simples. Eu vou fazer o seu número é em suporte de linha dois, eu acho. E seu portador estava em onde? Fileira de três andares,. Então, nada de novo lá. É apenas de zero a indexação em uma matriz. E agora, eu vou fazer o seguinte. Se o transportador é igual a igual a AT & T-- Eu só vou ter um loop-- Eu quero criar um e-mail endereço que se parece com isso. Vai ser 617-555-1212 no, o que é, text.ATT.net, é o que eu quero fazer. Então, como posso fazer isso? Eu vou fazer o seguinte. Seu endereço vai ser o seu número, e agora, deixe-me ir em frente e fazer isso. Esta é uma sintaxe descolados. Eu poderia fazer o truque por cento s, mas eu realmente pode apenas fazer isso. Então isso é uma coisa PHP, mas vamos considerar o que estou fazendo. Dólares assinar endereço em à esquerda, apenas uma variável. Dê-me uma variável. Eu não tenho para especificar o tipo. PHP vai descobrir isso. No lado direito, qual é o tipo de dados dessa coisa toda em do lado direito? Parece que uma string, porque não há duplo cita na extrema esquerda e extrema direita. Agora há alguns descolados nova sintaxe aqui. Há as chaves, eo número cifrão. Mas dê uma adivinhar o que é que a sintaxe provavelmente dizendo PHP para fazer por mim? Sim. Basta inserir o valor lá. Portanto, não por cento s. Nós poderíamos usar impressão f ou s f impressão ou algo parecido, mas PHP e um monte de linguagens de alto nível, você vai ver que você poderia fazer a mesma coisa funcionalmente, talvez seis maneiras diferentes. E assim começa a se tornar uma questão de projeto ou estilo. Portanto, esta é apenas uma maneira olhar enigmático de dizer, me dê um endereço de email, mas o plug-in em número entre essas chaves. E as chaves não vai acabar no endereço final. Agora podemos ignorar alguns dos estas linhas por causa do tempo. Assim, se um transportador é igual é igual a verHorizon-- whoops, Verizon-- eu quero fazer algo muito semelhante, onde o endereço fica, Citação, fecha aspas, número em text.ATT.net. E então eu posso fazer o mesmo tipo de coisa para o resto das operadoras. Mas eu vou fazer ponto, ponto, ponto por agora. E agora vamos supor que Eu quero adicionar matriz, empurrar. Eu quero adicionar ao matriz, chamados de endereços. Este endereço, isto é como você acrescentar algo a uma matriz em PHP. Você não precisa fazer malloc. Você não tem para redimensionar a matriz. Você acabou de dizer matriz, empurrão. O que você quer para o conjunto push-- você quer empurrar algo sobre? Endereços. O que você quer empurrar para endereços? Endereço. E, de fato, se você realmente quer ser inteligente, um pouco de açúcar sintático para isso, por assim dizer, que significa apenas como você pode fazer isso no a maneira mais bonita, seria para fazer isso. Isto também tem o efeito de crescimento a matriz de endereços por um tamanho, e, em seguida, que plop adicional endereço de e-mail para ele. Sim. AUDIÊNCIA: [inaudível] COLUNA 1: Um erro de digitação no mais se-- oh, portador. Está ok. Ele também não vai gostar do meu fracasso em implementar parte deste programa mais tarde. Mas obrigado por captura. Mais um bug. Obrigado. Queremos que este seja Vtext.com. Sim. Tudo certo. Então onde é que isto nos deixa? Nós escrevemos o código para abrir o arquivo. Temos um loop para iterar sobre as linhas no arquivo. Nós temos código que adiciona ao meu matriz, um de cada vez, o correctamente endereço de e-mail formatado. Então, tudo o que realmente falta é enviar um e-mail para cada uma dessas pessoas. Então eu fui em frente e preparou-me como se segue. O que eu vou fazer aqui é-- e vamos vá em frente e pular para algum código real, que se parece com isso. Então aqui é o pré-cozido versão que eu escrevi anteriormente. E notem que eu terminei implementação de Sprint. Eu terminei de execução T-Mobile. Eu terminei a implementação Virgin Mobile. E eu vou me desculpar com antecedência. Há algumas transportadoras que alguns alunos da turma tem que eu não me incomodei enumerando na condição de se aqui. Assim, nem todos os textos vão sair. Mas vamos ver o que mais eu preciso fazer. Eu fechar o arquivo, basta como em p definir quatro. E esta é a nova sintaxe. E nós vamos ver um pouco bit desta ao longo do tempo, especialmente com p definir sete e oito. Mas esta é a sintaxe para criar um tipo especial de estrutura. Acontece lá fora, é uma biblioteca que vem com PHP, chamado mailer PHP. Seu propósito na vida é programaticamente enviar e-mails. Código É alguém escreveu que torna mais fácil para nós para enviar e-mails, por isso não tem que manter indo e voltando para o Gmail, e colando em endereços de email das pessoas. Há um monte de linhas aqui que, honestamente, eu meio que copiou e colado a partir da documentação. E, de fato, se você estiver Curioso, eu deixei tudo das URLs da documentação no código que nós vamos postar mais tarde. E note que, entre as coisas que estou fazendo é, eu estou dizendo a esta biblioteca, usar o servidor do Gmail, certo? SMTP nós conversamos brevemente sobre quando nós estavam em Yale sobre ser correio simples protocolo de transferência. É que o protocolo servidores usados ​​para enviar e-mail, e that's-- Gmail tem um desses. Um porto, este é o número da porta TCP. É bom se você não vi 587 antes. Só sei que a partir da documentação. Aqui está o meu nome de usuário. Vou usar o bot CF50. E em um momento, eu estou indo só para digite a senha atual do bot. E, em seguida, para baixo aqui, observe o que permanece. Eu definir o meu endereço de para ser bot no CS50.net. Eu acho que não vai se arrepender enviando uma mensagem de texto para 800 pessoas que diz, sinto sua falta, bot amor CS50, talvez para aqueles que não poderia fazê-lo hoje. E então, em linha 76, o que eu faço? Este tipo de olhares como C. Portanto, para i é igual a 0, n equals-- agora contar é nova. Acontece que, se você deseja obter o número de coisas em uma matriz, você não tem que se lembrar mais. Você pode apenas pedir a um função chamada contagem, e ele vai te dizer quantas endereços estão nessa matriz. E então eu estou indo para adicionar o endereço para o e-mail. E eu sei que isso usando a documentação. Há uma função de endereço add. E agora notar que há é uma peça de sintaxe. Nós já vimos isso antes em C. similares em espírito. Você pode pensar em sinal de dólar O correio como a variável, o que ela é. Mas é uma estrutura dentro de que não são apenas propriedades, variáveis ​​se você quiser. Mas verifica-se que em PHP, que é uma programação orientada a objeto linguagem, como Java, se você tomou APCS. Sinal de dólar mail, se você quiser a-- Ele também tem funções no interior do mesmo, ou métodos. Então, isso quer dizer que mailer especial PHP biblioteca, se eu tenho uma variável do mesmo, se eu quero chamar uma função que que vem com biblioteca, para fins de hoje, só sei que você use a notação de seta. Não há nenhuma notação de ponto. É apenas a seta. Mas isso não é um ponteiro. É apenas emprestado de sintaxe do C. Então chame adicionar o endereço dentro de objeto desta biblioteca ou variável. Tudo certo. Esta é a linha mágica. É assim que eu enviar um e-mail. Isto é o equivalente da abertura Gmail, digitando-o para fora, e bater enviar. Mas está indo para enviar uma vez enviar e-mail para este endereço, com este corpo, do bot CS50. E agora a linha de chave. Esta linha foi ausente em 2011 como quando eu penso que este último tentou. Essa linha há, naturalmente, limpa os endereços. Então, logicamente, se eu não limpar o endereço após cada iteração, o primeiro enviar e-mail ou mensagem de texto vai para Alice, o segundo vai Alice e Bob, o terceiro vai para Alice e Bob e Charlie, daí o erro muito caro Eu fiz esse ano. Então vamos ver. Há alguma pergunta antes de enviar a todos um texto mensagem com 10 por cento de probabilidade? Alguma pergunta? Tudo certo. Vamos me entrar aqui e mudança a senha para o que deve funcionar, provavelmente vai ficar na lista negra pelo Gmail. Assim, eles não podem ir todos para fora, uma vez que provavelmente não gostam de nós o envio de e-mails 800 em um loop de uma vez. Desde que não é comportamento particularmente humano. Oh, eu vou mudar uma coisa. Lá em cima, eu estou indo para sent-- alterar o arquivo para estudantes dot CSV. E eu não vou abrir isso, mas esta é uma arquivo CSV idêntica não 100 funcionários, mas apenas 800 alunos, de Harvard, Yale porque Tem outubro recesso esta semana. E parece que um tipo de coisa idiota a fazer ao texto todos eles por que motivo eles não estão em sala de aula no feriado. Está ok. Apenas estudantes de Harvard hoje dentro desse arquivo. E agora vamos voltar na minha janela de terminal. Estou um pouco nervoso. OK, então agora eu estou indo para ir para o diretório, e dot texto PHP PHP. Como cerca de um voluntário corajoso? Então eu não quero isso para mim. OK, vamos lá para cima. Qual o seu nome? MAYA: Maya. COLUNA 1: Maya. Vamos lá para cima, Maya. Tudo certo. Vamos ver se isso funciona. Eu coloquei meu próprio endereço de e-mail no file-- meu próprio número de telefone no arquivo, de modo que espero que eu vou conseguir um também. Bom te conhecer. MAYA: Da mesma forma. COLUNA 1: Então tudo que você tem a fazer é pressione Enter para enviar 800 mensagens de texto, se eu não estragar. Agradável. Pode demorar um pouco, estatisticamente, até chegarmos a um e-mail address-- uma mensagem de texto que é no quarto agora. Vamos relaxar e ver. AUDIÊNCIA: [ASSOBIO] COLUNA 1: Ah, sim. AUDIÊNCIA: Oh, gotcha. COLUNA 1: Para esta laços é-- não é lento por causa do PHP. Esta é lento porque Gmail é nós de estrangulamento e não deixar-nos enviar mais de como um e-mail por segundo. Qualquer coisa? Isso foi uma coisa difícil para mim para testar a casa com apenas eu e meu um telefone, então. É que espero que a partir do bot? Sim? Não? Diga sim. Não? É de um amigo? Desajeitado. ESTÁ BEM. Quase certeza de que está funcionando embora. Uh oh. Eles black-- oh, espere um minuto. Oh, você sabe o quê? Um momento por favor. Apenas Maya e I-- Mia, foi? MAYA: Maya. COLUNA 1: Maya, vão sabe o que eu fiz de errado aqui. Oh, espere um minuto. Eu acho que eu apenas enviou 100 mensagens de texto para 555-1212. Estar por. Eu não posso vencer qualquer ano. ESTÁ BEM. Maya? Corrigir isso na pós-produção. Dammit! Na sequência de endereço. OK, stand by. Desculpe. É doloroso a cada ano. OK, um momento. Isso é bom. Eu estou indo em vez de fazer isso. De endereços Impressão. OK, stand by. Imprimir endereços, suporte i. Sim, eu gosto disso. Dólar sign-- OK eu vou explicar o que eu sou fazendo em um momento, depois que eu executar este. Todo ano. OK, aqui vamos nós. Eu tenho apenas-- e eu não quero para mostrar o número de telefone de todos, mas Maya pode confirmar com um aceno de cabeça, que ela vê todo mundo número de telefone na classe que eu vou copiar para um programa chamado Gmail. E se no Gmail, o que queremos dizer? Sinto sua falta. Amor-- isso não é de mim. Eu ainda nem chegou enviar ainda. Então, vamos em frente e fazer isso, se eu posso fazer zoom. ESTÁ BEM. Então, eu estou usando um programa chamado Gmail agora. Se Maya, você gostaria de clique no botão Enviar, vamos simular o que código deveria ter feito. Qualquer coisa? [BIP] AUDIÊNCIA: Yep. COLUNA 1: Sim? Salvação? AUDIÊNCIA: Yep. COLUNA 1: Miss você. E eu vou mandar para fora o resto. Mandei metade porque eu não acho que Gmail deixaria aqueles passar. Então lembre-se, hoje é o dia que você aprendeu que eu posso usar o Gmail. Isso foi horrível. Um grande aplauso para Maya. Obrigado. Tudo bem, então. o quê [BIP] Temos alguns sinais sonoros, sim? Tudo certo. Agora eu estou indo para obter 700 realmente e-mails infelizes costas dos colegas de classe. Assim, pelo menos vamos ver se isso valeu a pena. Então, o que deu errado? Eu vou descobrir o que deu errado após o fato, mas basta olhar o quão fácil que era para fazer isso em PHP. Então o que podemos realmente fazer agora que temos esta expressividade do PHP. Isso foi-- que foi horrível. Tudo certo. Então era isso que deveria ter saído. Isso me estava testando esta manhã no meu telefone, screenshot real de meu telefone. Mas agora vamos considerar o porquê na verdade estamos introduzindo todas essas coisas em primeiro lugar. Assim, o objetivo não é escrever esses programas que são escritos na linha de comando, certo? Então eu escrevi um simples Olá programa, eu escrevi um pequeno programa que faz condicionais, e usada uma linha de leitura e assim por diante. E, em teoria, eu só escrevi um programa que enviou para fora 800 mensagens de texto, mais ou menos 800. E que o programa era tudo ainda correm na linha de comando. E isso, claro, é não a web, certo? A meta agora é começar a usá o que eu reivindico é uma mais fácil de usar língua, ouso dizer que a mais linguagem poderosa em termos dos recursos que vêm com ele, para começar escrevendo código que gera páginas web. Assim última vez e, na semana passada, nós falamos sobre HTTP e HTML. E o que é agradável sobre HTML é que não é apenas texto puro. E o texto é certamente algo que você pode imprimir, literalmente, chamando a impressão f função ou a função de impressão. E, de fato, é o que é PHP agora vai nos permitir fazer. Assim, entre os exemplos ter no código-fonte de hoje, Além disso a parte do código que eu coloquei lá em cima há pouco, temos programas como este, por exemplo. Froshims, ou Freshman Intramural Sports, era, na verdade, um dos primeiros extracurriculars Eu me envolvi com anos atrás. E meu companheiro de quarto e eu, com algumas outras crianças no campus, usado para executar o programa froshims. Estou recebendo minhas mensagens de texto agora. Agora, para que, de volta ao dia, de modo que este 1996 foi mais ou menos, houve uma internet, mas não havia lá process-- houve website para froshims. E por isso, se você queria para se inscrever para futebol ou vôlei ou qualquer outra coisa, você iria preencher essa coisa chamado um pedaço de papel, e você iria atravessar Harvard quintal, e você deslize- no slot de correio do Proctor, que estava em Wigglesworth, um dos dormitórios. E isso que você estava registado. E ele ou ela faria em seguida, compor um e-mail para você manualmente, assim como eu apenas fiz aqui com Maya, e então você será confirmado como tendo sido registrado. Portanto, este foi como baixo pendurado fruto, por assim dizer. Era uma espécie de estúpido que que estávamos usando para este papel. Eu queria que nós fôssemos capazes apenas para ir em um site, ou ter os calouros ir em uma website, cadastre-se para o esporte, e apenas automatizar um monte dessas coisas colocando seus nomes e e-mails e assim por diante numa base de dados. E, de facto, a primeira versão do site, usando HTML de super feio, pode ter parecido algo como isto. Na verdade, foi, ironicamente, mais embaraçoso bonito do que esta de volta então. Mas eu usei uma linguagem de programação. Não PHP, mas sim chamado Perl, que é uma linguagem mais velho, mas muito semelhante em espírito. E eu apenas completamente ensinou-o a mim mesmo. E ele me levou um tempo para descobrir isso, fazendo muitas perguntas de amigos. Mas as idéias lá eram exatamente o mesmo. Porque o que o PHP foi realmente concebido para não é o material de linha de comando nós apenas jogado com, mas para programação web. É realmente amarrado em sua característica definida para a web, como se segue. Este é froshims. E se eu quisesse cadastre-se desta forma, isso é muito feio, certamente, mas deixe-me ir em frente e ser um aluno menos confortável, e qualquer esporte para Matthews, clique em Register. O que eu quero ser capaz de fazer é enviar informações de um formulário, não para o servidor do Google como fizemos da última vez, completamente batota usando seu backend, I quero implementar meu próprio código backend. O que significa escrever PHP código que vive em uma URL que os dados do formulário pode ser submetido. E então o seu código, escrito em PHP em um servidor, pode então responder a essa entrada do usuário. Como o seu nome, ou nível de conforto, ou dormitório, e, em seguida, fazer algo com ele. Neste caso, eu apenas estupidamente imprimiu como texto, que não é tão bonita. Mas você poderia certamente imaginar, se você conhece HTML, e em breve você vai saber como gerar HTML com impressão f, e de impressão, e funções similares, certamente você pode gerar uma página web mais bonita que diz: David hey, você agora está registrado. Você é um menos confortável estudante de Matthews, certo? Você pode apenas usar um monte de% ses, ou as chaves e sinal de dólar notação eu usei há pouco, a gerar texto que é mais user friendly do que este. Então vamos dar uma olhada em um presente de arquivo. Froshim de zero ponto PHP parece com isso. Quando eu recarregar CS50 IDE, de zero froshim se parece com isso. Este é nulo froshim ponto PHP. E o que você observa sobre este arquivo? AUDIÊNCIA: [inaudível] COLUNA 1: Desculpe, um pouco mais alto? AUDIÊNCIA: [inaudível] É tudo em HTML. E, de fato, que é, porque o que é interessante sobre o PHP é que ele foi concebido ser, para melhor ou para pior, entremeadas com código HTML. E, de fato, embora esta arquivo, froshim de zero ponto PHP, tem um comentário PHP no topo dele, é tudo apenas HTML. Mas por outro lado, se eu abrir, vamos digamos, cadastre-se de zero ponto PHP, que só tem um grande comentário no topo. Isso também parece quase inteiramente como HTML, exceto para o quê? Line, o que, 21 looks um pouco estranho. Mas repare que eu estou entrando no modo de PHP com o suporte aberto ponto de interrogação PHP. Então eu tenho algumas coisas. E, em seguida, no final da linha Eu tenho quase, ponto de interrogação PHP. E é isso que eu quero dizer com misturados. Você pode escrever HTML que você acabou deseja que o servidor para cuspir. Mas se você quiser fazer algo parcialmente dinâmica através da página, como inserir o meu nome ou dormitório ou nível de conforto, Eu posso usar uma função como a cópia r, que é imprimir recursiva, o que significa apenas imprimir esta variável, formatá-lo como você quiser. Não é realmente para propósitos humanos, é apenas para fins de diagnóstico ou depuração. Então é assim que eu fiz isso. Se eu em vez de ir froshims dois dot PHP, notar que a ação desta forma não é registrado de zero ponto como o PHP old-- o anterior era realmente. Mas ele está registrado dois dot PHP. Então, vamos olhar como este se comporta de forma um pouco diferente. Se eu entrar em versão dois. Se aqui, se eu registrar como David, menos confortável, de dormitório de Mathews, registe-se. Então, desta vez ele disse, você são registrados, não realmente. Vamos ver o que eu fiz aqui. Se eu olhar para registro de dois pontos PHP, isso tem mais algum código PHP. É um pouco mais limpo, embora ainda envolve um pouco longo nesta linha. Observe aqui. I imprimir meu tag HTML, minha marca de cabeça, minha tag title, a cabeça, o corpo. E então eu começo a dizer coisas como entrar no modo de PHP. E assim que tag, suporte aberto PHP-- ponto de interrogação PHP diz, hey, servidor, execute-- interpretar o seguinte material como PHP até ver a marca de fim. E mesmo que você pode não saber qualquer PHP outro que você já viu até agora, você pode tipo de ler isso muito intuitivamente. Se o nome estiver vazio, ou o conforto é vazio, ou dormitório está vazio, o que eu faço? O que eu digo para o usuário? Você deve fornecer o seu nome, conforto, e alojamento, e assim por diante. Senão, eu digo que você é registrado, bem, não realmente. E eu não digo realmente porque não há banco de dados. Eu não estou fazendo nada com os dados. Estou apenas jogá-la fora para fins de demonstração. Agora eu tipo de economizado ao longo da linha 22. Há mais de sintaxe lá, mas sinal de dólar sublinhado post é bem interessante. E isso é o que é agradável sobre PHP. No PHP, você tem o que são chamados algumas variáveis ​​globais super. Eles são uma espécie de ainda mais importante do que as variáveis ​​globais. E estes, tudo em maiúsculas como tal, vem com PHP. Então se você tem um servidor que tem um servidor web instalado, como o Apache, e você instalar o idioma suporte para PHP, de repente você pode começar a usar esses super- variáveis ​​globais em seu código. E o que é agradável sobre PHP é que se você apenas gravar um arquivo que termina em dot PHP, colocá-lo em um servidor web, e depois que você enviar um formulário para ele via que marca a ação e uma tag de formulário, esse atributo ação no forma tag, PHP e da Web figuras completamente fora como agarrar todos esses pares de chaves de valor fora do URL como questão marca q é igual a gatos, ele vai descobrir como q e gatos. Se você enviar uma foto ou um nome de usuário, ou uma senha para gostar Facebook, PHP vai descobrir para você onde todos os dados é. E ela só vai entregá- você uma matriz associativa chamado dólar pós sinal de sublinhado, ou sinal de dólar sublinhar obter, dependendo se você está usando GET ou POST submissões. E ela só vai entregar-lhe uma variável global super, de modo que, se você deseja obter no nome que o usuário enviou via web que forma, você literalmente apenas dizer o nome da variável global super, citações, unquote, nome. E citações, conforto unquote, e citações, dormitório fecha aspas. E nós vamos ser capazes de fazer isso e muito mais com PHP. E mesmo que este foi um olhar turbilhão no que faz, vamos mergulhar muito mais na próxima semana. Vamos introduzir um banco de dados de modo que você é, na verdade, vai começar a implementar based-- seu próprio e-comércio como o Web site no tempo apenas uma semana. Então, vamos ver você na próxima vez, e espero que você tenha as mensagens de texto. Tchau. [Música tocando] [ABERTURA DE PORTA] COLUNA 2: Hey. COLUNA 3: Qual é? COLUNA 2: O que você está fazendo? COLUNA 3: Trabalho em um conjunto de problemas. COLUNA 2: Nice. Toca aqui. [TOCA AQUI] O que é-- uh, o que você está fazendo aqui? COLUNA 3: Apenas pendurando para fora. Acabei de voltar da academia. Eu não poderia ajudar, mas notar quando high-fived, que você tem mãos muito ásperas. Você ir para a academia? COLUNA 2: Não. Não. COLUNA 3: Cara, você olha muito grande. O que é ruim, porque todo mundo sabe 8-ball é o grande homem no campus. Toca aqui. COLUNA 2: Uh, não. Não, eu acho que eu sou bom. Eu acho que eu sou bom.