Doug LLOYD: Entón temos feito unha chea de traballo en C, e C é un moi legal lingua porque lle dá a capacidade de mergullo realmente baixo nivel nos seus programas. Nós comezamos a facer as cousas como realmente minuto manipulando bytes individuais da memoria. Lembre que os punteiros realmente permitir-nos de que a flexibilidade. Pero sempre que ter ese nivel de gran fino de detalle nos nosos programas? Probablemente non, non? E se nós imos ter un trade-off entre ser capaz de facer moi, moi cousas hora e moito grandes cousas que nós non temos que pensar sobre, non debemos aplicar estes realmente grandes ideas se xa están construídos en para nós, en xeral, para a construción de gran programas ou grandes proxectos, nós probablemente imos errar no lado ter máis cousas idioma construído en para nós, en vez de ter o material de baixo nivel. E é aí onde realmente ven en PHP. Agora, unha das razóns que ensinamos en PHP CS50 é que está fortemente inspirado por C. E, de feito, na miña opinión, hai realmente dous linguas progenitoras que son moi comúns hoxe en día. C e LISP. E son linguas progenitoras porque todos os demais programación moderna linguaxe que desenvolveu Desde entón está inspirado por unha ou outra sintacticamente. PHP é moi semellante sintaticamente a C, mentres que linguas como o Scheme, por exemplo, que pode ter oído, está fortemente inspirado por unha lingua LISP chamado, que é unha linguaxe máis vellos. Así, a razón pola que nós ensinamos PHP en CS50 é que, coñecendo C como fundamentalmente como facer neste momento, incorporarse PHP, que lle dá a capacidade de facer cousas nivel moito máis elevado que fai C, non é que moi de un obstáculo, porque xa ten o idea básica da sintaxe. C foi en torno de case 45 anos neste momento. PHP ten sido en torno de preto de 20 anos. E na medida en que 25 anos No medio, programadores determinou que serían moi prefiro ter habilidades de nivel superior, e os erros e loitas dos 20 anos de entre levou a PHP e outras linguas modernas. PHP unha gran selección de Idioma para software que allow-- para software isso-- onde cómpre facer cousas que en C son efectivamente complicada. Así, por exemplo, traballando con cordas en C é moi complicado, porque como sabemos, cordas en C son realmente só a arrays de caracteres. Non é un tipo de datos embutido. Ou quizais máis fundamentalmente, algo que nin sequera cubrir en C, E se ten que facer algunhas redes de ordenadores? Todo ben? C ten a capacidade de facelo, pero é tan arcano e tan difícil de realmente facer. Non sería bo se o linguaxe tiña, un xeito doado embutido para aplicar a rede? E PHP é unha linguaxe que fai que, ou facilita que, un pouco máis. Como dixen, PHP é moi fortemente inspirado por C. A sintaxe é moi similar. E así debe esperamos facer o transición dunha a outra un pouco máis suave do que algúns outras linguas pode ser. Para comezar a escribir PHP, pode abrir un arquivo coa extensión .PHP. Técnicamente esta non é realmente necesario, pero se quere cousas como sintaxe destacando en IDE, para que tipo nomes ou nomes de variables, funcións, vostede sabe, as palabras clave da linguaxe son destacadas nun cor específica, xeralmente quere nomear os seus arquivos con unha extensión de arquivo particular. Entón, nós temos o noso arquivo nomeado cun .PHP extensión, pero, a continuación, tamén con PHP, todo o código PHP que escribimos en que ficheiro debe ser colocado entre estes PHP delimitadores que vemos aquí na pantalla. Paréntese angular? Php para comezar. Entón escribimos todo o noso PHP código que queremos no medio. E logo ? soporte de ángulo para pechar. Se non se fai iso, entón o que vai pasar? Non vai fallar. Non vai realmente arruinar o noso programa. Pero non terá o efecto que queremos. O que vai ocorrer, realmente, é que cando nós tratamos e executar este programa, todo non entre eses delimitadores será impreso textualmente. Non vai efectivamente realizar o código, que vai só imprimir lo textualmente. Agora, por que é o caso? Entón, C é o que se coñece como unha linguaxe compilada. Probablemente está familiarizado con o paso de facer os seus programas, transformando os ficheiros .c e .h nun único executable co make, en especial a través Clang como noso compilador. PHP, porén, non ten ter este equivalente. PHP é o que se chama linguaxe interpretada. E o que significa isto? Ben, iso significa que non hai que converter noso código fonte para ceros e uns de antemán. Pola contra, hai un programa, que tamén é chamado PHP, que entende e PHP pode clasificar de facelo on the fly. Isto realmente non é exactamente preciso, pero é unha boa analoxía do que está pasando. É interpretar os ceros e uns en tempo real. E por iso, se non sabe como procesar algo, se non sabe como proceso PHP, probablemente quería poñer este texto en alí, non? Probablemente quería poñer o código alí, aínda que non é entre PHP-- os delimitadores PHP. Mas-- polo que non está pasando para borrar-lo para ti, é só ir basicamente descartalo lo. Entón vai para imprimir Lo á pantalla. Isto parece que é un mal cousa, pero a verdade é Vai ser realmente un O bo, como nós imos ver cando falamos PHP desenvolvemento web, porque iso significa que podemos intercalam PHP e HTML. Podemos usalos en conxunto para crear unha páxina web máis dinámico. Pero máis sobre iso na vídeo sobre o desenvolvemento web PHP. Entón, cal é a sintaxe PHP? Iso é o que este vídeo é todo. Imos falar sobre iso. Entón, para comezar, variables. Existen variables PHP. Hai só dous grandes diferenzas con respecto a C. A primeira é que non hai ningún tipo especificador. Non temos que dicir int, char, float, todas esas cousas. Non temos máis facelo. PHP é unha linguaxe moderna. Pode descubrir o que é tentando facer é facer unha mellor adiviñar, como o que estás a facer. Entón, iso é moi bo. A outra cousa é que todas as variables nomes ten que comezar por un sinal de dólar. Isto é só algo para acostumar. É un pouco raro, porque é para que o PHP pode entender o que é unha variable eo que non é. Así, cada nome de variable comeza con un sinal de dólar. Así, en C, poderiamos dicir algo así, int x = 54. Non temos máis facelo en PHP. Podemos só dicir $ x = 54. E poderiamos dicir, por exemplo, en C, se tivésemos pound-incluído o .h CS50 arquivo de cabeceira, poderiamos dicir frase cadea = "Este é CS50." Non temos que facelo en PHP, con todo. Podemos só dicir $ frase = "Este é CS50." E, de feito, corda é agora un tipo de datos built-in en PHP, ou mellor PHP entende o que é unha cadea. É separado a partir dunha matriz de personaxes como é en C. Todo o seu favorito instrucións condicionais de C aínda están dispoñibles para usar. Polo tanto, non hai gran transición. Podemos dizer-- podemos ter se declaracións como esta. se y $ 43, ou $ z = 15. Entón, iso é moi sinxelo. Podemos ter e máis. Podemos ter e else if. E notar algo moi bo aquí, e esta é unha especie de un destes vantaxes de PHP versus C, aviso cal a función que non estamos a usar aquí? Estamos a usar == para comparar un variable, $ nome, para unha cadea. Non podería facelo en C, non? Tivemos que usar unha función chamada SeqComp ou calquera ou StrEndComp dos seus curmáns afíns. E así xa vemos estas vantaxes. Non temos que facer algo como parvo ou que unintuitive como chamar unha función chamada StrComp se eu queira probar un valor igual a unha cadea. Eu podería usar só iguala iguais, como se eu puidese facer nada máis. Polo tanto, hai unha vantaxe. Ás veces, a propósito, pode ver máis como unha palabra, elseif. E iso é OK en PHP tamén. Entón, ás veces se pode ver iso. Non é un erro de dixitación. PHP realmente entende elseif. Non sei por que decidiu aplicar tanto, pero como xa vimos moitas veces en toda a nosa vídeos ata o momento, nós programadores adorar se podemos facer as cousas rapidamente, así librar-se de que o espazo é, aparentemente, unha gran vantaxe. Entón, iso é, e elseif. Temos tamén o operador ternário, recordo signo de interrogación colonos, para realmente curto formulario máis ou ramificación condicional. E, ao parecer, neste, o que estamos intentando facer aquí é atribuír a variable $ Carta verdadeira ou falsa, dependendo se $ var é un carácter alfabético. Entón, iso é moi semellante ao isalpha que estamos familiarizados coa dende C. Esta é unha especie de equivalente en PHP. A función é aparentemente chamado ctype_alpha, pero iso é como nós o facemos en PHP. Entón, todo isto vai ser é, se $ Var é unha carta, $ carta é certa. Se $ var non é unha carta, $ Carta é falsa. Temos tamén declaracións rede aínda. Recordamos os de C tamén. Na parte superior hai, é así que nós facemos algo así como get int ou obter cadea. Entón PHP ten que construído en. Non necesitamos máis da biblioteca CS50. Podemos só usar o readline función. O que isto vai facer é imprimir a mensaxe "O seu estado, por favor ", e, a continuación, palpebrar rápida á espera de que o usuario de entrada unha información. Agora, teña en conta o que máis podemos facer switch. Se xa usou antes, ten que se lembrar de que a chave limítase practicamente en números enteiros e personaxes, pero agora podemos utilizar cadeas. E, de feito, a instrución switch en PHP é un pouco máis flexible do que o seu primo de C. Loops. Así como condicionais, todo seus antigos favoritos aínda están alí. Temos lazos while que contan de 1 a 100, neste caso. Temos facer while que contar de 1 a 100, e temos para loops que contan de 1 a 100. Polo tanto, non hai gran salto. A sintaxe é moi moi exactamente o mesmo, só que agora estamos usando variable sinal de dólar, no canto de declarar variables enteiras ou algo así como que para os nosos contadores. Aquí é onde as cousas están un moito mellor que C, con todo. Arrays. Entón lembro cando eramos falando C, a fin para que poidamos crecer e encoller conxuntos de información, o que sexa necesario para clasificar de patrón a esta idea dunha lista ligada, porque matrices C foron fixadas en tamaño. Non podería reduci-los. Non poderiamos cultiva-las. Tivemos que recolocar a memoria e facer toda esta tolemia ou usar listas ligadas, que ocupan un espazo moi pouco máis. Pero en PHP, matrices son non fixa en tamaño máis. Poden crecer e poden encoller. Entón, de novo, nestes 20 anos que existía entre a primeira versión do C eo primeiro PHP liberación, decidimos que, vostede sabe, sería realmente grande se puidésemos facer. E así nós Implementar iso. Entón matrices PHP non son fixos en tamaño, e porque o PHP realmente non ten fronte orientados ao desenvolvedor nocións de tipos, podemos mesturar diferentes tipos de datos nas nosas matrices, tamén. Entón, nós nin sequera temos que usar todos enteiros ou todos os puntos de flotación, podemos ter unha mestura de todo distintos tipos en unha única matriz. Declarando unha matriz é moi sinxelo. É como calquera outra variable. $ N.º = array (1, 2, 3, 4), sendo unha función matriz que está construído en PHP que vai crear unha matriz para ti. Isto crea unha matriz de catro valores, números neste caso chamado $ N.º. E hai máis dunha forma de facelo. E nós estamos indo a vexo moito iso en PHP. PHP foi desenvolvido por moitos diferente persoas e crece e crece e crece. Hai xeralmente non só dous ou tres xeitos de facer algo en PHP, hai xeralmente como 10 ou 20. Aquí é só un común xeito de declarar unha matriz. $ N.º = cadrados de soporte 1, 2, 3, 4. Polo tanto, esta é unha especie de similar ao ángulo de C Br-- notación chaveta, en vez. $ - ou sería int N.º cadrado soportes igual chaveta 1, 2, 3, 4. En PHP é $ N.º = cadrado soportes 1, 2, 3, 4. Pero ambos exemplos aquí dáme un conxunto de catro neste caso enteiros. E se eu queira para alinhavar algo agora? Ben, podo só dicir $ N.º 4, que de novo, aínda estamos contando a partir de 0 aquí en PHP, sería o quinto elemento da matriz. Só podo dicir iso. Non vou sufrir un seg falla, porque a miña matriz é só vai medrar para acomodar isto. Iso é moi bo, non? E, de feito, eu nin teño especifique onde quero poñelas. Podo só dicir isto e só predica-la á dereita para a final, Ou eu podería incluso só dicir $ N.º 20 ou 1000. Realmente non importa. É aínda só vai predica-la á dereita para a final. Para que eu poida crecer, e estamos as-- non vai cubrir iso aquí, pero podo emendar ou tira elementos fóra da matriz, así como, ea matriz pode encoller para acomodar que o espazo agora ausente ou baleiro. Non hai outra forma de agarre algo sobre unha matriz, que é unha función chamada array_push. Entón, de novo, só esta idea de ser capaz de facer cousas moitas formas diferentes. Entón, nós vimos tres xeitos diferentes agora para alinhavar outro elemento nunha matriz. Polo tanto, este engade outro elemento ao final do array $ N.º. E podemos mesturar nosos tipos de datos. Entón, eu podería ter unha matriz de non 1, 2, 3, 4, pero 1, verdadeira, 3, 4, onde o verdadeiro é un booleano, e, a continuación, se eu queira adherencia noutro elemento para esa matriz, quizais unha corda, a cadea "cinco", eu podería facelo. E agora a miña matriz faría ser un, certo, 3, 4, cinco. A palabra de cinco, e non o enteiro 5. Entón, unha morea de flexibilidade alí. A flexibilidade queda aínda mellor, con todo, porque o PHP ten soporte para algo chamado unha matriz asociativa. E nós medio que vagamente falou matrices sobre asociativos en C no contexto de táboas de dispersión, porque o que arrays asociativos son realmente todo sobre está facendo clave mapeamento par valor. E neste caso, o keys-- se estamos familiarizados con matrices de C, as teclas son números de índice. 0, 1, 2, 3. E os valores son o que nós cremos que 0 matriz, matriz 1, conxunto 2, e así por diante. Entón as claves son índices, e os valores son que é no que lugar da matriz, especificado por este índice. Pero en PHP, non debemos facelo noción de matriz 0, array 1, conxunto 2 anymore. Podemos agora utilizar palabras reais para mapear as teclas de valores. E para que eu puidese dicir algo así. Podería crear unha matriz usando o sintaxe de corchetes deste xeito. $ Pizzas = paréntese "queixo" e, a continuación, este tipo de notación frecha dobre, 8,99, "pepperoni", arrow 10.99-- 9,99, etcétera. E entón o que está pasando aquí? O que eu estou realmente facendo? Estou creando mapeamento de teclas par valor. Entón, en vez de dicir, por exemplo, pizzas, 0 pezas 1, 2 pizzas, Agora podo dicir pizzas queixo, pizzas pepperoni, e refírense aos valores asociado con eles. Entón, aquí están as nosas chaves no verde. Queixo, pepperoni, vexetal, búfalo polo. Aquí é a frecha que fai esta chave de cartografía par de valor. E, a continuación, aquí están os valores en que lugar da matriz. Entón, é como dicir matriz 0 é igual a 8,99. A clave é 0. O valor é 8,99. Agora podo dicir queixo matriz, ou neste caso pizzas de queixo, o queixo é a clave, eo que eu atopar en pizzas queixo é 8.99. Ese é o valor que eu atopar alí. Entón eu podo dicir cousas como. $ Pizza de queixo = 7,99. Digamos que eu estou tendo unha venda. Quero dis-- quero botar o prezo do queixo de pizza. Ou podo usar o vexetal pizza como parte dunha condición, ou podo engadir un novo elemento para o meu array, así como eu podería facer antes. Podo engadir un novo elemento a esa matriz asociativa coa tecla "Bacon" eo valor 13,49. Pero este tipo de introduce un problema, se pensar sobre iso por un segundo. Como poderiamos facer unha iteración a través desta matriz? Non? En C, teriamos só ter un para loop, tipicamente, que correría de 0 ata o tamaño da matriz menos 1. A matriz ten n elementos en polo, o índices válidos son de 0 a n menos 1. Así poderiamos usar un loop for para percorrer cada elemento. Pero iso non é realmente máis o caso, non? Agora, onde temos un par de valores clave mapeamento onde as claves son palabras, como é que imos iterado sobre todas as palabras? Ben, por sorte, PHP ten unha forma de tratar con isto tamén, e por iso imos ir para atrás para loops para unha segunda a introdución dun cuarto tipo de lazo que existe en PHP chamado un loop foreach. E o que é un loop foreach fai é é basicamente a mesma idea. Pode usalo para calquera tipo de matriz. Pero é basicamente a mesma idea como un loop for, excepto en vez de usar números de índice, só ten esta sintaxe estraño onde chamar cada elemento un nome para os fins deste ciclo. Polo tanto, neste caso, foreach ($ array como $ key). Basicamente, como aquel comentario notas, dentro dese loop foreach, vai pasar por riba de todo elemento de array $, que é tipicamente vai ser unha matriz asociativa, pero realmente pode ser calquera tipo de matriz que quere en PHP. E cada vez que nos bucle que pode dixeron $ matriz corchetes $ I, podería só dicir $ key. De xeito que se fai $ key un alias para cada Índice de PHP matriz asociativa, e así pode usalo así. Así, por exemplo, temos agora temos a nosa disposición pizzas. Eu medio que enfiou- na parte alí para que poidamos usalo para facer un exemplo rápido. Se eu digo foreach ($ pizzas como $ Pizza), ben, o que está pasando? Ben, eu estou indo a percorrer cada único elemento da matriz $ pizzas, e ao facelo, eu vou chamar cada elemento, cando estou dentro do corpo do que para loop, $ pizza. Entón, iso é unha especie de dublê, recall, que a pizza $ é un stand-in para dicir $ Pizzas cadradas soportes $ i se estivésemos usando un loop for, onde nós Pode ir de $ i = 0 a, neste caso, $ I = 3. Se non tivésemos pares de valores clave aquí, este sería o elemento 0, 1, 2, 3, e queremos usar un loop for para ir $ 0 pizzas, pizzas $ 1, $ 2 pizzas, $ 3 pizzas. Entón agora $ só pizza está substituíndo para esa chave individual. Entón o que é que isto vai imprimir? Estou imprimindo $ pizza. Que vou atopar at-- se eu imprimir $ pizzas, $ i? Non? Se eu estou indo para imprimir o elemento i de pizzas, o que eu estou indo para imprimir? Eu estou indo a imprimir o valores nese local, non? Como se estivésemos facendo isto no contexto C, non adoitamos usar o noso iterador variable, int i = 0, i é inferior a 3, i ++, para imprimir a 0, 1, 2, 3. Estamos imprimindo matriz 0, matriz 1, conxunto 2, serie 3. E entón o que este imprime é este. É a lista de prezos. 8,99, 9,99, 10,99, 11,99. Agora unha nota rápida aquí. Un loop foreach non necesariamente imprimir as cousas en orde. Non se pode garantir. El xeralmente fai. É xeralmente con base na orde en que os elementos son engadidos á matriz, polo que ter isto presente. Non estea en orde. Pero un loop foreach ha iterado a través de cada elemento da matriz en cuestión. Neste caso, de novo, esa matriz é de R $ pizzas. Podo cambiar a sintaxe, porén, se Quero tanto a chave eo valor. No canto de dicir $ pizzas canto $ pizza, podo dicir iso. E se ollar para o que eu teño destacadas en verde aquí, el se parece unha clave de cartografía par de valor. E por iso, se você-- mesmo se non é enteiramente certo o que vai facer, probablemente pode adiviñar que US $ cuberta vai para ser a clave neste caso e R $ prezo será o valor. Entón, eu estou substituíndo agora cada elemento de US $ pizzas como unha parella de valores clave, e agora podo referirse á chave e o valor, o que pode ser útil, por exemplo, como segue. "A todo" - este é un monte de impresión suceder aqui-- "un conxunto" cobertura "pizza custa R $" prezo e, a continuación Eu imprimir un período e unha barra invertida n. Entón, agora, aviso outra vez eu teño acceso a unha chave, $ cuberta, e un valor, R $ prezo. Entón podes imaxinar o que iso vai imprimir? Hai unha morea de instrucións de impresión, pero só hai unha barra invertida n, polo que vai para imprimir algo en un entire-- nunha soa liña de código. Se eu pode referirse a clave eo valor, entón agora, no canto de só ser capaz para imprimir os prezos, Podo imprimir algo así. "Toda unha pizza de queixo custa R $ 8,99." E agora está a usar todo o keys-- queixo, pepperoni, vexetal, búfalo chicken-- e os valores. 8,99, 9,99, 10,99, 11,99 Así isto é só un xeito diferente para facer un loop foreach que en vez de só dándolle acceso aos valores, só dá vocę-- dálle acceso ás claves e os valores. Entón imprimir información. Eu xa fixen iso algunhas formas diferentes, ten que ter notado. As dúas funcións que temos sobre todo visto son impresión e eco. E para practicamente todos os intentos e propósitos, son exactamente o mesmo. They're-- hai unha moi sutil diferenza de que non é sequera paga a pena metendo, pero basicamente, en todas partes pode usar impresión probablemente pode usar ecoam tamén. E iso non é o único dous. PHP ten unha morea de diferentes formas de imprimir as cousas, e tamén ten formas de integrar variables para o medio da corda. Entón lembro C, vostede lembre que función que podemos usar para substituír variables en cousas que desexa imprimir? Probablemente usar esta funcionar moito. printf, non? Entón é iso que tivemos antes no interior do contexto do noso loop foreach. Tivemos estes cinco instrucións de impresión separados, porque esa era a única xeito que realmente sabía, na época como imprimir mensaxes. Eu non sabía como integrar o $ Variable superando no meu código PHP. Ben, se eu acaba de tomar un palpite, printf, realmente funcionaría. printf é unha función que podo usar en PHP, así como podo usalo en C. E así algo como isto, printf, unha vez máis, estamos familiarizados con iso. O primeiro% s substitúese co valor de US $ cuberta. O segundo% s substitúese co valor de $ prezo. E polo que estou interpelando, que é só un xeito elegante de dicir que eu estou unirse a variables que localización. Entón, eu estou conectando $ superando onde a vermello% s é e onde o prezo $% s azul é, e entón eu ía recibir a mensaxe, "Toda unha pizza de queixo custa R $ 8,99." Non é o único xeito que podo facelo, con todo. Poida que eu ía querer usar este método. Este é realmente o que é máis comunmente Interpelación chamado variable. Podo usar un eco. Eu podería usar un print tamén, como veremos. Pero o que está a suceder aquí? Primeiro de todo, eu teño que escapar do sinal de dólar. Porque lembre, cando estabamos realmente imprimindo os prezos das pizzas, Eu estaba realmente formato-los como valores monetarios con un sinal de dólar. Pero nós estamos usando sinais dólar tamén para representar os nomes de variables en PHP, e en particular cando estou usando este método do rizado variable cinta método interpelación, eu teño para escapar o meu signo do dólar para que non creo que eu estou falando sobre unha variable. Vai realmente, literalmente imprimir un sinal de dólar. Entón especie de analoxía para o que ve alí ao final. En realidade, non impresión barra invertida n, non? El imprime un carácter de nova liña. Isto é-- iso non vai impresión cifrão barra invertida, vai imprimir só un cifrão. A mesma idea. As secuencias de escape, o que esas cousas son chamadas. Pero teña en conta que non estou facendo calquera tipo de substitucións% s, Eu só estou literalmente conectar nesas variables. E así, en isto-- que pasaría aquí é que o valor de $ topping-- novo, só manter co que fomos falando de queixo tan far-- obtería conectado alí. E US $ prezo sería o valor que é en pizzas, corchetes, queixo, que era 8,99. E por iso este tamén imprimir "Toda unha pizza de queixo custa R $ 8,99." E como dixen, eu podería usar imprimir aquí en vez de eco, ea función sexa moi bonito exactamente o mesmo. Sería imprimir o mesmo. Non hai outra forma de facelo, e esta é outra vantaxe de PHP traballar con cadeas. Podemos facer concatenación de cadeas. Poderíamos facelo en C tamén usando unha función chamada strcat, pero, de novo, tivemos que chamar funcións separadas. Foi toda esa confusión que facer. Tivemos que pound-inclúen string.h. Foi unha produción, non? Pero agora eu só podo usar este operador punto para concatenar cadeas. Entón, eu estou concatenando "un conxunto" e a continuación, calquera que sexa o valor de US $ cuberta é, e logo outro corda, "custos de pizza $" e, a continuación, sexa cal sexa a concatenación o valor de R $ prezo é, e entón, ao final, eu son adherencia en período de barra invertida n. E así este sería tamén imprimir "un todo" - unha vez máis, se estamos a falar sobre o primeiro elemento desa array-- pizzas "Toda unha pizza de queixo custa R $ 8,99." Período, barra invertida n, de novo, con os US $ cuberta e prezo $ substituíndo para o que tiñamos especificado na nosa foreach lazo como a clave de cartografía par de valor. PHP pode manipular funcións. Funcións foron tipo de integrante ao C, como vimos. Como variables, non ten especificar o tipo de retorno da función, porque realmente non importa. E nós non especifica o tipos de datos de todos os parámetros, porque realmente non importa, como vimos en PHP. Cada función é introducido coa palabra clave función. É así que nos indican a PHP que o que estamos a falar é unha función. E nós non temos que xestionar principal de todo, porque o intérprete, o PHP intérprete, funciona de arriba abaixo, independentemente. Se ve que pode facer unha chamada de función, que vai ir atopar a chamada de función, aínda que só vén despois. Pero só pode ler de arriba inferior, polo tanto, non é necesario especificar, aquí é onde comeza. Comeza na liña 1 do seu PHP e traballar para abaixo de alí. Entón aquí está como nós criaríamos unha función chamada hard_square. El aparentemente leva un parámetro, que eu estou chamando $ x. Esta función é complicado só para ilustrar moitas cousas. Aínda temos valores de retorno. Eu estou usando un loop for aquí. Pero é basicamente só, que este significa só US $ x $ x veces. O que eu estou realmente facendo é só engadindo x para 0 x veces ou US $ x a cero $ x veces. Pero é exactamente o eficazmente aínda que multiplicar $ x $ x veces. Aínda pode voltar un valor, neste caso $ result, e eu fixen unha función en PHP. Vexa como pode usalo no contexto. Entón, talvez eu estou dentro dalgún arquivo PHP. Observe en azul alí que Eu usei os meus delimitadores PHP soporte de ángulo signo de interrogación php. Entre eses son todos PHP que quero escribir. Entón, eu estou indo a get-- aparentemente Vou pedir ao usuario para me dar un número, tenda que variable, tenda en que variable $ x, o que quere que eles me deron. Entón eu vou para ecoar hard_square dese valor, e ao parecer vai a adherencia nunha nova liña ben, e despois, máis tarde, eu vou definir a función de forma hard_square que cando fai o chamar a hard_square, el sabe o que eu estou falando. Agora, eu tamén podería facer algo así. Isto é un pouco diferente. É case exactamente o aínda que o que vimos antes, excepto no canto de dicir só US $ x alí como o parámetro para hard_square, Eu digo $ x = 10. Polo tanto, este é un exemplo de programación defensiva, gardando os seus programas contra usuarios mal intencións. Esta é unha forma de facer un erro verificación de que realmente non ten como unha opción no C. Nunca podería especificar o valor por defecto de algo. Sempre tivemos que check- a, por exemplo, se fixo un chamamento para GetString, foi máis adecuada inmediatamente despois nós verifiquei que fixemos o check- a cadea que o usuario deunos non é igual a cero, porque non quero comezar traballar con unha cadea nula. Aquí, esta é unha forma para protexerse contra iso. Se o usuario non proporcionar-nos algo dalgún xeito, o que imos facer? Ben, imos só dicir o que quere non proporcionar-nos, nós só estamos indo para a conexión de 10 en vez. Entón, se eles non nos deu un valor, é só usar 10 por defecto. E por iso aquí, notar que eu estou facendo unha chamada hard_square, pero non hai ningún poder para o usuario, non? Eu só estou facendo unha chamada baleira. Pero a miña función hard_square está esperando un parámetro. Que isto vai imprimir? Vai imprimir 100, non? Porque o usuario non está darme algo. E entón eu só vou asumir que 10-- 10 é o valor predeterminado. E así isto debe imprimir a 100 na súa propia liña. Arquivos PHP non ten que ser só un único ficheiro. Pode combinar varios ficheiros xuntos, Así como pode en C. A forma nós fixemos iso en C foi tipicamente de facer unha # Include para ficheiros de cabeceira levado. Nós non facemos iso en PHP. Facemos algo chamado require_once. E despois hai toda esta cousa, o que é iso __dir__? Isto é só unha especial variable ou constante especial, realmente, que especifica o que seu directorio actual. E así que vai mirar no seu directorio actual para un ficheiro chamado cs50.php Neste exemplo aquí, e só pode ir o ficheiro na parte superior do seu programa PHP supoñendo que poñer o esixir xa liña na parte superior do seu arquivo PHP. Entón PHP é usado principalmente, pero non utilizados exclusivamente, como unha linguaxe para programación baseada en web. Isto é realmente como chegou a ser. Pero é un enteiro lingua, como xa vimos. Vimos practicamente todas as cousas que pode facer que soarán C, e pode facer un inferno de moito máis que iso. Senón porque é unha lingua completa e nós pode facer programación de liña de comandos na mesma. Podemos realizar programas de liña de comandos. Todo o que é necesario para executar un comando programa de liña que está escrito en PHP é que ten un intérprete de PHP. Entón, é unha especie de análogo ao ter un compilador no seu sistema se quere compilar o código C para transformalo en arquivos executable. Ten que ter un intérprete PHP que existe no seu sistema de modo que pode interpretar arquivos PHP. Supoñendo que, e, xeralmente, este intérprete chámase PHP e normalmente ven con máis descargas ou instalacións de PHP que pode obter en liña, e, por suposto, o nome do intérprete PHP temos en CS50, IDE. Todo o que fai é ficheiro php tipo. E o seu programa de vai facer é que é vai percorrer o intérprete, é vai ignorar todo o que é non en cuestión entre mark-- ou, ángulo do soporte de interrogación php, os delimitadores PHP, e imprimir lo, e ha interpretar e executar o código dentro dos seus delimitadores PHP. Entón, imos estalar sobre a IDE e CS50 ter un ollar para un par de arquivos PHP, executando un par de arquivos PHP en interface de liña de comandos de CS50 IDE. Entón, aquí estamos en CS50 IDE, e eu tomei a liberdade de abrir un arquivo chamado hello1.php. E, ao parecer, o contido deste ficheiro só os delimitadores PHP alí, e no medio, echo ("Ola, mundo"). Este é un programa moi sinxelo PHP. Eu só vou para rolar para abaixo na miña fiestra de terminal aquí, e eu estou indo a escribir php hello1.php, presione enter. Hola Mundo. Isto pode ser o que eramos esperando que facer, non? Imos subir e tomar outro ollar para un programa. hello2.php. Practicamente o mesmo, non moita cousa a ocorrer aquí. Esta vez, porén, eu estou indo a solicitar o usuario para me dar os seus nomes. Eu estou usando esa función readline novo. $ Name = readline. Esa é a mensaxe, "Cal é o seu nome?" Aparentemente son impresión Lo na súa propia liña. E, a continuación, para que a liña a continuación que será o poder onde o usuario pode escribir o seu nome. E entón eu estou usando un pouco de Interpelación variable aquí na liña 3 para imprimir "Ola" e todo o que o usuario escribe. Polo tanto, este é análogo a dicir, Ola, coma,% s se estivésemos usando printf en C. Entón imos e interpretar este programa. Entón, de novo, eu vou rodar abaixo na miña fiestra de terminal. hello2.php php. Cal é o teu nome? Doug. Ola, Doug. Eu tamén teño outro ficheiro chamado hello3.php. Eu estou indo a limpar a miña pantalla con control L, e eu estou indo a executar iso. Cal é o teu nome? Doug. Ola, Doug. Así, o comportamento é o mesmo que o hello2.php, pero por que é hello3.php? Ben, aquí está a diferencia. Neste caso, a notificación que na liña 1 aquí, Eu teño algo que non é entre os delimitadores PHP. Eu só estou imprimindo out-- ou I acaba de escribir, "Cal é o seu nome?" Cando o intérprete PHP ve iso, non ten idea de como interpretalo como PHP, e así, en vez de falla, el só vai para cuspídela. Entón, observe en liña 3 agora, a miña chamada readline, non hai ningún ventá de máis. Eu só estou indo realmente cando a-- o intérprete PHP ve iso, vai imprimir "Cal é o teu nome?" A continuación, el ve Oh, ben, here's-- o resto será interpretada como PHP, entón por iso é que iso funciona. Non teño que pedir necesariamente a-- o usuario dentro da readline, Podo só telo fóra dos delimitadores PHP e facer que o intérprete só imprimir lo para min. Entón, o que realmente non ten soamente ter un conxunto de delimitadores PHP no seu programa. Realmente pode ter varios deles, abrindo e pechando a eles cando é necesario. Entón, imos dar un ollo nun par de programas en CS50 IDE onde nós ilustrar esta idea de ter varios conxuntos de PHP delimitado. OK, entón eu xa abriu un ficheiro aquí chamado add1.php. E teña en conta o que está a suceder aquí. Tal como antes, eu teño un PHP único conxunto de delimitadores. Eu estou indo a imprimir o mensaxe, "Por favor, me dar un número." Entón eu vou ler unha fileira e almacena-lo na variable $ num1. Entón eu vou imprimir de novo. Dáme un segundo número. Ler unha liña do usuario, tenda o que escribiu en $ num2. Engadila los xuntos e almacenar ese producir unha variable chamada $ definitiva, e, a continuación, imprimir, "The suma destes dous números é ", a continuación, interpelar hai os R $ suma variable. Entón imos realizar este a través do intérprete para confirmar que isto é o que esperamos. add1.php php. Por favor, me dar un número, tres. Por favor, me dea un segundo número, 4. A suma destes dous números é 7. Iso é 3 + 4. OK? Polo tanto, nada terrible sofisticados alí. E agora imos abrir add2.php. Aquí, eu teño un par de PHP conxuntos delimitado alí, non? Liñas 1, 3-- liñas 1 e 3 ten non delimitadores PHP. Así, cando o intérprete velos, é só vai cuspir exactamente o que escribiu alí. Entón é aí onde eu son facendo toda a miña solicitude. Nas liñas 2 e 4, vemos a moito $ Familiar? Php tipo de delimitadores, para que estas dúas liñas son vai realizar como PHP. E, a continuación, na liña 5, eu teño esa cousa estraña aquí, non? Este soporte de ángulo punto de interrogação signo igual. Vou ata ampliar un pouco máis lonxe. Podes ver que é o que eu son falando alí, este $? =. Acontece que é tan común que a razón que nos abrimos un conxunto de PHP delimitadores é imprimir un valor. E iso é todo o que imos facer. Pero hai aínda unha abreviación para iso. $? = É un atallo para dicir PHP algo como US $? php echo a suma num1 e num2 de. Polo tanto, este é só un Abreviatura para iso. Entón, se eu executar este programa, php add2.php. Vou aumentar un pouco para abaixo. Por favor, me dar un número, 4. Por favor, me dea un segundo número. E dende que eu realmente non me importa sobre tipos de datos en PHP, podo dicir 4.8. A suma destes dous números é de 8,8. Esa función compórtase moi ben exactamente o mesmo como era de esperar, ben. E eu teño unha aberta aquí chamado dice.php. Ténteo de novo. Eu teño un chamado máis aquí dice1.php, que tamén, ver, ten esta pregunta paréntese angular marcar notación igual sinal alí, de ter en conta que, neste caso, eu son chamando a función rand, que como Pode esperar que xera un número aleatorio. "Vostede rolou un", e só pode calcular algún número aleatorio, mod 6 + 1. De xeito que vou dar o número na gama de 1 a 6. Lembre que mod 6 me daría un número no rango de 0 a 5, pero se eu estou simulando xogadas de datos, que é o que estou facendo aquí, Non quero eses datos para ir de 0 a 5, quero datos que van de 1 a 6. E polo que esta é unha forma de obter me na gama de 1 a 6. Estou facendo iso dúas veces. Entón, ao parecer, eu estou rodando dous datos neste programa. Entón, eu vou limpar miña pantalla, e eu vou facer php dice1.php. Vostede rolou un 4 e un 2. E se eu executar o programa de novo, rolou a 5 ea 5. Entón, cada vez que eu realizar o programa, Estou recibindo números diferentes, xa que cada vez que fago Entón, é comezar de novo. Vai xerar un novo conxunto de números aleatorios para min. Entón, se estamos afeitos a execución de programas de C, estamos afeitos escribir o ./ nome dun programa, non? Isto é como fixemos todo dos nosos programas en C ata o momento. Podemos facelo en PHP, así engadindo algo chamado un shebang arriba do noso arquivo PHP. Sei que é unha especie de palabra boba. É curto para hash de estrondo. Iso é os dous primeiros caracteres alí. Lembre que chamamos signo de admiración frecuentemente un estrondo en ciencia da computación. Tamén pode ser para estrondo afiado. Hai algunhas formas de interpretar iso. Pero é basicamente un tipo especial de comandos que o intérprete PHP entende como, oh, quero executar este programa, que é aparentemente / user / bin / php, que é, en realidade, onde o intérprete PHP vive especialmente no noso sistema. Entón it's-- que pasa aquí é o intérprete entende, oh, Estou aparentemente debería usar neste programa para realizar ese ficheiro. E así el permite que para saltar a etapa de ter que dicir php something.php. Hai outra captura aquí, que é o que se queremos que os nosos programas para funcionar como se esperaba, nós cómpre facer algo chamado un cambio de permisos de arquivo. E nós imos vai-- e falamos un pouco pouco máis cambios de permiso de arquivo sobre no noso vídeo sobre MVC, pero basta dicir que este é o que ten que facer a fin de facer a súa arquivos .PHP executable. Entón, imos dar un ollo a como esta noso exemplo final sobre a CS50 IDE. Entón, aquí no IDE Teño dous ficheiros nesta Directorio PHP que parecen non ser chamado .PHP. Eu teño unha función chamada add-- Eu teño un arquivo chamado Add3 e un ficheiro chamado dice2. Entón, imos dar unha rápida mirar e abrir Add3. E como se pode ver, a principios do meu arquivo eu teño esa cousa toda, non? Este punto de hash signo de admiración. Agora, tamén vai talvez Lembre que por algún motivo, Non teño ningún sintaxe destacando máis, e iso é o que me referín anteriormente, Que foi o que se eu non citar meu arquivo .PHP, eu non teño o beneficio destacado de sintaxe máis. Este ficheiro é chamado só de Add3. Para que eu poida executa-lo máis tarde con ./ Add3 e non ./ add3.php. Así, a razón aínda é fino, aínda é válido PHP pero non é a sintaxe en destaque, porque este ficheiro non se chama something.php. Esa é a única diferenza real aquí, máis a cousa toda. Entón imos ver o que acontece cando Eu intento e executar este programa. ./ Add3, así como eu faría C. Bash. ./ Permiso Add3 negado. Isto é o que está indo para ver se esquecer usar o comando chmod para cambiar os permisos do arquivo. Como se constata, PHP regulares arquivos non pode só ser executado. Poden ser interpretados, pero estamos facer algo un pouco diferente aquí. Estamos executalo. E así que eu teño para engadir o permiso de execución, chmod a + x para Add3. Entón eu podo dicir ./ Add3. Por favor, me dar un número. 5, 6. A suma destes dous números é 11. Do mesmo xeito, eu xa chmoded dice2, para que eu poida escriba ./ dice2, vostede rolou un 1 e un 1, laminados en 5 e un 4, e así por diante. Entón, iso é moi fermoso o idea dunha sintaxe PHP, non? Hai moita cousa para pasar, eu sei. Pero espero que viu agora que o PHP que non é realmente diferente de C e realmente dános a posibilidade para levar as cousas un entalhe ou dous. Nós realmente non se preocupe moi about-- nós realmente non ten que preocuparse moito con os detalles de baixo nivel nós tiña que preocuparse C, non? Podemos concentrar-se na maior material nivel que o PHP nos permite facer e levar a seguro que vai traballar para nós. Por iso, nos dá a capacidade agora, a transición de C para PHP, para facer programas que son moito máis complexo e quizais moito máis robusto. Entón, eu espero que teña traballo divertido con PHP, e eu son Doug Lloyd. Este é CS50.