>> [Música tocando]
>> DAVID J. MALAN: Tudo bem.
Este é CS50.
Este é o início da semana oito.
E você deve se lembrar que paramos última vez olhando para uma nova linguagem
completamente.
Na verdade, um que é bastante leve e não é mesmo
uma linguagem de programação.
É uma linguagem de marcação que nos permite realmente estruturar e tornar as páginas web.
E quando você algo mais em conjunto com isto--
ou você em breve, se você não tiver já.
Nós estamos indo para usar em cascata Style Sheets, ou CSS, que
é um outro tipo de linguagem com propriedades e valores
que vai nos deixar fazer coisas como mudar a cor
e mudar a posição e estes tipos de ajustes.
Mas hoje em diante, começamos a concentrar em linguagens mais poderosas,
linguagens de programação como PHP reais.
>> Então PHP tem sido em torno de algum tempo.
E como você vai ver, foi projetado principalmente
cedo para real utilizar no desenvolvimento web
e, na verdade, gerar páginas web.
Então, que tipo de recursos faz uma linguagem
precisa, a fim de fazer web páginas dinamicamente com ele?
>> Em outras palavras, se você quiser gerar conteúdo dynamically-- como Facebook de
Newsfeed, que muda constantemente, ou mensagens instantâneas que surgem de tempos
para tempo-- como o que é a peça-chave da funcionalidade
que você precisa em uma linguagem de programação que iria deixá-lo dinamicamente
imprimir novas informações para a tela?
>> ALUNO: Code.
DAVID J. MALAN: Code.
Está bem.
Vamos levar isso.
Um pouco mais preciso.
Quero dizer, nós poderíamos fazer isso com C, francamente.
Seria uma dor no pescoço.
Mas-- é esse compromisso?
>> Estudante: Sim.
Variáveis, talvez?
DAVID J. MALAN: Variáveis.
OK, com certeza.
As variáveis ​​podem certamente ajudar-nos.
E até mesmo algo mais simples.
Nós usamos isso no primeiro programa do primeiro dia
quando nós realmente disse "Olá mundo".
>> ESTUDANTE: Print.
>> DAVID J. MALAN: Print, certo?
Imprimir ou printf no mundo de C. Então todo esse tempo,
que tivemos em nossa disposição um language-- C,
em particular-- e até mesmo Zero para que o assunto que
pode gerar trechos de texto.
>> Bem, se HTML, como vimos na semana passada, é apenas um monte de seqüências de texto
embora com colchetes abertos e fechados suportes e algum tipo de rima
ea razão por trás disso, bem, então nós poderíamos realmente
começar a gerar páginas web ou manualmente, digitando-los em gedit
ou no Microsoft Word, para que matter-- que só precisa de um editor de texto.
>> Ou poderíamos escrever o código, a sua sugestão
anteriormente, que nos deixou gerar dinamicamente HTML,
e é isso que nós estamos indo para começar a fazer com PHP
e, finalmente, mesmo com um linguagem chamada JavaScript,
é usar uma linguagem para gerar outra.
E, de fato, é isso que Facebook e muitos, muitos outros sites
fazer para realmente dinamicamente apresentar novas informações para você.
>> Então, vamos começar com um isto-- linha de olhar enigmático, mas um
que é realmente muito poderoso.
Até agora, estamos usando C, que é uma linguagem compilada.
E apenas uma rápida recap-- um compilado linguagem tem que característica?
Você, obviamente, precisa compilar isso, mas o que isso significa?
Sim?
>> ALUNO: Ele precisa ser montado em código de máquina.
>> DAVID J. MALAN: OK.
Ele precisa ser montada em código de máquina.
Então você pega o seu código-fonte, que é uma espécie de Inglês-like.
Você convertê-lo em algo nível mais baixo,
que é, em última instância chamada objeto code-- 0 e 1s.
E é nesses 0 e 1s que uma CPU, como aqueles feitos pela Intel,
realmente entender.
>> Agora, PHP e Python e Ruby e JavaScript e cachos de outro
línguas não são compilados línguas, mas linguagens interpretadas,
o que significa que você acabou de escrevê-los e, em seguida, você não transformá-los em 0 e 1..
Você ao invés de apenas fornecer então como entrada para o programa de outra pessoa,
chamado de um intérprete.
E dessa pessoa programa foi concebido
para entender o que cada um e cada símbolo em Python ou PHP
ou Ruby ou qualquer número de outras línguas significa.
>> E assim, tudo o que precisamos é algo como isto.
Então, na verdade, eu vou ir para o aparelho
aqui, apenas em qualquer janela antiga, e estamos
indo para ir em frente e aberto um arquivo chamado, digamos, Olá.
Agora anteriormente, eu poderia ter salvado isso mesmo com uma extensão de arquivo,
mas eu vou fazer algo ainda mais simples aqui.
Eu estou indo para ir em frente e começar este arquivo com esta sintaxe enigmática.
Assim, "usuário, bin, env, para o ambiente, php. "
>> Isto é simplesmente uma linha de código que é vai dizer o meu sistema operacional,
ir encontrar no seu local de ambiente seja o que for,
onde quer que o PHP é-- interpreter-- e vá em frente e usar esse intérprete
para interpretar o código a seguir.
Agora, isso é uma espécie de uma característica feia do PHP.
Mas nesta língua, qualquer vez que você escrever código PHP,
você precisa ter um destes feio Tags PHP demarcando o início
de sua code-- <? php.
>> Mas a seguir aqui, agora posso fazer alguma coisa bastante simples, como printf Olá vírgula
mundo barra invertida n perto citação, perto parênteses.
E depois é só para o bem medida, eu vou
para ir em frente e perto minha tag php aqui
Para que tudo parece bem bonito impresso.
>> E assim que eu clicar em Salvar, gedit é realmente inteligente o suficiente
a olhar para aquela primeira linha e perceber, oh, você está escrevendo código PHP.
Permitam-me destacar sintaxe -lo com as cores
aqui de modo que esteja um pouco mais.
Mas agora eu estou indo para ir até a minha janela de terminal.
Vou ampliar.
>> Este programa foi chamado de "Olá", então eu vou fazer barra dot Olá,
mas a permissão negada.
E bash.
Nós, na verdade, ouvi falar disso coisa que um par de semanas atrás
no contexto de Shellshock, um desses bugs.
>> Mas permissão negada vimos antes, talvez em um contexto diferente.
Alguém lembra de como você pode corrigir alguma coisa
onde permissão é negada como este?
Qual é o comando, pelo menos?
>> ESTUDANTE: chmod.
DAVID J. MALAN: Sim, chmod, para alterar o modo de um arquivo.
E você vai ter todos os mais utilizados para esta próxima semana com um problema posterior
definido.
Mas, por agora, eu vou mudar o modo para não ser legível,
mas para dar a todos executeability privilégios, a capacidade
para executar esse arquivo.
E eu vou atribuir que para o arquivo Olá.
>> Se eu agora fazer barra dot Olá entra, você ver, de fato, o meu programa, Olá mundo.
E o passo que eu fiz claramente ignorar por completo?
Compilando.
Então, eu apenas corri este programa bastante simples.
>> E verifica-se que você pode fazer isso com um lote de sintaxe reminiscente de C.
Deixe-me ir para o código de hoje, que eu coloquei em meu diretório vHost
aqui, por razões reais nós vamos voltar.
E eu estou indo para ir em, digamos, as condições de um.
>> E você vai ver aqui, em primeiro lugar e acima de tudo, um monte de comentários.
Mas esta é realmente uma recriação em PHP
de um programa que fizemos na semana um chamado condições 1.c
onde o propósito de vida deste programa
é aparentemente para pedir o usuário para um número inteiro
e, em seguida, fazer alguma fofo análise sobre ele através do qual
você diz se é positivo ou negativo ou igual a zero.
E eu trago este acima só porque, à exceção talvez de um pequeno detalhe,
é indistinguível tão longe de C.
>> Qual é a única característica aqui que talvez salta
para você como um pouco diferente?
Talvez duas coisas.
Sim?
>> ESTUDANTE: Dólar sinal n?
>> DAVID J. MALAN: Yeah.
Então cifrão n está presente.
E cifrões, como vamos ver, vamos
ser uma solução para o início de qualquer variável em PHP.
É tanto o bem bom e bad-- em que é uma espécie de óbvio o que é
uma variável, mal em que é mais uma coisa para escrever.
E há um outro coisa que não tem muito
visto, pelo menos por esta grafia. sim?
>> ALUNO: Readline.
>> DAVID J. MALAN: Readline.
Readline nós não ver, por si só, em C, mesmo que existe algo
semelhante, mas nós usamos getString, e esta é sua homóloga.
Então, se eu entrar nessa diretório, que passa a ser,
como eu vou explicar um pouco na minha vHost diretório e minha fonte de um diretório,
e eu ir em frente e fazer o corte de ponto conditions-- barra dot whoops--
condições 1, você vai ver, mais uma vez, a mesma permissão issue-- negado.
>> Então deixe-me aproximar e fazer chmod um plus x sobre as condições, as condições do corte de ponto.
Eu gostaria de um número inteiro, por favor, 50.
E nós poderíamos jogar este jogo durante todo o dia.
Ele vai se comportar exatamente como o fez em uma semana.
>> OK, portanto, não muito diferente, exceto não apenas que leve pouco de sintaxe,
mas, na parte superior, I novamente tinha essa linha que
me permitiu criar algo que parece um programa em C chamado Olá,
chamadas condições 1.
Mas não é 0 e os Estou executando diretamente.
É, em vez de executar esse intérprete, cujo nome
passa a ser idêntico ao idioma.
O programa é chamado de PHP, e meu código abaixo da linha de um está sendo passado para ele.
>> Podemos fazer outra bastante simples exemplo uma reminiscência de algo
fizemos semanas atrás.
Mais uma vez, esta é uma espécie de pedaço de código arbitrário
que, aparentemente, faz que quando você executá-lo?
O que é que isto vai imprimir, presumivelmente?
>> Então, inicialmente na linha 16, é vai dizer que x é agora 2, provavelmente.
% D é o mesmo que para printf $ i.
Então é cubing, ponto, ponto, ponto, na linha 17.
E depois a linha 18 aparece para chamar uma função Cubed.
E onde é definido Cubed?
>> Bem, parece que na linha 25, de modo que não é assim tão diferente.
Eu tenho alguns comentários acima -lo, mas, na maior parte,
é um bastante simples portabilidade ou conversão
do programa em C para a versão PHP.
Mas agora há um par de diferenças que talvez deve saltar para fora.
O que mais é diferente sobre como você pode escrever este mesmo programa em C?
>> Estudante: [inaudível].
>> DAVID J. MALAN: Não há nenhum protótipo em cima.
Então PHP-- e, francamente, um monte de languages-- moderno
são muito mais inteligentes e mais útil de C compiladores em que você
pode colocar a função aqui em cima, você pode colocar uma função aqui em baixo,
eo intérprete vai para fazer-lhe o favor de ler
o arquivo inteiro antes de decidir que alguma função não existir.
Então boas melhorias anos mais tarde.
Mas há também algo outra coisa diferente ou ausente aqui.
Sim?
>> Estudante: [inaudível].
DAVID J. MALAN: Nós não temos que declarar os tipos de variáveis,
então vamos ver o pouco tempo que existem diferentes tipos em PHP,
mas você não precisa especificá-los, o que também é bom e ruim.
E há uma outra coisa que falta.
>> Estudante: Não há bibliotecas.
>> DAVID J. MALAN: Não há bibliotecas.
OK, então isso é bom.
Recebemos muito mais fora da caixa.
Portanto, não há realmente muito mais coisas que eu achava que eram diferentes.
Que tal maneira em volta?
O que é isso?
Diga-se mais uma vez?
>> ALUNO: Pointer.
>> DAVID J. MALAN: Sem ponteiros.
OK, pelo menos, neste exemplo, não.
Isso é justo.
Portanto, não existem indicações em PHP, na verdade, em geral.
Há algo chamado referências, mas não vamos gastar muito tempo lá.
E o que mais?
>> ALUNO: Principal.
DAVID J. MALAN: Main.
Portanto, este foi o Biggie Eu estava pensando.
Observe que não há ponto de entrada principal.
Você simplesmente começar a escrever seu código.
E este é, na verdade, vai ser vantajoso
quando nós fazemos a transição momentaneamente para realmente usando
esta mesma linguagem para web baseada em de programação, para os quais nós
não quero ter apenas um ponto de entrada.
Podemos querer ter um monte de URLs, um monte de arquivos diferentes
tudo tendo em entrada do usuário e produzindo saída.
>> Mas aqui é o muito desanimador exemplo que prometi da última vez,
nomeadamente neste pasta aqui, os erros ortográficos.
Portanto, neste ortográfico arquivo, que não vai gastar muito tempo em, há
essencialmente um porting-- P-O-P-A. É apenas a palavra dada quando, digamos,
converter de uma língua a outra normalmente manualmente.
>> Esta é uma portabilidade de PC versão do verificador ortográfico do PSET 5.
E eu essencialmente tentou convertê linha por linha, tanto quanto eu puder.
Então, se você gosta deste tipo de coisa, ele realmente vale a pena em algum momento
puxando os dois lado a lado e ver o que é o mesmo
eo que é diferente.
Mas eles são muito danado similar.
Se você se lembra do que ortográfico ainda parecia,
mesmo que você não fez tem que mudar esse arquivo,
é bastante semelhante estruturalmente com apenas um par
de mudanças aqui e ali.
>> Então, isso é só para dizer que é muito simples para converter ortográfico
de C para PHP.
Mas no dicionário, não há algo ainda mais atraente.
Deixe-me ir em frente e criar meu próprio arquivo dictionary.php.
Assim ligeiramente diferente em que vamos chamá-lo .php ao invés de .c.
Porque este é um arquivo PHP, I fazer-- ligeiramente annoyingly-- ter
para iniciar o arquivo com uma tag php assim.
E eu estou indo para ir em frente e definir algumas funções.
Função chamada de verificação, que é vai levar em uma palavra como antes.
Mas este argumento vai ter um dólar
assinar, porque nós estamos, mais uma vez, usando PHP.
Outra função do dictionary.c era carga
e demorou em nome de um dicionário, por isso vou começar essa função pronto para ir.
>> Outro em dictionary.c foi o quê?
Tamanho foi um dos mais bonitos, em menos se você manteve alguma variável ao redor.
por isso o tamanho só tem que devolver uma variável.
E então houve descarga.
>> Assim, havia estes quatro funções no conjunto de problemas 5
que você precisava para implementar com alguma estrutura ou estruturas de dados.
Então eu prometi que em PHP, podemos declarar
uma tabela hash, por exemplo, tudo o que mais facilmente.
Na verdade, se eu quiser uma tabela hash, Eu só vou ir assim
e não é a minha tabela de hash.
E essa é a nota, desanimador, que paramos na última vez.
E você sabe que, se eu quisesse uma variável de tamanho, bem,
este não é tudo que diferente de C,
mas eu estou indo para ir em frente e fazer isso.
E observe nenhum tipo de dados.
E eu vou voltar mais tarde e realmente acrescentar alguns comentários aqui.
Mas o que dizer de carga?
>> Se dicionário cifrão é o nome do meu arquivo
e eu realmente quero carregar palavras em esta tabela agora,
Eu posso realmente fazer algo bastante simples.
Um-- e este é minorly annoying-- em PHP,
você tem que especificar no interior de uma função, se você
deseja acessar alguns mundial variável que é definida fora.
>> Mas isso não é particularmente interessante no momento.
O que é mais interessante é isso para cada construir que eu mencionei da última vez.
E verifica-se que o PHP tem uma função chamado arquivo cujo propósito na vida
é abrir um arquivo e ler em todas as suas linhas em uma matriz
e entregá-los de volta para.
>> O que quer dizer que posso fazer tão dicionário que agora efetivamente quando eu chamo de arquivo,
isso vai me devolver uma série de palavras do arquivo.
Não é tudo de bom.
Ele ainda vai ser uma linha de palavras, algo linear.
Mas eu posso ir em frente e fazer uma iteração sobre cada uma dessas palavras usando
que a sintaxe que vimos brevemente última vez.
E você vai vê-lo mais no próximo PSET.
>> Mas agora eu tenho uma iteração de loop sobre cada palavra no dicionário.
E em cada iteração, lembro que eu sou chamando a palavra atual "palavra".
E tudo isso vai levar a colocar uma palavra no dicionário é
vai ser palavra palpite "verdade".
Essa é a minha função de inserção.
Essa é a minha função de carga para o meu dicionário.
Agora é um pouco de uma fraude, porque, Você sabe o que, não há, na verdade,
n de barra invertida no final das palavras que eu provavelmente deveria se livrar,
mas isso não é um problema, porque o PHP tem uma costeleta que função chamada literalmente
Costeletas de fora um personagem bem no final.
Então, não há problema nenhum.
Temos ido em frente e, na verdade, encurtado que apenas isso.
E agora eu provavelmente deve manter o controle de tamanho, então vamos pelo menos fazer isso-
tamanho ++.
Eu posso fazer isso como antes.
E então este é provavelmente vai funcionar muito bem, de modo que de retornar verdadeiro.
Feito.
PSET 5.
>> [Risos]
>> DAVID J. MALAN: OK.
Nós vamos fazer isso de novo com a seguinte PSET, também.
Assim que sobre o tamanho?
Bem, espero que este é de cerca de como seria de esperar da última vez,
embora eu tenho que fazer essa coisa estúpida mundial.
É apenas um artefato de projeto da linguagem.
>> Mas cheque é um pouco mais interessante.
Então, se eu passei em dólar assinar palavra, eu primeiro
quer ter acesso a que a tabela variável global.
E agora, se eu quiser verificar se uma palavra está lá,
Eu posso simplesmente dizer se é verdade que o seguinte é definido na tabela,
então vá em frente e retorno true; mais, return false.
Feito.
A outra metade do PSET 5.
>> Tudo bem, então, novamente, eu sou cortar alguns cantos.
Para ser justo, eu provavelmente deveria gastar mais alguns segundos
nesta aplicação.
E eu provavelmente não deveria zombar de tudo o hora que você colocar na PSET tanto.
Então strtolower é uma função.
Algo semelhante existencialista C em, pelo menos, para os caracteres,
mas o PHP tem uma versão corda toda.
>> Isso vai forçar tudo em minúsculas, o que alguns de vocês
poderia ter feito para canonizar o que você estava colocando em seu dicionário.
E agora você pode fazer isso em C, também.
Isto não tem nada a ver com o PHP.
>> Mas sempre que você tem uma condição booleana,
como algo na linha 10 lá, o que só é
vai avaliar a verdade ou falsa, e seu caso mais claramente
está retornando verdadeiro ou falso, eu poderia simplesmente realmente fazer isso mais sexy
e apenas fazer algo como isto.
De modo que não é a minha função de verificação.
Certo, se o booleano retorna verdadeiro ou falso,
vamos devolvê-lo imediatamente.
>> E há alguns outros ajustes Eu poderia fazer aqui e ali.
Descarregamento Load--, aliás, que é feito.
Nada a fazer lá.
Uma vez que toda a memória em PHP e muitas outras línguas
é realmente conseguiu para você.
Assim, enquanto no C, como você aprendeu dolorosamente,
qualquer coisa que você malloc ou calloc ou realloc, você tem que se livrar.
Qualquer coisa que você fopen, você tem que usar fclose, para que os recursos são finalmente libertados
e ferramentas como Valgrind não fazer perceber e não se queixam,
que é uma coisa boa para correr com eles.
>> Mas, certamente, não deve haver alguma captura, certo?
Caso contrário, nós meio que desperdiçado um monte de semanas.
Portanto, há uma série de razões por que tipo de tomar essa trajetória,
mas há um trade-off.
Certo, isso tem sido temática.
>> Então, o que pode um trade-off aqui se deslocam, de C para PHP?
Sinto como se todos ganham tão longe que não um pouco de feiúra aqui ou ali.
Sim.
O que é isso?
>> Estudante: [inaudível] de memória.
DAVID J. MALAN: Speed.
Está bem.
Bem, a minha velocidade era muito rápido.
Certo?
Mas a velocidade de execução do programa?
OK, então isso é um ponto justo.
>> Então, como isso iria acontecer, eu antecipadamente cued-se tanto a minha solução tentativa, a um
Eu tinha na placa grande era uma solução à base de tentativa,
e eu tenho que neste diretório aqui.
Então, eu, em um momento, eu posso ir em frente e executar isso na Bíblia King James,
pressionar Enter.
E isso é esperançosamente correto execução no final,
me dá tempo no total de 0,38 segundos para que
um exemplo de algum modo arbitrário.
>> E se eu agora ir para este segunda janela de terminal
aqui onde eu abri primeiro gedit, vamos me entrar em code-- de hoje que, novamente,
É neste diretório aqui-- e deixe-me ir em frente e correr ortográfico.
Então, só para ficar claro, esta é a versão do PHP.
Estou apenas mostrando o início da mesma aqui.
>> Então, se eu faço ortográfico de til CS50 PSet cinco textos, King James, entrar.
É ainda mais rápido do que a escrita -lo em C, mas o tempo total de
é, o aviso prévio, de 0,93, ao passo que o meu Implementação baseada em C foi de 0,38.
Então é uma diferença não-trivial.
>> E este é apenas em um arquivo.
Se você fosse para executar os dois programas contra o grande conselho
e tem um monte de entradas testados, este seria certamente somar.
E se tivéssemos conjuntos de dados ainda maiores, isso, também, que se somam ainda mais.
Então, sim, pagar algum preço de velocidade é realmente o caso.
O que mais?
Sim?
>> ESTUDANTE: Quantidade de uso de memória RAM.
>> DAVID J. MALAN: Quantidade de uso de memória RAM.
Então eu não dar um segundo pensou ao escrever esta PHP
versão de quanto memória que eu estava usando.
Estou completamente adiar isso para PHP si e quem escreveu esse programa.
E isso pode ser OK, mas se eu realmente
preocupam com apertando tanto o desempenho fora do meu programa ou fora do meu site
ou fora de qualquer ferramenta Estou construindo, talvez
PHP, na verdade, não é a linguagem certa.
>> E, de fato, é por isso que, para exemplo, muitos web servers--
os programas que reais servir-se content-- web
não são escritas em PHP ou em Python ou Ruby.
Eles são escritos, como agora você vai fazer com PSet 6,
em C, de modo que você pode espremer cada bit de desempenho fora dele
e realmente exercer controle de grão fino sobre o que é
acontecendo sob a capa e não apenas tomá-lo
para concedido algum superior estrutura de dados nível.
>> Considere-se, apesar de tudo, quem em PHP implementado
essa noção de um hash mesa-- é realmente mais
apropriadamente chamado de array-- associativa ele faz ou ela tem alguma idéia de que tipo
de entradas que vão ser colocar na estrutura?
Então, obviamente, não, certo?
É uma ferramenta genérica no conjunto de ferramentas que é
fornecida para quem quer para usá-lo, e por isso certamente que
não pode ser optimizado, em última análise exatamente o que você quer fazer.
>> Assim, o tempo de desenvolvimento trade-offs-- pode diferentes, o desempenho pode ser diferente,
complexidade ou uso de memória pode ser diferente.
E então o que você vai encontrar cada vez mais é que não há
vai ser diferente ferramentas para o comércio.
E, de fato, para um super maioria dos projetos finais das pessoas nesta classe,
acredite ou não, C não vai ser a linguagem certa para usar.
>> E, de fato, um dos delivery em última análise, para qualquer classe como este
é para você pensar sobre, bem, o que você deve retirar
prateleira quando quiser para resolver algum problema.
E, de fato, nós vamos atravessar essa ponte ainda mais quando olhamos para mais idiomas
mesmo para além de hoje.
>> Então transição vamos agora para talvez um contexto mais familiarizados
para a utilização de uma linguagem como PHP.
É pouco comum para usar em linha de comando, escrevendo roteiros
como eu fiz, mas é muito, muito mais comum.
E foi destinado a ser utilizado em a forma de ficheiros que tipicamente terminam
em .php-- mas isso é não um prerequisite--
que se gerar o conteúdo da web.
>> Então deixe-me ir em frente e abrir um pouco exemplos que eu preparado com antecedência.
E estes são, na verdade, uma espécie de verdade histórias em que uma das primeiras coisas
Eu nunca me fez depois de terminar CS50 e talvez, eu acho,
CS51 anos atrás é o meu companheiro de quarto e eu estava ajudando
para executar o intramural calouro programa de desporto, o que, no momento,
calouro tinha de se inscrever para várias esportes, preenchendo uma folha de papel,
como era chamado, andando em todo o quintal para Wigglesworth,
e deixá-la cair em algum queda porta de Proctor.
E então ele ou ela iria passar por los e, em seguida, na verdade, um e-mail manualmente
que foram registrados por algum esporte.
>> Então, claramente, uma oportunidade para melhorias.
Estes dias, você pode recorrer a apenas Formas do Google, mas volta no dia,
tivemos de realmente alcançar este for-- Não foi mesmo que a longo ago-- chegar
para uma programação linguagem que não era PHP.
Na época, era algo chamado Perl,
que já saiu de moda desde então.
Mas a ideia é a mesma.
>> E eu, essencialmente, sentou-se para tentar a porta vai versões Perl para PHP,
mas na negação completa, não deu qualquer pensamento para a estética ainda.
Então, aqui é uma página web.
Este é um arquivo.
Se eu aumentar o zoom, sua aparentemente chamado froshim0.php
só porque é o nosso primeiro exemplo desta série.
E perceber que ele tem o que parece para ser um formulário HTML muito feio,
mas uma forma é interessante porque permite
me proporcionar a entrada do usuário para o navegador.
>> Agora última vez quando tivemos um formulário, para quem é que nos submetemos nosso parâmetro de consulta,
o parâmetro de fila, como era chamado?
Então, para o Google, certo?
Estamos totalmente punted na idéia de fazer qualquer coisa com essa entrada.
>> Mas hoje, nós começamos a produzir a saída.
E o comportamento que eu vou ver aqui, inicialmente, é bastante trivial.
David, eu vou marcar gênero aqui, diz Matthews aqui.
Eu não vou ser o capitão.
Vou clique em registrar.
E note que a URL tem alterado para registrar-0.php,
e depois há este texto feio aqui.
Eu não pensou em a formatação deste.
>> Mas o que é interessante é que três Os valores foram aparentemente passado.
Esta é uma espécie de PHP equivalente a printf--
vamos ver o que é realmente chamado em um bit-- que apenas imprime
o que você passou para ele.
Então isso sugere que essa forma tinham, pelo menos, três campos para isso,
e você me viu digitá-los.
Um deles era o meu nome, uma era gênero, um era dormitório.
E o capitão nem sequer são enviados para o servidor, porque eu não verificá-lo.
>> Então, isso quer dizer, aparentemente, quando você enviar as coisas na web,
não só a URL às vezes change-- às vezes isso não acontece.
Na verdade, o nome do arquivo alterado, mas o que está ausente da URL
que nós vimos da última vez com o Google.
Sim?
>> ESTUDANTE: Não string de consulta
>> DAVID J. MALAN: Não há nenhuma string de consulta.
Não há nenhum ponto de interrogação alguma coisa.
Não há nenhum ponto de interrogação q é igual a gatos, como fizemos da última vez.
E não há dúvida nenhuma Nome de ponto de interrogação é igual a
David ou dormitório é igual Matthews, Então, onde é que tudo está indo?
>> Bem, deixe-me voltar para gedit aqui e abrir o primeiro desses arquivos
no meu vhost, host local, público diretório aqui e ir para froshim0.
Assim, verifica-se que quase tudo desta página é apenas HTML.
E isso pode ser estranho para você, mas logo será mais assim com PSET 6
e PSET 7 e 8 PSET.
Mas esta é apenas uma página HTML.
>> E a coisa interessante parece ser aqui.
A tag form cuja ação atributo tem um valor de registro 0.
É por isso que quando eu submeto isso, ele vai para o arquivo.
Mas o método é diferente pós today--.
Assim, verifica-se que há pelo menos dois métodos utilizados na web
para enviar informações a partir do navegador para o servidor.
Get coloca na URL.
Publicar o coloca em outro lugar.
E quando e por que você pode realmente quer um site
usar post, então, em vez de obter, apenas intuitivamente?
Qualquer site.
Que tipo de dados devem ser passados ​​apenas por inferência agora via correio, por oposição
para chegar, se nós vimos as duas diferenças?
Estudante: [inaudível] seguro.
DAVID J. MALAN: Se você quiser algo para ser seguro.
Então, você pode digitar uma senha em um site, um cartão de crédito
em um site faria tipo de estes sub-óptima
se o navegador que colocar valor dentro da URL.
Por quê?
Você vê, o que não faz parece ser um negócio tão grande,
mas as probabilidades são que você anda muito freqüentemente longe de seu computador computador ou uso
laboratórios, e assim por alguém pessoa ou mesmo um companheiro de quarto
poderia facilmente caminhar para cima e ver que informações privadas.
Quando você envia um e-mail via web, você provavelmente
Não quero esse final de dados se na URL também.
E por isso há uma série de razões por isso que pode querer colocá-lo aqui.
E bem photos--, eu não posso mesmo bastante imaginar como você levaria um gráfico,
como um JPEG, e colocá-lo em uma URL.
Você poderia fazê-lo.
Há maneiras de codificar-lo, mas é apenas não é simples assim.
>> Então inscreva 0 é realmente muito abaixo do esperado.
Tudo o que diz, literalmente, é isso.
Ele imprime dentro de alguns Tags HTML o seguinte.
Eu tenho um código PHP aqui aninhada dentro de uma tag de pré.
"Pré" significa apenas texto pré-formatado, mono-espaçada, como uma máquina de escrever.
>> Printr é uma função recursiva de impressão.
E depois há este coisa interessante aqui.
E nós vamos voltar a este porque há outros,
mas sublinhado cifrão pós parece ser
uma variável em PHP no qual nada você envia a partir do navegador para o servidor
fica armazenado para você.
E vamos ver como chegar em que a informação antes do tempo.
>> Mas, primeiro, vamos voltar para um exemplo um pouco diferente.
Indo para register-- ou em vez disso, froshims1.php,
que parece um pouco diferente.
Tomei um pouco mais esforço com a formatação,
mesmo que ele ainda é muito feio.
Mas eu estou indo para ir em frente e digite "David" agora.
Masculino.
Vamos verificar "capitão" desta vez.
Faremos Matthews.
E se cadastrar.
>> E desta vez ele diz que, hm, não realmente.
Tudo bem, então o que é registrar um?
Deixe-me entrar em registo aberto um hm e-.
Tudo bem, então isso é interessante, e este
é um trampolim em direção agora programas mais interessantes.
>> Observe o início desse arquivo tem um PHP tag bem como a alguns comentários.
E estes são, para já, uma distração então vamos nos livrar desses comentários
como eles estão em C. E eu reclamo com este pedaço de código com um comentário
que este código é validando a apresentação.
>> Bem, acontece que variáveis ​​como cifrão
sublinhado post são chamado de super globals.
Eles são como estes variáveis ​​globais especiais
que são apenas omni-presentemente disponível dentro de seu programa.
E você pode usar a notação de colchete indexar para eles não usando números
como 0, 1, 2, 3, mas as palavras reais.
>> Assim, você pode pensar em cifrão sublinhado posto como uma espécie de tabela hash
que você poderia passar uma chave em uma pesquisa palavra-nos entre os colchetes,
e ele vai lhe dar de volta o valor que o usuário realmente fornecido.
PHP tem uma função chamado vazio que só
diz sim ou não, este variável está vazia ou não.
Temos estas barras duplas, que apenas significa ou, como em C.
>> Então, na verdade, essa linha 4 é apenas dizendo que se o usuário não dar um nome
ou não deu um gênero ou não dar um dormitório, vá em frente e redirecioná-lo
ou ela via essa linha aqui.
Então, isso é um pouco enigmática, mas isso apenas significa literalmente
voltar a este local, por isso, o utilizador pontapés
de volta para onde quer que ele ou ela veio.
Mas é um pouco deselegante em que ele codificado.
>> Mas e se essa condição se não avalia a verdade?
E se o usuário me deu seu ou o nome dela e dormitório e de gênero?
Que, se a condição não é vai avaliar a verdade,
então eu não acertar a saída na linha 7.
Então o que acontece?
E isso é o que é interessante sobre PHP.
>> Você pode deixar cair para dentro e fora de modo PHP, por assim dizer.
Se você quiser algum código para executar, você pode abrir e fechar a tag PHP
e colocar o código lá como eu fiz aqui.
Assim que você fechar a tag PHP, o servidor
é só ir para cuspir o que você colocar lá.
E, de fato, isso era parte do o projeto original do PHP,
para melhor ou pior, foi esta fungibilidade de código e marcação
língua.
E veremos que esta muito rapidamente se transforma em uma bagunça.
E assim vamos fazer melhor do que este, em última instância, mas apenas
perceber a facilidade com que eu sou realmente capazes de executar alguma lógica.
>> Mas ainda um pouco abaixo do esperado.
Vamos abrir versão dois de Frosh IMs, que
aparentemente se submete a register2.php.
Portanto, este arquivo está realmente acontecendo olhar quase o mesmo.
Eu estou indo para ir para Frosh IMs 2.
Mas em Frosh GI 2, vamos ver o que acontece.
>> David, clique no botão de rádio, como ele é chamado; Matthews, sem capitão.
Registre-se.
Está registrado.
Não é realmente.
Oh, espere, nós fizemos Nesse exemplo, não foi?
Tudo bem, fique.
Nós vamos fazer a três.
É evidente que algo é sobre acontecer com o Gmail.
Nós vamos chegar lá.
>> Então Frosh IMs 3 se parece com isso.
Não é diferente.
Mas quando eu faço David, do sexo masculino, Matthews, e registrar, esta terceira e última versão
reivindicações, simplesmente você, são registrados realmente.
Esse é o tipo de imaterial.
Mas eu afirmo com este terceira e última versão
Tenho agora recriada exatamente o que meu companheiro de quarto e eu construído para os IMs Frosh
anos do programa atrás.
E era simples.
Não havia banco de dados, nenhuma planilha Excel.
Mas, mais importante, não havia mais papel
porque o que fizemos com este programa era, na verdade, e-mail o inspetor, que
estava recebendo anteriormente estas coisas através de formulários.
>> E, aparentemente, temos programado isso em tal maneira que, quando alguém registra,
E-mails da conta de John Harvard a proctor-- ou a si mesmo neste caso,
John Harvard-- com a seguinte texto-- "Esta pessoa acabou de registrar."
Nome é David, o capitão está em branco; gênero, do sexo masculino; e dormitório, Matthews.
>> Então o que aconteceu lá?
Bem, o arquivo em questão aqui é aparentemente register3.php.
E se eu abrir isso, você vai ver tanto o poder do código como este
e também, francamente, a insegurança de um sistema como o e-mail.
Acabo efetivamente fingiu ser John Harvard da seguinte maneira.
>> Tenho a tag php aberto em cima, o que apenas diz aí vem algum código PHP.
Aqui em baixo, gira lá fora são bibliotecas em PHP.
Você só não precisa incluir arquivos de cabeçalho como muito.
Você ganha mais com a pia da cozinha, por assim dizer.
>> Mas, desta vez na linha 4, eu faço quer biblioteca especial chamado
PHP mailer, que é algo que você pode instalar gratuitamente em muitos sistemas.
Aqui embaixo estou validando a apresentação apenas
verificando se o usuário dar me um nome, um gênero e um dormitório.
E se assim for, vá em frente e instanciar um mailer.
>> Você pode pensar nisso como sendo uma linha de código que só aloca.
É como malloc, mas é um pouco mais sexy
em que você não mencionar apenas malloc e algum número genérico.
Você diz que me dar um destes, dá-me um novo um destes.
>> E se você já programou em Java ou C ++ ou outras linguagens,
você pode ter visto isso.
Mas a curto do que, se desconhecido, esta linha
coloca em correio cifrão uma estrutura especial chamada
um objeto que foi construído com funcionalidade de e-mail.
E, de fato, perceber e sintaxe similar.
>> Este não é um ponteiro, per se.
PHP apenas usa a mesma sintaxe.
Esta linha está dizendo utilização SMTP-- Simple Mail Transfer
Protocolo, que é apenas o protocolo usado para enviar e-mails.
Este é que especifica a utilização Servidor SMTP de Harvard, que
está em algum lugar aqui no campus.
>> Isto está dizendo que o TCP número da porta para conversar,
e eu só percebi isso por pesquisando ou perguntando ao help desk.
E depois porque Harvard usa algum segurança do sistema na server-- correio
pelo menos para criptografar tráfego entre você e ele,
mesmo que qualquer pessoa pode enviar para ele-- Vou ligar o protocolo TLS
para manter esta seguro.
>> Mas é aí que as coisas ficar um pouco assustador.
Eu posso apenas arbitrariamente dizer que estou jharvard,
e eu posso apenas arbitrariamente enviar e-mail me aqui.
E então eu posso especificar um assunto com essa linha aqui.
>> E isso só parece feia, mas é apenas um monte de concatenação.
Acontece que o PHP tem um símbolo super útil, como algumas línguas, o operador ponto,
que apenas literalmente concatena cadeia após cadeia depois de cadeia,
e você não tem que malloc ou figura o comprimento total da cadeia.
Você só faz isso.
E, de fato, porque eu estou concatenando em todas essas coisas com esses pontos,
é por isso que o e-mail que eu enviado olhou como fez.
>> E então, finalmente aqui, estou enviando mail.
Então, se isso é falso, Eu só vou morrer,
que é uma função que apenas impressões para a tela alguns mensagem de erro.
Mas é, de facto, chamando a função de envio.
Caso contrário, se tudo isso falhar, ele me redireciona para cá.
>> E por que eu vejo que Estou registado realmente?
Bem, isso aconteceu aqui.
Então eu trago isso para um par de razões.
>> Um deles, é exatamente assim que se você construir algum site para um projeto final
ou para o mundo real, este é como você enviar lembretes de e-mail
para seus clientes ou seus assinantes.
Isto é como você enviar lembretes de senhas.
Isto é como você enviar mensagens de pessoas que eles têm um novo Facebook
mensagem pendente ou algo parecido.
>> Mas também fala o facto de que esta podia
têm sido muito bem desde Davin ou qualquer outra pessoa.
E eu digo que esse tipo de com um sorriso, porque eu sou
muita certeza do que está passando por várias de suas mentes neste momento.
Mas este é um daqueles faça como eu digo, não como eu faço tipo de coisas,
porque é trivial forjar e-mails como este.
Mas, como você pode ter visto ou ler no Crimson,
de tarde também é muito trivial para pessoas
rastreá-las para alguma origem.
E perguntar-me algum tempo, talvez em CS50 almoço, como eu primeiro
conheceram muito de perto quase às tabuleiro ed muitos anos
atrás, quando eu descobri como a internet funcionou.
Assim, em qualquer case-- ligeiramente depois que o conselho fez ed.
>> Assim, em qualquer caso, existe uma todo grupo de super-globals,
como são chamados aqui, um dos quais nós saw-- pós dólar sinal de sublinhado.
Há uma contrapartida chamado get, que é onde o material a partir de uma URL
acaba indo.
E há um monte de outros, sessão demasiado-- e servidor e cookie.
Vamos voltar a biscoito algum outro momento,
mas sessão é legal porque neste agora- até agora-
tudo o que fizemos com um navegador web é uma espécie de apátrida, por assim dizer.
Posso clicar em volta, o acesso arquivos no servidor, algo
acontece na tela, mas em seguida, a conexão é fechada.
O Internet Explorer ou o Ícone do Firefox pára de girar
e você só ver o que essa página web contém.
>> Então HTTP é apátrida em que uma vez que ele faz uma conexão,
recebe alguns dados, é isso.
Não há mais respeito, ao contrário do Skype, ao contrário Facetime, GChat ao contrário, o que
mantém uma constante ligação ao servidor.
A web é fundamentalmente desconectado, mas vamos
ver em pouco tempo como podemos simular coisas
como o Facebook chat e GChat, aquelas que mantêm a illusion--
ou realmente fazer manter um conexão constante com
tecnologia mais moderna.
>> Mas se eu for para, digamos, counter.php, este é mais um exemplo simples,
como veremos, que pensa atualmente Eu visitei o site tempo zero.
Mas se eu simplesmente recarregar a página, que de alguma forma sabe que eu estava aqui antes.
Se eu recarregar novamente, sabe que eu estava aqui antes.
E de novo e de novo e de novo e de novo.
>> Então, há alguma mais-plussing acontecendo, mas aviso
a pequena coisa gira sempre tão brevemente em cima e depois desconecta,
então não é como se eu tivesse uma constante conexão com o meu aparelho.
Bem, se eu entrar em counter.php, perceber como é simples.
A primeira vez que chamar isso de especial função que veremos em breve
começar a tomar para concedido chamado de início de sessão.
Iniciar uma sessão.
>> E uma sessão a partir de agora é apenas vai ser um balde, como um shopping
carrinho em que você pode colocar valores e tipo de confiança como um programador
que eles vão estar aqui quando que o usuário vem traseira-- uma segunda
depois, uma hora mais tarde, mesmo um ano depois, contanto que ele ou ela não desaparecer
seus cookies, como vamos finalmente ver.
E agora eu só tenho uma condição se aqui.
Então, se a seguinte chave, chamado de contador, é definido dentro
dessa super global-- esse hash mesa, se você will-- chamado sessão,
então vá em frente e pegue o valor do think session--
deste como um shopping cart-- e armazená-lo
em uma variável temporária chamado contador.
>> Caso contrário, se o valor do contador foi não definido no chamado carrinho de compras,
apenas inicializar a 0.
Por último, aqui em baixo, vá e coloque de volta para os carrinhos de compras ou a sessão
o valor do contador de um.
Assim, verifica-se que este aqui-- especial recipiente
que, de novo, é um destes associado matrizes, uma matriz que você pode indexar
em palavras, em vez de Números de persiste mesmo depois que o usuário vai embora.
Mais uma vez, eu vou voltar para a página agora.
Tem sido um minuto ou assim.
Mas lembra que eu tenho estive aqui 19 vezes antes.
Este é o meu 20º visita.
>> E assim é que isto vai ser a chave para implementação de qualquer site que se lembra
que você está conectado, que você colocou algo literal em seu carrinho de compras
para comprar ou que você tem algum número de mensagens pendentes.
Sempre que você quiser lembrar de informações,
vamos ver que o PHP, como diversas outras linguagens,
fornece-nos com essa ilusão de estado embora, como você verá em PSET 6,
como você está fazendo solicitações HTTP do cliente para o servidor, é isso.
Uma vez que você receber de volta esse resposta, não há nada mais
voltando do servidor por padrão.
Mas vamos ver como resolver isso.
>> Bem, agora, vamos tentar limpar isso um pouco.
Nós vimos alguns diferentes exemplos lá.
Ah, e como um aparte, para os familiares ou não,
a razão pela qual o Exemplo Frosh IMs foi
de olhar realmente feio para slightly-- bem,
ainda ugly-- a ligeiramente menos feio embora ainda feio
é porque se olharmos o código fonte aqui,
verifica-se que eu tenho essa no topo do arquivo.
>> Acontece que de bootstrap é um dos muitos bibliotecas livremente disponíveis lá fora
que não existe para linguagens de programação sempre, mas para CSS ou JavaScript para
ou HTML ou qualquer número de idiomas.
>> E essas pessoas aqui-- originalmente saiu
de Twitter-- só tem um monte de estilos.
É um arquivo enorme aqui que alguém escreveu,
ou alguém da escreveu, ao longo do tempo que especifica as cores e formatação
e outros enfeites para que eu possa tipo de emprestar sua sintaxe
e não tem que descobrir como colocar meu formulário.
Isto também é minified de modo que um computador pode
compreendê-lo, mas não necessariamente um ser humano.
Então, isso é só por isso que o estilização não mudou.
>> Mas vamos agora fazer melhor em termos de design,
porque se ficarmos para baixo esta estrada por muito tempo,
nosso código vai ficar confuso e bagunçado.
Então, vamos concentrar-se nesses exemplos aqui.
A última de hoje.
>> Então aqui vai uma super simples versão 1.0 do site da CS50.
Ele só tem links para palestras e conteúdos programáticos,
e ele está usando essa lista não ordenada tag-- a marca UL que usamos última vez.
E se, na verdade, se eu abrir View Page Source,
você vai ver que isso é realmente, HTML muito simples.
E, de fato, mesmo que esta seja um arquivo PHP debaixo do capô,
ele é ainda apenas cuspindo fora apenas HTML para agora.
>> Então, se eu clicar em palestras, vemos isso acontecer.
E se eu clicar em semana zero, vemos isso.
E se eu clicar em Quarta-feira, nós vemos isso.
E isso, aparentemente, foi o PDF dos slides a partir daquele dia.
Tudo o que eu tenho feito é ligação com um âncora tag para este URL aqui.
>> Então, isso é só para dizer que este é um bonito versão simples do site do CS50.
Vamos ver como ele é implementado.
Se eu ir para o diretório mvc0, vamos ver alguns arquivos.
Um deles é um README, então se alguns isso é muito rápido,
você pode apenas bisbilhotar mais vagaroso mais tarde.
E aviso aqui é um arquivo index.php.
Acontece que, se você mesmo, o ser humano,
não especificar um nome definitivo em uma URL, o servidor web normalmente
infere algum nome padrão para você.
Um índice dot algo é geralmente o padrão.
>> Então é por isso um momento atrás quando visitei este URL aqui,
nenhum nome de arquivo, nenhum arquivo extensão, nenhum período na URL.
Ele só sabia que de alguma forma magicamente a olhar para index.php.
É apenas uma convenção.
Poderia ser chamado de qualquer coisa.
>> Então, se eu agora vá em index.php, você verá
que, indeed-- vamos se livrar dos comentários
aqui porque não há realmente nada de interessante para ele--
este é apenas codificado HTML.
Então, isso é consistente, porém, com o meu pedido
que você pode misturar HTML e PHP.
Não há real lógica de programação aqui.
>> E os outros arquivos são bastante muito tão desinteressante.
É só uma semana hard-coded aqui para uma semana m e uma semana w,
para segunda-feira e quarta-feira.
E então se eu abrir semana zero, notar que é quase idêntico.
>> E isso é uma espécie de takeaway chave.
Observe o quão redundante que é isso.
Esses arquivos mal mudar, e ainda assim eu puxou um desses postos de trabalho de copiar / colar
onde tomei um file-- presumivelmente na semana zero-- copiados por
quando uma semana chegou, e ajustados alguns valores.
Nós provavelmente deve ser capaz de fazer melhor do que isso.
>> Então, vamos voltar até mvc e vai para a versão um.
E note que eu tenho um alguns arquivos, porque o que
era comum a todos esses arquivos apenas uma momento ago-- se eu voltar para a versão 0,
vamos voltar para o índice, e apenas postulate--
uma vez para me livrar do comments-- que parte desta página
é, presumivelmente, em cada um dos meus arquivos?
Basta chamá-lo para fora.
Que linhas são duplicados provavelmente através de todas estas páginas?
Sim?
>> Estudante: [inaudível].
>> DAVID J. MALAN: 1 a 9.
Sim, com certeza.
De 1 a 9, exceto talvez 8 muda um pouco, porque CS50
torna-se palestras ou semana zero ou algo assim.
Mas quase idêntica.
Então, tudo isso é apenas tipo de copiado e colado.
E há um casal outras linhas que posso pensar
de que são provavelmente idênticos em todos os arquivos.
>> Estudante: 12 e 13.
DAVID J. MALAN: Yeah.
Claro, 12, 13 e 14, provavelmente, só porque as coisas interessantes
está acontecendo em linhas de 11 e 10, pelo menos assim parece.
Então, vamos olhar para a versão 1, que tenta melhorar isso.
Na versão 1 do presente example-- mvc nós vamos explicar o que mvc meio de uma moment--
se eu entrar em índice, tipo de parece um pouco confuso agora.
Não é tão simples como antes.
>> Mas uma vez que você começa a lê-lo com cuidado, é
bastante simples o que está fazendo.
Aparentemente, a linha 1 e linha 8 substituíram
todas as coisas que você acabou de identified-- embora apenas para uma boa medida,
Deixei os MMSS não apenas no caso de alguns dias, não tenho uma lista de coisas.
E assim o exigem é como libra incluir em C. Ele copia e cola
os conteúdos de forma eficaz aqui neste arquivo.
>> Assim, em header.php, como você pode inferir a partir do seu nome,
vai ser o cabeçalho da página.
É uma espécie de orfandade aqui.
Ele só tem a parte superior a ele, mas Não há mais conteúdo abaixo.
>> E se eu olhar para rodapé, entretanto, que foi o outro arquivo mentioned--
este é ainda menos interessante, mas, novamente, é comum a tudo.
Então este é o rodapé.
Este é o cabeçalho.
Este é o arquivo que é mudando, então por que não
tentar fatorar o comunalidade com estas duas linhas aqui?
>> Mas podemos limpar isso até um pouco mais.
Eu estou indo para ir em frente e abrir versão dois, onde
veremos que há um novo arquivo, helpers.php.
Vamos ver o que que está em um momento.
Vamos para o índice, como o ponto de entrada como antes.
>> E agora percebe que eu estou requerendo helpers.php, não cabeçalho ou rodapé.
Mas ajudantes é tipo de gosto helpers.c e helpers.h de PSET 2
ou PSET 3 há muito tempo quando você realmente se procurar e encontrar para que PSET,
e você teve todo o seu código para classificar e busca em um arquivo separado.
Isso é o que está acontecendo aqui.
>> E agora a linha 3 parece um pouco diferente.
E isso é apenas uma linha.
Para tornar isso ainda mais claro, eu poderia apenas
Não que isso seja estilisticamente consistente com tudo o que fizemos.
Mas isso não é realmente alterar a funcionalidade.
É apenas uma linha de código real.
>> Aparentemente, há uma função em algum lugar chamado tornar cabeçalho,
E é aí que as coisas ficar muito poderoso.
Note-se que no interior das suas parênteses é o que outra peça de sintaxe?
É provavelmente um pouco difícil de dizer, mas notar there's-- eu vou colocar algum branco
espaço.
Há colchetes.
>> E colchetes vimos um pouco atrás no contexto de matrizes de associação,
que são, de novo, como tabelas de hash.
E se você acha que agora a C, o ordem dos argumentos em uma função
tem de ser sempre a mesma.
Você tem que lembrar que o encomendar x é--, y, z ou z, y, x--
e você tem que fornecer-lhes sempre na mesma ordem ou procurá-los
se você esqueceu.
>> Mas esta parece ser uma maneira inteligente de passar um valor de chave arbitrária
pares pelo qual título é o nome de um argumento, neste caso,
e CS50 é o seu valor.
E o fato de eu ter esses colchetes
aqui significa que eu pudesse também passar em algo
como uma semana ou 1 é 0 ou 2 ou 3.
Então, nós parametrizado esta função, de tal forma
que pode levar várias entradas, mas por enquanto é apenas uma.
>> Se eu agora vá em helpers.php, perceber o que está fazendo.
Este é um pouco de novas funcionalidades,
mas por agora apenas tomar na fé de que este é
a sintaxe com a qual você definir uma função em PHP.
Você literalmente dizer função.
Você não especificar um retorno tipo, e isso é consistente
com o pormenor da variável anteriormente onde você realmente não fortemente digitar.
>> Isso só especifica que, por padrão, este
leva uma associativo matriz como um argumento.
E você sabe o quê?
Se o usuário não passar uma em, assumir um valor padrão.
>> Este é um recurso que C não tem para nós, o que é bom, porque agora
dados, mesmo se você não dar-lhe qualquer coisa,
vai ser um matriz, mas um vazio.
E como um aparte, extrato só faz algo funky
onde leva todas as chaves a partir deste matriz associativa, todas as coisas
você poderia colocar entre colchetes, e cria variáveis ​​fora delas
para que possamos, finalmente, ter acesso a eles em footet.php e header.php.
Isso é um pouco abstrato, então deixe-me apontar isso.
>> Em index.php, perceber que eu sou passando um par de valores-chave do título
com um valor de CS50.
Se eu agora olhar para helpers.php, notar que RenderHeader
é extrair os dados que eu estou passando em, em seguida, exigindo header.php.
O que eu fiz é uma espécie de um pobre homem de implementação de agora o seguinte.
>> Se eu abrir header.php, Repare que eu não tenho mais difícil
codificado a palavra CS50 neste arquivo de cabeçalho.
Eu coloquei este reconhecidamente atrozmente função chamada, HTML caracteres especiais,
lá dentro.
Mas observe o que eu fiz.
Eu tenho HTML aberta.
Eu, então, ter a cabeça aberta e título em aberto.
>> E, em seguida, dentro do título do aberto e tags de perto, eu tenho um pouco de código PHP.
E este é um bom, mas de sintaxe, o que significa apenas eco fora.
Isso significa, literalmente, isto-- ecoar o following--
mas esta é a mais sexy de escrever.
Ecoam o título que foi passado.
>> Mas o que você acha HTML caractere especial é sobre todos,
especialmente se você tiver alguma experiência anterior em HTML?
Que personagens pode ser perigoso para passar para uma página
onde você está gerando dinamicamente a página da web com um código como este?
Deixe-me ir para esse arquivo, versão dois, e ver se eu não posso induzir isso.
>> Versão dois é esta.
E observe tudo está bem, trabalhando bem.
Mas suponha que eu entro em index.php e I especificado que o título da minha página
Não é CS50.
É alerta roteiro suporte aberto Olá mundo, citações próximo single,
próximo parêntese, ponto e vírgula, suporte aberto, roteiro barra.
>> Script, como veremos eventualmente ver, é uma tag
que você pode usar para usar de outro linguagem de programação chamada
JavaScript dentro de uma página web.
E agora perceber a lógica aqui.
Aqui está uma chave chamada título.
Aqui é que é de valor a longo louco agora.
>> Mas se eu for para os ajudantes page- ou melhor, a página de cabeçalho,
Eu estou chamando esta função em que o título pela primeira vez.
Então, se eu agora recarregue esta página, eu ver isso, que parece ridículo,
mas é seguro.
Ele apenas parece estúpido.
>> Mas suponha que em vez Eu tinha esquecido isso.
E marque minhas palavras, um número diferente de zero de você esquecer de fazer isso
e você vai ter algum trabalhador estudante ou amigo chegando
para você na feira CS50 ou anonimamente à noite bisbilhotando em seu site
e, essencialmente, injectando código sem o seu conhecimento em seu site
de alguma forma.
>> Porque se eu simplesmente cuspir a título aqui e título
há-- bem, se o título literalmente se parece com isso e PHP
como uma linguagem que pode cuspir fora outros idiomas texto,
esta é, literalmente, indo para substituir essa tag com,
é claro, o que eu coloquei em outros lugares.
>> Então, se eu agora vá aqui e recarregar após desfazer esses mecanismos de segurança,
agora eu tenho Olá mundo aqui.
Agora isso não é tudo que de um grande lidar, mas você poderia fazer algo
um pouco mais malicioso aqui, como há
outro tags-- como veremos, uma vez que gastamos mais tempo em JavaScript-- como localização
dot href recebe, citações, fecha aspas, HTTP business.com, mas o oposto do que
a partir do outro dia.
E agora você pode induzir um web página para realmente ir imediatamente
a esta página web aqui.
>> E na verdade, eu não quero até mesmo para ir para business.com
porque eu não quero para saber o que é.
Mas isso, também, irá desencadear código para ser injectado desta página.
Então, isso é só para dizer que, apesar de estamos introduzindo super cedo em alguns
destas estruturas mais complexas, é tudo para um fim de certificar-se
que o código não é explorável.
>> Então, agora uma terceira versão aqui.
Está ficando um pouco mais extravagante.
Eu realmente não como-- o lado anal de mim
estava ficando um pouco irritado com a fato de que eu tinha uma função chamada
RenderHeader e RenderFooter que eram quase idênticos.
Então, ocorreu-me, por que não fazer Eu parametrizar estas funções
em apenas um chamado render, têm que ter um segundo argumento
como o nome do modelo, a final para render-- qualquer cabeçalho ou rodapé?
E, em seguida, opcionalmente, se eu quiser para passar em alguns pares de valores-chave
como eu faço para o título para o cabeçalho, mas não para o rodapé,
Eu poderia fazer isso.
>> E agora, se eu entrar em helpers.php, é um pouco mais complexa.
E eu vou acenar as mãos no detalhes, mas é apenas uma função.
Então isso é um passo em direção a um projeto melhor.
>> Podemos dar um passo adiante.
Se eu vou para o meu quarto versão deste, observe agora
que eu estou fazendo algo ainda mais espécie de enigmático.
E eu sei que este é um muito para absorver de uma vez,
mas nós somos apenas uma espécie de limpeza coisas.
Agora eu estou colocando meus ajudantes arquivo em uma pasta chamada
includes-- apenas um arbitrário nome onde eu quero colocar coisas
que eu quero include-- e depois o resto desta é o mesmo.
>> Mas se eu olhar agora no gedit, aviso que eu comecei livrar
de todos esses outros arquivos e não tenho moveu-los, por exemplo, para aqui.
E então, em modelos, Eu tenho esse também.
E assim tudo isso é agora em direção a um passo de usar um muito melhor padrão de design.
E nós estamos muito rapidamente indo a afastar
da funcionalidade padrão do PHP, que nós começamos aqui com,
onde você só misturar PHP, e HTML, e seu CSS,
e você simplesmente cuspi-la e você vai fazer sobre o seu caminho.
Não vai ser muito fácil de manter.
Assim como em C, que começamos a usar múltiplos arquivos e múltiplas funções
e factoring coisas isso.
Nós vamos fazer o mesmo aqui.
E, de fato, no quinto e último versão aqui, eu fiz uma outra coisa.
Você ainda pode usar dot dot, que, mais uma vez, é apenas o diretório pai.
Para ser ainda mais consciente de segurança, porque se eu olhar para a escuta
aqui para quinta e versão final, aviso que eu tenho um diretório chamado aqui
público e, em seguida, no mesmo nível, por assim dizer,
Tenho inclui e modelos e, em seguida, esse arquivo de texto leia-me.
>> E a razão pela qual eu tenho estruturado ele gosta isto-- e tantos web
hospedeiros, especialmente os US $ 5 por os meses ou uns 10 dólares mês,
se você já teve um desses services-- o que muitos deles fazem
é que eles só esperam que você despejar todo de seus arquivos em um diretório,
como já fizemos com este primeiro exemplo.
>> Mas assim que você começar a construir mais locais sofisticados que apenas armazenam
dados que se preocupam e arquivos que você preocupam, realmente organizar as coisas
correctamente e com mais segurança consciência na mente pode
começamos a defender contra todos os amigos
que você tem dentro ou fora desta classe que,
assim que você começar a fazer programas se na web,
vão começar a escolher sobre você e sobre eles.
>> E assim vamos olhar em última análise, o seu design.
Esta é apenas uma imagem que descreve a seguir.
Nós vamos colocar todo o nosso lógica de programação em um ou mais arquivos,
e vamos apenas começar chamando esses controladores.
É onde o cérebro de nossos sites realmente são.
Então nós vamos têm vista, e vista
são tão simples como apenas separado files-- chamados templates, muitas vezes.
Eles só têm a estética da minha página,
o que eu quero a página para olhar como-- as cores eo layout
e as posições de todas as variáveis.
>> E, em seguida, mais interessante que vai finalmente chegar a
é o modelo, o que vai ser apenas a palavra que bater em outras tecnologias
que trazemos para o imagem, como bases de dados reais,
de modo que quando você quer para salvar as informações,
que não basta enviar um e-mail para o seu proctor ou a si mesmo,
você realmente armazená-lo em um banco de dados usando outra linguagem conhecida como SQL.
E assim nós vamos sair daqui hoje e pegar com este na quarta-feira
e introduzir as bases de dados, em seguida.
>> [Música tocando]