DOUG LLOYD: Então nós temos feito um monte de trabalho em C, e C é um muito legal língua porque lhe dá a capacidade de mergulhar realmente baixo nível em seus programas. Nós começamos a fazer as coisas como realmente minuto, manipulando bytes individuais da memória. Lembre-se que os ponteiros realmente permitir-nos de que a flexibilidade. Mas nós sempre precisa ter esse nível de grão fino de detalhe em nossos programas? Provavelmente não, certo? E se nós vamos ter um trade-off entre ser capaz de fazer muito, muito coisas hora e muito, muito grandes coisas que nós não temos de pensar sobre, não temos de implementar estes realmente grandes idéias se eles já estão construídos em para nós, em geral, para a construção de grande programas ou grandes projetos, nós provavelmente vamos errar no lado de ter mais coisas idioma construído em para nós, em vez de ter o material de baixo nível. E é aí que realmente vem em PHP. Agora, uma das razões que nós ensinamos em PHP CS50 é que é fortemente inspirado por C. E, de fato, na minha opinião, há realmente dois línguas progenitoras que são muito comuns hoje em dia. C e LISP. E eles são línguas progenitoras porque todos os outros programação moderna linguagem que desenvolveu Desde então é inspirado por uma ou outra sintacticamente. PHP é muito semelhante sintaticamente a C, enquanto que línguas como o Scheme, por exemplo, que você pode ter ouvido, é fortemente inspirado por uma língua LISP chamado, que é uma linguagem mais velhos. Assim, a razão pela qual nós ensinamos PHP em CS50 é que, conhecendo C como fundamentalmente como você fazer neste momento, pegar PHP, que lhe dá a capacidade de fazer coisas nível muito mais elevado que faz C, não é que muito de um obstáculo, porque você já tem o ideia básica da sintaxe. C tem sido em torno de quase 45 anos neste momento. PHP tem sido em torno de cerca de 20 anos. E na medida em que 25 anos No meio, programadores determinou que eles seriam muito prefiro ter habilidades de nível superior, e os erros e lutas dos 20 anos de entre levou a PHP e outras línguas modernas. Do PHP uma grande escolha de idioma para software que allow-- para software isso-- onde você precisa fazer coisas que em C são efectivamente complicada. Assim, por exemplo, trabalhando com cordas em C é muito complicado, porque como sabemos, cordas em C são realmente apenas a arrays de caracteres. Não é um tipo de dados embutido. Ou talvez mais fundamentalmente, algo que nem sequer cobrir em C, E se você precisa fazer algumas redes de computadores? Tudo certo? C tem a capacidade de fazê-lo, mas é tão arcano e tão difícil de realmente fazer. Não seria bom se o linguagem tinha, uma maneira fácil embutido para implementar a rede? E PHP é uma linguagem que faz com que, ou facilita que, um pouco mais. Como eu disse, PHP é muito fortemente inspirado por C. A sintaxe é muito similar. E assim deve esperamos fazer o transição de uma para a outra um pouco mais suave do que alguns outras línguas pode ser. Para começar a escrever PHP, basta abrir um arquivo com a extensão .php. Tecnicamente esta não é realmente necessário, mas se você quiser coisas como sintaxe destacando em IDE, de modo que tipo nomes ou nomes de variáveis, funções, você sabe, as palavras-chave da linguagem são destacadas em um cor específica, você geralmente quer nomear seus arquivos com uma extensão de arquivo particular. Então, nós temos o nosso arquivo nomeado com um .php extensão, mas, em seguida, também com PHP, todo o código PHP que escrevemos em que ficheiro tem de ser colocado entre estes PHP delimitadores que vemos aqui na tela. Colchete angular? Php para começar. Então nós escrevemos todo o nosso PHP código que queremos no meio. E depois ? suporte de ângulo para fechar. Se não fizermos isso, então o que vai acontecer? Ele não vai falhar. Ele não vai realmente arruinar o nosso programa. Mas não vai ter o efeito que queremos. O que vai acontecer, realmente, é que quando nós tentamos e executar este programa, tudo não entre esses delimitadores vai ser impresso textualmente. Ele não vai efectivamente executar o código, ele vai apenas imprimi-lo textualmente. Agora, por que é o caso? Então, C é o que é conhecido como uma linguagem compilada. Você provavelmente está familiarizado com o passo de fazer seus programas, transformando os arquivos .c e .h em um único executável com o make, em especial através de Clang como nosso compilador. PHP, porém, não faz ter este equivalente. PHP é o que é chamado de linguagem interpretada. E o que isso significa? Bem, isso significa que não temos de converter nosso código fonte para zeros e uns de antemão. Em vez disso, há um programa, que também é chamado PHP, que entende e PHP pode classificar de torná-lo on the fly. Isso realmente não é exatamente preciso, mas é uma boa analogia do que está acontecendo. É interpretar os zeros e uns na mosca. E por isso, se ele não sabe como processar alguma coisa, se não sabe como processo PHP, você provavelmente queria colocar esse texto em lá, certo? Você provavelmente queria colocar o código em lá, mesmo se não é entre PHP-- os delimitadores PHP. Mas-- por isso não está acontecendo para excluí-lo para você, é só ir para basicamente descartá-lo. Então ele vai para imprimir -lo para a tela. Isto parece que é um mau coisa, mas na verdade é Vai ser realmente um coisa boa, como nós vamos ver quando falamos PHP desenvolvimento web, porque isso significa que pudermos intercalam PHP e HTML. Podemos usá-los em conjunto para criar uma página web mais dinâmico. Mas mais sobre isso na vídeo sobre o desenvolvimento web PHP. Então, qual é a sintaxe do PHP? Isso é o que este vídeo é tudo. Vamos conversar a respeito disso. Então, para começar, variáveis. Existem variáveis ​​PHP. Existem apenas dois grandes diferenças em relação a C. A primeira é que não há nenhum tipo especificador. Não temos a dizer int, char, float, todas essas coisas. Não temos mais fazer isso. PHP é uma linguagem moderna. Ele pode descobrir o que você é tentando fazer ou fazer uma melhor adivinhar, como o que você está tentando fazer. Então, isso é muito bom. A outra coisa é que todas as variáveis nomes tem que começar com um sinal de dólar. Isso é apenas algo para se acostumar. É um pouco estranho, porque é para que o PHP pode entender o que é uma variável eo que não é. Assim, cada nome de variável começa com um sinal de dólar. Assim, em C, poderíamos dizer algo assim, int x = 54. Não temos mais fazer isso em PHP. Podemos apenas dizer $ x = 54. E poderíamos dizer, por exemplo, em C, se tivéssemos pound-incluído o .h CS50 arquivo de cabeçalho, poderíamos dizer frase string = "Este é CS50." Nós não temos que fazer isso em PHP, no entanto. Podemos apenas dizer $ frase = "Este é CS50." E, de fato, corda é agora um tipo de dados built-in em PHP, ou melhor o PHP entende o que é uma string. É separado a partir de uma matriz de personagens como é em C. Todo o seu favorito instruções condicionais de C ainda estão disponíveis para você usar. Portanto, não há grande transição. Podemos dizer-- podemos ter se declarações como essa. se y $ 43, ou $ z = 15. Então, isso é bastante simples. Podemos ter se e mais. Podemos ter se e else if. E notar algo muito bom aqui, e esta é uma espécie de um daqueles vantagens do PHP versus C, aviso qual a função que nós não estamos usando aqui? Estamos usando == para comparar um variável, $ nome, para uma cadeia. Nós não poderia fazer isso em C, certo? Tivemos de usar uma função chamada SeqComp ou qualquer ou StrEndComp de seus primos afins. E assim já vemos essas vantagens. Não temos que fazer alguma coisa como bobo ou talvez unintuitive como chamar uma função chamada StrComp se eu quiser testar se um valor igual a uma string. Eu poderia usar apenas iguala iguais, como se eu pudesse fazer mais nada. Portanto, há uma vantagem. Às vezes, a propósito, você pode veja mais se como uma palavra, elseif. E isso é OK em PHP também. Então, às vezes você pode ver isso. Não é um erro de digitação. PHP realmente entende elseif. Eu não sei por que eles decidiu implementar isso, mas como nós já vimos muitas vezes em toda a nossa vídeos até agora, nós programadores adorar se podemos fazer as coisas rapidamente, assim livrar-se de que o espaço é, aparentemente, uma grande vantagem. Então, isso é, se e elseif. Temos também o operador ternário, recordação ponto de interrogação cólon, para realmente curto formulário se mais ou ramificação condicional. E, aparentemente, neste, o que estamos tentando fazer aqui é atribuir a variável $ carta verdadeira ou falsa, dependendo se $ var é um caractere alfabético. Então, isso é bastante semelhante ao isalpha que estamos familiarizados com a partir de C. Esta é uma espécie de equivalente em PHP. A função é aparentemente chamado ctype_alpha, mas isso é como nós o fazemos em PHP. Então, tudo isso vai ser é, se $ var é uma carta, $ carta é verdadeira. Se $ var não é uma carta, $ carta é falsa. Temos também declarações switch ainda. Recordamos os de C também. Na parte superior há, é assim que nós fazemos algo como get int ou obter string. Então PHP tem que construído em. Nós não precisamos mais da biblioteca CS50. Nós podemos apenas usar o readline função. O que isso vai fazer é imprimir a mensagem "Seu estado, por favor ", e, em seguida, piscar rápida à espera de que o usuário de entrada alguma informação. Agora, observe o que mais nós podemos fazer com switch. Se você já usou antes, você deve se lembrar de que o interruptor é limitada praticamente em números inteiros e personagens, mas agora podemos usar strings. E, de fato, a instrução switch em PHP é um pouco mais flexível do que seu primo de C. Loops. Assim como condicionais, todos seus antigos favoritos ainda estão lá. Temos laços while que contam de 1 a 100, neste caso. Temos fazer while que contar de 1 a 100, e nós temos para loops que contam de 1 a 100. Portanto, não há grande salto. A sintaxe é bastante muito exatamente o mesmo, só que agora estamos usando variável sinal de dólar, em vez de declarar variáveis ​​inteiras ou algo como que para os nossos contadores. Aqui é onde as coisas ficam um muito melhor do que C, no entanto. Arrays. Então lembro de quando éramos falando C, a fim para que possamos crescer e encolher conjuntos de informações, o que for necessário para classificar de padrão a esta idéia de uma lista ligada, porque matrizes C foram fixadas em tamanho. Nós não poderia reduzi-los. Nós não poderíamos cultivá-las. Tivemos que realocar a memória e fazer toda essa loucura ou usar listas ligadas, que ocupam um espaço muito pouco mais. Mas em PHP, matrizes são não fixa em tamanho mais. Eles podem crescer e podem encolher. Então, novamente, nestes 20 anos que existia entre a primeira versão do C e o primeiro PHP libertação, nós decidimos que, você sabe, seria realmente grande se pudéssemos fazer isso. E assim nós implementamos isso. Então matrizes PHP não são fixos em tamanho, e porque o PHP realmente não tem frente virados para o programador noções de tipos, nós podemos misturar tipos de dados em nossas matrizes, também. Então, nós nem sequer temos de usar todos inteiros ou todos os pontos de flutuação, podemos ter uma mistura de tudo diferentes tipos em uma única matriz. Declarando uma matriz é bastante simples. É como qualquer outra variável. $ nums = array (1, 2, 3, 4), sendo uma função matriz que é construído em PHP que vai criar uma matriz para você. Isto cria uma matriz de quatro valores, números neste caso, chamado $ nums. E há mais de uma maneira de fazê-lo. E nós estamos indo para vejo muito isso em PHP. PHP foi desenvolvido por muitos diferente pessoas e cresce e cresce e cresce. Há geralmente não apenas dois ou três maneiras de fazer algo em PHP, há geralmente como 10 ou 20. Aqui é apenas mais um comum maneira de declarar uma matriz. $ nums = quadrados de suporte 1, 2, 3, 4. Portanto, esta é uma espécie de similar ao ângulo de C Br-- notação chaveta, em vez. $ - ou seria int nums quadrado suportes igual chaveta 1, 2, 3, 4. Em PHP é $ nums = quadrado suportes 1, 2, 3, 4. Mas ambos os exemplos aqui dá-me um conjunto de quatro neste caso inteiros. E se eu quiser para alinhavar algo agora? Bem, eu posso apenas dizer $ nums 4, que novamente, ainda estamos contando a partir de 0 aqui em PHP, seria o quinto elemento da matriz. Eu só posso dizer isso. Eu não vou sofrer um seg falha, porque a minha matriz é apenas vai crescer para acomodar isto. Isso é muito bom, certo? E, na verdade, eu nem preciso especifique onde eu quero colocá-lo. Posso apenas dizer isto e apenas pregá-la à direita para a final, Ou eu poderia até mesmo apenas dizer $ nums 20 ou 1000. Realmente não importa. É ainda só vai pregá-la à direita para a final. Para que eu possa crescer, e estamos as-- não vai cobrir isso aqui, mas posso emendar ou tira elementos fora da matriz, bem como, e a matriz irá encolher para acomodar que o espaço agora ausente ou vazio. Não há outra maneira de aderência algo sobre uma matriz, que é uma função chamada array_push. Então, novamente, apenas esta idéia de ser capaz de fazer coisas muitas maneiras diferentes. Então, nós vimos três maneiras diferentes agora para alinhavar um outro elemento em uma matriz. Portanto, este acrescenta outro elemento para o final do array $ nums. E nós podemos misturar nossos tipos de dados. Então, eu poderia ter uma matriz de não 1, 2, 3, 4, mas 1, verdadeira, 3, 4, onde o verdadeiro é um booleano, e, em seguida, se eu quiser aderência em outro elemento para essa matriz, talvez uma corda, a cadeia "cinco", eu poderia fazer isso. E agora minha matriz faria ser um, verdadeiro, 3, 4, cinco. A palavra de cinco, e não o inteiro 5. Então, um monte de flexibilidade lá. A flexibilidade fica ainda melhor, no entanto, porque o PHP tem suporte para algo chamado uma matriz associativa. E nós meio que vagamente falou matrizes sobre associativos em C no contexto de tabelas de dispersão, porque o que arrays associativos são realmente tudo sobre está fazendo chave mapeamentos par valor. E, neste caso, o keys-- se estamos familiarizados com matrizes de C, as teclas são números de índice. 0, 1, 2, 3. E os valores são o que nós achamos que 0 matriz, matriz 1, conjunto 2, e assim por diante. Então as chaves são índices, e os valores são que é em que local da matriz, especificado por esse índice. Mas em PHP, não temos de fazer isso noção de matriz 0, array 1, conjunto 2 anymore. Podemos agora usar palavras reais para mapear as teclas de valores. E para que eu pudesse dizer algo assim. Eu poderia criar uma matriz usando o sintaxe de colchetes como se segue. $ pizzas = colchete "queijo" e, em seguida, este tipo de notação seta dupla, 8,99, "pepperoni", arrow 10.99-- 9,99, e assim por diante. E então o que está acontecendo aqui? O que eu estou realmente fazendo? Estou criando mapeamentos de teclas par valor. Então, em vez de dizer, por exemplo, pizzas, 0 peças 1, 2 pizzas, Agora eu posso dizer pizzas queijo, pizzas pepperoni, e referem-se aos valores associado com eles. Então, aqui estão as nossas chaves no verde. Queijo, pepperoni, vegetal, búfalo frango. Aqui é a seta que faz esta chave de mapeamento par de valor. E, em seguida, aqui estão os valores em que local da matriz. Então, é como dizer matriz 0 é igual a 8,99. A chave é 0. O valor é 8,99. Agora eu posso dizer queijo matriz, ou neste caso pizzas de queijo, o queijo é a chave, eo que eu encontrar em pizzas queijo é 8.99. Esse é o valor que eu encontrar lá. Então eu posso dizer coisas como. $ pizza de queijo = 7,99. Digamos que eu estou tendo uma venda. Eu quero dis-- Eu quero largar o preço do queijo de pizza. Ou eu posso usar o vegetal pizza como parte de uma condição, ou eu posso adicionar um novo elemento para o meu array, assim como eu poderia fazer anteriormente. Eu posso adicionar um novo elemento a essa matriz associativa com a tecla "bacon" eo valor 13,49. Mas esse tipo de introduz um problema, se você pensar sobre isso por um segundo. Como poderíamos fazer uma iteração através desta matriz? Certo? Em C, teríamos apenas ter um para loop, tipicamente, que correria de 0 até o tamanho da matriz menos 1. A matriz tem n elementos em pelo, o índices válidos são de 0 a n menos 1. Assim nós poderíamos usar um loop for para percorrer cada elemento. Mas isso não é realmente mais o caso, certo? Agora, onde temos um par de valores chave mapeamentos onde as chaves são palavras, como é que vamos iterar sobre todas as palavras? Bem, felizmente, PHP tem uma maneira de lidar com isso também, e por isso vamos saltar para trás para loops para uma segunda a introdução de um quarto tipo de laço que existe em PHP chamado um loop foreach. E o que é um loop foreach faz é é basicamente a mesma idéia. Você pode usá-lo para qualquer tipo de matriz. Mas é basicamente a mesma idéia como um loop for, exceto em vez de usar números de índice, você só tem esta sintaxe estranho onde você chamar cada elemento um nome para os fins deste ciclo. Portanto, neste caso, foreach ($ array como $ key). Basicamente, como aquele comentário notas, dentro desse loop foreach, ele vai passar por cima de todos os elemento de array $, que é tipicamente vai ser uma matriz associativa, mas pode realmente ser qualquer tipo de matriz que você quer em PHP. E cada vez que nos um loop que você pode disseram $ matriz colchetes $ i, você poderia apenas dizer $ key. De modo que se torna $ key um alias para cada Índice do seu PHP matriz associativa, e assim você pode usá-lo assim. Assim, por exemplo, nós temos agora temos a nossa disposição pizzas. Eu meio que enfiou- no canto lá para que possamos usá-lo para fazer um exemplo rápido. Se eu disser foreach ($ pizzas como $ pizza), bem, o que está acontecendo? Bem, eu estou indo para percorrer cada único elemento da matriz $ pizzas, e ao fazê-lo, eu vou chamar cada elemento, quando estou dentro do corpo do que para loop, $ pizza. Então, isso é uma espécie de dublê, recall, que a pizza $ é um stand-in para dizer $ pizzas quadradas suportes $ i se estivéssemos usando um loop for, onde nós Pode ir de $ i = 0 a, neste caso, $ i = 3. Se não tivéssemos pares de valores-chave aqui, este seria o elemento 0, 1, 2, 3, e gostaríamos de usar um loop for para ir $ 0 pizzas, pizzas $ 1, $ 2 pizzas, $ 3 pizzas. Então agora $ apenas pizza está substituindo para essa chave individual. Então o que é que isto vai imprimir? Estou imprimindo $ pizza. O que vou encontrar at-- se eu imprimir $ pizzas, $ i? Certo? Se eu estou indo para imprimir o elemento i de pizzas, o que eu estou indo para imprimir? Eu estou indo para imprimir o valores nesse local, certo? Como se estivéssemos fazendo isto no contexto de C, nós não costumamos usar nosso iterador variável, int i = 0, i é inferior a 3, i ++, para imprimir a 0, 1, 2, 3. Estamos imprimindo matriz 0, matriz 1, conjunto 2, série 3. E então o que este imprime é este. É a lista de preços. 8,99, 9,99, 10,99, 11,99. Agora uma nota rápida aqui. Um loop foreach não necessariamente imprimir as coisas em ordem. Não é garantido. Ele geralmente faz. É geralmente com base na ordem em que os elementos são adicionados à matriz, por isso ter isso em mente. Pode não estar em ordem. Mas um loop foreach irá iterar através de cada elemento da matriz em questão. Neste caso, novamente, essa matriz é de R $ pizzas. Eu posso mudar a sintaxe, porém, se Eu quero tanto a chave eo valor. Em vez de dizer $ pizzas quanto $ pizza, posso dizer isso. E se você olhar para o que eu tenho destacadas em verde aqui, ele se parece com uma chave de mapeamento par de valor. E por isso, se você-- mesmo se você não for inteiramente certo o que ele vai fazer, você provavelmente pode adivinhar que US $ cobertura vai para ser a chave neste caso e R $ preço vai ser o valor. Então, eu estou substituindo agora cada elemento de US $ pizzas como um par de valores-chave, e agora eu posso referir-se à chave e o valor, o que pode ser útil, por exemplo, como se segue. "A todo" - este é um monte de impressão acontecendo aqui-- "um todo" cobertura "pizza custa R $" preço e, em seguida Eu imprimir um período e uma barra invertida n. Então, agora, aviso novamente eu tenho acesso a uma chave, $ cobertura, e um valor, R $ preço. Então você pode imaginar o que isso vai imprimir? Há um monte de instruções de impressão, mas só há uma barra invertida n, por isso vai para imprimir algo em um entire-- em uma única linha de código. Se eu pode referir-se a chave e o valor, então agora, em vez de apenas ser capaz para imprimir os preços, Eu posso imprimir algo como isto. "Toda uma pizza de queijo custa R $ 8,99." E agora eu estou usando todo o keys-- queijo, pepperoni, vegetal, búfalo chicken-- e os valores. 8,99, 9,99, 10,99, 11,99 Assim isso é apenas uma maneira diferente para fazer um loop foreach que em vez de apenas dando-lhe acesso aos valores, apenas dá vocę-- dá-lhe acesso às chaves e os valores. Então imprimir informações. Eu já fiz isso algumas maneiras diferentes, você deve ter notado. As duas funções que nós temos principalmente visto são impressão e eco. E para praticamente todos os intentos e propósitos, eles são exatamente o mesmo. They're-- há uma muito sutil diferença de que não é sequer vale a pena se metendo, mas basicamente em todos os lugares você pode usar impressão provavelmente você pode usar ecoam também. E isso não é o único dois. PHP tem um monte de diferente formas de imprimir as coisas, e também tem maneiras de integrar variáveis ​​para o meio da corda. Então lembro de C, você lembre-se que função que podemos usar para substituir variáveis em coisas que pretende imprimir? Você provavelmente usar essa funcionar muito. printf, certo? Então é isso que nós tivemos antes no interior do contexto do nosso loop foreach. Tivemos estes cinco instruções de impressão separados, porque essa era a única maneira que eu realmente sabia, na época como imprimir mensagens. Eu não sabia como integrar o $ variável superando em meu código PHP. Bem, se eu acabado de tomar um palpite, printf, ele realmente teria funcionado. printf é uma função que eu posso usar em PHP, assim como eu posso usá-lo em C. E assim algo como isso, printf, mais uma vez, estamos familiarizados com isso. O primeiro% s é substituído com o valor de US $ cobertura. O segundo% s é substituído com o valor de $ preço. E por isso estou interpelando, que é apenas uma maneira elegante de dizer que eu estou aderindo a variáveis ​​em que localização. Então, eu estou ligando $ superando onde a vermelho% s é e onde o preço $% s azul é, e então eu iria receber a mensagem, "Toda uma pizza de queijo custa R $ 8,99." Não é a única maneira que eu posso fazê-lo, no entanto. Talvez eu iria querer usar este método. Este é realmente o que é mais comumente Interpelação chamado variável. Posso usar um eco. Eu poderia usar um print também, como veremos. Mas o que está acontecendo aqui? Primeiro de tudo, eu tenho que escapar do sinal de dólar. Porque lembre-se, quando estávamos realmente imprimindo os preços das pizzas, Eu estava realmente formatá-los como valores monetários com um sinal de dólar. Mas nós estamos usando sinais dólar também para representar os nomes de variáveis ​​em PHP, e em particular quando estou usando este método do encaracolado variável cinta método interpelação, eu preciso para escapar o meu signo do dólar para que ele não acho que eu estou falando sobre uma variável. Vai realmente, literalmente imprimir um sinal de dólar. Então espécie de analogia para o que você vê ali no final. Na verdade, não impressão barra invertida n, certo? Ele imprime um caractere de nova linha. Isso é-- isso não vai impressão cifrão barra invertida, ele vai imprimir apenas um cifrão. A mesma idéia. As seqüências de escape, o que essas coisas são chamadas. Mas observe que não estou fazendo qualquer tipo de substituições% s, Eu só estou literalmente ligar nessas variáveis. E assim, em isto-- o que aconteceria aqui é que o valor de $ topping-- novamente, apenas manter com o que temos sido falando de queijo tão far-- obteria conectado lá. E US $ preço seria o valor que é em pizzas, colchetes, queijo, que era 8,99. E por isso este também imprimir "Toda uma pizza de queijo custa R $ 8,99." E como eu disse, eu poderia usar imprimir aqui em vez de eco, e a funcionalidade seja muito bonito exatamente o mesmo. Seria imprimir a mesma coisa. Não há outra maneira de fazê-lo, e esta é outra vantagem de PHP trabalhar com strings. Podemos fazer concatenação de strings. Nós poderíamos fazer isso em C, também, usando uma função chamada strcat, mas, novamente, nós tivemos que chamar funções separadas. Foi toda essa confusão que fazer. Tivemos de pound-incluem string.h. Foi uma produção, certo? Mas agora eu só posso usar esse operador ponto para concatenar strings. Então, eu estou concatenando "um todo" e em seguida, qualquer que seja o valor de US $ cobertura é, e depois outro corda, "custos de pizza $" e, em seguida, seja qual for a concatenação o valor de R $ preço é, e então, no final, eu sou aderência em período de barra invertida n. E assim este seria também imprimir "um todo" - mais uma vez, se estamos falando sobre o primeiro elemento dessa array-- pizzas "Toda uma pizza de queijo custa R $ 8,99." Período, barra invertida n, novamente, com os US $ cobertura e preço $ substituindo para o que tínhamos especificado em nosso foreach laço como a chave de mapeamento par de valor. PHP pode manipular funções. Funções foram tipo de integrante ao C, como vimos. Como variáveis, não precisa especificar o tipo de retorno da função, porque ele realmente não importa. E nós não especificar o tipos de dados de todos os parâmetros, porque eles realmente não importa, como temos visto em PHP. Cada função é introduzido com a palavra-chave função. É assim que nos indicam para o PHP que o que nós estamos falando é uma função. E nós não temos que lidar com principal de todo, porque o intérprete, o PHP intérprete, funciona de cima para baixo, independentemente. Se ele vê que você pode fazer uma chamada de função, ele vai ir encontrar a chamada de função, mesmo que isso vem depois. Mas ele vai ler de cima para inferior, portanto, não é necessário especificar, aqui é onde você começa. Você começa na linha 1 do seu PHP e trabalhar para baixo de lá. Então aqui está como nós criaríamos uma função chamada hard_square. Ele, aparentemente, leva um parâmetro, que eu estou chamando $ x. Esta função é complicado apenas para ilustrar várias coisas. Nós ainda temos valores de retorno. Eu estou usando um loop for aqui. Mas é, basicamente, apenas, que este significa é apenas US $ x $ x vezes. O que eu estou realmente fazendo é apenas adicionando x para 0 x vezes ou US $ x a zero $ x vezes. Mas é exactamente o eficazmente mesmo que multiplicar $ x $ x vezes. Eu ainda pode retornar um valor, neste caso $ result, e eu fiz uma função em PHP. Veja como você pode usá-lo no contexto. Então, talvez eu estou dentro de algum arquivo PHP. Observe em azul lá que Eu usei meus delimitadores PHP, suporte de ângulo ponto de interrogação php. Entre esses são todos o PHP que eu quero escrever. Então, eu estou indo para get-- aparentemente Vou pedir ao utilizador para me dar um número, loja que variável, loja em que variável $ x, o que quer que eles me deram. Então eu vou para ecoar hard_square desse valor, e, aparentemente indo a aderência em uma nova linha bem, e depois, mais tarde, eu vou definir a função de forma hard_square que quando eu fizer o chamar a hard_square, ele sabe o que eu estou falando. Agora, eu também poderia fazer algo assim. Isso é um pouco diferente. É quase exatamente o mesmo que o que vimos antes, exceto em vez de dizer apenas US $ x lá como o parâmetro para hard_square, Eu estou dizendo $ x = 10. Portanto, este é um exemplo de programação defensiva, guardando seus programas contra usuários mal-intencionados. Esta é uma maneira de fazer algum erro verificação de que nós realmente não tem como uma opção no C. Nós nunca poderia especificar o valor padrão de alguma coisa. Nós sempre tivemos de check- se a, por exemplo, se fez uma chamada para GetString, foi mais adequada se imediatamente após nós verifiquei que, fizemos o check- se a cadeia que o usuário deu-nos não é igual a nulo, porque não quero começar trabalhar com uma cadeia nula. Aqui, esta é uma maneira para se proteger contra isso. Se o usuário não fornecer-nos alguma coisa de alguma forma, o que vamos fazer? Bem, vamos apenas dizer o que quer eles não fornecer-nos, nós apenas estamos indo para a ligação de 10 em vez. Então, se eles não nos deu um valor, é só usar 10 por padrão. E por isso aqui, notar que eu estou fazendo uma chamada para hard_square, mas não há nenhum prompt para o usuário, certo? Eu apenas estou fazendo uma chamada vazia. Mas minha função hard_square está esperando um parâmetro. O que é que isto vai imprimir? Vai imprimir 100, certo? Porque o usuário não fez dar-me qualquer coisa. E então eu só vou assumir que 10-- 10 é o valor padrão. E assim isto deve imprimir a 100 em sua própria linha. Arquivos PHP não tem que ser apenas um único arquivo. Você pode combinar vários arquivos juntos, Assim como você pode em C. A maneira nós fizemos isso em C foi tipicamente de fazer uma # include para obter arquivos de cabeçalho puxado. Nós não fazemos isso em PHP. Nós fazemos algo chamado require_once. E depois há toda esta coisa, o que é isso __dir__? Isso é apenas uma especial variável ou constante especial, realmente, que especifica o que seu diretório atual. E assim ele vai olhar em seu diretório atual para um arquivo chamado cs50.php Neste exemplo aqui, e ele vai ficar esse arquivo na parte superior de seu programa PHP, supondo que você colocar o exigir uma vez linha na parte superior do seu arquivo PHP. Então PHP é usada principalmente, mas não utilizados exclusivamente, como uma linguagem para programação baseada em web. Isso é realmente como ele veio a ser. Mas é um inteiro língua, como já vimos. Nós vimos praticamente todas as coisas que ele pode fazer que são semelhantes a C, e ele pode fazer um inferno de muito mais do que isso. Mas porque é uma língua cheia e nós pode fazer programação de linha de comando na mesma. Nós podemos executar programas de linha de comando. Tudo que é necessário para executar um comando programa de linha que está escrito em PHP é que você tem um interpretador de PHP. Então, é uma espécie de análogo ao ter um compilador em seu sistema se você quiser compilar o código C para transformá-lo em arquivos executáveis. Você precisa ter um intérprete PHP que existe no seu sistema de modo que você pode interpretar arquivos PHP. Supondo que você, e, geralmente, este intérprete é chamado de PHP, e normalmente é fornecido com mais downloads ou instalações de PHP que você pode obter on-line, e, certamente, o nome do interpretador PHP temos em CS50, IDE. Tudo que você faz é arquivo php tipo. E o seu programa de vai fazer é que é vai percorrer o intérprete, é vai ignorar tudo o que é não em questão entre mark-- ou, ângulo do suporte de interrogação php, os delimitadores PHP, e imprimi-lo, e ele irá interpretar e executar o código dentro de seus delimitadores PHP. Então, vamos estalar sobre a IDE e CS50 ter um olhar para um par de arquivos PHP, executando um par de arquivos PHP, em interface de linha de comando do CS50 IDE. Então, aqui estamos em CS50 IDE, e eu tomei a liberdade de abrir um arquivo chamado hello1.php. E, aparentemente, o conteúdo deste arquivo são apenas os delimitadores PHP lá, e no meio, echo ("Olá, mundo"). Este é um programa muito simples PHP. Eu só vou para rolar para baixo na minha janela de terminal aqui, e eu estou indo para digitar php hello1.php, aperte enter. Ola mundo. Isso é provavelmente o que nós éramos esperando que fazer, certo? Vamos subir e tomar um outro olhar para um programa. hello2.php. Praticamente a mesma coisa, não muita coisa acontecendo aqui. Desta vez, porém, eu estou indo para solicitar o usuário para me dar seus nomes. Eu estou usando essa função readline novamente. $ name = readline. Essa é a mensagem, "Qual é o seu nome?" Aparentemente eu sou impressão -lo em sua própria linha. E, em seguida, para que a linha abaixo que será o prompt onde o usuário pode digitar o seu nome. E então eu estou usando um pouco de Interpelação variável aqui na linha 3 para imprimir "Olá" e tudo o que o usuário digita. Portanto, este é análogo a dizer, Olá, vírgula,% s se estivéssemos usando printf em C. Então vamos e interpretar este programa. Então, novamente, eu vou rolar para baixo na minha janela de terminal. hello2.php php. Qual é o seu nome? Doug. Olá, Doug. Eu também tenho um outro arquivo chamado hello3.php. Eu estou indo para limpar a minha tela com controle L, e eu estou indo para executar isso. Qual é o seu nome? Doug. Olá, Doug. Assim, o comportamento é idêntico ao hello2.php, mas por que é hello3.php? Bem, aqui está a diferença. Neste caso, a notificação que na linha 1 aqui, Eu tenho algo que não é entre os delimitadores PHP. Eu só estou imprimindo out-- ou I acabou de digitar, "Qual é o seu nome?" Quando o interpretador PHP vê isso, não tem idéia de como interpretá-lo como PHP, e assim, em vez de falhar, ele só vai para cuspi-la. Então, observe on line 3 agora, a minha chamada para readline, não há nenhum prompt de mais. Eu só estou indo realmente quando a-- o intérprete PHP vê isso, ele vai imprimir "Qual é o seu nome?" Em seguida, ele vê Oh, OK, here's-- tudo o resto vai ser interpretada como PHP, então por isso é que isso funciona. Eu não tenho que pedir necessariamente a-- o usuário dentro da readline, Eu posso apenas tê-lo fora dos delimitadores PHP e permitir que o intérprete apenas imprimi-lo para mim. Então, você realmente não tem somente ter um conjunto de delimitadores PHP em seu programa. Você pode realmente ter vários deles, abrindo e fechando-los quando necessário. Então, vamos dar uma olhada em um par de programas em CS50 IDE onde nós ilustrar essa idéia de ter vários conjuntos de PHP delimitado. OK, então eu já abriu um arquivo aqui chamado add1.php. E observe o que está acontecendo aqui. Tal como antes, eu tenho um PHP único conjunto de delimitadores. Eu estou indo para imprimir o mensagem, "Por favor, me dar um número." Então eu vou ler uma linha e armazená-lo na variável $ num1. Então eu vou imprimir novamente. Dê-me um segundo número. Leia uma linha do usuário, loja o que digitou em $ num2. Adicioná-los juntos e armazenar esse resultar em uma variável chamada $ suma, e, em seguida, imprimir, "The soma destes dois números é ", em seguida, interpelar há os R $ soma variável. Então vamos executar este através do intérprete para confirmar que este é o que esperamos. add1.php php. Por favor, me dar um número, três. Por favor, me dê um segundo número, 4. A soma desses dois números é 7. Isso é 3 + 4. ok? Portanto, nada terrivelmente sofisticados lá. E agora vamos abrir add2.php. Aqui, eu tenho um par de PHP conjuntos delimitado lá, certo? Linhas 1, 3-- linhas 1 e 3 tem não delimitadores PHP. Assim, quando o intérprete vê-los, é só vai cuspir exatamente o que digitou lá. Então é aí que eu sou fazendo toda a minha solicitação. Nas linhas 2 e 4, vemos a muito $ familiar? php tipo de delimitadores, para que essas duas linhas são vai executar como PHP. E, em seguida, na linha 5, eu tenho essa coisa estranha aqui, certo? Este suporte de ângulo ponto de interrogação sinal de igual. Vou até ampliar um pouco mais longe. Você pode ver isso é o que eu sou falando ali, este $? =. Acontece que ele é tão comum que a razão que nós abrimos um conjunto de PHP delimitadores é imprimir um valor. E isso é tudo que vamos fazer. Mas há ainda uma abreviação para isso. $? = É um atalho para dizer PHP algo como US $? php echo a soma num1 e num2 de. Portanto, este é apenas mais um Abreviação para isso. Então, se eu executar este programa, php add2.php. Eu vou aumentar um pouco para baixo. Por favor, me dar um número, 4. Por favor, me dê um segundo número. E desde que eu realmente não me importo sobre tipos de dados em PHP, posso dizer 4.8. A soma desses dois números é de 8,8. Essa função se comporta muito bem exatamente o mesmo como seria de esperar, também. E eu tenho mais uma aberto aqui chamado dice.php. Tente novamente. Eu tenho um chamado mais aqui dice1.php, que também, ver, tem essa pergunta colchete angular marcar notação igual sinal lá, de notar que, neste caso, eu sou chamando a função rand, que como você pode esperar que gera um número aleatório. "Você rolou um", e ele vai calcular algum número aleatório, mod 6 + 1. De modo que vou me dar o número na gama de 1 a 6. Lembre-se que mod 6 me daria um número no intervalo de 0 a 5, mas se eu estou simulando jogadas de dados, que é o que estou fazendo aqui, Eu não quero esses dados para ir de 0 a 5, eu quero dados que vão de 1 a 6. E por isso esta é uma maneira de obter me na gama de 1 a 6. Estou fazendo isso duas vezes. Então, aparentemente, eu estou rolando dois dados neste programa. Então, eu vou limpar minha tela, e eu vou fazer php dice1.php. Você rolou um 4 e um 2. E se eu executar o programa novamente, você rolou a 5 e a 5. Então, toda vez que eu executar o programa, Estou recebendo números diferentes, porque cada vez que eu faço Então, é começar de novo. Vai gerar um novo conjunto de números aleatórios para mim. Então, se estamos acostumados a a execução de programas de C, estamos acostumados a digitar o ./ nome de um programa, certo? Isso é como nós fizemos tudo dos nossos programas em C até o momento. Podemos fazer isso em PHP, bem adicionando algo chamado um shebang ao topo do nosso arquivo PHP. Eu sei que é uma espécie de palavra boba. É curto para hash de estrondo. Isso é os dois primeiros caracteres lá. Lembre-se que chamamos de ponto de exclamação freqüentemente um estrondo em ciência da computação. Ele também pode ser para estrondo afiado. Há algumas maneiras de interpretar isso. Mas é basicamente um tipo especial de comando que o intérprete PHP entende como, oh, eu quero você executar este programa, que é aparentemente / user / bin / php, que é, na verdade, onde o interpretador PHP vive especificamente no nosso sistema. Então it's-- o que acontece aqui é o intérprete entende, oh, Estou aparentemente deveria usar neste programa para executar esse arquivo. E assim ele permite que você para pular a etapa de ter de dizer php something.php. Há uma outra captura aqui, o que é que se queremos que os nossos programas para funcionar como esperado, nós precisa fazer algo chamado uma mudança de permissão de arquivo. E nós vamos vai-- e conversamos um pouco pouco mais alterações de permissão de arquivo sobre em nosso vídeo sobre MVC, mas basta dizer que este é o que você precisa fazer a fim de tornar a sua arquivos .php executável. Então, vamos dar uma olhada em como este nosso exemplo final sobre em CS50 IDE. Então, aqui no IDE Eu tenho dois arquivos nesta Diretório PHP que parecem não ser chamado .php. Eu tenho uma função chamada add-- Eu tenho um arquivo chamado Add3 e um arquivo chamado dice2. Então, vamos dar uma rápida olhar e abrir Add3. E como você pode ver, no início do meu arquivo eu tenho essa coisa toda, certo? Este ponto de hash ponto de exclamação. Agora, você também vai talvez notar que, por algum motivo, Eu não tenho qualquer sintaxe destacando mais, e é isso que me referi anteriormente, que foi que se eu não citar meu arquivo .php, eu não tenho o benefício de destaque de sintaxe mais. Este arquivo é chamado apenas de Add3. Para que eu possa executá-lo mais tarde com ./ Add3 e não ./ add3.php. Assim, a razăo ainda é fino, ainda é válido PHP, mas não é a sintaxe em destaque, porque este arquivo não é chamado something.php. Essa é a única diferença real aqui, mais a coisa toda. Então vamos ver o que acontece quando Eu tento e executar este programa. ./ Add3, assim como eu faria com C. Bash. ./ Permissão Add3 negado. Isto é o que você está indo para ver se você se esquecer usar o comando chmod para alterar as permissões do arquivo. Como se constata, PHP regulares arquivos não pode apenas ser executado. Eles podem ser interpretados, mas estamos fazer algo um pouco diferente aqui. Estamos executá-lo. E assim que eu preciso para adicionar a permissão de execução, chmod a + x para Add3. Então eu posso dizer ./ Add3. Por favor, me dar um número. 5, 6. A soma desses dois números é 11. Da mesma forma, eu já chmoded dice2, para que eu possa basta digitar ./ ​​dice2, você rolou um 1 e um 1, você laminados a 5 e um 4, e assim por diante. Então, isso é muito bonito o idéia de uma sintaxe PHP, certo? Há muita coisa para passar, eu sei. Mas espero que você viu agora que o PHP que não é realmente diferente de C e realmente nos dá a capacidade para levar as coisas um entalhe ou dois. Nós realmente não precisa se preocupar muito about-- nós realmente não tem que se preocupar muito com os detalhes de baixo nível nós tinha que se preocupar com C, certo? Podemos concentrar-se na maior material nível que o PHP nos permite fazer e levar para certo que ele vai trabalhar para nós. Por isso, nos dá a capacidade agora, a transição de C para PHP, para fazer programas que são muito mais complexo e talvez muito mais robusto. Então, eu espero que você tenha trabalho divertido com PHP, e eu sou Doug Lloyd. Este é CS50.