Programação Web Aula 11 - PHP Departamento de Informática UFPR 4 de Maio de 2015
1 Origens 2 Exemplo Exemplo - arquivo PHP Exemplo: arquivo cliente Características Sintáticas Variáveis Tipos Expressões Comandos Saída Operadores Condicionais Variáveis Arrays Criação e Atribuição Funções para lidar com Arrays Acesso Sequencial a Elem. de Array
Origens Rasmus Lerdorf (Apache Group), 1994 (aplicação pessoal). 1995 Primeiro pacote. PHP = Personal Home Page Tools. Posteriormente, PHP = PHP Hypertext Preprocessor.
Quando o navegador carrega uma página.html, e encontra uma referência a um arquivo com extensão.php,.php3 ou.phtml, então: ele envia uma requisição ao servidor indicando o arquivo; o servidor obtém o arquivo e envia ao interpretador php que: interpreta os trechos do arquivo que indicam código php e copia o resultado da execução para a saída (modo interpretação); copia o resto para a saída (modo cópia);
Exemplo Exemplo Os próximos slides mostram o funcionamento de um script PHP no lado do servidor e no lado do cliente. Não será possível usá-lo na prática pois o Dinf não instala servidores php por medida de segurança. Existem vários tutoriais, mas usaremos o da w3schools: http://www.w3schools.com/php/.
Exemplo - arquivo PHP Exemplo - arquivo PHP No script php abaixo, o trecho em vermelho está em modo interpretação e o trecho em preto está em modo cópia.. <?xml version = "1.0" encoding = "utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <!-- today.php - A trivial example to illustrate a php document --> <html xmlns = "http://www.w3.org/1999/xhtml"> <head> <title> today.php </title> </head> <body> <p> <?php print "<b>welcome to my home page <br /> <br />"; print "Today is:</b> "; print date("l, F js"); print "<br />";?> </p> </body> </html>
Exemplo: arquivo cliente Exemplo: arquivo cliente Ao ser executado, irá gerar o seguinte arquivo enviado ao servidor: Observe que o resultado gerado pelo interpretador PHP substituiu o script. Em princípio, o cliente não vê o script. <?xml version = "1.0" encoding = "utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <!-- today.php - A trivial example to illustrate a php document --> <html xmlns = "http://www.w3.org/1999/xhtml"> <head> <title> today.php </title> </head> <body> <p> <b>welcome to my home page <br /> <br />Today is:</b> Wednesday, April 8th<br /> </body> </html> </p>
Características Sintáticas Características Sintáticas No arquivo html, o script encontra-se entre os tags <?php> e </php>. A diretiva include("arquivo.inc") faz o interpretador substituir a diretiva pelo o arquivo indicado. As variáveis são sempre precedidas com o símbolo $. Regra sintática: $[a-z A-Z _][a-z A-Z _ 0-9]* Case-sensitive Palavras reservadas não são Case-sensitive (ou seja, While, WHILE, WhIlE são a mesma coisa. Exemplos de palavras reservadas and, break, case, etc.
Variáveis Variáveis Tipos Escalares: boolean, integer, double, string Tipos Compostos: array, object Tipos Especiais: resource, NULL Declaração implícita de tipos. O tipo é denido em atribuição à var. Var. sem atribuição: unbound variable (valor NULL). IsSet é uma função booleana que indica se a var. é ou não unbound.
Variáveis Tipos Integer corresponde ao long em C. Double corresponde ao double em C. String 'String $var' (literal) ou "String $var"(substituição). Codicação String Projetado para inglês. Cuidado com UTF-8, Unicode, etc. Boolean [TRUE FALSE] Case-sensitive.
Variáveis Expressões Aritméticas String Semelhantes a C: +,-,*,/,%,++, Funções pré-denidas: floor(double), ceil(double), round(integer), etc. funções pré-denidas: strlen, strcmp, chop, substretc. $str = "Apples are good"; $sub = substr($str, 7, 1); # = "a"
Comandos Comandos Vamos examinar os comandos PHP para: Saída; Expressões de Comparação; Comandos de Comparação; Comandos Repetitivos; Arrays
Saída Saída print para saída não formatada printf para saída formatada Exemplos: print("o resultado é $res <br />"); print("o resultado é %d <br />", $res);
Saída Relacionais: Semelhantes a C: >, <, >=, <=. ==,!= === é TRUE se os dois operandos são do mesmo tipo e contém o mesmo valor.!== que é not === executa coerção entre String e Números. Por exemplo, ao comparar String com Integer ou Double, converte para o String para o outro operador e compara. a comparação de dois String contendo números é interessante: ("12.0"== "12") TRUE Booleanos: and, or, xor,!, &&,. A precedência de && e é menor que and e or.
Saída if ($dia == "Sabado" $dia == "Domingo") $hoje = "Feriado"; else { $hoje = "Trabalho"; $acordar = TRUE; } switch ($dia) { case "Feriado" : print "<br> FESTA </br>"; break; case "Trabalho": print "<br> Levantar </br>"; break; default : print "<br> Me perdi </br>"; }
Saída Semelhantes a C: while, for, do-while Para Arrays: foreach
Arrays Características: Combinação de Array convencional com Hash; Cada Array tem duas partes: chave e valor; Em Array convencional, a chave é um inteiro não negativo;
Criação e Atribuição Criação: $list[0] = 17; $list[1] = "Um string"; $list[] = 42; # Posição [2] (primeira disponível) $list = array(); $list = array(14, 24, 47, 89); $list = array(1=>14, 2=>24, 3=>47, 4=>89); $list = array("pedro"=>14, "Joao"=> 24, "Carlos"=>47, 6=>"Junior"); Atribuição: $list['carlos']=48; # atribuição múltipla $trees = array ("oak", "pine", "binary"); list ($a1, $a2, $a3) = $trees # equivalente a $a1="oak", $a2="pine",$a3="binary
Funções para lidar com Arrays unset: elimina elementos indicados do array ou o array todo. $list = array[2, 4, 6, 8] unset ($list[2]) # $list passa a ter três elementos:[2,4,8] unset ($list) # $list é eliminado array_keys: cria um novo Array somente com as chaves do parâmetro. array_values: cria um novo Array somente com os valores do parâmetro. $heights = array ("Mon" => 74, "Tue" => 70, "Wed" => 67); $days = array_keys ($heights) # $days = [0 => "Mon", 1 => "Tue", 2 => "Wed"] $temps = array_keys ($heights) # $temps = [0 => 74, 1 => 70, 2 => 67] array_key_exists(chave, Array) is_array(var) sizeof(array) explode(delim, String) converte String em Array usando delim como separador; implode(delim, Array)
Acesso Sequencial a Elem. de Array Além do acesso via chaves, PHP também permite acesso sequencial a elementos de um array. Para isto, cada array contém uma referência ao elemento atual através da função current(array). Para seguir para o próximo elemento, usa-se a função next(array). Assim como uma lista, o último elemento aponta para FALSE. $city = current (cities); print ("$city <br />"); while ($city = next(cities)) print ("$city <br />"); Quando alguns elementos tiverem o conteúdo FALSE, utiliza-se each ao invés de next, pois ele retorna o par (chave, valor) ao invés de só o valor.
Acesso Sequencial a Elem. de Array Além do acesso via chaves, PHP também permite acesso sequencial a elementos de um array. Para isto, cada array contém uma referência ao elemento atual através da função current(array). Para seguir para o próximo elemento, usa-se a função next(array). Assim como uma lista, o último elemento aponta para FALSE. $city = current (cities); print ("$city <br />"); while ($city = next(cities)) print ("$city <br />"); Quando alguns elementos tiverem o conteúdo FALSE, utiliza-se each ao invés de next, pois ele retorna o par (chave, valor) ao invés de só o valor.
Diversos em Arrays Exemplo com each: $salaries = array ("Mike" => 3000, "Jerry" => 1000, "Fred" => 500); while ($employee = each ($salaries)) { $name = $employee ["key"]; $salary = $employee ["value]; print ("The salary of $name is $salary <br />"); } As funções array_push e array_pop são úteis para implementar pilha em arrays. O comando foreach é um comando repetitivo para acessar todos os elementos de um array. foreach ($list as $temp); #list é o array, temp é a var. print ("$temp <br \>); A função sort ordena o array de acordo com o value e substitui key por {0, 1, e... }. A função asort ordena array de acordo com o value mantendo as key originais. A função ksort ordena array de acordo com key.
Funções Estrutura geral: function nome ([parametros]) {... } o nome da função não é case sensitive (sum == SUM); comando return indica o valor a ser retornado pela função. Se não existe, não retorna nada. Para usar funções de arquivos externos, usar comando include. o número de parâmetros formais pode ser diferente dos parâmetros reais. Excessos de parâmetros reais são ignorados. Falta de parâmetros reais fazem os parâmetros formais serão unbound.
Passagem de parâmetros Padrão: passagem por valor Passagem por referência: Método 1 (usando & no parâmetro formal): function set_max (&$max, $first, $second) { if ($first >= $second) $max = $first else $max = $second; } Passagem por referência: Método 2 é usar & no parâmetro real Escopo de variáveis: http://www.w3schools.com/php/php_variables.asp
PHP e Form http://www.w3schools.com/php/php_forms.asp Estudo adicional: http://www.w3schools.com/php/ Problemas: por ser simples, PHP é a "porta de entrada"de programadores no mundo da web. houveram vários casos de quebra de segurança (principalmente sql injection). Muitos eram problemas dos interpretadores, outros de programadores. existem muitos frameworks, talvez demais: http://www.phpframeworks.com/, Referência a problemas de segurança: http://blog.templatemonster.com/2014/05/08/ php-security-issues/. Procure por outros.