[Powered by Google Translate] [Sección 8] [menos cómodo] [Nate Hardison] [Harvard University] [Esta é CS50.] [CS50.TV] Benvido ao noso segundo a última sección. Esta semana imos falar sobre PHP e entón a próxima semana imos facer unha pequena revisión para Quiz 1. Nós imos comezar na páxina 3 do problema define paquete, e imos traballar a través da sección de preguntas rapidamente. Na páxina 3, comezan a falar sobre esa diferenza entre C e PHP no sentido de que o PHP é unha linguaxe de tipagem dinámica, mentres C é tipagem estática, e alguén realmente feito rapidamente calquera codificación en algo así como PHP ou Python ou Ruby antes JavaScript? Totalmente novo? Okay. Todas esas linguas que eu acaba de mencionar son moi diferentes linguaxes como C e C + + e Java no sentido de que cando declara unha variable que non ten que declarar que tipo de variable é, polo tanto, C foron preso ter que sempre digo iso vai ser unha variable int, ou iso vai ser unha variable char *, mentres que con PHP, co Python, con Ruby, con unha morea de linguas máis modernas non ten que facelo en todo. Vostede acaba de declarar a súa variable, e, no caso de PHP vostede declarar que é unha variable prefixando-lo con un sinal de $, e, a continuación, o tipo de variable é determinada por calquera valor que está seguro, que é legal. Para xogar con iso un pouco, temos un código de exemplo PHP aquí entre as etiquetas de inicio e fin. Estamos a usar este tipo de como HTML no sentido de que temos estes corchetes aquí para abrir e pechar. Vai ver iso con HTML. Vai ver o mesmo tipo de sintaxe con XML tamén. Isto indica o inicio dun bloque PHP. Este php? E específico para PHP. Pechamos todo cun> tamén. Imos abrir un arquivo no noso aparello co que desexa. Neste paquete que di chamarse dynamic.php. En realidade, pode chamalo de todo o que quere, pero o nome do ficheiro aparecerá e ser importante máis tarde, entón lembre que vostede chama-lo. Vou pasar o aparello, e eu vou facer un directorio para Sección 9 Eu creo que estamos agora. E imos á sección 9, e eu vou usar o gedit. Imos ver, gedit, e eu vou chamar dynamic.php meu. Boom. Dentro dynamic.php, xa que este é un arquivo PHP e quero facer este a través do intérprete PHP Eu teño comezar todo coas etiquetas abertas, entón eu vou comezar inmediatamente, me dar un pouco de espazo entre as etiquetas, e entón o punto deste exercicio foi de xogar con esta función chamada gettype, así gettype, esta función aquí. Teña en conta que non hai espazo ou subliñado ou guión ou algo así separando as dúas palabras, comezar e escribir, só unha palabra completamente. Pero o que isto vai facer é pasar unha variable para gettype, dicir $ var ou $ x, iso me vai dicir o tipo de nun formato de depuración que o nome que tipo é. Nós imos probar aquí. En particular, se ollar cara atrás, a especificación pset Temos algunhas liñas diferentes do código aquí. Na primeira liña de código que arrincar esta variable, $ var, ser igual a 7, e, a continuación, temos esta liña printf que di hey, var printf está baleiro. Printf é unha das moitas formas de imprimir cousas en PHP. Moitas veces vai ver a función eco usado en vez de printf, printf pero estamos todos familiarizado con sendo codificación en C por un tempo. O que realmente pode facer é deixar de ver obras copiar e pegar. Vou tentar dar un regalo. Imos volver para o aparello. Ok, e alí imos nós. E paso é un pouco descolados, pero aquí imos nós. Temos ese código aquí. [Estudante] e estilo non é bo para a guía-lo? Sentímolo? [Estudante] e convencional para guía-lo? Certo, entón Sam pregunta se é convenio para guía-lo ou non. Normalmente si. Neste caso, eu escollín non facelo. Honesta, vai ver cousas diferentes entre os programadores diferentes. PHP é normalmente usado moitas veces en combinación co HTML e outras linguas, e por iso ás veces a impresión se ve un pouco descolados se recuar no PHP inicio e etiquetas de final. Ela realmente depende. Neste caso, o copiar e pegar non pegar as pestanas para min, pero definitivamente non, como dixo, facelo máis claro. Todo ben, se gardar este código dynamic.php entón o que podes facer é vir abaixo a súa fiestra de terminal onde estou aquí abaixo no gedit e para facer o equivalente a compilación con make e despois executar o código en C todo o que ten que ver co arquivo PHP é iniciar o intérprete PHP, que é un pequeno programa chamado PHP, eo argumento que lle dá ao intérprete é o arquivo que quere interpretar. Neste caso dynamic.php,. Oops, onde foi que eu colocar-lo? Oh, eu poñelas na sección 9, e aquí estou eu. É por isto. Agora, se eu executar de novo vemos que na miña primeira chamada función gettype var é un enteiro. Na var próximo é unha cadea, e despois no var terceiro é un boolean. O que é interesante sobre iso é cambiar de volta, vemos que estes son tipos semellantes aos que tiñamos en C. Tivemos ints en C. Nós medio que cordas en C, así cordas non eran un tipo totalmente lexítimos no sentido de que nosa cadea CS50 era realmente o que? Sentímolo? Missy? [Missy] char *. Si, foi ese char * usan. No inicio do semestre nós utilizando o tipo cadea, pero era realmente un char * baixo o capô. Nós só tipo definido que, mentres en PHP esas cadeas son un tipo real. Non hai máis desas cousas do tipo char *. Vai ver que podemos facer moito máis cousas con cordas moito máis facilmente en PHP que poderiamos C, e, finalmente, temos este tipo boolean, é a gran diferenza aquí é que desprazarse de volta para abaixo, vemos que o nome destes tipos agora son string, enteiro, e en vez de boolean, int e bool e como incorporarse distintas linguaxes de programación, asumindo que nalgún momento das súas vidas, pode poñerse en contacto con os distintos vai notar pequenas peculiaridades como esta onde C chámase ints enteiros. Algúns chaman-lle números enteiros. Existen outros termos que vai executar en. Int grande que vimos hoxe en SQL. Hai tamén o número e, a continuación, bool, boolean, todo tipo de diferenzas alí. Isto non é moi interesante, pero agora eu estou indo darlle un pouco de tempo o zoom-out para traballar a través deste exercicio, na parte inferior da páxina 3 onde pide que tipo corresponden a eses valores aquí no fondo. Temos 3.50. Temos esta cousa aquí, o que é interesante. Nós non vimos isto antes, pero se está seguindo ao longo de charla probablemente xa sabe o que é. Entón temos iso, que este é o tipo de funky. Vostede recoñece iso. ¿Que é iso en C? Sam? O que isto lle dar en C? Sería abrir un ficheiro chamado dynamic.php e facelo lexible. Si, e cal sería o tipo de variable que sería asignar isto? Estrela do arquivo. >> Exactamente, sería asignar iso a unha estrela de arquivo. Este é PHP lexítimo tamén. Executar iso. Mira o que acontece cando pasar iso para gettype. E tamén comprobar o que é nula, o que podería ser en PHP. Eu vou te dar un par de minutos. Pode literalmente copiar e pegar estes valores, e entón imos facer unha chamada pouco ao chou en ti e ver o que ten. [Estudante] Eu teño unha pregunta. << Yeah. Nunha das charlas David dixo que hai algo que pode pór na parte superior do seu arquivo de xeito que non precisa escribir o PHP cada vez. O que foi iso? El foi, probablemente, a falar sobre o estrondo libra, o estrondo de hash. É unha directiva que se marcar o ficheiro como executábel entón o que fai é cando executar o arquivo vai dicir ao programa shell para usar o intérprete PHP para interpretar o contido do arquivo. A cuestión de ser o que era esta liña especial que poderiamos incluír na parte superior dos nosos arquivos PHP para non ter que incluír esta liña PHP ou PHP este comando en calquera momento realizar o ficheiro? E pode realmente facer iso con unha morea de arquivos diferentes. Eu creo que depende de onde o binario do PHP é almacenado, pero moitas veces usr / bin / php é un bo lugar para comezar. Pode descubrir iso exactamente, indo de volta para o seu dispositivo e escribindo que php. O comando que calcula cando está executando binario ou un comando de onde o arquivo correspondente. Tanto me di que o PHP é realmente aliasing este ficheiro binario que está almacenado usr / bin, que é onde moitos dos binarios do sistema están instaladas. Por exemplo, se eu rolar ata o cumio, agora que eu coloque esa #! liña aquí Eu podo rolar para abaixo, e podo tentar executar dynamic.php, pero eu recibín este erro sobre o permiso que está a ser negado, eo que iso significa que este ficheiro non está dando os permisos de execución. Non está marcado como un arquivo que alguén poida ser executado. Cando executou facer ou Clang e ten un executable a partir del o compilador foi intelixente abondo para saber que, ei, eu estou construíndo un executable. Probablemente vai querer executa-lo, de modo que sería configurar automaticamente os permisos para ti. Este non é o caso, porén, cando se crea un ficheiro normal a partir de cero, A razón é normalmente non quere ter calquera arquivo no seu sistema sexa executábel, para que realmente ten que ir e facelo manualmente. O xeito máis doado de facelo é coa orde chmod, e chmod + x di engadir o bit executable porque non é o pouco de lectura, o bit de gravación eo pouco executable, r, w e X, e dicindo chmod + x ha conectar o bit executable para, a continuación, o ficheiro que especificamos, que neste caso será dynamic.php. [Estudante] é que ligado para todos? Imos comprobar iso, así como eu comproba os permisos? Vostede sabe como eu comproba os permisos dun ficheiro? [Resposta do alumno inaudível] Sentímolo? >> [Estudante] XSD. XSD dános o ficheiro en hacks. Listado todos os arquivos,-L, me vai amosar os arquivos no meu directorio tipo de na súa longa lista detallada, e así por aquí vemos que este ficheiro dynamic.php modificouse por última vez o 05 de novembro 04:21 AM. O propietario deste arquivo é jharvard. Ese é o usuario que está rexistrado Pol Ese é o usuario que eu estou a traballar como, e tamén está no aparello que está a traballar tamén como jharvard usuario. Está no grupo de alumnos, e estas son as cousas que vai ver moitas veces o suficiente. Podemos entrar en moitos detalles aquí, pero na maior parte o que quere ollar para cando está olhando para ver ou non un arquivo executable é primariamente o usuario que posúe o ficheiro, o propietario, así jharvard iso, e entón temos os bits de permisos por aquí á esquerda, e da forma de ler esta é que o último bit tipicamente se usa para a reserva ou polo menos non menos neste caso esta última, moitas veces, ser definido para anuncio para indicar que o ficheiro é un directorio, e non só un arquivo normal. Entón, os seguintes 3 bits aquí mesmo determinar os permisos que o propietario do ficheiro ten, polo tanto, neste caso jharvard, como o propietario do ficheiro, pode ler e escribir neste ficheiro, pero hai un trazo dicindo que jharvard non pode executar este ficheiro. Os próximos tres bits son para o grupo, de xeito que este é o grupo de alumnos, por iso, se había varios usuarios no meu dispositivo, e tivemos varios usuarios como parte do grupo de alumnos, entón poden ler este ficheiro, pero non pode escribir, e tamén calquera outra persoa, o mundo só pode ler este ficheiro tamén. Hai un writeup, bo tempo sobre isto, así podes ler en liña. Na especificación do conxunto de problemas que van para iso con máis detalle. [Estudante] é o 218 referíndose ao mundo? O 218 é-por riba da miña cabeza, eu estou esquecendo, pero non. Imos ver. Estou cega niso agora. Volta para o que estabamos a piques de facer con este chmod + x onde queriamos dar permisos de execución dynamic.php, ea pregunta era se iso ía dar permisos de execución para todos ou só jharvard, e podemos ver iso executar os comandos e escribindo ls-l, e agora vemos que é marcada como executable. Vostede ve que houbo un cambio de cor. Agora dynamic.php está listada de verde, e parece que a resposta á pregunta é que, Charlotte? [Charlotte] Só jharvard. >> Jharvard Só, si. Se quería virar a pouco executable en para todos como podemos facelo? Calquera pensamentos? >> A + x? Si, exactamente. Charlotte dixo que podemos facer chmod + x dun dos dynamic.php, e agora, executar ls-l, vemos que os bits de execución son de feito conectado para todos. E pode realmente facer o inverso deste, de modo que pode desactiva-lo para todos usando menos. Agora está desconectado, e agora podemos ligalo novo para jharvard para que poidamos realmente executa-lo agora e agora ve cando fai o código agasallo especial #! liña na parte superior, #! liña, dixo o shell, dixo o noso terminal hey, cando ese ficheiro é executado, usar / usr / bin / php para interpretar este ficheiro e, a continuación, imprimir a saída. [Pregunta estudante inaudível] Por suposto, deixe-me ir para arriba. Así como este. Vai ver todas esas directivas comezar con este libra e, a continuación, o punto de exclamación, ás veces chamado de un estrondo, shebang hash. [Estudante] Como podemos executa-lo con dynamic.php php antes de facelo executable? A cuestión era como podemos facer iso usando o binario de PHP mentres dynamic.php non é executable? Isto é super importante, porque é exactamente como está indo para o traballo cando escribe conxunto de problemas 7. A maioría dos arquivos de tempo de PHP non son directamente executable. O xeito que funciona é porque é o binario PHP que é executable. O intérprete é a cousa que está a ser executado, e así o que está facendo é, literalmente, chupando en todo o contido do noso arquivo dynamic.php e liña por liña vai e executar os comandos, polo que é usando o noso arquivo PHP como unha lista de instrucións. Non está directamente executalo. É aí onde dicimos que eses arquivos son interpretados en tempo de execución. É unha linguaxe tempo de execución, en vez de algo que é determinado en tempo de compilación, non unha linguaxe compilada como C. Existe unha maneira de obter unha linguaxe tempo de execución de actuar como se fose unha linguaxe tempo de compilación, Como se ten todo o corredor feito no servidor en vez de, vostede sabe o que quero dicir? Si, entón a pregunta é hai unha forma de obter linguas tempo de execución para actuar máis como os tipos de tempo de compilación de linguaxes? E alí están, é dicir, que é unha área activa de investigación para moitas destas empresas. Creo que Facebook ten feito un gran traballo con PHP e recompila-lo para abaixo, tornándose o máis rápido, optimizando o desde o seu sitio está construído en PHP. Se seguindo Node.js en todo, que é unha especie de intérprete de JavaScript para ser capaz de executar JavaScript fóra do navegador, fóra do seu navegador, porque tradicionalmente JavaScript sería só correr dentro do Firefox ou Chrome, e sería usado para facer animacións legais ocorrer nunha páxina web e facer a súa páxina web dinámica. Que foi construída sobre unha chea de traballo que Google fixo que ter Javascript e C + + se unen, entón non hai moita investigación activa para obter esas linguas para interactuar e optimiza-los, sobre todo porque moitas persoas poden codificar en PHP e JavaScript porque é moito máis fácil. É moito máis agradable. Non ten punteiros. Non ten tipos flotando. Eles querían gañar os beneficios de linguas en tempo de compilación con todo tipo de control é a velocidade e uso de memoria baixo e todo iso mantendo aínda a flexibilidade e facilidade de uso destas novas. De volta ao noso plan orixinal de ataque. Temos algunhas destas preguntas aquí na nosa especificación conxunto de problemas. Imos pasar por eles moi rapidamente, e nós imos dar a volta ao cuarto. Charlotte, que tipo é 3,50? [Charlotte] Isto é un dobre. >> É unha dobre. Jimmy, que é ese próximo? >> Unha matriz. Unha matriz, impresionante, e Jared, o que é o fopen? [Jared] É un recurso. >> É un recurso. Este é un tipo de un novo, non unha estrela de ficheiro, non un arquivo. É un recurso é o tipo en PHP, e eu sinto moito, Ella, o nulo último é o que? Nulo. Nulo, como está escrito en PHP? >> A mesma forma. Do mesmo xeito, capitais? >> Si Si, todo ben. Aquí imos nós, temos un dobre, temos unha matriz, temos un recurso, e logo temos nulo. Imos ver agora viuse Imos ver, entón agora eu creo que eu tamén quero facer é puxar arriba Esta páxina web aquí, este php.net / manual, por iso, se vostedes que copiar e abrir un navegador. Vou tirar o Chrome, que puxo dentro Quero demostrar que iso non só porque podemos falar todos os días sobre os tipos e todas as cousas que a diversión senón porque este é o guía do PHP, e hai unha morea de programadores PHP alí fora. Hai unha morea de sitios PHP alí fóra, e, como resultado, hai unha gran cantidade de documentación en PHP, e do manual, este php.net, é un bo lugar para ir sempre que está con dúbidas sobre o que é a mellor forma de facer X en PHP ou o que é que unha función se parece? Só o tipo de familiarizarse co que iso parece, porque vai vir aquí moitas veces, un pouco de conxunto de problemas 7. Se acaba facendo un proxecto final que usa PHP este será un lugar que vai tornar-se moi ben familiarizado. Moitas veces, o xeito no que as persoas facer iso é que eles usan Google para buscar o lugar, e non usar a caixa de busca que está aquí enriba na esquina superior dereita, que é unha especie de pequeno. Se está buscando en torno a algo para facer con PHP e ve un dos enlaces manuais aparecer normalmente pode confiar en que como un recurso moi bo. Incribles, polo tanto, fóra destes tipos, só por curiosidade, que non vimos? Calquera cousa que non vimos aquí? [Estudante] >> Recursos. Vimos de recursos coa chamada fopen. [Estudante] obxectos. >> Obxectos que non vimos, con certeza. Callbacks non vimos. Hai algúns deses pseudo-clase. Nós sempre só vin enteiro e de parella. Non ver algúns dos outros, polo que se preme en números enteiros podemos ver hai outros enteiros que teñen aquí? Son todos tan completo, enteiro, completo. Algunhas linguas teñen maiores tipos enteiros, como vimos no MySQL hoxe houbo int e int grande. Cool. Entón, manual de PHP. Imos volver para a nosa especificación conxunto de problemas, e agora imos rodar a páxina 4. Unha das cousas que acontece cando comeza linguas que non teñen esta tipagem estática, polo tanto, estas linguas, onde ten que declarar tipo dunha variable de fronte para arriba é que comeza casos en que pode comezar a ter variables de tipos diferentes interactuar uns cos outros, e PHP fai esa cousa que tenta facer o que considera a cousa máis sensata a facer cando ten dous tipos interactúan uns cos outros. Por exemplo, se olharmos para estas liñas de código aquí ve que temos o que ocorre cando Tentamos e engadir a secuencia 1 ao número enteiro 2. Qué acontece se tentar e engadir unha secuencia que non é un valor numérico senón personaxes reais, CS co número 50? Entón imos ver hai algo diferente que acontece cando en vez de engadir unha cadea para un número que está engadindo un número a unha cadea, e así por diante e así por diante ata o punto en que estamos recibindo algún tipo de cousas estrañas aquí, onde temos 7 + verdade. O que diaños significa isto? Se vostedes van adiante e pegar algúns este código no seu dispositivo. Pode mantelo en dynamic.php. Imos ver o que acontece. [Estudante] necesitará empregar impresión non, printf? Si, entón podes ver que de impresión tamén é unha función válida para a impresión en PHP. Hai moitas formas diferentes de facer iso. Imos ver un par de exemplos máis tarde, unha vez que comeza a falar sobre o único problema que nós estamos indo para escribir e entón o problema concentracións que imos escribir que aínda que temos fopen e fclose que moitas veces non é o xeito máis sinxelo de ler o contido dun arquivo. PHP ten unha morea deses remanentes C-like. [Estudante] Cando engada en todas as 6 desas cousas que eu só obter un número como unha saída. [Nate H.] Cando se pon en todas as 6 destas cousas. Imos ver o que é, porque é posiblemente- unha cousa é que esas chamadas de impresión non están rematados a finais con novas liñas. Non hai como nova liña que separa cada unha desas chamadas de impresión, quizais por iso que está a recibir un gran número, e é realmente só amálgama de novos carácteres de liña. [Estudante] Ok, como podo estar seguro de- Así, hai unha morea de maneiras diferentes. Vostede podería poñer a man nunha copia dun carácter de nova liña, un eco dun carácter de nova liña, imprimir de nova liña. [Estudante] Entón eco é a mesma cousa que printf? Printf é como C printf onde está imprimindo unha secuencia formatada. Vostede está dando-lle a secuencia de formato e as variables de espazo reservado. É algo que moitas veces non se usa- imos ver, como un aviso, Estou menos familiarizado con PHP que eu con linguaxes web, e cando ten programado en PHP eu normalmente non usan printf porque creo que é máis rápido para usar os recursos de interpolación de cadeas que ten, que nós imos entrar e eu vou lle amosar en só un segundo, mentres que en C nós medio que temos para facer esta cousa hacky para obtelo para imprimir correctamente. Realmente pode pór variables directamente cadeas en PHP. Printf é unha especie de excesivamente longo para o que eu costume facer. Si, Ella. [Ella] Xeralmente, se conseguir un erro de interpretación é que iso significa- como en C non dicir exactamente onde está o erro e que é, Entón, isto significa ollar a través do seu código completo e descubrir iso? É tipicamente máis segmentado que iso. Eu creo que nese caso foi un pouco fóra, entón eu creo que, nese caso, que estaba falta un punto e coma. El estaba tentando facer sentido de todo, así como esas linguaxes interpretadas, o intérprete vai e facer o mellor para que todo funcione correctamente. Vai ver, por exemplo, en JavaScript Vostede moitas veces liña de declaracións finais con un punto e coma como o fan en PHP, así como fan en C. En JavaScript algúns dos intérpretes de JavaScript en moitos dos navegadores pode pór en punto e coma para Se ocorrer de estar falta eles. Eles van tentar acomodar por algún desleixo da súa parte. É onde pode estar intentando e intentando e intentando facer as cousas de traballo, e, finalmente, vai chegar a un punto onde el di que está ben, Eu non podo facer as cousas funcionen en fiando, e é aí onde vai ter un número de liña que pode parecer un pouco fóra do lugar exacto. Ok, entón imos pasar por iso moi rapidamente. Paramos con ella, entón imos pasar Missy, e Missy, o que fai impresión de corda 1 máis o número 2 darlle? [Missy] 3. >> 3. Isto ten sentido? Máis ou menos? Dálle un número? Dá-lle unha corda? [Missy] Un número. >> É un número. Pero é imprimir lo, polo que vai dar-lle algún tipo de corda. Unha cousa que podemos facer para comprobar iso é se facemos $ var = 1 + 2 e entón dicimos eco de gettype, por iso estamos a usar un terceiro tipo de impresión aquí. Agora podemos ver o que pasa aquí. Aquí o que temos é que temos un número enteiro fóra diso. Aínda que estaban engadindo este string a un número, nós non conseguimos unha secuencia de fóra, así como Missy dixo. Estabamos a recibir un número enteiro. Ok, entón imos ver, xunto a, Kevin. CS + 50? >> [Kevin] 50. [Nate H.] 50. Isto ten sentido? [Kevin] Yeah. [Nate H.] Por que? Por que ten sentido para ti? [Kevin], porque é só ter a corda, tendo valor cero número. Si, xenial. Tipo de situacións ambiguas, pero é bo saber que pasa. Stella, o que pasa co número 1 + secuencia 2? [Stella] 3. >> 3 novo. E, neste caso, podemos obter unha cadea ou un número? Imos tentar dar un regalo. Alguén máis rápido que obter a resposta? Charlotte? Ah, eu didn't-todo ben, imos ver, imos facer o mesmo tipo de cousas onde temos un número de unha cadea, e nós estamos indo a ecoar o tipo, ver o que temos. Tamén obter un número enteiro. Non importa cal é a cadea, que é o número un. Nós aínda estamos indo para obter un número enteiro. El aínda vai facer o que poderiamos esperar. Todo ben, entón Sam, que preto de 90 + 9 botellas de cervexa na parede? [Sam] 99. >> 99. Non botellas de cervexa na parede, no entanto. Iso dános un pouco máis información sobre o que está a suceder. [Sam] Se tivese escrito en letras 9 entón tería 90, non? [Nate H.] Yeah. A cuestión era se tivésemos escrito 9 como N-I-N-E teriamos obtido 99 ou 90? Teriamos 90. É literalmente mirando só para personaxes de dous díxitos. Non é suficientemente intelixente para recoñecer palabras para números e esas cousas. Si [Estudante] Existe tal cousa como typecasting en PHP? Non hai, e é exactamente do xeito que faría en C. O que preto de 10/7, Charlotte? [Charlotte] 1,4285. [Nate H.] Si, entón o que pode ser sorprendente sobre iso? O que sucedería se fixo ese mesmo tipo de cousas en C, se fixo 10/7 en C? [Charlotte] É só dar-lle dependendo de como typecasted eu creo que lle daría só un número limitado de díxitos despois da coma. Si, entón un número limitado de díxitos despois da coma. O que máis podería ser se podería que lle dar calquera díxitos despois da coma? Moitas veces, non tan novo, dependendo de como está typecasting pode ou non pode convertelo en un número de punto flotante. Aquí era unha especie de bo que fixo. Se tivésemos mostra que está de volta cando comezamos a facer este tipo de cousas en C probablemente tería feito sentido un pouco máis que non só tes que ir a un. E entón, finalmente, Jamie, o que dicir de 7 + verdade? [Jamie] 8. >> 8. O que significa isto? Coido que só dá certo o valor de 1. Si Qué acontece se cambiar isto para false? [Estudante] 7. Si, para lembrar onde falamos sobre estes valores binarios, Sendo 1 en diante, sendo 0 fóra? Agora temos certo é 1, 0 é falso, e non pode ver iso nos exemplos C que fixemos neste semestre pasado, pero históricamente tipo bool en C non foi un tipo de real, para que as persoas teñen usado 0 e 1 no lugar de verdadeiro e falso. Esta é unha manifestación diso. Ok, entón por unha banda importante de todo isto é que temos estes tipos diferentes. Eles poden interactuar uns cos outros. Moitas veces poden interactuar uns cos outros de formas que son agradables, como vimos aquí. É bo ser capaz de ter unha corda eo número 2, engadila los xuntos e obter 3. Isto ten sentido. Con todo, cando está escribindo sitios, e especialmente cando se está procesando entrada do usuario, para dicir que teña escrito un formulario web que recolle información do usuario e, a continuación, vai para proceso-lo no extremo traseira, na parte do servidor no seu código PHP se está esperando que o valor que o usuario introduciu e sometidos ao seu formulario para ser un enteiro ou ser un número de punto flotante, ou algo así precisa explícitamente lanzalo e despois facer algunha comprobación de tipo. Non quere só contar con este sistema de malabarismo tipo para facer as cousas funcionan, especialmente por razóns de seguridade e só para a robustez do seu sitio. Só algo para manter presente que cando está lidando con datos do formulario, calquera cousa que ven na mensaxe ou superglobais get asegúrese de que sempre válida-lo e convertela-lo e typecast-lo. E, así como nós estabamos falando sobre un momento atrás que typecasting en PHP é exactamente o mesmo que no C, onde ten os parénteses e, a continuación, o tipo. Teña isto en mente. Unha función que vai vir a cadra cando está facendo iso é que estamos usando e este é o tipo de como un aparte- Estamos a usar esta función gettype aquí para descubrir o tipo dunha variable, e mentres tanto é útil para depuración e para ver que tipo dunha variable é non quere usar iso, por exemplo, nunha condición en que está comprobando para ver se gettype de $ var = enteiro facer algo. Isto é malo, malo, malo. En vez diso, son esas funcións chamadas é enteiro, é string, é matriz que quere empregar no lugar, polo tanto, neste caso o que me gustaría facer, en vez de este cara aquí utilizar o var é número enteiro. E son moitas veces referido é * is_ no sentido de que podería substituír o * con número enteiro, cadea, etcétera, e só para estar seguro realmente rápido E iso é int php. Parece que pode facer ou é int ou se existe enteiro tamén? Si, de feito, tan int aliases enteiros. Cool. Como estamos indo? Imos incorporarse o ritmo un pouco. Agora imos falar sobre matrices, así como se pode ver na seguinte parte da especificación falamos sobre como arrays en PHP son un pouco diferentes do que son na C. En realidade, son unha especie de amalgama de as matrices que xa coñece e ama na C onde todo é do mesmo tipo almacenadas consecutivamente e de forma contigua na memoria, e ten eses índices numéricos. Tes índice 0, o índice 1, índice 2, e almacenar valores neses índices. Tamén en C, cando escribiu Speller, unha morea de ti fixo o achegamento táboa hash, e viu que non tivemos outro tipo de almacenamento onde estabamos mapeando unha clave para un valor, por iso, cando intentou gardar algo en táboa hash tivo que especificar que quería gardalo cunha clave específica, e que a clave determinada a localización do valor e onde sería almacenado. Tes tipo de ambos os conceptos ocorrer ao mesmo tempo nun array PHP, e, como resultado, moitas veces chamamos estas matrices asociativas onde estamos asociando unha clave nun valor. Nesta próxima parte falamos dunha matriz PHP simple onde temos teclas a, b, c, todas as cordas, o mapeamento para os enteiros 1, 2 e 3. E pode ter chaves de diferentes tipos. Pode ter que algunhas claves que son cordas, algunhas claves que son enteiros. Pode ter valores de diferentes tipos. Pode ter un valor que é unha cadea, un valor que é un número enteiro, un valor que é un obxecto ou outro array, por exemplo, todo no obxecto mesmo matriz, que é medio raro. Non ten que ter unha matriz que só ten un tipo de elemento nel. Pode ter moitas cousas diferentes a suceder alí dentro. A outra cousa a notar é que cando ves algo como iso no seu código, que é PHP válido para declarar unha matriz como esta, 0, 1, 2, 3, 4, 5, que vai declarar un inicializar $ arr ser esta matriz. Pero o que está realmente comezando baixo o capo é este tipo de implícito xeración de chaves onde temos 0-0, 1-1, 2-2, 3-3. E ocorre que, mesmo se ten unha matriz como este cara aquí onde a, b e c como as teclas e despois de comezar a usar o método push matriz para comezar a usar este conxunto como unha pila, así podes ver que este obxecto de matriz, esta matriz é realmente quede resaltado. Podemos usalo como unha matriz. Podemos usalo como unha táboa de hash. Podemos usalo como unha pila. Cando comezar a empurrar as cousas para esta matriz a primeira cousa que empuxa para iso será o índice 0 e entón o índice 1 e índice 2. Pode obter este tipo de xeración implícita de claves a menos que especifique los explicitamente. A forma como se especifica claves explícitamente, por suposto, é a usar esta notación de corchetes, que é semellante a matrices, agás en vez de só permitir índices enteiros aquí, agora imos permitir que calquera cousa. Se queres que a clave para ser unha secuencia, que especifica-lo como este. Se queres que sexa un int, que especifica a int quere usar. Preguntas sobre o que ata agora? Unha das cousas agradables sobre esta idea é que só pode ter un valor almacenado cunha chave especial. Se volvemos ao noso aparello, deixe-me eliminar algunhas destas cousas. E digamos que eu arrincar un array para 0, 1, 2, feito. Se eu agora sei que, por exemplo, se eu echo $ arr [0] Eu estou indo para obter o valor 0 impresos, e unha vez que só pode ser sempre un valor almacenado para unha determinada clave se eu gardar algo en $ arr [0], digamos, un, entón eu sei que cando eu echo $ arr [0] de novo Eu non estou indo a obter 0 impresos como antes. Eu só estou indo a obter un. Polo tanto, este é basicamente dicindo que eu non podo ter $ arr [0] almacenar dous valores diferentes. Non pode almacenar 0 ea secuencia de un, como esta, literalmente substitúe o que estaba en $ arr [0] anteriormente. A razón de eu levar iso é executalo, ver o que acontece. Vexa aquí que eu teño 0 impresos e en seguida, unha. Non hai nova liña alí porque eu era preguiceiro e non poñer isto dentro O que é legal sobre iso é que pode usar isto como unha forma para capturar esa idea dun conxunto onde non podemos ter varias chaves dentro dunha matriz. Non podemos ter chaves idénticas dentro dunha matriz. Eu non podo ter tecla 0 eo valor 1, 0 chave e un valor ou tecla 0 e verdadeiro valor. As teclas son todos só hai unha chave na matriz. Aínda que pode ter o mesmo valor almacenado varias veces na matriz baixo diferentes claves non é posible ter chaves idénticas varias veces na súa matriz PHP. Se olharmos para este problema seguinte, unique.php, onde queremos abrir un ficheiro PHP contén unha lista de cadeas, unha cadea por liña, e queremos atopar todas as secuencias únicas en que o arquivo todo o que temos que facer é usar unha desas matrices PHP e utilizar as cordas no arquivo como as claves para esa matriz e manter a actualizar a nosa matriz como almacenar estas novas claves. Como podemos ler cada liña fóra do arquivo podemos almacena-lo na matriz, e ao final teremos como as nosas claves na nosa matriz todas as cordas orixinais dentro do arquivo. Isto ten sentido? Imos ver como funciona isto. Imos abrir, de acordo coa especificación, un novo arquivo chamado unique.php. Abre. Oops, desculpe, novo arquivo. Nós imos comezar a con as etiquetas do mesmo inicio e fin. Estamos indo para garda-lo na sección 9, e imos chamalo de unique.php. Ok, agora zoom in A idea aquí é abrir un ficheiro, ler en arquivo liña por liña. Para cada liña no ficheiro imos ter unha matriz onde temos  a liña como a nosa clave. E entón, cando chegamos ao fin aquí Chaves $ arr son as liñas exclusivas a partir do ficheiro, pois sabemos que se eu poñer en liña esta matriz varias veces vai só manter substituíndo o valor de idade, e podemos realmente poñer liña matriz como si só como aquel. Isto é medio raro. Estamos almacenando o mesmo valor de clave par máis e máis e máis unha vez, pero xa que está garantido que haberá só unha tecla chamada liña Entón, se temos un arquivo que di un arquivo de sons de animais e au, au, Miau Miau, Moo, Moo, e cada vez que lemos un ruído animal para fóra como trama e almacena-lo na nosa matriz temos trama, e despois a segunda vez gardados trama que vai substituír a primeira vez que o gardou. Ao final, imos ter só unha entrada na matriz para cada un dos ruídos de animais no noso arquivo de ruídos animal. Vostedes senten seguros de que pode resolver a apertura dun arquivo en PHP? Unha forma de facelo, imos por este camiño rapidamente, de facelo é con fopen, como vimos anteriormente. Pode fopen some_file.txt. Podes abri-lo en modo de lectura, así como en C. Esta é unha maneira perfectamente boa para facelo. Tamén, a continuación, para lectura no ficheiro liña por liña teñen as mesmas funcións, moitos deles, que fixo en C. Tes fgets. Tes feof, aínda que non gusto de usar que porque, lembre, que non era grande na C. Podes facelo do mesmo xeito, pero aquí é unha cousa moi legal. Sentímolo, eu non quero facer $ ficheiro, pero non hai unha función chamada de arquivo en PHP, e esta función aquí é legal porque le todo o contido do ficheiro que se especifica, de forma some_file.txt, le todo o contido deste arquivo nun array e entón permite percorrer, o que é moi bacana. Ou tamén, por exemplo, para o noso navegador e miramos a Google para o arquivo PHP podes ver aquí que o noso guía di que le ficheiro enteiro nunha matriz, e podemos file_get_contents para voltar o contido dun arquivo como unha cadea, pero normalmente só recibindo-o como unha matriz é moi bo porque o que fai e rompe-lo para que cada elemento na matriz é unha liña do ficheiro, por iso, se olharmos para o ficheiro 0, que é a primeira liña do ficheiro. Ficheiro de unha liña, en segundo lugar, lima 2, a terceira liña, e así por diante e así por diante. Non sería bo se iso era todo o que tiña que facer en C? Moi bacana. David amosou iso na charla, eo idioma que mostrou foi que, ademais do noso patrón de loop en PHP tivemos que é ($ i = 0; i <10, i + +), e pode facelo en PHP tamén, mesmo Tamén temos esa construción legal chamado foreach. Foreach é realmente útil cando iterando arrays ou estas estruturas de datos porque permite que retire cada elemento da matriz sen ter que facer a man a indexación mesmo, sen ter que crear manualmente unha variable de índice, increméntase o, puxe o valor na matriz nese punto, porque iso é unha cousa moi común de facer. Probablemente xa fixo iso toneladas de veces en que estaba facendo cousas C ao longo do semestre, así con este foreach podemos varrer esa matriz arquivo, ea sintaxe é que queremos agora loop sobre esta matriz e especificar que a variable que imos usar para almacenar o elemento de matriz neste lugar, local para o ámbito deste loop foreach, e imos chamalo de liña. Se é un ficheiro de só palabras e non hai unha palabra nunha liña poderiamos chamalo de palabra, así como, en realidade só dar a este un nome, o que sexa chamalo, e despois dentro do loop, pode facer o que quere con esta liña variable. Se non é o suficiente para obter o valor da matriz e tamén quere obter o índice xunto con el pode especificar un nome para o índice así como o valor, e agora ten acceso a dúas variables. Ten $ i e liña onde $ i é o índice na matriz, e liña é a liña que recuperou o arquivo. Por exemplo, se quixésemos imprimir echo 0 liña do ficheiro coma este, podemos facelo só como este, "Liña $ i do ficheiro é de R $ liña", e aquí é algo que tampouco vin aínda quere onde só totalmente ignorados durante este% s% d todo negocio que tivemos que xestione a C, e, en vez eu fun directo para o escribir as variables en liña na miña cadea. Iso é chamado de interpolación de variables, string interpolación onde está enchendo as variables na dereita, eo intérprete PHP é intelixente o suficiente cando se está lendo a través dunha cadea que comeza coa dobre cita non comiñas simples, cunha cadea entre apóstrofos non pode facer iso- pero co dobre de cadeas entre comiñas como se le por el está a ollar para as variables. E caza-los, e se ve variables que levará o valor da variable e enche-lo para a cadea se pode convertelo en unha representación de cadea, o que é moi bacana. De momento, imos comentar o resto de todo, gardar este, eo que podemos facer agora é que podemos abrir un ficheiro que podemos chamar de some_file.txt-imos crear un novo arquivo e podemos poñer en unha morea de cousas sen sentido aquí só para probar todo para fóra, garda-lo, chama-lo some_file.txt, como eu estou facendo aquí enriba no cumio, e agora, se eu reducir só para asegurarse que todo está no mesmo directorio parece que eu teño unique.php e some_file.txt no mesmo directorio. Se eu executar unique.php php ver como imprime cada liña no meu arquivo e que a liña é? Isto é moi poderoso, non? Mira, que levou 3 liñas de código para abrir un arquivo. Ben, catro liñas de código. Eu non podo contar, hoxe, claramente. Pero realmente só dúas liñas interesantes de código, porque os outros 2 foron as claves, pero neste código moi fomos capaces de abrir un arquivo, percorrer-lo, puxe o número da liña e da propia liña e imprimir lo. Cousas legais. Charlotte. [Charlotte] Eu teño unha pregunta sobre a sintaxe. Entón foreach trata sobre cada liña do ficheiro que abrir, e entón, cando quere facer as cousas con cada liña que acaba de facelo como e, entón, asociar o valor. [Nate H.] O que podes facer aquí, a cuestión foi o foreach ten que ver coa matriz, para sintaxe foreach é realmente foreach, e observe que non hai espazo ou calquera cousa entre a ea cada. Eles teñen que ir cara á dereita a carón do outro, e iso leva a unha matriz, e entón ten esta outra palabra clave chamada como que ten que estar alí, e logo o que pode pór un nome de variable, caso en que vai estar retirando os valores da matriz, non os índices, ou se fai iso, como temos escrito embaixo incorporarse as claves e os valores. Tes elemento foreach da matriz ou par da matriz como introducido ao valor ou só como valor. Dependendo do que precisa, se non precisa de chaves, entón podes ir con o valor. Se queres as teclas que pode ir con eles tamén. [Charlotte] Eu tamén entender que nunca declarou o I ou liña. Como ela mesmo sabe o que son? [Nate H.] O que quere dicir con declarar? [Charlotte] Nunca dixen a eles que eu ou liña de medio. [Nate H.] Nunca dixo o ordenador que eu ou liña significa en termos de- [Charlotte] de que eles están indexadas ou que están- [Nate H.] Nós nunca contou que este é suposta ser o índice ou a clave eo valor, e iso é porque ese é o intérprete de PHP. Isto serve como declaración e di que está ben, a clave será unha variable chamada i almacenado nunha variable chamada i. O valor que vai ser almacenado nunha liña variable chamada, de xeito que este serve como declaración destas variables e di $ i é unha chave, e US $ liña é un valor. Si, Ella. [Ella] Se as chaves non son feitas numéricamente como é que decidirá cal orde que vai imprimir todo? É exactamente como a orde en que entrou en? [Nate H.] Imos darlle un intento. Imos crear unha variable chamada arr, e podemos facer un vai para o 7. Imos dicir que 0 vai a outra matriz con 1, 2 ou mazá. Digamos 7 vai 1, b vai para 2, e 3 vai 4. Este é un tipo de exemplo tolo buscando porque estamos mesturando cadeas e enteiros en todo o lugar. Non hai ningunha orde real a esa matriz. Quero dicir, nós pode pedir todo en orde alfabética por as chaves. Poderiamos pedir todo en orde alfabética polo valor. Poderiamos tentar e ter en conta que algúns son cordas, algúns son ints, e nós poderiamos tentar convertela los todos para o mesmo tipo e ver o que acontece, ou poderiamos considera-los no valor en que xa foron escritas onde imos poñer esa cara no primeiro, este cara na segunda, esa cara en terceiro, este cara na cuarta, etcétera. Imos ver o que acontece cando executamos este código. Se rolar para abaixo e facer o mesmo tipo de cousas, e aquí non é imprimir as novas liñas. Cando se le cousas fóra do ficheiro que foi incluíndo as novas liñas nos valores, que foi por iso que imprimiu ben, mentres aquí iso non aconteceu, é por iso que todo é esmagado xuntos. Imos engadir nesa nova liña só para facer cousas boas. Imos executar de novo, e entón aquí ollar para o que aconteceu. É impreso todo orde en que poñelas na matriz. Fai preservar a orde nese sentido. Volvendo a este problema de únicos onde queremos ser capaz de iterar sobre un ficheiro, e nós imos dar-lle some_file.txt, e imos iterar sobre el coma este. Nós dixemos que queriamos usar unha matriz para estar seguro de que temos todo o liñas exclusivas de alí, e nós poderiamos facelo moi facilmente por só almacenar nunha matriz que, por suposto, declarar fóra do ámbito dun ciclo, e dixo que, se usamos as liñas no ficheiro como as claves na nosa matriz se entramos nunha liña duplicada estariamos substituíndo o valor anterior. Non é sempre posible ter dúas chaves que son idénticos na mesma matriz. Podemos facelo. Nós imos nos librar desa declaración eco aquí. Aquí estamos almacenando a liña no ficheiro na nosa matriz utilizándose como a clave. Nada para el, e verifícase que non precisa aínda de esta chave. Nós non precisamos que variable. Neste punto, se fose facer outro lazo foreach e nós para loop sobre cada arr e liña agora eco-oops, desculpe. Non podemos utilizar a coma. Temos que usar isto como contrasinal. Agora, se nós echo liña debemos obter todas as palabras orixinais na arquivo. Ou tamén ata some_file.txt, e digamos que facemos mazá, bananas, mazá, mazá, plátano, se estamos a imprimir todas as palabras únicas neste arquivo que só debe comezar mazá e plátano para imprimir. Se gardar este, agora aquí imos zoom in, php unique.php, e ta-da. Nós éxito uniqued o arquivo. A parte final deste problema está lle pedindo para clasificar esta matriz antes de imprimiu porque neste exemplo sinxelo que acabamos de facer tivemos sorte no sentido de que o arquivo fixemos este exemplo ficticio con mazás e plátanos. El xa estaba clasificada. Pero usando a función de clasificación simple que pode clasificar unha matriz, que é moi bacana. A última cousa que eu quería falar con vostedes sobre realmente rápido é que este tipo de PHP é todo moi ben, e é super accesible saber como facer, se precisa de facer pequenas, cousas rápidas de programación. Por exemplo, se eu teño escribir un programa que, digamos, pon todo en seccións eu non estou indo a ir e escribir en C. Vai ser longa. Vai ser unha especie de dor, especialmente se existen ficheiros implicados, así como vostedes viron. É tan bo que con só este código moi ben aquí fomos capaces de rasgar a través dun arquivo, elimina todos os valores exclusivos e imprimir-los de volta. Con todo, para as súas atribucións, para os seus proxectos, se está construíndo sitios con PHP é que o poder estamos executando nosos arquivos PHP través deste intérprete, eo intérprete está procesando todo dentro das etiquetas PHP, deixando todo máis intocada e cuspindo os resultados. Podemos facelo para construír HTML programaticamente. Agora, se volver para a especificación, o último problema na especificación fala sobre esa idea de concentracións e creación dun menú desplegable, que pode ou non quere facer, dependendo do que o seu proxecto final está facendo, que permite ó usuario seleccionar a partir dunha lista de todos os posibles concentracións unha a súa concentración. Agora, este é un tipo de dor que escribir iso e ten que facer todo isto manualmente, especialmente cando está tendo para asegurarse que ten todos os corchetes no lugar seguro e as comiñas no lugar seguro, así co PHP, pode facelo programaticamente, e pode facelo moi rapidamente. Imos ver como facelo. Nós imos abrir un novo arquivo. Imos poñer nas nosas tags do PHP. Imos chamalo de concentrations.php, e agora, cando está facendo iso, unha especie de cousa boa para pensar cando está intentando mesturar e combinar o seu PHP e HTML é descubrir, ok, o que é a parte que quero xerar programaticamente? Cal é a parte que eu poida xerar programaticamente? É certo que pode facer todo o seu HTML dentro de bloques de PHP. Pode repetir todo o HTML como cadeas. Por exemplo, se quero comezar a facer as marcas seleccionadas dentro PHP Podo dicir eco, din seleccionar concentración = nome, e despois alí embaixo Eu podería ter outro tag eco ou outro eco chamado preto a selección. Esta é unha forma de facelo porque o que este é, literalmente, vai facer e imprimir esa cadea cando é executado a través do intérprete PHP, polo tanto, o resultado será HTML. Se eu gardar este ficheiro como é agora e eu corro concentrations.php php mira o que eu teño. Eu teño esa etiqueta pechar abrir selección. Se eu fose facer iso e eu fose para salvar este resultado para un arquivo, dicir, concentrations.html espera, parece que o l pasou para outro lado agora eu abrir aquí concentrations.html vedes que eu teño un arquivo HTML válido. É o tipo de raro? Estamos a usar PHP para crear HTML, crear HTML válido. A maneira que nós estamos facendo é que estamos só ter a impresión PHP HTML que queremos imprimir. Este é, literalmente, como sitios PHP están funcionando. Cando visita un sitio web que envía para algo como algo, algo, algo punto com barra index.php o ordenador é literalmente chamar index.php, executa-lo través do intérprete PHP, e calquera lixo sae está enviando ao seu navegador e dicindo ei, navegador, interpretar isto como HTML. O bo é que pode ser unha dor de escribir constantemente eco, eco, eco, eco e coloque todo en citas como esta, por iso, se quere escribir HTML que vai ser estático que se pode facelo así, poñelas fóra, pecha-lo, e aquí só poñer dentro das etiquetas PHP que coñece quere xerar programaticamente e, neste caso, é opción de etiquetas que son unha dor de xerar. Por exemplo, poderiamos xerar unha opción tags mil facendo algo parecido con iso, $ i <1000, i + + e dicindo o valor da opción de eco-= $ berros, eu non podo facer iso. Ben, imos tentar e ver o que acontece. $ I e entón dicir $ i