Tópicos avançados em internet A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação PHP Conceitos básicos Crédito: Material baseado no material da Profa. Beatriz Wilges – UFSC / Senac TI Visão geral da linguagem HTML. HTML (Hyper Text Markup Language) ou Linguagem de Marcação de Hipertexto. Os arquivos recebem a extensão ".html" ou ".htm". O formato genérico de uma tag é <nome da tag>texto</nome da tag> Todo e qualquer código html é iniciado <html> e finalizado </html>. Visão geral da linguagem HTML. Cabeçalho Delimitam a seção de cabeçalho do documento. Trata-se da primeira seção do documento. <head></head> Título Indica o titulo do documento que será apresentado na barra superior do browser. <title></title> Corpo Entre esse código fica a maior parte do conteúdo a ser apresentado, textos, imagens etc. <body></body> Informações O elemento meta é usado para prover informações que são relevante para os navegadores ou para as ferramentas de busca como a descrição do conteúdo do seu documento. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> Visão geral da linguagem HTML. Conclusão <html> <head> <title>Aqui ficará o titulo do meu site!!!</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> Aqui ficará o conteúdo do seu site. </body> </html> Introdução ao PHP PHP significa: Hypertext Preprocessor. PHP é uma linguagem de criação de scripts embutida em HTML no servidor. O PHP está atualmente na versão 5. PHP tem pouca relação com layout. O PHP é um módulo oficial do servidor http Apache. Uma linguagem extremamente modularizada. 35% da Internet roda PHP. Introdução ao PHP O PHP é Software Livre, distribuído sob uma licença na qual os usuários não são obrigados a publicar seu código. PHP é disponível para os seguintes sistemas operacionais: Windows, Linux, FreeBSD, Mac OS, OS/2, AS/400, Novell Netware, RISC OS, IRIX e Solaris. Bases de dados: Oracle, Sybase, PostgreSQL, InterBase, MySQL, SQLite, MSSQL, Firebird, etc. Introdução ao PHP A linguagem PHP é uma linguagem de programação de domínio específico. Características: Velocidade e robustez; Estruturado e orientação a objeto; Portabilidade - independência de plataforma - escreva uma vez, rode em qualquer lugar; Tipagem fraca; Sintaxe similar a Linguagem C/C++ e o PERL; História Rasmus Lerdorf - engenheiro de software, membro da equipe Apache e o homem misterioso do ano 1994 - Tratava−se de um wrapper de PerlCGI que o auxiliava a monitorar as pessoas que acessavam o seu site pessoal No ano seguinte, ele montou um pacote chamado de Personal Home Page Tools (também conhecido como PHP Construction Kit) 1997, o PHP estava sendo utilizado mundialmente em aproximadamente 50.000 sites. Zeev Suraski e Andi Gutmans, dois programadores israelenses que desenvolveram os analisadores de sintaxe PHP3 e PHP4, também generalizaram e estenderam seus trabalhos sob a rubrica de Zend.com (Zeev, Andi, Zend, entendeu?) Tabela comparativa Sintaxe básica Delimitando o código PHP <?php comandos; ?> -----------------------<script language=”php”> comandos; </script> Sintaxe básica Delimitando o código PHP <? comandos; ?> -----------------------<% comandos; %> Sintaxe básica Escapando o HTML <p>Isto vai ser ignorado.</p> <?php echo 'Enquanto isto vai ser interpretado.'; ?> <p>Isto também vai ser ignorado.</p> Sintaxe básica Separação de instruções Instruções são terminadas com um ponto-e-vírgula. <?php echo 'Este é um teste'; ?> Sintaxe básica Nomes de variáveis Toda variável em PHP tem seu nome composto pelo caracter $ e uma string. deve iniciar por uma letra ou o caracter “_” PHP é case sensitive, ou seja, as variáveis $php e $PHP são diferentes. Evitar os nomes em maiúsculas. Sintaxe básica Comentários <?php echo 'Isto é um teste'; // Estilo de comentário de uma linha em c++. /* Este é um comentário de bloco.*/ echo 'Isto é ainda outro teste'; echo 'Um teste final'; # Este é um comentário de uma linha no estilo shell ?> Tipos suportados O PHP suporta os oitos tipos primitivos. São quatros tipos básicos: boolean integer float (número de ponto flutuante, ou também double) String Dois tipos compostos: array object E finalmente dois tipos especiais: resource NULL Tipos suportados Boolean Um booleano expressa um valor de verdade. Ele pode ser TRUE ou FALSE. Integer <?php $a = 1234; // número decimal $a = -123; // um número negativo $a = 0123; // número octal (equivalente a 83 em decimal) $a = 0x1A; // número hexadecimal (equivalente a 26 em decimal) ?> Tipos suportados Float <?php $a = 1.234; $b = 1.2e3; $c = 7E-10; ?> String Uma string é uma série de caracteres. Um caracter é o mesmo que um byte. Ou seja, há exatamente 256 caracteres diferentes possíveis. <?php echo 'isto é uma string comum'; // Imprime: Arnold disse uma vez: "I\'ll be back" echo 'Arnold disse uma vez: "I\'ll be back"'; ?> Tipos suportados array Um array no PHP é atualmente um mapa ordenado. Um mapa é um tipo que relaciona valores para chaves. <?php // Criando um array normal $array = array(1, 2, 3, 4, 5); print_r($array) ?> Object Para inicializar um objeto, você usa a instrução new Tipos suportados resource Recurso é uma variável especial, mantendo uma referência de recurso externo. NULL O valor especial NULL representa que a variável não tem valor. NULL é o único valor possível do tipo NULL. Dados alfanuméricos Aspas Simples (') - o valor da variável será exatamente o texto contido entre as aspas. com exceção de \\ e \' Aspas Dupla (“) - Qualquer variável ou caracter de escape será expandido antes de ser atribuído. Aspas Invertidas (`) - Executar comandos do SO através do PHP. Aspas duplas(“) Sequências de controle Constantes São valores que são pré-definidos no início do programa. Comando define (string nome, misto valor, [bool case_insensitive]) define ("pi", 3.1415926536); $circunf = 2*pi*$raio; Por convenção, o nomes de constantes são sempre em maiúsculas. Constantes O PHP já possui diversas constantes pré-definidas. Para ter acesso as constantes pré-definidas é possível usar a função phpinfo(). Constantes: TRUE, FALSE, _FILE_ , _LINE_, PHP_VERSION, PHP_OS, E_ERROR, E_WARNING, E_PARSE, E_NOTICE. Variáveis Existem váriaveis do tipo numéricas, alfanuméricas, arrays e objetos. Numéricas: Inteiros ou reais $numero = 10; $x = 5; $numero_hexa = 0x0b; $y = 200.3; Variáveis Alfanuméricas(strings) $nome = 'Claudiomar'; $profissao = 'Pedreiro'; $texto = “Boa tarde! \n Seja bem-vindo!”; Array $vetor[0] = 30; $vetor[1] = 40; $vetor[2] = 50; $vetor[3] = 60; Variáveis Array $vet[ ] = “Grêmio”; $vet[ ] = “Campeão”; Array com chave associativa $vetor[“time”] = “Grêmio”; $vetor[“titulo”] = “Campeão da américa”; Variáveis Váriaveis variaveis O PHP tem um recurso conhecido como variáveis variáveis, que consiste em variáveis cujos nomes também são variáveis. Sua utilização é feita através do duplo cifrão ($$). $a = “teste”; $$a = “Testando variaveis”; Equivalente a $a = “teste”; $teste = “Testando variaveis”; Variáveis enviadas pelo navegador Para interagir com a navegação feita pelo usuário, é necessário que o PHP possa enviar e receber informações para o software de navegação. A maneira de enviar informações geralmente é através de um comando de impressão, como o echo. Para receber informações usa-se as variáveis prédefinidas: $_GET Array com variáveis passadas via GET $_POST Array com variáveis passadas via POST $_REQUEST Array com variáveis de requisição Variáveis enviadas pelo navegador Exemplo de requisição http://www.meusite.com/index.php?valor1=xyz&valor2=abc Para o script obter as variáveis usamos <? $var1 = $_REQUEST[‘valor1’]; // ou $_GET[‘valor1’] $var2 = $_REQUEST[‘valor2’]; // ou $_GET[‘valor2’] echo “VAR1: $var1 – VAR2: $var2 <br>”; ?> URL encode O formato urlencode é obtido substituindo os espaços pelo caracter “+” e todos os outros caracteres não alfa−numéricos (com exceção de “_”) pelo caracter “%” seguido do código ASCII em hexadecimal. Por exemplo: o texto “Testando 1 2 3 !!” em urlencode fica “Testando+1+2+3+%21%21” O PHP possui duas funções para tratar com texto em urlencode. Seguem suas sintaxes: string urlencode(string texto); string urldecode(string texto); Variáveis de ambiente PHP possui diversas variáveis de ambiente Exemplo: $PHP_SELF Para ver relação completa usar a função phpinfo(); Variáveis prédefinidas Superglobais — Superglobais são variáveis nativas que estão sempre disponíveis em todos escopos $GLOBALS — Referencia todas variáveis disponíveis no escopo global $_SERVER — Informação do servidor e ambiente de execução $_GET — HTTP GET variáveis $_POST — HTTP POST variables $_FILES — HTTP File Upload variáveis $_REQUEST — Variáveis de requisição HTTP $_SESSION — Variáveis de sessão $_ENV — Environment variables $_COOKIE — HTTP Cookies Verificando tipo de uma variável Por causa da tipagem dinâmica utilizada pelo PHP, nem sempre é possível saber qual o tipo de uma variável em determinado instantes não contar com a ajuda de algumas funções que ajudam a verificar isso. A verificação pode ser feita usando a função gettype string gettype(mixed var); A palavra “mixed” indica que a variável var pode ser de diversos tipos. A função gettype pode retornar as seguintes strings: “integer”, “double”, “string”, “array”, “object” e “unknown type”. Verificando se uma variável possui um valor Usar a função isset(); int isset(mixed var); E retorna true se a variável estiver setada (ainda que com uma string vazia ou o valor zero), e false em caso contrário. Expressões As formas mais básicas de expressões são constantes e variáveis. Exemplo: Quando você digita "$a = 5", você está atribuindo '5' para a variável $a. Assim se você escrever $b = $a, você pode esperar que $b se comporte da mesma forma. Exemplos ligeiramente mais complexos para expressões são as funções. Operadores Operadores aritméticos; Operadores binários; Operadores de comparação; Operadores de atribuição; Operadores lógicos; Operador Ternário; Operadores Operadores aritméticos: Operadores Operadores binários: Operadores Operadores comparação: Operadores Operadores atribuição: Operadores Operadores lógicos: Operadores Operadores ternário: Forma abreviada de usar o comando “if” Sua sintaxe é: Condição? Expressão1 : Expressão2 Operadores Operadores ternário: Forma abreviada de usar o comando “if” Sua sintaxe é: Condição? Expressão1 : Expressão2 Precedência de operadores Precedência de operadores Lógica e estruturas de controle Tabela verdade Conectivo de conjunção(“AND" - representado por ^) A B A^B 0 0 0 0 1 0 1 0 0 1 1 1 A: Maria tem um gato B: José tem um cachorro A proposição composta A^B será: Maria tem um gato e José tem um cachorro Então, A^B somente é verdadeira se ambas as proposições são verdadeiras. Se ambas, ou uma delas é falsa, a proposição será falsa. Tabela verdade Conectivo de disjunção ( “OR" - representado por v) A B AVB 0 0 0 0 1 1 1 0 1 1 1 1 1: Paulo é professor ou administrador 2: Maria é jovem ou idosa No primeiro caso, o "ou" é inclusivo pois, pelo menos uma das proposições é verdadeira, podendo ser ambas. Mas no caso da segunda, o "ou" é exclusivo, pois somente uma das proposições poderá ser verdadeira. Tabela verdade Tabela-verdade da disjunção "exclusiva" - XOR A B A^B 0 0 0 0 1 1 1 0 1 1 1 0 Nota: Em nada se falando ao contrário, consideramos sempre o "ou"como "inclusivo". Tabela verdade Tabela-verdade da implicação A B A -> B 0 0 1 0 1 1 1 0 0 1 1 1 Se a lua é quadrada então a neve é branca. : p -> q ( p é o antecedente e q o conseqüente) Estruturas de controle Comandos condicionais if (expressão) { instruções; } _____________________________________ Exemplo: <?php $a = 3; $b = 5; if ($a > $b) { echo "a é maior que b"; $b = $a; } ?> Estruturas de controle Comandos condicionais else Normalmente você vai querer executar uma instrução se uma certa condição for encontrada, e uma instrução diferente se a condição não for encontrada. Exemplo: <?php $a = 3; $b = 5; if ($a > $b) { echo "a é maior que b"; } else { echo "a NÃO é maior que b"; } ?> Estruturas de controle Comandos condicionais elseif Ao contrário de else, ele executará aquela expressão alternativa somente se a expressão condicional do elseif for avaliada como TRUE. Exemplo: <?php $a = 3; $b = 5; if ($a > $b) { echo "a é maior que b"; } elseif ($a == $b) { echo "a é igual a b"; } else { echo "a é menor que b"; } ?> Estruturas de controle Comandos condicionais switch A instrução switch é similar a uma série de instruções “ifs” seguidas. <?php Exemplo: $i = 1; <?php $i = 1; switch ($i) { case 0: echo "i igual a 0"; break; case 1: echo "i igual a 1"; break; case 2: echo "i igual a 2"; break; } switch ?> if ($i == 0) { echo "i igual a 0"; } elseif ($i == 1) { echo "i igual a 1"; } elseif ($i == 2) { echo "i igual a 2"; } if ?> Estruturas de controle Comandos de repetição while Se comportam como seus compatíveis em C. O formato básico de um comando while é: while (expressao) instruções; _______________________________________________________________ ___ <?php /* exemplo 1 */ $i = 1; while ($i <= 10) { echo $i++; /* O valor impresso será $i e depois $i será incrementado (post-increment). */ } ?> Estruturas de controle Comandos de repetição while <?php /* exemplo 2 */ $i = 1; while ($i <= 10): echo $i; $i++; endwhile; ?> Estruturas de controle Comandos de repetição do-while Loops do-while são bem similares aos loops while, exceto pelo fato de que a condição é verificada no fim de cada iteração em vez de no começo. A diferença principal dos loops while regulares é que a primeira iteração de um loop do-while é garantidamente executada (a condição só é verificada no fim da iteração) . Exemplo: <?php $i = 0; do { echo $i; } while ($i > 0); ?> Estruturas de controle Comandos de repetição for Se comporta como em C. A sintaxe de um loop for é: for (expr1; expr2; expr3) instrucoes; Exemplo: <?php /* exemplo 1 */ for ($i = 1; $i <= 10; $i++) { echo $i; } ?> Estruturas de controle Comandos de repetição for Exemplo: <?php /* exemplo 2 */ for ($i = 1; ; $i++) { if ($i > 10) { break; } echo $i; } ?> Estruturas de controle Comandos de repetição for Exemplo: <?php /* exemplo 3 */ $i = 1; for (; ; ) { if ($i > 10) { break; } echo $i; $i++; } ?> Estruturas de controle Comandos de repetição foreach Funciona somente com arrays, e lançará um erro se tentar utilizá-lo em uma variável de qualquer tipo diferente ou em variáveis não inicializadas. foreach (expressao_array as $valor) instrucoes foreach (expressao_array as $chave => $valor) instrucoes Exemplo: <?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } // $arr is now array(2, 4, 6, 8) unset($value); // quebra a referência com o último elemento ?> Estruturas de controle Controlar o fluxo dentro das repetições break Cancela a execução do comando for, foreach, while, do-while ou switch atual. Break aceita um argumento numérico opcional que diz a ele quantas estruturas aninhadas englobadas devem ser quebradas. Estruturas de controle break <?php $arr = array('um', 'dois', 'três', 'quatro', 'PARE', 'cinco'); while (list (, $val) = each ($arr)) { if ($val == 'PARE') { break; /* Você poderia colocar 'break 1;' aqui. */ } echo "$val<br>\n"; } /* Utilizando o argumento opcional. */ $i = 0; while (++$i) { switch ($i) { case 5: echo "No 5<br />\n"; break 1; /* Sai somente do switch. */ case 10: echo "No 10; saindo<br />\n"; break 2; /* Sai do switch e while. */ default: break; } } ?> Estruturas de controle return • Se chamada em uma função, a instrução return() termina imediatamente a execução da função atual e retorna seu argumento como o valor da função. Se chamada no escopo global, a execução do script atual será terminada. Se o arquivo do script atual foi incluído com include() ou require(), então a execução é devolvida para o arquivo chamador. Especificamente para arquivos de script incluídos com include(), o valor fornecido para return() será devolvido como o valor da chamada include(). Se return() for chamado do arquivo de script principal, então o programa pára. • • • Funções Funções definidas pelo usuário Uma função pode ser definida usando a seguinte sintaxe Exemplos: <?php function foo ($arg_1, $arg_2, /* ..., */ $arg_n) { echo "Exemplo de função.\n"; return $valor_retornado; } ?> Um nome de função válido começa com uma letra ou um sublinhado, seguido por qualquer número de letras, números ou sublinhado. Funções definidas pelo usuário Informações podem ser passadas para funções através da lista de argumentos, que é uma lista de expressões delimitados por vírgulas. O PHP suporta a passagem de argumentos por valor (o padrão), passagem por referência e valores padrões de argumento. Exemplo #1 Passando arrays para funções <?php function takes_array($input) { echo "$input[0] + $input[1] = ", $input[0]+$input[1]; } ?> Funções definidas pelo usuário Exemplo #2 Passando parâmetros de função por referência Por padrão, argumentos de uma função são passados por valor (de forma que se você mudar o valor do parâmetro dentro da função, ele não é alterado fora da função). Se você deseja permitir que uma função modifique seus argumentos, você precisa passá-los por referência. <?php function add_some_extra(&$string) { $string .= ' e alguma coisa mais.'; } $str = 'Isto é uma string,'; add_some_extra($str); echo $str; // imprime 'Isto é uma string, e alguma coisa mais.' ?> Funções definidas pelo usuário Exemplo #3 Valores padrão de argumentos Uma função pode definir valores padrão no estilo C++ para argumentos escalares, como a seguir: <?php function cafeteira ($tipo = "cappuccino") { return "Fazendo uma xícara de café $tipo.\n"; } echo cafeteira (); echo cafeteira ("expresso"); ?> Retornando valores Valores podem ser retornados utilizando a instrução opcional return. Qualquer tipo pode ser retornado, incluindo arrays e objetos. Isto faz com que a função termine sua execução imediatamente e passe o controle de volta para a linha de onde ela foi chamada. Exemplo: <?php function quadrado ($num) { return $num * $num; } echo quadrado (4); // imprime '16'. ?> Retornando valores Exemplo #2 Retornando um array para devolver vários valores <?php function numeros_pequenos() { return array (0, 1, 2); } list ($a, $b, $c) = numeros_pequenos(); ?> Funções recursivas Funções recusivas são aquelas funções que chamam a elas mesmas. <?php function teste ($valor) { If ($valor !=0) { echo “Foi chamada a função teste passando o valor $valor <br>”; Teste ($valor - 1); } } teste(7); ?> Funções variáveis PHP permite o conceito de funções variáveis <?php class Foo { function MetodoVariavel() { $name = 'Bar'; $this->$name(); // Isto chama o método Bar() } function Bar() { echo "Bar foi chamada!"; } } $foo = new Foo(); $funcname = "MetodoVariavel"; $foo->$funcname(); // Isto chama $foo->MetodoVariavel() ?> Funções internas (built-in) O PHP por padrão vem com várias funções e construtores. Eles podem ser funções que dependem de extensões específicas do PHP compiladas. Caso estas extensões não estejam compiladas você obterá erros fatais "undefined function". Por exemplo, para usar funções de imagem como a imagecreatetruecolor(), você precisa que seu PHP seja compilado com suporte ao GD. Ou, para utilizar mysql_connect() você precisará ter seu PHP compilado com suporte ao MySQL. Há várias funções centrais que são incluídas em cada versão do PHP como funções de strings e variáveis. Uma chamada a phpinfo() ou get_loaded_extensions() mostrará que extensões estão carregadas em seu PHP. Utilizando includes Criando um menu para seu site Imagine um site que possui cerca de 100 páginas, e que no lado esquerdo das páginas há um menu com links para as seções do site; Se alguma seção for incluída ou excluída, como fazer para atualizar as 100 páginas? Criando um menu para seu site A função include tem o objetivo de incluir um arquivo dentro de outro. Sua sintaxe é a seguinte: include “nome_do_arquivo”; Se alguma seção for incluída ou excluída, como fazer para atualizar as 100 páginas? Criando um menu para seu site Passos para transformar um arquivo menu.inc em uma include: – 1. Identificar no código HTML onde está o menu; – 2. Retirar esse código HTML da página (ctr+c e ctr+v) – 3. Salvar esse novo arquivo com menu.inc – 4. No lugar de onde foi retirado, colocar uma chamada para a include entre as tags do PHP. Criando um menu para seu site Lembre-se: – O arquivo menu.inc seria uma include que contém os comandos HTML para – formar o menu principal do site. Então, em todas as páginas onde deve constar o menu, aparecerá uma chamada para include. Todas as páginas que possuem includes devem possuir a extensão “.php” Exibindo a data atual com uma include Podemos criar uma include que mostre a data atual, e chama-lá de todas as páginas em que é necessária a exibição da data. Exibindo a data atual com uma include Exemplo: <?php $meses = array (“Janeiro”, “Fevereiro”, “Março”, “Abril”, “Maio”, “Junho”, “Julho”, “Agosto”, “Setembro”, “Outubro”, “Novembro”, “Dezembro”); $dia = date (“d”, time( )); $mes = date (“m”, time( )); $ano = date (“Y”,time( )); echo $dia . “ de “ . $meses [$mes – 1]. “ de “ . $ano; ?> Reutilização de código Dentro das includes também podemos definir funções, e essas funções estarão disponíveis para todas as páginas. Reutilização de código Exemplo: <?php include “funcoes_aux.inc”; ?> <html> <body> … <?php $nome = maiusculo ($nome); echo $nome; ?> </body> </html> Include x Require Include é reavaliado a cada interação, ou seja, uma mesma instrução include pode incluir vários arquivos. Enquanto a instrução require pode incluir apenas um arquivo. Exemplo: $incluir = array (“funcoes_aux.inc”, “cabecalho.inc”, “data.inc”); Para realizar a inclusão dos arquivos fazemos um laço: for ($i = 0 ; $i < sizeof($incluir) ; $i ++) { require “$incluir[$i]; } Include x Require A cada interação do laço a função include é reavaliada. Portanto o correto seria escrever: $incluir = array (“funcoes_aux.inc”, “cabecalho.inc”, “data.inc”); Para realizar a inclusão dos arquivos fazemos um laço: for ($i = 0 ; $i < sizeof($incluir) ; $i ++) { include “$incluir[$i]; } Include x Require • • • • A instrução require() e include() inclui e avalia um arquivo. require() e include()são idênticos em todas as formas exceto pela manipulação de erros. Ambas produzem um Warning, mas require() resultará em um Fatal_Error. Em outras palavras, não hesite em utilizar require() se na falta de um arquivo quiser parar o processamento da página. Include() não se comporta da mesma maneira, e o script poderá continuar nessa situação. Em todo caso, vale a pena confirmar a configuração da diretiva include_path.