>> [Música tocando]
>> DAVID J. Malan: Todo ben.
Este é CS50.
Este é o inicio da semana oito.
E ten que lembrar que paramos última vez mirando para unha nova linguaxe
completamente.
De feito, un que é moi lixeiro e non o é
unha linguaxe de programación.
É unha linguaxe de reserva que nos permite realmente estruturar e facer as páxinas web.
E cando algo máis en conxunto con isto--
ou vostede en breve, se non ten xa.
Estamos indo para usar en cascada Style Sheets, ou CSS, que
é outro tipo de linguaxe con propiedades e valores
que vai deixarnos facer cousas como cambiar a cor
e cambiar a posición e estes tipos de axustes.
Pero hoxe en diante, comezamos a concentrarse en linguaxes máis poderosas,
linguaxes de programación como PHP reais.
>> Entón PHP foi en torno de moito tempo.
E como vai ver, foi deseñado principalmente
pronto para real utilizar no desenvolvemento web
e, de feito, xerar páxinas web.
Entón, que tipo de recursos fai unha linguaxe
precisa, a fin de facer web páxinas dinámicamente con el?
>> Noutras palabras, se quere xerar contido dynamically-- como Facebook de
Newsfeed, que cambia constantemente, ou mensaxería instantánea que xorden de cando
para tempo-- como o que é a peza clave da función
que precisa nunha linguaxe de programación que ía deixalo dinamicamente
imprimir novas informacións para a pantalla?
>> ALUMNO: Code.
DAVID J. Malan: Code.
Está ben.
Imos levar iso.
Un pouco máis preciso.
Quero dicir, poderíamos facer iso con C, francamente.
Sería unha dor no pescozo.
Mas-- é ese compromiso?
>> Estudante: Si.
Variables, quizais?
DAVID J. Malan: Variables.
OK, con certeza.
As variables poden certamente axudar-nos.
E incluso algo máis simple.
Usamos iso na primeira programa do primeiro día
cando nós realmente dixo "Ola mundo".
>> ESTUDANTE: Imprimir.
>> DAVID J. Malan: Imprimir, non?
Imprimir ou printf en mundo de C. Entón todo este tempo,
que tivemos na nosa disposición un language-- C,
en particular-- e mesmo Cero para que o asunto que
pode xerar fragmentos de texto.
>> Ben, se HTML, como vimos a semana pasada, é só unha morea de secuencias de texto
aínda que con corchetes abertos e pechados soportes e algún tipo de rima
ea razón detrás diso, ben, entón poderíamos realmente
comezar a xerar páxinas web ou manualmente, escribindo-los gedit
ou en Microsoft Word, para que matter-- que só precisa un editor de texto.
>> Ou poderiamos escribir o código, a súa suxestión
anteriormente, que nos deixou xerar dinamicamente HTML,
e iso é o que nós estamos indo para comezar a facer con PHP
e, finalmente, mesmo cun linguaxe chamada JavaScript,
é por unha linguaxe para xerar outra.
E, de feito, é iso que Facebook e moitos, moitos outros sitios
facer para realmente dinamicamente presentar novas informacións para ti.
>> Entón, imos comezar cun isto-- liña de ollar enigmático, pero un
que é realmente moi poderoso.
Ata agora, estamos usando C, que é unha linguaxe compilada.
E só unha rápida recap-- un compilado linguaxe ten que característica?
Vostede, obviamente, ten compilar iso, pero o que significa isto?
Si?
>> ALUMNO: El que ser montado código de máquina.
>> DAVID J. Malan: Aceptar.
El ten que ser montada en código de máquina.
Entón colle o seu código fonte, que é unha especie de inglés-like.
Vostede convertelo en algo nivel máis baixo,
que é, en última instancia chamada obxecto code-- 0 e 1s.
E é neses 0 e 1s que unha CPU, como aqueles feitos por Intel,
realmente entender.
>> Agora, PHP e Python e Ruby e JavaScript e acios de outro
linguas non son compilados linguas, pero linguaxes interpretadas,
o que significa que acaba de gravala-los e, a continuación, non transformalos en 0 e 1 ..
Ti en vez de só proporcionar entón como entrada ao programa de outra persoa,
chamado un intérprete.
E desa persoa programa foi deseñado
para entender o que cada un e cada símbolo en Python ou PHP
ou Ruby ou calquera número de outras linguas significa.
>> E así, todo o que necesitamos é algo así.
Entón, en realidade, eu vou ir ao aparello
aquí, só en calquera fiestra antiga, e estamos
indo a ir adiante e aberto un arquivo chamado, por exemplo, Ola.
Agora anteriormente, eu podería ter salvado iso mesmo cunha extensión de arquivo,
pero eu vou facer algo aínda máis simple aquí.
Eu estou indo a ir adiante e comezar este ficheiro con esta sintaxe enigmática.
Así, "usuario, bin, Estructural, para o medio ambiente, php. "
>> Isto é simplemente unha liña de código que é vai dicir o meu sistema operativo,
ir atopar o seu lugar de ambiente sexa o que sexa,
onde queira que o PHP é-- interpreter-- e dalle usar este intérprete
para interpretar o código a continuación.
Agora, iso é unha especie de unha característica fea de PHP.
Pero nesta lingua, calquera vez que escribir código PHP,
ten que ter un destes feo Tags PHP demarcando o inicio
da súa code-- <? php.
>> Pero a continuación aquí, agora podo facer algo moi sinxelo, como printf Ola comas
mundo barra invertida n preto cita, preto parénteses.
E despois é só para o ben medida, eu vou
para ir adiante e preto miña tag php aquí
Para que todo parece ben bonito impreso.
>> E así que eu premer en Gardar, gedit é realmente intelixente dabondo
a ollar para aquela primeira liña e entender, oh, está escribindo código PHP.
Permítanme destacar sintaxe Lo coas cores
aquí de xeito que estea un pouco máis.
Pero agora eu estou indo a ir ata a miña ventá de terminal.
Vou ampliar.
>> Este programa foi chamado "Ola", entón eu vou facer barra dot Ola,
pero o permiso rexeitada.
E bash.
Nós, en realidade, oín falar diso cousa que un par de semanas
no contexto Shellshock, un deses erros.
>> Pero permiso rexeitada vimos antes, quizais nun contexto diferente.
Alguén recorda de como pode resolver algo
onde permiso é negada como este?
Cal é a orde, polo menos?
>> ESTUDANTE: chmod.
DAVID J. Malan: Si, chmod, para cambiar o modo de un arquivo.
E vai ter todo máis utilizados para esta semana cun problema posterior
definido.
Pero, por agora, eu vou cambiar o modo para non ser lexible,
pero para dar a todos executeability privilexios, a capacidade
para realizar este ficheiro.
E eu vou asignar que para o arquivo Ola.
>> Se eu agora facer barra dot Ola entra, ten ver, de feito, o meu programa, Ola mundo.
E o paso que eu fixen claramente ignorar por completo?
Compilar.
Entón, eu só corrín este programa moi sinxelo.
>> E verifícase que pode facelo con un lote de sintaxe reminiscente de C.
Déixeme ir ao código de hoxe, que engada no meu directorio vHost
aquí, por razóns reais nós imos volver.
E eu estou indo a ir en, digamos, as condicións dun.
>> E vai ver aquí, en primeiro lugar e por riba de todo, unha morea de comentarios.
Pero esta é realmente unha recreación en PHP
dun programa que fixemos a semana un chamado condicións 1.c
onde propósito de vida deste programa
é aparentemente para pedir o usuario a un número enteiro
e, a continuación, facer algunha gordo análise sobre el a través do cal
dis si é positivo ou negativo ou igual a cero.
E eu traio este enriba só porque, á excepción quizais dun pequeno detalle,
é indistinguível tan lonxe de C.
>> Cal é a única característica aquí que talvez salta
para ti como algo diferente?
Quizais dúas cousas.
Si?
>> ESTUDANTE: Dólar sinal n?
>> DAVID J. Malan: Yeah.
Entón cifrão n está presente.
E cifrões, como imos ver, imos
ser unha solución para o inicio de calquera variable en PHP.
É tanto o ben bo e bad-- en que é unha especie de evidente o que é
unha variable, mal en que é unha cousa para escribir.
E hai outro cousa que non ten moito
visto, polo menos por esta grafia. si?
>> ALUMNO: Readline.
>> DAVID J. Malan: Readline.
Readline non ver, por si só, en C, aínda que hai algo
semellante, pero usamos getString, e esta é a súa homóloga.
Entón, se eu entrar nesa directorio, que pasa a ser,
como vou explicar un pouco na miña vHost directorio e miña fonte dun directorio,
e eu ir adiante e facer o corte de punto conditions-- barra dot whoops--
condicións 1, vai ver, unha vez máis, o mesmo permiso issue-- negado.
>> Entón deixe-me achegar e facer chmod un plus x sobre as condicións, as condicións da corte de punto.
Gustaríame un número enteiro, por favor, 50.
E poderiamos xogar este xogo durante todo o día.
Vai comportarse exactamente como o fixo nunha semana.
>> OK, por tanto, non moi diferente, agás non só que leve pouco de sintaxe,
pero, na parte superior, I novo tiña esta liña que
permitiume crear algo que parece un programa en C chamado Ola,
chamadas condicións 1.
Pero non é 0 e os Estou executando directamente.
É, en vez de realizar este intérprete, cuxo nome
pasa a ser o mesmo que o idioma.
O programa chámase PHP, e meu código por baixo da liña de un está a ser pasado para el.
>> Podemos facer outra moi sinxelo exemplo unha reminiscencia de algo
fixemos semanas.
Unha vez máis, esta é unha especie de anaco de código arbitrario
que, ao parecer, fai que cando executa-lo?
Que isto vai imprimir, presuntamente?
>> Entón, inicialmente na liña 16, é vai dicir que x é agora 2, probablemente.
% D é a mesma que a printf $ i.
Entón é cubing, punto, punto, punto, na liña 17.
E despois a liña 18 aparece para chamar a unha función Cubed.
E onde é definido Cubed?
>> Ben, parece que na liña 25, de xeito que non é tan diferente.
Teño algúns comentarios anteriores Lo, mais, na maior parte,
é un moi sinxelo portabilidad ou conversión
do programa en C para a versión de PHP.
Pero agora hai un par de diferenzas que quizais debe ir para fóra.
Que máis é diferente sobre como pode escribir este mesmo programa en C?
>> Estudante: [inaudível].
>> DAVID J. Malan: Non hai ningún prototipo enriba.
Entón PHP-- e, francamente, un chea de languages-- moderno
son moito máis intelixentes e máis útil de C compiladores en que
pode pór a función aquí enriba, pode pór unha función aquí en baixo,
eo intérprete vai para facerlle o favor de ler
o arquivo enteiro antes de decidir que algunha función non existir.
Entón boas melloras anos máis tarde.
Pero hai tamén algo outra cousa distinta é ausente aquí.
Si?
>> Estudante: [inaudível].
DAVID J. Malan: Nós non temos que declarar tipo de variables,
entón imos ver o pouco tempo que existen diferentes tipos en PHP,
pero non precisa especificalo eles, o que tamén é bo e malo.
E hai outra cousa que falta.
>> Estudante: Non hai bibliotecas.
>> DAVID J. Malan: Non hai bibliotecas.
OK, entón iso é bo.
Recibimos moito máis fóra da caixa.
Polo tanto, non hai realmente moito máis cousas que eu cría que eran diferentes.
Que tal xeito arredor?
¿Que é iso?
Diga-se unha vez máis?
>> ALUMNO: Pointer.
>> DAVID J. Malan: Sen punteiros.
Aceptar, polo menos, neste exemplo, non.
Iso é xusto.
Polo tanto, non hai indicacións en PHP, en realidade, en xeral.
Hai algo chamado referencia pero non imos gastar moito tempo alí.
E o que máis?
>> ALUMNO: Principal.
DAVID J. Malan: Main.
Polo tanto, este foi o Biggie Eu estaba a pensar.
Teña en conta que non hai punto de entrada principal.
Simplemente comezar a escribir o seu código.
E este é, en realidade, será vantaxoso
cando nós facemos a transición momentáneamente para realmente usar
esta mesma linguaxe para web baseada en de programación, para os cales nós
Non quero ter só un punto de entrada.
Podemos querer ter unha chea de URL, unha morea de arquivos diferentes
todo tendo en entrada do usuario e producindo saída.
>> Pero aquí é o moi desanimado exemplo que prometín a última vez,
nomeadamente neste cartafol aquí, os erros ortográficos.
Polo tanto, neste ortográfico arquivo, que non vai gastar moito tempo en, hai
esencialmente un porting-- P-O-P-A. É só a palabra dada cando, digamos,
converter dunha lingua a outra normalmente manualmente.
>> Esta é unha portabilidade de PC versión do corrector ortográfico do PSET 5.
E eu esencialmente intentou convertelo liña por liña, tanto como eu poida.
Entón, se lle gusta deste tipo de cousas, realmente paga a pena nalgún momento
tirando os dous lado a lado e ver o que é o mesmo
eo que é diferente.
Pero son moi danado similar.
Se recorda que ortográfico aínda parecía,
aínda que non fixo Ten que cambiar o ficheiro,
é moi semellante estruturalmente con só un par
de cambios aquí e alí.
>> Entón, iso é só para dicir que é moi simple para converter ortográfico
de C para PHP.
Pero no dicionario, non hai algo aínda máis atractivo.
Deixe-me ir adiante e crear meu propio arquivo dictionary.php.
Así lixeiramente diferente en que imos chamalo .PHP ao contrario de .c.
Porque este é un ficheiro PHP, I fazer-- lixeiramente annoyingly-- ter
para iniciar o ficheiro con unha etiqueta php así.
E eu estou indo a ir adiante e establecer algunhas funcións.
Función chamada de verificación, que é vai levar nunha palabra como antes.
Pero este argumento terá un dólar
asinar, porque estamos, unha vez máis, usando PHP.
Outra función do dictionary.c era carga
e tardou en nome dun dicionario, así que vou comezar esta función preparado para ir.
>> Outro en dictionary.c foi o que?
Tamaño foi un dos máis fermosos, en menos se mantivo algunha variable arredor.
por iso o tamaño só ten que devolver unha variable.
E entón houbo descarga.
>> Así, había estes catro funcións no conxunto de problemas 5
que precisaba para aplicar con algunha estrutura ou estruturas de datos.
Entón eu prometín que en PHP, podemos declarar
unha táboa hash, por exemplo, todo o que máis facilmente.
En realidade, se eu queira unha táboa hash, Eu só vou ir así
e non é a miña táboa de hash.
E esa é a nota, desanimado, que paramos na última vez.
E vostede sabe que, se eu quixese unha variable de tamaño, ben,
este non é todo que diferente de C,
pero eu estou indo a ir adiante e facelo.
E teña en conta ningún tipo de datos.
E eu vou volver máis tarde e realmente engadir algúns comentarios aquí.
Pero o que dicir de carga?
>> Se dicionario cifrão é o nome do meu arquivo
e eu realmente quero cargar palabras en esta táboa agora,
Podo realmente facer algo moi sinxelo.
Um-- e este é minorly annoying-- en PHP,
ten que especificar no interior dunha función, se
quere acceder algúns mundial variable que é definida fóra.
>> Pero iso non é especialmente interesante neste momento.
O que é máis interesante é que para cada construír que mencionei da última vez.
E verifícase que o PHP ten unha función chamado ficheiro cuxo propósito na vida
é abrir un arquivo e ler en todas as súas liñas nunha matriz
e entrega-los ao.
>> O que quere dicir que podo facer tan dicionario que agora efectivamente cando eu chamo de arquivo,
iso me vai devolver unha serie de palabras do ficheiro.
Non é todo de bo.
El aínda vai ser unha liña de palabras, algo lineal.
Pero eu podo ir adiante e facer unha iteración sobre cada unha destas palabras usando
que a sintaxe que vimos brevemente última vez.
E vai velo máis o próximo PSET.
>> Pero agora eu teño unha iteración de loop sobre cada palabra no dicionario.
E en cada iteración, lembro que eu son chamando a palabra actual "palabra".
E todo iso vai levar a poñer unha palabra no dicionario é
será palabra palpite "verdade".
Esa é a miña función de inserción.
Esa é a miña función de carga para o meu dicionario.
Agora é un pouco de unha fraude, porque, Vostede sabe o que, non hai, en realidade,
n de barra invertida ao final das palabras que eu probablemente debería desfacerse,
pero iso non é un problema, xa que o PHP ten unha costeleta que función chamada literalmente
Costeletas de fóra un personaxe ben ao final.
Entón, non hai problema ningún.
Temos ido adiante e, de feito, acurtado que só iso.
E agora eu probablemente debería manter o control de tamaño, entón imos polo menos facer isso-
tamaño ++.
Podo facelo como antes.
E entón que é probablemente vai funcionar moi ben, así que de regresar certo.
Feito.
PSET 5.
>> [Risas]
>> DAVID J. Malan: Aceptar.
Nós imos facelo de novo coa seguinte PSET, tamén.
Así que sobre o tamaño?
Ben, espero que este é de preto de como sería de esperar a última vez,
aínda que eu teño que facer esa cousa estúpida mundial.
É só un artefacto de proxecto da linguaxe.
>> Pero cheque é un pouco máis interesante.
Entón, se eu pase en dólar asinar palabra, eu primeiro
quere ter acceso a que a táboa variable global.
E agora, se eu queira comprobar se unha palabra está aí,
Podo simplemente dicir se é certo que o seguinte defínese na táboa,
entón vai adiante e retorno true; máis, return false.
Feito.
A outra metade do PSET 5.
>> Todo ben, entón, de novo, eu son cortar algúns cantos.
Para ser xusto, eu probablemente debería gastar máis uns segundos
nesta aplicación.
E eu probablemente non debería mofar de todo o hora que poñer na PSET tanto.
Entón strtolower é unha función.
Algo semellante existencialista C en, polo menos, para os caracteres,
pero o PHP ten unha versión corda toda.
>> Isto vai obrigar todo en minúsculas, o que algúns de vós
podería ter feito para canonizar o que estabas poñendo no seu dicionario.
E agora pode facelo en C, tamén.
Isto non ten nada que ver co PHP.
>> Pero sempre que ten unha condición booleana,
como algo na liña 10 alí, o que só é
vai avaliar o certo é falsa, e é o caso máis claramente
está retornando verdadeiro ou falso, eu podería simplemente realmente facelo máis sexy
e só facer algo así.
De xeito que non é a miña función de verificación.
Certo, o booleano retorna verdadeiro ou falso,
imos devolve-lo inmediatamente.
>> E hai algúns outros axustes Podería facer aquí e alí.
Descarga Load--, de feito, que está feito.
Nada que facer alí.
Xa que toda a memoria en PHP e moitas outras linguas
é realmente conseguiu para ti.
Así, mentres que no C, como aprendeu dolorosamente,
calquera cousa que malloc ou calloc ou realloc, ten que se librar.
O que se fopen, ten que usar fclose, para que os recursos son finalmente liberados
e ferramentas como Valgrind non facer entender e non se queixa,
que é bo para correr con eles.
>> Pero, certamente, non debe haber algunha captura, non?
Se non, nós medio que desperdiçado unha morea de semanas.
Polo tanto, hai unha serie de razóns por que tipo de tomar esta traxectoria,
pero hai un trade-off.
Correcto, iso foi temática.
>> Entón, o que pode un trade-off aquí se desprazan, de C para PHP?
Sinto como se todos gañan tan lonxe que non un pouco de feiúra aquí ou alí.
Si.
¿Que é iso?
>> Estudante: [inaudível] de memoria.
DAVID J. Malan: Speed.
Está ben.
Ben, a miña velocidade era moi rápido.
Non?
Pero a velocidade de execución do programa?
OK, entón iso é un punto xusto.
>> Entón, como iso ía acontecer, eu adiantado cued-se tanto a miña solución intento, a un
Eu tiña na tarxeta grande era unha solución a base de intento,
e eu teño que neste directorio aquí.
Entón, eu, nun momento, podo ir adiante e realizar tanto na Biblia King James,
premer Intro.
E iso é esperanza correcto execución ao final,
me dá tempo en total de 0,38 segundos para que
un exemplo dalgún modo arbitrario.
>> E se eu agora ir a este segunda xanela de terminal
aquí onde abrín primeiro gedit, imos me entrar code-- de hoxe que, de novo,
É neste directorio aqui-- e déixeme ir adiante e executar ortográfico.
Entón, só para quedar claro, esta é a versión de PHP.
Estou só mostrando o inicio do mesmo aquí.
>> Entón, se eu fago ortográfico de til CS50 PSet cinco textos, King James, entrar.
É aínda máis rápido que a escrita Lo en C, pero o tempo total de
é, o aviso previo, de 0,93, mentres que o meu Implantación baseada en C foi de 0,38.
Entón é unha diferenza non-trivial.
>> E este é só nun arquivo.
Se fose para executar os dous programas contra o gran consello
e ten unha morea de entradas probado, este sería seguramente sumar.
E se tivésemos conxuntos de datos aínda maiores, iso, tamén, que se suman aínda máis.
Entón, si, pagar algún prezo de velocidade é realmente o caso.
Que máis?
Si?
>> ESTUDANTE: Cantidade de uso de memoria RAM.
>> DAVID J. Malan: Cantidade de uso de memoria RAM.
Así que non dar un segundo penso ao escribir este PHP
versión de canto memoria que eu estaba a usar.
Estou totalmente retrasar isto para PHP si e quen escribiu este programa.
E iso pode ser OK, pero se realmente
preocupan axustado tanto o desempeño fóra do meu programa ou fóra do meu sitio
ou fóra de calquera ferramenta Estou construíndo, quizais
PHP, en realidade, non é a linguaxe correcta.
>> E, de feito, é por iso que, para exemplo, moitos web servers--
os programas que reais servir-se content-- web
non están escritas en PHP ou en Python ou Ruby.
Son escritos, como agora vai facer PSet 6,
en C, de xeito que pode espremer cada bit de desempeño fóra del
e realmente exercer control de gran fino sobre o que é
pasando baixo a capa e non só tomalo
para concedida algún superior estrutura de datos nivel.
>> Considere-se, a pesar de todo, quen en PHP aplicado
esa noción dun hash mesa-- é realmente máis
apropiadamente chamado array-- asociativa fai ou ten algunha idea de que tipo
de entradas que van ser poñer na estrutura?
Entón, obviamente, non, non?
É unha ferramenta xenérica no conxunto de ferramentas que se
proporcionada para quen queira para usalo, e por iso seguramente que
non se pode óptimo, en definitiva exactamente o que quere facer.
>> Así, o tempo de desenvolvemento trade-offs-- pode diferentes, o desempeño pode ser diferente,
complexidade ou uso de memoria pode ser diferente.
E entón o que vai atopar cada vez máis, é que non hai
será diferente ferramentas para o comercio.
E, de feito, para un super maioría dos proxectos finais da xente nesta clase,
cren ou non, C non vai ser a linguaxe correcta para usar.
>> E, de feito, un dos delivery en definitiva, para calquera clase como este
é para ti pensar sobre, ben, o que ten que retirar
andel cando quere para resolver algún problema.
E, de feito, nós imos atravesar esa ponte aínda máis cando miramos para máis idiomas
mesmo para alén de hoxe.
>> Entón transición imos agora para quizais un contexto máis familiarizado
para a utilización dunha linguaxe como PHP.
É pouco común para usar en liña de comandos, escribindo guións
como eu fixen, pero é moito máis común.
E foi destinado a ser utilizado en a forma de ficheiros que normalmente terminan
en .php-- pero iso é non un prerequisite--
que se xerar o contido da web.
>> Entón deixe-me ir adiante e abrir un pouco exemplos que me preparado con antelación.
E estes son, en realidade, unha especie de verdade historias en que unha das primeiras cousas
Nunca me fixo despois de rematar CS50 e quizais, creo,
CS51 anos é o meu compañeiro de cuarto e eu estaba axudando
para realizar o intramural calouro programa de deporte, o que, no momento,
calouro tiña de se rexistrar para varias Deportes, cubrindo unha folla de papel,
como era chamado, camiñando en todo o curro para Wigglesworth,
e deixala caer nalgún caída porta de Proctor.
E entón el ou ela pasaría por los e, a continuación, en realidade, un correo electrónico manualmente
que foron rexistrados por algún deporte.
>> Entón, claramente, unha oportunidade para melloras.
Estes días, pode recorrer a só Formas de Google, pero volta no día,
tivemos de realmente alcanzar este for-- Non se mesmo que a longo ago-- chegar
para unha programación linguaxe que non era PHP.
Na época, era algo chamado Perl,
que xa saíu de moda desde entón.
Pero a idea é a mesma.
>> E eu, esencialmente, sentou-se para tratar a porta vai versións Perl para PHP,
pero en negación completa, non deu calquera pensamento á estética aínda.
Entón, aquí é unha páxina web.
Este é un ficheiro.
Se eu aumentar o zoom, a súa aparentemente chamado froshim0.php
só porque é o noso primeiro exemplo desta serie.
E entender que ten o que parece para ser un formulario HTML moi feo,
pero dunha forma é interesante porque permite
me proporcionar a entrada do usuario para o navegador.
>> Agora última vez cando tivemos un formulario, para quen é o que nos sometemos noso parámetro de consulta,
o parámetro de cola, como era chamado?
Entón, a Google, non?
Estamos totalmente punted na idea de facer algo con esa entrada.
>> Pero hoxe, comezan a producir a saída.
E o comportamento que vou ver aquí, inicialmente, é moi trivial.
David, eu vou marcar xénero aquí, di Matthews aquí.
Non vou ser o capitán.
Vou prema en rexistrar.
E teña en conta que a URL ten cambiado rexistrarse 0.php,
e despois hai este texto feo aquí.
Non pensou en o formato deste.
>> Pero o que é interesante é que tres Os valores foron aparentemente pasado.
Esta é unha especie de PHP equivalente a printf--
imos ver o que é realmente chamado nun bit-- que imprime
o que pasou para el.
Entón iso suxire que esta forma tiñan, polo menos, tres campos para iso,
e me viu escriba-los.
Un deles era o meu nome, unha era xénero, un era dormitorio.
E o capitán nin sequera son enviados o servidor, porque eu non verificalo.
>> Entón, iso quere dicir, ao parecer, cando enviar as cousas na web,
non só a URL ás veces change-- ás veces iso non acontece.
De feito, o nome do ficheiro modificado, pero o que está ausente da URL
que vimos a última vez con Google.
Si?
>> ESTUDANTE: Non cadea de consulta
>> DAVID J. Malan: Non hai ningunha cadea de consulta.
Non hai ningún punto de interrogación algo.
Non hai ningún punto de interrogación q é igual a gatos, como fixemos a última vez.
E non hai dúbida ningunha Nome de punto de interrogación é igual a
David ou dormitorio é igual Matthews, Entón, onde é que todo está indo?
>> Ben, deixe-me volver a gedit aquí e abrir o primeiro destes ficheiros
no meu vhost, servidor local, público directorio aquí e ir froshim0.
Así, verifícase que case todo esta páxina é só HTML.
E iso pode ser raro para ti, pero pronto será máis así con PSET 6
e PSET 7 e 8 PSET.
Pero esta é só unha páxina HTML.
>> E a cousa interesante semella aquí.
A etiqueta form cuxa acción atributo ten un valor de rexistro 0.
É por iso que cando eu submeto iso, que vai para o arquivo.
Pero o método é distinto post today--.
Así, verifícase que hai polo menos dous métodos utilizados na web
para enviar información desde o navegador ao servidor.
Get pon na URL.
Publicar o pon en outro lugar.
E cando e por que pode realmente quere un sitio
usar post, entón, no canto de obter, só intuitivamente?
Calquera sitio.
Que tipo de datos deben ser pasados ​​só por inferencia agora vía correo, por oposición
para chegar, se nós vimos as dúas diferenzas?
Estudante: [inaudível] seguro.
DAVID J. Malan: Se quere algo para ser seguro.
Entón, pode escribir un contrasinal nun sitio web, unha tarxeta de crédito
nunha web faría tipo de estes sub-óptima
se o navegador que poñer valor dentro da URL.
Por que?
Ve, o que non fai parece ser un negocio tan grande,
pero as probabilidades son que anda moi frecuentemente lonxe do seu ordenador ordenador ou uso
laboratorios, e así por alguén persoa ou mesmo un compañeiro de cuarto
podería facilmente camiñar cara arriba e ver que información privadas.
Cando envía un correo-e vía web, probablemente
Non quero ese final de datos na URL tamén.
E por iso hai unha serie de razóns por iso que pode querer poñelas aquí.
E así photos--, eu non podo mesmo moi imaxinar como levaría un gráfico,
como un JPEG, e poñelas nunha URL.
Podería facelo.
Hai formas de codificar-lo, pero é só non é sinxelo así.
>> Entón Rexístrese 0 é realmente moi por baixo do esperado.
Todo o que di, literalmente, é iso.
El imprime nuns Etiquetas HTML o seguinte.
Eu teño un código PHP aquí aninhado dentro dunha etiqueta de pre.
"Vista" significa só texto pre-formatado, monoespazado, como unha máquina de escribir.
>> Printr é unha función recursiva de impresión.
E despois hai este O interesante aquí.
E nós imos voltar a este porque hai outros,
pero subliñado cifrão pos semella
unha variable en PHP no que nada envía desde o navegador ao servidor
queda almacenado para ti.
E imos ver como chegar en que a información antes de tempo.
>> Pero, primeiro, imos voltar a un exemplo un pouco diferente.
Indo register-- ou no seu lugar, froshims1.php,
que parece un pouco diferente.
Tomei un pouco máis esforzo con o formato,
aínda que aínda é moi feo.
Pero eu estou indo a ir adiante e escriba "David" agora.
Masculino.
Imos comprobar "capitán" esta vez.
Faremos Matthews.
E se dar de alta.
>> E esta vez el di que, hm, non realmente.
Todo ben, entón o que é rexistrar un?
Déixeme entrar rexistro aberto un hm correo.
Todo ben, entón iso é interesante, e este
é un trampolín cara agora programas máis interesantes.
>> Teña en conta o principio deste arquivo ten un PHP etiqueta así como a algúns comentarios.
E estes son, polo momento, unha distracción entón imos nos librar deses comentarios
como están en C. E eu reclamo con este anaco de código con un comentario
que este código é validando a presentación.
>> Ben, acontece que variables como cifrão
subliñado post son chámase super globals.
Son como estes variables globais especiais
que son só OMNI-presentemente dispoñible dentro do seu programa.
E pode usar a notación de corchete indexar para eles non usar números
como 0, 1, 2, 3, pero as palabras reais.
>> Así, pode pensar en cifrão subliñado posto como unha especie de táboa hash
que podería pasar unha clave nunha investigación palabra nos entre os corchetes,
e vai lle dar de volta o valor que o usuario realmente indicado.
PHP ten unha función chamado baleiro que só
di si ou non, este variable está baleira ou non.
Temos estas barras dobres, que significa ou, como en C.
>> Entón, en realidade, esa liña 4 é só dicindo que se o usuario non dar un nome
ou non deu un xénero ou non dar un dormitorio, dalle redireccionándoos lo
ou ela vía esa liña aquí.
Entón, iso é algo enigmática, pero iso só quere dicir literalmente
volver a este lugar, por iso, o usuario patadas
de volta a onde queira que el ou ela veu.
Pero é algo deselegante en que codificado.
>> Pero e se esa condición se non avalía a verdade?
E se o usuario me deu o seu ou o nome dela e dormitorio e de xénero?
Que, se a condición non é vai avaliar a realidade,
entón eu non acertar a saída na liña 7.
Entón o que ocorre?
E iso é o que é interesante sobre PHP.
>> Pode deixar caer a dentro e fóra de xeito PHP, por así dicir.
Se quere algún código para realizar, pode abrir e pechar a etiqueta PHP
e poñer o código alí como eu fixen aquí.
Así que pechar tag PHP, o servidor
é só ir cuspir o que poñer alí.
E, de feito, iso era parte do o proxecto orixinal do PHP,
para mellor ou peor, se esta fungibilidade de código e marcado
lingua.
E veremos que esta moito axiña se transforma nunha desorde.
E así imos facer mellor que este, en última instancia, pero só
entender a facilidade con que eu son realmente capaces de realizar algunha lóxica.
>> Pero aínda un pouco por baixo do esperado.
Imos abrir versión dous de Frosh IMS, que
aparentemente se somete a register2.php.
Polo tanto, este ficheiro está realmente a suceder ollar case o mesmo.
Eu estou indo a ir a Frosh IMS 2.
Pero en Frosh GI 2, imos ver o que acontece.
>> David, prema no botón de radio, como é chamado; Matthews, sen capitán.
Registre-se.
Está rexistrado.
Non é realmente.
Oh, espera, fixemos Nese exemplo, non foi?
Todo ben, sexa.
Nós imos facer a tres.
Claramente algo é sobre ocorrer con Gmail.
Nós imos chegar alí.
>> Entón Frosh IMS 3 parécese iso.
Non é diferente.
Pero cando fago David, do sexo masculino, Matthews, e rexistrar, esta terceira e última versión
reivindicacións, simplemente ti, rexístranse realmente.
Ese é o tipo de inmaterial.
Pero eu afirmo con este terceira e última versión
Teño agora recreado exactamente o que o meu compañeiro de cuarto e eu construído para os IMS Frosh
anos do programa atrás.
E era simple.
Non había base de datos, ningunha folla de cálculo Excel.
Pero, máis importante, non había máis papel
porque o que fixemos con este programa era, en realidade, o correo electrónico o inspector, que
estaba recibindo anteriormente estas cousas a través de formularios.
>> E ao parecer temos programado iso en tal xeito que, cando alguén rexistra,
Correos electrónicos de conta de John Harvard a proctor-- ou a si mesmo neste caso,
John Harvard-- coa seguinte texto-- "Esta persoa acaba de rexistrar."
Nome é David, o capitán está baleiro; xénero, do sexo masculino; e dormitorio, Matthews.
>> Entón o que pasou alí?
Ben, o arquivo en cuestión aquí é aparentemente register3.php.
E se eu abrir iso, vai ver tanto o poder do código coma este
e tamén, a verdade, a inseguridade dun sistema como o correo electrónico.
Acabo efectivamente finxiu ser John Harvard do seguinte xeito.
>> Teño a etiqueta php aberto enriba, o que só di aí vén algún código PHP.
Aquí en baixo, xira por aí son bibliotecas en PHP.
Só non precisa incluír ficheiros de cabeceira como moito.
Gañou máis coa pía da cociña, por así dicir.
>> Pero, esta vez na liña 4, fago quere biblioteca especial chamado
PHP sistema de correo, que é algo que pode instalar gratuitamente en moitos sistemas.
Aquí debaixo estou validando presentación só
comprobando se o usuario dar me un nome, un xénero e un dormitorio.
E se é así, vai adiante e instanciar un sistema de correo.
>> Pode pensar niso como unha liña de código que só aloca.
É como malloc, pero é un pouco máis sexy
en que non mencionar só malloc e algún número xenérico.
Vostede di que me dar un destes, dáme un novo un destes.
>> E se xa programou en Java ou C ++ ou outras linguaxes,
podes ver iso.
Pero a curto que si descoñecido, esta liña
pon en correo cifrão unha estrutura especial chamada
un obxecto que foi construído con función de correo electrónico.
E, de feito, entender e sintaxe similar.
>> Este non é un punteiro, per se.
PHP só usa a mesma sintaxe.
Esta liña está dicindo uso SMTP-- Simple Mail Transfer
Protocolo, que é só o protocolo usado para enviar correos electrónicos.
Este é que especifica o uso Servidor SMTP de Harvard, que
está nalgún lugar aquí no campus.
>> Isto está dicindo que o TCP número de porto para falar,
e eu só entender iso por buscando ou pregunta ao help desk.
E despois xa Harvard usa algún seguridade do sistema na server-- correo
polo menos para cifrar tráfico entre vostede e el,
aínda que calquera pode enviar a ele-- Vou chamar o protocolo TLS
para manter esta seguro.
>> Pero é aí onde as cousas estar un pouco asustado.
Podo só arbitrariamente dicir que estou jharvard,
e podo só arbitrariamente enviar correo-e me aquí.
E entón podo especificar un tema con esta liña aquí.
>> E iso só parece feo, pero é só unha morea de concatenação.
Acontece que o PHP ten un símbolo super útil, como algunhas linguas, o operador punto,
que literalmente concatena cadea tras cadea despois de cadea,
e non ten que malloc ou figura a lonxitude total da cadea.
Só fai iso.
E, de feito, por que eu estou concatenando en todas estas cousas con estes puntos,
é por iso que o correo-e que eu enviado mirou como fixo.
>> E entón, finalmente aquí, estou enviando correo.
Entón, se isto é falso, Eu só vou morrer,
que é unha función que só impresións á pantalla algúns mensaxe de erro.
Pero é, de feito, chamando a función de envío.
Se non, se todo isto falla, el me redirecciona para acá.
>> E por que vexo que Estou rexistrado realmente?
Ben, isto aconteceu aquí.
Entón eu traio isto para un par de razóns.
>> Un deles, é exactamente así que se construír algún sitio para un proxecto final
ou para o mundo real, este é como enviar recordatorios de correo-e
para os seus clientes ou os seus subscritores.
Isto é como enviar recordatorios de contrasinais.
Isto é como enviar mensaxes de persoas que teñen un novo Facebook
mensaxe pendente ou algo parecido.
>> Pero tamén fala o feito de que esta podía
foron moi ben desde Davin ou calquera outra persoa.
E digo que este tipo de cun sorriso, porque eu son
moita certeza do que está pasando por varias das súas mentes neste momento.
Pero este é un destes faga como eu digo, non como fago tipo de cousas,
porque é trivial forxar correos electrónicos como este.
Pero, como pode ver ou ler o Crimson,
de tarde tamén é moi trivial para persoas
rastro-las para algunha orixe.
E preguntar-me un tempo, quizais en CS50 xantar, como eu primeiro
coñeceron moi de preto case ás taboleiro ed moitos anos
atrás, cando descubrín como a internet funciona.
Así, en calquera case-- lixeiramente despois de que o consello fixo ed.
>> Así, en calquera caso, hai unha todo grupo de super-globals,
como son chamados aquí, un dos cales nós saw-- post dólar sinal de subliñado.
Hai unha contrapartida chamado get, que é onde o material a partir dunha URL
acaba indo.
E hai unha morea de outros, sesión demasiado-- e servidor e cookie.
Imos volver biscoito algún outro momento,
pero sesión é legal porque neste agora- ata agora-
todo o que fixemos con un navegador web é unha especie de apátrida, por así dicir.
Podo premer arredor, o acceso arquivos no servidor, algo
acontece na pantalla, pero a continuación, a conexión é pechada.
O Internet Explorer ou o Icona de Firefox para de xirar
e só ver o que esta páxina web contén.
>> Entón HTTP é apátrida en que xa que fai unha conexión,
recibe algúns datos, é iso.
Non hai máis respecto, ao contrario do Skype, ao contrario FaceTime, GChat pola contra, o que
mantén unha constante conexión co servidor.
A web é fundamentalmente desconectado, pero imos
ver en pouco tempo como podemos simular cousas
como Facebook chat e GChat, aquelas que manteñen a illusion--
ou realmente facer manter un conexión constante con
tecnoloxía máis moderna.
>> Pero se eu for a, digamos, counter.php, este é un exemplo máis sinxelo,
como veremos, que pensa actualmente Eu visitei o sitio tempo cero.
Pero se eu simplemente recargar a páxina, que dalgún xeito sabe que eu estaba aquí antes.
Se eu actualizar de novo, sabe que eu estaba aquí antes.
E de novo e de novo e de novo e de novo.
>> Entón, hai algunha máis-plussing suceder, pero aviso
a pequena cousa vira sempre tan brevemente enriba e despois desconectar,
entón non é como se eu tivese unha constante conexión co meu dispositivo.
Ben, se eu entrar counter.php, entender como é simple.
A primeira vez que chamar iso de especial función que veremos en breve
comezar a tomar para concedida chamado de inicio de sesión.
Iniciar unha sesión.
>> E unha sesión a partir de agora é só será un balde, como un centro comercial
cesta en que pode pór valores e tipo de confianza como un programador
que van estar aquí cando que o usuario chega traseira-- unha segunda
despois, unha hora máis tarde, mesmo un ano despois, con tal de que el ou ela non desaparecer
as cookies, como imos finalmente ver.
E agora eu só teño unha condición aquí.
Entón, se a seguinte clave, chamado contador, defínese dentro
desta super global-- este hash mesa, se will-- chamado sesión,
entón vai adiante e cara o valor do think session--
deste como un centro comercial cart-- e almacena-lo
nunha variable temporal chamado contador.
>> Se non, se o valor do contador foi non definido no chamado cesta da compra,
só arrincar a 0.
Para rematar, aquí abaixo, vaia e poña de volta para os carrinhos da compra ou a sesión
o valor do contador dun.
Así, verifícase que este aqui-- especial recipiente
que, de novo, é un destes asociado matrices, unha matriz que pode indexar
en palabras, no canto de números de persiste mesmo despois de que o usuario vai.
Unha vez máis, eu vou volver á páxina agora.
Foi un minuto ou así.
Pero lembra que eu teño estiven aquí 19 veces antes.
Este é o meu 20 º visita.
>> E así é que isto vai ser a clave para implementación de calquera sitio que recorda
que está conectado, que puxo algo literal na súa cesta da compra
para comprar ou que ten algún número de mensaxes pendentes.
Sempre que sexa lembrar de información,
veremos que o PHP, como diversas outras linguaxes,
ofrece-nos con esa ilusión de estado aínda que, como podes ver en PSET 6,
como está facendo solicitudes HTTP do cliente ao servidor, é iso.
Xa que recibe de volta ese resposta, non hai nada máis
volvendo do servidor por defecto.
Pero imos ver como solucionar isto.
>> Ben, agora, imos tratar limpar iso un pouco.
Vimos algúns diferentes exemplos alí.
Ah, e como un aparte, para os familiares ou non,
a razón pola que o Exemplo Frosh IMS foi
mirar realmente feo para slightly-- ben,
aínda ugly-- a lixeiramente menos feo aínda que feo
é porque se miramos o código fonte aquí,
verifícase que eu teño esa na parte superior do ficheiro.
>> Acontece que de bootstrap é un dos moitos bibliotecas libremente dispoñibles aí fóra
que non existe para linguaxes de programación sempre, pero para CSS ou Javascript para
ou HTML ou calquera número de idiomas.
>> E esas persoas aqui-- orixinalmente saíu
de Twitter-- só ten unha morea de estilos.
É un arquivo enorme aquí que alguén escribiu,
ou alguén da escribiu, co paso do tempo que especifica as cores e formato
e outros enfeites para que eu poida tipo de prestar a súa sintaxe
e non ten que descubrir como poñer o meu formulario.
Isto tamén é minified de xeito que un ordenador pode
comprende-lo, pero non necesariamente un ser humano.
Entón, iso é só por iso que o estilización non cambiou.
>> Pero imos agora facer mellor en termos de deseño,
porque se ficarmos abaixo esta estrada por moito tempo,
o noso código vai ficar confuso e desorde.
Entón, imos concentrar-se neses exemplos aquí.
A última de hoxe.
>> Entón aquí vai unha super sinxelo versión 1.0 do sitio web da CS50.
El só ten enlaces a conferencias e contidos programáticos,
e el está a usar esta lista non ordenada tag-- marca UL que usan última vez.
E se, en realidade, se eu abrir View Page Source,
vai ver que iso é realmente, HTML moi sinxelo.
E, de feito, aínda que esta sexa un arquivo PHP debaixo do capó,
el é aínda só cuspindo fóra só HTML agora.
>> Entón, se eu premer en charlas, vemos isto acontecer.
E se eu premer en semana cero, vemos isto.
E se eu premer en Mércores, nós vemos isto.
E iso, ao parecer, foi o PDF dos diapositivas a partir daquel día.
Todo o que eu teño feito é conexión cun Referencia tag para este URL aquí.
>> Entón, iso é só para dicir que este é un fermoso versión simple do sitio web do CS50.
A ver como é aplicado.
Se eu ir ao directorio mvc0, imos ver algúns ficheiros.
Un deles é un README, entón se algúns iso é moi rápido,
pode só bisbilhotar máis vagaroso máis tarde.
E aviso aquí é un ficheiro index.php.
Acontece que, se ti mesmo, o ser humano,
non especifica un nome definitivo en unha URL, o servidor web normalmente
infere algún nome estándar para ti.
Un índice dot algo é xeralmente o defecto.
>> Entón é por iso un momento atrás cando visitei este URL aquí,
ningún nome de ficheiro, o ficheiro extensión, ningún período na URL.
El só sabía que dalgunha forma Magic a ollar para index.php.
É só unha convención.
Podería ser chamado de calquera cousa.
>> Entón, se eu agora vai index.php, verás
que, indeed-- imos se librar dos comentarios
aquí porque non hai realmente nada de interesante para ele--
este é só codificado HTML.
Entón, iso é consistente, porén, co meu pedido
que pode mesturar HTML e PHP.
Non hai real lóxica de programación aquí.
>> E os outros ficheiros son moi moi tan pouco atractivo.
É só unha semana hard-coded aquí para unha semana m e unha semana w,
para o luns e mércores.
E entón se eu abrir semana cero, ter en conta que é case idéntico.
>> E iso é unha especie de takeaway clave.
Teña en conta o quão redundante que é iso.
Estes arquivos mal cambiar, e aínda así eu tirou un deses postos de traballo de copiar / pegar
onde tomei un file-- presuntamente a semana zero-- copiados por
cando unha semana chegou, e axustados algúns valores.
Nós probablemente debe ser capaz de facer mellor que iso.
>> Entón, imos voltar ata MVC e vai á versión un.
E teña en conta que eu teño un algúns arquivos, xa que o que
era común a todos estes arquivos só unha momento ago-- se eu volver á versión 0,
imos voltar para o índice, e só postulate--
xa para me librar do comments-- que parte desta páxina
é, presuntamente, en cada un dos meus arquivos?
Basta chamalo para fóra.
Que liñas son duplicados probablemente a través de todas estas páxinas?
Si?
>> Estudante: [inaudível].
>> DAVID J. Malan: 1 a 9.
Si, con certeza.
De 1 a 9, excepto quizais 8 cambia un pouco, xa que CS50
convértese en conferencias ou semana cero ou algo así.
Pero case idéntica.
Entón, todo isto é só tipo de copiado e pegado.
E hai unha parella outras liñas que podo pensar
de que son probablemente idénticos en todos os arquivos.
>> Estudante: 12 e 13.
DAVID J. Malan: Yeah.
Por suposto, 12, 13 e 14, probablemente, só porque as cousas interesantes
está pasando en liñas de 11 e 10, polo menos así parece.
Entón, imos ollar para a versión 1, que trata de mellorar isto.
Na versión 1 do presente example-- MVC nós imos explicar o que MVC medio dunha moment--
se eu entrar índice, tipo de parece un pouco confuso agora.
Non é tan sinxelo coma antes.
>> Pero unha vez que comeza a lelo con coidado, é
moi sinxelo o que está facendo.
Ao parecer, a liña 1 e liña 8 substituíron
todas as cousas que acaba de identified-- aínda que só para unha boa medida,
Deixei os MMSS non só no caso de algúns días, non teño unha lista de cousas.
E así o esixen é como libra incluír en C. El copia e cola
os contidos de forma eficaz aquí neste arquivo.
>> Así, en header.php, como pode inferir a partir do seu nome,
será a cabeceira da páxina.
É unha especie de orfandade aquí.
El só ten a parte superior a el, pero Non hai máis contido a continuación.
>> E se eu ollar para rodapé, mentres, que foi o outro ficheiro mentioned--
este é aínda menos interesante, pero, de novo, é común a todo.
Entón que é o pé.
Este é a cabeceira.
Este é o arquivo que é cambiando, entón por que non
tentar fatorar o comunalidade con estas dúas liñas aquí?
>> Pero podemos limpar isto ata un pouco máis.
Eu estou indo a ir adiante e abrir versión dous, onde
veremos que hai un novo arquivo, helpers.php.
Veremos que que está en un momento.
Imos ao índice, como o punto de entrada como antes.
>> E agora entende que estou requirindo helpers.php, non cabeceira ou pé de páxina.
Pero axudantes é tipo de gusto helpers.c e helpers.h de PSET 2
ou PSET 3 hai moito tempo cando realmente se buscar e atopar a que PSET,
e tivo todo o seu código para clasificar e busca nun ficheiro separado.
Iso é o que está pasando aquí.
>> E agora a liña 3 parece un pouco diferente.
E iso é só unha liña.
Para facer isto aínda máis suposto, eu podería só
Non que iso sexa estilisticamente consistente con todo o que fixemos.
Pero iso non é realmente cambiar a función.
É só unha liña de código real.
>> Ao parecer, hai unha función nalgún lugar chamado facer cabeceira,
E é aí onde as cousas ser moi poderoso.
Nótese que no interior das súas parénteses é o que outra peza de sintaxe?
É probabelmente un pouco difícil de dicir, pero notar there's-- vou poñer algún branco
espazo.
Hai corchetes.
>> E corchetes vimos un pouco atrás no contexto de matrices de asociación,
que son, de novo, como táboas de hash.
E se pensas que agora a C, o orde dos argumentos nunha función
ten que ser sempre a mesma.
Ten que lembrar que o solicitar x é--, y ou z, y, x--
e ten que proporcionar-lles sempre na mesma orde ou buscalos
se esqueceu.
>> Pero esta parece ser unha forma intelixente de pasar un valor de clave arbitraria
pares polo cal título é o nome dun argumento, neste caso,
e CS50 é o seu valor.
E o feito de eu ter estes corchetes
aquí significa que eu puidese tamén pasar en algo
como unha semana ou 1 é 0 ou 2 ou 3.
Entón, nós parametrizado esta función, de tal forma
que pode levar varias entradas, pero de momento é só unha.
>> Se eu agora vai helpers.php, entender o que está facendo.
Este é un pouco de novas,
pero por agora só tomar na fe de que se trata
a sintaxe coa que definir unha función en PHP.
Vostede literalmente dicir función.
Non especificar un retorno tipo, e iso é consistente
co detalle da variable anteriormente onde realmente non fortemente escribir.
>> Isto só especifica que, por defecto, este
leva unha asociativo matriz como un argumento.
E vostede sabe o que?
Se o usuario non pasar unha en, asumir un valor por defecto.
>> Este é un recurso que C non ten para nós, o que é bo, porque agora
datos, mesmo se non darlle algo,
será un matriz, pero un baleiro.
E como un aparte, extracto só fai algo funky
onde leva todas as claves dende matriz asociativa, as cousas
podería poñer entre parénteses, e crea variables fóra delas
para que poidamos finalmente ter acceso a eles en footet.php e header.php.
Isto é un pouco abstracto, entón déixeme apuntar isto.
>> En index.php, entender que eu son pasando un par de valores clave do título
cun valor de CS50.
Se eu agora ollar para helpers.php, notar que RenderHeader
é extraer os datos que eu estou pasando en, a continuación, esixe header.php.
O que eu fixen é unha especie de un pobre home de implantación de agora o seguinte.
>> Se eu abrir header.php, Repare que eu non teño máis difícil
codificado a palabra CS50 neste ficheiro de cabeceira.
Engada este reconhecidamente atrozmente función chamada, HTML caracteres especiais,
alí dentro.
Pero teña en conta o que eu fixen.
Teño HTML aberta.
Eu, entón, ter a cabeza aberta e Título aberta.
>> E, a continuación, dentro do título do aberto e etiquetas de preto, eu teño un pouco de código PHP.
E este é un bo, pero de sintaxe, o que significa só eco fóra.
Isto significa literalmente isto-- ecoar o following--
pero esta é a máis sexy de escribir.
Ecoam o título que foi pasado.
>> Pero o que pensas HTML carácter especial é sobre todo,
especialmente se ten algunha experiencia anterior en HTML?
Que personaxes se pode perigoso para pasar unha páxina
onde está xerando dinamicamente a páxina web cun código coma este?
Déixeme ir a ese ficheiro, versión dous, para ver se eu non podo inducir iso.
>> Versión dous é esta.
E teña en conta todo está ben, traballando ben.
Pero supoña que eu entro en index.php e I especificar que o título da miña páxina
Non é CS50.
É alerta guión soporte aberto Ola mundo, multimedia seguinte single,
preto paréntese, punto e coma, soporte aberto, guión barra.
>> Guión, como veremos finalmente ver, é unha etiqueta
que pode usar para utilizar doutro linguaxe de programación chamada
JavaScript dentro dunha páxina web.
E agora entender a lóxica aquí.
Aquí está unha chave chamada título.
Aquí é que é de valor a longo tolo agora.
>> Pero se eu for para os axudantes page- ou mellor, a páxina de cabeceira,
Estou chamando esta función en que o título por primeira vez.
Entón, se eu agora recargue esta páxina, eu ver iso, que parece ridículo,
pero é seguro.
El só parece estúpido.
>> Pero supoñamos que no canto Eu tiña esquecido iso.
E marque as miñas palabras, un número distinto de cero de esquecer de facelo
e vai ter algún traballador estudante ou amigo chegando
para ti na feira CS50 ou anónima á noite bisbilhotar no seu sitio
e, esencialmente, injectando código sen o seu coñecemento na súa páxina web
de algunha maneira.
>> Porque se eu simplemente cuspir a título aquí e Título
há-- ben, se o título literalmente parécese iso e PHP
como unha linguaxe que pode cuspir fóra noutros idiomas texto,
esta é literalmente indo para substituír esa etiqueta con,
por suposto, o que engada noutros lugares.
>> Entón, se eu agora vaia aquí e recargar despois desfacer eses mecanismos de seguridade,
agora eu teño Ola mundo aquí.
Agora iso non é todo o que de un gran tratar, pero podería facer algo
algo máis malicioso aquí, como hai
outro tags-- como veremos, xa que gastamos máis tempo en JavaScript-- como localización
dot href recibe, multimedia, pecha comiñas, HTTP business.com, pero o contrario do que
desde o outro día.
E agora pode inducir un web páxina para realmente ir inmediatamente
a esta páxina web aquí.
>> E de feito, eu non quero incluso para ir business.com
porque eu non quero para saber o que é.
Pero iso, tamén, pode desencadear código para ser inxectado desta páxina.
Entón, iso é só para dicir que, a pesar de estamos introducindo super cedo nalgúns
destas estruturas máis complexas, é todo para un fin de asegurarse de
que o código non é explorável.
>> Entón, agora unha terceira versión aquí.
Está quedando un pouco máis extravagante.
Realmente non como-- o lado anal de min
estaba quedando un pouco irritado coa feito de que eu tiña unha función chamada
RenderHeader e RenderFooter que eran case idénticos.
Entón, ocorreu-me, por que non facer Eu parametrizar estas funcións
en só un chamado renderse, teñen que ter un segundo argumento
como o nome do modelo, a finais para render-- calquera cabeceira ou pé de páxina?
E, a continuación, opcionalmente, se eu queira para pasar nalgúns pares de valores clave
como fago para o título para o cabeceira, pero non para o pé,
Podería facelo.
>> E agora, se eu entrar helpers.php, é un pouco máis complexa.
E eu vou acenar as mans no detalles, pero é só unha función.
Entón iso é un paso cara a un proxecto mellor.
>> Podemos dar un paso adiante.
Se eu vou para o meu cuarto versión deste, teña en conta agora
que eu estou facendo algo aínda máis especie de enigmático.
E sei que este é un moito para absorber dunha vez,
pero nós somos só unha especie limpador cousas.
Agora eu estou poñendo os meus axudantes arquivo nunha carpeta chamada
includes-- só un arbitrario nome onde quero poñer cousas
que quero include-- e despois o resto da é o mesmo.
>> Pero se eu ollar agora no gedit, aviso que comece librar
de todos estes outros arquivos e non teño moveu a eles, por exemplo, para aquí.
E entón, en modelos, Eu teño ese tamén.
E así todo isto é agora cara a un paso de usar un moito mellor patrón de deseño.
E nós estamos moi rapidamente indo a afastar
da función estándar de PHP, que comezan aquí con,
onde só mesturar PHP, e HTML, e seu CSS,
e simplemente cuspídela e vai facer sobre o seu camiño.
Non vai ser moi doado de manter.
Así como en C, que comezan a usar múltiples arquivos e múltiples funcións
e factoring cousas iso.
Nós imos facer o mesmo aquí.
E, de feito, no quinto e último versión aquí, eu fixen outra cousa.
Aínda pode usar dot dot, que, unha vez máis, é só o directorio pai.
Para ser aínda máis consciente de seguridade, porque se eu ollar para a escoita
aquí para xoves e versión final, previo que eu teño un directorio chamado aquí
público e, a continuación, no mesmo nivel, por así dicir,
Teño inclúe e modelos e, a continuación, o ficheiro de texto le-me.
>> E a razón pola que eu teño estruturado gusta isto-- e tantos web
hospedeiros, especialmente os US $ 5 por os meses ou uns 10 dólares mes,
se xa tivo un destes services-- o que moitos deles fan
é que só esperan que botan todo dos seus arquivos nun directorio,
como xa fixemos con este primeiro exemplo.
>> Pero así que comezar a construír máis lugares sofisticados que almacenan
datos que se preocupan e arquivos que preocupan, realmente organizar as cousas
correctamente e con máis seguridade conciencia na mente pode
comezamos a defender contra todos os amigos
que ten dentro ou fóra desta clase que,
así que comezar a facer programas na web,
comezarán a escoller sobre vostede e sobre eles.
>> E así imos ollar en definitiva, o seu deseño.
Esta é só unha imaxe que describe a continuación.
Nós imos poñer todo o noso lóxica de programación nun ou máis ficheiros,
e imos só comezar chamando eses controladores.
É onde o cerebro de nosos sitios realmente son.
Entón nós imos teñen vista, e vista
son tan sinxelo coma só separado files-- chamados templates, moitas veces.
Eles só teñen a estética da miña páxina,
o que quero a páxina para ollar como-- as cores eo deseño
e as posicións de todas as variables.
>> E, a continuación, máis interesante que vai finalmente chegar a
é o modelo, o que vai ser só a palabra que bater outras tecnoloxías
que traemos ao imaxe, como bases de datos reais,
de xeito que cando quere para salvar a información,
que non pode enviar un correo-e para a súa proctor ou a si mesmo,
realmente almacena-lo nunha base de datos usar outra linguaxe coñecida como SQL.
E así nós imos saír de aquí hoxe e incorporarse con este mércores
e introducir as bases de datos, a continuación.
>> [Música tocando]