PHP Mauro César Lopes 27-11-2008 1 PHP Desenvolvido originalmente por Rasmus Lerdorf em 1994 site do PHP: http://www.php.net 2 Histórico PHP/FI (Forms Interpreter) (1995) PHP/FI 2.0 (1997) PHP 3.0 (Junho de 1998) PHP 4.0 (maio de 2000) PHP 5.0 (Julho de 2007) 3 Áreas que os scripts PHP são usados Scripts no lado do servidor (server-side) Scripts de linha de comando Aplicações Desktop 4 Sistemas operacionais Linux Unix like: Solaris, OpenBSD, MacOS X, ... Microsoft Windows 5 Servidores HTTP Apache IIS (Internet Information Service) 6 Tipo de programação Procedural Orientada a Objetos 7 Funcionalidades do PHP Gerar HTML Geração de imagens Arquivos PDF Animações em Flash 8 Suporte a banco de dados MySQL Oracle Interbase PostgresSQL Outros ... 9 Criação de scripts PHP Todo trecho de programa PHP deve estar entre as tags <?php e ?>para que o servidor Web saiba que esse trecho trata-se de um código em PHP e que deve ser processado 10 Variáveis Inicia por $ seguido de uma letra ou _ é case sensitive, isto é, sensível ao caso (distinção entre letras maiúsculas e minúsculas) Por exemplo, a variável $Cor é completamente diferente da variável $cor 11 Comentários De uma linha: // este é o comentário de uma linha # este é o comentário de uma linha De mais de uma linha: delimitado por /* e */ 12 Tipos de dados Não é necessário declarar uma variável antes de usá-la. Basta atribuir um valor inicial. A checagem de tipos é feita dinamicamente. Exemplo: $x=5; $x="policamp"; $x=3.14; Inteiro Ponto flutuante String Array Objeto Checagem dinâmica de tipos 13 Inteiros (integer ou long) $x = 4567; # inteiro $y = -127; # inteiro negativo $o = 0116; # inteiro em representação octal (base 8) $hex = 0x0F; # inteiro em representação hexadecimal (base 16) 14 Ponto Flutuante (double ou float) $PI=3.14; $MOL=6.02e23; # uso da notação científica 15 Strings Podem ser delimitadas por aspas simples (literal) ou aspas duplas (onde há interpretação de varáveis e caracteres especiais). \n \r \t \\ \$ \' \" 16 Booleano Expressa um valor lógico que pode ser verdadeiro (TRUE) ou falso (FALSE) Exemplo: <?php $valida=true; if($valida) { $a = 1; } ?> 17 Arrays Podem ser definidos como mapeamentos ou vetores indexados Exemplo: <? $cores[0]="Red"; $cores[1]="Green"; $cores[2]="Blue"; ?> 18 Arrays - tipos de índices Ordenado baseado em número (começa no 0) Associativo formado por caracteres alfanuméricos 19 Arrays $cores = array("Red", "Green", "Blue"); ou $cores = array(0=>'Red', 1=> "Green", 2=>"Blue"); ou $cores[]="Red"; $cores[]="Green"; $cores[]="Blue"; 20 Arrays Associativos São conjunto ordenados de chaves e valores, onde cada valor é acessado através de uma chave associada. 21 Arrays Associativos <?php $cor['red']=0; $cor['green']=255; $cor['blue']=0; ?> ou <?php $cores=array('red'=>0, 'green'=>1, 'blue'=>2); ?> 22 Arrays (3) Usamos a função unset() para destruir todo o array. 23 pseudo-types São tipos "falso" que ajudam da legibilidade: mixed: indica que o parâmetro pode aceitar múltiplos tipos mas não necessariamente todos os tipos. number: indica que o parâmetro pode ser tanto integer ou float callback 24 Funções de array array_pop retira e retorna o último elemento do array array_push insere um ou mais elementos no fim de um array array_shift retira e retorna o primeiro elemento de um array array_unshift insere um novo elemento no inicio de um array array_rand retorna um ou mais elementos do array array_reverse retorna um array com ordem inversa array_keys retorna as chaves de um array array_values retorna os valores de um array sizeof retorna o número de elementos do array count retorna a quantidade de elementos de um array 25 Função each Percorre os elemento de uma lista $chamada = array (aluno1 => francisco, alunos2 => jose); while(list($chave,$valor)=each($chamada) { echo "<p>Chave=[$chave], Valor=[$valor]\n"; } 26 Listas Exemplo: list($a,$b,$c)=array("a","b","c"); 27 Transformação de Tipos por coerção Coerção é a conversão de um tipo em outro tipo diferente mediante operação realizada com tipos diferentes. Por exemplo: $a=1; $a = $a + "5"; Nesse exemplo a variável $a é numérica (integer) na primeira atribuição e string na segunda atribuição 28 Transformação explicita de tipos Feita via typecast (como em linguagem C) Exemplo: $a = 6; # a é um integer (6) $a = (float) 6; # é um float (6.0) 29 Casts permitidos (int), (integer) Integer (real), (double), (float) Float (string) String (array) Array (objeto) objeto 30 Constantes Uma constante é um identificador (nome) para um único valor que não se altera durante a execução de um script) Pré-definidas Definidas pelo usuário Exemplo: define("MOL", 6.14e22); define("PI", 3.1415); echo MOL; echo PI; 31 Constantes - Exemplo <?php // Nomes de constantes válidos define("FOO", "alguma coisa"); define("FOO2", "alguma outra coisa"); define("FOO_BAR", "alguma coisa mais"); // Nomes de constantes inválidas define("2FOO", "alguma coisa"); // Isto é válido, // O PHP pode vir mágica // que danificará define("__FOO__", mas deve ser evitado: a fornecer uma constante seu script "alguma coisa"); ?> 32 Constantes "Mágicas" <?php print __FILE__ ; # nome do arquivo echo "\n"; echo __LINE__; # nº da linha echo "\n"; echo __FUNCTION__; # nome da função echo "\n"; ?> 33 Operadores Aritméticos Atribuição Bit a bit Lógicos Comparação Expressão condicional Incremento e decremento 34 Aritméticos + Adição - Subtração * Multiplicação / Divisão % Resto da divisão (módulo) 35 Atribuição = ($a=5); += ($a = $a + 5; $a+=5;) -= *= /= %= .= 36 Bit a Bit & (and) | (or) ^ (xor) ~ (not) << - deslocamento de bits a esquerda >> - deslocamento de bits a direita 37 Lógicos and (e) or (ou) xor (ou-exclusivo) ! (negação) && (e) || (ou) 38 Comparação == (igualdade) != (diferença) < (menor que) > (maior que) <= (menor ou igual a) >= (maior ou igual a) 39 Condicional (expressão) ? (expressão2) : (expressão3); Exemplo: $a=5; $a > 5 ? $b="1" : $b="0"; 40 Incremento e Decremento ++ $contador=1; - ++$a um e $a++ --$a $a-- : pré-incremento (incrementa $a em depois retorna $a) : pós-incremento : pré-decremento : pós-decremento 41 Precedência de Operadores $contador=1; 42 Estruturas de Controle Blocos Comandos condicionais Comando de repetição 43 Blocos São delimitados por { e } 44 Comando Condicional if (expressão) comando; if(expressão) { comando1; ... comandoN; } 45 Comando Condicional (2) If (expressão) comando1; else comando2; If(expressão): comando1; ... comandoN; else comando1; ... comandoN; endif 46 Comando Condicional (3) if(expressão1) { comando1; } elseif(expressão2) { comando2; } ... else{ comandoN; } 47 Exemplo <?php $salario = 1000; $desconto = 0.10; // 10% $total = $salario - $salario*$desconto; if($total>900) { echo ""; } ?> 48 switch switch (expressão) { case valor1: comando1; break; case valor2: comando2; break; } 49 Exemplo - switch <?php $i = 1; switch($i) { case 0: print "I break; case 1: print "I break; case 2: print "I break; default: print "I } ?> é igual a 0"; é igual a 1"; é igual a 2"; não é igual a 0, 1 ou 2"; 50 Comandos de repetição while do .. while for foreach 51 while while (expressão) { comando; } while (expressão) : comando1; ... comandoN; endwhile; 52 Exemplo <?php $a = 1; while ($a < 5) { print $a; $a++; } ?> 53 do..while $a=0; do { echo "a=$a\n"; $a++; } while ($a<=10); 54 Exemplo <?php $acabou = false; do { print "loop ..."; $acabou=true; } while (!$acabou); ?> 55 for for (expr1; expr2; expr3 ) { comando1 .. comandoN } 56 foreach Apresenta duas sintaxes: foreach (expressão as $valor) instruções ou foreach (expressão as $chave => $valor) instruções 57 foreach (exemplo) <?php $a = array(1,2,3,4,5); foreach ($a as $valor) { echo "valor=$valor<br>"; } ?> 58 foreach (exemplo) <?php $a = array ( "cod1" => 10, "cod2" => 20, "cod3" => 30, "cod4" => 40); foreach ($a as $chave => $valor) { echo "<p>chave=$chave, valor=$valor"; } ?> 59 Comandos break e continue break continue 60 Comandos break e continue break: pode ser usado em laços do, for e while. O break "quebra" a execução e continua executando o próximo comando continue: interrompe a execução e avalia novamente a condição de teste 61 Exemplo - break <?php # break.php for($i=0; $i < 100; $i++) { if($i == 10) { break; } echo " $i "; } ?> 62 Exemplo - continue <?php for($i=0; $i < 100; $i++) { if($i % 2) { continue; } echo " $i "; } ?> 63 Funções Definição Argumentos Passagem de parâmetros (valor ou referência) Argumentos com valores pré-definidos 64 Funções - Sintaxe function nome_da_função( [arg1, [arg2, ...,[argN]]] ) { comando1; ... comandoN; [ return valor_de_retorno ]; } 65 Funções definidas pelo usuário Uma função deve ser definida com a usando a sintaxe indicada abaixo: <?php function foo($arg_1, $arg_2, /* ..., */ $arg_n) { echo "Função Exemplo.\n"; return $retval; } ?> 66 Valores Retorno A declaração return é opcional Qualquer tipo poderá ser retornado incluindo listas e objetos. 67 Exemplo do uso do return <?php function quadrado($num) { return $num * $num; } echo quadrado(4); // saída '16'. ?> 68 Exemplo: Retornando um array com múltiplos elementos <?php function numeros_pequenos() { return array (0, 1, 2); } list($zero,$um,$dois)=numeros_pequenos(); ?> 69 Modificadores de variáveis Variáveis estáticas (static) mantém o valor que lhes foi atribuído na última execução. Usa o operador static. Variáveis variáveis ($$) Variáveis de ambiente 70 Exemplo: uso de variável estática <?php function obtemProximo() { static $contador=0; return ++$contador; } echo obtemProximo(),"\n"; // retorna 1 echo obtemProximo(),"\n"; // retorna 2 echo obtemProximo(),"\n"; // retorna 3 ?> 71 Passagem de parâmetros Existem dois tipos de passagem de parâmetros: por valor (by value) por referência (by reference) O padrão é a passagem por valor. 72 Exemplo <?php function incByValue($var, $valor) { $var += $valor; } function incByRef(&$var, $valor) { $var += $valor; } $a = 1; echo incByValue($a,2); // retorna a=1 echo "a=$a\n"; $a = 1; echo incByRef($a,2); // retorna a=3 echo "a=$a\n"; ?> 73 Variáveis de Ambiente <?php phpinfo(); ?> 74 Inclusão de arquivos include require include_once require_once Obs: include e include_once retornam uma advertência (warning) no caso de erro. require e require_once retornam um erro fatal em caso de erro. 75 Include x Require O comando include é reavaliado a cada chamada A instrução require pode incluir apenas um arquivo (a função require não inclui arquivos dinamicamente) 76 Exemplo biblioteca.php <?php /* * função quadrado * retorna o quadrado de um número * */ function quadrado($num) { return $num * $num; } ?> 77 Exemplo teste_include.php <?php // carrega o arquivo com a função necessaria include 'biblioteca.php'; // imprime o quadrado de echo quadrado(2); 2 ?> 78 Tipo de variável string gettype(mixed var); Possíveis valores de retorno: Integer Double String Array Object Unknown type 79 Formulários HTML <form method="[GET|POST]" action="" name ="" > ... </form> 80 Tratando informações recebidas de Formulários $_POST: array global que permite a leitura de variáveis passadas através de um formulário HTML usando método POST $_GET : array global que permite a leitura de variáveis passadas na URL através de um formulário HTML usando método GET 81 Método GET $_GET['nome'] $_GET['email'] 82 Método POST $_POST['nome'] $_POST['email'] 83 Exemplo – Método POST form.html <form method="POST" action="script.php"> Nome: <input name="nome" type="text"> </form> script.php <?php $nome=$_POST["nome"]; Echo "<p>nome=$nome"; </php> 84 Exemplo – Método GET form.html <form method="GET" action="script.php"> Nome: <input name="nome" type="text"> </form> script.php <?php $nome=$_GET["nome"]; echo "<p>nome=$nome"; </php> 85 Algumas funções úteis htmlspecialchars(<string>); stripslashes(<string>); urlencode(); urldecode(); 86 Variáveis Superglobals $GLOBALS Contém uma referencia a todas as variáveis disponíveis no escopo global no script. As chaves desse array são os nomes das variáveis globais. $_SERVER Variáveis setadas pelo servidor web ou de outra forma relacionadas diretamente ao ambiente de execução do ambiente corrente. $_GET Variáveis providas pelo script via URL query string. $_POST Variáveis providas pelo script via HTTP POST. $_COOKIE Variáveis providas ao script via HTTP cookies. 87 Variáveis Superglobals (2) $_FILES Variáveis providads ao script através do upload de arquivos via POST usando HTTP. $_ENV Variáveis de ambientes providas ao script. $_REQUEST Variáveis providas ao script via mecanismos de entrada como GET, POST e COOKIE. Veja também import_request_variables(). $_SESSION Variáveis que estão registradas a uma sessão de associada a um script. 88 Funções úteis na validação de formulários empty – verifica se determinada string esta vazia (nula) strlen – retorna o número de caracteres de uma string strstr – acha a primeira ocorrência de uma string. Se não encontrar retorna falso (FALSE) 89 Cookies e Sessions HTTP é um protocolo "sem estado" Cookie e Session são mecanismos que permitem armazenar informações enquanto o usuário navega entre diferentes páginas. 90 Exemplos de uso de cookies e sessões Autenticação de usuários Carrinho de compras Exibição de anúncios ou imagens Personalização de páginas 91 Uso de Cookies É um arquivo texto armazenado no computador do usuário para ser posteriormente recuperado pelo servidor Formado por um par nome/valor Tempo de validade: tempo no qual o cookie estará armazenado no micro do usuário O uso de cookie poderá ser habilitado / desabilitado pelo navegador 92 Uso de cookies bool setcookie (string nome [, string valor [, int validade [, string caminho [, string dominio [, int seguro]]]]]), onde: nome: nome do cookie valor: é o conteúdo do cookie (se não for fornecido o cookie será removido) validade: tempo de validade do Cookie caminho: caminho no servidor onde o cookie estará disponível domínio: domínio para o qual o cookie estará disponível Seguro: 0 ou 1 (se 1 o cookie apenas será transmitido caso segue uma conexão segura (HTTPS)) 93 Exemplo setcookie("username","joao@net"); setcookie ("username); Obs: o envio de cookies deverá ser a primeira coisa a ser feita na transmissão de uma página (antes inclusive das tags <html> e <body>) 94 Recuperação de Cookies Uso do array superglobal $_COOKIE Exemplo: setcookie("username","joao@net"); E em uma outra página: $_COOKIE["username"]; 95 Exemplo de uso: autenticação de usuários "autenticação é uma maneira que você tem de se certificar de que somente os usuários que possuem autorização estão acessando uma área restrita do seu site" 96 Passos para Autenticação Podemos dividir a autenticação de usuários com o uso de cookies em três passos: 1) Criação de uma página de login 2) Criação de uma rotina de validação para que seja usada nas páginas que fazem uso das áreas restritas 3) Criação de uma página de logout para os usuários autenticados a fim de realizar a exclusão do cookie. 97 Exemplo de login usando cookies login.html login.php valida_cookies.inc logout.php pagina_inicial.php 98 Sessão (Session) É um período de tempo durante o qual uma pessoa navega pelas páginas de um site Permitem o compartilhamento de informações entre diferentes páginas Cada sessão possui um session id (SID) que é um identificador único 99 Propagação do SessionID Poderá ser feito por: cookies propagação de variáveis na URL (endereço destino) 100 Criação de Sessão no PHP Manual Explícita (session_start) Implícita (ao registrar uma variável com a função session_register) Automática Depende da diretiva session.auto_start estar habilitada no arquivo php.ini 101 Exemplo de Session <?php session_start(); $contador= $_SESSION['contador']; if(!isset($_SESSION['contador '])) { $_SESSION['contador']=1; } else { $_SESSION['contador']++; } echo "<p>Contador=$contador"; $sid=session_id(); echo "<p>session_id= $sid"; ?> 102 Cookies x Sessões Cookies Tempo de duração Pode permanecer armazenado por mais tempo (mesmo após o navegador ser eliminado) Local de armazenamento Pequenos arquivos armazenados na máquina do usuário Sessões Tempo de duração Dura enquanto o usuário permanecer dentro do site Local de armazenamento Arquivos localizados no servidor (um arquivo por sessão) 103 Cookies x Sessões Cookies Sessões Tempo de duração Pode permanecer armazenado por mais tempo (mesmo após o navegador ser eliminado) Dura enquanto o usuário permanecer dentro do site Local de armazenamento Pequenos arquivos armazenados na máquina do usuário Arquivos localizados no servidor (um arquivo por sessão) 104 Comandos básicos de saída echo é uma comando que imprime uma ou mais variáveis no console print é uma função que imprime uma string no console var_dump imprime o conteúdo de uma variável print_r imprime o conteúdo de uma variável, mas num formato mais legível para o programador 105 Manipulação de Arquivos fopen feof fgets fwrite fclose file_put_contents file_get_contents file copy rename unlink file_exists is_file 106 Manipulação de Diretórios mkdir getcwd chdir rmdir opendir closedir readdir 107 Manipulação de Arquivos e Diretórios fopen int fopen(string arquivo, string modo [, int usar_path ´, resource contexto]]) onde: arquivo: modo: usar_path: contexto: 108 Manipulação de strings – algumas funções strtoupper strtolower substr strpad strrepeat strlen str_replace str_pos 109 Classes e Objetos Classes Métodos 110 Classe class Complexo { private $real; private $imag; public function real() { return $this->real; } public function imag() { return $this->imag; } } 111 Criação de Objetos $z = new Complexo; $parte_real = $z->real(); $parte_imag = $z->imag(); 112 Bibliografia Dall'Oglio, P. PHP Programando com Orientação a Objetos. Novatec. 2007. NIEDERAUER, J. Web Interativa com Ajax e PHP. Novatec, 2007. Manual do PHP. http://br.php.net/manual 113 Backup Slides 114 Links Revista PHP Magazine http://www.phpmagazine.org.br 115 PHP e MySQL 116 Conectando do BD MySQL <?php $conexao = mysql_connect("localhost","us uario","password"; ?> 117 Exemplo de Consulta em SQL <?php $resultado = mysql_query("select * from produto"); mysql_close($conexao); ?> 118 mysql API mysql_affected_rows – retorna o número de linhas afetadas por uma operação mysql_fetch_array – armazena a linha atual em um array associativo mysql_fetch_object – retorna uma linha como um objeto mysql_fetch_row – armazena a linha atual em um array mysql_result – retorna uma coluna do resultado mysql_num_rows – retorna o numero de linhas de uma consulta mysql_num_fields – retorna o numero de colunas de uma consulta mysql_field_name – retorna o nome de uma coluna em uma consulta 119 mysql API int mysql_connect(str host, str username, str password) int mysql_select_db(str database [, int link_identifier]) int mysql_query(str query [, int link_identifier]) array mysql_fetch_array(int result [, int result_type]) 120 mysql API array mysql_fetch_row(int result) int mysql_insert_id([int link_identifier]) --> retorna o número de linhas após execução de um comando select int mysql_affected_rows([int link_identifier]) --> retorna o nº de linhas que foram afetados em uma tabela por comandos update, insert e delete 121 mysql API mysql_error() 122 Exemplos de Funções 123 Funções date e time string date ( string $format [, int $timestamp ] ) Formata a data e a hora local int time ( void ) Retorna o timestamp Unix atual 124 Exemplos <?php echo echo echo echo echo ?> date("Y-m-d",0),"\n"; date("Y-m-d",time()),"\n"; date("d/m/Y",time()),"\n"; date("d/m/y",time()),"\n"; date("d/m/y H:i:s",time()),"\n"; 1969-12-31 2008-11-27 27/11/2008 27/11/08 27/11/08 09:20:11 125 Função mktime int mktime ([ int $hora [, int $minuto [, int $second [, int $mes [, int $dia [, int $ano [, int $is_dst ]]]]]]] ) Obtém um timestamp Unix para uma data 126 Exemplo <?php echo date("d/m/Y H:i:s", mktime(2, 12, 4, 10, 3, 01)); ?> 127 Datas - MySQL date_format(date, format) Exemplo: SELECT *, date_format(data,'%d/%m/%Y') dt FROM teste.gasto g where date_format(data,'%d/%m/%Y')='26/11/2008' 128 Exemplo Seleciona os gastos entre duas datas: SELECT *, date_format(data,'%d/%m/%Y') dt FROM teste.gasto g where date_format(data,'%Y%m%d') between '20081124' and '20081125' 129