[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, é <? Php.
Semelhantes em espírito à HTML,
que a seqüência de caracteres diz ao computador
"Ei, computador, aí vem um programa em que estamos em PHP."
Ele garante que não está confuso que é alguma outra língua.
A linha 2 é um espaço interessante branco.
A linha 3 é o nosso velho amigo printf,
Neste momento, no contexto de PHP.
PHP tem sua própria versão de printf, que se comporta exatamente o mesmo,
de modo que este é só ir para imprimir "Olá mundo."
E então essa tag oposto aqui,>, 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 <? Php.
Então eu tenho um monte de comentários inúteis, concedidos, mas então eu fechar o modo PHP.
Mas então eu cair no modo HTML.
>> O que é interessante sobre o PHP é mesmo que o arquivo termina em. Php
geralmente é feito para ser misturados com HTML,
algum código PHP, alguns HTML.
E vamos ver que, eventualmente, podemos começar a provocar os separados
e manter o nosso HTML separado do nosso PHP em conjunto,
mas as origens do PHP realmente eram para lhe dar esta flexibilidade,
que se você quiser um pouco de HTML apenas escrevê-lo, e que será
cuspir idêntica para o navegador.
Mas se você precisar de alguma técnica de programação,
alguns códigos de programação, você também pode colocá-lo no mesmo arquivo exato, como veremos em breve.
Aqui está o meu HTML.
Eu tenho um título deste Frosh para mensagens instantâneas.
Eu tenho uma marca do corpo que tem um pouco de CSS com ele para tudo centro no meio,
e aqui eu tenho um formulário que, aparentemente, vai ser apresentado
para um novo arquivo chamado register0.php, por isso vamos ver que em um momento.
Ele está usando um método chamado de post, que vamos voltar a também.
Então eu tenho algumas entradas de formulário, um nome chamado, cujo tipo é o texto,
aquele cujo nome é o capitão, cujo tipo é opção,
e isso, nós não vimos isso antes, mas ele faz exatamente o que diz.
Você vai ter uma caixa de seleção em vez de uma caixa de texto.
Aqui embaixo você tem um botão de rádio, que é um daqueles botões circulares
que você pode escolher este ou aquele.
>> Observe que é deliberado que eu dei os dois botões de rádio o nome do gênero.
Isto é como você começa a exclusão mútua em que você deve clicar
ou este ou aquele, e clicando o outro
ela desmarca o outro, então você tem que dar-lhes o mesmo nome
se você quer que eles sejam mutuamente exclusivos assim.
E então para dormitório, eu não acho que temos visto isso ainda, mas é um menu de seleção, um menu drop-down.
A tag para isso é de seleção.
Você, então, dar o menu drop-down um nome,
e então você tem um monte dessas opções.
O primeiro, só por estética, é uma cadeia vazia.
Eu só queria que o drop down para ficar em branco por padrão,
e depois há Apley, Canaday, Grays, e assim por diante.
E notem a dicotomia aqui.
A opção no drop down tem um valor,
mas, em seguida, que tem um nome humano-friendly, que neste exemplo,
é idêntica, mas se realmente queria ser anal poderíamos ter
o valor deste suspenso ser apenas a versão curta,
Grays, mas podemos realmente dizer Grays Salão que o ser humano realmente vê,
mas isso não é tão interessante, então eu só mantive simples e fez-lhes idêntica.
Em seguida, na parte inferior, temos um botão de envio
o que vimos antes, mas repare que eu apenas deu-lhe uma palavra diferente.
Em vez de CS50 pesquisa dei o rótulo de "Registrar".
>> O resultado final é a página aqui, e novamente,
onde é que isto se submetido?
Ele fica submetido a algum arquivo, o valor do atributo de ação,
que foi register0.php.
Vamos ver o que realmente acontece aqui.
Deixe-me ir em frente e preencha este formulário, diz David,
masculino, Matthews, e então eu vou dizer se cadastrar.
Deixe-me afastar e clique em registrar.
Ok, então meio inútil, mas vamos ver o que está realmente acontecendo.
Observe que a URL mudou para ser register0.php.
O que é curiosamente ausente da URL, no entanto, mesmo que acabou de enviar um formulário?
[Resposta do aluno inaudível]
Ok, isso é apenas um usuário do Chrome ser amigável estes dias.
Isso é realmente lá. Eles apenas escondê-lo para economizar espaço.
Mas o pensamento bom, bom pensamento.
Em direção ao outro lado da URL, porém, o que está faltando? Sim.
[Estudante] A cadeia de consulta.
A cadeia de consulta, de modo lembrar de nossos exemplos simples de busca do Google.
Assim que eu clicar no botão enviar a URL
levou-me para o Google, mas depois houve? q = ciência da computação ou qualquer coisa que eu tinha digitado dentro
Isso é porque nós usamos o método get com o exemplo de pesquisa.
>> Desta vez, estamos usando o método em vez disso?
Publicar, e uma das distinções imediatas
entre get e post é que o pós não colocar a entrada do usuário na URL.
Ele esconde. Ele ainda envia.
Na verdade, o que estamos vendo no navegador aqui, como vamos revelar em um momento
olhando register0, é que eu só estou vendo o conteúdo
da matriz que foram submetidos a partir do navegador para o servidor.
Mas o URL não tem uma?, Não tem qualquer palavra-chave
ou valores, e por que é isso?
Bem, pós permite ainda enviar os dados do formulário para um servidor,
mas não colocá-lo na URL, então que tipo de informação é pós
particularmente apropriado para, talvez, quando você está pedindo que o usuário
digitar entrada para um formulário?
Algo como uma senha, algo como o que mais?
Números de cartão de crédito.
Tudo que é levemente sensível você provavelmente não quer acabar na URL
mesmo porque isso significa que seu colega de quarto ou membro da família pode simplesmente vasculham através
sua história de internet e, em seguida, literalmente, ver suas senhas,
literalmente ver os seus números de cartão de crédito porque a maioria dos navegadores
lembre-se da história que quer URLs que você esteve menos,
por isso, se só porque isso seria uma má idéia.
Usando esconde mensagem que detalham do usuário.
>> Além disso, como é que você faz o upload de uma foto no Facebook?
Bem, os únicos dois mecanismos que você pode realmente usar,
mesmo que há alguns outros, mais arcanas, é obter e postar.
Como você possivelmente upload de uma foto através de uma URL?
Você pode realmente fazê-lo.
Você pode tomar um JPEG ou bitmap ou GIF e você pode representá-lo em hexadecimal
ou algo chamado de base 64.
Em vez de base 16 você usa base 64, que essencialmente se parece
Caracteres ASCII, e você pode realmente fazer upload de uma foto através de uma URL
depois de um ponto de interrogação, mas geralmente existem limites de tamanho.
A maioria dos navegadores forçar URLs a ser não mais do que 1.000 caracteres,
talvez 2.000 caracteres ou similares, de modo que você não pode carregar
a 10 MB foto no Facebook.
Por que você usa post, bem, então por enquanto se coloca os parâmetros na URL,
o que é bom e útil às vezes, mas para qualquer coisa sensível ou grande
post é o caminho a percorrer.
O que é register0 realmente está fazendo aqui?
Bem, se eu abrir register0 aviso de que esta é uma página super simples,
mas ele está demonstrando o fato de que eu possa co-misturam-se, para melhor ou para pior,
HTML com PHP.
Este arquivo inteiro, exceto para os comentários na parte superior, são HTML
exceto por este cara aqui.
>> Observe no meio do meu código PHP,
no meio do meu HTML, eu tenho sorte de, temporariamente,
entrou no modo de PHP.
Eu estou chamando uma função especial chamada de impressão r.
Isso significa imprimir recursiva, eo que ele faz é recursivamente imprime
qualquer variável que você entregá-lo, ponto e vírgula, sai do modo PHP.
E a tag pré dá-lhe texto pré-formatado,
mono texto espaço para que cada espaço que você realmente vê-lo.
Ela não desaparece. O que é uma mensagem?
Bem, o que é interessante e convincente sobre o PHP
é que sempre que você enviar um formulário usando get ou post
tudo o que é enviado a você por um navegador
PHP-se descobre o que os pares de valores-chave são,
descobre se não há sinais de igual, figuras fora se houver um ponto de interrogação.
Ele faz todo o trabalho duro para você, e então ele lhe entrega uma matriz associativa
contendo tudo o que o usuário digitou no formulário.
Bem, o que fez os campos desta forma tem?
>> Que tinha 4 campos.
Um deles era um campo de texto chamado nome.
Um deles era uma opção chamada capitão.
Um deles era um botão de rádio chamado gênero,
e um era um menu drop-down chamado dormitório,
para notar quando eu imprimir recursivamente
o conteúdo desta variável especial.
Esta é uma variável global especial chamado literalmente $ _POST, tudo em maiúsculas.
Esta é uma variável global especial que o PHP apenas cria para você
e as mãos a você para que você possa acessar tudo
que foi apresentada através de um formulário por um usuário.
E chamando r impressão sobre ele, você não faria isso em uma aplicação normal.
Estamos fazendo isso para ver o interior desta variável,
eo que está dentro dele, bem, quatro chaves,
4 parâmetros http, por assim dizer,
nome, capitão, sexo, dormitório, e em seguida, os valores que o usuário
digitado com uma exceção.
Eu fiz tipo D-A-V-I-D.
Eu verifiquei a caixa, porém, para o sexo masculino, o que aparentemente apresentou um valor
de apenas m ser sucinto.
>> Quando eu selecionei Matthews, que é o valor que foi selecionado,
e isso é um pouco estúpido, mas é a convenção.
Quando eu chequei a caixa, um valor de no, "on", foi apresentado para a caixa de seleção.
Se eu não tinha verificado, nenhum valor teria sido enviado qualquer.
Este é apenas nos dar insights sobre o que está dentro desta variável global especial,
e é tão especial que é chamado de uma variável super global.
Ela existe em todos os lugares para você dentro de seu código para que você possa acessá-lo de fato.
Este não é que convincente, então vamos realmente usar o mundial de super
e realmente tentar registrar alguém.
Em froshims1 Eu vou fazer uma mudança.
Eu estou mudando a ação a ser register1.php,
e eu estou fazendo uma coisa.
Eu estava meio envergonhado pela qualidade da minha página lá.
É muito horrível, honestamente, por isso acaba
que você pode usar muito facilmente na Web
JavaScript outras pessoas código, CSS outras pessoas
que tenho escrito e de código aberto e disponibilizado como uma biblioteca,
por assim dizer, e, por exemplo, aqui eu estou usando uma biblioteca disponível livremente,
um monte de código que alguém escreveu.
>> Twitter passou a escrever este código, e é chamado a biblioteca bootstrap,
e é apenas um monte de folhas de estilo CSS, um grupo de. css
que alguém escreveu e descobriu como obter tudo de bom e bonito
para que pessoas como nós pode se preocupar um pouco menos com a estética e se concentrar muito mais
sobre a lógica ea programação real.
Ligando-nos com essa tag, que é a mesma marca eu costumava lembrar para styles3.css anteriormente,
Agora tenho acesso a um arquivo chamado bootstrap.min.css.
Min significa apenas que eles minified-lo e eles se livrado de todo o espaço branco e assim por diante
apenas para se certificar que não está me mandando mais bytes do que eu realmente precisa.
Mas lá é um monte de CSS, então se eu agora abrir a versão 1 do Frosh IMs
perceber que meu arquivo é definitivamente mais bonita.
Agora ainda é apenas preto e branco, mas aviso que apenas usando sua folha de estilo
e usar determinados recursos de que no meu formulário, não é surpreendente,
mas é definitivamente mais limpo do que era antes, e que o projetor não está fazendo justiça.
Há pequenas linhas ao redor dos botões cinza e ao redor do campo de texto aqui,
mas é definitivamente mais limpo do que era antes.
>> Agora, na justiça, eu tive que mudar a minha marcação um pouco.
Esta é a versão 1, e perceber que eu usei algumas marcas novas,
e, honestamente, eu não tinha idéia de como fazer isso até que eu leia a documentação
para a biblioteca do Twitter bootstrap, e eles me disseram que se você quiser usar a nossa biblioteca
usar um elemento fieldset dentro de sua forma,
colocar a palavra que você deseja mostrar ao lado de um campo dentro de uma marca de etiqueta,
em seguida, dar o seu contributo de um nome, como antes,
e depois para a caixa de seleção, você não só envolvê-lo em um elemento de rótulo,
você usar algo chamado de classe, para que nós não vimos isso antes,
mas você vai ver isso em um de shorts pset 7 de.
Uma classe em CSS permite que você faça algo muito parecido com o ID,
mas antes, quando tivemos uma identificação com o símbolo #
que foi para um e apenas um elemento.
O que é legal sobre uma classe é que vários elementos podem ter a mesma classe
ou o material CSS mesma aplicada a ele.
>> Mas, novamente, mais nas pessoas que a curto, eo resto disso é só copiar e colar
de sua documentação, onde eu adicionei uma etiqueta aqui e ali.
E no final, porque eu incluí a tag link na parte superior,
tudo parece mais bonito automaticamente
simplesmente por ter marcado a minha página de uma forma que
Twitter espera, e há muitas maneiras diferentes
de fazer isso, e isso é realmente muito apropriado.
Neste ponto, no semestre, como você verá em especificação pset 7, a
Pesquisando por aí, lendo sobre bibliotecas, utilizando CSS de outras pessoas
e JavaScript para resolver problemas auxiliares
para o conjunto de problemas em si é certamente encorajado e é a maneira
a Web é construída nestes dias, por estar sobre os ombros de outras pessoas
para que você possa realmente se concentrar nos problemas novos e interessantes.
Mas vamos agora concentrar-se, mais uma vez, a lógica.
>> Isso foi um desvio rápido na estética só para mostrar a direção em que você pode ir.
Eu vou voltar para o mais feio um por agora só porque
não há distrações com material Twitter, e deixe-me ir em frente e abrir
froshims2, o que, mais uma vez, difere apenas na acção register2.php,
e vamos dar uma olhada no que o efeito é aqui.
Deixe-me ir em frente e digite em Davi.
Eu não vou ser o capitão desta vez.
Eu vou dizer masculino, Matthews, registo.
Droga. Ok, isso é um parafuso até da minha parte.
Aguardem.
Register2, linha 22, se vazio ou-não.
Vamos recarregar.
Ok, ao submeter este formulário o que aconteceu?
Eu digitei David, verificada masculino, clicado Matthews, registo.
Você está registrado. (Bem, na verdade não.)
Este é claramente um passo além de apenas imprimir o conteúdo de alguma variável,
mas o que é esse arquivo realmente está fazendo?
Em register2.php
perceber que eu tenho um novo código.
Dentro do meu corpo tag eu tenho essencialmente uma pessoa se construir,
mas porque eu estou co-mistura isso com um pouco de HTML
Eu tenho que entrar e sair do modo PHP e para trás, por isso vamos ver o que eu estou fazendo.
>> Na primeira linha aqui eu estou dizendo se é o caso
que o posto de super global está vazia para a chave de nome,
Em outras palavras, se o usuário não me dar um valor para o nome no formulário,
em seguida, esvazie vai retornar true, pois o valor está vazio.
Ou-notar as barras verticais, se o gênero é vazia
dentro desta super especial global, o que, mais uma vez, representa o conteúdo do formulário,
ou o dormitório é vazio, então eu estou indo para ir em frente e gritar com o usuário.
Como? Bem, repare que eu vou dizer que você deve fornecer seu nome, gênero e dormitório.
Vamos realmente induzir esse erro.
Deixe-me voltar à minha forma. Deixe-me recarregar para limpá-la.
E eu só vou dar-lhes Davi, e eles não precisam saber de onde eu moro.
Registre-se. Aparentemente, eu preciso dizer-lhes onde eu moro.
Você deve fornecer seu nome, gênero e dormitório. Voltar.
>> E eu poderia clique para voltar à forma, mas por que isso?
Bem, em que o nome caso não estava vazio, mas sexo era, e dormitório foi,
assim que esta expressão inteira avaliado como verdadeiro, e mesmo que a sintaxe é um pouco novo,
novamente, entramos PHP modo, familiar if,
mas a parte de novo aqui é apenas esta cólon, e eu estraguei tudo, omitindo um parêntese
por acidente, mas observar o cólon, e isso significa
mesmo que nós estamos saindo PHP tudo modo
que se segue deve ser cuspido na íntegra para o navegador
até que você veja um bloco de outra pessoa, como fazemos aqui,
caso em que você deveria cuspir isso
até ver o endif, de modo algum sintaxe um pouco nova
que me permite alternar entre HTML e PHP.
Podemos limpar isso eventualmente, mas, por agora,
é uma espécie de uma maneira convincente de verificação de erros no formulário.
>> Agora, eu digo que você não está realmente registrado porque, obviamente, nós não fizemos nada, mas os dados,
então vamos realmente tentar fazer algo legal.
Em froshims3 a única diferença é que eu vou apresentar para register3,
de modo que o código HTML não é o mesmo.
Em register3 perceber isso.
Este é um tipo de sexy.
No topo Eu estou usando uma declaração exigir, de modo que este é como # include.
Desta vez não é stdio.h ou qualquer coisa assim.
É uma biblioteca PHP, e este é chamado PHPMailer.
Como eu sabia de incluir precisamente esta seqüência citada?
Eu li na documentação, por isso, quando me disseram que colocar isso no topo do arquivo
se você quiser usar uma biblioteca especial chamada PHPMailer que faz o que diz.
Ele permite que você envie e-mail via PHP.
Agora vamos rolar mais.
>> Aviso para começar Eu estou no modo de PHP esse tempo todo,
agora perceber até aqui depois de importar essa biblioteca,
por assim dizer, estou fazendo algumas checagens.
Se for o caso, que o nome não está vazio
e de gênero não é vazio-notar os pontos de exclamação-
e dormitório não é vazia, então o usuário logicamente preenchido o formulário, pelo menos o suficiente.
Eu não me importo se eles estão capitão ou não. Eu só preciso de seu nome, gênero e dormitório.
Se eles têm enchido os para fora, de modo que nenhum desses campos estão vazios
esta é ligeiramente nova sintaxe.
PHP, como um aparte, é uma linguagem de programação orientada a objeto
que alguns de vocês podem se lembrar de APCS ou similares.
Por agora, se não conhece, só sei que para usar esta biblioteca
você tem que escrever uma linha de código como este utilizando uma palavra nova,
literalmente uma nova palavra-chave chamada nova.
Mas, além disso, temos uma sintaxe familiar.
É um operador de seta, o que é semelhante ao que foi utilizado para estruturas no contexto de ponteiros.
Para hoje o PHP não tem ponteiros,
mas sei agora que dentro da variável de correio
é essencialmente um tipo de um ponteiro para uma biblioteca especial
que alguém escreveu, e se eu quiser acessar a funcionalidade específica
dentro da biblioteca que eu faço, como em C, use o operador seta,
mesmo que estes não são realmente ponteiros.
É uma espécie de versão própria do PHP mesmo.
Isso significa ir para a biblioteca e chamar a função IsSMTP.
SMTP, recall, de nossos guerreiros do líquido refere-se enviar e-mail,
e que apenas significa usar um servidor de e-mail para este IMs Frosh registro.
>> O anfitrião é que eu quero usar?
Bem, Harvard, se você Google volta, tem um servidor de e-mail chamado smtp.fas.harvard.edu.
Se você está jogando junto em casa ou você vive em uma rede Comcast
que poderia ser algo como smtp.comcast.net.
É totalmente depende de onde você mora e que seu provedor é.
Depois que eu estou indo para o meu endereço de arbitrariamente ser jharvard@cs50.net.
Estou indo então para definir a dirigir a ser jharvard@cs50.net.
A única maneira que eu sabia que estas funções foram chamados SetFrom e AddAddress
é, mais uma vez, eu li a documentação.
Isso não é uma espécie de passe de mágica conhecida de todos os programadores.
Então eu definir um assunto para "registro".
E agora esta linha é um pouco feio, porque o que o operador ponto significa em PHP?
Alguém sabe?
Concatenar.
Em C, é uma dor no pescoço para concatenar duas seqüências conjunto.
Você tem que lidar com malloc ou realloc ou todas essas coisas
apenas para aumentar o comprimento de uma corda.
No PHP, JavaScript e em outros idiomas
geralmente você pode fazer isso com um único personagem.
Neste caso, ponto significa tomar essa string aqui
e anexar a ele essa seqüência.
>> Ah, e por falar nisso, anexar a ele essa seqüência,
que passa a ser uma variável dentro desse mundial super.
Em seguida, acrescentar a ela uma nova linha, portanto, todos esses pontos significa apenas
continuar a fazer uma seqüência maior e maior e maior,
e você não precisa se preocupar com tudo sobre malloc ou similar em uma linguagem como esta,
e há outras maneiras de fazer isso, mas este é um dos mais rápidos
maneiras de colocá-lo para fora.
O que se está fazendo?
É a criação de um corpo de e-mail que vai dizer o nome: Capitão: Gênero: Dormitório:
todos em linhas separadas, e então, finalmente,
uma linha de código, e eu vou ignorar isso por enquanto.
Se == false significa apenas que se algo deu errado,
mas a magia acontece aqui.
Enviar e-mail significa enviar este e-mail.
Vamos ver o que o resultado líquido é.
Na parte inferior do arquivo, observe que vai dizer que você está realmente registrado
se eu chegar a esse ponto.
Se, porém, o usuário estraga, observe que começamos este
se a condição por aqui, se não está vazio e não vazio
e não esvaziar vamos enviar o email.
Caso contrário, vamos enviar esta linha de código,
que vai ter o efeito, como você verá no pset 7, de redirecionar o usuário
de volta para onde eles vieram froshims3.php.
>> Dedos cruzados, caso contrário, esta vai ser a demonstração mais decepcionante hoje.
Aqui vamos nós.
Deixe-me abrir a minha caixa de entrada de e-mail para jharvard no Gmail.
Nenhum e-mail agora. Tudo bem.
Agora deixe-me abrir froshims3, que é o terceiro e último exemplo, vamos olhar para aqui.
Ok, aqui vamos nós.
Nate, ele vai ser macho, capitão de, digamos, Apley.
Registre-se. Ok, você está realmente registrado.
Agora, se eu rolar para o meu e-mail, oh, meu Deus.
Acabo dinamicamente enviou um e-mail na web.
>> Vamos deixar com essa nota.
Um vídeo é para a próxima palestra que perdemos. Até a próxima semana.
[CS50.TV]