[Powered by Google Translate] [Semana 8] [David J Malan] [Harvard University] [Esta é CS50.] [CS50.TV] Benvido de volta. Este é CS50, e este é o inicio da semana 8. Un par de oportunidades, esta semana, entre eles esa conversa aquí, en que algúns alimentos será servido. Para máis detalles confía os slides que están en liña. E tamén outro evento esta semana polo noso propio Thomas Carriero. El é un dos compañeiros CS50 do ex xefe de ensino que está agora no Dropbox, e é a cara que se entusiasmem por US co que vostede sabe o que, por iso, se quere máis que a cabeza da súa conversa esta tarde para Dropbox e moito máis. CS50 xantar é este venres. Facer unirse a nós, se vostede é capaz, 01:15, como de costume, no lume e xeo. E agora nós mergullo en algo chamado de Seminarios. Os nosos CS50 Seminarios, Recall, son esas clases opcionais liderados polos compañeiros de ensino e asistentes do curso e amigos do curso, persoas dun grupo do campus chamado ABCD, que é un grupo de tecnófilos no campus, así como un grupo chamado HCS, a Harvard Computer Society, alumnos de graduación que están similarmente interesados ​​en computación. A programación deste ano inclúe seminarios de seminarios sobre Android e IOS e JavaScript e PHP, Unix, Vin, e máis, para entender que estes seminarios están chegando. Se desexa RSVP para calquera deles ir a URL alí. Nós, entón, publicaremos na web do curso os tempos e lugares, xa que son finalizados. Pero sei que paga a pena alí de 5 anos de seminarios anteriores dispoñíbeis en liña, moitos dos cales aínda están moi actual en termos de tecnoloxías pode quero xogar con para os seus proxectos finais, así que a cabeza alí para algúns vídeos dispoñibles da mesma. CSS, aqueles de vostedes que está familiarizado coa CSS xa, o que é iso en poucas palabras? O que é CSS? É CSS, eo que significa isto? O que iso fai para nós, CSS? Todo ben, imos quentar con un máis doado, HTML, linguaxe de marcado de hipertexto. O que iso fai para nós? Calquera persoa en todo? Está quedando realmente difícil facer estas preguntas. HTML, linguaxe de marcado de hipertexto. Si? Non? [Resposta do alumno inaudível] Ok, bo, que nos permite marcar texto para amosar nun navegador web. Non é unha linguaxe de programación. É de feito unha linguaxe de marcado, o que significa que instrúe o navegador como amosar información, de xeito que o máis simple encarnación deste, como vimos é algo super simples, como negritar, aberto soporte b soporte pechado, di facer este texto en negriña, e que en realidade é só unha das moitas formas no que podemos facer, e, de feito, estes días unha visión mellor para estilizar a súa páxina web, facendo as cousas en negriña e cursiva e centrado e xustificaba e semellantes, non é feito por medio de etiquetas HTML só senón cunha técnica chamada CSS, follas de estilo en cascada. Esta é unha linguaxe en si. Ela tamén non é unha linguaxe de programación, pero- todos, este é o Dan, que mantén unirse a nós hoxe. Algunhas dificultades técnicas. Non é un problema. CSS nos permite estilizar unha páxina definindo o que son chamados de propiedades, así que imos dar un ollo niso por medio de exemplos básicos. Deixe-me ir ao aparello hoxe. Eu teño a fonte de 8 directorio luns en aquí, e eu estou indo para ir en un directorio chamado CSS, onde temos unha morea Arquivos esperando por nós aquí, e neste cartafol que temos, por exemplo search0.html, a última vez. Agora, recordar con search0 deixamos esta nota por tipo de aplicación do Google ou realmente só o fin da fronte para el unha semana, e entender que tivemos algunhas novas etiquetas alí. Tivemos h1 a un título grande, en negra, forma, o que nos permitiu realmente ten un formulario HTML entrada do usuario. Acción, cal era o significado dun atributo action na etiqueta de forma HTML? Cal foi o significado desta acción,? Eu só vou facer iso hoxe. Acción é o destino onde o formulario vai ser sometido. O feito de que a acción que se = "google.com / search" significa que cando o usuario fai clic no botón de envío ou equivalente calquera que sexa a forma que campos cubertos van ser enviados para o noso servidor non ou o noso aparello, senón para que URL específica en Google. E o método que vai empregar é chamado de obter, e, polo de agora, só unha técnica para pasar información xunto a un servidor web por medio da URL, por iso imos dar unha rápida ollada para atrás en como funciona isto. Teña en conta que hai unha entrada cuxo nome é q cuxo tipo é texto e, a continuación, unha segunda entrada do tipo presentar cuxo valor é CS50 Investigación, e de feito, se abrirmos este ficheiro aquí, search0.html, é unha forma super sinxelo, e se eu buscar algo como ciencia da computación e escriba Intro ou faga clic en Buscar CS50 entender que o que pasa é ademais de obter en Google Eu especificamente rematou no URL na parte superior, google.com / search? q = ordenador + ciencia e ciencia da computación é, obviamente, o que eu escriba dentro O + significa só que é onde un carácter de espazo foi, e é feito polo navegador só para asegurarse de que non hai confusión e espazo en branco na URL real. E, a continuación, q, por suposto, é o nome do parámetro. Nós non vimos coma nós, o programador, realmente pode acceder q aínda. Podemos supoñer que Google sabe o que facer con iso aquí, pero nós imos chegar alí no debido tempo hoxe. Pero deixe-me dar un ollo en vez de search1.html, que se parece un pouco diferente, porque eu decidín que este formulario aquí foi un pouco manco. Quero dicir, é na esquina superior esquerda. Non hai realmente ningunha estética a el, e así que eu quero para estilizar este un pouco máis como Google, cuxa páxina de inicio, recall, aínda que non pode visita-lo que, moitas veces, parece que iso hoxe en Halloween. Se en vez abrir unha versión deste arquivo, 1.html investigación, eu centrado lo. , Menos mal feo, pero polo menos agora eu comece a controlar a estética desta páxina non só a reserva de feito. Imos dar un ollo a unha procura, e non hai realmente só unha diferenza aquí, que pode ir para fóra para vostede, ou quizais non, pero o que é a liña de un ou tramo de diferencia? Hai este atributo de estilo, entón dedúcese que en HTML a maioría dos elementos, a maioría das etiquetas pode ter un atributo estilo sobre eles, e dentro dese atributo de estilo é unha cadea, e que cadea e CSS. Podes poñer follas de estilo en cascada alí especificando-lo como un nome de propiedade seguida de dous puntos, seguido por un valor. Esta é unha especie de decisión de proxecto infeliz, hai algúns anos que CSS é unha linguaxe en si mesma, pero sintaticamente é moi diferente de HTML. Neste caso, vemos que dentro do meu sitio, que é escrito en HTML, Eu teño CSS dentro desas citas, e do Convenio para CSS é que ten o que se chama unha propiedade seguido, novamente, dous puntos, seguido polo valor da propiedade, por iso non hai signo igual. Non hai citas adicional. É só iso colonos par valor separado clave, e liña de texto fai exactamente o que di. El aliñar o texto no corpo da páxina, que é realmente o valor da páxina, no centro. Ok, entón o resultado final, para quedar claro, é esta. Non todos os máis sexy iso, pero polo menos é centrado e un pouco máis como Google real. Pero e se eu, no canto abrir versión 2 do presente e apuntar aquí unha marca totalmente nova? Agora na cabeza da miña páxina, que anteriormente só tiña que etiqueta en todos os exemplos anteriores? El só tiña ese, o título. Un momento detrás da marca de cabeza ollou coma este. Agora, en vez ten unha marca de estilo dentro dela, e iso tamén, eu pido desculpas, sintaticamente parece moi distinto do HTML, pero se acostuma, que dentro da marca de estilo Agora podo fatorar o que era un momento atrás un atributo, o atributo de estilo, e podo poñelas na parte superior da miña páxina. Por que? Ben, este é un paso para limpar as cousas, así como en escribir código C nós, ás veces, escribir funcións para fatorar funcionalidade común. É só un pouco máis limpo para comezar a fatoração de cousas como a estética para unha localización central, en vez de ter todo intercalan en todo o seu HTML. Isto tamén fai o que di, aínda que non haxa un pouco de novo sintaxe. Iso aquí é un selector, e do corpo significa só seleccionar o elemento do corpo e aplicar as seguintes propiedades para el. Ben, a propiedade é exactamente o mesmo. Para unha boa medida que eu engade un punto e coma ao final, que tende a ser de convencións, e envolto esa propiedade toda entre chaves, porque eu podería realmente ter cousas distintas aquí. Eu podería realmente dicir algo así como color: blue; Agora iso non vai ser un paso para nada todo o que máis fermosa, pero se eu volver agora a versión 2 que eu polo menos xa fixo o corpo do meu texto páxina toda azul. O botón permanece o mesmo porque é un insumo. Non é texto normal. Pero todo o que é texto, como CS50 Busca encima, é en azul feito. Unha vez máis, todo o que fixemos agora é eliminar a marca do corpo, previo aviso, o atributo de estilo, e nós temos consignado iso aquí. Isto non é unha gran mellora, pero se tomamos un paso adiante entender o que podemos facer nesta terceira versión aquí. En search3.html páxina web é case idéntico excepto para o novo tag agora? Enlace, entón esta non é moi apropiadamente chamado porque non está ligando, no sentido dun hiperenlace previsión. En vez diso, vostede é medio de facer o equivalente a # include C cal a marca de enlace con un atributo href é un atributo rel di dalle e copia e pega o contido de un arquivo chamado search3.css aquí, esencialmente. El non chega a facelo, pero ese é o espírito da cousa. El di que vai abrir o ficheiro, search3.css, e trata-lo como se o usuario tivese ingresaran iso aquí na cabeza da páxina así como eu fixen no exemplo anterior. Search3.css, mentres, é moi sinxelo. É realmente só contén exactamente o que foi un momento atrás na marca de estilo, pero eu teño consignado aquí fóra no seu propio arquivo. Aínda que non pase moito tempo a todos HTML ou programación web só intuitivamente cal é a motivación, quizais, por fatoração este pequeno tramo ata de CSS no seu propio arquivo e incluíndo o con esta etiqueta enlace aquí? [Resposta do alumno inaudível] Ok, é máis fácil de ler no sentido de que ten o seu CSS nun arquivo CSS. Ten o seu código HTML no seu arquivo HTML, por iso é máis lexible nese sentido. O que máis pode ser atractivo? Si [Resposta do alumno inaudível] Si, para que poida inclui-lo moitas veces, entón agora nós estamos facendo estes exemplos básicos con arquivos individuais, pero imos supor que está realmente facendo un sitio de verdade, como vai a pset 7 ou o seu proxecto final, quizais, e quere ter varias páxinas web, como é certamente común en á rede mundial real Xeral, e que sería unha especie de coxo ter que copiar e pegar a mesma cor azul e mesmo texto aliñado centro en cada unha desas páxinas. En vez diso, fai máis sentido para fatorar, así como temos feito en C co arquivo h., poñelas nun lugar central, neste search3.css caso, e entón permitir que calquera arquivo no seu sitio web para realmente incluír este ficheiro a través de esa marca aquí na liña 16. Como é tipicamente o caso, que comezou coa versión 0, que tipo de obras pero non é necesariamente o mellor, e con cada etapa, busca 1, busca 2, e agora busca 3 tivemos estes pasos de bebé para os proxectos que son un pouco máis limpo e máis preparatorio para as páxinas máis complexas que podemos facer na estrada. Deixe-me abrir un último exemplo aquí só para amosar páxina aínda máis estilizado, pero primeiro imos ollar para o código HTML. Este é search4.html, e notar que estruturalmente é case o mesmo excepto para a introdución dunha nova marca, DIV. Div é unha marca que presenta unha división da páxina. Podes pensar niso como un rectángulo invisible. É unha especie de crea unha franxa de zona na web que pode estilizar todos dunha vez. O que eu teño feito aquí é a seguinte. Dentro do meu corpo tag, que foi alí todo o tempo, Eu estou dicindo crear unha división da páxina aquí a través de liñas de 45 a 47, o que significa, esencialmente, dar-me un rectángulo invisible na parte superior da páxina. Entón me dea un segundo rectángulo, aínda invisible, a continuación diso, e identifica-lo polo contido de nome, e logo, por último, dáme unha terceira división da páxina na parte inferior chamado ID. Imos ver por que eu fixen iso en só un momento, pero conceptualmente Teño unha división de cabeceira. Eu teño unha división de contidos, e eu teño unha división rodapé da páxina aínda que estes sexan só na reserva. O usuario non vai ver tres rectángulos, pero unha especie de estructuralmente hai detrás das escenas son realmente presente. Agora, quen se importa? Por que realmente facer isto? Todo o máis na páxina é o mesmo que xa vimos antes. Aquí está a miña forma. Aquí está a miña entrada, a miña entrada, unha quebra de liña e así por diante. Aquí está a imaxe, no entanto, entón imos ver de onde veu iso en só un momento. Aquí está o pé, que é novo, só porque eu quería introducir contido un pouco máis aquí. Se rolar ata entender que ID desta div é cabeceira. O ID deste div é o contido, eo ID dun presente é de rodapé. E, como o nome suxire, cando ten un atributo ID HTML, por definición, debe identificarse un dos elementos, un dos tags na súa páxina. O fardo é totalmente en que se lembre que ten un ID cabeceira xa. Tes un rodapé. Tes un ID de contido xa. O ordenador non vai descubrir o que un ID dispoñible é para ti, así pode accidentalmente dar 2 tags un ID de cabeceira, e que sería só mal. Ten que ter en conta o que creou, pero unha vez que tes feito isto observe o que podemos facer aquí. Agora podo especificar na miña marca de estilo na parte superior ou equivalentemente no meu arquivo CSS, se eu aínda estaba a usar esta versión, Eu podo dicir # header, eo que iso significa que, independentemente tag neste sitio ten unha identificación de cabeceira e #, só por convención humana, representa ID. O sinal de sostido ou libra signo representa ID. Cabeceira é o nome que eu dei. Isto significa aplicar esta propiedade CSS para calquera tag nesta páxina ten un ID de cabeceira. Mesmo aquí. Aplicar esta propiedade, que pasa a ser o mesmo, a calquera elemento cuxo ID é o contido, e despois aquí notar que eu teño un pouco máis sofisticado, con rodapé. Calquera elemento cuxo ID e rodapé, de que non pode haber só un, por definición, vai adiante e faga o seu tamaño de fonte menor, súa ousada peso da fonte, a súa marxe de 20 píxeles. O que significa isto? É só unha marxe na parte superior, parte inferior, e á esquerda e á dereita. Isto significa dar-me unha marxe de 20 píxeles invisible en torno a el só para empuxar todo máis lonxe del un pouco, como se pode facer en Word, Microsoft Word ou Pages ou similar. E entón o texto aliñar centro. Imos ver o resultado final, e despois imos volver ata o tramo de un remanescente de CSS alí. Esta é a versión 4, o noso pasado para os exemplos de investigación, e é máis sexy, moi, moi. Agora, con xustiza, eu só Googled "Google xerador de logotipo da fonte." E o que me permitiu crear un GIF, un formato de imaxe, que parece que non. En realidade, pode facelo tamén. Temos "Google xerador de logotipo fontes." Imos ver se podemos facelo. Ok, creo que este é o sitio que eu usei. Podemos dicir Ec 10, por exemplo, e facerlles a súa propia. Podes xogar con iso o día enteiro e, a continuación, prema co botón dereito sobre el e despois baixar o GIF real, que é todo o que eu fixen. E, de feito, é por iso que no meu HTML, lembre, aquí Eu tiña unha etiqueta de imaxe, o que vimos brevemente a semana pasada cuxa fonte é logo.gif. E o que unha vez foi a motivación para ter ese atributo alt, este atributo alternativa? Si [Resposta do alumno inaudível] Bo, para dúas razóns moi, se o navegador non pode puxar arriba a imaxe porque ten unha conexión de rede lenta ou a imaxe está danada ou algo así, polo menos, o ser humano pode ver "CS50 busca" e, a continuación, tamén por razóns de accesibilidade. Se vostede ten un usuario que é cego e está a usar un lector de pantalla e, polo tanto, obviamente, non pode ver as imaxes poden polo menos escoitar texto se o seu ordenador fala a eles. En xeral, esta é a mellor práctica, cando se trata da accesibilidade das páxinas para que os usuarios, mesmo nesa situación pode escoitar ou ver, por así dicir, que é o que está na súa páxina. Hai outra cousa que eu fixen aquí que é un pouco interesante, e imos ver máis sobre isto en conxunto de problemas 7 a través dun dos curtas liderados por un dos compañeiros de ensino. Pero # contidos refírese a etiqueta cuxo ID é o contido, pero despois hai un espazo en branco, e entón hai a entrada de palabra. Ben, o que é interesante sobre CSS é que pode refírense a marcas nunha especie de páxina xerarquicamente, e que ese tramo de vía CSS é atopar a etiqueta cuxo ID é o contido, e despois aplicar as seguintes propiedades para todas as marcas de entrada que son descendentes de contidos, é dicir, que son recuadas no interior do mesmo. Retirada, de novo, é só importante para o equipo, e non ao humano, pero por convención que guión cousas como nós ir máis fondo nunha páxina, así, isto significa aplicar unha marxe de 5 píxeles a calquera elemento de entrada que está en algún lugar dentro ou aninhado dentro  o elemento cuxo ID é o contido. Quen é que iso se aplica? Ben, non hai realmente só esas dúas caras aquí. Teña en conta que dentro da forma hai dúas entradas, como ten habido para todos estes exemplos. Pero aviso que estas dúas entradas ocorrer de ser aniñados dentro, aínda que un pouco profundamente, un par de capas de retirada, dentro da etiqueta cuxo ID é o contido. O que significa isto? Ou tamén para o navegador aquí podes ver sempre así lixeiramente- deixe-me aproximarse que hai un pouco de recheo entre o botón e entre o campo de texto. Deixe-me temporalmente desactivar isto. Deixe-me ir para o meu CSS, e deixe-me ir adiante e só cambiar esa marxe de 5 píxeles para 0 píxeles. Deixe-me ir á fronte e, a continuación, gardar o ficheiro, volva para o motor de procura e recargar, e ve no medio da páxina. Todo quedou comprimido xuntos, e cando chicoteado este exemplo Eu penso que parecía parvo co campo de texto e, a continuación, o botón inmediatamente debaixo dela. Eu quería almofada-lo un pouco, entón eu presentei marxes. O que non imos facer é ir na aula a través da varias decenas Propiedades CSS que existen porque, de novo, hai cousas como o tamaño da fonte, peso da fonte, marxe, texto aliñar, e unha ducia de outros poucos, e imos encamiñar-lo no conxunto de problemas 7 a varios tutoriais online e as referencias que lle permiten escoller esas cousas. Pero o que é realmente importante ao final do día é entender como estas cousas son aplicadas. De novo, se temos a marca de estilo dentro da cal poden ir os seletores, o tipo de identificadores que especifican para quen queira aplicar esas propiedades, e despois se pon as propiedades como par valor-chave separados por dous puntos e terminou cun punto e coma, ou pode copiar todos os que e poñelas nun arquivo CSS separado en si mesmo. Todo ben, todas as preguntas sobre os conceptos ou a gran figura da CSS? Vai ver de novo máis do mesmo en pset 7, pero imos mantelo xeralmente moi sinxelo. Non? Todo ben. É hora de unha linguaxe de programación real, e imos volver un pouco de CSS na forma dun exemplo. PHP é realmente unha linguaxe marabillosas accesibles na medida en que é case equivalente ao sintaticamente C. Noutras palabras, se sabe C, vostede sabe o PHP maior parte, polo menos sintaticamente, a pesar de existiren algunhas novas funcionalidades e algúns novos conceptos que imos ter de ollar. Pero para a maior parte, agora que a transición de C para PHP a maior parte do novo material é realmente a gran figura, como usa unha linguaxe de programa na web en vez de na liña de comandos ou nun ventá piscando como temos benvida a facer ata agora. Para referencia, especialmente con pset 7 eo proxecto final en diante, non aproveitar esa URL aquí se desexa ler sobre as formalidades de PHP. É realmente como un libro en liña de balde de forma eficaz, e tamén vai descubrir que o que é realmente agradable sobre PHP é que hai centos de funcións que veñen con el, mentres que en C non necesariamente teñen acceso a máis funcións que estaban na biblioteca de matemáticas, a biblioteca CS50. En PHP e unha morea de linguas modernas, Python e Ruby entre eles, ten acceso a tantas máis funcións, o que significa que comeza a escribir moito menos código, pois pode estar sobre os ombreiros de outras persoas que xa teña escrito algunhas cousas para ti. Imos dar un rápido paseo da sintaxe do PHP e logo escribir algúns exemplos. O que é legal sobre o PHP en primeiro lugar é que non hai función principal. Se queres escribir un programa en PHP que acaba de comezar a escribir código, e non ten que se preocupar de inicio. Non hai int. Non hai retorno. Non hai argv, argc o que é necesario cando escribe o programa. En vez diso pode simplemente comezar a escribir código, e iso é, en parte, porque o PHP é o que se chama unha linguaxe interpretada. C foi compilado, e foi compilado no sentido de que comeza con código fonte, executa-lo través Clang, que é un compilador, e, finalmente, tras un certo número de pasos que obter o código obxecto, 0s e 1s. PHP e Python e Ruby e Pearl e outros diferentes tipos de linguas en que non recompila-los. Non é preciso ir a partir do código fonte para 0s e 1s. Basta con executar o código fonte, e corre o código fonte escribindo nun ficheiro de texto normal, que remata en. php, neste caso, en vez de. c, e que o programa fai no seu ordenador é literalmente interpreta o seu código liña por liña por liña. Noutras palabras, no canto de escribir un programa e executar o programa directamente ti, en vez de escribir un programa con un arquivo con extensión. php. Entón executar un programa real chamado php.exe, se está en Windows, ou só PHP, se está en Mac OS ou Linux, e proporcionar como entrada para o programa PHP seu propio código fonte, eo seu propósito na vida é ler o seu cume código para abaixo, de esquerda a dereita, e facer o que dixo a el facer. Imos ver o que iso vai significar sintaticamente. No PHP temos condicións. Este slide é idéntico ao que viu a semana 1 porque sintaticamente condicións, IFS e else IFS e else en PHP exactamente así. Cando se trata de expresións booleanas que van exactamente así. Cando se trata de anding cousas xuntos como boleanos que vai exactamente así. Cambia a mesma aparencia, e terá a vantaxe en PHP que os interruptores en C só podería cambiar nun char ou int. Vostede non pode conectar un valor de cadea. No PHP pode realmente ter unha expresión que é unha variable cuxo contido é unha cadea, e pode realmente facer comparación de cadea en forma real intuitivo, Non comparación punteiro, a fin de decidir se a facer caso i ou j ou outra cousa. Imos ver o que potencialmente antes de tempo. Loops tamén marabillosas son os mesmos. Para loops ter unha inicialización, unha condición, e un número de actualizacións. Mentres lazos tamén existen en PHP. Facer mentres lazos tamén existen en PHP, e matrices existe no PHP, pero é aquí onde a sintaxe comeza a estar un pouco diferente, pero os conceptos son os mesmos, e os conceptos son realmente a mesma como eran en 0 Semana co scratch. Primeiro e máis importante é o sinal $. Esta foi unha decisión de proxecto en PHP que calquera variable en PHP por deseño comeza co signo $. Non hai máis X, Y, Z. Agora $ X, Y $, $ Z só porque. É algo para manter presente, e agora no lado dereito este é semellante a unha matriz, pero estamos usando corchetes aquí. En PHP e JavaScript, como vai finalmente ver declarar unha matriz que fai colchete aberto e pechado colchete, e entón tes unha lista separada por comas de valores, se ints ou cordas ou caracteres que quere, dentro do que a expresión de alí. Agora, como fixemos algo como isto en C? Cal foi a sintaxe para estaticamente declarar unha matriz de números coñecidos? Foi chaves, diferenza tan pequena aquí, pero en ambos os PHP e, finalmente, el só usa Javascript corchetes, entón realmente O único detalle interesante aquí é o sinal $ para o nome da variable e tamén os corchetes, e hai unha cousa curiosa que foi omitido, así como sobre o lado esquerdo do sinal de =. O que falta que estamos esixindo hai semanas? Si [Resposta do alumno inaudível] O tamaño, polo que non hai mención ao tamaño da matriz. Francamente, non hai ningunha mención de corchetes no lado esquerdo do signo = eo que máis falta na liña? Si >> [Resposta do alumno inaudível] O tipo, entón o que é interesante, en especial sobre o PHP é que non é fortemente tipado como C é, e que está fortemente ingresaran no sentido de que debe dicir char, ten que dicir int, debe dicir float. Sempre que sexa unha variable que ten que dicir Clang que o seu tipo é. PHP é un pouco máis preguiceiro. É vagamente ingresaran no sentido de que pode ter coches alegóricos e chars e cordas e ints e así por diante, pero a propia linguaxe realmente non lle importa o que pon dentro dunha variable. Non ten que saber con antelación o tipo de datos Vai nunha variable. É enteiramente ata ti, entón iso é bo en que non ten que se preocupar tanto cos datos escribindo e se preocupe que os seus argumentos son e así por diante. Isto tamén significa que, eventualmente, funcións PHP vai ser capaz de retornar ou un int do tempo e, se cadra, de cando en vez eles van voltar un bool, un falso boolean, por exemplo, para indicar que algo deu errado. Iso nos dá algúns upsides, pero tamén nos fará tipo de proxecto por un pouco máis preguiceiro cando se trata de dixitación de datos. O que máis hai para manter presente aquí? Variables ollar bastante como este, polo tanto $ s = "Ola, mundo". Isto é, se cadra, detectada a partir do exemplo anterior, e nós temos un outro tipo de lazo. Este nós imos realmente ver de cando en vez, xa que é moi útil, unha construción foreach. Neste caso, o loop foreach leva dentro parénteses súas tres palabras normalmente, $ Algo primeiro, que é o que matriz quere iterar sobre os membros, entón, literalmente, a palabra clave como, e entón, finalmente, outro nome de variable que comeza a escoller. Pode ser foo, bar, ou elemento, e que esta construción fai é a matriz $ contén 10 elementos cada iteração desta matriz, desculpe, cada iteração deste lazo o elemento variable chamada vai ser actualizado para ser o primeiro elemento na matriz, a continuación, o segundo elemento da matriz, a continuación, o terceiro elemento da matriz, obviando así a necesidade para facer a notación de corchetes lixeiramente irritante cadrado e $ I, a fin de índice nunha matriz. PHP fai todo este traballo para ti e en cada iteração só lle entrega o próximo elemento da matriz sen ter que saber ou se preocupan co seu lugar de índice numérico. E entón, finalmente, polo momento, hai outra característica do PHP que vai ser moi útil, especialmente cando comezamos a programación na web, e que é coñecido como unha matriz asociativa. As matrices que sabemos ata agora como 20 segundos atrás e para as últimas 8 semanas son numéricamente indexadas matrices, tipo de matrices tradicionais, onde os índices son ints, 0, 1, 2, todo o camiño cara arriba. As matrices de asociación son moito máis poderosos. Eles permiten que teña claves arbitrarias, índices arbitrarios e valores arbitrarios. Considerando que, nunha matriz tradicional é 0, 1, 2, nunha matriz asociativa que pode ter un índice ou unha chave de foo cuxo valor é bar. Pode entón ter outra clave cuxo nome é Baz e cuxo valor é qux. Unha vez máis, estúpidas informática xenéricos nomes de variables aquí, pero o punto é que esa matriz non ten soporte 0 ou soporte 1. É vez vai ter soporte foo e soporte de Baz. Este é moito máis versátil que nós imos ser capaces de asociar palabras con outras palabras, as chaves con valores completamente arbitrariamente, e nós imos ser capaces de obter eses valores de retorno en tempo constante pois debaixo da capa que unha matriz asociativa realmente esta é unha táboa hash. Lembre que unha táboa hash permite que poña en algunha entrada como poñer a palabra David se quere inserir David nalgún tipo de dicionario, e despois voltar un valor normalmente. No caso de Speller, verdadeiro ou falso. David ou calquera palabra que está ou non está no dicionario. Unha matriz asociativa é realmente só unha táboa hash, pero é unha encarnación máis agradable do mesmo. Como veremos, iso vai permitir facer algunhas cousas moi, moi facilmente. Imos dar un ollo a algunhas básica do PHP exemplos para ver o que podemos facer con esta linguaxe. Deixe-me ir adiante e abrir-se no noso directorio de orixe hoxe un arquivo chamado hello1.php. Este ficheiro é un comentario do que é o código real, entón deixe-me realmente eliminar todos os comentarios a partir do arquivo e presentar-lle, quizais, o máis sinxelo programa PHP aquí. 5 liñas, e algúns dos que son espazos en branco, para notar algunhas diferenzas clave aquí. O ficheiro é chamado hello1.php. A primeira liña, pero é , significa que é todo para o meu código PHP. Imos ver como executar tanto. Eu vou volver para a miña xanela de terminal aquí. Eu estou indo a ir para o meu directorio PHP. Teña en conta que temos unha morea de arquivos, o primeiro dos cales é ola.php. Deixe-me ir adiante e executar este hello1.php, entrar. Permiso denegado. Okay. Como temos fixado cousas como esta no pasado? ¿Que é iso? >> [Resposta do alumno inaudível] Necesitamos ler e escribir, pero deixe-me facer ls-l. Teña en conta que esta saída un tanto enigmático polo cal hello1 parece ser lidos e escritos polo me pero lexible por todos. Acontece que este realmente non é un paso na dirección certa. A diferenza, unha vez máis, cunha linguaxe interpretada é que non executar o programa directamente. Vostede vez executado un intérprete e entrega-lo o código que escribiu para que poida interpretala lo liña por liña. Neste caso, o intérprete ou programa que eu realmente quero correr chámase literalmente PHP. En algún lugar neste disco duro do aparello hai un programa alguén escribiu chamado PHP, ou en Windows php.exe. O que eu vou facer aquí é que eu vou rodar o PHP pero dá-lo como un argumento de liña de comandos do código que escribín, e entón eu vou reducir e presione enter. Córrese o meu programa para min, de arriba abaixo, de esquerda a dereita. Deixe-me ir á fronte e abrir unha pequena variación desta. O aviso hello2.php que isto tamén é principalmente comentarios, entón deixe-me librar-se deles como unha distracción, eo que é claramente diferente agora sobre este ficheiro? Hai esa nova liña, un tanto enigmática na parte superior. Na liña 1 e #! / Bin / php. Ben é unha convención sobre Linux e Mac OS para binarios, así / bin significa que esta é unha carpeta que contén unha chea de binarios que está programado, un dos cales é o PHP. O #! é alcumado shebang, que é a forma máis rápida de dicir isto, eo que iso significa é que cando executar este programa agora hai unha información na parte superior do arquivo que di ao computador o intérprete de usar. Queda un pouco aburrido se tivese que dicir aos seus usuarios e os seus clientes "Ei, escribir este programa chamado hello1.php". Todo o que tes que facer é para sempre executar o PHP e, a continuación, o nome do programa. Francamente, sería só máis agradable para realizar hello1.php, e, de feito, podemos, se faga o seguinte. Deixe-me ir adiante e facer ls-l, e aviso en hello2 aínda é só ler escribir e en seguida, ler ler, por iso aínda non podo facer iso, hello2.php. Pero introduciu esta sempre así momentaneamente última vez, o mando chmod. Se eu fai un chmod + x, o que significa que todos os executabilidade máis, e despois hello2.php e despois facer ls-l novo entender o que cambiou. Un, Linux está me amosando o nome do ficheiro en verde para transmitir a idea de que é executable, pero, máis importante aínda, no lado da man esquerda entender que o pouco que representa X para executable xa foi definido. O que isto significa é agora podo correr ./hello2.php como de costume, presione enter, e por mor da shebang na parte superior do arquivo iso é unha información, de novo, a Linux que di usar este intérprete para executar este ficheiro. Non se preocupe en facer o usuario a escribir realmente iso. E o que é legal é agora que é medio irrelevante para os meus clientes ou meus amigos o idioma que eu escribín este programa, para que eu poida ir adiante con mv e renomear esa cousa de hello2, por exemplo. E agora eu fai ./hello2 e zoom out meu programa segue a funcionar. Estas extensións de arquivo son unha convención humana que é necesario para algo así como Clang e facer que mirar para eles. Pero para PHP, eu podería chamar iso de nada extensión de arquivo que quero. Eu podería enganar o mundo a pensar que eu son realmente bo en Ruby, e eu podería escribir hello2.rb e executa isto, e listo, agora eu teño a versión Ruby, que é unha mentira completa. Pero as extensións de arquivo son sen sentido Se o ficheiro é executable e ten esa información especial no principio do ficheiro. Agora, como un aparte, deixe-me amosar-lle rapidamente a versión 3, que é unha especie de truco útil saber. En hello3 eu fixen algo un pouco mal que eu vou actualizar o código fonte en liña. Na versión 3 verifícase que na maioría dos ordenadores Linux hai un programa chamado Estructural para o medio ambiente, eo que podes facer aquí é se non ten idea de onde o PHP instalar na unidade de disco duro, porque de feito pode variar con base no ordenador que alguén está a usar, Estructural di só executa Estructural, que é na maioría dos sistemas, e descubrir onde o PHP é. Só un truco común para que non ten que se preocupar en atopar para fóra onde un programa. Pero se importa para descubrir onde un programa e non ter se importado ata agora pode utilizar o comando que. Deixe-me afastar e tipo que php, e entender que me di que é, en realidade, en usr / bin / php. É unha especie de mentira. Tamén no lixo. É só me amosando o primeiro hit. Se xa se preguntas onde é Clang, que Clang, que está en usr / bin / bumbum, que facer, usr / bin / facer, e iso significa que todo ese tempo podería ter sido escribindo usr / bin / clang entrar para realizar Clang, pero é o tipo de tedioso para facelo, entón algunhas carpetas como usr / bin e bin son consideradas padróns de xeito que o ordenador sabe mirar para eles para ti. Calquera dúbida sobre como escribir un super, super sinxelo programa World Ola en PHP e logo executa-lo? Porque agora nós imos comezar a introducir a sintaxe máis atractivo. Todo ben, aquí imos nós. Estes programas que vimos, en realidade, todos eles antes. Se eu abrir, por exemplo, imos facer beer1.php, non imos pasar por varias versións deste, pero o que eu fixen foi eu sentei e derramou ou convertido meu código C para o código PHP aquí. A maior parte do inicio do ficheiro e comentarios aquí. Acontece que hai unha nova función que necesitamos chamado readline. GetString, recall, a partir Semana 0 foi unha cousa CS50. PHP vén coa súa función amigable, chamada readline que leva un argumento que especifica o poder que quere amosar ao usuario, e que fai readline é el retorna o que o usuario escribe Pol Neste caso, eu estou declarando unha variable chamada $ n. Eu son almacenar nel o valor de retorno de readline despois de avisar o usuario con esa secuencia. Só para backup, para realmente executar esa cousa, deixe-me ir adiante e realizar beer1.php php. Cantas botellas haberá? Imos facer dous esta vez. Intro. Isto é todo. O programa é funcionalmente idéntico ao da versión C de semanas. Pero sintaticamente imos ver o que é diferente. Despois de que eu recibir un int a partir da notificación do usuario que eu estou facendo algunha comprobación de erros, e n é menor que 1 me saír e eu imprimir unha mensaxe moito para o usuario e saída con 1. Isto tamén é un pouco diferente.  C o que imos facer? C volvemos 1. No PHP vostede saír con unha, que francamente é que eu creo que un pouco máis intuitiva porque está literalmente saír do programa. Todo ben, e entón aquí a música irritante é idéntico sintaticamente con excepción da variable, entón aquí na liña 24 en diante notar o meu lazo for é case o mesmo, pero eu teño R $ diante do I e n, e que tamén está en falta a partir da liña 26 que tivemos no pasado cando se declara unha variable i? Non hai ningún tipo. É incorrecto en PHP para dicir int. Vostede simplemente non precisa facer iso. O ordenador, o intérprete de PHP é intelixente o suficiente para entender que se pór un número de $ I será tratado como un número para ti. E entón aquí estamos na ficha $ i $ i $ i - 1. Todo isto é o mesmo, e entón aquí nós facemos un "Guau, iso é aburrido" printf e despois saír (0). Unha vez máis, o takeaway aquí é que aínda que nós imos gastar relativamente pouco de tempo en PHP, certamente contra o que fixemos en C, é case o mesmo, e así o que imos facer hoxe e na próxima semana e ademais é centrar realmente nalgunhas das novas ideas. Só para ver que outra cousa non traducir máis de C, Este foi un programa super simples que fixemos a semana 1 ou 2, que un valor de cubos. Pero o que era interesante no momento sobre este programa é que introduciu a noción de función personalizada escrito que nós mesmos escribiron. A sintaxe do PHP é case o mesmo. Aquí está o meu programa encima. Teña en conta de novo ausente é calquera noción de inicio. Comezar a escribir código, e iso é o que vai comezar executado polo intérprete. Eu imprimir x agora é 2, presuntamente. Entón eu reclamar cubing ... Entón eu chamar a función cubo e pasar $ x e asignar o valor de retorno a $ x. Entón eu afirmo que é en cubos, e entón eu digo iso, o que espero vai dicir que x é agora 8. A sintaxe para a función en PHP é sempre así lixeiramente diferente. Novo falta é o tipo de retorno. Novo falta é o tipo de retorno e tamén falta é que outro tipo? [Resposta do alumno inaudível] Ben, ok, iso é bo. Imos volver a iso nun segundo. Non temos, por exemplo, int aquí. Non, por exemplo, ter int aquí porque, unha vez máis, en PHP simplemente non precisa e non debe facelo, pero hai esta nova contrasinal chamada función. O PHP é case un pouco máis claro, porque cando quere unha función vostede literalmente dicir función, é darlle un nome e, a continuación, unha lista separada por comas se algún dos seus argumentos. Non é preciso dicir nula ou algo así, e despois de retorno é o mesmo, $ A $ * a * $ a. O que tamén está falta? Sammy apuntou que aquí. Na parte superior do ficheiro completamente ausente en PHP tamén é un prototipo. Isto tamén é por deseño. Linguas e intérpretes como PHP son máis espertos que C sempre foi en compiladores como Clang. Lembre que Clang, se non dixo a el que existe cubo, Se non diga a el que printf existe como un prototipo ou cun # include, así, el estaba indo a berrar con vostede e nin sequera compilar o código. PHP e linguaxes máis modernas son moito máis intelixentes cando se trata de agasallo. Eles van encargarase de ler todo o seu código e entón berrar con vostede só se atopa en ningún lugar cubo. Non importa se cubo é no fondo ou na parte superior ou mesmo nalgún ficheiro separado. Linguaxes PHP e similares son agora intelixente o suficiente para ollar fronte en todo antes de considerar como tendo cometido un erro. Onde iso nos deixa? Imos facer un último exemplo aquí en condicións, e se eu abrir aviso conditions2.php tamén sintaxe aquí é case o mesmo. Está a usar readline vez de GetString, pero que a liña é a mesma que antes, "Gustaríame un enteiro por favor." Eu, entón, ter unha condición que, outra, e logo outra persoa, pero funcionalmente este programa tamén é idéntico ao que fixemos semanas, por iso, se eu executar esa cousa, php de conditions2, e eu dar-lle un número como 23 - Eu escollín un número positivo. Se eu darlle -1 eu peguei un número negativo. Se eu dou 0 Eu, en realidade tomou 0. Entón, quen lle importa todo isto? Ben, un tipo divertido de exercicios aquí polo menos para min era ir cara atrás e ver o quão rápido eu podería aplicar pset 5, o pset erros ortográficos. Lembre que había un ficheiro chamado speller.c, e había un ficheiro chamado dictionary.c. O que eu fixen foi tipo de gasto uns minutos e eu convertinse o código C para o código PHP, e non imos gastar moito tempo en Speller porque así como en pset 5, vostede realmente non precisa gastar moito tempo en Speller en si, porque a súa atención estaba no dicionario. Basta dicir que, se ler Speller, este ficheiro aquí, que é moi fermoso equivalente ao código C que lle deu a pset 5. Acaba engadido preto de US $ nalgúns lugares. Eu mudei os nomes das funcións determinadas, non existe no PHP. Hai unha cousa adicional aquí, preg_match, que é o xeito un pouco máis sofisticado de facer algo, pero imos voltar a iso eventualmente. Pero en fin, Speller é case idéntica, e se ollar ben no fondo o que, eventualmente, cospe é este aquí, palabras con erros ortográficos, palabras de dicionario, palabras no texto. Todo ben, entón o que é interesante agora é o seguinte. No cumio do meu arquivo que estou esixindo dictionary.php. Así como C # include PHP ten unha función especial chamada requiren que practicamente fai o mesmo, esixen un ficheiro chamado dictionary.php. Como podo ir sobre a implementación pset 5? Deixe-me ir adiante e abrir un ficheiro aquí. Deixe-me dar unha pequena referencia aquí. E deixe-me crear un novo arquivo e comezar a chamar esta dictionary.php. Deixe-me poñer en outro cartafol, para que poidamos facelo en directo. E agora eu vou zoom in Vou comezar o meu arquivo PHP con soporte aberto php pechado soporte. E entón aquí había algunhas funcións que eu precisaba para aplicar a pset 5, entón deixe-me comezar a aplicar algunhas das persoas, para comprobación de función, que tivo que levar unha palabra en como un argumento. Nós imos facer isto e volver a el en un momento. Non había carga, función que tivo no que como un argumento? Dicionario, para que o arquivo que eu realmente quería cargar. Houbo dimensión, función que non recibe ningún argumento e había-función que era o outro? Descargar, que non tomou ningunha argumentación. Estas son as catro funcións que eu teño agora aplicar en PHP, eo que eu vou facer é ir adiante e facelo. Unha morea de que usou unha táboa hash en pset 5, entón deixe-me ir adiante e crear unha táboa hash en PHP. Feito. Tanto me dá unha táboa hash. Ben, por que? Un deles, a variable é chamada $ táboa, só para evocar a idea dunha táboa de hash. Os corchetes, con todo, recordar, representan o que? Unha matriz, pero en matrices PHP non ten que ser indexada numericamente. Eles poden ser matrices de asociación, o que significa que pode ter chaves arbitrarias e valores. Así como no pset 5, aqueles de vostedes que fixo implementacións táboa hash probablemente introducido a palabra e despois inserido nunha cadea de listas ligadas, ou almacenados en algún lugar valor de verdade ou algo nese sentido. Vostede de algunha maneira lembrou-se do feito de que a palabra estaba alí. Por agora, que vai ser a miña táboa hash, e agora para ir sobre como implementar a función de verificación Eu só teño mirar para dentro desa táboa hash e ver se unha palabra está aí. O que eu vou facer é que eu vou dicir, se digamos isset, que é unha función de PHP que, literalmente, significa só que é o conxunto de claves, así isset ($ táboa [$ palabra] e así volver true. É iso aí. Isto é pset 5 en PHP. Ben, con xustiza, todo ben. Else return false, entón non está alí. O que realmente está a suceder aquí? Ben, se a táboa de mesa ou hash aquí máis xeral- é unha matriz asociativa que significa que pode indexar nel con unha palabra como "palabra", e ten que volver algún valor. Estamos medio de obter un paso á fronte de nós mesmos. Sería unha especie de bo realmente cargou o primeiro arquivo, para carga non é tan sinxelo, pero deixe-me ir adiante e látego  unha implementación moi rápida de carga. Deixe-me ir adiante e dicir palabras recibe ficheiro de dicionario. A función de ficheiros en PHP abre un ficheiro e retorna para unha serie de todas as palabras que o arquivo, só entrega-los para ti. Isto foi unha gran dor tamén, non foi? Agora foreach, esta é a nosa nova construción, foreach ($ palabras $ palabra). Este ciclo vai comezar a iteração sobre as palabras de matriz e asignar á variable $ palabra cada palabra no ficheiro dende o primeiro para o segundo para o terceiro ao cuarto todo o camiño entón eu non teño que facer o chat [i] notación e similares. E o que eu estou simplemente vai facer para cada unha desas palabras e almacena-lo na miña mesa de indexación na táboa e despois facer realidade, porque para lembrar que unha palabra no meu dicionario é todo o que eu teño que facer e tipo de virar un pouco e dicir esta palabra na miña táboa hash é alí, é certo. E se non está alí, eu non teño que poñer explicitamente falsa, en caso contrario, eu tería que poñer falsa para todas as palabras posibles no universo. É suficiente para min só para definir un valor de índice a verdade se unha palabra é, en realidade, na miña táboa hash. Agora, eu estou cortando un par de cantos aquí que eu vou acenar as mans menos por agora, , Pero agora a función de carga está feito. Eu cargar todas as palabras a partir do ficheiro nun array. Eu iterar desa matriz e para cada palabra na matriz Eu liga-lo na miña táboa hash cunha liña de código. Isto é divertido. Vostede sabe como podemos implementar tamaño agora? Ben, o tamaño é sempre moi doado, na xustiza. Aquí podemos só facer retornar a conta de mesa. Isto é moi fácil tamén, contar o número de cousas enriba da mesa. Isto é realmente o tipo de non máis eficiente. Eu probablemente debería ter un tamaño variable chamada para que poidamos facelo en tempo constante, pero que é moi fácil. Ah, e en seguida, descargar, se realmente queremos ser anal aquí podemos dicir que é como descargar algo. Vostede acaba de definir a variable igual a unha matriz baleira, e se librar de todo o que estaba alí. Non hai necesidade de conectar de balde. Unha vez máis, eu corte algúns cantos, e pido desculpas para a asignación conxunto de problemas 5 quizais en C, pero agora vai adiante e facer iso, Vou rodar a versión que escribín con anterioridade só para que eu non cometa erros sintáticos calquera. Deixe-me ir adiante e executar Speller. A utilización é a mesma. Aquí está un arquivo de dicionario que contén só a palabra foo. Aquí está un arquivo de texto que contén só foo bar. Imos deletrear comprobar iso, Speller así, usando este ficheiro de dicionario sobre este arquivo de texto. Non hai unha palabra grafada incorrectamente, bar, e listo. Feito con pset 5. Imos dar un intervalo de 5 minutos aquí, e nós imos volver e máis en PHP. Todo ben, estamos de volta. Imos facer-me odiar por un tempo. Imos agora ver si realmente este non era un positivo realmente implementar isto en PHP. Concedido, levou 45 segundos para executar. Pero imos adiante agora e executar as cousas. Deixe-me ir adiante e executar unha versión C de Speller, e imos executa-lo nun dos maiores arquivos, que é a Biblia King James. E iso aquí é en-imos para a nosa carpeta C, Speller en King James, a 5. Unha morea de palabras con erros ortográficos. Ok, entón esta é a saída que probablemente ten aínda que ás veces son un pouco diferentes, se ten todo funciona correctamente, e así que o tempo en total, para a comprobación ortográfica a Biblia King James foi 0,38 segundo, de modo moi bo usar esa aplicación. Agora déixeme ir a versión de PHP, que acaba de escribir. Déixame correr Speller en King James. Oops, ignorar este erro. Eu estou no directorio incorrecto. Speller sobre King James, a 5. Case listo. Ok, o astuto observador vai entender que foi máis de 3 segundos de alí. Ese é o verdadeiro tempo en execución. Acontece que é preciso tempo para cuspir gran cantidade de texto fóra porque buffer cuestións, pero longa historia curta, que foi de 3,15 segundos de tempo de máquina, tempo de CPU, versus o que foi un momento atrás? Como 0,3. Quero dicir, é unha orde de magnitude máis lento, entón onde é que desaceleración ridículo benvida? Ben, como foi o caso coa maioría todo o proxecto de decisión que fixemos na clase ao longo dos últimos nove semanas hai case sempre esa compensación. Ás veces, só un espazo entre, por veces, entre o espazo eo tempo, espazo, tempo e esforzo de desenvolvemento, e de feito aquí, aínda que que salvou unha cantidade enorme de tempo, quizais potencialmente 10-20-30 horas tempo de desenvolvemento aplicar o corrector ortográfico chicoteando o en só 45 segundos con esta linguaxe o prezo que pagamos é que é unha orde de magnitude máis lento, como resultado, e este é xeralmente o caso máis calquera linguaxe interpretada, PHP, Python, Ruby, Pearl ou outros en que se está indo a executa-lo a través dun intérprete e que lea o seu código liña por liña, de arriba abaixo, de esquerda a dereita, intermedio que vai levar moito tempo propio, eo que estaba sentindo aquí en 3 segundos en vez de 0,3 segundo é o feito de non existir este intermediario que ten que literalmente interpretar o noso código liña por liña, e Deus me libre se está dentro dun loop cun enorme arquivo contendo centos de miles de palabras. Esta sobrecarga vai sumar e sumar e sumar e sumar. Para unha ferramenta como esta probablemente non é a mellor linguaxe a empregar para a implementación un corrector ortográfico se inmediatez é de interese para os seus usuarios e para ti. Pero o luxo que temos en un momento e se usar unha linguaxe como PHP ou unha morea de linguaxes interpretadas no contexto da web, para que o asunto, ten o beneficio que a Internet é moito máis lento que a maioría dos ordenadores. Ten unha CPU GHz no seu computador, 2 GHz, talvez aínda máis nos días de hoxe. Pero a realidade está en internet hai unha cantidade elevada de latencia que para un navegador para falar con un servidor, aínda que vimos a semana pasada que iso é moi rápido, metade dun milésimo de segundo ou así, que tamén engade-se, e se está baixando cousas como unha imaxe ou unha foto no Facebook ou recibindo mensaxes instantáneas sobre conversacións de Facebook, Gchat ou similares, todos estes tempos de ida e volta entre o navegador eo servidor de inicio para sumar, o que fai a súa escolla particular da linguaxe, en moitos casos non tan relevante, entón está moi ben usando unha linguaxe un pouco máis lento como PHP ou Python ou Ruby pero para os que existen upsides enormes para vostede e os seus compañeiros e os seus amigos, porque pode aplicar cousas moito máis rápido. E ademais, ten moito menos risco de fallos de seguridade determinados. Non hai punteiros en PHP. Non hai fallos seg que pode facilmente inducir do mesmo xeito que podería no C. Con C é super preto do hardware. Con linguaxes PHP e semellante é unha especie de nivel superior, por así dicir, con unha morea de defensas entre vostede eo que está realmente a suceder dentro da máquina, e é só un troco. Temos chegado ao punto de ter esas máis modernas, linguaxes de alto nivel como PHP por mor das leccións aprendidas en linguaxes como PHP en C. Pero se non entende o que está a suceder debaixo do capo de todo este tempo certamente non pode tomar as decisións de deseño apropiadas, e, por suposto, cando se trata de traballar nun lugar como Facebook ou Google ou calquera destes lugares que están cada vez máis xogar con grandes conxuntos de datos mesmo se voltar e facer PREMED e estamos a traballar con algúns MD nalgúns gran conxunto de datos que inclúen pacientes e médicos e como usar as ferramentas certas é inmensamente atractiva porque doutra forma a súa análise dun conxunto de datos pode levar segundos, ou pode literalmente levar horas. Este é só un exemplo, para non frustra-lo con esforzo, canto máis foi en C, pero para axudar a entender que cando implementar algo en C realmente entender, ou en teoría, realmente comprender como todo é ou debería estar traballando, e ten o control case total sobre o que está a suceder debaixo do capó, e con esas linguaxes de alto nivel ten que abrir man de máis control para as persoas que inventaron e están suxeitos máis para as súas decisións de deseño que o seu. Pero se tomamos como certo que o desempeño non é tan importante na Web por mor destas outras cuestións, velocidades de rede son só un pouco máis lento que as velocidades de CPU de calquera xeito, así podemos clasificar de dar ao luxo de usar unha linguaxe un pouco máis lento os upsides son podemos desenvolver cousas 10 veces máis rápido ou máis. Imos ver como podemos comezar a usar isto. Deixe-me ir a un cartafol entre os exemplos de hoxe denominado frosh.ims, e este foi realmente persoalmente motivado polo feito de que o primeiro Eu escribín para a web anos despois de tomar CS50 e CS51 era un sitio para o programa de mensaxería instantánea Frosh, deportes Caloiro intramuros, que na época era bastante anos, que no momento non había ningún sitio para o programa, aínda que non houbese unha web, e en canto había un inspector en Wigglesworth en que se quixese para se rexistrar para VOLEI ou fútbol ou o que queira que cubrir un anaco de papel. Vostede, entón, atravesar o patio. Vostede, entón, bater na súa porta e deslize na súa porta ou a man ao Proctor un anaco de papel co seu nome, se quere ou non que ser un capitán do equipo, o que o deporte que quería facer, eo que estaba dentro do dormitorio Era unha especie de unha maneira antiga escola de facer as cousas, e este foi un nobre oportunidade de automatizar unha gran cantidade de este proceso. É só ir ao sitio web. Escribe algo dentro Vostede recibe un correo electrónico de confirmación, e listo, está feito. Esta foi a primeira cousa que eu fixen, aínda que nunha linguaxe chamada Pearl, pero é relativamente fácil de facer en PHP, e iso é unha especie de representante dos problemas que pode comezar a resolver cando se pode expresar programaticamente e non ten que confiar en cousas como sitios de Google ou Excel ou ferramentas que son entregados a vostede. Vostedes agora teñen a capacidade de facer cousas como esta. Esta é unha versión super feo dun formulario, pero imos usalo para o inicio da conversa en que este é aproximadamente o que a forma parecía anos para nós para permitir que as persoas na web para rexistrar para Frosh IMS. Pedimos a un nome, unha caixa de selección para se ou non quería ser capitán, home ou muller, e entón o que eles estaban no dormitorio, e despois irían enviar este formulario. Imos primeiro ollar debaixo do capó HTML que representa a esta páxina. Deixe-me ir froshims0, e como un aparte, para pset 7 Estou levando a concedido os directorios e os cartafoles que estou poñendo as cousas dentro Imos leva-lo a través exactamente onde a cousa ten que ir no aparello, cales comandos mod ten que correr, entón non se preocupe con toda a detalles estúpidos sincronización desde o get-go aquí. Todo ben, aquí está froshims0.php. Deixe-me rolar para abaixo, eo que é curioso aquí, este é un arquivo PHP, mais o que está dentro del, de forma clara? É un monte de HTML, e de feito, PHP orixes realmente eran para ser unha linguaxe web-céntrica. Un momento atrás, usouse para aplicar o exemplo cervexa, as condicións de exemplo, o exemplo Ola, e iso é bo. Podes usar o PHP como unha linguaxe de script onde un script é realmente só unha nomenclatura dada a un programa rápido e sucio ou algo que escribe en un guión ou, máis xeralmente unha linguaxe interpretada. PHP é super útil para que, porque xa viu como rapidamente relativamente podemos látego de programas en PHP. Pero foi realmente deseñado para ser usado para a web, e deseñado para a web no sentido de que notar-se aquí no inicio do arquivo Eu comezan con