Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

apostila - completa - de - php5 - mysql - e-ajax, Notas de estudo de Informática

- - - - - - -

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 11/11/2008

valter-silva-4
valter-silva-4 🇧🇷

1 documento

Pré-visualização parcial do texto

Baixe apostila - completa - de - php5 - mysql - e-ajax e outras Notas de estudo em PDF para Informática, somente na Docsity! PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 1 Índice O que é PHP?.................................................................................................................... 6 Client Side scripts............................................................................................................. 6 Server Side scripts ............................................................................................................ 6 Ambiente de desenvolvimento de páginas PHP............................................................... 7 O que pode ser feito com PHP?........................................................................................ 7 Como surgiu a linguagem PHP?....................................................................................... 8 A sintaxe........................................................................................................................... 8 Delimitando o código PHP............................................................................................... 9 Alternagem avançada ....................................................................................................... 9 Separador de instruções .................................................................................................. 10 Comentários.................................................................................................................... 10 Variáveis......................................................................................................................... 11 Regras para nomear as variáveis .................................................................................... 11 Variáveis Predefinidas.................................................................................................... 11 Variáveis do servidor: $_SERVER ................................................................................ 12 Usando strings de consulta ............................................................................................. 15 Variáveis HTTP GET: $_GET ....................................................................................... 16 Transmitindo diversas variáveis de string de consulta ................................................... 16 Variáveis da requisição: $_REQUEST........................................................................... 17 Transmitindo caracteres especiais em uma string de consulta ....................................... 17 Array Associativo de recebimento de formulário........................................................... 19 Cotas mágicas no PHP.................................................................................................... 21 stripslashes( ) .................................................................................................................. 21 addslashes( ) ................................................................................................................... 21 Usando objetos de aplicação e sessão............................................................................. 22 Usando cookies para monitorar os clientes .................................................................... 22 Usando variáveis de sessão para controlar clientes ........................................................ 24 Tipos ............................................................................................................................... 26 Heredoc em Strings ........................................................................................................ 27 Interpretação de variáveis............................................................................................... 28 Coerção de tipo............................................................................................................... 29 Constantes....................................................................................................................... 30 Operadores...................................................................................................................... 31 Operadores Aritméticos.................................................................................................. 31 Operadores de Atribuição............................................................................................... 31 Operadores de Comparação............................................................................................ 32 Operadores de controle de erro....................................................................................... 34 Operadores de Incremento/Decremento ......................................................................... 34 Operadores Lógicos........................................................................................................ 35 Operadores de String ...................................................................................................... 35 Operadores de Arrays ..................................................................................................... 35 Estruturas de Controle .................................................................................................... 36 Estruturas Condicionais.................................................................................................. 36 if...................................................................................................................................... 36 else .................................................................................................................................. 37 elseif ............................................................................................................................... 37 PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 2 Sintaxe alternativa para estruturas de controle ............................................................... 38 Estruturas de Laços Condicionais (loop’s)..................................................................... 38 while ............................................................................................................................... 38 do...while ........................................................................................................................ 39 for ................................................................................................................................... 39 Um caso a parte – a estrutura do switch ......................................................................... 40 switch.............................................................................................................................. 40 break ............................................................................................................................... 42 continue .......................................................................................................................... 42 return............................................................................................................................... 43 Criando bloco de códigos reutilizáveis........................................................................... 43 require( ) ......................................................................................................................... 43 include( )......................................................................................................................... 44 require_once( )................................................................................................................ 47 include_once( ) ............................................................................................................... 47 Funções........................................................................................................................... 47 Funções definidas pelo usuário ...................................................................................... 47 Argumentos de funções .................................................................................................. 47 Valores padrão de argumentos ....................................................................................... 47 Funções definidas condicionalmente.............................................................................. 48 Funções dentro de funções ............................................................................................. 49 Funções com argumentos variáveis................................................................................ 50 Retornando valores ......................................................................................................... 50 Escopo de variáveis ........................................................................................................ 50 Variáveis Estáticas.......................................................................................................... 52 Enviando arquivos para o servidor ................................................................................. 53 Os códigos de erro de envio de arquivos........................................................................ 55 Como fazer UPLOAD de múltiplos arquivos................................................................. 56 Orientação a Objetos com PHP 5 ................................................................................... 56 Classe.............................................................................................................................. 56 O nome da classe ............................................................................................................ 57 new ................................................................................................................................. 57 Arrays (Matrizes)............................................................................................................ 70 O que é um array?........................................................................................................... 70 Arrays numericamente indexados .................................................................................. 70 Acessando o conteúdo de um array ................................................................................ 71 Uma outra maneira de criar arrays ................................................................................. 71 Utilizando loops para acessar o array ............................................................................. 71 Arrays Associativos........................................................................................................ 72 Utilizando loops com each( ) e list( ) ............................................................................. 72 foreach ............................................................................................................................ 74 Exemplo prático do uso do foreach ................................................................................ 75 Arrays Bidimensionais ................................................................................................... 76 Classificando arrays........................................................................................................ 77 Utilizando sort( )............................................................................................................. 77 Reordenando arrays aleatoriamente................................................................................ 78 Redirecionando um usuário ............................................................................................ 78 Expressões Regulares (compatíveis com o padrão POSIX)........................................... 78 As expressões regulares.................................................................................................. 79 Validando formatações e verificando preenchimentos................................................... 80 PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 5 Visualizando procedures criadas .................................................................................. 114 Visualizando a criação da procedure ............................................................................ 115 Criando um Stored Procedure com parâmetros............................................................ 115 Criando um procedure com a cláusula LIKE ............................................................... 115 Criando Views .............................................................................................................. 115 Visualizando a estrutura de uma view.......................................................................... 116 Visualizando a criação da view .................................................................................... 116 Excluindo uma view ..................................................................................................... 116 Criando Triggers (gatilhos) .......................................................................................... 116 Visualizando as triggers criadas ................................................................................... 117 Excluindo uma trigger .................................................................................................. 117 Administrando o MySQL ............................................................................................. 117 Entendendo o sistema de privilégios do MySQL ......................................................... 117 Configurando usuários.................................................................................................. 117 Confirmando o novo usuário ........................................................................................ 118 Revogando privilégios.................................................................................................. 118 Obtendo informações com SHOW............................................................................... 118 Integrando PHP e MYSQL........................................................................................... 119 Acessando seu banco de dados pelo PHP..................................................................... 119 Conectando ao MySQL e visualizando dados.............................................................. 119 Parâmetros opcionais de mysql_fetch_array ................................................................ 120 Inserindo dados na tabela livros ................................................................................... 121 Alterando o cadastro de livros ...................................................................................... 123 Trabalhando com MySQL Improved Extension .......................................................... 128 Criando a conexão com o mysqli ................................................................................. 129 Criando o arquivo de funções....................................................................................... 129 Criando o Stored Procedure para inserir autores .......................................................... 130 Criando o cadastro de autores....................................................................................... 130 Selecionando os autores através de Stored Procedure.................................................. 132 Chamando a Stored Procedure para visualizar os autores............................................ 132 Atualizando os autores por Stored Procedure............................................................... 134 Criando a procedure que seleciona um autor em específico ........................................ 134 Criando a página de atualização de autores.................................................................. 134 Excluindo autores ......................................................................................................... 137 Lendo e manipulando o conteúdo de um diretório ....................................................... 139 Criando arquivos em PDF ............................................................................................ 140 Arquivos de Excel ........................................................................................................ 144 Criando arquivos em RTF ............................................................................................ 146 Desenvolvendo aplicações Web com PHP e Ajax ....................................................... 149 O que é AJAX?............................................................................................................. 150 Como o AJAX trabalha ................................................................................................ 150 Criando uma página com Ajax ..................................................................................... 150 Entendendo o AJAX..................................................................................................... 154 Apêndice A................................................................................................................... 156 Bibliografia................................................................................................................... 166 PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 6 O que é PHP? PHP (um acrônimo recursivo para "PHP: Hypertext Preprocessor") é uma linguagem de script Open Source de uso geral, muito utilizada e especialmente guarnecida para o desenvolvimento de aplicações Web embútivel dentro do HTML. É uma linguagem que permite criar sites WEB dinâmicos, possibilitando uma interação com o usuário através de formulários, parâmetros da URL e links. A diferença de PHP com relação a linguagens semelhantes a JavaScript é que o código PHP é executado no servidor, sendo enviado para o cliente apenas html puro. Desta maneira é possível interagir com bancos de dados e aplicações existentes no servidor, com a vantagem de não expor o código fonte para o cliente. Isso pode ser útil quando o programa está lidando com senhas ou qualquer tipo de informação confidencial. O que diferencia PHP de um script CGI escrito em C ou Perl é que o código PHP fica embutido no próprio HTML, enquanto no outro caso é necessário que o script CGI gere todo o código HTML, ou leia de um outro arquivo. Client Side scripts São códigos de programa que são processados pela estação cliente. Geralmente em aplicações voltadas à Internet, o código que é executado no cliente cuida apenas de pequenas consistências de telas e validações de entrada de dados. Em se tratando de páginas web, os client-side scripts terão de ser processados por um browser. O maior problema de se utilizar este tipo de artifício em uma aplicação é a incompatibilidade de interpretação da linguagem entre os browsers. O Microsoft Internet Explorer, por exemplo, é capaz de interpretar o Visual Basic Script, porém o Netscape não o faz sem o auxílio de um plug in (que foi desenvolvido por terceiros). Há ainda o problema de versões muito antigas de navegadores, que não conseguem interpretar nenhum script. Em grande parte das situações, não é possível exigir que o usuário final disponha de determinado produto para acessar a aplicação. Portanto é importante pesar todos estes fatores ao planejar alguma aplicação com client-side scripts. A linguagem script mais indicada para se construir client-side scripts é o JavaScript, devido a sua compatibilidade com os dois browsers (Netscape e Microsoft Internet Explorer, que devem ser de versões iguais ou superiores a 3.0 e 4.0 respectivamente). Server Side scripts São códigos de programa que são processados no servidor. Devido a este fato, não é necessário preocupar-se com a linguagem que o código foi criado: o servidor é quem se encarrega de interpretá-lo e de devolver uma resposta para o cliente. Em páginas PHP, são esses códigos os maiores responsáveis pelos resultados apresentados. PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 7 Ambiente de desenvolvimento de páginas PHP Como os arquivos PHP são arquivos do tipo texto (ASCII), eles podem ser escritos em um editor de textos comum – Edit, Notepad, Emacs, por exemplo. Existem também outros ambientes que proporcionam uma forma mais agradável de desenvolvimento, mas exige os mesmos conhecimentos do programador. O que pode ser feito com PHP? Basicamente, qualquer coisa que pode ser feita por algum programa CGI pode ser feita também com PHP, como coletar dados de um formulário, gerar páginas dinamicamente ou enviar e receber cookies. O PHP pode ser utilizado na maioria dos sistemas operacionais, incluindo Linux, várias variantes Unix (incluindo HP-UX, Solaris e OpenBSD), Microsoft Windows, Mac OS X, RISC OS, e provavelmente outros. O PHP também é suportado pela maioria dos servidores web atuais, incluindo Apache, Microsoft Internet Information Server, Personal Web Server, Netscape and iPlanet Servers, Oreilly Website Pro Server, Caudium, Xitami, OmniHTTPd, e muitos outros. O PHP pode ser configurado como módulo para a maioria dos servidores, e para os outros como um CGI comum. Com o PHP, portanto, você tem a liberdade para escolher o sistema operacional e o servidor web. Do mesmo modo, você pode escolher entre utilizar programação estrutural ou programação orientada a objeto, ou ainda uma mistura deles. Mesmo não desenvolvendo nenhum recurso padrão de OOP (Object Oriented Programming, Programação Orientada a Objetos) na versão atual do PHP, muitas bibliotecas de código e grandes aplicações (incluindo a biblioteca PEAR) foram escritos somente utilizando OOP. Com PHP você não está limitado a gerar somente HTML. As habilidades do PHP incluem geração de imagens, arquivos PDF e animações Flash (utilizando libswf ou Ming) criados dinamicamente, on the fly. Você pode facilmente criar qualquer padrão texto, como XHTML e outros arquivos XML. O PHP pode gerar esses padrões e os salvar no sistema de arquivos, em vez de imprimi-los, formando um cache dinâmico de suas informações no lado do servidor. Talvez a mais forte e mais significativa característica do PHP é seu suporte a uma ampla variedade de banco de dados. Escrever uma página que consulte um banco de dados é incrivelmente simples. Os seguintes bancos de dados são atualmente suportados: Tabela de bancos suportados pelo PHP5 Adabas D Ingres Oracle (OCI7 and OCI8) dBase InterBase Ovrimos Empress FrontBase PostgreSQL FilePro (read-only) mSQL Solid Hyperwave Direct MS-SQL Sybase IBM DB2 MySQL Velocis Unix dbm Informix ODBC Também foi providenciada uma abstração de banco de dados DBX permitindo a você utilizar qualquer banco de dados transparentemente com sua extensão. Adicionalmente, PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 10 Isso funciona como esperado porque quando o PHP encontra a tag de fechamento ?>, ele simplesmente começa a imprimir tudo até encontrar outra tag de abertura. Obviamente, o exemplo acima se aplica à exibição de grandes blocos de texto, uma vez que sair do modo de interpretação do PHP é geralmente mais eficiente que imprimir todo o texto através da construção de linguagem como o echo( ) ou função print( ) e outras. Separador de instruções Instruções são separadas da mesma forma que o C ou o Perl - cada instrução termina com um ponto e vírgula. A tag de fechamento (?>) também implica no fim de uma instrução, então os exemplos seguintes são equivalentes: <?php echo "Isto é um exemplo com vírgula"; ?> <?php echo "Isto é um outro exemplo sem vírgula" ?> Comentários O PHP suporta comentários do 'C', 'C++' e Unix shell. Por exemplo: <?php echo "Isto é um exemplo"; //Comentário de uma linha como no C++ /* Isto é um comentário de mais de uma linha e aqui temos outra linha como em C */ echo "Isto é um outro exemplo"; echo "O último exemplo"; #Comentário no estilo Unix shell ?> O comentário de uma linha só tem efeito até o fim da linha ou fim do bloco de código PHP atual, o que ocorrer primeiro. <h1>Isto é um <?php # echo " simples";?> exemplo.</h1> <p>No título acima você lerá 'Isto é um exemplo'. Você precisa ser cuidadoso com comentários estilo 'C' encadeados, pois eles podem causar problemas em grandes blocos. <?php /* echo "Isto é um teste"; /* Este comentário causará um erro */ */ ?> PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 11 Nota: É importante trabalhar com padrões. Procure utilizar o formato C para comentários e deixe de lado o formato shell. Variáveis São códigos em forma de palavras que carregam informações que se alteram “variam” no decorrer de uma instrução. As variáveis são muito úteis, pois elas permitem uma flexibilidade na programação, onde não são possíveis de antever determinadas situações. Regras para nomear as variáveis Para nomear suas variáveis, é preciso seguir algumas regras: Toda variável em PHP tem seu nome composto pelo caractere $ e uma string, que deve iniciar por uma letra ou o caractere “_”. PHP é case sensitive, ou seja, as variáveis $integrator e $INTEGRATOR são diferentes. Por isso é preciso ter muito cuidado ao definir os nomes das variáveis. É bom evitar os nomes em maiúsculas, pois como veremos mais adiante, o PHP já possui algumas variáveis pré-definidas cujos nomes são formados por letras maiúsculas. Passagem por referência O PHP 5 oferece um outro meio de atribuir valores a variáveis: a atribuição por referência. Isto significa que a nova variável simplesmente referencia (em outras palavras, "torna-se um apelido para" ou "aponta para") a variável original. Alterações na nova variável afetam a original e vice-versa. Isto significa também que nenhuma cópia é realizada, de modo que a atribuição ocorre mais rapidamente. Entretanto, qualquer aumento de velocidade só será realmente notado em loops complexos ou em atribuições de grandes matrizes (arrays) ou objetos. <?php $item1 = 'Banana'; // Atribui o valor 'Banana' a variável $item1 $item2 = &$item1; // Referecia $item1 através de $item2. $item2 = "O produto é $item2"; // Altera $item2... echo $item2.'<br>'; echo $item1; // $item1 é alterado também. ?> variaveis.php Uma observação importante a se fazer: somente variáveis nomeadas podem ser atribuídas por referência. Variáveis Predefinidas O PHP oferece um grande número de variáveis predefinidas para qualquer script que ele execute. Muitas destas variáveis, entretanto, não podem ser completamente documentadas uma vez dependem de diversos fatores, como o servidor no qual scripts são executados, a versão e configuração deste servidor e outros. PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 12 Variáveis do servidor: $_SERVER $_SERVER é um array contendo informações como headers, caminhos e localizações do script. Os itens deste array são criados pelo servidor web. Não há garantias que todos os servidores web gerem todas elas: alguns servidores talvez omitam algumas ou gerem outras que não estão listadas aqui. Mesmo assim, um grande número dessas variáveis está de acordo com a especificação CGI 1.1, então você pode esperar encontrá-las nesse array. Esta é uma variável superglobal, ou automaticamente global. Isto significa que ela é disponível em todos os escopos (níveis) de um script. Você não precisa fazer um global $_SERVER; para poder acessá-la dentro de funções ou métodos, como era necessário com $HTTP_SERVER_VARS (Disponível em versões anteriores ao PHP 4.1.0). $HTTP_SERVER_VARS contém a mesmas informações, mas ela não é uma superglobal (note que $HTTP_SERVER_VARS e $_SERVER são variáveis diferentes como também o PHP as manipula diferentemente). A seguir você tem como exemplo algumas das utilizações da variável $_SERVER: 'PHP_SELF' O nome do arquivo do script atualmente em uso, relativo ao documento raiz. Por exemplo, $_SERVER['PHP_SELF'] em um script com o endereço http://integrator.com.br/php_self.php pode ser /php_self.php. <?php echo $_SERVER['PHP_SELF']; ?> php_self.php 'SERVER_NAME' O nome host do servidor onde o script atual é executado. Se o script está rodando em um host virtual, este será o valor definido para aquele host virtual. <?php echo $_SERVER['SERVER_NAME']; ?> server_name.php 'SERVER_SOFTWARE' A string de identificação do servidor, fornecida nos headers quando respondendo a requests. <?php echo $_SERVER['SERVER_SOFTWARE']; ?> server_software.php 'SERVER_PROTOCOL' PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 15 Não é funcional no Windows. <?php echo $_SERVER['PATH_TRANSLATED']; ?> path_translated.php 'SCRIPT_NAME' Contém o caminho completo do script atual. Útil para páginas que precisam apontar para elas mesmas (dinamicamente). Semelhante ao PHP_SELF. <?php echo $_SERVER['SCRIPT_NAME']; ?> script_name.php Usando strings de consulta Uma string de consulta é parte do URL que aparece depois de um ponto de interrogação. Por exemplo, o URL a seguir contém uma string de consulta: http://integrator.com.br/buscar/?p=Hypertext+Preprocessor Nesse exemplo, a string de consulta contém uma variável denominada p cujo valor é “Hypertext Preprocessor”. As strings de consulta são usadas para transmitir informações do navegador para o servidor. Normalmente, você não digita a string de consulta diretamente na barra de endereços do navegador. Ao contrário, cria um link em uma página que contém a string de consulta. Veja um exemplo abaixo da utilização de strings de consulta onde são oferecidas opções para o cliente: <HTML> <HEAD><TITLE>Maçãs</TITLE></HEAD> <BODY> Pro favor, escolha o tipo de maçã: <P><A HREF="string_cons_recebe.php?maca=vermelha">Vermelhas deliciosas</A> <P><A HREF="recebe_string_cons.php?maca=verde">Verdes maravilhosas</A> </BODY> </HTML> env_string_cons.php No exemplo acima, vemos dois links de hipertexto para uma página denominada recebe_string_cons.php. O primeiro link transmite a string de consulta maca que contém o valor vermelha. A segunda string de consulta, também denominado maca, têm o valor de verde. Dentro da página recebe_string_cons.php, você pode determinar o link escolhido pelo PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 16 cliente acessando o conjunto através de $HTTP_GET_VARS. Abaixo a página recebe_string_cons.php: <HTML> <HEAD><TITLE>Sua maçã escolhida</TITLE></HEAD> <BODY> <?php $maca = $HTTP_GET_VARS["maca"]; echo "Você selecionou a maçã $maca"; ?> </BODY> </HTML> recebe_string_cons.php Variáveis HTTP GET: $_GET Contém um array associativo de variáveis passadas para o script atual através do método HTTP GET. Esta é uma variável 'superglobal', ou automaticamente global. Isto significa que ela é disponível em todos os escopos (níveis) de um script. O mesmo exemplo acima poderia ser feito da seguinte maneira: <HTML> <HEAD><TITLE>Sua maçã escolhida</TITLE></HEAD> <BODY> <?php $maca = $_GET["maca"]; echo "Você selecionou a maçã $maca"; ?> </BODY> </HTML> string_cons_recebe.php Transmitindo diversas variáveis de string de consulta Você pode transmitir diversas variáveis de consulta em uma única string. Para fazer isso, basta separá-las com o caractere &(“e” comercial). Veja o exemplo abaixo: 1. <HTML> 2. <HEAD><TITLE>Escola as frutas desejadas</TITLE></HEAD> 3. <BODY> 4. Pro favor, escolha o tipo de fruta: 5. <P><A HREF="rec_divs_str_cons.php?fruta=laranja&tipo=lima"> 6. Laranja Lima</A> 7. <P><A HREF="rec_divs_str_cons.php?fruta=maca&tipo=vermelho"> 8. Maçã Vermelha</A> 9. <P><A HREF="rec_divs_str_cons.php?fruta=maca&tipo=verde"> 10. Maçã Verde</A> 11. </BODY> 12. </HTML> env_divs_str_cons.php PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 17 Os links de hipertexto contêm as strings de consulta que incluem duas variáveis. Cada string de consulta contém tanto uma variável denominada fruta, quanto uma variável denominada tipo. Quando um usuário clica em um dos três links, ambas as variáveis de string de consulta são transmitidas para a página divs_str_cons.php. Veja o exemplo a seguir recuperando os valores passados pela página anterior: <HTML> <HEAD><TITLE>Frutas escolhidas</TITLE></HEAD> <BODY> Você selecionou: <P>Fruta: <?php echo $_GET["fruta"]?></P> <P>Tipo: <?php echo $_GET["tipo"]?></P> </BODY> </HTML> rec_divs_str_cons.php Variáveis da requisição: $_REQUEST A variável superglobal $_REQUEST é usada para trabalhar tanto com requisições via método POST, como com métodos via GET e COOKIE. <HTML> <HEAD><TITLE>Frutas escolhidas</TITLE></HEAD> <BODY> Você selecionou: <P>Fruta: <?php echo $_REQUEST["fruta"]?></P> <P>Tipo: <?php echo $_REQUEST["tipo"]?></P> </BODY> </HTML> rec_divs_str_request.php Transmitindo caracteres especiais em uma string de consulta Não é permitido incluir espaços ou outros caracteres especiais no nome ou valor de uma variável de string de consulta. Por exemplo, suponhamos que você quisesse transmitir o conjunto de caracteres “Laranja Lima” em uma variável de string de consulta. Você pode fazer isso como mostrado abaixo: <HTML> <HEAD><TITLE>Transmitindo caracteres especiais</TITLE></HEAD> <BODY> <A HREF="receb_caract_esp.php?fruta=Laranja Lima">Laranja Lima</A> </BODY> </HTML> trans_caract_esp.php <HTML> <HEAD><TITLE>Transmitindo caracteres especiais</TITLE></HEAD> PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 20 Usando a superglobal $_POST você tem o mesmo efeito: <HTML> <HEAD><TITLE>Recebendo dados via formulário pelo método POST</TITLE></HEAD> <BODY> <?php echo $_POST ["nome"]; ?> </BODY> </HTML> receb_met_post.php Usando o método GET você tem a mesma funcionalidade dos envios criados por strings diretas nos links: <html> <head><title>Usando Array Associativo pelo método GET</title></head> <body> <FORM METHOD="GET" ACTION="receb_met_get.php"> Seu nome: <INPUT TYPE="TEXT" NAME="nome" /><BR /> <INPUT TYPE="SUBMIT" VALUE="Enviar"/> </FORM> </body> </html> env_met_get.php <HTML> <HEAD><TITLE>Recebendo dados via formulário pelo método GET</TITLE></HEAD> <BODY> <?php echo $_GET["nome"]; ?> </BODY> </HTML> receb_met_get.php Obs: As variáveis de arrays longas como $HTTP_GET_VARS[ ] ou $HTTP_POST_VARS[ ] são consideradas depreciadas e, portanto não são de uso recomendável, já que em versões posteriores podem vir desativadas por padrão e com o tempo desaparecer. A partir da versão do PHP 5.0.0 pode-se desativar com a diretiva register_long_arrays=Off no arquivo PHP.INI. Problemas com migrações em versões inferiores ao PHP 4.2 Em versões anteriores ao PHP 4.2, existia uma forma de requisitar dados POST, GET e outros de forma global, sem necessidade de declaração de variáveis pré-definidas. Isso deixou de ser possível graças à diretiva register_globals=Off no PHP.INI, que, por motivos de segurança, passou a ficar desativada. PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 21 Cotas mágicas no PHP A diretiva de configuração do PHP magic_quotes_gpc afeta os valores de GET, POST e Cookies. Se estiver ativada, o valor (Marca D’água “Versão 2006”) se tornará automaticamente (Marca D\’água \“Versão 2006\”). Escaping é necessário para inserção em bancos de dados. Abaixo um exemplo: 1. <html> 2. <head><title>Usando caracteres de escape</title></head> 3. <body> 4. <FORM METHOD="POST" ACTION="receb_met_post_esc.php"> 5. Dados: <INPUT TYPE="TEXT" NAME="dados" VALUE= "Marca d’ Água" /><BR /> 6. <INPUT TYPE="SUBMIT" VALUE="Enviar"/> 7. </FORM> 8. </body> 9. </html> env_met_post_esc.php <HTML> <HEAD><TITLE>Usando caracteres de escape</TITLE></HEAD> <BODY> <?php echo $_POST ["dados"]; ?> </BODY> </HTML> receb_met_post_esc.php stripslashes( ) Ao receber informações com apóstrofo ou aspas, as cotas mágicas automaticamente colocam caracteres de escape. Para que estes caracteres de escape não apareçam, utilize o método stripslashes( ). Abaixo o mesmo exemplo de recebimento só que com a utilização do método. <HTML> <HEAD><TITLE>Usando caracteres de escape</TITLE></HEAD> <BODY> <?php echo stripslashes($_POST ["dados"]); ?> </BODY> </HTML> receb_met_post_esc.php addslashes( ) Caso as informações estejam sendo enviadas para uma base de dados, é importante se previnir com o método addslashes( ). Assim, os caracteres de escape são forçados, PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 22 evitando erros possíveis causados pelas aspas e apóstrofos, principalmente quando as cotas mágicas não foram configuradas por você e sim, pelo administrador, onde é hospedado seu site PHP. <HTML> <HEAD><TITLE>Usando caracteres de escape</TITLE></HEAD> <BODY> <?php $dados=addslashes($_POST ["dados"]); echo $dados; ?> </BODY> </HTML> receb_met_post_esc.php Usando objetos de aplicação e sessão A capacidade de identificar os clientes e personalizar conteúdo é importante porque pode ser usada para aumentar as vendas. Um exemplo simples: talvez você queira exibir anúncios distintos para clientes diferentes, de acordo com seus interesses. Se você registrou o fato de que um determinado cliente gosta de visitar as páginas de seu site da Web que mostram varas de pescar, pode mostrar automaticamente a esse cliente mais anúncios relacionados a material de pesca. Usando cookies para monitorar os clientes Os cookies receberam grande atenção da mídia nos últimos tempos pelo medo de que poderiam representar uma ameaça à privacidade das pessoas. Você pode usar um cookie para armazenar informações no computador de um cliente quando ele visitar seu site da Web. Essas informações podem ser usadas para identificar o cliente quando ele retornar ao seu site. Os cookies foram desenvolvidos pela Netscape para corrigir uma deficiência observada na interação entre servidores da Web e navegadores. Sem os cookies, a interação entre os servidores e navegadores sairiam do controle. Curiosidade: De onde vem o termo “cookie”? Lou Montulli, que programou a especificação original do cookie para a Netscape, explica: “Cookie é um termo bastante conhecido em computação, utilizado quando se descreve uma parte opaca de dados mantida por um intermediário. O termo se aplica perfeitamente ao uso; simplesmente não é muito conhecido fora da área da computação.” Há dois tipos de cookies: cookies de sessão e cookies persistentes. Os cookies de sessão são armazenados na memória. Permanecem no computador do cliente somente enquanto ele está visitando o seu site da Web. O cookie persistente, por outro lado, podem durar meses ou até anos. Os cookies persistentes são armazenados em um arquivo de texto no computador do cliente. Esse arquivo de texto é denominado arquivo Cookie nos computadores com sistema operacional Windows e arquivo Magic Cookie nos computadores Macintosh. PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 25 variáveis Session baseiam-se nos cookies. Você pode usar as variáveis Session para armazenar qualquer tipo de informação. Para que a sessão funcione no Sistema Operacional Windows, você deve editar o caminho para que seja guardada corretamente no sistema. Para isso, vá até o PHP.INI e altere a seguinte informação: PHP.INI no sistema operacional Windows [Session] ;Neste local, por padrão, o arquivo está configurado para ;trabalhar no UNIX/LINUX. ;altere o path para o caminho do Windows. session.save_path = C:\temp <?php session_start(); $_SESSION['nome']="Edson"; ?> <html> <head><title>Exemplo da utilização da Sessio<title></head> <body> <A HREF="session_recup.php">Próxima Página</A> </body> </html> session_inicio.php <? session_start(); if(!isset($_SESSION["nome"])) header("location:session_inicio.php"); ?> <HTML> <HEAD><TITLE>Recuperando uma Session</TITLE></HEAD> <BODY> <?php echo "Olá ".$_SESSION["nome"].", como vai?"; ?> <BR /><A HREF="session_finalizar.php">Fechar a sessão</A> </BODY> </HTML> session_recup.php No exemplo acima, na recuperação da Session, temos a construção da linguagem isset( ) que é responsável pela verificação de existir ou não um valor na session. Se existir ele retorna true(verdadeiro), caso não aja nada, ele retornará false(falso). <?php session_start(); unset($_SESSION['nome']); ?> PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 26 <html> <head><title>Finalizando uma Sessão</title></head> <body> A variável <?php echo $_SESSION['nome']?> foi finalizada. </body> </html> session_finalizar.php Para finalizar uma sessão, a construção da linguagem unset( ) destrói a variável específica. Nota: Tanto isset( ) como unset( ) não são apenas usadas em sessões. Tipos 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 Você também pode encontrar algumas referências ao tipo double. Considere o tipo double como sendo o float, e os dois nomes existem por razões históricas. <?php $i = 10; // Inteiro $nome = "Edson"; // String $falso = FALSE; // Booleano $valor = 100.50; /// Ponto flutuante $nulo = NULL; echo '$i é do Tipo ' . gettype($i) . '<br>'; echo '$nome é do Tipo ' . gettype($nome) . '<br>'; echo '$falso é do Tipo ' . gettype($falso) . '<br>'; echo '$nulo é do Tipo ' . gettype($nulo) . '<br>'; echo '$valor é do Tipo ' . gettype($valor); ?> tipos_no_php5.php PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 27 Booleanos Para especificar um literal booleano, use as palavras chave TRUE ou FALSE. Ambas são insensitivas ao caso. Inteiros Inteiros podem ser especificados em notação decimal (base 10), hexadecimal (base 16) ou octal (base 8), opcionalmente precedido de sinal (- ou +). O tamanho de um inteiro é dependente de plataforma, sendo um numero aproximado a 2 bilhões o valor mais comum (número de 32 bits com sinal). Overflow de inteiros Se você especifica um número além dos limites do tipo inteiro, ele será interpretado como um ponto flutuante. Números de pontos flutuantes O tamanho de um número de ponto flutuante é dependente de plataforma, sendo o máximo com uma precisão de 14 decimais digitais. Strings Uma string é uma série de caracteres. No PHP, um caracter é o mesmo que um byte, ou seja, há exatamente 256 caracteres diferentes possíveis. Não há nenhum problema se as strings se tornarem muito grandes. Não há nenhum limite para o tamanho de strings imposta pelo PHP, então não há razão para se preocupar com strings longas. Arrays Um array no PHP é atualmente um mapa ordenado. Um mapa é um tipo que relaciona valores para chaves. Este tipo é otimizado de várias maneiras, então você pode usá-lo como um array real, ou uma lista (vetor), hashtable (que é uma implementação de mapa), dicionário, coleção, pilha, fila e provavelmente mais. Como você pode ter outro array PHP como um valor, você pode facilmente simular árvores. Arrays serão abordados mais adiante em matrizes. Objetos Mais adiante serão abordados objetos. Resource Recurso é uma variável especial, mantendo uma referência de recurso externo. Recursos são criados e utilizados por funções especiais. Mais adiante você aprenderá a usar resource com conexão a banco de dados MySQL (essa é uma das formas). NULL O valor especial NULL representa que a variável não tem valor. Heredoc em Strings Outra maneira para delimitar strings é utilizando a sintaxe heredoc ("<<<"). É informado um identificador depois de <<<, então a string, e então o mesmo identificador para fechar a delimitação. O identificador de fechamento precisa começar na primeira coluna da linha. Além, o identificador utilizado precisa seguir as mesmas regras de nomeação que qualquer outro PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 30 • (float), (double), (real) - coerção para número de ponto flutuante • (string) - coerção para string • (array) - coerção para array • (object) - coerção para objeto Nota: Caso a sua intenção não seja fazer a coerção, mas arredondar o valor, use o método round( ). Com o método gettype( ) você consegue pegar o tipo. Usando o método var_dump( ) você consegue receber o valor e também saber o seu tipo, mostrando assim informações sobre a variável. <?php $numero = 2147483647; $numero2 = $numero * 10; echo gettype($numero2) . "<br>"; $numero3 = 1000; var_dump($numero*$numero3); ?> usando_var_dump.php Constantes Como já foi visto anteriormente, podemos alterar o valor de uma variável armazenada. Também podemos declarar constantes. Uma constante armazena um valor como uma variável, mas seu valor é configurado uma vez e, então, não pode mais ser alterado em outra parte do script. Por isso o nome Constante. <?php define("EXEMPLO","Texto que acompanha a constante"); define("EXEMPLO2",12); //valor que acompanha a constante ?> <html> <head> <title>Constantes</title> </head> <body> <?php echo EXEMPLO?><br> <?php echo EXEMPLO2?> </body> </html> constante.php Você notará que os nomes da constante estão inteiramente em letras maiúsculas. Essa é uma convenção emprestada de C que facilita distinguir rapidamente entre variáveis e constantes. Uma diferença importante entre constantes e variáveis é que quando você referencia a uma constante, ela não tem um sinal de cifrão na sua frente. Se quiser utilizar o valor de uma constante, utilize somente seu nome. A regra para uma constante é simples: PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 31 • Constantes não podem ter um sinal de cifrão ($) antes delas; • Constantes só podem ser definidas utilizando a função define( ), e não por simples assimilação; • Constantes podem ser definidas e acessadas de qualquer lugar sem que as regras de escopo de variáveis sejam aplicadas; • Constantes não podem ser redefinidas ou eliminadas depois que elas são criadas; e • Constantes só podem conter valores escalares. As constantes também podem ser configuradas, para que, sejam lidas sem ser case sensitive, passando um terceiro parâmetro, como mostra o exemplo a seguir em destaque: <?php define("VALOR",10); define("FRUTA","Manga",True); echo "Fruta = " . fruta . "<br />"; // ou Fruta ou FRUTA , tanto faz echo "Valor = " . VALOR . "<br />"; // Ok echo "Valor = " . Valor . "<br />"; // Não irá funcionar, pois não há terceiro parâmetro define("VALOR",990); // Provocará um erro ?> outros_ex_contantes.php Operadores Os operadores são símbolos que você pode utilizar para manipular valores e variáveis realizando uma operação neles. Em geral, os operadores podem aceitar um, dois ou três argumentos, com a maioria aceitando dois. Por exemplo, o operador de atribuição aceita dois – a posição de memória no lado esquerdo do símbolo "=" e uma expressão no lado direito. Esses argumentos são chamados de operandos, isto é, aquilo que está sendo operado. Operadores Aritméticos Lembra-se da aritmética básica da escola? Estes operadores funcionam exatamente como aqueles. Tabela dos Operadores Aritméticos exemplo nome Resultado $a + $b Adição Soma de $a e $b. $a - $b Subtração Diferença entre $a e $b. $a * $b Multiplicação Produto de $a e $b. $a / $b Divisão Quociente de $a por $b. $a % $b Módulo Resto de $a dividido por $b. Operadores de Atribuição O operador básico de atribuição é "=". A sua primeira inclinação deve ser a de pensar nisto como "é igual". Não. Isto quer dizer, na verdade, que o operando da esquerda PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 32 recebe o valor da expressão da direita (ou seja, "é setado para"). O valor de uma expressão de atribuição é o valor atribuído. Ou seja, o valor de "$a = 3" é 3. Isto permite que você faça alguns truques: $a = ($b = 4) + 5; // $a é igual a 9 agora // e $b foi setado para 4. Além do operador básico de atribuição, há "operadores combinados" para todos os operadores binários, aritméticos e de string que permitem a você usar um valor em uma expressão e então setar seu valor para o resultado daquela expressão. Por exemplo: $a = 3; $a += 5; // seta $a para 8, como se disséssemos: $a = $a + 5; $b = "Olá "; $b .= "você aí!"; // seta $b para "Olá você aí!" Nota: O ponto aqui se destina à concatenação (união de strings). Operadores de Comparação Operadores de comparação, como os seus nomes implicam, permitem que você compare dois valores. Tabela de Operadores de comparação exemplo nome Resultado $a == $b Igual Verdadeiro se $a é igual a $b. $a === $b Idêntico Verdadeiro se $a é igual a $b, e eles são do mesmo tipo. $a != $b Diferente Verdadeiro se $a não é igual a $b. $a < $b Menor que Verdadeiro se $a é estritamente menor que $b. $a > $b Maior que Verdadeiro se $a é estritamente maior que $b. $a <= $b Menor ou igual Verdadeiro se $a é menor ou igual a $b. $a >= $b Maior ou igual Verdadeiro se $a é maior ou igual a $b. Veja abaixo alguns exemplos de suas utilizações: <?php $a=5; $b=5.0; if($a==$b) echo "São iguais"; // Estes valores são iguais ?> util_igualdade.php <?php PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 35 echo "Deve ser 6: " . $a . "<br>\n"; echo "<h3>Pré-incremento</h3>"; $a = 5; echo "Deve ser 6: " . ++$a . "<br>\n"; echo "Deve ser 6: " . $a . "<br>\n"; echo "<h3>Pós-decremento</h3>"; $a = 5; echo "Deve ser 5: " . $a-- . "<br>\n"; echo "Deve ser 4: " . $a . "<br>\n"; echo "<h3>Pré-decremento</h3>"; $a = 5; echo "Deve ser 4: " . --$a . "<br>\n"; echo "Deve ser 4: " . $a . "<br>\n"; ?> </BODY> </HTML> incremento_decremento.php Operadores Lógicos Tabela de Operadores Lógicos exemplo nome resultado $a and $b E Verdadeiro se tanto $a quanto $b são verdadeiros. $a or $b OU Verdadeiro se $a ou $b são verdadeiros. $a xor $b XOR Verdadeiro se $a ou $b são verdadeiros, mas não ambos. ! $a NÃO Verdadeiro se $a não é verdadeiro. $a && $b E Verdadeiro se tanto $a quanto $b são verdadeiros. $a || $b OU Verdadeiro se $a ou $b são verdadeiros. A razão para as duas variantes dos operandos "and" e "or" é que eles operam com precedências diferentes. Operadores de String Há dois operadores de string. O primeiro é o operador de concatenação '.' (ponto), que retorna a concatenação dos seus argumentos direito e esquerdo. O segundo é o operador de atribuição de concatenação '.=' (ponto-igual). Operadores de Arrays Tabela de Operadores de Arrays Exemplo Nome Resultado $a + $b União União de $a e $b. $a == $b Igualdade TRUE se $a e $b tem os mesmos elementos. $a === $b Identidade TRUE se $a e $b tem os mesmos elementos na mesma ordem. PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 36 Tabela de Operadores de Arrays Exemplo Nome Resultado $a != $b Desigualdade TRUE se $a não é igual a $b. $a <> $b Desigualdade TRUE se $a não é igual a $b. $a !== $b Não identidade TRUE se $a não é idêntico a $b. O operador + acrescenta o array da direita no array da esquerda, contudo, chaves duplicadas NÃO são sobrescritas. Veja Matrizes mais adiante. Estruturas de Controle Qualquer script PHP é construído por uma série de instruções. Uma instrução pode ser uma atribuição, uma chamada de função, um 'loop', uma instrução condicional, ou mesmo uma instrução que não faz nada(um comando vazio). Instruções geralmente terminam com um ponto e vírgula. Além disso, as instruções podem ser agrupadas em um grupo de comandos através do encapsulamento de um grupo de comandos com chaves. Um grupo de comandos é uma instrução também. Estruturas Condicionais if A construção if é uma das mais importantes implementações de muitas linguagens, incluindo o PHP. Ela permite a execução condicional de fragmentos de código. O PHP implementa uma estrutura if que é similar àquela do C: if (expressao) instruções A condição expressao é avaliada por seu contexto Booleano. Se expressao for avaliado como TRUE (verdadeiro), o PHP executará instruções, e se for avaliado como FALSE (falso), ele será ignorado. Os exemplos a seguir mostrariam que a é maior que b se $a for maior que $b: if ($a > $b) echo "a é maior que b"; Freqüentemente você vai querer ter mais que uma instrução seja executada condicionalmente. E é claro, não há necessidade de englobar cada instrução com uma cláusula if. Em vez disso, você pode colocar várias instruções em um agrupamento de comandos. Por exemplo, este código mostraria a é maior que b se $a for maior que $b, e então atribuiria o valor de $a para $b: if ($a > $b) { echo "a é maior que b"; $b = $a; } PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 37 Comandos if podem ser aninhados indefinidamente dentro de outros comandos if, o que faz com que você complete a flexibilidade para a execução condicional de várias partes do seu programa. else Freqüentemente 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. Isto é o que o else faz. else estende um comando if para executar uma instrução caso a expressão no comando if seja avaliada como FALSE (falso). Por exemplo, o código a seguir mostraria a é maior que b se $a for maior que $b, e a NÃO é maior que b caso contrário: if ($a > $b) { echo "a é maior que b"; } else { echo "a NÃO é maior que b"; } O comando else só é executado se a expressão if for avaliada como FALSE(falso), e se havendo qualquer expressão elseif, somente se todas elas forem avaliadas como FALSE(falso). elseif O comando elseif, como seu nome sugere, é uma combinação de if e else. Da mesma forma que o else, ele estende um comando if para executar uma instrução diferente no caso de a expressão if original ser avaliada como FALSE (falso). Porém, ao contrário de else, ele executará aquela expressão alternativa somente se a expressão condicional do elseif for avaliada como TRUE (verdadeiro). Por exemplo, o código a seguir mostraria a é maior que b, a é igual a b ou a é menor que b: $a=5; $b=7; if ($a > $b) { echo "a é maior que b"; } elseif ($a == $b) { echo "a é igual a b"; } else { echo "a é menor que b"; } Podem haver vários elseifs dentro da mesma instrução if. A primeira expressão elseif (se houver) que for avaliada como TRUE (verdadeiro) será executada. No PHP, você também pode escrever 'else if' (em duas palavras) e o comportamento será idêntico a um 'elseif' (em uma só palavra). O significado sintático é ligeiramente diferente (se você está familiarizado com C, eles tem o mesmo comportamento), mas no final de contas ambos teriam exatamente o mesmo comportamento. O comando elseif só é executado se a expressão if precedente e quaisquer expressões elseif anteriores forem avaliadas como FALSE (falso), e a expressão elseif atual for avaliada como TRUE(verdadeiro). PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 40 expressão-verdade do for. Considere os seguintes exemplos. Todos eles mostram números de 1 a 10: for ($i = 1; $i <= 10; $i++) { echo $i; } for ($i = 1;;$i++) { if ($i > 10) { break; } echo $i; } $i = 1; for (;;) { if ($i > 10) { break; } echo $i; $i++; } for ($i = 1; $i <= 10; echo $i, $i++); Obviamente, o primeiro exemplo parece ser o mais bonito (ou talvez o quarto), mas você pode perceber que a possível utilização de expressões vazias em laços for se torna prático em algumas ocasiões. O PHP também suporta a "sintaxe de dois-pontos" alternativa para laços for: for (expressao1; expressao2; expressao3): instrucoes; ...; endfor; Existe ainda um outro tipo de loop que é dotado para trabalhar com coleções. Você verá isso mais adiante. Um caso a parte – a estrutura do switch switch A instrução switch é similar a uma série de instruções IF’s seguidas. Em muitas ocasiões, você poderá ter que comparar a mesma variável (ou expressão) com muitos valores diferentes, executando códigos diferentes dependendo com qual valor ele se encaixar. É exatamente para isso que a instrução switch faz. Os exemplos seguintes mostram duas maneiras diferentes de escrever a mesma coisa, uma utilizando uma série de ifs e a outra utilizando a instrução switch: if ($i == 0) { echo "i igual a 0"; } if ($i == 1) { echo "i igual a 1"; PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 41 } if ($i == 2) { echo "i igual a 2"; } 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; } É importante entender como a instrução switch funciona para evitar enganos. A instrução switch executa linha a linha (atualmente, instrução a instrução). No início, nenhum código é executado. Somente quando uma instrução case é encontrada com um valor que combina com a expressão do switch faz com que o PHP execute as instruções a partir daí. O PHP continua executando as instruções até o fim do bloco switch ou na primeira vez que encontrar uma instrução break. Se você não escrever uma instrução break no fim das instruções case, o PHP continuará executando os cases seguintes. Exemplo: switch ($i) { case 0: echo "i igual a 0"; case 1: echo "i igual a 1"; case 2: echo "i igual a 2"; } Aqui, se $i é igual a zero, o PHP executará todas as instruções echo. Se $i é igual a 1, o PHP executará as últimas duas instruções echo, e somente se $i for igual a 2, você terá o comportamento 'esperado' apenas onde 'i igual a 2' será mostrado. Então é importante não se esquecer das instruções break (e às vezes não colocá-las para esse resultado em certas circunstâncias). Em uma instrução switch, a condição somente será avaliada e resultado comparado para cada instrução case. Em uma instrução elseif, a condição é avaliada novamente. Se sua condição é mais complicada que uma simples comparação e/ou e dentro de um loop, um switch é mais rápido. Um case pode não ter nenhuma instrução dentro, o que simplesmente passa o controle para o próximo case. switch ($i) { case 0: case 1: case 2: echo "i é menor que 3 mas não negativo"; PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 42 break; case 3: echo "i é 3"; } Um case especial é o default. Esse case é executado quando nenhum outro case combina. Ele precisa ser a última instrução case. Por exemplo: 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; default: echo "i não é igual a 0, 1 ou 2"; } A expressão avaliada pelo case precisa ser um tipo simples, ou seja, inteiros, números de ponto flutuante e strings. Arrays ou objetos não podem ser utilizados a não ser que eles impliquem num tipo simples. A sintaxe alternativa para estruturas de controle é suportada para os switches. Sintaxe alternativa para estruturas de controle 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; default: echo "i não é igual a 0, 1 ou 2"; endswitch; break 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. continue continue é usado dentro de estruturas de loops para saltar o resto da iteração do loop atual e continuar a execução no início da próxima iteração. PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 45 mesma forma, ele seguirá o escopo de variáveis da função. <?php function teste() { global $nome; include 'includ.php'; echo " O nome é $nome e seu apelido é $apelido"; } /* includ.php está no escopo da função teste( ),então $apelido NÃO está disponível fora de seu escopo. $nome estará porque ela foi declarada como global */ teste( );// Imprime o conteúdo da variável $nome e da variável $apelido echo "O nome é $nome e o apelido é $apelido"; //Imprime somente $nome ?> ex_include_2.php Quando um arquivo é incluído, o interpretador sai do modo PHP e entra no modo HTML (no começo do arquivo incluído), e alterna novamente no seu fim. Por isso, qualquer código dentro do arquivo incluído que precisa ser executado como código PHP tem de ser delimitado por tags lidas de abertura e fechamento. Se "URL fopen wrappers" estão ativas no PHP (normalmente na configuração padrão), você pode especificar um arquivo utilizando uma URL (via HTTP) em vez de um caminho local. Se o servidor apontado interpreta o arquivo informado como código PHP, variáveis podem ser passadas ao arquivo incluído na URL de requisição como num HTTP GET. Isto não é necessariamente a mesma coisa que incluir o arquivo e compartilhar o escopo de variável do arquivo principal: o script será executado no servidor remoto e apenas seu resultado será incluído no script local. <?php /* Este exemplo assume que www.exemplo.com está configurado para interpretar arquivos .php mas não .txt. Além, 'Funciona' aqui significa que as variáveis $teste e $teste2 estão disponíveis no arquivo incluído*/ /*Não funciona: arquivos .txt não são manipulados em www.exemplo.com como PHP */ include 'http://www.exemplo.com/arquivo.txt?teste=1&teste2=2'; /* Não funciona: procura por um arquivo chamado arquivo.php?teste=1&teste2=2' no sistemas de arquivo local. */ include 'arquivo.php?teste=1&teste2=2'; // Funciona. include 'http://www.exemplo.com/arquivo.php?teste=1&teste2=2'; $teste = 1; $teste2 = 2; PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 46 include 'arquivo.txt'; // Funciona. include 'arquivo.php'; // Funciona. ?> Por serem include( ) e require( ) dois construtores de linguagem especiais, você precisa delimitá-los como um bloco de instruções quando utilizados dentro de instruções condicionais. <?php // Isto está errado e não funcionará como desejado if ($condicao) include $arquivo; else include $outro; // E este está correto if ($condicao) { include $arquivo; } else { include $outro; } ?> Também é possível executar uma instrução return( ) dentro de um arquivo incluído de maneira a finalizar o processamento daquele arquivo e retornar para o script que o chamou. Também é possível retornar valores de arquivos incluídos. Você pode pegar o valor de retorno de um include como faria com uma função normal. return( ) se aplica apenas para a função e não para todo o arquivo. <?php $var = 'PHP'; return $var; ?> ex_return_inc.php <?php $var = 'PHP'; ?> ex_return_inc_2.php <?php $teste = include ' ex_return_inc.php'; echo $teste; // imprime 'PHP' $teste2 = include ' ex_return_inc_2.php'; echo $teste2; // imprime 1 ?> PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 47 ex_return_inc_3.php $teste2 assimila o valor 1 porque a inclusão foi realizada com sucesso. Verifique a diferença entre os exemplos. O primeiro utiliza return( ) dentro do arquivo incluído enquanto que o outro não. Há outras maneiras de "incluir" arquivos dentro de variáveis, com fopen( ), file( ) ou utilizando include( ) através das Funções de Controle de Saída. require_once( ) A instrução require_once( ) avalia o arquivo especificado durante a execução do script. Seu comportamento é similar ao da instrução require( ), a não ser que o arquivo informado já tenha sido incluído, não refazendo a operação novamente. include_once( ) A instrução include_once( ) inclui e avalia o arquivo especificado durante a execução de um script. Seu comportamento é similar à instrução include( ), a não ser que o arquivo informado já tenha sido incluído, não refazendo a operação novamente. Como o nome sugere, ele será incluído apenas uma vez. Funções Funções definidas pelo usuário Uma função pode ser definida usando-se a sintaxe como a seguinte: function teste($argumento1, $argumento2, ..., $argumentoN) { echo "Função de exemplo.<Br>\n"; return $retonaValor; } Qualquer código PHP válido aparece dentro de uma função, mesmo outras funções e definições de classes. O PHP não suporta sobrecarga de funções, e também não é possível cancelar ou alterar a definição de funções previamente declaradas. Argumentos de funções Informação pode ser passada para funções através da lista de argumentos, que é uma lista de variáveis e/ou constantes delimitados por vírgulas. O PHP suporta a passagem de argumentos por valor (o padrão), passagem por referência valores padrão de argumento. Valores padrão de argumentos Uma função pode definir valores padrão no estilo C++ para argumentos escalares, como a seguir: <?php function argumento ($tipo = "exemplo") { return "Este é somente um $tipo.<br>\n"; } PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 50 Funções com argumentos variáveis Imagine a situação: Seu chefe lhe pediu para criar uma função, de somar valores, mas infelizmente ele lhe disse que não existe uma quantidade precisa para transmitir os valores a serem somados. Isso realmente é um problema, pois você precisa de uma matriz para que a função saiba quantos itens serão transmitidos. Alguma semelhança com as funções do Excel ou Calc? <?php function somar( ) { $numargs = func_num_args( ); echo "Número de argumentos passados: $numargs<br />\n"; if ($numargs >= 2) { echo "Selecionando apenas um argumento em especial: " . func_get_arg (1) . "<br />\n"; } $arg_list = func_get_args( ); for ($i = 0; $i < $numargs; $i++) { $total+=$arg_list[$i]; } echo "O resultado é: " . $total; } somar (5, 2, 3, 5, 3); ?> args_variaveis.php O método func_num_args( ) retorna o número de argumentos total. O método func_get_arg( ) pega o valor de um argumento em especial. Já o método estrela da função somar( ) criada é o func_get_args( ), capaz de reunir os valores em uma matriz, podendo assim, você passar uma quantidade “ilimitada” de argumentos, sem se preocupar em declará-los ou não. Retornando valores Valores são retornados pelo uso de comandos opcionais de retorno. Qualquer tipo pode ser retornado, incluindo listas e objetos. <?php function teste ($numero) { return $numero+$numero*2; } echo teste (7); // imprime '21'. ?> func_return_val.php Escopo de variáveis O escopo de uma variável é o contexto onde ela foi definida. A maior parte das variáveis do PHP tem somente escopo local. Este escopo local inclui os arquivos PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 51 incluídos. Por exemplo: $a = 1; include "b.inc"; Aqui a variável $a estará disponível no script incluído b.inc. Entretanto, com as funções definidas pelo usuário, um escopo local é introduzido. Quaisquer variáveis utilizadas dento da função é por padrão limitada dentro do escopo local da função. Por exemplo: <?php $a = 1; /* escopo global */ function Teste() { echo $a; /* referencia uma variável do escopo local (não definida) */ } Teste(); ?> ex_esc_err.php Este script não produz nenhuma saída porque a instrução echo( ) refere-se a uma versão local da variável $a, e ela não tem nenhum valor assimilado nesse escopo. Essa é uma pequena diferença da linguagem C quando variáveis globais são automaticamente disponíveis para funções sem sobrescrever uma eventual definição local. Isto causa problemas quando as pessoas mudam inadvertidamente uma variável global. No PHP, as variáveis globais precisam ser declaradas globais dentro de uma função se ela vai ser utilizada naquela função. Um exemplo: <?php $a = 1; $b = 2; function Soma() { global $a, $b,$c; $c = $a + $b; } Soma(); echo $c; ?> ex_esc_global.php O script acima imprimirá "3". Declarando $a e $b globais na função, todas as referências a essas variáveis referem-se à versão global. Não há um limite para o número de variáveis globais que podem ser manipuladas por uma função. Uma segunda maneira de acessar variáveis do escopo global é utilizando o array especial $GLOBALS definido pelo PHP. O exemplo anterior poderia ser rescrito como: PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 52 <?php $a = 1; $b = 2; function Soma() { $GLOBALS["c"] = $GLOBALS["a"] + $GLOBALS["b"]; } Soma(); echo $c; ?> ex_arr_globals.php $GLOBALS é um array associativo em que o nome das variáveis globais são suas chaves e o conteúdo dessas variáveis são os valores do elemento do array. Outro recurso importante do escopo de variáveis é a variável estática. Uma variável estática existe somente no escopo local da função, mas ela não perde seu valor quando o nível de execução do programa deixa o escopo. Considere o seguinte exemplo: Variáveis Estáticas <?php function Teste () { $a = 0; echo $a; $a++; } for($i=0;$i<10;$i++) Teste(); ?> Essa função é inútil partindo de que cada vez que ela é chamada, ela coloca em $a o valor 0 e imprime "0". A instrução $a++ , que aumenta o valor da variável não tem sentido desde que a função sai e a variável $a desaparece. Para fazê-la mais útil como contadora sem deixar de perder o sua conta atual, a variável $a é declarada como estática: <?php function Teste() { static $a = 0; echo $a; $a++; } for($i=0;$i<10;$i++) Teste(); ?> Agora, cada vez que a função Teste( ) for chamada ele imprimirá o valor de $a e o incrementará. PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 55 Os Tipos Aceitos São:</b></p>'; echo '<pre>'; print_r($tipos_aceitos); echo '</pre>'; exit; } // copiando o arquivo enviado $destino = realpath('arquivos') ."\\".$arquivo['name']; if(move_uploaded_file($arquivo['tmp_name'],$destino)) { // Tudo Ok, mostramos os dados echo '<p><b>'; echo 'O Arquivo foi recebido com sucesso!</b></p>'; echo "<img src='$destino' border=0>"; } else { echo '<p><b>Ocorreu um erro durante o upload</b></p>'; } ?> recebe_arq.php O tamanho máximo do arquivo a ser feito UPLOAD é colocado em destaque no início do código. O array $tipos_aceitos traz os tipos MIME aceitos pelo sistema de UPLOAD que você construiu. Os conteúdos de $_FILES do script de exemplo é atribuído a $arquivo. Note que isso assume que o nome do upload do arquivo é arquivo, como o usado no exemplo anterior. Pode ser qualquer nome. A seguir você tem o significado de cada item do array $_FILES: $_FILES['arquivo']['name'] - O nome original do arquivo no computador do usuário. $_FILES['arquivo']['type'] - O tipo MIME do arquivo, se o browser deu esta informação. Um exemplo pode ser "image/gif". $_FILES['arquivo']['size'] - O tamanho, em bytes, do arquivo. $_FILES['arquivo']['tmp_name'] - O nome temporário do arquivo, como foi guardado no servidor. $_FILES['arquivo']['error'] – Retorna os erros encontrados ao fazer o UPLOAD do arquivo. Os códigos de erro de envio de arquivos Os códigos de erro são explicados a seguir: UPLOAD_ERR_OK Valor: 0: não houve erro, o upload foi bem sucedido. PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 56 UPLOAD_ERR_INI_SIZE Valor 1: O arquivo no upload é maior do que o limite definido em upload_max_filesize no php.ini. UPLOAD_ERR_FORM_SIZE Valor: 2: O arquivo ultrapassa o limite de tamanho em MAX_FILE_SIZE que foi especificado no formulário HTML. UPLOAD_ERR_PARTIAL Valor: 3: o upload do arquivo foi feito parcialmente. UPLOAD_ERR_NO_FILE Valor: 4: Não foi feito o upload do arquivo. Como fazer UPLOAD de múltiplos arquivos <html> <head> <title>Enviando Múltiplos Arquivos para o Servidor</title> </head> <body> <?php $arquivo = $_FILES['arquivo']; for($i=0;$i<count($arquivo);$i++) echo "{$arquivo['name'][$i]}<br />"; ?> <form action="" method="post" enctype="multipart/form-data" name="form1" id="form1"> <input name="arquivo[ ]" type="file" /> <br /> <input name="arquivo[ ]" type="file" /> <br /> <input name="arquivo[ ]" type="file" /> <br /> <input name="arquivo[ ]" type="file" /> <br /> <br /> <input name="bt_env" type="submit" value="Enviar" /> </form> </body> </html> form_env_mult_arqs.php Orientação a Objetos com PHP 5 Classe Classe é o termo técnico utilizado em linguagens orientadas a objetos que descreve um PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 57 conjunto de dados estruturados que são caracterizados por propriedades comuns. Também pode ser interpretado como uma estrutura modular completa que descreve as propriedades estáticas e dinâmicas dos elementos manipulados pelo programa. Podem-se definir classes de objetos como a descrição de um grupo de objetos por meio de um conjunto uniforme de atributos e serviços. Uma classe é um conjunto de objetos que compartilham as mesmas operações. Enquanto um objeto individual é uma entidade concreta que executa algum papel no sistema como um todo, uma classe captura a estrutura e o comportamento comum a todos os objetos que são relacionados. Um objeto possui uma identidade e suas características serão definidas para a classe. Uma classe é definida por: • um nome da classe; • o nome da sua superclasse; • o nome de suas variáveis; • os nomes e as definições de todas as operações associadas a esta classe; O nome da classe Toda definição de classe começa com a palavra-chave class, seguido por um nome da classe, que pode ser qualquer nome que não seja uma palavra reservada no PHP. A seguir você tem a definição de uma classe simples: <?php class Classe { /* declaração de membro */ public $var = 'um valor padrão de acesso público'; /* declaração de método público mostrar*/ public function mostrar( ) { echo $this->var; } } ?> class_simp.php new Para criar uma instância de um objeto, um novo objeto deve ser criado e atribuído a uma variável. Um objeto sempre será atribuído quando um novo objeto for criado a não ser que o objeto tenha um construtor definido que dispara uma exceção por um erro. <?php require("class_simp.php"); ?> <html> <head> <title>Utilizando uma classe simples</title> </head> <body> <?php $instancia = new Classe( ); $instancia->mostrar( ); PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 60 A visibilidade de uma propriedade ou método pode ser definida prefixando a declaração com as palavras-chave: public, protected ou private. Itens declarados como public podem ser acessados por todo mundo. Protected limita o acesso a classes herdadas (e para a classe que define o item). Private limita a visibilidade para apenas a classe que define o item. Para que você entenda o que isso significa, vamos fazer um exemplo: <?php require("class_caixa.php"); ?> <html> <head> <title>Utilizando a classe Caixa</title> </head> <body> <?php $minhacaixa = new Caixa( ); $minhacaixa->introduz("algo"); $minhacaixa->mostra_conteudo( ); ?> </body> </html> util_class_caixa.php O exemplo mostrado acima demonstra a utilização da classe Caixa como se encontra. Modificaremos essa chamada, tentando acessar o atributo $conteudo: <?php $minhacaixa = new Caixa( ); $minhacaixa->introduz("algo"); $minhacaixa->conteudo; ?> util_class_caixa.php Ao fazer isso, você terá um erro como o mostrado a seguir: Fatal error: Cannot access private property Caixa::$conteudo in $PATH\util_class_caixa.php on line 15 Esse erro indica que você está tentando acessar um membro private. Agora vamos modificar a classe Caixa, tornando o membro $conteudo public: <?php class Caixa{ public $conteudo; ... class_caixa.php Ao fazer isso, você notará que acessar esse membro não causará erro. Se você desejar ecoar o valor do membro $conteudo, você terá que alterar a página PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 61 util_class_caixa.php: <?php $minhacaixa = new Caixa( ); $minhacaixa->introduz("algo"); echo $minhacaixa->conteudo; ?> Objeto O que caracteriza a programação orientada a objetos são os objetos. De um modo geral podemos encarar os objetos como sendo os objetos físicos do mundo real, tais como: carro, avião, casa, telefone, computador, etc., por isso que às vezes é dito que orientação a objetos representa os problemas mais próximos ao mundo real, dando assim mais facilidade a programação como um todo, mais isso não é sempre verdade, porque às vezes temos problemas que são extremamente funcionais. Nesses problemas funcionais é difícil representar a estrutura lógica em torno de objetos. Com isso, não são todos os problemas que giram em torno dos objetos facilmente visíveis. De maneira simples, um objeto é uma entidade lógica que contém dados e código para manipular esses dados. Os dados são denominados como sendo atributos do objeto, ou seja, a estrutura que o objeto tem, e o código que o manipula denominamos método. Um método é uma função que manipula a estrutura de dados do objeto. Construtores em PHP Os construtores são funções, ou métodos, que se encarregam de realizar as tarefas de iniciação dos objetos ao serem instanciados. Isto é, quando se criam os objetos a partir das classes, chama-se um construtor que se encarrega de iniciar os atributos do objeto e realizar qualquer outra tarefa de inicialização que seja necessária. Não é obrigatório dispor de um construtor, mas são muito úteis e a sua utilização é muito habitual. No exemplo da caixa, o normal seria iniciar as variáveis como cor ou as relacionadas com as dimensões e também indicar que o conteúdo da caixa está vazio. Se não há um construtor não se iniciam nenhum dos atributos dos objetos. O construtor se define dentro da própria classe, como se fosse outro método. O único detalhe é que o construtor deve ser chamado como __construct . Para a classe Caixa definida anteriormente, poderia declarar-se este construtor, como mostrado em destaque a seguir: <?php class Caixa{ private $altura; private $espessura; private $largura; private $conteudo; private $cor; function __construct($altura=1,$espessura =1,$largura=1,$cor="preto"){ $this->altura=$altura; $this->espessura=$espessura; $this->largura=$largura; $this->cor=$cor; PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 62 $this->conteudo=""; } public function introduz($coisa){ $this->conteudo = $coisa; } public function mostra_conteudo( ){ echo $this->conteudo; } } ?> class_caixa.php É muito útil definir valores pré-definidos nos parâmetros que recebe o construtor, igualando o parâmetro a um valor dentro da declaração de parâmetros da função construtora, deste modo, ainda que se chame ao construtor sem proporcionar-lhe parâmetro, esse iniciará com os valores pré-definidos. É importante assinalar que nos construtores não se tem porque receber todos os valores para iniciar o objeto. Há alguns valores que se podem iniciar com valores vazios (NULOS) ou qualquer outro valor fixo, como neste caso, o conteúdo da caixa, que inicialmente propusemos que estará vazia. Destrutores PHP 5 introduz um conceito de destrutor similar ao de outras linguagens orientadas a objeto, como o Java. O método destrutor será chamado assim que todas as referências a um objeto particular forem removidas ou quando o objeto for explicitamente destruído. <?php class MinhaClasseDestruivel { function __construct( ) { print "No construtor\n"; $this->name = "MinhaClasseDestruivel<br />"; } function __destruct( ) { print "Destruindo " . $this->name . "\n"; } } $obj = new MinhaClasseDestruivel( ); ?> class_destruct.php Como os construtores, destrutores pais não serão chamados implicitamente pelo engine. PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 65 $this->tipo=$tipo; } function define_tipo($novo_tipo){ $this->tipo = $novo_tipo; } } ?> class_caixa_tipo.php Aqui vemos a redefinição de construtor, da classe Caixa, para a classe Caixa_Tipo. O construtor faz primeiro uma chamada ao construtor da classe base, através de uma referência a parent. Depois inicia o valor do atributo $tipo, que é especifico da Caixa_Tipo. Na mesma linha de trabalho, podemos redefinir o método mostra_conteudo( ) baseando- nos no que foi declarado para a classe base. O código ficaria assim: <?php require("class_caixa.php"); class Caixa_Tipo extends Caixa{ private $tipo; function __construct($altura=1,$espessura=1, $largura=1,$cor="preto", $tipo="Sem classificação") { parent::__construct($altura,$espessura,$largura,$cor); $this->tipo=$tipo; } function define_tipo($novo_tipo){ $this->tipo = $novo_tipo; } function mostra_conteudo( ){ echo "Conteudo da caixa de <b>" . $this->tipo . "</b>: "; parent::mostra_conteudo( ); } } ?> class_caixa_tipo.php Operador de Resolução de Escopo (::) O Operador de Resolução de Escopo, também chamado de Paamayim Nekudotayim (significa dois pontos duplos - em Hebreu), ou em termos mais simples, dois pontos PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 66 duplos, é um token que permite acesso a métodos ou membros estáticos, constantes, e sobrecarregados de uma classe. Quando referenciando esses itens de fora da definição da classe, você usa o nome da classe. Palavra-Chave 'static' Declarando membros ou métodos de uma classe como estáticos, faz com que esses sejam "chamáveis" de fora do contexto do objeto. Um membro ou método declarado com static não pode ser acessado com uma variável que é uma instância do objeto e não pode ser redefinido em uma subclasse. A declaração static deve estar depois da declaração de visibilidade. Por compatibilidade com o PHP 4, se nenhuma declaração de visibilidade for usada, então o membro ou método será tratado como se fosse declarado como public static. Como métodos estáticos podem ser chamados sem uma instância do objeto ter sido criada, a pseudovariável $this não é disponível dentro do método declarado como estático. De fato, chamadas a métodos estáticos são resolvidas em tempo de compilação. Quando usando um nome de classe explícito o método já é identificado completamente e nenhuma das regras de herança se aplicam. Se a chamada for feita por self então self é traduzido para a classe atual, isso é, a classe à qual o código pertence. Aqui também não se aplicam as regras de herança. Propriedades estáticas não podem ser acessadas pelo objeto usando o operador seta ->. <?php class Primeira { public static $meu_estatico = 'Valor estático'; public function valorEstatico( ) { return self::$meu_estatico; } } class Segunda extends Primeira { public function PrimeiraValorEstatico( ) { return parent::$meu_estatico; } } print Segunda::$meu_estatico . "<br />"; $segunda = new Segunda( ); print $segunda->PrimeiraValorEstatico( ) . "<br />"; print Primeira::$meu_estatico . "<br />"; $primeira = new Primeira( ); print $primeira->valorEstatico( ) . "<br />"; // "Propriedade" Indefinida $meu_estatico print $primeira->$meu_estatico . "<br />"; PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 67 ?> util_static.php Constantes do Objeto É possível definir valores constantes em cada classe permanecendo a mesma imutável. Constantes diferem de variáveis normais no não uso do símbolo $ para declará-las ou usá-las. Como membros estáticos (static) , valores constantes não podem ser acessados a partir de uma instância de um objeto. <?php class MinhaClasse{ const constante = 'valor constante'; function mostrarConstante( ) { echo self::constante . "<br />"; } } echo MinhaClasse::constante . "<br />"; $classe = new MinhaClasse( ); $classe->mostrarConstante( ); /* echo $classe::constante; não é permitido */ ?> util_const.php Abstração de um Objeto Quando pensamos em um tipo de classe, supomos que os programas criam objetos desse tipo. Em alguns casos, porém, é útil declarar classes para as quais o programador nunca pensará em instanciar objetos. Essas classes são chamadas de classes abstratas. Essas classes não podem ser utilizadas para instanciar objetos, porque, classes abstratas são incompletas. As subclasses devem declarar as ‘partes ausentes’. Não é permitido criar uma instância de uma classe que foi definida como abstrata. Qualquer classe que contêm pelo menos um método abstrato deve também ser abstrata. Métodos definidos como abstratos simplesmente declaram a assinatura do método, eles não podem definir a implementação. A classe que implementa o método abstrato deve definir com a mesma visibilidade ou mais fraca. Se o método abstrato é definido como protected, a implementação da função deve ser definida ou como protected ou como public. <?php //superclasse abstrata Empregado abstract class Empregado{ private $nomeEmp; private $sobrenomeEmp; private $cpfEmp; protected $dados; PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 70 $salarioEmpregado->salvar( ); } catch(Exception $e){ echo $e->getMessage( ); } ?> </body> </html> main_sal_emp.php Para ilustrar seu aprendizado, construa uma classe de lixeira, onde haverá tipos como recicláveis: vidros, plástico e papel e não recicláveis: lixo orgânico e não orgânico. Arrays (Matrizes) Umas das construções mais importantes da programação são chamadas de arrays. Até agora, as variáveis que você viu e utilizou são chamadas de variáveis escalares, que armazenam um único valor. Um array é uma variável que armazena um conjunto ou seqüência de valores. Um array pode conter muitos elementos. Cada elemento pode armazenar um único valor, como texto ou números ou outro array. Um array contendo outro array é conhecido como array multidimensional. O que é um array? Um array é um lugar identificado para armazenar um conjunto de valores, permitindo assim armazenar variáveis escalares comuns. Veja um exemplo simples: Digamos que você tenha três produtos para vender e quer listá-los. Esses produtos são considerados três valores dentro de uma matriz. Assim teríamos a tabela abaixo: Monitor Teclado Mouse produto Depois de ter as informações como uma matriz, podemos utilizar um loop para realizar a varredura no array e obter os produtos guardados. Com a utilização de funções específicas do PHP, você pode ter, por exemplo, os produtos listados em ordem alfabética. Arrays numericamente indexados Suportados pela grande parte das linguagens de programação, os índices indicam de forma numérica qual é o primeiro produto e qual é o último. Uma coisa a ser colocada em pauta é que o primeiro produto é considerado numericamente como zero. <html> <head><title>Exemplos de PHP</title></head> <body> <?php $produto=array('Monitor','Teclado','Mouse'); PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 71 $imprimir= "Primeiro Produto - $produto[0]<br />"; $imprimir.="Segundo Produto - $produto[1]<br />"; $imprimir.="Terceiro Produto - $produto[2]"; echo $imprimir; ?> </body> </html> ex_cria_matriz_linear.php Acessando o conteúdo de um array Para acessar o conteúdo de uma variável, utilize o nome dela. Se a variável for uma matriz, acesse o conteúdo dela utilizando o nome e a chave ou índice. A chave ou índice indica quais valores armazenados você deseja acessar. O índice é colocado entre colchetes depois do nome da variável seguido de um número. O primeiro elemento de um array é o zero, como já dito anteriormente. Essa convenção é a mesma utilizada por C, C++, Java entre outras linguagens. Talvez isso seja um pouco confuso no começo, se você não está familiarizado com isso, mas basta entender que se você quiser acessar o valor Monitor dentro da matriz, basta digitar $produto[0]. Para que haja um array como o mostrado anteriormente, você deve usar a construção da linguagem array( ). Uma outra maneira de criar arrays Uma outra maneira de se criar arrays é fazer a construção direta, como mostrado no exemplo abaixo: <?php $produto[0]="Monitor"; $produto[1]="Teclado"; $produto[2]="Mouse"; echo $produto[0]; ?> Utilizando loops para acessar o array Como o array está indexado por uma seqüência de números, podemos utilizar um loop para exibir todo o conteúdo mais eficientemente: <html> <head><title>Exemplos de PHP</title></head> <body> <?php $produto[0]="Monitor"; $produto[1]="Teclado"; $produto[2]="Mouse"; for($i=0;$i<3;$i++){ PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 72 echo "O produto $i é: $produto[$i]<br />"; } ?> </body> </html> ex_matriz_ac_loop.php A diferença é que este loop exigirá menos digitação. Isso torna seu código mais viável e rápido. Arrays Associativos Arrays associativos são chaves ou índices que usamos para acessar cada valor armazenado. O código a seguir mostra um exemplo de um array associativo: <html> <body> <?php $preco=array('Monitor'=>550,'Teclado'=>48,'Mouse'=>15); echo $preco ['Monitor']; ?> </body> </html> ex_arr_ass.php Note que ao testar o código, você terá na sua tela o valor de 550, que é o valor que está atribuído à chave Monitor. Uma outra maneira de se acessar as informações do array é utilizando esta forma ligeiramente diferente do numérico: <?php $produto["Monitor"]=550; $produto["Teclado"]=48; $produto["Mouse"]=15; echo $produto["Monitor"]; ?> Utilizando loops com each( ) e list( ) Como os índices nesse array associativo não são números, não podemos utilizar um contador simples em um loop for para trabalhar com a matriz. Veja abaixo um código funcional: <?php $precos=array('Monitor'=>550,'Teclado'=>48,'Mouse'=>15); while($dados = each($precos)){ echo $dados["key"]." - ".$dados["value"]."<br />"; } ?> PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 75 ?> ex_foreach.php <?php $a = array ("Roberto", "João", "Luana", "Lilian"); $i = 0; foreach($a as $v) { echo "\$a[$i] => $v.<br>\n"; $i++; } ?> ex_foreach_2.php <?php $a = array ( "primeiro" => 'Roberto', "segundo" => 'João', "terceiro" => 'Luana', "quarto" => 'Lilian' ); foreach($a as $c => $v) { echo "$c => $v.<br>"; } ?> ex_foreach_3.php <?php $a[0][0] = "Roberto"; $a[0][1] = "João"; $a[1][0] = "Luana"; $a[1][1] = "Lilian"; foreach($a as $v1) { foreach ($v1 as $v2) { echo "$v2<br>"; } } //exemplo da utilização do loop com array multidimensional ?> ex_foreach_arr_mult.php 1. <?php 2. foreach(array('Roberto', 'João', 'Luana', 'Lilian', 'Roberta') as $v) { 2.1.1. echo "$v<br>"; 3. }// exemplo da utilização do loop com array dinâmico 4. ?> ex_foreach_arr_dinam.php Exemplo prático do uso do foreach PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 76 Considere a seguinte situação: Você tem um formulário de informações e gostaria de varrê-lo para saber quais foram escolhidos pelo usuário. Veja o caso: <html> <head> <title>Utilizando o loop Foreach</title> </head> <body> <?php if(count($_POST["musica"])>0){ echo "<h2>Você escolheu as músicas</h2>"; foreach($_POST["musica"] as $musica) { echo "$musica<br>"; } } ?> <form name="form1" method="post" action="<?=$PHP_SELF?>"> <h2>Escolha as músicas</h2> <p> <input name="musica[]" type="checkbox" id="musica[]" value="rock"> Rock<br> <input name="musica[]" type="checkbox" id="musica[]" value="pop"> POP<br> <input name="musica[]" type="checkbox" id="musica[]" value="dance"> Dance<br> <input name="musica[]" type="checkbox" id="musica[]" value="mpb"> MPB<br> <input name="musica[]" type="checkbox" id="musica[]" value="sertanejo"> Sertanejo</p> <p> <input type="submit" name="Submit" value="Escolher"> </p> </form> </body> </html> ex_prat_foreach.php Arrays Bidimensionais As matrizes não têm de ser uma lista simples de chaves e valores – cada localização na matriz pode armazenar outra matriz. Dessa maneira, podemos criar uma matriz bidimensional. Você pode pensar em uma matriz de duas dimensões como sendo uma grade, com largura e altura ou linhas e colunas. Veja no quadro abaixo: Código Descrição Preço MO Monitor 550,00 TE Teclado 48,00 MS Mouse 15,00 No exemplo abaixo, você tem um array bidimensional com a seqüência que o acessa. <?php $produtos=array( PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 77 array("MO","Monitor",550), array("TE","Teclado",48), array("MS","Mouse",15) ); echo "| ".$produtos[0][0]." | ".$produtos[0][1]." | ".$produtos[0][2]." | <br /> | ".$produtos[1][0]." | ".$produtos[1][1]." | ".$produtos[1][2]." | <br /> | ".$produtos[2][0]." | ".$produtos[2][1]." | ".$produtos[2][2]." |"; ?> arr_bid.php Conclui-se que o primeiro valor é a linha e o segundo é a coluna, logo: $produtos[$linha][$coluna]; Para fazer uma varredura no array bidimensional, essas informações são imprescindíveis. <?php $produtos=array( array("MO","Monitor",550), array("TE","Teclado",48), array("MS","Mouse",15) ); for($linha=0;$linha<3;$linha++){ for($coluna=0;$coluna<3;$coluna++){ echo "| ".$produtos[$linha][$coluna]." "; }//fim do loop da coluna echo "|<br />"; }//fim do loop da linha ?> loop_arr_bid.php Classificando arrays Freqüentemente é útil classificar os dados relacionados armazenados em um array. Pegar um array dimensional e classificá-lo no pedido é bem fácil. Utilizando sort( ) O seguinte código resulta no array sendo classificado em ordem alfabética crescente: <?php $produtos=array("Monitor","Teclado","Mouse","Armário"); sort($produtos); for($i=0;$i<4;$i++){ echo $produtos[$i]."<br>"; } ?> arr_func_sort.php PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 80 ([1- 6]|[a- f]) Seguido por um ou outro dígito entre 1 e 6 OU uma letra em minúsculo entre a e f, [^1- 9]{2} Seguido por dois quaisquer caracteres EXCETO dígitos entre 1 e 9 (0 é possível), a+$ seguida por pelo menos um ou mais ocorrências de 'a' até o fim da linha. Validando formatações e verificando preenchimentos Algumas vezes você será obrigado a fazer algumas verificações a fim de evitar problemas na hora de inserir dados em um banco de dados, tornando assim o seu site estável. Os exemplos a seguir demonstram como você pode facilitar sua vida adicionando apenas algumas pequenas funções que validam e verificam. A função ereg( ) A função ereg( string expressao, string variavel [, array registros] ) é uma função booleana, ou seja, retorna TRUE, caso tenha sucesso em sua verificação: Verifica se a variável é similar com a expressão regular definida em expressao em um modo sensível a distinção de caracteres (case sensitive). Se existirem parênteses de substrings na expressao e for passado o terceiro parâmetro registros para a função, a execução guardará os elementos resultantes na matriz registros. $registros[1] irá conter a substring indicada pelo primeiro parênteses da esquerda; $registros[2] contém a segunda substring, e assim por diante. $registros[0] conterá uma cópia completa da variável casada. <?php function valida_cep($_cep) { // Valida um CEP no formato 99999-999 ou 99999999 if(ereg("^([0-9]){5}-?([0-9]){3}$",$_cep,$_c)) { return Array($_c[1],$_c[2]); } else { return FALSE; } } $_cp = array("05735-010","03578000","A0010-000","98120"); foreach($_cp as $_cep) { if(($_r=valida_cep($_cep))===FALSE) { echo "$_cep: CEP Incorreto"; } else { echo "$_cep: CEP OK"; } echo "<br/>"; } ?> ereg_valida_cep.php PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 81 A função eregi( ) A função eregi ( string expressao, string variavel [, array registros] ) retorna valores booleanos assim como a função ereg( ) . Essa função é idêntica à função ereg ( ) com exceção de não fazer distinções alfabéticas entre caracteres (case insensitive) na hora de casar resultados. <?php function valida_email($_email) { // Valida um e-mail no formato maiúsculo ou minúsculo if (eregi("^[a-zA-Z0-9_\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$", $_email,$_e)) { return Array($_e[1],$_e[2],$_e[3] ); } else { return FALSE; } } $_emails = Array("edson@integrator.com.br","EDSON.g@gmail.com", "edgonn@aaa","edsonaaa.com"); foreach($_emails as $_email) { if(($_r=valida_email($_email))===FALSE) { echo "$_email: e-mail Incorreto"; } else { echo "$_email: e-mail OK"; } echo "<br/>"; } ?> eregi_valida_email.php A função ereg_replace( ) A função ereg_replace ( string expressao, string substituicao, string variavel ) busca em variável resultados para a expressao, substituindo se casar pelo texto em substituição. A variável modificada será retornada (poderá ocorrer da string original ser retornada caso não aconteça nenhuma substituição). Se a expressao contiver parênteses de substrings, a substituicao será realizada através do formato \\digit, que indicará qual parte do texto substituído deverá ser retornada; \\0 retornará a string na integra. Até nove substrings podem ser usadas. Os parênteses podem ser aninhados, sendo que a contagem será feita através da quantidade de parênteses abertos. Se não tiverem valores que casem com o parâmetro variavel, o resultado será a variável inalterada. <?php $_str = "http://www.integrator.com.br"; echo ereg_replace("http://www", "ftp://ftp", $_str); echo "<br/>"; PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 82 echo ereg_replace("(http):", "\\1s:", $_str);//contagem com um parênteses echo "<br/>"; echo ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $_str); //retorna na integra \\0 echo "<br/>"; $string = "Esse é um teste"; echo ereg_replace (" é um", " está sendo", $string); echo "<br/>"; echo ereg_replace ("( )é", "\\1foi", $string); echo "<br/>"; echo ereg_replace ("(( )é)", "\\2será", $string);//contagem com dois parênteses ?> ereg_replace.php Metacaracteres em expressões regulares [:digit:] Dígitos de 0 até 9 [:alnum:] Caracteres alfanuméricos de 0 até 9 ou A até Z ou a até z. [:alpha:] Caracteres alfabéticos de A até Z ou a até z. [:blank:] Caracteres de espaço e tabulação. [:xdigit:] Dígitos hexadecimais [:punct:] Símbolos de pontuação . , " ' ? ! ; : [:print:] Todos os caracteres que podem ser impressos. [:space:] Caracteres de espaço. [:graph:] Todos os caracteres impressos, menos espaço. [:upper:] Caracteres alfabéticos maiúsculos de A até Z. [:lower:] Caracteres minúsculos de a até z. [:cntrl:] Caracteres de control. Tabela de símbolos de caracteres \a caractere control \b Backspace \f form feed \n line feed \r carriage return \t horizontal tab \v vertical tab A função eregi_replace( ) Não será colocado um exemplo nessa apostila por ser idêntica a ereg_replace( ), diferenciando-se apenas por ser insensível a maiúsculas e minúsculas. A função str_replace( ) A função str_replace ( mixed pesquisa, mixed substitui, mixed assunto [, int &count] ) substitui todas as ocorrências da string de procura com a string de substituição. Esta função retorna uma string ou um array com todas as ocorrências de pesquisa em assunto substituídas com a o valor dado para substituir. <?php $str_inv = array("/", "\\", "'");//lista de strings inválidas $_str="Esse/é um exemplo de\\informação inválida'//como você pode ver<br>"; echo $str_retornada = str_replace($str_inv, " ", $_str, $c); echo $c; ?> PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 85 echo html_entity_decode($string); ?> html_entity_decode.php Funções úteis, mas não essenciais As funções mostradas a seguir são úteis em alguns casos, mas não serão explicadas, pois são compreensíveis em seus exemplos: <?php $str_m="esse é um texto que será manipulado<br>"; $str_M="VEJA SÓ ESSE TEXTO<br>"; echo strtolower($str_M);//converte para minúsculo echo strtoupper($str_m);//converte para maiúsculo echo ucwords($str_m);//capitula a primeira letra de cada palavra echo ucfirst($str_m);//capitula apenas a primeira letra da frase ?> diversas_func_str.php Enviando um e-mail Função mail( ) Envia um e-mail de um formulário ou diretamente por uma página em PHP. Escopo da função: bool mail ( string para, string assunto, string mensagem [, string cabeçalhos_adicionais [, string parametros_adicionais]]) <?php $para="integrator@integrator.com.br"; $assunto="Envio de e-mail"; $mensagem="Testando o e-mail pelo PHP"; mail( $para,$assunto,$mensagem); ?> O exemplo acima envia e-mail diretamente para o e-mail do integrator. Abaixo você tem um exemplo de envio de html: <? $para="integrator@integrator.com.br"; $assunto=“Envio de e-mail em HTML”; $mensagem=”<h2>Esta é uma mensagem em formato HTML</h2> <strong>Estas informações são enviadas como estão formatadas</strong>”; $headers = "MIME-Version: 1.0\r\n"; $headers .="Content-Type: text/html; charset=iso-8859-1\n"; PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 86 $headers .= "From: \"Edson\" <edson@integrator.com.br>\r\n"; $headers .= "Cc:contato@integrator.com.br\r\nCc:webmaster@integrator.com.br\r\n";//cópias carbono $headers .= "Bcc:webmaster@cestashow.com\r\n";//Cópia carbono oculta mail($para, $assunto, $mensagem, $cabecalho); //envio do e-mail ?> Nota: Este exemplo só funciona onde o PHP.INI estiver configurado para apontar para o servidor de e-mail do seu computador. Trabalhando com arquivos Até agora, você trabalhou com envio e recebimento de informações que não eram armazenadas. Mas antes de você conhecer o bancos de dados, você terá uma breve inicialização por manipulação de arquivos de texto simples – flat file. As funções que iremos utilizar são fopen( ), fwrite( ) e fclose( ). Descrição: <?php // Abre ou cria o arquivo exemplo1.txt // "a" representa que o arquivo é aberto para ser escrito $fp = fopen("exemplo1.txt", "a"); // Escreve "primeiro exemplo" no exemplo1.txt $escreve = fwrite($fp, "primeiro exemplo"); // Fecha o arquivo fclose($fp); ?> ex_cria_escreve.php Como resultado é criado um arquivo chamado exemplo1.txt, escrito "primeiro exemplo". Se você repetir a ação, "primeiro exemplo" será escrito novamente no fim desse arquivo. É importante notar que você tem diversas maneiras de abrir um arquivo, que são representadas por letras. No exemplo acima utilizamos o modo "a", veja abaixo a lista de todos os modos e suas descrições: Tabela de Códigos e Significados da função fopen( ) Cód. Significado Informações Adicionais Função O que faz fopen( ) abre um arquivo fwrite( ) escreve em um arquivo fclose( ) fecha um arquivo PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 87 'r' Abre somente para leitura Coloca o ponteiro no começo do arquivo. 'r+' Abre para leitura e gravação Coloca o ponteiro no começo do arquivo. 'w' Abre somente para gravação coloca o ponteiro no começo do arquivo e apaga o conteúdo que já foi escrito. Se o arquivo não existir, tentar criá-lo. 'w+' Abre para leitura e escrita coloca o ponteiro no início do arquivo e apaga o conteúdo que já foi escrito. Se o arquivo não existir, tentar criá-lo. 'a' Abre o arquivo somente para escrita coloca o ponteiro no fim do arquivo. Se o arquivo não existir, tentar criá-lo. 'a+' Abre o arquivo para leitura e gravação coloca o ponteiro no fim do arquivo. Se o arquivo não existir, tentar criá-lo. 'x' Cria e abre somente para gravação coloca o ponteiro no início do arquivo. Se o arquivo já existe, a chamada a fopen( ) irá falhar, retornando FALSE e gerando um erro nível E_WARNING. Se o arquivo não existe, tenta criá-lo. 'x+' Cria e abre para leitura e escrita coloca o ponteiro no início do arquivo. Se o arquivo já existe, a chamada a fopen( ) irá falhar, retornando FALSE e gerando um erro nível E_WARNING. Se o arquivo não existe, tenta criá-lo. Com estas três funções você pode criar, escrever e fechar um arquivo facilmente. Você também pode usar a função fputs( ). fputs( ) é uma função sinônima (alias) para fwrite( ), e é idêntica em todas as maneiras. Armazenando e recuperando informações Como ocorre com o banco de dados, após armazenar as informações você deve reaproveitá-las. Para isso você deverá usar algumas funções extras. Função O que faz explode( ) Divide uma string opendir( ) abre um diretório readdir( ) lê os arquivos de um diretório closedir( ) fecha um diretório file_exists( ) verifica se um arquivo existe <html> <head><title>Cadastro de usuários</title></head> <body> <form method="POST" action="cad_dados_txt.php"> Nome: <input type="text" size="10" name="nome"><br> E-mail: <input type="text" size="10" name="email"><br> Endereço: <input type="text" size="10" name="endereco"><br> Telefone: <input type="text" size="10" name="telefone"><br> PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 90 echo file_get_contents("arquivo.txt"); ?> file_get_contents.php Trabalhando com Datas Com a função date( ), você pode retornar valores de datas nos seus scripts PHP. A função date( ) aceita dois parâmetros, sendo que um deles é opcional. <?php echo date("d/m/Y"); ?> data_formatada.php O exemplo acima retornará a data atual do sistema no formato dd/mm/aaaa. Uma coisa a ser levada em consideração é que como a linguagem está em inglês, algumas opções não estão no formato desejado. Abaixo veja a tabela: Código Descrição a - "am" ou "pm" A - "AM" ou "PM" B - Swatch Internet time d - dia do mês, 2 digitos com zeros à esquerda; i.e. "01" até "31" D - dia da semana, texto, 3 letras; e.g. "Fri" F - mês, texto, longo; e.g. "January" g - hora, Forma com 12-horas sem zeros à esquerda; i.e. "1" até "12" G - hora, Forma com 24-horas sem zeros à esquerda; i.e. "0" até "23" h - hora, Forma com 12-horas; i.e. "01" até "12" H - hora, Forma com 24-horas; i.e. "00" até "23" i - minutos; i.e. "00" até "59" I - "1" Se no horário de verão, senão "0". j - Dia do mês sem zeros à esquerda; i.e. "1" até "31" l- dia da semana, texto longo; e.g. "Friday" L - booleano se é um ano bissexto; i.e. "0" ou "1" m - mês; i.e. "01" até "12" M - mês, texto, 3 letras; e.g. "Jan" n - mês sem zeros à esquerda; i.e. "1" até "12" O - Diferença entre o horário de Greenwich em horas; e.g. "+0200" r - RFC 822 formatted date; e.g. "Thu, 21 Dec 2000 16:01:07 +0200" s - segundos; i.e. "00" até "59" S - Sufixo ordinal para o dia do mês, 2 caracteres; i.e. "st", "nd", "rd" or "th" t - número de dias do dado mês; i.e. "28" até "31" T - Timezone setting desta máquina; e.g. "EST" or "MDT" U - segundos desde a época Unix (January 1 1970 00:00:00 GMT) w - dia da semana, numérico, i.e. "0" (domingo) até "6" (Sábado) W - ISO-8601 números de semanas do ano, semana começa na segunda-feira Y - ano, 4 dígitos; e.g. "1999" y - ano, 2 dígitos; e.g. "99" z - dia do ano; i.e. "0" até "365" PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 91 Z - timezone offset em segundos (i.e. "-43200" to "43200"). O offset para as timezones oeste de UTC é sempre negativa, e para as leste de UTC é sempre positiva. Existem alguns casos em que você poderá inserir dados em formato de data no MySQL. Se isso acontecer, você terá o seguinte formato: aaaa/mm/dd. MySQL Até agora, você está em contato somente com o PHP, mas em si, o PHP não teria grande serventia se não houvesse uma integração com banco de dados. Utilizar um banco de dados é a melhor decisão que você poderá tomar, mesmo porque, o acesso a dados é bem mais rápido que o acesso a arquivos simples (flat files). Em termos mais concretos, utilizar um banco de dados relacional permite rápida e facilmente responder consultas a respeito de onde são seus clientes, qual de seus produtos está vendendo melhor ou que tipo de clientes gastam mais. O banco de dados que utilizaremos nesta seção é o MySQL. Essa escolha não é ao acaso, pois sabemos que existem grandes sistemas de banco de dados espalhados no mercado. Mas como o PHP pertence à comunidade livre, fica claro que seus desenvolvedores tenham também a preferência por um sistema de banco de dados livre. Mas você não precisa cruzar os braços e ficar parado só porque não conhece o MySQL e trabalha com Oracle ou MSSQL. O PHP também tem suporte para esses bancos de dados. O que é MySQL? MySQL é um sistema de gerenciamento de banco de dados relacional, multiencadeado, de código-fonte aberto e nível corporativo. O MySQL foi desenvolvido por uma empresa de consultoria na Suécia chamada inicialmente de TcX, depois, com a popularidade do MySQL, passou a se chamar MySQL AB. Seu desenvolvimento ocorreu quando estavam precisando de um sistema de banco de dados que fosse extremamente rápido e flexível. Foi, assim então, que eles criaram o MySQL, que é vagamente baseado em outro sistema de gerenciamento de banco de dados chamado de mSQL. O MySQL é rápido, flexível e confiável. É utilizado em muitos lugares por todo o mundo. Obs.: A propósito, à parte ''AB'' do nome da companhia é o acrônimo para a palavra sueca ''aktiebolag'', ou ''sociedade anônima''. Ela é traduzida para ''MySQL, Inc.'' De fato, MySQL Inc. e MySQL GmbH são exemplos de subsidiárias da MySQL AB. Elas estão localizadas nos EUA e Alemanha, respectivamente. O que é um banco de dados relacional? Um banco no mundo de cimento e tijolo é o lugar onde guardamos dinheiro. Um banco de dados também guarda, só que neste caso são dados. PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 92 Chamamos de dados tudo que possamos inserir no computador, números, letras, caracteres, imagens e etc. Um banco de dados relacional é uma composição de tabelas e colunas que se relacionam entre si. Esses relacionamentos são baseados em um valor-chave que é contido em cada tabela, em uma coluna. Instalando o banco de dados O MySQL tem diferentes formas de instalação quando se trata de sistemas operacionais. No caso do Windows, você pode baixar a última distribuição através do site: http://www.mysql.com/downloads. Instalando no Windows Procure pelo formato executável. O arquivo vem compactado no formato .zip. Descompacte e instale. A instalação, como não poderia deixar de ser, é feita por um assistente. Siga os passos até a finalização. Caso sua máquina tenha o sistema operacional Windows pertencente a família NT( NT, 2000 ou XP), o MySQL é instalado como serviço. Então basta iniciar ou parar o serviço, encontrado no Painel de Controle>Ferramentas Administrativas>Serviços. Você também pode utilizar o comando pelo prompt, desde que você saiba o nome do serviço do seu MySQL: Para iniciar o serviço net start mysql Para parar o serviço net stop mysql Instalando o MySQL no Linux O MySQL Server pode ser instalado no Linux de várias formas. A forma recomendada é a que está em formato RPM. Você deve baixar dois arquivos para instalar o MySQL na sua máquina. Esses arquivos são: MySQL-server-[versão].i386.rpm – para instalar o servidor mysqld no Linux MySQL-client-[versão].i386.rpm – para instalar o cliente mysql para executar os comandos no Linux. A instalação poderá ser feita através do comando rpm, no Shell do seu Linux. Um exemplo seria: Shell> rpm –ivh MySQL-server-5.0.1.i386.rpm MySQL-client-5.0.1.i386.rpm PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 95 Criar tabela no MySQL é uma tarefa relativamente fácil. Para se criar uma tabela basta usar a seqüência: shell>mysql –u root Após estar no monitor do MySQL digite a seguinte seqüência: mysql> CREATE DATABASE livraria; mysql> USE livraria; mysql> CREATE TABLE autores( -> autor_id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, -> nome VARCHAR(100), -> dt_nasc DATE); mysql> CREATE TABLE editora( -> editora_id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, -> editora_nome VARCHAR(100) -> ); mysql> CREATE TABLE publicacao( -> isbn CHAR(13), -> autor_id INT UNSIGNED, -> editora_id INT UNSIGNED -> ); mysql> CREATE TABLE livros( -> isbn CHAR(13) NOT NULL PRIMARY KEY, -> titulo VARCHAR(50), -> edicao_num TINYINT(2), -> ano_publicacao YEAR, -> descricao TEXT); O comando SHOW Assim que criada sua primeira tabela. Para ver o resultado basta digitar a seqüência: SHOW TABLES FROM livraria; Para ver as colunas que existem na sua tabela digite: SHOW COLUMNS FROM livros; PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 96 Ou DESCRIBE. O comando DESCRIBE Se preferir, o comando DESCRIBE faz a mesma coisa que SHOW, mostrando as colunas existentes em sua tabela. DESCRIBE livros; Ou simplesmente: DESC livros; IF NOT EXISTS Uma maneira de se ter certeza de se não está criando uma tabela novamente é fazer o comando IF NOT EXISTS: mysql> CREATE TABLE IF NOT EXISTS livros( -> isbn CHAR(13) NOT NULL PRIMARY KEY, -> titulo VARCHAR(50), -> edicao_num TINYINT(2), -> ano_publicacao YEAR, -> descricao TEXT); Criando uma cópia de uma tabela A partir da versão 4.1 você pode copiar uma tabela com sua estrutura da seguinte maneira: CREATE TABLE copia_livros LIKE livros; Alterando tabelas existentes Agora que você criou a sua tabela o que aconteceria se você precisasse alterar algo que fez? Confira os seguintes exemplos para alterar o nome da tabela, tipo de dados e o nome da coluna: PHP 5 e MySQL 5 e Ajax PHP 5 & MySQL 5 for Web – www.integrator.com.br/php 97 Alterando o nome da coluna ALTER TABLE copia_livros CHANGE titulo titulo_do_livro VARCHAR(50); DESC copia_livros; # descreva as colunas de clientes Nota: # (sustenido) é o inicio de um comentário e não interfere em uma execução de comando. Alterando o tipo de coluna mysql> ALTER TABLE copia_livros -> MODIFY titulo_do_livro VARCHAR(30) NOT NULL; Renomeando uma tabela ALTER TABLE copia_livros RENAME livros2; Excluindo / adicionando colunas e tabelas Como você pode ver quando uma coluna é criada ou uma tabela estas não são escritas na pedra e podem ser alteradas facilmente. Isso também implica em adicionar colunas em uma tabela existente ou excluí-la. Eliminando tabelas e colunas O comando DROP também é utilizado para eliminar as colunas de uma tabela. Para excluir uma tabela existente execute a seguinte seqüência: DROP TABLE livros2; Para excluir somente uma coluna execute a seguinte seqüência: ALTER TABLE livros2 DROP editora_id; Isso excluirá a coluna e todas as informações que você armazenou.
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved