>> [REPRODUCCIÓN DE MÚSICA]
>> DAVID J. MALAN: De acuerdo.
Esto es CS50.
Este es el comienzo de la semana ocho.
Y se recordará que lo dejamos la última vez que mira un nuevo idioma
por completo.
De hecho, uno que es bastante ligero y ni siquiera es
un lenguaje de programación.
Es un lenguaje de marcado que nos permite realmente estructurar y hacer que las páginas web.
Y cuando algo más en conjunción con esto--
o pronto lo sabrá, si no lo ha hecho.
Vamos a utilizar en cascada Hojas de estilo o CSS, que
es otro tipo de lenguaje con propiedades y valores
eso va a dejarnos hacer cosas como cambiar el color
y cambiar la posición y este tipo de ajustes.
Pero hoy en día y en adelante, empezamos a centrarse en las lenguas más poderosas,
lenguajes de programación como PHP reales.
>> Así que PHP ha estado alrededor por algún tiempo.
Y como se verá, se fue diseñado principalmente
desde el principio para real utilizar en el desarrollo web
y en realidad la generación de páginas web.
Entonces, ¿qué tipo de características hace un idioma
necesario con el fin de hacer web páginas de forma dinámica con él?
>> En otras palabras, si desea generar contenido dynamically-- como Facebook de
Suministro de noticias, que cambia constantemente, o mensajes instantáneos que aparecen de vez
a tiempo-- como lo que es el pieza clave de la funcionalidad
lo que necesitas en un lenguaje de programación que le permiten de forma dinámica
imprimir nueva información a la pantalla?
>> ESTUDIANTE: Código.
DAVID J. MALAN: Código.
Okay.
Tomaremos eso.
Un poco más preciso.
Quiero decir, podríamos hacer esto con C, francamente.
Sería un dolor en el cuello.
Pero- es este compromiso?
>> ESTUDIANTE: Sí.
Las variables, tal vez?
DAVID J. MALAN: Variables.
Bueno, seguro.
Las variables sin duda nos pueden ayudar.
E incluso algo más simple.
Lo usamos en la primera programa del primer día
cuando en realidad nos dijo "hola mundo".
>> ESTUDIANTE: Imprimir.
>> DAVID J. MALAN: Imprimir, ¿verdad?
Imprimir o printf en el mundo de C. Así que todo este tiempo,
que hemos tenido en nuestra disposición un language-- C,
en particular: e incluso Rasguño para el caso de que
puede generar cadenas de texto.
>> Bueno, si el HTML, como vimos la semana pasada, es sólo un montón de cadenas de texto
aunque con soportes abiertos y cerrados soportes y algún tipo de rima
y la razón detrás de ella, así entonces podríamos realmente
comenzar a generar páginas web manualmente escribiendo a cabo en gedit
o en Microsoft Word, para que matter-- sólo necesitamos un editor de texto.
>> O podríamos escribir código, a su sugerencia
antes, eso nos deja generar dinámicamente HTML,
y eso es lo que vamos para empezar a hacer con PHP
y, finalmente, incluso con una lenguaje llamado JavaScript
es utilizar un idioma a generar otro.
Y, de hecho, esto es lo que Facebook y muchos, muchos otros sitios
hacer para realmente dinámicamente mostrar nueva información a usted.
>> Así que vamos a empezar con un esto-- línea de mira críptico, pero uno
eso es realmente muy poderoso.
Hasta ahora, hemos estado utilizando C, que es un lenguaje compilado.
Y sólo un recap-- rápida un compilado lenguaje tiene qué características?
Obviamente, se necesita para compilar , pero ¿qué significa eso?
¿Sí?
>> ESTUDIANTE: Tiene que ser ensamblado en código máquina.
>> DAVID J. MALAN: OK.
Necesita ser ensamblado en código máquina.
Así que usted toma su código fuente, que es una especie de Inglés-como.
Convierte eso a nivel más bajo algo,
que se llama en última instancia objeto code-- de 0 y 1 de.
Y son esos de 0 y 1 de ese una CPU, como los realizados por Intel,
realmente entender.
>> Ahora, PHP y Python y Ruby y JavaScript y racimos de otro
lenguas no se compilan idiomas, pero interpretado lenguas,
lo que significa que acaba de escribir y luego no convertirlos en 0 y 1 de la.
En su lugar, sólo proporciona a continuación como entrada al programa de otra persona,
llamado un intérprete.
Y de esa persona programa ha sido diseñado
para entender lo que cada uno y cada símbolo en Python o PHP
o Ruby o cualquier número de otros idiomas significa.
>> Y por lo que todo lo que necesitamos es algo como esto.
Así que, de hecho, voy a ir hacia el aparato
aquí, sólo a cualquier ventana de edad, y estamos
va a seguir adelante y abierto un archivo llamado, por ejemplo, hola.
Ahora anteriormente, podría haber salvado esto incluso con una extensión de archivo,
pero yo voy a hacer algo aún más simple aquí.
Voy a seguir adelante y comenzar este archivo con esta sintaxis críptica.
Así que "el usuario, bin, env, para el medio ambiente, php. "
>> Esto es simplemente una línea de código que es voy a decir mi sistema operativo,
ir a buscar en su local, medio ambiente sea lo que sea,
donde PHP es-- la interpreter-- y seguir adelante y utilizar ese intérprete
para interpretar el código siguiente.
Ahora, esto es una especie de una característica fea de PHP.
Pero en este idioma, cualquier Cuando se escribe código PHP,
es necesario tener uno de estos feos Etiquetas PHP que delimitan el inicio
de su code-- <? php.
>> Pero por debajo de aquí, ahora puedo hacer algo muy simple, al igual que printf hola comas
mundo barra invertida n cerca cita, paréntesis de cierre.
Y a continuación, sólo por si acaso medida, voy
seguir adelante y cerca mi etiqueta php aquí
por lo que se ve todo muy bien bastante impresa.
>> Y tan pronto como haga clic en Guardar, gedit es suficiente realmente inteligente
mirar a esa primera línea y das cuenta, oh, estás escribiendo código PHP.
Déjame resaltado de sintaxis con los colores
aquí para que se destaca un poco más.
Pero ahora me voy a ir hasta mi ventana de terminal.
Voy a acercar.
>> Este programa se llama "hola" así que voy a hacer barra de puntos hola,
pero negó el permiso.
Y bash.
En realidad nos enteramos de que Hace cosa de un par de semanas
en el contexto de Shellshock, uno de esos bichos.
>> Pero Permiso denegado hemos visto antes, tal vez en un contexto diferente.
¿Alguien recuerda cómo usted puede arreglar algo
donde el permiso es negado de esta manera?
¿Cuál es el comando, por lo menos?
>> ESTUDIANTE: Chmod.
DAVID J. MALAN: Sí, chmod, para cambiar el modo de un archivo.
Y obtendrá aún más acostumbrado a esta semana que viene con un problema posterior
establecer.
Pero por ahora, me voy a cambiar el modo de no ser legible,
sino para dar a cada uno executeability privilegios, la capacidad
para ejecutar este archivo.
Y yo voy a asignar que en el fichero de hola.
>> Si ahora hago slash dot hola entrar, usted ver, de hecho, mi programa, hola mundo.
¿Y qué paso me hicieron saltar claramente en total?
Compilación.
Así que me encontré con este programa, sencillamente.
>> Y resulta que usted puede hacer esto con una gran cantidad de sintaxis que recuerda a C.
Déjame ir en el código de hoy, que he puesto en mi directorio vhost
aquí, por razones reales vamos a volver a.
Y yo voy a entrar, digamos, las condiciones 1.
>> Y verás aquí, en primer lugar y ante todo, un montón de comentarios.
Pero esto es en realidad una recreación en PHP
de un programa que hicimos en la semana uno llamado condiciones 1.c
donde el propósito en la vida de este programa
es al parecer para pedir el usuario de un entero
y luego hacer un poco esponjoso análisis en él mediante el cual
usted dice si es positivo o negativo o igual a cero.
Y Traigo esto a colación sólo porque, excepto tal vez un pequeño detalle,
es indistinguible tan lejos de C.
>> ¿Cuál es la una de las características aquí que tal vez salta
a usted como un poco diferente?
Tal vez dos cosas.
¿Sí?
>> ESTUDIANTE: Muestra de dólar n?
>> DAVID J. MALAN: Sí.
Así signo de dólar n está presente.
Y, como signos de dólar vamos a ver, se van
ser una solución al principio de cualquier variable en PHP.
Es a la vez buena y buena bad-- en que es una especie de lo que es obvio
una variable, el mal en que se trata de otra cosa para escribir.
Y hay otra cosa que no tenemos bastante
visto, al menos por esta ortografía. sí?
>> ESTUDIANTE: Readline.
>> DAVID J. MALAN: Readline.
Readline no vimos, de por sí, en C, a pesar de que existe algo
similar, pero hemos utilizado getString, y esto es su contraparte.
Así que si me voy en este directorio, que pasa a ser,
como voy a explicar un poco en mi host virtual directorio y mi fuente de un directorio,
y yo seguir adelante y hacer slash dot conditions-- slash dot whoops--
las condiciones 1, verás, una vez más, el mismo permiso Issue-- negó.
>> Así que permítanme el zoom y hago chmod un plus x en las condiciones, las condiciones de la raya vertical de puntos.
Me gustaría un número entero, por favor, 50.
Y podríamos jugar este juego durante todo el día.
Se va a comportarse exactamente como lo hizo en la semana uno.
>> Aceptar lo que no tan diferente, excepto no sólo que poco ligera de sintaxis,
pero en la parte superior, que de nuevo tenido esta línea que
me permitió crear algo que parece un programa C llamado hola,
llamadas condiciones 1.
Pero no es de los 0 y Estoy ejecutando directamente.
Está en lugar de ejecutar este intérprete cuyo nombre
pasa a ser idéntica a la lengua.
El programa se llama PHP, y mi código por debajo de la línea uno se pasa en ella.
>> Podemos hacer otra bastante simple ejemplo una reminiscencia de algo
lo hicimos hace semanas.
De nuevo, esto es una especie de porción arbitraria de código
que aparentemente hace lo que cuando lo ejecuta?
¿Qué es esto va a imprimir, es de suponer?
>> Así inicialmente en la línea 16, que es va a decir x es ahora 2, probablemente.
% D es el mismo que $ i para printf.
Así que a continuación se cubicar, punto, dot, dot, en la línea 17.
Y entonces aparece la línea 18 para llamar a una función Cubed.
¿Y dónde se define Cubed?
>> Bueno, parece que en la línea 25, así que no es tan diferente.
Tengo algunos comentarios anteriores , pero en su mayor parte,
que es un bastante sencillo portar o conversión
desde el programa de C para la versión PHP.
Pero ahora hay un par de diferencias que tal vez debería saltar fuera.
¿Qué otra cosa es diferente sobre cómo se podría escribir este mismo programa en C?
>> ESTUDIANTE: [inaudible].
>> DAVID J. MALAN: No ningún prototipo hasta la parte superior.
Así PHP-- y, francamente, un montón de Las Lenguas moderna
son mucho más inteligente y más útil que los compiladores de C en que
puede poner la función hasta aquí, usted puede poner una función aquí abajo,
y el intérprete se va hacer el favor de la lectura
todo el archivo antes de que decida que no existe alguna función.
Tan agradable mejoras años posteriores.
Pero también hay algo otra cosa diferente o ausente aquí.
¿Sí?
>> ESTUDIANTE: [inaudible].
DAVID J. MALAN: Nosotros no tenemos que declarar los tipos de variables,
así que ya veremos en poco tiempo que hay diferentes tipos en PHP,
pero no es necesario especificarlos, que también es a la vez bueno y malo.
Y hay otra cosa que falta.
>> ESTUDIANTE: No hay bibliotecas.
>> DAVID J. MALAN: No hay bibliotecas.
OK, así que eso es bueno.
Tenemos un montón más sacarlo de la caja.
Así que no hay en realidad mucho más las cosas que pensé eran diferentes.
¿Qué tal manera en la espalda?
Qué es eso?
Dicen que una vez más?
>> ESTUDIANTE: Puntero.
>> DAVID J. MALAN: No hay punteros.
Aceptar, por lo menos en este ejemplo, no.
Eso es justo.
Así que no son punteros en PHP realmente en general.
Hay algo que se llama referencias, pero no vamos a pasar mucho tiempo allí.
¿Y qué más?
>> ESTUDIANTE: Principal.
DAVID J. MALAN: Principal.
Así que esta era la gran cosa Yo estaba pensando.
Nótese que no hay punto de entrada principal.
Sólo tiene que empezar a escribir su código.
Y esto es en realidad va a ser ventajoso
cuando hacemos la transición momentáneamente para utilizar realmente
este mismo lenguaje para la web basado- programación, para lo cual
no quieren tener un solo punto de entrada.
Podríamos querer tener un montón de URL, un montón de diferentes archivos
todo teniendo en la entrada de usuario y la producción de salida.
>> Pero aquí está el muy desalentador ejemplo que le prometí la última vez,
es decir, en esta carpeta aquí, las faltas de ortografía.
Así que en este archivo corrector ortográfico, que nos no pasar demasiado tiempo en adelante, no es
esencialmente un porting-- P-O-R-T. Es sólo la palabra dada cuando, por ejemplo,
a convertir de un idioma a otro manualmente por lo general.
>> Esta es una de portabilidad de PC versión del corrector ortográfico de PSET 5.
Y esencialmente traté de convertir línea por línea lo más cerca que pueda.
Así que si te gusta este tipo de cosas, lo que realmente vale la pena en algún momento
tirando de los dos uno al lado del lado y ver lo que es lo mismo
y lo que es diferente.
Pero son bastante maldito similar.
Si te acuerdas de lo que corrector ortográfico incluso parecía,
a pesar de que usted no lo hizo tendrá que cambiar este archivo,
que es bastante parecido estructuralmente con sólo un par
de los cambios aquí y allá.
>> Así que esto es sólo para decir que es bastante sencillo para convertir speller
de C a PHP.
Pero en el diccionario, no hay algo aún más convincente.
Déjenme seguir adelante y crear mi propio archivo dictionary.php.
Así ligeramente diferente en que lo llamaremos .php en vez de .c.
Debido a que este es un archivo PHP, yo hacer-- ligeramente annoyingly-- tiene
para iniciar el archivo con una etiqueta php así.
Y yo voy a seguir adelante y definir algunas funciones.
Función llamada de verificación, que es va a tomar en una palabra como antes.
Pero este argumento va a tener un dólar
firmar porque estamos, de nuevo, usando PHP.
Otra función de dictionary.c era carga
y se tomó en el nombre de un diccionario, así que voy a conseguir que la función lista para ir.
>> Otro en dictionary.c fue qué?
Tamaño fue uno de los más bonitos, en menos si se mantenía en torno a alguna variable.
tan sólo el tamaño tiene que devolver una variable.
Y luego estaba descarga.
>> Así que hubo estos cuatro funciones en problemas 5
que usted necesita para poner en práctica con una estructura de datos o estructuras.
Así que me prometí que en PHP, podemos declarar
una tabla hash, por ejemplo, todo lo que más fácilmente.
De hecho, si quiero una tabla hash, Yo sólo voy a ir de esa manera
y ahí está mi tabla hash.
Y esa es la nota, desalentador, que lo dejamos en el último tiempo.
¿Y sabes qué, si quería una variable de tamaño, así,
éste no es todo tan diferente de C,
pero yo voy a seguir adelante y hacer eso.
Y note ningún tipo de datos.
Y voy a volver más tarde y en realidad añadir algunos comentarios aquí.
Pero ¿qué pasa con la carga?
>> Si diccionario signo de dólar es el nombre de mi archivo
y yo en realidad quiero cargar palabras en esta mesa ahora,
De hecho, me puedo hacer algo bastante simple.
Uno-- y esto es minorly annoying-- en PHP,
se tiene que especificar en el interior de una función si
quieren acceder a algunos mundial variable que está definida fuera.
>> Pero eso no es todo interesante en este momento.
Lo que es más interesante es esto para cada construyo que mencioné la última vez.
Y resulta que PHP tiene una función llamado archivo cuyo propósito en la vida
es abrir un archivo y leer en todas sus líneas en una matriz
y la mano hacia atrás para.
>> Lo que quiere decir que puedo hacer tan diccionario que ahora efectivamente cuando llamo archivo,
esto me va a devolver una serie de palabras del archivo.
No todo es tan bueno.
Todavía va a ser una línea de palabras, algo lineal.
Pero puedo seguir adelante y repetir sobre cada una de estas palabras utilizando
que la sintaxis vimos brevemente la última vez.
Y lo verás más en la próxima PSET.
>> Pero ahora tengo una iteración de bucle sobre cada palabra en el diccionario.
Y en cada iteración, recuerdo que soy llamando a la palabra actual "palabra."
Y todo lo que se va a llevar a poner una palabra en el diccionario es
va a ser adivinar la palabra "verdad".
Esa es mi función de inserción.
Esa es mi función de carga para mi diccionario.
Ahora es un poco de una trampa, ya que, sabes qué, no hay en realidad
n de barra invertida al final de las palabras que probablemente debería deshacerme de,
pero eso no es un problema, ya que PHP tiene una chuleta que función llamada literalmente
chuletas fuera un personaje en el final.
Así que no hay problema.
Hemos ido por delante y, de hecho abreviada que sólo esto.
Y ahora probablemente debería llevar un registro de tamaño, por lo que vamos a hacer por lo menos esto--
tamaño ++.
Yo puedo hacer eso como antes.
Y entonces esto va probablemente a funcionar bien, por lo que regresemos cierto.
Hecho.
PSET 5.
>> [Risas]
>> DAVID J. MALAN: OK.
Vamos a hacerlo de nuevo con el siguiente PSET, también.
Así que ¿qué pasa con el tamaño?
Bueno, éste es de esperar se trata como era de esperar la última vez,
aunque tengo que hacer esta cosa estúpida mundial.
Es sólo un artefacto de el diseño de la lengua.
>> Pero cheque es un poco más interesante.
Así que si pasaba en dólares signo denominativo, en primer lugar
quieren tener acceso a esa mesa variable global.
Y ahora si quiero comprobar si una palabra está ahí,
Simplemente puedo decir si es cierto que la siguiente se encuentra en la tabla,
a continuación, seguir adelante y de retorno verdadero; si no, regrese falso.
Hecho.
La otra mitad de PSET 5.
>> Muy bien, así que de nuevo, estoy cortar algunas esquinas.
Para ser justos, probablemente debería pasar unos segundos más
en esta aplicación.
Y yo probablemente no debería burlarse de todo el horas te ponen en el PSET tanto.
Así strtolower es una función.
Algo parecido existencialista en C, al menos por caracteres,
pero PHP mundo tiene una versión cadena entera.
>> Eso va a obligar a todo en minúsculas, que algunos de ustedes
podría haber hecho a lo canonicalize que estaba poniendo en su diccionario.
Y ahora usted puede hacer esto en C, también.
Esto no tiene nada que ver con PHP.
>> Pero cada vez que tiene una condición booleana,
como algo en línea 10 allí, que es sólo
va a evaluar a verdadero o falso, y si tu lo demás claramente
regresa verdadero o falso, lo que pude simplemente realmente hacer esto más sexy
y acaba de hacer algo como esto.
Así que no es mi función de comprobación.
Derecho, si el booleano devuelve un verdadero o un falso,
vamos a regresar inmediatamente.
>> Y hay algunos otros ajustes Yo podría hacer aquí y allá.
Descarga Load--, por cierto, de que está hecho.
No hay nada que hacer allí.
Dado que toda la memoria en PHP y muchos otros idiomas
se gestiona en realidad para usted.
Así que mientras que en C, como que ha aprendido dolorosamente,
cualquier cosa que malloc o calloc o realloc, tienes que liberarte.
Cualquier cosa que usted fopen, tienes que fclose, de modo que los recursos se liberan en última instancia
y herramientas como Valgrind no lo hacen darse cuenta y no se quejan,
lo cual es una buena cosa para correr en ellos.
>> Pero, sin duda, debe haber haber alguna captura, ¿verdad?
De lo contrario, que tipo de desperdiciamos un montón de semanas.
Así que hay una serie de razones razón por la que tomamos este tipo de trayectoria,
pero hay un trade-off.
Cierto, esto ha sido temática.
>> Entonces, ¿qué podría un trade-off aquí en movimiento, de C a PHP?
Se siente como todo a ganar hasta el momento que no sea un poco de la fealdad aquí o allí.
Sí.
Qué es eso?
>> ESTUDIANTE: [inaudible] de memoria.
DAVID J. MALAN: velocidad.
Okay.
Bueno, mi velocidad era bastante rápido.
Derecha?
Pero la velocidad de ejecución del programa?
OK, así que eso es un punto justo.
>> Así que ya que iba a pasar, yo de antemano con claves de hasta tanto mi solución intento, el uno
Yo tenía en el gran tablero era una solución a base de intento,
y yo tengo que en este directorio aquí.
Así que en un momento, puedo seguir adelante y ejecutar esto en la Biblia King James,
golpear Intro.
Y esto es de esperar correcta aplicación al final,
me da tiempo en total de 0,38 segundos para que
un ejemplo un tanto arbitraria.
>> Y si ahora entro en esta segunda ventana de terminal
aquí donde por primera vez abrí gedit, y mucho me voy a code-- de hoy que, de nuevo,
es en este directorio aquí-- y déjame ir adelante y corro ortografía.
Así que para ser claros, esta es la versión de PHP.
Sólo estoy mostrando la parte superior de aquí.
>> Así que si lo hago corrector ortográfico de tilde CS50 PSET 5 textos, King James, entran.
Es aún más rápido que la escritura en C, pero el tiempo total
es, aviso, 0,93, mientras que mi Aplicación basada en C fue 0,38.
Así que es una diferencia no trivial.
>> Y esto es sólo en un solo archivo.
Si se va a ejecutar los dos programas contra el gran tablero
y tienen un montón de entradas probado, este sería sin duda sumar.
Y si tuviéramos conjuntos de datos aún más grandes, esto, también, podría sumar aún más.
Así que sí, el pago de algún precio de velocidad es de hecho el caso.
Qué otra cosa?
¿Sí?
>> ESTUDIANTE: Cantidad de uso de memoria RAM.
>> DAVID J. MALAN: Cantidad de uso de memoria RAM.
Así que no le di un segundo pensado al escribir este PHP
versión en cuanto a cuánto la memoria que estaba usando.
Estoy completamente aplazando que para PHP en sí y el que escribió ese programa.
Y eso podría estar bien, pero si yo realmente realmente
preocuparse por apretar tanto el rendimiento fuera de mi programa o fuera de mi sitio web
o fuera de cualquier herramienta Estoy construyendo, tal vez
PHP, de hecho, no es el lenguaje correcto.
>> Y, de hecho, es por eso que, para ejemplo, muchos servers-- web
los programas reales que servir hasta content-- web
no están escritos en PHP o en Python o Ruby.
Están escritos, al igual que usted ahora lo hace con juego de parámetros 6,
en C para que pueda exprimir cada bit de rendimiento fuera de él
y realmente ejercer el control de grano fino sobre lo que es
pasando por debajo de la campana y no sólo lo toman
por hecho algunos más alta estructura de datos de nivel.
>> Considere la posibilidad de, después de todo, quien en PHP implementado
esa noción de un hash table-- en realidad es más
apropiadamente llamado array-- asociativo ¿Él o ella tiene alguna idea de qué tipo
de los insumos que van a ser puesta en la estructura?
Así que, obviamente, no es así, ¿verdad?
Es una herramienta genérica en el conjunto de herramientas que está
proporcionada a cualquier persona que quiera para usarlo, y por lo que seguramente se
no puede ser optimizado en última instancia para exactamente lo que quieres hacer.
>> Así que el tiempo de desarrollo del comercio podría offs-- difieren, el rendimiento puede ser diferente,
complejidad o el uso de memoria pueden diferir.
Y así lo que encontrará cada vez más es que hay
va a ser diferente herramientas para el comercio.
Y, de hecho, para una súper mayoría de proyectos finales de las personas de esta clase,
lo creas o no, C no se va siendo la lengua derecho de usar.
>> Y de hecho, uno de los comida para llevar en última instancia, para cualquier clase como esta
es conseguir que piensas, bien, ¿qué debe lograr
cuando la plataforma que desee para resolver algún problema.
Y, de hecho, vamos a cruzar este puente aún más si nos fijamos en más idiomas
incluso más allá de hoy.
>> Así que la transición de dejar ahora a quizás un contexto más familiar
para el uso de un lenguaje como PHP.
Es algo común a utilizar por lo la línea de comandos, escribir guiones
como yo lo hice, pero es mucho, mucho más común.
Y que estaba destinado a ser utilizado en la forma de archivos que normalmente termina
en .php-- pero eso es no un prerequisite--
que ellos mismos generan contenido web.
>> Así que déjame ir adelante y abrir unos pocos ejemplos I preparados de antemano.
Y estos son en realidad una especie de verdad historias en que una de las primeras cosas
Lo que he hecho a mí mismo después de terminar CS50 y tal vez, creo,
Hace años CS51 es mi compañero y yo estábamos ayudando
para ejecutar el intramural de primer año programa de deportes, que, en el momento,
había estudiante de primer año de registrarse para varios deportes rellenando una hoja de papel,
como se le llamaba, caminando a través del patio a Wigglesworth,
y soltándolo en algunos caída de la puerta del procurador.
Y entonces él o ella iría a través de y luego en realidad envíenos un correo electrónico de forma manual
que nos registramos para un poco de deporte.
>> Así que, claramente, una oportunidad para la mejora.
En estos días, es posible recurrir a solo Google Forms, pero de vuelta en el día,
tuvimos que llegar a esta realidad, el fin de: No fue hasta llegar a ese largo ago--
para una programación idioma que no fue PHP.
En ese momento, que era algo llamado Perl,
que ha pasado de moda desde entonces.
Pero la idea es la misma.
>> Y esencialmente senté a tratar al puerto va versiones de Perl a PHP,
pero en pleno descargo de responsabilidad, no dio cualquier pensamiento a la estética por el momento.
Así que aquí está una página web.
Este es un archivo.
Si Zoom hacia dentro, su parecer llamado froshim0.php
sólo porque es nuestro primer ejemplo de esta serie.
Y darse cuenta de que tiene lo que parece ser un formulario HTML muy feo,
pero es una forma interesante porque permite
me proporciono la entrada del usuario en el navegador.
>> Ahora la última vez cuando tuvimos un formulario, a quien nos sometemos nuestro parámetro de consulta,
el parámetro de cola como se llamaba?
Así que para Google, ¿no?
Estamos totalmente despejó en la idea de hacer nada con esa entrada.
>> Pero hoy, comenzamos la producción de salida.
Y el comportamiento voy a ver aquí inicialmente es bastante trivial.
David, voy a comprobar fuera de género aquí, decir Matthews aquí.
No voy a ser capitán.
Voy a haga clic en Registrar.
Y darse cuenta de que la dirección URL tiene cambiado para registrar-0.php,
y luego está este texto feo aquí.
Me dio ningún pensamiento a el formato de este.
>> Pero lo que es interesante es que tres valores aparentemente se pasaron en.
Esta es una especie de de PHP equivalente a printf--
vamos a ver lo que realmente llama en un bit-- que sólo imprime
lo que ha pasado en ella.
Así que esto sugiere que esa forma tenido al menos tres campos a la misma,
y me viste los escribe en.
Uno de ellos era mi nombre, una era género, uno era el dormitorio.
Y el capitán ni siquiera son enviadas a el servidor debido a que no comprobarlo.
>> Así que esto es para decir al parecer, al momento de enviar las cosas en la web,
No sólo la URL veces change-- a veces no es así.
De hecho, el nombre del archivo ha cambiado, pero lo que está ausente de la URL
que vimos la última vez con Google.
¿Sí?
>> ESTUDIANTE: Sin cadena de consulta
>> DAVID J. MALAN: No hay cadena de consulta.
No hay signo de interrogación algo.
No hay signo de interrogación q es igual a los gatos, como lo hicimos la última vez.
Y ciertamente no hay nombre de signo de interrogación es igual a
David o dormitorio es igual a Matthews, Entonces, ¿dónde es que todos vamos?
>> Bueno, déjame volver a gedit aquí y abrir el primero de esos archivos
en mi host virtual, host local, público directorio de aquí y vete a froshim0.
Así que resulta que casi todos de esta página es sólo HTML.
Y esto podría ser desconocida para usted, pero pronto lo será más aún con PSET 6
y PSET 7 y 8 PSET.
Pero esto es sólo una página HTML.
>> Y las cosas interesantes parece ser aquí.
Una etiqueta de formulario cuyo atributo acción tiene un valor de registro 0.
Es por eso que cuando me someto esto, que va a ese archivo.
Pero el método es diferente puesto de hoy--.
Así que resulta que hay al menos dos métodos utilizados en la web
para enviar información desde el navegador al servidor.
Get pone en la URL.
Publicar la pone en otro lugar.
Y cuándo y por qué podría usted realmente quiere un sitio web
utilizar puesto entonces en vez de obtener, sólo intuitivamente?
Cualquier sitio web.
¿Qué tipo de datos debe ser transmitida sólo por inferencia ahora por correo en lugar
para conseguir, si hemos visto las dos diferencias?
ESTUDIANTE: [inaudible] asegurar.
DAVID J. MALAN: Si quieres algo que sea seguro.
Así que puede que escriba una contraseña en un sitio web, una tarjeta de crédito
en un sitio web lo haría tipo de estos subóptima
si el navegador puesto que valor dentro de la URL.
¿Por qué?
Lo ves, lo que no hace parecen ser una cosa muy importante,
pero las probabilidades son que bastante frecuencia camina lejos de su equipo informático o uso
laboratorios, y por lo que alguien otra cosa o incluso un compañero de piso
podría fácilmente subir y ver que la información privada.
Cuando se envía un correo electrónico a través de la web, es probable que
no quiero ese final de datos en la URL también.
Y por lo que hay una serie de razones por qué podríamos querer ponerlo aquí.
Y justo photos--, no puedo incluso bastante imaginar lo que tomaría un gráfico,
como un archivo JPEG, y lo puso en una dirección URL.
Usted podría hacerlo.
Hay maneras de que lo codifica, pero es no sencillo como eso.
>> Así que el registro 0 es en realidad muy decepcionante.
Todo lo que dice literalmente es esto.
Se imprime en el interior de algunos HTML etiquetas lo siguiente.
Tengo una etiqueta PHP aquí anidada dentro de una etiqueta pre.
"Pre" sólo significa que el texto pre-formateado, mono-espaciadas, como una máquina de escribir.
>> Printr es una función recursiva de impresión.
Y luego está esto Lo interesante aquí.
Y vamos a volver a este porque hay otros,
pero el signo de dólar de subrayado puesto que parece ser
una variable en PHP en el que cualquier cosa que envíe desde el navegador al servidor
se almacena para usted.
Y vamos a ver cómo conseguir a que la información en poco tiempo.
>> Pero primero, vamos a volver a Un ejemplo ligeramente diferente.
Al entrar en register-- o más bien, froshims1.php,
que se ve un poco diferente.
Tomé un poco más esfuerzo con el formato,
a pesar de que aún así es bastante feo.
Pero yo voy a seguir adelante y el tipo de "David" ahora.
Masculino.
Comprobaremos "capitán" esta vez.
Haremos Matthews.
Y registrar.
>> Y esta vez, dice, hm, no realmente.
Muy bien, así que lo del registro 1?
Déjame ir en el registro abierto 1 hm y-.
Muy bien, así que esto es interesante, y este
es un paso hacia la ahora los programas más interesantes.
>> Observe la parte superior de este archivo tiene un Etiqueta PHP, así como algunos comentarios.
Y estos son, por ahora, una distracción así que vamos a deshacerse de esos comentarios
justo como si estuvieran en C. Y afirman con este trozo de código con un comentario
que este código es la validación de la presentación.
>> Bueno, resulta que variables como el signo de dólar
puesto de relieve son llamado súper globales.
Son como estos variables globales especiales
que son sólo omni-actualmente disponible dentro de su programa.
Y usted puede utilizar la notación de corchetes al índice en ellos no usando números
como 0, 1, 2, 3, pero las palabras reales.
>> Así que usted puede pensar en el signo de dólar subrayar puesto como tipo de una tabla hash
que usted podría pasar una llave en, una búsqueda palabra en el medio de los corchetes,
y que va a darle la espalda al valor que proporciona realmente el usuario.
PHP tiene una función llamado vacío que sólo
dice sí o no, esta variable está vacía o no.
Tenemos estas dobles barras, que sólo significa o, como en C.
>> Así pues, en efecto, esta línea 4 es sólo diciendo que si el usuario no ha dado un nombre
o no dar un género o no lo hizo dar un dormitorio, seguir adelante y le redirigirá
o ella a través de esta línea aquí.
Así que esto es un poco críptico, pero esto sólo significa literalmente
volver a este lugar, por lo que el usuario punts
de nuevo a donde él o ella venía.
Pero es un poco poco elegante en que yo no modificable ella.
>> Pero lo que si esta condición si no evalúa a cierto?
¿Qué pasa si el usuario me dio su o su nombre y residencia y el sexo?
Que si la condición no es va a evaluar como true,
así que no me golpeé la salida en la línea 7.
Entonces, ¿qué sucede?
Y esto es lo que hay interesante sobre PHP.
>> Usted puede caer dentro y fuera de modo PHP, por así decirlo.
Si quieres algo de código a ejecutar, puede abrir y cerrar una etiqueta PHP
y poner el código allí como he hecho aquí.
Tan pronto como se cierra la etiqueta PHP, el servidor
sólo va a escupir lo que puso en su lugar.
Y, de hecho, esto era parte de el diseño original de PHP,
para bien o para mal, era esto commingling de código y marcado
idioma.
Y veremos que esta muy recae rápidamente en un lío.
Y así lo haremos mejor que esta última instancia, pero sólo
cuenta de la facilidad con la que estoy en realidad capaz de ejecutar alguna lógica.
>> Pero sigue siendo un poco decepcionante.
Vamos a abrir la versión dos de Frosh mensajes instantáneos, que
al parecer, se somete a register2.php.
Así que este archivo en realidad va para mirar casi el mismo.
Voy a ir a Frosh mensajes instantáneos 2.
Pero en Frosh IMs 2, vamos a ver qué pasa.
>> David, haga clic en el botón de radio, como que se llama; Matthews, ningún capitán.
Registrar.
Usted está registrado.
En realidad no.
Oh, espera, que acabamos de hacer ese ejemplo, no lo hicimos nosotros?
Muy bien, se destacan por.
Vamos a hacer los tres.
Es evidente que algo está a punto a pasar con Gmail.
Vamos a llegar allí.
>> Así Frosh mensajes instantáneos 3 se parece a esto.
No es diferente.
Pero cuando lo hago David, varón, Matthews, y inscribirse, esta tercera y última versión
reclamaciones, simplemente, que están registrados realmente.
En cierto modo es irrelevante.
Pero yo pretendo con este tercera y última versión
Ahora he recreado exactamente lo que mi compañero y yo construido para los mensajes instantáneos Frosh
Hace años del programa.
Y fue simple.
No había ninguna base de datos, ninguna hoja de cálculo Excel.
Pero lo más importante, no había más papel
porque lo que hicimos con este programa fue a un correo electrónico en realidad el supervisor, quien
recibía previamente estas cosas a través de las formas.
>> Y al parecer hemos programado esta en de tal manera que cuando una persona se registra,
Mensajes de correo electrónico de la cuenta de John Harvard el proctor-- o a sí mismo en este caso,
John Harvard-- con la siguiente texto-- "Esta persona acaba de registrar."
Nombre es David, el capitán está en blanco; género, masculino; y dormitorio, de Matthews.
>> Entonces, ¿qué pasó allí?
Bueno, el archivo en cuestión aquí es aparentemente register3.php.
Y si abro esta, verás tanto el poder del código como este
y también, francamente, la inseguridad de un sistema como el correo electrónico.
He pretendido simplemente eficazmente a sea ​​John Harvard de la siguiente manera.
>> Tengo la etiqueta php abierto encima de la tapa, que sólo dice aquí viene algo de código PHP.
Aquí abajo, resulta que hay son las bibliotecas de PHP.
Uno no necesita incluir archivos de cabecera como mucho.
Usted obtiene más con el fregadero de la cocina, por así decirlo.
>> Pero esta vez en la línea 4, que hago querer biblioteca especial llamado
Mailer PHP, que es algo que puede instalar de forma gratuita en muchos sistemas.
Aquí abajo estoy validando la presentación sólo
comprobando dio el usuario mí un nombre, un género y un dormitorio.
Y si es así, adelante, una instancia de un anuncio publicitario.
>> Usted puede pensar en esto como un línea de código que sólo asigna.
Es como malloc, pero que es un poco más sexy
en que no se menciona sólo malloc y algunos número genérico.
Usted dice que me dé uno de estos, dame un nuevo uno de estos.
>> Y si usted ha programado en Java o C ++ u otros lenguajes,
que podría haber visto esto.
Sin embargo, el corto de él, si desconocido, esta línea
pone en el correo signo de dólar una estructura especial llamada
un objeto que se ha incorporado en funcionalidad de correo electrónico.
Y, de hecho, cuenta y sintaxis similar.
>> Esto no es un puntero, per se.
PHP sólo utiliza la misma sintaxis.
Esta línea está diciendo uso SMTP-- Simple Mail Transfer
Protocolo, que es sólo el protocolo utilizado para enviar correo.
Esta es la especificación de uso El servidor SMTP de Harvard, que
es en algún lugar aquí en el campus.
>> Esto está diciendo lo que TCP el número de puerto con quien hablar,
y me imaginé que fuera por googlear o pidiendo la mesa de ayuda.
Y luego porque Harvard utiliza algunos la seguridad del sistema en el server-- electrónico
al menos para cifrar el tráfico entre usted y él,
a pesar de que cualquier persona puede enviar a it-- Voy a encender el protocolo TLS
para mantener este seguro.
>> Pero aquí es donde las cosas conseguir un poco de miedo.
Puedo sólo arbitrariamente decir que soy jharvard,
y puedo sólo arbitrariamente un correo electrónico a mí mismo aquí.
Y entonces puedo especificar un sujeto con esta línea aquí.
>> Y esto sólo se ve feo, pero es sólo un montón de concatenación.
Resulta que PHP tiene un símbolo muy útil, al igual que algunos idiomas, el operador punto,
que concatena sólo, literalmente, cadena tras cadena tras cadena,
y usted no tiene que malloc o figura la longitud total de la cadena.
Usted acaba de hacerlo.
Y, de hecho, porque estoy concatenando en todas estas cosas con estos puntos,
es por eso que el correo electrónico que enviado miraban como lo hizo.
>> Y luego, por último aquí, yo estoy enviando correo.
Así que si esto es falso, Yo sólo voy a morir,
que es una función que sólo impresiones a la pantalla de algún mensaje de error.
Pero es, de hecho, llamando a la función de envío.
De lo contrario, si todo esto falla, me vuelve a dirigir aquí.
>> Y ¿por qué veo que Yo realmente estoy registrado?
Bueno, sucedió aquí.
Así que les traigo esto para un par de razones.
>> Uno, este es exactamente como si construyes un sitio web para un proyecto final
o para el mundo real, esto es la forma de enviar recordatorios por correo electrónico
a sus clientes o sus suscriptores.
Esta es la forma de enviar los recordatorios de contraseña.
Esta es la forma de enviar mensajes de personas que tienen un nuevo Facebook
mensaje pendiente o algo por el estilo.
>> Pero también habla el hecho de que esto podría
han sido muy bien desde Davin o cualquier otra persona.
Y digo este tipo de con una sonrisa porque soy
muy seguro de lo que está pasando a través de varios de sus mentes en este momento.
Pero este es uno de los que lo hacen como yo digo, no lo que hago tipo de cosas,
porque es trivial forjar correos electrónicos como este.
Pero como usted pudo haber visto o leer en el carmesí,
en los últimos tiempos es también bastante trivial para la gente
para rastrear de nuevo a algún origen.
Y me pregunte algún tiempo, tal vez en el almuerzo CS50, cómo yo primero
se familiarizaron muy de cerca casi a la Junta ed muchos años
hace cuando descubrí cómo funcionaba el internet.
Así que en cualquier caso-- ligeramente después de que el consejo hizo ed.
>> Así, en cualquier caso, hay una todo grupo de súper globales,
como se les llama aquí, uno de los cuales nos saw-- puesto dólar signo de subrayado.
Hay una contraparte llamada get, que es donde las cosas desde una URL
termina yendo.
Y hay un montón de otros, también-- sesión y el servidor y la galleta.
Volveremos a la galleta en otro momento,
pero la sesión es una especie de fresco porque justo ahora-- hasta ahora--
todo lo que he hecho con un navegador web es una especie de apátrida, por así decirlo.
Puedo hacer clic en torno, el acceso archivos en el servidor, algo
que sucede en la pantalla, pero a continuación, la conexión se cierra.
El Internet Explorer o el Firefox icono deja de girar
y que acaba de ver lo que que la página web contiene.
>> Así que HTTP no tiene estado en que una vez que se hace una conexión,
obtiene algunos datos, eso es todo.
No hay más conexiones, a diferencia de Skype, a diferencia de Facetime, Gchat diferencia, que
mantiene una constante conexión con el servidor.
La web es fundamentalmente desconectado, a pesar de que va a
ver en poco tiempo cómo podemos simular cosas
como el chat de Facebook y Gchat, que mantienen la illusion--
o en realidad hacer mantener un constante conexión utilizando
la tecnología más moderna.
>> Pero si voy a, digamos, counter.php, este es otro ejemplo sencillo,
como veremos, que piensa en la actualidad Visité el sitio el tiempo cero.
Pero si simplemente recargar la página, de alguna manera sabe que estuve aquí antes.
Si vuelvo a cargar de nuevo, sabe que estuve aquí antes.
Y una y otra vez y otra vez y otra vez.
>> Así que hay un poco más-plussing pasando, pero aviso
la cosita gira siempre tan brevemente hasta la parte superior y luego se desconecta,
por lo que no es como si tuviera una constante conexión a mi aparato.
Bueno, si voy en counter.php, cuenta lo fácil que es.
Yo llamo a esta primera especial función que vamos pronto
empezar a tomar por sentado llamado inicio de la sesión.
Iniciar una sesión.
>> Y una sesión de ahora en adelante es sólo va a ser un cubo, como un carrito
carrito en el que usted puede poner los valores y el tipo de confianza como programador
que ellos van a estar aquí cuando ese usuario viene una segunda parte posterior--
más tarde, una hora más tarde, incluso un año más tarde, siempre y cuando él o ella no se borra
sus galletas, como veremos con el tiempo vemos.
Y ahora sólo tengo si una condición aquí.
Así que si la clave siguiente, llamado contador, está situada en el interior
de este super global-- este hash mesa, si Voluntad-- llamado período de sesiones,
a continuación, seguir adelante y tomar la valor de la reflexión session--
en esto como un carrito cart-- y almacenarlo
en una variable temporal llamada contador.
>> De lo contrario, si ese valor era contador no se establece en la llamada cesta de la compra,
sólo inicializar a 0.
Por último, aquí abajo, ir y volver a poner en los carros de la compra o de la sesión
el valor del contador 1.
Así que resulta que esta aquí-- especial contenedor
que, de nuevo, es uno de ellos asociado matrices, una matriz que usted puede indexar
en palabras en lugar de numbers-- persiste incluso después de que el usuario se va.
Una vez más, voy a ir de nuevo a la página ahora.
Ha sido un minuto más o menos.
Pero recuerda que yo tengo estado aquí 19 veces antes.
Este es mi 20mo visita.
>> Y por lo que este va a ser clave para la implementación de cualquier sitio web que recuerda
que está conectado, que se pone algo literal en su carrito de compras
para comprar o que tiene alguna número de mensajes en espera.
Cada vez que desee recordar la información,
veremos que PHP, como varios otros idiomas,
nos provee de esta ilusión de estado a pesar de que, como se verá en PSET 6,
como usted está haciendo peticiones HTTP desde el cliente al servidor, eso es todo.
Una vez que llegue de nuevo que respuesta, no hay nada más
regresando desde el servidor de forma predeterminada.
Pero vamos a ver cómo trabajar alrededor de eso.
>> Bueno, ahora, vamos a tratar de limpiar esto un poco.
Hemos visto unos pocos diferentes ejemplos allí.
Ah, y como un aparte, para los que están familiarizados o no familiar,
la razón de que la Ejemplo Frosh mensajes instantáneos se fue
de mirar realmente feo para slightly-- bien,
todavía ugly-- a ligeramente menos feo aunque todavía feo
es porque si miramos en el código fuente aquí,
resulta que tengo este en la parte superior del archivo.
>> Resulta que de arranque es uno de los muchos bibliotecas libremente disponibles por ahí
que no existe para los lenguajes de programación siempre, pero para CSS o JavaScript
o HTML o cualquier número de idiomas.
>> Y estas personas aquí-- originalmente salió
de Twitter-- sólo tienen un montón de estilos.
Es un archivo masivo aquí que alguien escribió,
o de alguien escribió, con el tiempo que especifica los colores y el formato
y otras cosas para que yo pueda tipo de pedir prestado su sintaxis
y no tener que averiguar cómo diseñar mi forma.
Esto también se minified de manera que una computadora puede
entenderlo pero no necesariamente un ser humano.
Así que eso es sólo por eso que el estilización no cambió.
>> Pero ahora vamos a hacer mejor en términos de diseño,
porque si nos quedamos abajo este camino demasiado largo,
nuestro código va a conseguir sucio y desordenado.
Así que vamos a centrarnos en estos ejemplos aquí.
La última por hoy.
>> Así que aquí es un super sencillo la versión 1.0 de la página web del CS50.
Sólo tiene enlaces a conferencias y programa de estudios,
y se está utilizando esa lista desordenada tag-- la etiqueta de UL que se utilizó la última vez.
Y si de hecho, si abrir View Page Source,
verás que esto es muy, muy sencillo de HTML.
Y de hecho, a pesar de que esto es un archivo PHP debajo de la capilla,
Todavía es sólo escupir solamente HTML, por ahora.
>> Así que si hago clic en conferencias, vemos que esto ocurra.
Y si hago clic en la semana cero, vemos esto.
Y si hago clic en Miércoles, vemos esto.
Y esto al parecer fue el PDF de las diapositivas de ese día.
Lo único que he hecho es enlace con un etiqueta de anclaje a esta URL aquí.
>> Así que esto es sólo para decir que este es un bonito versión simple de la página web del CS50.
Vamos a ver cómo se implementa.
Si entro en el directorio mvc0, vamos a ver un par de archivos.
Uno de ellos es un README, así que si algo de esto es demasiado rápido,
que sólo puede hurgar más relajado después.
Y fíjense en aquí es un archivo index.php.
Resulta que si tú mismo, el ser humano,
no especifique el nombre definitivo en una dirección URL, el servidor web por lo general
infiere algún nombre por defecto para usted.
Un punto índice algo generalmente es el valor predeterminado.
>> Así que por eso hace un momento cuando visité este URL aquí,
ningún nombre de archivo, no hay ningún archivo extensión, ningún período en la dirección URL.
Sólo sabía de alguna manera mágica buscar index.php.
Es sólo una convención.
Podría ser llamado cualquier cosa.
>> Así que si ahora me voy a index.php, verás
que, indeed-- vamos deshacerse de los comentarios
aquí porque no hay realmente nada interesante que it--
esto es sólo modificable HTML.
Así que eso es consistente, sin embargo, con mi reclamación
que se pueden mezclar HTML y PHP.
No hay real programación lógica aquí.
>> Y los otros archivos son bastante mucho tan poco interesante.
Es sólo una semana-codificado aquí para una semana m y una semana w,
para el lunes y el miércoles.
Y luego, si abro la semana cero, cuenta que es casi idéntica.
>> Y eso es una especie de conclusión clave.
Observe cómo esto es redundante.
Estos archivos apenas cambian, y sin embargo yo tirado uno de estos puestos de trabajo de copia / pasta
donde tomé una file-- presumiblemente en la semana que zero-- copiado
cuando una semana llegó, y ajustado algunos valores.
Probablemente deberíamos ser capaces de hacer mejor que esto.
>> Así que vamos a volver hasta mvc y entrar en una versión.
Y noto que tengo una algunos archivos, ya que lo que
era común a todos esos archivos sólo una momento ago-- si vuelvo a la versión 0,
vamos a ir de nuevo en el índice, y sólo postulate--
una vez que me deshago de la comments-- qué parte de esta página
es de suponer en cada uno de mis archivos?
Sólo tiene que llamar a cabo.
¿Qué se duplican líneas probablemente a través de todas estas páginas?
¿Sí?
>> ESTUDIANTE: [inaudible].
>> DAVID J. MALAN: del 1 al 9.
Sí, absolutamente.
1 a 9, excepto tal vez 8 cambia un poco porque CS50
se convierte en conferencias o semana cero o algo así.
Pero casi idéntico.
Así que todo esto es sólo tipo de copiado y pegado.
Y hay un par otras líneas se me ocurre
de que son probablemente idéntica a través de todos los archivos.
>> ESTUDIANTE: 12 y 13.
DAVID J. MALAN: Sí.
Claro, 12, 13, y 14, probablemente, sólo porque las cosas interesantes
que está sucediendo en las líneas 11 y 10, por lo que parece.
Así que echemos un vistazo a la versión 1, que trata de mejorar esto.
En la versión 1 de este ejemplo-- mvc vamos a explicar lo mvc medios en un moment--
si entro en índice, tipo de parece un poco confuso ahora.
No es tan simple como antes.
>> Pero una vez que comience a leer con cuidado, es
bastante sencillo lo que está haciendo.
Al parecer, la línea 1 y línea 8 han sustituido
todas las cosas que simplemente identified-- aunque sólo por si acaso,
Dejé las ULs allí por si acaso alguna días no tenían una lista de las cosas.
Y así lo requieran es algo así como la libra incluir en C. Copia y pastas
el contenido efectivamente aquí en este archivo.
>> Así que en header.php, como usted podría inferir de su nombre,
va a ser la cabecera de la página.
Es una especie de huérfano aquí.
Sólo tiene la parte superior a la misma, pero no hay más contenido a continuación.
>> Y si miro a pie de página por su parte, que era el otro archivo mentioned--
éste es mucho menos interesante, pero de nuevo, es común a todo.
Así que este es el pie de página.
Este es el encabezado.
Este es el archivo que es cambiar, así que por qué no
tratar de factorizar la comunalidad con estas dos líneas aquí?
>> Pero podemos limpiar esta un poco más lejos.
Voy a seguir adelante y abrir la versión dos, donde
ya veremos que no hay un nuevo archivo, helpers.php.
Vamos a ver lo que es eso en un momento.
Vamos al índice, como el punto de entrada como antes.
>> Y ahora noto que estoy requiriendo helpers.php, no la cabecera o pie de página.
Pero los ayudantes es algo así como helpers.c y helpers.h de PSET 2
o PSET 3 Hace mucho tiempo, cuando en realidad se hizo buscar y encontrar para que PSET,
y que tenía todo el código para la clasificación y la búsqueda en un archivo separado.
Eso es lo que está pasando aquí.
>> Y ahora la línea 3 se ve un poco diferente.
Y es sólo una línea.
Para hacer esto aún más claro, yo podría simplemente
Qué esto sea estilísticamente coherente con todo lo demás que hemos hecho.
Pero eso no es realmente cambiar la funcionalidad.
Es sólo una línea de código real.
>> Al parecer, hay una función en algún lugar llamado render de cabecera,
Y aquí es donde las cosas ser bastante potente.
Tenga en cuenta que en el interior de sus paréntesis es lo que otra pieza de sintaxis?
Es probable que sea un poco difícil de decir, pero notar there's-- voy a poner un poco de blanco
espacio.
Hay corchetes.
>> Y entre corchetes que vimos hace un poco en el contexto de matrices asociativas,
que son, de nuevo, al igual que las tablas hash.
Y si usted piensa ahora a C, la orden de argumentos en una función
tiene que ser siempre el mismo.
Hay que recordar lo que el ordenar x es--, y, z o z, y, x--
y usted tiene que proporcionar siempre los en el mismo orden o mirar hacia arriba
si se le ha olvidado.
>> Pero esto parece ser una forma inteligente pasando de un valor clave arbitraria
pares por lo que el título es el nombre de un argumento en este caso
y CS50 es su valor.
Y el hecho de que tengo estos corchetes
aquí significa que pude también pasar en algo
como una semana es 1 o 0 o 2 o 3.
Para ello hemos parametrizamos esta función de una manera tal
que puede tomar múltiples entradas, pero por ahora es sólo el uno.
>> Si ahora voy a helpers.php, observe lo que está haciendo.
Esto es un poco de nueva funcionalidad,
pero por ahora sólo tomar en la fe de que esto es
la sintaxis con la que definir una función en PHP.
Usted, literalmente, dice la función.
No se especifica un retorno escriba, y eso es consistente
con el detalle de la variable anterior donde usted realmente no escribe fuertemente.
>> Esto sólo especifica que, por defecto, esta
toma un asociativa matriz como un argumento.
¿Y sabes qué?
Si el usuario no pasa uno en, asumirá un valor por defecto.
>> Esta es una característica que C no tiene para nosotros, lo cual es bueno, porque ahora
datos, incluso si no le dan nada,
va a ser un matriz, pero uno vacío.
Y como un aparte, extracto apenas hace algo cobarde
donde toma todas las claves de este matriz asociativa, todas las cosas
se puede poner entre corchetes, y crea las variables de ellos
por lo que en última instancia, podemos tener acceso a ellos en footet.php y header.php.
Eso es un poco abstracto, así que permítanme señalar esto.
>> En index.php, noto que estoy que pasa en un par de valores clave del título
con un valor de CS50.
Si ahora miro helpers.php, notar que RenderHeader
se extrae que los datos que estoy pasando en, y luego requerir header.php.
Lo que he hecho es una especie de un pobre hombre de aplicación ahora de la siguiente.
>> Si abro header.php, Tenga en cuenta que yo ya no tengo duro
codificada la palabra CS50 en este archivo de cabecera.
He puesto este reconocidamente atrozmente función con nombre, HTML caracteres especiales,
en ese país.
Pero noto lo que he hecho.
Tengo HTML abierto.
Entonces tengo la cabeza abierta y el título abierto.
>> Y luego en el interior de del título abierto y cerrar etiquetas, tengo un poco de código PHP.
Y este es un bonito pero de sintaxis, que sólo significa echo fuera.
Significa literalmente esto-- eco de la following--
pero esto es más atractivo para escribir.
Echo a cabo el título que ha sido aprobada en.
>> Pero ¿qué te parece HTML Char especial se trata,
especialmente si usted tiene alguna experiencia previa en HTML?
¿Cuál podría ser caracteres peligroso para pasar a una página
donde se está generando dinámicamente la página web con un código como este?
Déjame ir a este archivo, versión dos, y ver si no puedo inducir esto.
>> Versión dos es esto.
Y cuenta todo está muy bien, trabajando bien.
Pero supongo que voy a index.php y He especificado que el título de mi página
no es CS50.
Es alerta guión soporte abierto hola mundo, comilla simple cierre,
paréntesis de cierre, punto y coma, soporte abierto, guión barra.
>> Guión, como veremos finalmente ver, es una etiqueta
que se puede utilizar con el uso de otro lenguaje de programación llamado
JavaScript dentro de una página web.
Y ahora cuenta de la lógica aquí.
He aquí una clave llamada título.
Aquí es su valor a largo loco ahora.
>> Pero si voy a los ayudantes página- o más bien, la página de cabecera,
Voy a llamar a esta función en ese título por primera vez.
Así que si ahora vuelvo a cargar esta página, ver esto, que parece ridículo,
pero es seguro.
Sólo se ve estúpido.
>> Pero supongamos que en lugar Me había olvidado de esto.
Y recuerda mis palabras, un número distinto de cero de que usted se olvide de hacer esto
y obtendrá algunos industriosos estudiante o amigo que sube
para que en la feria CS50 o anónimamente en la noche hurgando en su página web
y, esencialmente, la inyección de código sin el conocimiento de que en su sitio
de alguna manera.
>> Porque si yo simplemente escupir a título aquí y título
allí-- bien, si el título literalmente se parece a esto y PHP
como un lenguaje que puede escupir a cabo otro texto lenguas,
esto es, literalmente, va para reemplazar esta etiqueta con,
por supuesto, lo que he puesto en otro lugar.
>> Así que si yo ahora voy aquí y volver a cargar después deshacer los mecanismos de seguridad,
Ahora tengo hola mundo aquí.
Ahora eso no es todo tan grande de un acuerdo, pero se podría hacer algo
un poco más malicioso aquí, como si hubiera
otra tags-- como veremos, una vez que pasamos más tiempo en JavaScript-- como ubicación
punto href consigue, cita, fin de la cita, HTTP business.com, pero lo contrario de que
desde el otro día.
Y ahora usted puede inducir una web página para ir en realidad inmediatamente
a esta página web aquí.
>> Y en realidad, no quiero para incluso ir a business.com
porque yo no quiero saber lo que es eso.
Pero esto, también, se disparará código para ser inyectada en esta página.
Así que esto es sólo para decir que a pesar de que estamos introduciendo súper temprano en algunos
de estas estructuras más complejas, es todo hacia un fin de asegurarse
que el código no es explotable.
>> Así que ahora una tercera versión aquí.
Se está haciendo un poco más de lujo.
Realmente no me como-- la parte anal de mí
estaba un poco molesto por la hecho de que una función que había llamado
RenderHeader y RenderFooter que eran casi idénticos.
Así que se me ocurrió, ¿por qué no lo hacen Yo parametrizar estas funciones
en una sola llamada render, haga que tomar un segundo argumento
como el nombre de la plantilla, a la final a render-- ya sea encabezado o pie de página?
Y a continuación, opcionalmente, si quiero para pasar en algunos pares de valores clave
como lo hago por el título de la cabecera, pero no para el pie de página,
Yo podría hacer eso.
>> Y ahora si me voy en helpers.php, que es un poco más complejo.
Y voy a agito mis manos en el detalles, pero es sólo una función.
Así que eso es un paso hacia un mejor diseño.
>> Podemos tomar un paso más allá.
Si me voy a mi cuarto versión de este, cuenta ahora
que estoy haciendo algo aún más tipo de críptico.
Y sé que esto es un mucho para absorber a la vez,
pero estamos sólo un poco de la limpieza de las cosas.
Ahora me estoy poniendo mis ayudantes presentar en una carpeta llamada
includes-- sólo una arbitraria nombrar a donde quiero poner cosas
que quiero figurar y después el resto de este es el mismo.
>> Pero si miro ahora en gedit, aviso de que me he librado
de todos los otros archivos y tengo ellos movido, por ejemplo, en aquí.
Y luego en las plantillas, Tengo esto, también.
Y así, todo esto es ahora hacia un paso de utilizar un patrón de diseño mucho mejor.
Y estamos muy rápidamente va a alejarse
de funcionalidad por defecto de PHP, que empezamos aquí con,
donde se acaba de mezcléis PHP, y el código HTML, CSS y su,
y que acaba de escupir hacia fuera y usted va sobre su camino.
No va a ser muy fácil de mantener.
Al igual que en C, que empezamos a utilizar varios archivos y múltiples funciones
y cosas de factoring eso.
Vamos a hacer lo mismo aquí.
Y de hecho, en la quinta y última versión aquí, lo hice otra cosa.
Usted puede incluso utilizar punto punto, que, de nuevo, es sólo el directorio padre.
Para ser aún más conscientes de la seguridad, porque si miro a la escucha
aquí por quinta y última versión, previo aviso que tengo un directorio llamado aquí
público, y luego en el mismo nivel, por así decirlo,
Tengo incluye y plantillas y luego ese archivo de texto Léame.
>> Y la razón por la que he estructurado Cómo es esto-- y tantos web
anfitriones, especialmente los $ 5 los meses o los 10 dólares al mes,
si alguna vez has tenido uno de estos services-- lo que muchos de ellos lo hacen
es que sólo esperan que volcar todo de tus archivos en un directorio,
como ya hicimos con este primer ejemplo.
>> Pero tan pronto como se inicia la construcción más sitios sofisticados que sólo almacenan
datos que se preocupan por usted y archivos preocuparse, en realidad la organización de las cosas
correctamente y con más seguridad conciencia en la mente puede
empezamos a defender contra todos los amigos
que usted tiene ya sea en o fuera de esta clase que,
tan pronto como usted comienza a hacer programas usted mismo en la web,
van a empezar a recoger sobre usted y sobre ellos.
>> Y así vamos a ver en última instancia, en este diseño.
Esto es sólo una imagen que representa lo siguiente.
Vamos a poner todo de nuestra lógica de programación en uno o más archivos,
y vamos a empezar justo llamando a los controladores.
Es donde los cerebros de nuestros sitios web son en realidad.
A continuación, vamos a tienen puntos de vista y opiniones
son tan simple como independiente files-- llamados plantillas, a menudo.
Sólo tienen la estética de mi página,
lo que quiero de la página para buscar como-- los colores y el diseño
y las posiciones de todas las variables.
>> Y luego más interesante que con el tiempo vamos a llegar a
es el modelo, que va a ser justo la palabra nos palmada en otras tecnologías
que traemos en el imagen, al igual que las bases de datos reales,
por lo que cuando se quiere para guardar la información,
usted no acaba de enviar un correo electrónico a su supervisor oa usted mismo,
en realidad se almacena en una base de datos utilizando otro lenguaje conocido como SQL.
Y así vamos a dejar aquí hoy y recoger con este miércoles
bases de datos e introducir a continuación.
>> [REPRODUCCIÓN DE MÚSICA]