[Powered by Google Translate] [Semana 8, Continuação]
[David J. Malan] [Harvard University]
[Esta é CS50.] [CS50.TV]
>> Este é CS50, de modo que este é o fim da Semana 8 aqui.
Nós, naturalmente, tinha um pouco de um furacão no início desta semana,
então agora é realmente só você e eu nesta sala de aula,
mas hoje, continuamos nossa conversa sobre PHP
e sobre a programação web em geral, e também introduzir a idéia
de bancos de dados, especialmente um chamado MySQL, que é bastante popular nos dias de hoje,
em grande parte devido à sua escalabilidade, bem como porque o seu ser livre e de código aberto.
>> Mas, primeiro, um olhar de onde paramos da última vez.
Lembre-se que estávamos a olhar para os vários exemplos Frosh mensagens instantâneas,
e esta foi a forma horrível que eu vim com uns 15 + anos atrás
a fim de que os alunos sobre registo campus para esportes caloiro intramurais
sem realmente ter de percorrer mais em todo o quintal para Wigglesworth
a deslizar um pedaço físico de papel debaixo da porta alguns Proctor.
Em vez disso, mudou tudo online, mas para isso é necessário fazer uso
de algumas tecnologias, para um, precisávamos de HTML, linguagem de marcação de hipertexto,
que mais uma vez é esta linguagem de marcação com o qual você construir páginas web estruturalmente.
>> Usando um pouco de CSS estes dias, as folhas de estilo em cascata,
pelo qual usamos estilizações da página web usando uma sintaxe um pouco diferente,
enquanto que o HTML foi tudo sobre a sua estrutura.
Precisamos também de introduzir uma linguagem de programação web.
Neste caso, vamos usar o PHP e PHP vai permitir-nos
a saída de conteúdo de forma dinâmica, bem como fazer as coisas como programáticas
envio de e-mails, como foi o caso sobre a nota que saiu na semana passada.
>> Lembre-se que o código para isso foi em 2 partes.
Um deles, tivemos froshims3.php,
e este foi em grande parte de marcação com um formulário HTML dentro dele,
um pouco de CSS aqui em os atributos de estilo
para que a forma em si seria centrado na página, mas para além disso
tivemos algumas entradas forma representativa, um campo de texto, uma caixa de seleção,
alguns botões de rádio, um menu de seleção, e um botão de envio.
E através deste formulário, submetidos a um arquivo que foi aparentemente chamado register3.php,
que por si só parecia um pouco algo como isto.
Agora, a maior parte do código em register3.php, recall, era tudo sobre e-mail.
Ele fez um pouco de validação do formulário que foi enviado para assegurar
que os campos foram realmente desde que se esperava.
Em seguida, chamado algumas funções PHP usando um pouco nova sintaxe,
mesmo que seja emprestado de C.
>> Este operador seta nos permite fazer uso de algo chamado programação orientada a objetos.
Nós não vamos entrar nesse em detalhes aqui, mas sei que por agora
é uma maneira de ter funções associadas com os objetos,
que são um tipo especial de estrutura, como vimos em C.
Mas, por agora, basta ter fé em que esta é a sintaxe correta para usar
ao usar uma biblioteca como esta biblioteca PHPMailer.
E então, no final deste arquivo que tinha gerado dinamicamente um e-mail
que foi enviado para a minha conta jharvard@cs50.net
da minha conta jharvard@cs50.net,
e informado ao usuário, assim, que foram registrados para este esporte.
Isso é muito bonito o que o site de mensagens instantâneas Frosh fez todos esses anos atrás
quando eu implementado, concedido, em um idioma diferente,
mas mostra-lhe, talvez, o poder que você tem
agora que você pode se expressar não só programaticamente
a um nível baixo em uma linguagem como C, mas a um nível muito mais elevado
com estas aplicações do mundo real, como e-mail muito para realmente resolver
alguns problemas do mundo real.
>> Agora, é claro, apesar de eu usar esse script para gerar algum
dinamicamente a partir de e-mails jharvard@cs50.net, o que é de fato uma conta
que eu tenho acesso, a não ser muito cuidadoso para enviar
email somente de contas que são, na verdade, o seu próprio,
para que as coisas se você em um pouco de água quente na vida.
Com isso dito, vamos agora transição para a resolução de um problema completamente diferente,
a de estados de retenção.
Agora, o que isso realmente significa?
HTTP, este protocolo de transferência de hipertexto,
é na verdade um protocolo sem estado, eo que isto significa é que
quando você puxa algo como Google.com e tecle enter
normalmente o seu navegador tem algum tipo de ícone que, então, girando
resulta em alguma página da Web que está sendo baixado,
e depois que pequeno ícone parar de girar, e que de fato sugere
HTTP que tenha concluído algum tipo de conexão com o servidor e é isso.
O HTTP é stateless no sentido de que ele não mantém
uma conexão persistente com o servidor no Skype mesma forma faz
ou Gchat faz porque com HTTP
o pressuposto é que uma vez que você foi buscar uma página web que é isso.
>> Agora, na realidade estes dias em sites como Facebook e Google Maps
e Twitter e afins não há dinamismo muito mais pelo qual
mesmo depois que o ícone parar de girar você pode de fato ter mais atualizações
do servidor, mais tweets, mais atualizações de status no Facebook e afins.
Mas mesmo que está usando uma técnica que nós vamos falar em uma ou duas semanas
conhecido como Ajax usando uma linguagem chamada JavaScript,
mas no final do dia, o HTTP é ainda sem estado.
E ainda se você quiser alguma forma lembrar de coisas sobre um usuário
mesmo depois de terem desligado do servidor
PHP faz dar-lhe um meio de fazer isso
porque, como vimos pela última vez, PHP tem um número de superglobals,
e uma superglobal é, novamente, uma variável global especial
que é entregue a você pelo servidor web e pelo próprio PHP.
>> Você não tem que fazer nada para colocar valores em que,
e entre os superglobals que temos visto até agora são obter e postar,
que é onde os campos do formulário são colocados automaticamente para você,
bem como um par de outros que nós não vimos ainda.
Dentro de $ _SERVER são algumas variáveis ​​especiais relacionados com o próprio servidor.
Qual é o endereço IP, o que protocolo, HTTP ou HTTPS que você usa,
o método de solicitação que você usa e afins, por isso há algumas interessantes,
detalhes suculentos sobre o servidor, e, na verdade, o usuário de lá também.
Há $ _COOKIE, que é onde essas coisas chamados cookies são armazenados.
Nós não vamos gastar tempo com os cookies-se hoje,
mas sei agora que um cookie é apenas um pequeno pedaço de informação
que um servidor web pode plantar em um navegador
e por sua vez a sua memória RAM ou disco rígido seu computador
para armazenar informações sobre um usuário, por exemplo, seu nome de usuário
de modo que eles não tem que digitá-lo cada vez que entrar ou algum
número exclusivo ou identificador para esse usuário
de modo que você não tem que incomodar-los com os mesmos tipos de perguntas sobre
preferências no futuro, mas a maioria de interesse
agora é de R $ _SESSION.
>> Este superglobal, que, como os outros, é entregue a você automaticamente pelo PHP
quando você está escrevendo baseado em PHP sites
pode armazenar o que quiser, strings, inteiros,
pontos flutuantes, valores, matrizes, objetos,
realmente qualquer coisa que você quer, e ele permite que você guarde-o de tal forma
que, mesmo se o usuário visitar você agora e depois
volta de um minuto a partir de agora ou 5 minutos a partir de agora, porque
eles levam o seu tempo antes de clicar em algum outro link
PHP irá garantir que o que você colocar na sessão que superglobal
minutos ou 5 minutos atrás ainda estará lá quando o usuário retorna.
E debaixo da capa desta superglobal é implementado por meio de
essas coisas chamados cookies, mas por enquanto, é apenas uma abstração
qual é uma espécie de o equivalente a um carrinho de compras.
O que quer que você, programador, coloque em que
array associativo superglobal vai estar lá algum número de minutos depois
até que você apagá-lo ou até que o usuário fecha seu navegador completamente.
>> Vamos dar uma olhada em um exemplo de como essa coisa é realmente utilizada.
Em counter.php entre peças de hoje de código
temos a linha a seguir.
No início deste arquivo, temos um monte de comentários azuis, que são desinteressantes para agora.
Mas, na linha 13, temos uma nova linha,
session_start, e que, na verdade, faz exatamente o que diz.
Inicia-se sessões.
Ele permite que você use esse grande _SESSION superglobal $, e é tão simples como isso.
Agora, se continuar a procurar na linha 16, vamos tentar descobrir o que esta página web vai fazer.
If (isset ($ _SESSION ["contador"]), então vá em frente
e guarde na variável de contador, contador de minúsculas,
$ _SESSION ["Contador"].
Este parece ser declarar uma variável local chamada contador
dentro da qual está colocando uma cópia de tudo o que está dentro da superglobal
chamado sessão no local "contador".
Outra, aparentemente, este contador local pouco variável, é inicializado a 0.
>> Mas, em seguida, algumas linhas mais tarde, em 26 aviso que a cópia da sessão de balcão,
sua chave, tem um valor atribuído novo, que é o seu valor atual mais 1.
Em suma, este arquivo parece estar atualizando
um contador que está armazenado dentro do superglobal sessão
aumentando-o de 1, mas retém uma primeira cópia do valor anterior
armazenando-o em uma variável local chamada $ contador,
e aqui vamos ver o que permanece.
Acontece que é muito bonito apenas HTML.
Na parte inferior desta página vemos na linha 37 que já visitaram este site
número do contador de vezes, por isso há um par de características interessantes aqui.
Um deles, esta é claramente uma variável, mas isso não basta apenas colocar
$ Contador no corpo de seu HTML porque, naturalmente,
se é só lá entre seu PHP HTML vai assumir que é apenas HTML.
Você literalmente quer US $ contador a ser impresso na tela.
>> Mas, em vez de cair em modo PHP
com este pedaço de sintaxe que pode inserir dinamicamente um valor aqui
muito semelhante em espírito para o que fizemos da última vez com
inserir valores em cordas.
Na verdade, esta é apenas uma notação abreviada para dizer algo como isso literalmente,
print ($ contador) ou mesmo algo como printf (% s, contador),
ou mesmo, como você pode ter visto online ou em livros didáticos,
há uma função em PHP chamado eco
que faz a mesma coisa, e de todos aqueles são apenas formas mais fôlego
de dizer <? =.
Neste caso, aquele que você não precisa colocar
a palavra PHP após o ponto de interrogação.
Este é notação abreviada para, mais uma vez, o que acabamos de ver há pouco
que está ecoando algum valor.
>> Vamos ver o que o resultado final deste realmente é.
Deixe-me passar em nosso arquivo counter.php,
e vamos ver o que Davi só cometeu um erro ao jogar com o código lá.
Vamos corrigir o que ele errou,
eo erro parece estar lá, foi, na linha 37.
Segundo o topo da página que visitei este site 0 vezes.
Bem, vamos em frente, agora e na parte superior do navegador clique no
recarregar ícone e clico em recarregar,
e agora eu visitei o site uma vez, 2, 3, 4, 5, 6, 7, 8.
E, de fato, se olharmos para a fonte desta página o código fonte está mudando,
e notar a ausência completa de qualquer PHP, e isso é porque
Código PHP é avaliado ou interpretado do lado do servidor,
e assim que significa que a saída do script PHP é o que é, em última análise enviado para o navegador,
que neste caso é algum código HTML puro e algum texto cru.
O que está acontecendo aqui?
>> Bem, com relativamente poucas linhas de código que eu sou capaz de armazenar
persistentemente ao longo de vários segundos, ou se esperou tempo suficiente,
minutos, até mesmo horas, algum valor de uma maneira que faz HTTP
parecem stateful como se tivéssemos mantido
essa conexão com o servidor, e é só lembrar o que eu disse da última vez,
mas na realidade não há um monte de complexidade acontecendo debaixo do capô
envolvendo cookies que está permitindo PHP para me dar essa ilusão
deste carrinho de compras-como recurso.
Por agora, um exemplo trivial onde estamos apenas armazenar um número inteiro,
mas esse recurso vai voltar a ser de grande valor
quando começamos a falar sobre os projetos mais complexos,
entre eles conjunto de problemas 7.
Este é o seu problema muito último no CS50.
Eu sei, é tão triste, mas o que você vai encontrar é que vamos concluir
esta parte do semestre, na verdade, a transição
a partir do contexto de C certamente ao contexto do PHP
Mas ao usar alguns dos fundamentos mesmos
falamos por algum tempo.
>> O objetivo com pset 7 é implementar CS50 Finanças,
que é a sua própria versão do Yahoo Finance ou Finanças Google
ou mesmo Etrade.com em que você tem a capacidade de
olhar para cima os preços das ações para símbolos dadas, mas mais do que isso
você tem a capacidade de "comprar" e "vender" ações
que são negociados em várias bolsas de valores, porque como esta home page
aqui sugere, que é realmente a medida em que nós começamos
o conjunto de problemas para você, você tem um formulário de login que está pedindo um nome de usuário e uma senha.
Ele tem um botão de envio, mas depois, como vamos ver, eventualmente,
não há nada realmente acontecendo debaixo do capô ainda porque
Resta-lhe implementar a capacidade de registrar novos usuários,
a capacidade de comprar ações, vender ações,
para realmente olhar para cima os preços das ações atuais.
>> E, de fato, este mundo será tão real quanto possível porque fizemos
incluir um pouco de código que permitirá que você com uma única função
para consultar Yahoo Finance, que maravilhosamente disponibiliza dados livres
para olhar para cima os preços das ações com base no símbolo de ação ou símbolo ticker,
e você terá de volta o preço atual da ação do dia.
Os dados que você está realmente vendo neste pset particular será
sobre como o mundo real como ele pode obter de modo que você está realmente a interface
com ações do mundo real, os preços reais,
e vamos ver quanto dinheiro você pode fazer talvez
ao longo dos próximos dias de jogar com o seu conjunto próprio problema.
>> Mas vamos primeiro definir o cenário para como criar algo que certamente é mais complicado
que counter.php, que é mais complicado do que qualquer um dos exemplos Frosh IMs, até agora,
e vamos tentar introduzir uma paradigmas poucos aqui que nos permite
tanto para pset 7 e talvez para o seu projeto final, se você faz algo baseado na web
manter o seu código bem organizado, para manter-se sã,
e dar um passo em direção a colaborar, seja em projeto final do CS50
ou além, se você continuar a programar algo no futuro.
Há este paradigma de design geral
em informática e no desenvolvimento de software em geral
conhecido como MVC, o modelo de controlador de vista,
e este é um acrônimo bobo que descreve uma idéia muito legal,
que é a separação de diferentes aspectos de um programa,
especificamente manter a lógica separada ou a lógica do negócio de um site
de modo a que tudo o que envolve coisas como
chamar funções e consulta de bancos de dados e similares
acontece não entre seu HTML
mas sim em arquivos separados, e, de fato, há um arquivo de um
tipicamente que você chamou o controlador
que é realmente o cérebro por trás da operação, e vamos ver um exemplo
isso em apenas um momento.
>> Há um modelo que é código de programação
que faz a falar com os seus bancos de dados, que fala com o Yahoo Finance e similares,
e depois há o V em MVC, os pontos de vista,
todo o material que está relacionado com a estética, os arquivos que realmente contêm
HTML, CSS e talvez o seu semelhante.
A ideia aqui, como esta figura indica, é que o controlador
é o arquivo, como veremos em breve e, como você vai ver particularmente em pset 7,
que o mundo fala a via seus navegadores.
Esse é o arquivo que será visitado na internet pública,
mas o controlador fala potencialmente modelo,
o que é um ou mais arquivos que contenham código relacionado aos dados,
código relacionado com a base de dados e similares, e, em seguida, se fala de
o controlador de um ou mais arquivos, conhecidos como pontos de vista,
que são a estética de uma página da web, modelos de tipos,
que pode levar alguns dados como entrada, mas no final do dia,
a única lógica dentro de uma visão deve ser a prestação de dados,
iteração sobre um loop e realmente cuspindo alguns
Baseado em HTML rendition algo do mesmo ou até mesmo como um PDF.
>> O que é legal sobre o MVC é que você pode ter pontos de vista diferentes
com base no tipo de dispositivo, com base no tipo de formato de ficheiro que, na verdade,
querem mostrar para o usuário.
Vamos dar uma olhada em alguns exemplos progressivamente mais complexas e bem desenhado
começando primeiro com a versão 0 aqui.
Deixe-me ir em frente e abrir-se em nosso diretório MVC hoje
um arquivo chamado index.php no diretório 0.
Observe que este é um site super simples e muito underwhelming
que é uma espécie de versão 0 de uma homepage para CS50,
e perceba como temos um link para Palestras, temos um link para Syllabus,
e se eu seguir o link para notificação Palestras que a URL
em cima vai mudar para lectures.php.
Se eu siga o link para notificação Semana 1 que as mudanças de URL para week1.php.
Parece haver uma estrutura bastante simples hierárquica aqui.
>> Vamos dar uma rápida olhada debaixo do capô com a forma como isso é colocado para fora,
e de fato, se eu olhar para index.php é muito simples.
Na verdade, apesar de eu chamei este arquivo um PHP não há nenhum código de programação real.
Há um comentário que eu escrevi aqui no PHP apenas para que o usuário não acabar vendo isso.
Claro que, como antes de qualquer coisa, que está entre tags PHP
é interpretado, mesmo que seja um comentário, e para interpretar um comentário
significa apenas para jogá-lo fora no final do dia e na verdade não
enviá-lo para o navegador, de modo que tudo aqui é apenas estética.
Se eu abrir semelhante lectures.php isso também é apenas um arquivo codificado.
Ele passa a ser chamado de algo. Php,
mas é realmente justo. html, e week1.php, week2.php
da mesma forma são apenas de marcação, então não há um monte de falhas deste projeto.
Um, é uma quantidade enorme de copiar / colar.
Mesmo que a única coisa que está mudando entre esses arquivos é a lista não ordenada,
as tags li, eu ainda assim tem doc tipo, HTML, cabeça,
título, corpo perto, perto HTML e mais
em todos os arquivos, o que significa que se eu quiser reestruturar
esta página web ou restylize que eu tenho que entrar e mudar
todos esses arquivos manualmente ou com algum grande localizar e substituir.
>> Vamos dar um passo em direção a um projeto mais inteligente, mais pensando na versão 1 aqui
qual conforme a ler-me que nós incluímos para que você possa tocar junto com
estes mais vagaroso na observação de casa que temos aqui
um resumo dos arquivos na versão 1 deste site,
e parece que eu tomei sobre mim mesmo para fatorar
um código comum, header.php e footer.php.
Bem, vamos dar uma olhada no que está dentro do primeiro deles.
Header.php parece familiar,
mas observar onde ele se cortou?
Logo após a linha 19, então isso é tudo o que era comum
do index.php arquivos, lectures.php,
Semana1 e week2.php do exemplo anterior.
O que fiz foi cópia e tudo corte que era comum a todos os arquivos,
colocá-lo em um arquivo de cabeçalho separado, e da mesma forma em footer.php
eu aplicar o mesmo princípio pelo qual as únicas linhas interessantes
em footer.php são estes corpo, dois perto e HTML perto.
>> Mas o que isso significa agora é que na nova versão
de aviso index.php quanto mais simples ele pode chegar.
Concedido, um pouco mais enigmático olhar, um pouco menos intuitiva
a seguir de cima para baixo, mas, meu Deus, tudo que a redundância é ido agora.
Nós exigir o uso de uma função PHP chamado literalmente exigir até superior,
que lembra muito, lembre-se, de C # include mecanismo.
Exigimos header.php no topo.
Exigimos footer.php na parte inferior, ea única coisa que é diferente
ou especial sobre este arquivo é o conteúdo que está destinado a ser única para ele.
Se eu entrar na, digamos, lectures.php, o mesmo princípio se aplica.
Mais uma vez, alguns comentários em cima, mas depois eu requerem cabeçalho, rodapé exigem,
e entre é só o conteúdo que está realmente mudado.
E se nós olhamos para semana 1 e semana 2 veríamos
que o mesmo princípio foi aplicado ali.
Bem, nós não estamos completamente feito lá.
>> Vamos dar uma olhada na versão 2, que tem uma estrutura semelhante,
mas observar agora eu introduzido outra coisa.
Na linha 10 eu introduzi helpers.php,
que, aparentemente, contém funções auxiliares.
Uma função auxiliar é geralmente uma função relativamente curto
que você escreve para ajudá-lo em vários lugares,
e vamos ver o que há dentro de helpers.php.
Neste caso, parece que ele tem duas funções.
Lembre-se do outro dia com o nosso exemplo cubo
você pode definir suas próprias funções em PHP, e que eu tenho feito agora é que eu tenho
funções definidas chamados tornar rodapé e tornar cabeçalho,
a primeira das quais utiliza um parâmetro chamado dados,
cujo valor padrão é um conjunto vazio, como sugere lá,
e nós podemos realmente escrever este ainda mais sucinta na última versão do PHP
dizendo colchete aberto, fechado colchete.
Isso significa que uma matriz vazia de tamanho 0, mas ainda assim uma matriz.
>> Esta função extracto é um pouco especial em que
o que ele faz é que recebe como argumento uma matriz associativa
que tem 0 ou mais pares de valores-chave, e se você tiver uma chave de foo
e um valor de barra a função extracto
cria uma situação em que agora, a partir de linha 11,
você tem uma variável local chamada $ foo cujo valor é bar.
E se você tivesse mais chaves e valores na matriz de dados,
da mesma forma que eles são extraídos para o âmbito local
ou espaço de nome, de modo que footer.php e
a mesma idéia aqui para que header.php
ter acesso a essas variáveis.
Na verdade, deixe-me abrir novamente header.php
e chamar a atenção para o que agora parece que nesta versão.
>> Ao invés de codificar CS50 como o título para cada página
perceber o dinamismo que é possível agora.
Na linha 5 estou ecoando uma variável título,
mas primeiro eu estou passando essa variável título para uma função chamada htmlspecialchars.
Um nome estúpido para uma função, desde que seja, mas o que realmente faz o que diz.
Ele garante que todos os caracteres especiais
na seqüência que foi aprovada em são devidamente escapou HTML.
Este é, na verdade, uma forma de evitar uma coisa chamada cross-site scripting ataque
em que alguém pode maliciosa ou acidentalmente
injetar seu próprio HTML em seu site
colando em alguma forma, por exemplo,
algo que você não espera foram bastante, particularmente código JavaScript,
como vamos falar em uma semana ou duas de cada vez.
>> Este header.php agora, é uma visão
no sentido de que ele permite que você visualize esteticamente o conteúdo de um conjunto de dados.
Mas, mais especificamente, é um modelo.
Esta é uma espécie de plano agora do que queremos no cabeçalho de cada página para olhar como,
mas há algum dinamismo que queremos o título a ser inserido dinamicamente
com base na variável título
que foi extraído quando chamada, de novo,
a função cabeçalho render.
Agora, se nós olhamos rodapé render, há realmente não uso muito disso agora
porque em footer.php não há dinamismo qualquer.
Não poderia ser, mas no momento é uma lista codificado de 2 tags,
mas a ideia mesmo se aplica, de modo a que, na verdade, sugere porque
se perdemos tempo tendo um cabeçalho render e uma função de renderização rodapé?
Deixe-me ir em vez agora em versão 3,
e na versão 3 em ajudantes decidi simplificar ainda mais.
>> Deixe-me ter uma função render.
Deixe-me tê-lo tomar um outro argumento, desta vez chamada de modelo,
que se destina a ser o nome de um modelo,
e depois vou concatenar presunçosamente. php para valor que variável,
e então, se ela existe, foo.php bar.php ou header.php e footer.php,
então eu estou indo para ir em frente e extrair os dados variáveis
e depois exigir esse caminho.
Em outras palavras, para usar isso agora, se eu abrir index.php
perceber que eu não chamo de cabeçalho renderização mais.
Eu só chamar render, mas eu passar em um valor de cotação do cabeçalho
deixar claro qual o modelo que eu realmente quero para carregar.
>> Então aqui perceber o que estou fazendo.
Estou passando dinamicamente uma chave de título,
um valor de CS50, e isso também, como vimos antes,
poderia ser mais sucinto na última versão do PHP
onde eu posso substituir a função array com colchetes,
que eu proponho é ainda mais legível e, certamente,
um pouco mais fácil de digitar.
E, claro, com a chamada render rodapé na parte inferior,
que não se incomodam em passar um segundo argumento em tudo, não matriz associativa,
porque não há nada dentro da dinâmica que rodapé.
É apenas a algumas tags próximos de HTML.
Bom, estamos tomando medidas para realmente limpar as coisas aqui,
mas deixe-me abrir dois exemplos finais.
Este, número 4, aviso que eu fiz uma decisão consciente agora
para melhorar o exemplo anterior, finalmente, usando uma hierarquia para os meus arquivos.
>> Observe que, nesse resumo, nesta me lê, eu introduzi
um diretório e inclui um diretório de modelos
cujos conteúdos vão ser as coisas que eu quero incluir
e os modelos que eu quero tornar, respectivamente.
Isto é realmente eu ser anal e tentando manter as coisas arrumadas,
manter arquivos relacionados juntos, mas o resultado final
é que agora temos uma configuração um pouco mais arrumado, mas temos que lembrar agora
em, por exemplo, index.php
quando exigem o arquivo helpers.php
temos que agora exigem-lo através de includes / helpers.php
ao invés de apenas dizer helpers.php porque agora é realmente em um sub-diretório.
Agora, como um aparte, você vai ver nestes exemplos e alguns outros
funciona como exigem, exigem uma vez.
Há realmente uma função em si chamado incluir, e todos eles têm um comportamento um pouco diferente.
Aqui eu digo exigem uma vez para fazer super claro que eu só quero aqueles
ajudantes incluído no meu projeto uma vez.
Mas se eu sou cuidadoso e se eu estou realmente pensando na minha lógica propriamente
deveria bastar também só para dizer requerer até topo
tanto tempo como eu mesmo não possa exigir o mesmo arquivo em outro lugar.
Na verdade, esta é uma maneira um pouco mais eficiente de fazer as coisas em seguida, usando
exigem uma vez, então eu vou reduzi-la a apenas exigir.
>> Vamos dar um passo adiante.
Este último exemplo, agora, a versão 5, tem uma hierarquia de pastas ainda mais limpa.
Observe o que eu fiz aqui por a ler-me nesta versão final
é agora eu tenho meu diretório HTML, que eu tive todo esse tempo,
mas dentro de lá agora é só lectures.php, index.php,
week1.php e week2.php.
O diretório inclui agora vive ao lado do diretório HTML,
de modo ao mesmo nível como um irmão, por assim dizer.
Assim faz a pasta de modelos.
O takeaway chave aqui é que eu introduzido estrutura um pouco mais,
mas o elemento-chave agora é que apenas os arquivos
que precisam estar acessíveis na web, publicamente endereçável
por uma URL na internet pública estão em meu diretório HTML.
>> Arquivos mesmo tempo, outras helpers.php, footer.php,
header.php, que são, sem dúvida, talvez mais sensível,
talvez ajudantes, na verdade, tem alguns nomes de usuário e senhas ou algum intelectual
propriedade da mina, funções que eu realmente não quero que o mundo veja, mesmo que acidentalmente.
É uma boa prática para manter fora do diretório HTML pública
todos os arquivos que não precisam de se ser público.
Tudo que você tem que fazer neste caso quando se olha, por exemplo,
o arquivo index.php do diretório do HTML,
notar só temos de ser um pouco mais cuidadoso quando requerendo
ou exigir uma vez que este arquivo.
Eu preciso primeiro fazer .. para ir para o diretório pai,
em seguida, fazer / includes / helpers.php
a mergulhar de volta para obter o arquivo que eu me importo.
>> Quaisquer perguntas, então no MVC
ou esta encarnação relativamente simples mesmo?
E deixe-me deixar claro que nós nos concentramos um pouco sobre a
V aqui, os pontos de vista e do factoring fora destes modelos.
Nós não temos realmente distingue M de C ainda.
Na verdade, não há realmente nenhuma M aqui, e até mesmo o nosso C,
controlador, não está realmente fazendo tudo o que muito, mas você vai ter muito mais
familiarizado com ambas as duas cartas de MVC,
ou melhor, você vai ter muito mais familiarizado com o C
em MVC para conjunto de problemas 7, então não há mais do que isso no horizonte.
Perguntas?
Há, na verdade, ninguém aqui.
>> Ok, vamos agora passar para o segundo e último tópico para hoje.
Que é a introdução de uma base de dados.
Até este ponto, nós tivemos algumas maneiras de armazenar dados.
Nós usamos variáveis.
Voltar em nosso arquivo de C, I / O debate que começamos a usar arquivos de texto
e utilização de arquivos como fprintf, e então nós nem começou
falando sobre CSV um pouco, valores separados por vírgula,
para todos estes nos permitiu ter dados armazenados
ou não-persistente ou persistentemente.
Mas mesmo CSVs não são realmente propício para a busca
e inserção e exclusão.
É realmente apenas um arquivo de texto separado por vírgulas estúpido
linha por linha por linha por linha, por isso, se você quiser
pesquisar o arquivo o melhor que você pode fazer é realmente busca linear.
Você tem que começar no topo do arquivo, ler a coisa toda em,
e olhar para algum valor de interesse.
Se você deseja inserir em que você tem que fazer a mesma coisa,
Iterando sobre ele e inserir em um determinado lugar,
e, na verdade, você tem que fazer toda a lógica de buscar a si mesmo.
>> Você não pode fazer padrão inteligente de correspondência em um arquivo CSV, salvo se você escrever o código.
Você não pode fazer filtração de um arquivo CSV
a menos que se escreve o código.
Não seria bom se alguém colocar todo o esforço
para realmente tornar a busca mais fácil e fácil inserção
e exclusão e atualização e assim por diante?
Isso é exatamente o que um banco de dados é.
SQL, linguagem de consulta estruturada, é ainda outro idioma
que estamos introduzindo aqui hoje, mas isso também é bastante acessível,
eo que estamos realmente vai fazer é só arrancar dele alguns dos mais salientes
características de modo que para pset 7, e se você fizer alguma coisa com base na Web,
seu projeto final, você tem a capacidade de se expressar
em termos de consultas de dados.
Você tem a capacidade de armazenar um pouco ou um monte de dados
de um modo muito mais estruturado que será, no final do dia,
tornar sua vida mais fácil, porque com o SQL você pode se expressar
muito mais precisamente, muito mais metodicamente a fim de
voltar alguns subconjunto de dados de um grande corpus de dados.
>> Você pode pensar em um banco de dados, neste caso, um banco de dados SQL, realmente como o Excel
ou números em que é uma planilha,
ou talvez várias planilhas, e uma planilha, é claro,
tem linhas e colunas, e isso é porque
Bancos de dados SQL são relacionais, relacional, no sentido de
que armazenam dados em termos dessas tabelas,
linhas e colunas.
Eles são mais desempenho do que algo como uma planilha,
e uma folha de cálculo é feito para ser usado por um ser humano.
Um banco de dados destina-se a ser usado por um programador
escrever código contra ele, assim que a encarnação de um banco de dados
vai ser uma das linhas de comando.
>> Uma das bases de dados relacionais mais populares lá fora, é, mais uma vez, MySQL,
que é maravilhosamente livre, desempenho muito elevados, e é isso que
Facebook usado muito cedo e até certo ponto ainda hoje
para armazenar uma grande quantidade de seus dados, e vamos ver em um momento
que a utilização de comandos relativamente simples
podemos selecionar dados, inserir dados, atualizar dados,
apagar os dados e afins, mas, felizmente, há uma interface mais amigável
que apenas digitando em um prompt de preto e branco aqui.
Nós vamos usar para pset 7 e além de uma ferramenta gratuita chamada phpMyAdmin.
O nome é mera coincidência.
A ferramenta passa a ser implementado em PHP,
mas que é fundamentalmente irrelevante.
O que é útil sobre phpMyAdmin é que é um utilitário baseado na web.
Nós pré-instalado no aparelho para você,
e com ele você pode criar tabelas em um banco de dados,
você pode inserir dados, apagar dados, e geralmente ver
seus dados em um ambiente bastante amigável.
Seus usuários não vai usar o phpMyAdmin.
>> Isto é realmente apenas uma ferramenta administrativa ou desenvolvedor
com que a ver e fuçar seus dados e descobrir como estruturá-lo,
assim como você mesmo pode usar o Excel ou Numbers,
mas que vai ser uma ótima maneira de visualizar o que está acontecendo debaixo do capô
de modo que você possa se concentrar no problema interessante resolver e não tanto
sobre os comandos arcanos.
Vamos dar uma olhada em um exemplo de dados que podem ser armazenados tabularly
em um banco de dados relacional.
Aqui está um exemplo.
Agora, infelizmente, phpMyAdmin erradamente no lado de maneira jogando palavras demais
e gráficos em você, mas se você aprimorar em apenas sobre o
Coluna de ID, a coluna de nome de usuário, ea coluna de hash,
isso é efetivamente uma planilha, mas ele passa a ser um trecho de
de uma mesa no interior do aparelho
usando um arquivo que nós lhe oferecemos em conjunto de problemas 7.
>> Em particular, nós damos-lhe um arquivo que representa
mesa de um usuário, de modo a planilha contendo os usuários com 3 colunas,
uma das quais é uma identificação única a partir de 1 e sendo incrementado depois.
A segunda coluna é um nome de usuário, e aqueles de vocês que fez Hacker,
a edição Hacker para pset 2, pode reconhecer alguns destes nomes de usuário, pelo menos.
No lado direito estão as senhas, mas eles não são senhas literais.
Eles são hashes º, por isso acaba
que o armazenamento de senhas em um banco de dados é uma idéia muito ruim.
Vocês todos já deve ter lido em algum momento de algum site
ou banco de dados de alguma companhia que está sendo comprometida, e então você tem que
alterar sua senha, você precisa para obter restituições para as coisas
porque um cara ruim, na verdade quebrou em sua conta como resultado.
>> O armazenamento de senhas em texto puro, não encriptado em um banco de dados
é completamente estúpido, e ainda é muito divertido
depois de ler sobre algumas empresas muito conhecidas
às vezes na imprensa cujas bases de dados estão comprometidos,
e que parte não é engraçado, mas o fato de que os bancos de dados contêm criptografado
senhas é ridículo, porque, literalmente, com uma linha de código
você pode proteger contra essa ameaça em particular, e isso é o que nós fizemos aqui.
Mesmo para a nossa versão Finanças pouco fake CS50
estamos criptografar senhas apenas para uma boa medida, e do fato de que
todas essas senhas começam com $ 1 $ é apenas uma convenção.
Isso só significa que eles são criptografados ou realmente hash,
que é como uma função de criptografia unidirecional
pelo qual você não pode reverter seus efeitos com algo chamado MD5.
>> O facto de que 50 é após o que significa que um valor de sal
de 50 foi usado para hash todas essas senhas, exceto um.
Meu, é claro, como você pode ver lá, HA,
estava usando um sal diferente, para aqueles de vocês que fiquei um pouco desarmado
talvez em Hacker 2, que poderia ter sido o resultado de termos usados
um hash diferente do que os outros, porque minha senha é realmente o mesmo
como algum outro usuário lá em cima.
Na verdade, se você estava esperando todas essas semanas para descobrir
o que essas senhas foram aqui foram as senhas que você foi desafiado
de crack na edição de conjunto de problemas Hacker 2, portanto, não muito complicado.
Na verdade, malan era o mesmo que jharvard,
mas se voltarmos olharam diferente.
>> Concentre-se em jharvard de vermelho porque eles eram salgados diferente.
O algoritmo foi perturbado de uma maneira que o
valor de hash, o valor criptografado parece um pouco diferente
porque as entradas eram ligeiramente diferentes, mas a senha debaixo do capô
ainda era, em última análise carmesim.
Agora, quem se importa com isso?
Bem, nós estamos fornecendo-lhe os usuários de exemplo, os nomes de usuário de amostra
e hashes de suas senhas, de modo que você realmente tem alguns
clientes para CS50 Finanças quando você sair do chão com o seu código.
Você vai ter que implementar mais tabelas dentro do MySQL, dentro do banco de dados.
Você vai ter que criar mais planilhas, de forma eficaz, mas decidimos dar-lhe um presente
para você começar, e você vai ver que a especificação do conjunto de problemas
orienta o processo de importação esta tabela
e também explicando o que algumas das características são,
e você também vai ver que nós lhe fornecer o código
para lidar com a hash ou criptografia dessas senhas,
assim você não precisa se preocupar muito com o que MD5 ou similares é realmente tudo.
>> Então, SQL, linguagem de consulta estruturada.
Isto é, muito simplesmente, a linguagem que está prestes a começar a usar em pset 7
e, talvez, para além de solicitar dados de algum banco de dados.
Os dados são, novamente, armazenados tabularly nestas tabelas relacionais, colunas e linhas,
mas usando uma sintaxe relativamente simples como apagar,
inserir, atualizar e selecione podemos fazer exatamente isso.
Podemos excluir do banco de dados, inserir,
atualizar dados, bem como selecionar, ou seja, recuperar dados do banco de dados.
Como nós vamos fazer isso?
Deixe-me ir em frente para o aparelho.
Deixe-me puxar para cima http://localhost,
que, novamente, é o local próprio aparelho.
Isso é o seu apelido padrão.
E deixe-me ir para / phpmyadmin.
Isto acontece por ser uma URL especial que o aparelho está pré-configurado para entender
que imediatamente me pede um nome de usuário e senha.
>> Como de costume, eu vou digitar jharvard e carmesim,
mas percebe que é a conta de administrador no computador.
É apenas uma coincidência que há também um jharvard registrado para CS50 Finanças.
Jharvard, carmesim, enter me dá a interface de usuário que vimos
um vislumbre de um momento atrás, e é um pouco esmagadora na primeira,
mas a certeza, você nunca vai ter que clicar a maioria dos links nesta ferramenta.
Você vai acabar usando um pequeno subconjunto que são super úteis,
o primeiro dos quais é bases de dados aqui.
Se eu subir aos bancos de dados, observe que estou solicitado a criar um banco de dados.
Este é como criar um novo arquivo do Excel, de forma eficaz.
Eu estou indo para ir em frente e chamar esta palestra, e eu só vou ignorar o campo lá, agrupamento.
Isto tem a ver com a representação dos dados no mesmo,
e eu vou clique em criar e, agora, perceber como eu deixar de ir criar
no lado esquerdo onde diz nenhum banco de dados
Eu deveria ver em breve o banco de dados de aula.
>> Se eu agora clique no lado esquerdo, o banco de dados de palestra,
percebe meus guias mudar um pouco.
Eu tenho estrutura, importação SQL, exportação e algumas outras coisas.
A estrutura é praticamente em branco.
Sem tabelas encontradas no banco de dados, como se diz aqui,
então vamos criar uma tabela, e vamos em frente e criar uma tabela
Como os alunos, e quantas colunas queremos?
Vamos manter isso simples, e vamos gravar para cada estudante
um número de identificação, um nome e um endereço de e-mail.
>> Vamos mantê-lo simples assim, então 3 colunas, vai.
A forma que você vê aqui é agora um pouco confuso e esmagadora,
mas temos que passar por isso linha por linha, por isso muito rapidamente vamos dar
a primeira coluna neste banco de dados um nome de identificação para o identificador único.
Vai ser um inteiro. Eu posso realmente ignorar comprimento e valores.
Um int vai ser de 32 bits, não importa o que você digita lá, então vamos deixá-lo em branco.
Valor padrão, eu poderia fazê-lo nulo, conforme definido.
Eu vou deixar isso quieto. Não vamos nos preocupar sobre os valores padrão.
Vamos deslocar até aqui para a direita, atributos.
Isto é interessante.
Vamos em frente e um pouco arbitrariamente dizer que as identificações devem ser assinados.
Não vamos perder todos os números negativos.
>> Vamos 0-4000000000, mais ou menos,
e então não vamos tocar em qualquer um destes campos apenas ainda lá,
mas deixe-me então digitar o nome aqui,
e depois o outro era e-mail, de modo que o problema é e-mail
e nome, obviamente, não inteiros, então vamos mudar estes para um campo diferente.
Acontece varchar, comprimento variável char,
é como uma corda em um banco de dados SQL
mas um comprimento variável, e você realmente tem que dizer-lhe antecipadamente o
comprimento máximo da string, então eu vou um pouco arbitrariamente
por convenção tipo 255 caracteres.
Eu poderia perfeitamente dizer 32. Eu poderia dizer mil.
Você tipo de necessidade de decidir por si próprio com base em suas características demográficas o que é
o nome da mais longa aluno e ir com esse número ou um pouco maior,
mas o que é agradável sobre um varchar é que não vai para o lixo
255 bytes em nome de cada aluno.
Se é DAVID não vai usar um todo 255 bytes,
mas isso é um limite superior, então eu vou com 255 apenas por convenção,
mas podemos debater que ser algum valor menor, e para o endereço de e-mail
apenas a ser coerente 255, mas, novamente, nós poderíamos ter o mesmo debate.
Mas eu vou fazer uma outra coisa aqui no lado direito.
>> O que é poderosa sobre um banco de dados é que ele pode fazer um monte de trabalho pesado
ou complexo trabalho para você.
Em particular, eu realmente não me importo com o que os números do meu aluno de identificação são.
É só para ser um identificador único em uma base de dados
então eu tenho uma representação sucinta de 32 bits do que o aluno
para que eu tenha alguma forma de identificar unicamente a eles
para que não haja dois Davids, por exemplo, em uma classe.
Na verdade, eu estou indo para esta caixa AI, auto incremento,
de modo que o banco de dados MySQL, descobre
o ID cada estudante recém-inserido é que vai ser.
Eu nem sequer tem que se preocupar com isso no meu código,
e eu também vou escolher algo no menu de índice.
O índice cair para baixo aqui tem primário, único,
índice e texto completo.
Você pode adivinhar o que talvez algumas dessas coisas são,
mas acontece que em bancos de dados relacionais
você o programador ou o administrador de banco de chegar ao preventivamente
dar dicas para o banco de dados, como o que os campos
em uma tabela são um pouco especial.
>> Por exemplo, neste caso, eu vou dizer que ID
vai ser um índice primário, também conhecido como uma chave primária.
O que isto significa, por definição, é que doravante ID
irá identificar os alunos nesta tabela.
Nenhum estudante vai ter a mesma identificação, porque eu estou impor essa restrição ou esse índice.
Além disso, o que é que isto vai fazer por mim é que vai dizer
MySQL ID que é especial.
Eu me preocupo particularmente sobre ID, então vá em frente e fazer mágica sua estrutura de dados da fantasia,
construir algum tipo de árvore.
Normalmente é algo chamado de árvore-B, que não olhou para semanas atrás,
mas é outra estrutura de dados como similar em espírito às árvores binárias
e tenta que nós olhamos, mas vai dizer
ao banco de dados neste campo é tão importante que eu provavelmente
quero ser capaz de pesquisar sobre ele, vá em frente e construir alguma fantasia
estrutura de dados na memória para acelerar pesquisas para que idealmente
eles são de tempo constante, ou pelo menos tão próximo quanto possível de que
de modo que ele não transformar-se em busca linear, o qual não será
o mais alto desempenho abordagem.
Por outro lado, endereço de e-mail pode ter sido uma chave primária.
>> Em teoria, endereço de e-mail de todos é único, a menos que você está compartilhando alguma conta,
mas não é geralmente bom para usar algo como uma corda
como uma chave primária, porque se o seu propósito na vida é identificar
linhas da tabela não há nenhuma razão para usar no máximo 255 bytes
para identificar alguém, se você pode ir longe com apenas 4 bytes
ou um int de 32 bits.
Em geral, uma chave primária deve ser curto e sucinto
e, idealmente, algo como um inteiro ou um int grande, que passa a ser de 64 bits.
Mas um endereço de e-mail deve ser único, e uma das características de um banco de dados muito
é impor exclusividade para mim.
Ao selecionar único aqui perto de e-mail, mesmo que enviar e-mail próprio
é deslocado para fora da tela, eu estou dizendo para o banco de dados
não confie em mim.
Não deixe-me inserir no banco de dados
o mesmo endereço duas vezes, mesmo que eu sou um idiota e não estou
muito boa com meus ifs e IFS pessoa e de código PHP real
e eu acidentalmente deixar o usuário registrar com um endereço de e-mail existente
o banco de dados é mais um nível de defesa para correção
para garantir que esse endereço de e-mail duplicado não acabar na tabela.
>> Agora, pelo contrário, para o nome que você provavelmente não quer fazer esse único
porque, então, nunca poderia haver dois Davids ou dois Smiths Mike, por exemplo,
em seu banco de dados, de modo que uma só teremos que sair sozinha.
Eu estou indo para ir em frente e clique em Salvar na parte inferior direita,
e tudo parece bom, mas repare-se aqui
esta é uma peça que, por enquanto, não vai gastar muito tempo em
porque a sintaxe é um pouco complexa, e não temos para criar tabelas
tudo o que, muitas vezes, mas o SQL em si é uma linguagem,
a sintaxe para que é aqui que eu destacou.
O phpMyAdmin realmente faz é que ele cria uma interface gráfica baseada na web para você
com o qual você pode economizar tempo e não ter que digitar manualmente fora
uma consulta SQL bastante longo como esse.
>> Em outras palavras, se você quiser criar manualmente esta tabela,
quer no que phpMyAdmin preto e branco rápida ou até mesmo em
usando este outro guia, este guia SQL onde você pode digitar em qualquer SQL consultas
você quer, francamente, isso teria me levado um minuto
para realmente lembrar a sintaxe inteiro, e até então eu provavelmente teria
fez alguns erros de digitação, por isso esta ferramenta é útil para coisas como essa, e é também instrutivo.
Você pode começar a inferir que a sintaxe é
apenas pela cor agradável de codificação que está adicionando phpMyAdmin
para nossa conveniência visual.
Mas agora vamos fazer isso em seu lugar.
Deixe-me ir para a guia Inserir no topo, e deixe-me ir em frente e inserir, por exemplo,
um ID vamos dizer, na verdade eu não me importo.
Vai auto incremento. Vou deixar o negócio de banco de dados com isso.
Mas será Davi, e meu e-mail deve ser malan@harvard.edu.
>> Vamos em frente aqui e colocar em Mike Smith como um outro.
Eu vou me dar um último nome, bem como,
e nós vamos ter ele seja smith@example.com,
e onde eu vou seguir?
Bem, parece que vai é o botão para clicar, e pronto.
Observe no top 2 linhas inseridas.
Esta é a consulta SQL real.
Essa é a ferramenta phpMyAdmin executado por mim,
mas o resultado final, o aviso prévio, se eu agora vá para a aba de navegação,
é ver duas linhas nesta tabela, lembra muito esteticamente
da tabela vimos anteriormente para nossos usuários de pset 7,
um dos quais é David Malan, um dos quais agora é Mike Smith.
Mas só para ficar claro, eu não preciso usar o phpMyAdmin,
e, de fato, você vai em breve ser escrever código para pset 7
que automatiza o processo de adição de linhas, excluir linhas, atualizando linhas e afins,
então deixe-me em vez de ir para a aba SQL-se aqui
e digite SELECT * FROM alunos onde
e-mail = "malan@harvard.edu".
>> Em outras palavras suponho que agora você tem
alguma forma HTML, e os tipos de usuário em seu endereço de e-mail, entre outras áreas,
eo objetivo agora é em PHP no código de back-end
para realmente olhar para outros detalhes do usuário.
Qual é o seu nome completo? Qual é o seu número de ID?
Você pode escrever uma consulta SQL como esta, selecione * de estudantes
onde e-mail = "malan@harvard.edu".
E se eu clique em ir, note que eu, e certamente eu, voltar apenas uma linha.
Mike é omitido este conjunto de resultados, como a coleção de linhas
geralmente é chamado, porque ele não tem o mesmo endereço de email que eu.
>> Agora, novamente, aqui para pset 7 você vai usar o phpMyAdmin como uma ferramenta administrativa
e uma ferramenta pedagógica para aprender o caminho
em todo o mundo de SQL, mas no final do dia,
você vai estar escrevendo essas consultas dentro do código PHP atual,
e fique atento no passo a passo Zamyla, em particular
onde você poderá obter uma turnê do código de distribuição para este conjunto de problemas
onde demos-lhe não só a estética para a página de login
eo logotipo agradável sexy que diz CS50 Finanças, mas nós também lhe deu
um monte de funções que vão tornar sua vida um pouco mais fácil.
Nós também escreveu parte do pset para você,
a parte de login em particular, para dar-lhe um sentido de um projeto de representante
que realmente usa um controlador, por exemplo index.php,
login.php e similares, e então você verá o pset também tem um diretório de templates
que tem todos os seus pontos de vista, todos os estética.
E assim, o fluxo de trabalho global em pset 7 vai ser a de que
seus usuários visitam um controlador através de uma URL em um navegador.
Esse controlador contém código PHP que você escreveu, e dentro de seu código PHP
pode ser algumas linhas de SQL aninhada entre aspas duplas
e passado para uma função que escreveu consulta chamada
que irá ajudá-lo a falar com o banco de dados sem usar algo como
uma ferramenta administrativa como phpMyAdmin.
>> Você vai ser capaz de escrever instruções SQL em código PHP
e receber de volta uma matriz PHP do conjunto de resultados,
das linhas que corresponde de fato a essa consulta.
E da mesma forma que você vai ser capaz de fazer inserções ou exclusões
ou atualizações ou similares, a sintaxe para o qual é bastante similar,
e você vai ver a partir de algumas referências on-line, a partir do código de distribuição
e do pset embalar-se exatamente como ir sobre fazer isso.
Perceber finalmente que estamos realmente apenas arranhando a superfície do SQL
e do MySQL, mas o poder do que realmente é que ele libera
a concentrar-se sobre os problemas que deseja resolver, os casos de uso que você deseja implementar
sem ter de preocupar-se tão grande, pelo menos no início,
sobre onde e como armazenar e procurar o seu banco de dados,
e esta é literalmente onde o Facebook em si tem o seu início
usando o MySQL e em seguida, usando mais servidores MySQL e, em seguida, mais servidores MySQL
antes de tempo, até que, em seguida, teve que realmente começar a pensar seriamente em como
armazenamento de dados, como armazenar as coisas ainda mais eficiente,
por isso mesmo que vamos ter concedido o fato de que os índices e restrições exclusivas
e assim por diante apenas trabalhar há uma conversa muito interessante
que tudo isso pode, eventualmente, levar a, assim que perceber que estamos apenas arranhando a superfície
do que poderia, eventualmente, para você ou seus projetos tornam-se um pouco de dados grandes.
>> Com isso dito, vamos terminar aqui, e vamos ver na próxima semana.
[CS50.TV]