Você está na página 1de 150

500

Desenvolvimento Web com PHP

www.4linux.com.br

Captulo 1 Introduo

4Linux www.4linux.com.br

Introduo

1.1 Sobre o curso


Neste curso iremos aprender o que o PHP, entender como a linguagem funciona e conhec-la a fundo. O curso recomendado para qualquer um interessado em comear a desenvolver aplicaes para a web. Se voc j possui experincia com alguma outra linguagem de programao, voc entender os conceitos apresentados aqui rapidamente, mas o curso e a apostila iro assumir que voc no possui nenhuma experincia com desenvolvimento de software. O curso Desenvolvimento Web com PHP (500) o primeiro curso da Formao PHP da 4Linux. Este curso de PHP foi desenvolvido para apresentar o poder do PHP a quem teve algum contato com a linguagem ou programadores PHP que desejam aprimorar seus conhecimentos e se atualizar. Ao longo do curso de PHP da 4Linux sero desenvolvidos dois projetos: um microblog (similar ao Twitter) e um sistema de blog (similar ao Wordpress), conhecendo a fundo e aplicando as funcionalidades da linguagem PHP. Alm de preparar o aluno para o mercado de trabalho, as aulas so estruturadas de forma que durante todo curso o aluno receba dicas e macetes relacionadas a parte do contedo para a Certicao Zend PHP 5.3. Com os trs cursos da Formao PHP da 4Linux o aluno tem 100% do contedo necessrio para a prova da Certicao Zend. PHP 5.3. Durante as aulas o instrutor apresentar conceitos e atravs de exerccios prticos xar o contedo. Ao nal deste curso o aluno estar pronto para criar aplicaes web com a linguagem de programao PHP, utilizando os principais bancos de dados open source como MySQL, PostgreSQL e SQLite, alm de conhecer e poder decidir qual a melhor ferramenta para o trabalho certo.

Desenvolvimento Web com PHP

Pgina 2

4Linux www.4linux.com.br

Introduo

1.2 Sobre a 4Linux


H mais de 10 anos a 4Linux oferece cursos, solues e servios de T.I. baseados em softwares livres e padres abertos para ambientes de misso crtica. J treinou mais de 40.000 alunos e possui a maior oferta mundial de cursos baseados em softwares livres (mais de 50 cursos) nas modalidades presenciais e e-learning ( distncia pela internet). Desde 2006 presta suporte a softwares livres em ambientes de misso crtica para a Caixa Econmica Federal, um dos principais cases mundiais de uso de padres abertos: atualmente quando um cidado faz uma aposta nas loterias, saca um dinheiro em um ATM (caixa eletrnico), recebe um SMS com o saldo de seu FGTS ou simula o valor de um nanciamento imobilirio no feiro da casa prpria, ele est usando uma infraestrutura baseada em softwares livres com servios prestados pela 4Linux. Alm da Caixa a 4Linux realizou algumas das mais conhecidas implementaes de software livre do Brasil, entre eles: Metr de So Paulo, Casa da Moeda do Brasil, Ceagesp e Projeto CDTC (Centro de Difuso de Tecnologia e Conhecimento) uma parceria entre a IBM e o ITI que envolveu, entre outras aes, a maior capacitao em Linux do Brasil: 785 educadores do MEC foram treinados em Linux pela 4Linux. Conhea nossos cases e clientes. Idealizadora do HackerTeen projeto de edutainment (entretenimento educacional) para jovens da gerao internet sobre segurana da computao, empreendedorismo na Internet e tica hacker que, com uma metodologia inovadora, foi avaliado como primeiro e nico no mundo pela Harvard Business School.

Desenvolvimento Web com PHP

Pgina 3

4Linux www.4linux.com.br

Introduo

1.3 Aula Zero


O foco principal do PHP como linguagem a web, portanto, necessrio que voc tenha um conhecimento sobre outras tecnologias para a web, como HTML e CSS. Alm disso, para facilitar seu aprendizado, ter boas noes de lgica de programao ideal. Para suprir essa necessidade a 4Linux preparou o Aula Zero, um contedo digital exclusivo com tudo que voc precisa saber sobre lgica de programao, HTML e CSS.

Desenvolvimento Web com PHP

Pgina 4

4Linux www.4linux.com.br

Introduo

1.4 A linguagem PHP


Sem mais delongas, bem-vindo ao mundo do PHP, a 5 linguagem de programao mais utilizada no mundo segundo o TIOBE e a mais popular no desenvolvimento de aplicaes para web. Segundo o Netcraft, mais de 30 milhes de servidores web possuem o PHP instalado. Se formos pensar em grandes casos de uso, podemos citar os gigantes Yahoo, Wikipedia, Facebook, Flickr, Digg, entre outros. Com o lanamento da verso 5.3, o PHP nunca esteve mais pronto para o desenvolvimento srio e robusto de aplicaes, contando com um suporte slido e moderno ao paradigma de programao orientada a objetos e inmeras extenses disponveis para diversas tecnologias. O PHP surgiu em meados de 1994, criado por Rasmus Lerdorf como um pacote de programas CGI. Em 1997, dois desenvolvedores israelitas, Zeev Suraski e Andi Gutmans, entraram no projeto e reescreveram grande parte do cdigo do PHP. Junto com Rasmus, lanaram a verso 3.0 do PHP em junho de 2008. Para a prxima verso, Zeev e Andi decidiram reescrever o core do projeto do zero, chamando-o de Zend Engine. Esta nova verso, PHP 4, foi lanada em maio de 2000, contando com funcionalidades novas como gerenciamento de sesso, buffer de sada e suporte a vrios servidores web. Infelizmente, a verso 4 ainda sofria com uma pssima implementao do paradigma de programao orientada a objetos, ento em julho de 2004, foi lanada a verso 5 do PHP, que trouxe vrias novidades para a linguagem e um jeito completamente novo de programar PHP.

Desenvolvimento Web com PHP

Pgina 5

Captulo 2 Servidor Web

4Linux www.4linux.com.br

Servidor Web

2.1 Como funciona um servidor web


Um servidor web um programa de computador, responsvel por receber requisies do protocolo HTTP, tomar aes com base nessas requisies e enviar respostas tambm no protocolo HTTP. Por exemplo, quando digitamos uma URL em nosso browser, estamos pedindo um arquivo que est em algum computador com um servidor web instalado. Este computador pode estar localizado na casa ao lado ou em um gigantesco datacenter. O servidor web ir interpretar seu pedido, localizar a pgina no sistema de arquivos da mquina e entregar o contedo da pgina para seu navegador, que ir intepretar o cdigo HTML da pgina e mostr-lo para voc. No caso de arquivos de msica, vdeo, etc, o navegador vai oferecer o download ao invs de mostrar o contedo.

Desenvolvimento Web com PHP

Pgina 7

4Linux www.4linux.com.br

Servidor Web

2.2 Como funciona o PHP


Quando uma pgina requisitada ao nosso servidor web, ele ir procurar pela pgina requisitada no sistema de arquivos, e caso ele encontre, o contedo desta pgina ser exibido. Se esta pgina possuir hipertexto (HTML), vocs j sabem o que acontece: teremos uma pgina web sendo exibida. O PHP funciona como uma etapa extra. Caso uma pgina PHP seja requisitada, o servidor web ir procurar pela pgina no sistema de arquivos e, caso exista algum cdigo PHP dentro desta, ele ir chamar o PHP, que interpretar o cdigo e retornar os dados. A sigla PHP um acrnimo recursivo que signica PHP: Hypertext Preprocessor, que mostra claramente o intuito da linguagem processar informaes e gerar hipertexto (HTML). Abaixo podemos ver um exemplo de uma pgina HTML simples:

1 2 3 4 5 6 7 8

<html > <head > < title > Teste </ title > </ head > <body > <p > Hoje dia 1 /1 /2 1 </ p > </ body > </ html >

E aqui, um exemplo do PHP em ao:

1 2 3 4 5 6

<html > <head > < title > Teste </ title > </ head > <body > <p > Hoje dia <? php echo date ( d / m /Y ) ; ? > </p >

Desenvolvimento Web com PHP

Pgina 8

4Linux www.4linux.com.br

Servidor Web

7 8

</ body > </ html >

Desenvolvimento Web com PHP

Pgina 9

4Linux www.4linux.com.br

Servidor Web

2.3 Instalando o Apache


Antes de comearmos a programar, precisamos instalar um servidor web em nosso computador para que ele aceite requisies de nosso navegador e entregue pginas. Vamos instalar o Apache, um software servidor web 100% livre e open-source. No Debian, podemos instalar utilizando o pacote apache2.

apt - get install apache2

Pronto, nosso servidor web est instalado. Para termos certeza que ele est funcionando, vamos entrar em nosso endereo web local:

http :// localhost

O diretrio /var/www contm os arquivos que so mostrados em nosso localhost. L est a pgina index.html que contm a mensagem exibida quando entramos no endereo localhost em nosso navegador.

Desenvolvimento Web com PHP

Pgina 10

4Linux www.4linux.com.br

Servidor Web

2.4 Instalando o PHP


Uma vez que temos o Apache instalado, ele j pode servidor pginas e arquivos. Mas ele ainda no consegue intepretar arquivos PHP porque ns no instalamos o PHP nesta mquina. Vamos fazer isso, instalando o pacote php5.

apt - get install php5

Para que o apache possa comear a intepretar nossas pginas PHP, precisamos reinici-lo. Vamos fazer isso rodando o seguinte comando:

/ etc / init . d / apache2 restart

Est na hora de testar. Renomeie o arquivo index.html na pasta /var/www para index.php. Agora, abra o arquivo e coloque o cdigo a seguir dentro dele:

1 2 3

<? php echo " Oi mundo " ;

Vamos acessar o endereo localhost em nosso navegador. Se aparecer uma mensagem dizendo "Oi mundo", tudo est instalado corretamente e pronto para comearmos a nos divertir com o PHP!

Desenvolvimento Web com PHP

Pgina 11

Captulo 3 PHP

4Linux www.4linux.com.br

PHP

3.1 Sintaxe bsica


A sintaxe do PHP deriva de vrias linguagens diferentes, predominantemente C. A linguagem Perl foi responsvel por inuenciar a sintaxe do PHP. Com as novas funcionalidades de programao orientada a objetos, o PHP incorpora elementos de Java e C#. Embora o PHP incorpore elementos de linguagens to diferentes, sua sintaxe se mantm simples e fcil de entender. Quando criamos uma pgina, geralmente utilizamos a extenso .html. Quando criarmos pginas que possuem cdigo PHP, vamos utilizar a sesso .php. Dentro desta pgina, podemos colocar HTML e PHP misturados, desde que utilizemos algumas tags especcas para delimitar o que um cdigo PHP. Para denirmos o que um cdigo PHP dentro de uma pgina, utilizamos as tags:

1 2

<? php ?>

Existem tambm outras tags, como as short tags:

1 2

<? ?>

As ASP tags, "roubadas"do ASP:

1 2

<% %>

E tambm, a tag <script>:

< script language = " php " > </ script >

Desenvolvimento Web com PHP

Pgina 13

4Linux www.4linux.com.br

PHP

As short tags (<? ?>) precisam ser ativadas no arquivo de congurao do PHP antes de serem utilizadas. A opo short_open_tags. O seu uso, no entanto, no recomendado, j que elas conitam com as tags de XML e foram depreciadas em verses futuras. As tags ASP e script sero depreciadas nas verses futuras do PHP, portanto, no as use! Caso voc esteja criando uma pgina que s possua cdigo PHP, no necessrio utilizar a tag de fechamento (?>). Ol Mundo Em todos os cursos de programao, temos um exemplo cujo objetivo ensinar o aluno a colocar um texto na tela. No podemos fazer diferente! O cdigo abaixo faz uso do comando echo, que permite que voc envie dados para a tela. A tela, no nosso caso, o navegador. Note que o comando print faz a mesma coisa que o echo.

1 2 3 4

<? php echo Ol mundo ! ; print Ol mundo ! ;

Comentrios Tambm podemos adicionar comentrios em nossos cdigos. Comentrios sero ignorados pelo PHP e so importantssimos para manter nosso cdigo limpo e organizado.

1 2

<? php // Coment rio de uma linha

Desenvolvimento Web com PHP

Pgina 14

4Linux www.4linux.com.br

PHP

3 4 5 6 7 8 9 10 11

# Coment rio de uma linha /* Coment rio com v rias linhas */ echo " teste " ; // Coment rio

Desenvolvimento Web com PHP

Pgina 15

4Linux www.4linux.com.br

PHP

3.2 Variveis e constantes


Variveis so essenciais em qualquer linguagem de programao. Elas servem para guardar informaes. Pense nelas como gavetas onde guardamos coisas e essas gavetas possuem etiquetas de nome. No PHP, nomes de variveis so precedidos do smbolo $.

1 2 3 4

<? php $nome = " Jo o " ; $email = " joao@gmail . com " ; $time = " Gr mio " ;

Em nossas gavetas imaginrias, $nome $email $time, estamos guardando algumas informaes. No exemplo abaixo, iremos colocar na tela o nome do time do Joo:

1 2 3

<? php $time = " Gr mio " ; echo $time ;

Nomes vlidos Precisamos ter alguns cuidados ao nomear nossas variveis. So eles: Nunca inicie o nome de uma varivel com um nmero Nunca use espaos em branco

Desenvolvimento Web com PHP

Pgina 16

4Linux www.4linux.com.br

PHP

Nunca use caracteres especiais, apenas underline Evite criar variveis com nomes gigantes, abrevie sempre que possvel Evite criar nomes sem sentido, como $a ou $xyz. O nome da varivel deve ajudar o programador, no confundi-lo Evite utilizar letras maisculas

Variveis variveis No PHP, podemos denir variveis cujos nomes so... variveis! Isso pode ser feito de maneira bastante simples:

1 2 3 4

<? php $var = " time " ; $$var = " Gr mio " ; echo $time ;

Observe que o valor da varivel $var est sendo utilizado como nome de varivel durante a atribuio de valor, criando de forma dinmica a varivel $time. Constantes Uma constante como uma varivel, mas como seu nome pode indicar, seu valor sempre constante, invarivel. O valor de uma constante jamais poder ser alterado em tempo de execuo. Para denirmos uma constante, utilizamos a funo dene() do PHP.

1 2 3

<? php define (" VERSAO " , 2) echo VERSAO ;

Desenvolvimento Web com PHP

Pgina 17

4Linux www.4linux.com.br

PHP

Constantes esto disponveis por todo nosso script, inclusive dentro de funes que veremos logo logo. As regras de nomenclatura das constantes so as mesmas das variveis. Contudo, uma boa prtica usar sempre letras maisculas e underline. Ex.: MELHOR_TIME, LIMITE_CAMPOS

Desenvolvimento Web com PHP

Pgina 18

4Linux www.4linux.com.br

PHP

3.3 Tipos de variveis


Variveis podem guardar qualquer informao. E cada informao possui um tipo diferente. Em outras linguagens de programao, necessrio declarar este tipo junto com o valor e o nome da varivel. Mas o PHP possui tipagem dinmica, o que signica que ele sabe o que um texto (string) e um nmero (integer, oat), dependendo do contexto onde essa informao utilizada. O PHP possui os seguintes tipos: Boolean, Integer, Float, String, Array, Objeto, Recurso, NULL Boolean Uma varivel booleana pode conter apenas dois valores, true ou false. Booleanos so a base das operaes lgicas em nossas aplicaes. J que no PHP temos tipagem dinmica, um valor booleano por ter vrias formas. True pode ser 1, false pode ser 0, null ou uma string vazia. Integer Um integer um nmero inteiro, podendo ser negativo ou positivo. Nmeros inteiros possuem formas de notao diferentes:

Decimal: 10, -11, 1452 Octal: 0666, 0100 Hexadecimal: 0x123, 0XFF, -0x100

Float Um oat, tambm chamado de double, um ponto utuante, um formato digital para representar nmeros reais. Assim como os inteiros, possuem formas de notao:

Desenvolvimento Web com PHP

Pgina 19

4Linux www.4linux.com.br

PHP

Decimal: 0.12, 1234.43, -.123 Exponencial: 2E7, 1.2e2 String Uma string geralmente um texto, mas para sermos mais corretos na denio, uma sequncia ordenada de caracteres. Podemos usar como texto, mas seu contedo tambm pode ser binrio, como o contedo de um arquivo MP3 ou JPG. Array Um array uma estrutura de dados ordenados, que mantm uma srie de elementos que podem ter diferentes tipos. Arrays so importantssimos e saberemos mais sobre eles mais na frente. Objeto Um objeto uma estrutura de dado e cdigo, formando a base da programao orientada a objetos. Recurso Um recurso um recurso externo utilizado nativamente pelo PHP. So, por exemplo, conexes abertas com um banco de dados ou conexes abertas com um arquivo no sistema. NULL Uma varivel NULL indica que ela no possui valor algum. Uma varivel considerada nula quando recebe o valor NULL ou nunca recebeu valor algum. Conra no exemplo abaixo os tipos de variveis em ao no PHP:

Desenvolvimento Web com PHP

Pgina 20

4Linux www.4linux.com.br

PHP

1 2 3 4 5 6 7 8 9

<? php $v_ou_f = true ; $inteiro = 1 ; $flutuante = 5.22; $string = " Testando " ; $array = array ( a , b , c ) ; $objeto = new Objeto ; $recurso = fopen ( arquivo , r ) ; $null = NULL ;

3.3.1 Pseudo-tipos
Durante a leitura desta apostila, exerccios em aula e at mesmo pesquisas na internet, voc encontrar vrios menes a alguns tipos de variveis conhecidos como pseudo-tipos. Eles so utilizados como referncias a situaes especcas que ocorrem durante o desenvolvimento de uma aplicao. mixed O tipo mixed utilizado para indicar que uma funo pode esperar ou retornar mais de um tipo de varivel ao mesmo tempo. Por exemplo, uma funo pode retornar uma string ou um booleano, enquanto pode receber como parmetro um array ou string. number O tipo number utilizado para indicar que a varivel pode ser um inteiro ou um oat. callback Algumas funes no PHP podem esperar como parmetro uma outra funo denida pelo usurio. Chamamos essas funes passadas como parmetro de callbacks.

Desenvolvimento Web com PHP

Pgina 21

4Linux www.4linux.com.br

PHP

3.3.2 Manipulao de tipos


Como vimos, a tipagem do PHP dinmica. Isso signica que, dependendo do contexto, a linguagem far uma converso automtica entre os tipos de variveis conhecidos, escolhendo a mais apropriada para a situao. No exemplo abaixo, podemos analisar o comportamento de linguagem enquanto utilizamos o operator de soma com algumas variveis.

1 2 3 4 5 6

<? php $var = " " ; $var += 2; $var = $var + 1.3; $var = 5 + " 1 carros " ; $var = "1 casa " + " 1 casa " ; // $var uma string // $var agora um inteiro // $var agora um float // inteiro ( $var = 15) // inteiro ( $var = 2)

3.3.3 Converso de tipos


Embora a tipagem do PHP seja dinmica, podemos forar os tipos de nossas variveis utilizando uma tcnica conhecida como type casting, ou converso de tipos. Veja no exemplo abaixo como podemos forar os tipos de algumas variveis:

1 2 3 4 5 6 7 8 9 10

<? php $var = 1 ; $cast = ( boolean ) $var ; // torna - se booleano $cast = ( int ) $var ; // torna - se inteiro $cast = ( float ) $var ; // torna - se float $cast = ( string ) $var ; // torna - se string $cast = ( array ) $var ; // torna - se array $cast = ( object ) $var ; // torna - se object $cast = ( unset ) $var ; // torna - se NULL $cast = ( binary ) $var ; // torna - se uma string bin ria

Desenvolvimento Web com PHP

Pgina 22

4Linux www.4linux.com.br

PHP

Desenvolvimento Web com PHP

Pgina 23

4Linux www.4linux.com.br

PHP

3.4 Operadores
Bom, at agora aprendemos o que so variveis, como cri-las e como associar valores a elas. Mas a vida de um desenvolvedor seria muito chata se isso fosse tudo que pudssemos fazer com elas. Vamos conhecer agora operadores, que permitem que ns manipulemos o contedo de uma ou mais variveis, produzindo novas variveis. Operadores Aritmticos Podemos utilizar operadores aritmticos para efetuar clculos com os valores de variveis, transformando os resultados desses clculos em variveis, que por sua vez, tambm podem ser manipuladas. Por exemplo:

1 2 3 4 5 6

<? php $a = 3; $b = 3; $c = $a * $b ; // resultado 9 $d = $a + $b ; // resultado 6 $e = $c - $d ; // resultado 3

Os operadores aritmticos disponveis so:

Adio: + Subtrao: Multiplicao: Diviso: / Mdulo: %

Desenvolvimento Web com PHP

Pgina 24

4Linux www.4linux.com.br

PHP

Lembrando que o PHP possui tipagem dinmica. Portanto:

1 2 3 4

<? php $a = "5"; // string echo $a + 2; // 7 , integer echo $a + 5 carros ; // 1 , integer

Operadores de Atribuio No PHP, utilizamos operadores de atribuio para denir variveis e seus valores. Contudo, tambm podemos mesclar os operadores de atribuio com operadores aritmticos, deixando o cdigo mais limpo e seu trabalho mais gil.

1 2 3 4 5 6

<? php $a = 1; // A vari vel $a igual a 1 $a += 2; // Somamos 2 ao valor da vari vel $a $a -= 2; // Subtraimos 2 ao valor da vari vel $a $a *= 2; // Multiplicamos o valor da vari vel $a por 2 $a /= 2; // Dividimos o valor da vari vel $a por 2

Podemos tambm incrementar ou decrementar variveis utilizando os operadores de incrementao, herdados da linguagem C.

1 2 3 4 5 6

<? php $a = 1; echo ++ $a ; // Incrementamos 1 e retornamos o valor echo $a ++; // Retornamos o valor e incrementamos 1 echo -- $a ; // Decrementamos 1 e retornamos o valor echo $a - -; // Retornamos o valor e decrementamos 1

Operadores Relacionais

Desenvolvimento Web com PHP

Pgina 25

4Linux www.4linux.com.br

PHP

Operadores relacionais so usados para comparar valores ou expresses, retornando um valor booleano (true ou false). So eles:

Igual: == Idntico: === Diferente: != ou <> Menor que: < Maior que: > Menor ou igual: <= Maior ou igual: >=

Devido a tipagem dinmica do PHP, voc deve tomar alguns cuidados quando estiver criando expresses lgicas envolvendo valores booleanos. Se voc zer uma comparao utilizando o operador ==, o nmero inteiro 0 ser igual ao booleano false, assim como NULL e uma string vazia. Isso pode no trazer bons resultados. Portanto, utilize sempre o operador ===, que checar no somente o contedo da varivel, e sim, o tipo dela. Operadores Lgicos Existem tambm os operadores lgicos, que so utilizados para combinar expresses lgicas, criando testes condicionais. So eles:

$a and $b E: enquanto A e B forem verdadeiros $a or $b

Desenvolvimento Web com PHP

Pgina 26

4Linux www.4linux.com.br

PHP

OU: enquanto A ou B forem verdadeiros $a xor $b XOR: enquanto A ou B forem verdadeiros, mas no os dois ! $a NOT: Verdadeiro se A for falso $a && $b E: enquanto A e B forem verdadeiros $a || $bb OU: enquanto A ou B forem verdadeiros

Desenvolvimento Web com PHP

Pgina 27

4Linux www.4linux.com.br

PHP

3.5 Strings
Uma string , nada mais nada menos, que um texto. Para declarar uma string, utilizamos aspas simples ou aspas duplas .

1 2 3

<? php echo " Testando " ; echo Testando ;

Existe uma diferena bem clara entre a utilizao de aspas duplas e aspas simples: O modo como o PHP interpreta o contedo delas. Diferentemente das aspas simples, as aspas duplas permitem que voc faa uso de caracteres de escape e variveis dentro de uma string.

1 2 3 4

<? php $nome = Jo o ; echo " $nome e Maria andam pela rua < br / > " ; echo $nome e Maria andam pela rua ;

Ao contrrio do que muitos pensam, no existe diferena alguma de performance entre o uso de aspas duplas ou simples. O fato das aspas duplas fazerem substituio de variveis pelos seus respectivos valores no torna o cdigo mais lento. Caracteres de escape Ao usar aspas duplas, necessrio conhecer alguns caracteres de escape. So eles:

1 2 3

Quebra de linha : \ n Tabula o : \ t Retorno do carro : \ r

Desenvolvimento Web com PHP

Pgina 28

4Linux www.4linux.com.br

PHP

4 5 6

A pr pria barra : \\ Aspas simples : \ Aspas duplas : \ "

Vamos entender melhor usando o exemplo abaixo:

1 2 3 4 5 6

<? php echo " <pre > Vou quebrar a linha \ n " ; echo "\ tEstou tabulado \ n " ; echo " Mostrar aspas duplas , sem quebrar o c digo \ " \ n " ; echo " Mostrar a barra \\ " ; echo " </ pre > " ;

Navegadores, por padro, no exibem caracteres de escape. Novas linhas e tabulaes que forem colocadas em strings s sero exibidas em texto puro, isto , caso voc salve a string em um arquivo de texto. Para mostrar caracteres de escape no navegador, comum utilizar a tag HTML <pre>. Concatenao Ao se trabalhar com strings, podemos concaten-las e obter resultados interessantes.

1 2 3 4 5 6 7 8 9

<? php $carro = Gol ; $cor = Azul ; $meucarro = $carro . $cor ; $outrocarro = Meu . $carro . . $cor . ; echo $meucarro ; echo $outrocarro ;

Desenvolvimento Web com PHP

Pgina 29

4Linux www.4linux.com.br

PHP

Evite concatenar string quando seu nico objetivo colocar o valor de uma varivel dentro da outra. Para esse m podemos utilizar as aspas duplas.

Desenvolvimento Web com PHP

Pgina 30

4Linux www.4linux.com.br

PHP

3.6 Estruturas de controle


No PHP, assim como em outras linguagens, possumos estruturas de controle que permitem que criemos um uxo em nosso programa. Uma dessas estruturas a condio. Caso algo seja verdadeiro, faa isto, seno, faa aquilo. No PHP, isso o IF/ELSE.

1 2 3 4 5 6 7

<? php $idade = 15; if ( $idade < 18) { echo Voc n o pode entrar aqui ! ; } else { echo Bem - vindo ao Bar ! ; }

Observe que estamos comparando o valor de uma varivel utilizando os operadores relacionais. Se o valor da varivel $idade for menor que 18, executaremos o bloco de cdigo contido entre as chaves do if. Caso contrrio, executaremos o bloco de cdigo contido entre as chaves do else. Podemos tambm utilizar os operadores lgicos junto dos operadores relacionais, criando expresses mais complexas que atendem melhor nossos problemas:

1 2 3 4 5 6

<? php $idade = 21; $carteirinha = true ; if ( $idade > 18 && $carteirinha == true ) { echo Bem - vindo ! ; }

Elseif

Desenvolvimento Web com PHP

Pgina 31

4Linux www.4linux.com.br

PHP

Alm do IF/ELSE bsico, podemos fazer uso do controle ELSEIF, que permite que criemos uma outra condio, alm da principal.

1 2 3 4 5 6 7 8 9

<? php $nome = Z ; if ( $nome == Z ) { echo Ea Z ! ; } elseif ( $nome == Maria ) { echo Ea Maria ! ; } else { echo Ea ningu m ! ; }

Switch O ELSEIF pode ser muito til, mas e quando tivermos muitas condies? Fica ruim de manter um cdigo cheio de ELSEIFs. a que entra o SWITCH. O switch permite que criemos innitas condies de forma bastante simples e organizada:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

<? php $nome = Z ; switch ( $nome ) { case Z : echo Ea Z ! ; break ; case Maria : echo Ea Maria ! ; break ; case Darth : echo Ea Vader ! ; break ; case Curinga :

Desenvolvimento Web com PHP

Pgina 32

4Linux www.4linux.com.br

PHP

17 18 19 20 21 22 23

echo Ea Curinga ! ; break ; default : echo Ea rap ? ; break ; }

Operador Ternrio Existe no PHP uma forma mais "curta"de criar condies. Ele chamado de Operador Ternrio. Embora ele deixe o cdigo menos legvel para programadores menos experientes, ele nos salva tempo e o cdigo torna-se mais limpo.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

<? php $a = 1; $b = ;

if ( $a > $b ) { $c = A maior que B ; } else { $c = A n o maior que B ; } $d = ( $a > $b ) ? A maior que B : A n o maior que B ; echo $c ; echo $d ;

Desenvolvimento Web com PHP

Pgina 33

4Linux www.4linux.com.br

PHP

3.7 Loops
Os loops no PHP so estruturas de controle muito importantes. Eles permitem que efetuemos um lao de repetio enquanto uma determinada condio for verdadeira. Temos quatro tipos de loop no PHP: while, do while, for e foreach. O foreach foi construdo especialmente para lidar com arrays, portanto, vamos conhec-lo mais tarde. while O while permite que executemos um bloco de cdigo enquanto a expresso que foi passada como parmetro seja verdadeira.

1 2 3 4 5 6 7 8

<? php $contador = ;

while ( $contador < 1 ) { echo $contador ; $contador ++; }

Neste caso, contamos at 10. Observe que estamos incrementando o valor da varivel logo depois de coloc-la na tela. Fiz dessa maneira para que casse mais claro para vocs, mas poderamos fazer o mesmo da seguinte forma:

1 2 3 4 5 6 7

<? php $contador = ;

while ( $contador < 1 ) { echo $contador ++;

Desenvolvimento Web com PHP

Pgina 34

4Linux www.4linux.com.br

PHP

8 9

do while O do while funciona da mesma forma que o while, com apenas uma diferena: Ele avalia a expresso depois de fazer algo. Isso garante que o cdigo seja executado ao menos uma vez, mesmo que a expresso no seja verdadeira.

1 2 3 4 5 6 7 8 9 10 11

<? php $contador = 1; do { $quadrado = $contador * $contador ; echo "O quadrado de $contador $quadrado < br / > " ; $contador ++; } while ( $contador <= 1 ) ;

Esse exemplo similar ao exemplo anterior. Mas vamos supor que a varivel $contador no seja 0, seja 12 (maior que 10, portanto, falhando nossa condio). O do while garantir que nosso bloco de cdigo ser executado apenas uma vez, mesmo a condio sendo falsa. for O for uma estrutura de controle muito similar ao while e ao do while. Contudo, ele mais sosticado e permite que executemos trs expresses em sua condio, separadas por ponto e vrgula. A primeira executada ao incio do loop, a segunda a condio (enquanto ela for verdadeira, o loop continuar), e a terceira executada ao m de cada repetio.

Desenvolvimento Web com PHP

Pgina 35

4Linux www.4linux.com.br

PHP

1 2 3 4 5 6 7 8

<? php for ( $contador = 1; $contador <= 1 ; $contador ++) { $quadrado = $contador * $contador ; echo "O quadrado de $contador $quadrado < br / > " ; }

Quebrando loops Enquanto estamos dentro de um loop, podemos utilizar duas instrues: continue e break. Elas permitem que ns quebremos os laos de repetio. O continue ir ignorar todas as instrues aps sua insero e ir para o prximo elemento no loop. O break ir quebrar o loop onde for inserido e nenhum outro elemento ser interpretado.

1 2 3 4 5 6 7 8 9 10

<? php for ( $contador = 1; $contador <= 1 ; $contador ++) { if ( $contador == 3) { continue ; } $quadrado = $contador * $contador ; echo "O quadrado de $contador $quadrado < br / > " ; }

Note que nosso contador ir pular o terceiro item do loop. Nosso if retornou verdadeiro, portanto, o bloco de cdigo contido nele foi executado. O bloco de cdigo era o continue, que fez com que a execuo do loop fosse pulada naquele momento, deixando de executar a conta do quadrado e nosso echo.

Desenvolvimento Web com PHP

Pgina 36

4Linux www.4linux.com.br

PHP

1 2 3 4 5 6 7 8 9 10

<? php for ( $contador = 1; $contador <= 1 ; $contador ++) { if ( $contador == 3) { break ; } $quadrado = $contador * $contador ; echo "O quadrado de $contador $quadrado < br / > " ; }

Observe agora que, ao invs de pular o terceiro item, nosso contador parou por ali. O break naliza a execuo do loop.

Desenvolvimento Web com PHP

Pgina 37

4Linux www.4linux.com.br

PHP

3.8 Arrays
Arrays so mapas de dados, guardados em forma de chave = valor. Arrays podem conter vrios tipos diferentes de variveis, at mesmo arrays. Se formos manter nossa analogia de gavetas, arrays so grandes gavetas que possuem mais gavetas dentro de si, etiquetadas ou no. A melhor forma de explicar o que eles so e como funcionam, atravs de cdigo:

1 2 3

<? php $pessoas = array ( Jo o , Maria , Pedro ) ; print_r ( $pessoas ) ;

No cdigo acima, ns criamos um array chamado $pessoas e colocamos trs valores dentro dele. Esses valores so como variveis, contidos dentro de uma grande varivel chamada $pessoas. Ela a nossa grande gaveta e as pequenas gavetas contidas nela podem possuir qualquer valor: string, inteiro, oat, etc. Note tambm que no utilizamos echo, e sim, uma funo chamada print_r. A funo print_r lista as chaves e os valores de um array. Existe tambm a funo var_dump:

1 2 3

<? php $pessoas = array ( Jo o , Maria , Pedro ) ; var_dump ( $pessoas ) ;

Observe que a funo var_dump ir exibir no s a estrutura do array, mas os tipos dos valores contidos dentro dele. Caso utilizemos echo $pessoas, o PHP ir retornar "Array()". Porque? Porque um array um mapa de dados e o echo no pode retornar o mapa inteiro. Para podermos utilizar o echo com arrays, precisamos especicar qual chave queremos acessar.

Desenvolvimento Web com PHP

Pgina 38

4Linux www.4linux.com.br

PHP

1 2 3

<? php $pessoas = array ( Jo o , Maria , Pedro ) ; echo $pessoas [1]; // Maria

3.8.1 Associativos
Por padro, quando criamos um array, ele recebe chaves numricas, incrementadas automaticamente de acordo com novos valores. Contudo, podemos criar chaves que so strings. Chamamos isto de arrays associativos. Para explicar melhor, faremos um exemplo em que mostraremos a temperatura mdia de alguns meses do ano.

1 2

<? php $temperaturas = array ( Janeiro = > 3 , Fevereiro = > 32 , Mar o => 29) ;

Observe que nossos valores, nossas pequenas gavetas dentro de uma grande gaveta, agora possuem nomes. Podemos utilizar estes nomes para nos referenciarmos a um valor especco dentro de um array, permitindo que manipulemos nossos arrays de maneira mais precisa.

1 2 3

<? php $temperaturas = array ( Janeiro = > 3 , Fevereiro = > 32 , Mar o => 29) ; echo "A temperatura m dia em Janeiro foi de : { $temperaturas [ Janeiro ]} graus " ;

Existem maneiras diferentes de se utilizar variveis dentro de strings e vice-versa Essas maneiras dividem-se em concatenadas e no-concatenadas, sendo a forma no-concatenada a mais "limpa"

Desenvolvimento Web com PHP

Pgina 39

4Linux www.4linux.com.br

PHP

1 2 3 4 5 6 7 8 9 10 11 12

<? php $nome = Carlos Carne ; $time = array ( melhor = > Gr mio , pior = > Curintia ) ; // No concatenadas echo " $nome torce para o { $time [ melhor ]} " ; echo "{ $nome } torce para o { $time [ melhor ]} " ; // Concatenadas echo "". $nome . " torce para o " . $time [ melhor ] . " " ; echo . $nome . torce para o . $time [ melhor ] . ;

Portanto, nunca utilize concatenao para acessar valores dentro de um array. Faa uso das chaves e evite sujar seu cdigo e diminuir sua manutenibilidade.

3.8.2 Multidimensionais
Arrays multidimensionais, por mais complexo que o nome seja, so basicamente, arrays dentro de um array. Lembram que os valores de um array podem ter qualquer tipo? String, oat, inteiro? Bom, tambm podemos ter arrays! Podemos ter innitos arrays dentro de outros arrays para controlar e armazenar diversos dados diferentes. Mas, seguindo o nosso exemplo anterior, podemos ter os dados de temperatura para vrios anos:

1 2 3 4 5 6

<? php $temperaturas = array ( 2 8 = > array ( Janeiro = > 3 , Fevereiro = > 32 ,

Desenvolvimento Web com PHP

Pgina 40

4Linux www.4linux.com.br

PHP

7 8 9 10 11 12 13 14 15 16 17 18

Mar o = > 29) , 2 9 = > array ( Janeiro = > 31 , Fevereiro = > 34 , Mar o = > 3 ) , 2 1 = > array ( Janeiro = > 32 , Fevereiro = > 34 , Mar o = > 28) ); echo " Janeiro de 2 graus " ; 8 foi de : { $temperaturas [ 2 8 ][ Janeiro ]}

Note que z uso de uma estrutura identada, similar a da sada do print_r, para visualizar melhor os dados do array. Eu poderia colocar tudo em uma linha, mas caria difcil de entender no futuro. Sempre que voc for trabalhar com arrays multidimensionais, procure identar sua denio para manter o cdigo limpo e fcil de entender.

3.8.3 Foreach
Aprendemos anteriormente alguns loops, mas faltou o foreach. O foreach est ligado diretamente a arrays. A ideia do foreach que voc possa iterar entre cada elemento de um array. Por exemplo:

1 2 3 4 5 6

<? php $pessoas = array ( Jo o , Maria , Pedro ) ; foreach ( $pessoas as $valor ) { echo " Ol $valor ! < br / > " ;

Desenvolvimento Web com PHP

Pgina 41

4Linux www.4linux.com.br

PHP

Alm de iterar entre os elementos e pegar os valores, podemos tambm pegar as chaves. Para cada elemento em nosso array (Ms e Temperatura) ns daremos um echo com a chave e valor desse elemento:

1 2 3 4 5 6 7

<? php $temperaturas = array ( Janeiro = > 3 , Fevereiro = > 32 , Mar o => 29) ; foreach ( $temperaturas as $chave = > $valor ) { echo "A temperatura m dia de $chave foi de $valor graus < br / > " ; }

Mas e arrays multidimensionais? Fcil. Se arrays multidimensionais so simplesmente arrays dentro de arrays, foreachs multidimensionais so simplesmente foreachs dentro de mais foreachs.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

<? php $temperaturas = array ( 2 8 = > array ( Janeiro = > 3 , Fevereiro = > 32 , Mar o = > 29) , 2 9 = > array ( Janeiro = > 31 , Fevereiro = > 34 , Mar o = > 3 ) , 2 1 = > array ( Janeiro = > 32 , Fevereiro = > 34 , Mar o = > 28)

Desenvolvimento Web com PHP

Pgina 42

4Linux www.4linux.com.br

PHP

16 17 18 19 20 21 22 23 24

); foreach ( $temperaturas as $ano = > $meses ) { echo " < strong > Temperaturas em $ano </ strong > < br / > " ; foreach ( $meses as $mes = > $temp ) { echo " $mes : $temp graus < br / > " ; } }

3.8.4 Sintaxe alternativa


Podemos criar arrays de forma simples e rpida utilizando o operador []. Dessa forma, iremos apenas jogar dados dentro do nosso array, sem nos preocuparmos com a chave.

1 2 3 4 5 6 7 8 9

<? php $array = array ( Jo o , Maria ) ; $array [] = Jos ; $times [] = Gr mio ; print_r ( $array ) ; print_r ( $times ) ;

Podemos tambm alterar os valores de um array usando os colchetes:

1 2 3 4

<? php $array = array ( nome = > Jo o , time = > nenhum ) ;

Desenvolvimento Web com PHP

Pgina 43

4Linux www.4linux.com.br

PHP

$array [ time ] = Gr mio ;

Desenvolvimento Web com PHP

Pgina 44

4Linux www.4linux.com.br

PHP

3.9 Funes
Uma funo um pedao de cdigo, que tem um objetivo especco, encapsulado em uma estrutura nica que recebe parmetros e retorna um dado. Ela essencial para permitir reuso de cdigo. O PHP possui vrias funes "built-in", isto , j vem com ele. Voc j viu algumas nos exemplos anteriores, como a funo date(). Abaixo, criaremos uma funo simples para que voc entenda como elas funcionam e para que servem.

1 2 3 4 5 6 7 8

<? php function negrito ( $valor ) { echo " < strong > $valor </ strong > " ; } echo negrito ( " Ol mundo ! " ) ; echo negrito ( " Ol mundo , novamente ! " ) ;

Observe que a funo tem dois parnteses e dentro deles temos uma varivel, chamamos isso de parmetro. Os parmetros de uma funo so somente valores, mas sempre criamos apelidos para eles. A varivel $valor poderia ter qualquer outro nome, optamos por esse para car mais claro. O contedo dela sempre ser o valor que est sendo passado para a funo durante a chamada de funo. Chamadas de funo so muito simples. Basta voc colocar o nome da funo e passar quaisquer parmetros para ela. Algumas funes podem no possuir parmetros.

1 2 3 4 5

<? php negrito (" Oi mundo " ) ; italico (" Oi pessoas " ) ; quebra () ;

Desenvolvimento Web com PHP

Pgina 45

4Linux www.4linux.com.br

PHP

lista (" Item 1 " , " Item 2 " , " Item 3 " ) ;

3.9.1 Retorno
No PHP, nossas funes podem simplesmente executar um bloco de cdigo, sem retornar qualquer valor. Mas, em vrios momentos, voc vai precisar que ela retorna um valor para voc. Esse valor pode ser o resultado de uma operao matemtica, uma manipulao de string, uma manipulao de arrays ou at mesmo um valor booleano, indicando se a operao foi bem sucedida ou no. Para fazer uma funo retornar um valor, precisamos utilizar a palavra-chave return, seguida do valor que desejamos retornar. Veja o exemplo:

1 2 3 4 5 6 7 8 9 10 11

<? php function taxar ( $valor ) { $valor = $valor * 1. 9; return $valor ; } $preco = 25; $comtaxa = taxar ( $preco ) ; echo "O pre o deste livro $preco . Com taxa , fica : $comtaxa " ;

3.9.2 Parmetros opcionais


Funes tambm podem possuir parmetros opcionais. Esses parmetros podem ser omitidos durante a chamada de funo e nossa funo trabalhar com um valor padro no lugar dessa parmetro obtido. Observe o cdigo abaixo:

Desenvolvimento Web com PHP

Pgina 46

4Linux www.4linux.com.br

PHP

1 2 3 4 5 6 7 8 9 10 11 12

<? php function taxar ( $valor , $subtaxa = 1) { $valor = $valor * $subtaxa * 1. 9; return $valor ; } $preco = 25; $comtaxa = taxar ( $preco ) ; $comsubtaxa = taxar ( $preco , 1. 2) ; echo "O livro custa $preco . Com taxa , fica : $comtaxa . Com sub , fica : $comsubtaxa " ;

3.9.3 Escopo
Quando estamos trabalhando em um script PHP, temos variveis. Essas variveis esto disponveis no escopo global de nosso script. Ela sempre pode ser acessada. Contudo, dentro de nossas funes, existe um outro escopo, o escopo local. Funes, que agem no escopo local, no podem acessar variveis do escopo global. Para podermos utilizar uma varivel que est disponvel no escopo global dentro de nossas funes, precisamos aloc-las no escopo local utilizando a palavra-chave global. Observe o cdigo abaixo:

1 2 3 4 5 6 7

<? php $taxa = 1. 9; function taxar ( $valor ) { global $taxa ;

Desenvolvimento Web com PHP

Pgina 47

4Linux www.4linux.com.br

PHP

8 9 10 11 12 13 14 15

$valor = $valor * $taxa ; return $valor ; } $preco = 25; $comtaxa = taxar ( $preco ) ; echo "O pre o deste livro $preco . Com taxa , fica : $comtaxa " ;

3.9.4 Passagem por referncia

Quando passamos um valor para uma funo, um parmetro, aquele valor passa a existir no escopo local da funo. As alteraes feitas nesse valor s existem no escopo local, portanto, precisamos retornar algo em nossa funo para fazer essas alteraes, se necessrios, aparecerem no escopo global. Com a passagem por referncia, qualquer alterao feita no escopo local em um valor passado por referncia ser reetida no escopo global. Utilizamos o operador & em frente a um parmetro para especicar passagem referncia. Por exemplo:

1 2 3 4 5 6 7 8 9 10 11

<? php function adicionar (& $fruta ) { return ++ $fruta ; } $laranjas = 5; adicionar ( $laranjas ) ; echo $laranjas ;

Desenvolvimento Web com PHP

Pgina 48

4Linux www.4linux.com.br

PHP

A varivel $laranjas s existe no escopo global. Mas estamos passando essa varivel para uma funo por referncia, o que ir alterar o valor da varivel em ambos os escopos, sem que eu precise dizer que o valor da varivel igual ao retorno da funo.

3.9.5 Funes annimas e Closures


Funes lambda, ou funes annimas como so comumente conhecidas, so funes que podem ser denidas a qualquer momento, geralmente a uma varivel e disponvel somente no escopo desta. Este conceito vem do clculo lambda, introduzido por Alonzo Church nos anos 30, que inspirou a criao de linguagens funcionais como Lisp e Scheme. Lambdas so muito teis em conjunto com funes como array_lter e array_map. Como podemos ver no exemplo abaixo, que monta um array somente com os valores mpares de outro:

1 2 3 4 5 6

<? php $array = array (1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 1 , 11 , 12 , 13 , 14 , 15) ; $impares = array_filter ( $array , function ( $valor ) { return $valor % 2; }) ; print_r ( $impares ) ;

Closures, so muito similares a lambdas, mas acabam sendo mais teis j que eles podem interagir com o escopo global. Podemos importar variveis do escopo global para o escopo local do closure utilizando a palavra-chave use, que neste caso funciona como a global que vimos anteriormente. Podemos ver no exemplo abaixo um simples Closure:

Desenvolvimento Web com PHP

Pgina 49

4Linux www.4linux.com.br

PHP

1 2 3 4 5 6

<? php $teste = " Oi mundo " ; $closure = function () use ( $teste ) { echo $teste ; }; $closure () ;

Desenvolvimento Web com PHP

Pgina 50

Captulo 4 Funes Nativas

4Linux www.4linux.com.br

Funes Nativas

4.1 Funes para variveis

4.1.1 Funo empty

A funo empty verica se a varivel considerada vazia, ou seja, caso seu contedo seja , 0, "0", NULL, FALSE, um array vazio, ou uma varivel declarada porm sem valor em uma classe.

1 2 3 4 5 6

<? php $variavel = ;

if ( empty ( $variavel ) ) { echo Esta vari vel considerada vazia ! ; }

4.1.2 Funo isset

Esta funo informa se determinada varivel foi iniciada.

1 2 3 4 5 6

<? php $variavel = ; if ( isset ( $variavel ) ) { echo "A vari vel existe !!! " ; }

Podemos tambm utilizar a funo unset para destruir determinada varivel.

Desenvolvimento Web com PHP

Pgina 52

4Linux www.4linux.com.br

Funes Nativas

4.1.3 Funo is_array


Como o prprio nome j diz, esta funo verica se determinada varivel um array:

1 2 3 4

<? php $vetor = array ( Isto , , um array ) ; echo is_array ( $vetor ) ? Sim , isto um array . : N o um array ;

4.1.4 Funo is_bool


Verica se a varivel booleana. No exemplo abaixo, como o contedo da varivel false, a frase ser mostrada na tela.

1 2 3 4 5 6

<? php $variavel1 = false ; if ( is_bool ( $a ) ) { echo A vari vel $a um valor booleano ; }

4.1.5 Funo is_callable


Verica se o contedo de uma varivel uma funo vlida.

1 2

<? php

Desenvolvimento Web com PHP

Pgina 53

4Linux www.4linux.com.br

Funes Nativas

3 4 5 6 7 8 9 10

function teste () { } $variavel = teste ; var_dump ( is_callable ( $variavel , false , $nome ) ) ; echo $nome , " \ n " ;

A sada ser true, pois teste de fato o nome de uma funo vlida e logo depois ser apresentado na tela o nome da funo, encontrada na varivel. Teste este mesmo exemplo modicando o contedo da varivel para teste1 por exemplo. A sada dever ser falsa, tendo em vista que no h funo com este nome.

4.1.6 Funo is_oat


A funo is_oat vericar se o contedo de uma varivel um valor em ponto utuante.

1 2 3 4 5 6 7

<? php $variavel = 13.33; if ( is_float ( $variavel ) ) { echo " float !\ n " ; } else { echo "N o float !\ n " ; }

4.1.7 Funo is_int


Verica se o nmero em questo um inteiro.

Desenvolvimento Web com PHP

Pgina 54

4Linux www.4linux.com.br

Funes Nativas

1 2 3 4 5 6 7

<? php $variavel = 13; if ( is_int ( $variavel ) ) { echo " inteiro !\ n " ; } else { echo "N o inteiro !\ n " ; }

4.1.8 Funo is_null


Esta funo indica se a varivel nula.

1 2 3 4 5 6 7 8

<? php $variavel = NULL ; if ( is_int ( $variavel ) ) { echo " nulo !\ n " ; } else { echo "N o nulo !\ n " ; }

4.1.9 Funo is_numeric


Indica se a varivel numrica

1 2 3

<? php $variavel = 3 ;

Desenvolvimento Web com PHP

Pgina 55

4Linux www.4linux.com.br

Funes Nativas

4 5 6 7 8

if ( is_int ( $variavel ) ) { echo " um n mero !\ n " ; } else { echo "N o um n mero !\ n " ; }

4.1.10 Funo is_object


Verica se a varavel em questo um objeto.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

<? php function get_students ( $obj ) { if (! is_object ( $obj ) ) { return false ; } return $obj - > students ; } $obj = new stdClass () ; $obj -> students = array ( Kalle , Ross , Felipe ) ; var_dump ( get_students ( null ) ) ; var_dump ( get_students ( $obj ) ) ;

4.1.11 Funo is_resource


Verica se uma determinada varivel um resource.

Desenvolvimento Web com PHP

Pgina 56

4Linux www.4linux.com.br

Funes Nativas

1 2 3 4 5 6

<? php $conexao = @mysql_connect ( localhost , usuario , senha ) ; if (! is_resource ( $conexao ) ) { die (N o foi poss vel conectar ! : . mysql_error () ) ; }

4.1.12 Funo is_scalar


Indica se a varivel em questo escalar.

1 2 3 4 5 6 7 8 9 10 11 12

<? php function show_var ( $variavel ) { if ( is_scalar ( $variavel ) ) { echo $variavel ; } else { echo " N o escalar ! " ; } } $pi = 3.1416; show_var ( $pi ) ;

4.1.13 Funo is_string


Verica se determinado contedo considerada uma string.

<? php

Desenvolvimento Web com PHP

Pgina 57

4Linux www.4linux.com.br

Funes Nativas

2 3 4 5

var_dump ( is_string ( teste ) ) ; var_dump ( is_string ( " 5 " ) ) ; var_dump ( is_string (13) ) ; var_dump ( is_string ( true ) ) ;

Sada: bool(true) bool(true) bool(false) bool(false) Perceba que os valores dentro das aspas (simples ou duplas) so consideradas strings, mesmo que se trate de nmeros ou palavras reservadas.

4.1.14 Funo settype


A funo settype atribui um tipo a uma varivel.

1 2 3

<? php $variavel = true ; settype ( $variavel , " string " ) ;

Sada: variavel is now "1"(string) Veja ento que a varivel que antes era booleana, foi convertida para seu correspondente em string, "1".

4.1.15 Funo gettype


Esta funo retorna qual o tipo da varivel, analisando seu contedo:

Desenvolvimento Web com PHP

Pgina 58

4Linux www.4linux.com.br

Funes Nativas

1 2 3

<? php $variavel = " teste " ; echo Esta vari vel do tipo . gettype ( $variavel ) ;

4.1.16 Funo unset


Esta funo apaga da memria determinada varivel.

1 2 3 4 5

<? php set ( $variavel ) ; echo " Vari vel criada " ; unset ( $variavel ) ; echo " Vari vel deletada " ;

4.1.17 Funo var_dump


Esta uma das funes mais importantes para quem desenvolve em PHP. Ela apresenta detalhes a respeito de uma varivel, o que torna mais fcil o reconhecimento de problemas no cdigo. Muito utilizada para compreender o funcionamento de arrays.

1 2 3

<? php $a = array (1 , 2 , array ( " a " , " b " , " c " ) ) ; var_dump ( $a ) ;

O cdigo acima ir exibir:

Desenvolvimento Web com PHP

Pgina 59

4Linux www.4linux.com.br

Funes Nativas

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

array (3) { [ ]= > int (1) [1]= > int (2) [2]= > array (3) { [ ]= > string (1) " a " [1]= > string (1) " b " [2]= > string (1) " c " } }

4.1.18 Funo var_export


Muio parecida com a funo var_dump, porm a sada um cdigo PHP vlido.

1 2 3 4

<? php $vetor = array (1 , 2 , array ( " a " , " b " , " c " ) ) ; var_export ( $vetor ) ; ?>

O cdigo acima ir exibir:

1 2 3 4 5

array ( => 1, 1 => 2, 2 => array (

Desenvolvimento Web com PHP

Pgina 60

4Linux www.4linux.com.br

Funes Nativas

6 7 8 9 10

=> a , 1 => b , 2 => c , ), )

Desenvolvimento Web com PHP

Pgina 61

4Linux www.4linux.com.br

Funes Nativas

4.2 Funes para strings


O PHP possui muitas funes nativas para se trabalhar com strings e manipul-las. A partir de agora, veremos algumas dessas funes, exemplos de como trabalhar com elas, e ver como elas so teis no dia a dia de um programador PHP.

4.2.1 Funo printf


A funo printf permite que formatemos uma string de diferentes formas.

1 2 3 4 5 6

<? php $artilheiro = Ronaldo ; $gols = 19; $formato = O artilheiro do brasileir o , %s , tem % d gols . ; printf ( $formato , $artilheiro , $gols ) ;

Dependendo do tipo da varivel, especicamos a chave de substituio: %s = String %f = Float %d = Integer

4.2.2 Funo sprintf


A funo sprintf similar a funo printf, mas ao invs de mostrar a string na tela, ela apenas monta a string.

Desenvolvimento Web com PHP

Pgina 62

4Linux www.4linux.com.br

Funes Nativas

1 2 3 4 5 6 7

<? php $artilheiro = Jonas ; $gols = 19; $formato = O artilheiro do brasileir o , %s , tem % d gols . ; $string = sprintf ( $formato , $artilheiro , $gols ) ; echo $string ;

4.2.3 Funo vsprintf


A funo vsprintf similar a funo sprintf, mas ela aceita um array de valores a serem substitudos, ao invs de uma srie de parmetros.

1 2 3 4 5

<? php $formato = O artilheiro do brasileir o , %s , tem % d gols . ; $string = vsprintf ( $formato , array ( Jonas , 19 ) ) ; echo $string ;

4.2.4 Funo str_replace


A funo str_replace permite que voc substitua uma ou mais strings por outras, dentro de uma string maior. Ela recebe trs parmetros: o que voc quer substituir, pelo qu voc quer substituir e onde voc quer substituir. A funo ir retornar a string com as substituies feitas. Veja o exemplo:

1 2

<? php

Desenvolvimento Web com PHP

Pgina 63

4Linux www.4linux.com.br

Funes Nativas

3 4 5 6

$string = " Oi mundo " ; $novastring = str_replace ( " Oi " , " Tchau " , $string ) ; echo $novastring ;

Observe que possvel passar no s uma string para os dois primeiros parmetros, mas arrays tambm. Podemos substituir mais de uma palavra por uma string, ou substituir igualmente:

1 2 3 4 5 6 7 8 9 10 11 12

<? php $string = " Ol mundo cruel ! " ; $original = array ( mundo , cruel ) ; $substituto = array ( mundinho , feliz ) ; $novastring = str_replace ( $original , " coisa " , $string ) ; $outrastring = str_replace ( $original , $substituto , $string ) ; echo $novastring ; echo $outrastring ;

4.2.5 Funo htmlentities


A funo htmlentities transforma caracteres em entidades HTML equivalentes. Um exemplo de quando observamos este comportamento ao digitar caracteres em editores de texto na web que permitem formatao. Quando escrevemos no editor < e clicamos para ver como cou o cdigo HTML, vericamos que o caractere que representa sinal de menor, foi identicado como &lt;. exatamente isso que esta funo faz. Para realizar o processo contrrio, ou seja, decodicar os caracteres, usamos a funo html_entity_decode ou htmlspe-

Desenvolvimento Web com PHP

Pgina 64

4Linux www.4linux.com.br

Funes Nativas

cialchars_decode.

1 2 3 4 5

<? php $string = " Tenha um <b > bom </ b > dia ! " ; echo htmlentites ( $string ) ; // A sa da ser : Tenha um & lt ; bom & gt ; dia !

Tambm podemos enviar outros parmetros a esta funo, se queremos ou no que aspas na string sejam convertidas, bem como indicar qual o tipo de codicao utilizado. No exemplo abaixo com o parmetro ENT_QUOTES, estamos indicando que as aspas utilizadas na string tambm devem ser convertidas.

1 2 3 4 5

<? php $string = " E ela me disse : tenha um <b > bom dia </ b > e eu tive . " ; echo htmlentities ( $string , ENT_QUOTES ) ; // A sa da ser : E ela me disse : & # 39; tenha um & lt ; bom & gt ;&# 39; dia e eu tive .

Observe que para vericar se a sada est correta voc precisa ver o cdigo fonte da pgina.

4.2.6 Funo htmlspecialchars


Esta funo praticamente idntica com a funo htmlentitles. O diferencial que na funo htmlentitles, todos os caracteres que tem entidades HTML equivalentes, sero convertidos.

1 2

<? php $string = " <a href = http :// www .4 linux . com . br > 4 linux </a > " ;

Desenvolvimento Web com PHP

Pgina 65

4Linux www.4linux.com.br

Funes Nativas

echo htmlspecialchars ( $string , ENT_QUOTES ) ;

Observe que para vericar se a sada est correta voc precisa ver o cdigo fonte da pgina!

4.2.7 Funo htmlspecialchars_decode


Podemos tambm realizar o processo inverso, ou seja, ao obter um texto que esteja codicado, podemos transform-lo em caracteres comuns.

1 2 3

<? php $string = " Se 3 & gt ; 2 ent o 2 & lt ; 3 " ; echo htmlspecialchars_decode ( $string , ENT_QUOTES ) ;

Observe que para vericar se a sada est correta voc precisa ver o cdigo fonte da pgina!

4.2.8 Funo trim


Esta funo retira espaos em branco no incio e no nal de uma string. Alm de espaos, esta funo remove tabulaes e linhas em branco. Tambm possvel passar por parmetro outros caracteres queremos remover.

1 2 3 4 5 6

<? php $string = " \ t \ tTenha um bom dia !!! echo $string ; $trimmed = trim ( $string ) ; :) " ;

Desenvolvimento Web com PHP

Pgina 66

4Linux www.4linux.com.br

Funes Nativas

echo $trimmed ;

Veja que no exemplo acima, usando um simples echo, no conseguimos observar exatamente a sada e que os espaos foram removidos. Para visualizar com mais detalhes o comportamento da string, vamos utilizar a funo var_dump, que nos mostrar o nmero de caracteres existentes na string original e na string modicada.

1 2 3 4 5 6 7

<? php $string = " \ t \ tTenha um bom dia !!! var_dump ( $string ) ; $trimmed = trim ( $string ) ; var_dump ( $trimmed ) ; :) " ;

Podemos tambm utilizar um segundo parmentro para indicar quais caracteres do incio e do nal da string devero ser removidos. No exemplo abaixo estamos removendo as letras "Te"do incio e "do"do nal da string. Assim a sada ser "stan".

1 2 3 4 5

<? php $string = " Testando " ;

$trimmed = trim ( $string , " Tedo " ) ; var_dump ( $trimmed ) ;

4.2.9 Funo ucrst


Esta uma funo bem simples, que recebe como parmetro uma string e retorna esta string com o primeiro caracter em maisculo.

Desenvolvimento Web com PHP

Pgina 67

4Linux www.4linux.com.br

Funes Nativas

1 2 3 4 5 6

<? php $string = hello world ! ; echo ucfirst ( $string ) ; // Sa da Hello world !

4.2.10 Funo ucwords


Parecida com ucrst, porm a funo ucwords converte para maisculo os primeiros caracteres de todas as palavras de uma string:

1 2 3 4 5 6

<? php $string = hello world ! ; echo ucwords ( $string ) ; // Sa da Hello World !

4.2.11 Funo lcrst


O retorno desta funo o oposto do que vimos com ucrst (upper case rst). A funo lcrst (lower case rst) transforma o primeiro caracter da string em minsculo.

1 2 3 4 5

<? php $string = Hello World ! ; echo lcfirst ( $string ) ;

Desenvolvimento Web com PHP

Pgina 68

4Linux www.4linux.com.br

Funes Nativas

// Sa da hello World !

4.2.12 Funo nl2br


Esta funo insere a tag <br /> no lugar das newlines presentes na string.

1 2 3

<? php echo nl2br ( " linha 1\ nlinha2 \ nlinha3 \ n " ) ;

Observe que para vericar se a sada est correta voc precisa ver o cdigo fonte da pgina!

4.2.13 Funo str_split


A funo str_split transforma uma string em um array, ou seja, separa a string em pedaos e cada pedao estar alocado em uma posio de um vetor. Recebe como parmetro a string que ser separada e como segundo parmetro podemos indicar quantos caracteres devero car em cada posio do vetor. Observe que por padro, ele ir separar cada caracter em uma posio do vetor:

1 2 3 4 5 6 7

<? php $string = " Oi , tudo bem ? " ; $string1 = str_split ( $string ) ; print_r ( $string1 ) ; ?>

Desenvolvimento Web com PHP

Pgina 69

4Linux www.4linux.com.br

Funes Nativas

8 9

// Sa da : Array ( [ ] = > O [1] = > i [2] = > , [3] = > [4] = > t [5] = > u [6] = > d [7] = > o [8] = > [9] = > b [1 ] = > e [11] = > m [12] = > ? )

J neste segundo exemplo, estamos indicando que queremos separar os caracteres de 5 em 5:

1 2 3 4 5 6 7 8 9

<? php $string = " Oi , tudo bem ? " ; $string2 = str_split ( $string , 5) ; print_r ( $string2 ) ; ?> // Sa da : Array ( [ ] = > Oi , t [1] = > udo b [2] = > em ? )

4.2.14 Funo str_repeat

Esta uma funo simples, que repete a string de acordo com o valor indicado.

1 2 3 4 5

<? php echo str_repeat ( " @ " , 1 ) ; ?> Sa da : @@@@@@@@@@

Desenvolvimento Web com PHP

Pgina 70

4Linux www.4linux.com.br

Funes Nativas

4.2.15 Funo str_pad


A funo str_pad preenche uma string com espaos em branco ou determinados caracteres am de que a string que com o tamanho desejado.

1 2 3 4

<? php $string = " May the force be with you ! " ; print str_pad ( $string , 1 ?> );

Observe que para vericar se a sada est correta voc precisa ver o cdigo fonte da pgina! Podemos tambm escolher em que posio car e quais sero os caracteres de preenchimento:

1 2 3 4 5 6

<? php $string = " May the force be with you ! " ; print str_pad ( $string , 5 , " @ " , STR_PAD_LEFT ) ; print str_pad ( $string , 5 , " @ " , STR_PAD_BOTH ) ; print str_pad ( $string , 5 ?> , "@");

4.2.16 Funo str_shufe


Esta funo recebe uma string e tem como retorno o contdo desta string, porm com seus caracteres misturados.

1 2

<? php

Desenvolvimento Web com PHP

Pgina 71

4Linux www.4linux.com.br

Funes Nativas

3 4 5

$string = labirinto ; $mix = str_shuffle ( $string ) ; echo $mix ;

4.2.17 Funo str_word_count

Funo simples e muito til. Conta o nmero de palavras em uma string. Utilizando o parmetro 0, mostrar apenas o de palavras. Com o parmetro 1 mostrar um array com todas as palavras encontradas naquela string. E com o parmetro 2 retorna um array onde a chave ser a posio da palavra dentro da string.

1 2 3 4 5 6 7

<? php $string = " Oi , como vai voce ? " ; print_r ( str_word_count ( $string , 1) ) ; echo str_word_count ( $string ) ; // Sa da : Array ( [ ] = > Oi [1] = > como [2] = > vai [3] = > voce ) 4

Ou tambm:

1 2 3 4 5 6 7

<? php $string = " Oi , como vai voce ? " ; print_r ( str_word_count ( $string , 2) ) ; echo str_word_count ( $string ) ; // Sa da : Array ( [ ] = > Oi [4] = > como [9] = > vai [13] = > voce ) 4

Desenvolvimento Web com PHP

Pgina 72

4Linux www.4linux.com.br

Funes Nativas

4.2.18 Funo strchr

Esta funo apenas um apelido para a funo strstr

4.2.19 Funo strstr

A funo strstr encontra a primeira ocorrncia de uma string. No exemplo abaixo, mostrar na tela apenas o que for encontrado depois do @:

1 2 3 4 5 6 7

<? php $email = linus@linux . org ;

$dominio = strstr ( $email , @ ) ; echo $dominio ; // Sa da : linux . org

Neste outro exemplo, ser mostrado os caracteres encontrados antes do @:

1 2 3 4 5 6

<? php $user = strstr ( $email , @ , true ) ; echo $user ; // Sa da : linus

Desenvolvimento Web com PHP

Pgina 73

4Linux www.4linux.com.br

Funes Nativas

4.2.20 Funo strcmp


A funco strcmp realiza uma comparao entre strings. No exemplo abaixo, como as duas strings so iguais, o retorno 0. Se a string1 for maior que a string2 o retorno ser um valor maior de zero, caso contrrio o retorno ser menor que zero.

1 2 3 4 5

<? php $string1 = 2 ; $string2 = 2 ; var_dump ( strcmp ( $string1 , $string2 ) ) ;

4.2.21 Funo strlen


A funo strlen retorna o nmero de caracteres dentro de uma string. Lembrando que espaos tambm so contabilizados!

1 2 3 4 5 6

<? php $string = May the source be with you ! ; echo strlen ( $string ) ; // Sa da : 28

4.2.22 Funo strpos


Retorna a posio onde se encontra determinada ocorrncia dentro de uma string. Se a string for encontrada, retorna true, caso contrrio, retorna false.

Desenvolvimento Web com PHP

Pgina 74

4Linux www.4linux.com.br

Funes Nativas

1 2 3 4 5 6 7 8 9 10 11 12 13 14

<? php $string = 123456789 ; $procurar = 7 ; $pos = strpos ( $string , $procurar ) ; if ( $pos === false ) { echo " A string $procurar n o foi encontrada na string $string " ; } else { echo " A string $procurar foi encontrada na string $string " ; echo " e existe na posi o $pos " ; } // Sa da : A string 7 foi encontrada na string 123456789 e

existe na posi o 7

Apenas um detalhe. Ao realizar esta busca, use trs sinais de igual para realizar a comparao (===). Ao usar apenas dois sinais de igual (==), quando o resultado for a posio 0, a funo retornar que a string no foi encontrada, tendo em vista que o valor zero tambm equivale a false em booleano! Pode fazer o teste!

1 2 3 4 5 6 7 8 9

<? php $string = 123456789 ; $procurar = ; $pos = strpos ( $string , $procurar ) ; if ( $pos == false ) { echo " A string $procurar n o foi encontrada na string $string " ; } else {

Desenvolvimento Web com PHP

Pgina 75

4Linux www.4linux.com.br

Funes Nativas

10 11 12 13 14

echo " A string $procurar foi encontrada na string $string " ; echo " e existe na posi o $pos " ; } // Sa da : A string n o foi encontrada na string 123456789

Agora usando trs sinais de igual para realizar a comparao:

1 2 3 4 5 6 7 8 9 10 11 12 13 14

<? php $string = 123456789 ; $procurar = ; $pos = strpos ( $string , $procurar ) ; if ( $pos === false ) { echo " A string $procurar n o foi encontrada na string $string " ; } else { echo " A string $procurar foi encontrada na string $string " ; echo " e existe na posi o $pos " ; } // Sa da : A string foi encontrada na string 123456789 e existe na posi o

4.2.23 Funo strrpos


Muito parecida com a funo strpos, a funo strrpos apresenta a ltima ocorrncia de um caracter em uma string. No exemplo abaixo, observe que agora ao buscar o nmero zero, ele indica que sua posio a 10 e no mais a zero.

Desenvolvimento Web com PHP

Pgina 76

4Linux www.4linux.com.br

Funes Nativas

1 2 3 4 5 6 7 8 9 10 11 12 13 14

<? php $string = 123456789 123456789 ; $procurar = ; $pos = strrpos ( $string , $procurar ) ; if ( $pos == false ) { echo " A string $procurar n o foi encontrada na string $string " ; } else { echo " A string $procurar foi encontrada na string $string " ; echo " e existe na posi o $pos " ; } // Sa da : A string foi encontrada na string 123456789 123456789 e existe na posi o 1

4.2.24 Funo strripos


Faz a mesma coisa que a funo strrpos, porm no case sensitive. Ou seja, ir pesquisar pela ltima ocorrncia de um caracter em uma string, ignorando se a letra est maiscula ou minscula.

1 2 3 4 5 6 7 8

<? php $string = abcdeABCDEabcdeABCDE ; $procurar = a ; $pos = strrpos ( $string , $procurar ) ; if ( $pos === false ) { echo " A string $procurar n o foi encontrada na string $string " ; } else {

Desenvolvimento Web com PHP

Pgina 77

4Linux www.4linux.com.br

Funes Nativas

9 10 11 12 13 14 15

echo " A string $procurar foi encontrada na string $string " ; echo " e existe na posi o $pos " ; } ?> // Sa da : A string a foi encontrada na string abcdeABCDEabcdeABCDE e existe na posi o 15

Perceba ento, que o caracter a apesar est na posio 0, 5, 10 e 15, apresentado como ltima ocorrncia na posio 15, mesmo que o A que est na posio 15 esteja em maisulo.

4.2.25 Funo stripos


Faz a mesma coisa que a funo strpos, porm no case sensitive. Ou seja, ir pesquisar pela primeira ocorrncia de um caracter em uma string, ignorando se a letra est maiscula ou minscula.

1 2 3 4 5 6 7 8 9 10 11 12 13

<? php $string = abcdeABCDEabcdeABCDE ; $procurar = A ; $pos = stripos ( $string , $procurar ) ; if ( $pos === false ) { echo " A string $procurar n o foi encontrada na string $string " ; } else { echo " A string $procurar foi encontrada na string $string " ; echo " e existe na posi o $pos " ; }

Desenvolvimento Web com PHP

Pgina 78

4Linux www.4linux.com.br

Funes Nativas

14

// Sa da : A string a foi encontrada na string abcdeABCDEabcdeABCDE e existe na posi o

Perceba ento, que o caracter A apesar est na posio 0, 5, 10 e 15, apresentado como primeira ocorrncia na posio 0, mesmo que o a que est na posio 0 esteja em minsculo.

4.2.26 Funo substr

Esta funo retorna uma parte de uma string. No exemplo abaixo, quero que a sada seja o caracter na posio zero at o caracter que est na penltima posio (-1):

1 2 3 4 5 6

<? php $string = substr ( " 123456789 " , echo $string ; // Sa da : 12345678 , -1) ;

Agora quero retornar os valores da posio 1 at a posio 5:

1 2 3 4 5 6

<? php $string = substr ( " 123456789 " , 1 , -4) ; echo $string ; // Sa da : 12345

Desenvolvimento Web com PHP

Pgina 79

4Linux www.4linux.com.br

Funes Nativas

4.2.27 Funo substr_replace


A funo substr_replace, como o nome j diz, substitui uma string por outra. No exemplo abaixo iremos substituir a palavra cedo por tarde:

1 2 3 4 5 6 7

<? php $string = hoje acordei muito cedo . ; echo " Original : $var < hr / >\ n " ; echo substr_replace ( $var , tarde , -5 , -1) . " < br / >\ n " ; // Sa da : hoje acordei muito tarde .

Neste exemplo iremos substituir a palavra cedo por um espao vazio, ou seja, estaremos deletando a plavra da string:

1 2 3 4 5 6 7

<? php $string = hoje acordei muito cedo . ; echo " Original : $var < hr / >\ n " ; echo substr_replace ( $var , , 12 , -1) . " < br / >\ n " ; // Sa da : hoje acordei .

4.2.28 Funo strtoupper


Funo simples que retorna a string de entrada em letras maisculas.

1 2

<? php

Desenvolvimento Web com PHP

Pgina 80

4Linux www.4linux.com.br

Funes Nativas

3 4 5 6

$string = " Luke , eu sou seu pai ! " ; echo strtoupper ( $string ) ; // Sa da : LUKE , EU SOU SEU PAI !

4.2.29 Funo strtolower


Faz a mesma coisa que a funo anterior porm ao contrrio, ou seja, apresenta a string em caixa baixa.

1 2 3 4 5 6

<? php $string = " Luke , eu sou seu pai ! " ; echo strtolower ( $string ) ; // Sa da : Luke , eu sou seu pai !

Desenvolvimento Web com PHP

Pgina 81

4Linux www.4linux.com.br

Funes Nativas

4.3 Funes para arrays


4.3.1 Ordenao de arrays
Existem vrias funes nativas no PHP para ordenarmos arrays. Na tabela abaixo voc pode ver as funes mais comuns e suas diferenas, servindo de referncia rpida na hora de ordenar um array.

4.3.2 Funo array_map


A funo array_map permite que todos os elementos de um array sejam modicados por uma funo, sem a necessidade de criar um loop, passando cada elemento para a funo. Exemplo:

Desenvolvimento Web com PHP

Pgina 82

4Linux www.4linux.com.br

Funes Nativas

1 2 3 4 5 6 7 8 9 10

<? php function cubo ( $num ) { return $num * $num * $num ; } $a = array (1 , 2 , 3 , 4 , 5) ; $b = array_map ( " cubo " , $a ) ; print_r ( $b ) ; ?>

No exemplo acima, a funo cubo recebe um valor como parmetro e retorna seu valor multiplicado por ele mesmo trs vezes. Isso eqivale ao nmero ao cubo. Logo depois encontramos um arras denominado $a com 5 valores. Abaixo encontramos um arras $b que chama a funo array_map. Esta funo est chamando a funo cubo e passando o array $a para que cada nmero dentro deste array seja calculado dentro da funo cubo. Como resultado, encontramos:

Array ( [ ] = > 1 [1] = > 8 [2] = > 27 [3] = > 64 [4] = > 125 )

4.3.3 Funo array_lter


A funo array_lter, ltra o contedo de um array de acordo com a ao de alguma funo.

1 2 3 4

<? php function impar ( $variavel ) {

Desenvolvimento Web com PHP

Pgina 83

4Linux www.4linux.com.br

Funes Nativas

5 6 7 8 9 10 11 12 13 14 15 16 17 18

return ( $variavel & 1) ; } function par ( $variavel ) { return (!( $variavel & 1) ) ; } $vetor = array (6 , 7 , 8 , 9 , 1 , 11 , 12) ; echo " Impares : \ n " ; print_r ( array_filter ( $vetor , " impar " ) ) ; echo " Pares : \ n " ; print_r ( array_filter ( $vetor , " par " ) ) ;

O cdigo acima ir exibir:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Impares : Array ( [1] = > 7 [3] = > 9 [5] = > 11 ) Pares : Array ( [ ] => 6 [2] = > 8 [4] = > 1 [6] = > 12 )

Desenvolvimento Web com PHP

Pgina 84

4Linux www.4linux.com.br

Funes Nativas

4.3.4 Funo array_chunk


A funo de array_chunk divide um array em pedaos, retornando assim um array multidimensional.

1 2 3 4

<? php $vetor = array ( a , b , c , d , e , f , g , h , i ) ; print_r ( array_chunk ( $vetor , 3) ) ;

O cdigo acima ir exibir:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

Array ( [ ] = > Array ( [ ] => a [1] = > b [2] = > c ) [1] = > Array ( [ ] => d [1] = > e [2] = > f ) [2] = > Array ( [ ] => g [1] = > h [2] = > i )

Desenvolvimento Web com PHP

Pgina 85

4Linux www.4linux.com.br

Funes Nativas

23 24

Perceba ento que o array original com 9 itens foi separado em 3 arrays, com 3 itens cada.

4.3.5 Funo array_combine


Esta funo une dois arrays, sendo um array usado para as chaves e outro para os itens.

1 2 3 4 5 6 7

<? php $vetor1 = array ( 1 , 2 , 3 ) ; $vetor2 = array ( um , dois , tr s ) ; $vetor3 = array_combine ( $vetor1 , $vetor2 ) ; print_r ( $vetor3 ) ;

Desta forma teremos o vetor1 indicando o ndice do vetor e vetor2 indicando os valores. O cdigo acima ir exibir:

1 2 3 4 5 6

Array ( [1] [2] ) = > um = > dois

[3] = > tr s

Desenvolvimento Web com PHP

Pgina 86

4Linux www.4linux.com.br

Funes Nativas

4.3.6 Funo array_diff


Usado para vericar diferenas entre os valores de um array.

1 2 3 4 5 6

<? php $vetor1 = array ( " a " = > " amor " , " paix o " , " carinho " , " saudade " ) ; $vetor2 = array ( " b " = > " amor " , " paix o " , " saudade " ) ; $resultado = array_diff ( $vetor1 , $vetor2 ) ; print_r ( $resultado ) ;

O cdigo acima ir exibir:

1 2 3 4

Array ( [1] => carinho )

4.3.7 Funo array_merge


Faz a unio/fuso entre um ou mais vetores, retornando o vetor resultante. Se os vetores tiverem a mesma chave string, o ltimo valor ir sobrescrever o primeiro. Porm se a chave for numrica, o valor no ser sobrescrito e sim adicionado ao vetor resultante.

1 2 3 4

<? php $vetor1 = array ( " cor " = > " vermelho " , 2 , 4) ; $vetor2 = array ( " a " , " b " , " cor " = > " verde " , " forma " = > " trapezoide " , 4) ;

Desenvolvimento Web com PHP

Pgina 87

4Linux www.4linux.com.br

Funes Nativas

5 6

$resultado = array_merge ( $vetor1 , $vetor2 ) ; print_r ( $resultado ) ;

O cdigo acima ir exibir:

1 2 3 4 5 6 7 8 9 10

Array ( [ cor ] = > verde [ ] => 2 [1] = > 4 [2] = > a [3] = > b [ forma ] = > trapezoide [4] = > 4 )

Perceba que a cor verde sobreps a cor vermelha ao realizar o merge, pois estavam utilizando o mesmo ndice (string). Quando o ndice era numrico no houve sobreposio, ento os demais valores foram apenas unidos, formando assim um novo array.

4.3.8 Funo array_ll


Preenche um array com valores pr-determinados.

1 2 3 4

<? php $vetor = array_fill (5 , 3 , Preenchendo ) ; print_r ( $vetor ) ;

O cdigo acima ir exibir:

Desenvolvimento Web com PHP

Pgina 88

4Linux www.4linux.com.br

Funes Nativas

1 2 3 4 5 6

Array ( [5] [6] [7] ) = > Preenchendo = > Preenchendo = > Preenchendo

Onde o valor 5 indica o ndice, ou seja, o vetor ser preenchido a partir daquele ndice. O valor 3 indica o nmero de itens a serem acrescentados.

4.3.9 Funo array_ip


Retorna um array com os valores invertidos, ou seja, ou ndices passam a ser os valores e os valores passam a ser os ndices

1 2 3 4 5 6

<? php $vetor = array ( " a " = > print_r ( $vetor ) ; , " b " = > 1 , " c " = > 2) ;

$vetor = array_flip ( $vetor ) ;

O cdigo acima ir mostrar:

1 2 3 4 5 6

Array ( [ ] => a [1] = > b [2] = > c )

Desenvolvimento Web com PHP

Pgina 89

4Linux www.4linux.com.br

Funes Nativas

4.3.10 Funo array_reduce

Esta funo reduz o vetor a um nico valor, utilizando para isso uma funo.

1 2 3 4 5 6 7 8 9

<? php function soma ( $v , $w ) { $v += $w ; return $v ; } $vetor = array (1 , 2 , 3 , 4 , 5) ; $resultado = array_reduce ( $vetor , " soma " ) ; echo $resultado ;

Sada: 15

4.3.11 Funo array_key_exists

Verica se uma chave ou valor existe em um vetor.

1 2 3 4 5 6

<? php $vetor = array ( " a " = > 1 , " b " = > 2) ; if ( array_key_exists ( " b " , $vetor ) ) { echo " O elemento b est no array ! " ; }

Desenvolvimento Web com PHP

Pgina 90

4Linux www.4linux.com.br

Funes Nativas

4.3.12 Funo array_search


Esta funo faz uma busca em um vetor por um valor. Ao encontr-lo, retorna a chave indicando a posio em que o valor se encontra.

1 2 3 4 5

<? php $vetor = array ( echo $chave ; = > a , 1 = > b , 2 = > c , 3 = > d ) ;

$chave = array_search ( d , $vetor ) ;

Sada: 3

4.3.13 Funo array_slice


Esta funo retorna uma parte de um vetor.

1 2 3 4

<? php $vetor = array ( " a " , " b " , " c " , " d " , " e " ) ; print_r ( array_slice ( $vetor , ?> , 3) ) ;

Onde 0 indica o ndice do primeiro valor e 3 indica o nmero de itens que deve ser apresentado. Sada:

1 2 3

Array ( [ ] => a

Desenvolvimento Web com PHP

Pgina 91

4Linux www.4linux.com.br

Funes Nativas

4 5 6 7

[1] = > b [2] = > c )

4.3.14 Funo array_splice


Esta funo remove uma parte do vetor e subsitui com outros valores.

1 2 3 4

<? php $vetor = array ( " vermelho " , " verde " , " azul " , " amarelo " ) ; array_splice ( $vetor , -1 , 1 , array ( " preto " , " marrom " ) ) ;

Neste exemplo, o item amarelo ser removido e substitudo pelos valores preto e marrom. Sendo assim o valor do vetor ser: ("vermelho", "verde", "azul", "preto", "marrom")

4.3.15 Funo array_replace


Substitui valores de um vetor

1 2 3 4 5

<? php $vetor = array ( " laranja " , " banana " , " ma " , " mam o " ) ; $subtituir = array ( ?> = > " abacaxi " , 4 = > " cereja " ) ; print_r ( array_replace ( $vetor , $substituir ) ) ;

Sada:

Desenvolvimento Web com PHP

Pgina 92

4Linux www.4linux.com.br

Funes Nativas

1 2 3 4 5 6 7 8

Array ( [ ] = > abacaxi [1] = > banana [2] = > ma [3] = > mam o [4] = > cereja )

4.3.16 Funo array_sum


Funo simples, que retorna a soma dos valores do vetor.

1 2 3 4

<? php $vetor = array (1 , 2 , 3 , 4) ; echo "A soma dos valores = " . array_sum ( $vetor ) ;

Sada: 11

4.3.17 Funo array_unique


Pesquisa por valores duplicados no array, removendo-os.

1 2 3

<? php $vetor = array (1 = > " verde " , 2 = > " vermelho " , 3 = > " verde " , 4 = > " azul " , 5 = > " vermelho " ) ;

Desenvolvimento Web com PHP

Pgina 93

4Linux www.4linux.com.br

Funes Nativas

4 5

$resultado = array_unique ( $vetor ) ; print_r ( $resultado ) ;

O cdigo acima ir mostrar:

1 2 3 4 5 6 7

Array ( [1] = > verde [2] = > vermelho [4] = > azul )

4.3.18 Funo array_walk

Aplica uma funo a cada item do vetor.

1 2 3 4 5 6 7 8 9

<? php $frutas = array ( " lim o " , " laranja " , " banana " , " melancia " ) ; function test_print ( $item , $key ) { echo " $key . $item < br >\ n " ; } array_walk ( $frutas , test_print ) ;

Desenvolvimento Web com PHP

Pgina 94

4Linux www.4linux.com.br

Funes Nativas

4.3.19 Funo in_array

Mais uma funo que verica se determinado valor est presente em um vetor.

1 2 3 4 5 6

<? php $vetor = array ( " um " , " dois " , " tr s " , " quatro " ) ; if ( in_array ( " dois " , $vetor ) ) { echo " Encontrei o valor dois " ; }

4.3.20 Funo sizeof

sinnimo para a funo count().

4.3.21 Funo count

A funo count conta o nmero de itens em um vetor.

1 2 3 4 5

<? php $vetor = array ( " um " , " dois " , " tr s " , " quatro " ) ; $resultado = count ( $vetor ) ; echo $resultado ;

Sada: 4

Desenvolvimento Web com PHP

Pgina 95

4Linux www.4linux.com.br

Funes Nativas

4.3.22 Funo serialize


A funo serialize permite que voc transforme um array em uma string, que pode ser armazenada de vrias formas diferentes.

1 2 3 4

<? php $array = array ( Luke , Leia , Han Solo , array ( Vader , Storm Trooper ) ) ; serialize ( $array ) ;

No exemplo acima a varivel contm um array multidimensional e utilizamos a funo serialize para armazenar estes dados como uma string.

4.3.23 Funo unserialize


Faz o processo contrrio ao serialize, ou seja, converte os dados armazenados no banco de dados, em PHP.

Desenvolvimento Web com PHP

Pgina 96

4Linux www.4linux.com.br

Funes Nativas

4.4 Outras funes

4.4.1 Funo mail

A funo mail, como o prprio nome diz, permite o envio de e-mails atravs do PHP.

1 2 3 4

<? php $messagem = " Ol \ nEnvio este e - mail para desejar \ num bom dia !!! " ; mail ( fulano@empresa . com . br , Assunto , $messagem ) ;

Onde: fulano@empresa.com.br refere-se ao destinatrio Assunto a string que indica o assunto do e-mail E no parmetro nal temos a mensagem, que preferencialmente deve ser colocada em uma varivel.

4.4.2 Funo md5

A funo md5 calcula o hash md5 de uma string.

1 2 3 4

<? php $string = exemplo ; echo md5 ( $string )

Desenvolvimento Web com PHP

Pgina 97

4Linux www.4linux.com.br

Funes Nativas

4.4.3 Funo sha1


Assim como a funo md5(), existem outras, relacionadas a outros tipos de algoritmos de hash como por exemplo sha1(), crc32(), etc. A funo sha calcula a hash sha1 de uma string.

1 2 3 4

<? php $string = exemplo ; echo sha1 ( $string )

Tambm possvel utilizar a funo sha1_le() para criar um hash de um arquivo utilizando o algoritmo sha1.

4.4.4 Funo hash


Ainda possvel utiliza a funo hash, que permite escolhermos qual tipo de algoritmo de hash enviar como parmetro para a funo:

1 2 3 4

<? php $string = exemplo ; echo hash ( md5 , $string )

Desenvolvimento Web com PHP

Pgina 98

Captulo 5 Funcionalidades Web

4Linux www.4linux.com.br

Funcionalidades Web

5.1 Protocolo HTTP


Toda aplicao web, seja ela construda utilizando PHP, Python, Ruby, Java ou qualquer outra linguagem, vive sob as normas e especicaes do protocolo HTTP. O protocolo HTTP, HyperText Transfer Protocol, dene como mensagens so formatadas e transmitidas, alm de quais aes servidores web e navegadores devem tomar em resposta a vrios comandos diferentes. Por exemplo, quando voc coloca uma URL em seu navegador, isso na verdade envia um comando HTTP para o servidor web desta pgina, que ir localizar o documento que voc quer ver e transmiti-lo para seu navegador. O protocolo HTTP um protocolo stateless, j que cada comando executado independentemente, sem qualquer conhecimento dos comandos que vieram antes dele ou que viro depois dele. Este o principal motivo do desenvolvimento de aplicaes para web ser to diferente e peculiar, comparado com o desenvolvimento de software em geral. Um protocolo stateless um protocolo onde seus comandos so independentes, assim como nossos scripts PHP. Eles so executados e terminados, sem qualquer persistncia na memria. Coincidncia? No, o PHP foi feito com a web e o protocolo HTTP em mente. So denidos no protocolo HTTP oito mtodos que indicam a ao a ser realizada a partir de uma requisio. Os oito mtodos so GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS e CONNECT.

Desenvolvimento Web com PHP

Pgina 100

4Linux www.4linux.com.br

Funcionalidades Web

5.2 Sesses
O protocolo HTTP stateless, portanto, cada requisio GET, POST, PUT, etc. independente. No possvel saber se o GET feito h 5 minutos foi feito por mim ou por outro usurio. Isso complica um pouco a nossa vida quando queremos criar, por exemplo, aplicaes com autenticao, com partes da aplicao acessveis somente por um usurio especco. Para contornar este problema, existe a sesso. A sesso pode ser criada pelo PHP, que ir identicar o usurio e manter uma sesso viva para ele. Cada visitante ter uma sesso e atravs dela poderemos identicar quem que, inclusive, autenticlos. O tempo de vida de uma sesso , por padro, 24 minutos. Esse valor pode ser alterado na congurao do PHP, alterando a diretiva session.gc_maxlifetime.

Desenvolvimento Web com PHP

Pgina 101

4Linux www.4linux.com.br

Funcionalidades Web

5.3 Cookies
Um cookie uma forma de armazenar informaes no navegador de um usurio. O navegador guarda informaes de um website que podem ser acessadas posteriormente por este website, at que o cookie expire ou seja removido. Essas informaes podem ser criadas, alteradas, removidas e acessadas somente pelo website de origem. Podemos utilizar cookies para vrios ns, mas seu uso mais comum para salvar as preferncias do usurio na sua aplicao (lngua padro, cor do texto, se ele gosta de caf ou ch, etc.). Tambm comum utilizar cookies para manter um usurio logado em nosso sistema, mesmo que a sesso expire. Cookies possuem um tempo de vida, denido pelo website que o criou. O navegador ir remov-los automaticamente quando este tempo de vida expirar, mas o usurio sempre poder limpar os cookies de seu navegador manualmente.

Desenvolvimento Web com PHP

Pgina 102

4Linux www.4linux.com.br

Funcionalidades Web

5.4 GET e POST


O mtodo GET serve para fazer uma requisio de recurso, seja este recurso uma pgina web (HTML), um script (PHP) ou qualquer outro arquivo, como uma imagem ou um vdeo. Uma vez feita a requisio, o servidor ir retornar o recurso pedido. O mtodo POST serve para enviar dados a serem processados pelo recurso especicado. Os dados a serem processados so sempre inclusos no corpo do mtodo POST. atravs do mtodo POST que possvel preencher e processar formulrios na web.

Desenvolvimento Web com PHP

Pgina 103

4Linux www.4linux.com.br

Funcionalidades Web

5.5 Headers HTTP


J falamos do protocolo HTTP e de suas requisies. Toda requisio possui um corpo e toda requisio deve receber uma resposta. Headers HTTP, ou cabealhos HTTP, so estes corpos. Eles carregam informaes de requisies e respostas, especicando os mtodos utilizados, seus parmetros e suas informaes. Por exemplo, quando colocamos uma URL em nosso navegador e apertamos enter, a seguinte requisio enviada:

1 2 3

GET / minhapagina . php HTTP /1.1 Host : meusite . com User - Agent : Mozilla /5. ( X11 ; Linux i686 ) AppleWebKit /534.3 Chromium /12. .742.112 ( KHTML , like Gecko ) Ubuntu /1 .1 Chrome /12. .742.112 Safari /534.3

4 5 6 7 8 9 10 11 12

Accept : text / html , application / xhtml + xml , application / xml ; q = .9 ,*/*; q = .8 Accept - Language : en - us , en ; q = .5 Accept - Encoding : gzip , deflate , sdch Accept - Charset : ISO -8859 -1 , utf -8; q = .7 ,*; q = .7 Keep - Alive : 3 Connection : keep - alive Cookie : PHPSESSID = r2t5uvjq435r4q7ib3vtdjq12 Pragma : no - cache Cache - Control : no - cache

Aps essa requisio, nosso navegador receber uma resposta. Que parece mais ou menos com isto:

1 2 3 4

HTTP /1. x 2

OK

Transfer - Encoding : chunked Date : Thu , 18 Aug 2 11 14:38:14 GMT Server : Apache

Desenvolvimento Web com PHP

Pgina 104

4Linux www.4linux.com.br

Funcionalidades Web

5 6 7 8 9 10 11 12 13 14

Connection : close Pragma : public Etag : " be65d4 792fe1a9d5bebcad7dfdd82 5 " Cache - Control : max - age =36 , public Content - Type : text / html ; charset = UTF -8 Last - Modified : Thu , 18 Aug 2 11 14:38:14 GMT Content - Encoding : gzip Vary : Accept - Encoding , Cookie , User - Agent CONTE DO DA P GINA AQUI

Isso, basicamente, so cabealhos HTTP. Os cabealhos contm informaes sobre a requisio e a resposta. Quando estamos em um script PHP, podemos manipular o contedo do cabealho da resposta. Para manipular o cabealho HTTP, usamos a funo header(). A manipulao mais simples de cabealho HTTP a manipulao do local da pgina. Ao trocarmos o valor do local da pgina, faremos com que o navegador redirecione para o novo valor. Por exemplo:

1 2 3

<? php header ( Location : http :// www .4 linux . com . br ) ;

Quando entrarmos nesse script PHP, seremos redirecionados para a pgina inicial da 4Linux. Podemos tambm manipular os cabealhos HTTP e dizer que a pgina no realmente uma pgina, e sim, um arquivo qualquer. Por exemplo:

1 2 3 4 5

<? php header ( Content - type : application / pdf ) ; header ( Content - Disposition : attachment ; filename = " documento . pdf " ) ;

Desenvolvimento Web com PHP

Pgina 105

4Linux www.4linux.com.br

Funcionalidades Web

readfile ( 4 Linux . pdf ) ;

No cdigo acima estamos alterando o tipo de contedo da pgina e sua disposio. Agora o navegador sabe que est acessando no uma pgina web, mas um arquivo PDF. Atravs da manipulao do Content-Disposition, o navegador ir baixar o arquivo ao invs de exibi-lo. Na terceiro linha, usamos a funo readle para carregar o contedo do arquivo 4Linux.pdf em nosso script.

Desenvolvimento Web com PHP

Pgina 106

4Linux www.4linux.com.br

Funcionalidades Web

5.6 Variveis superglobais


No PHP, existem variveis nativas que esto disponveis em qualquer escopo. Elas so, na maioria das vezes, arrays bidimensionais ou multidimensionais. As variveis supergloais so essenciais para qualquer aplicao web. J vimos um pouco sobre POST e GET e logo logo veremos como trabalhar com eles no PHP.

5.6.1 $_SERVER
Contm informaes sobre ambiente de execuo do script. Caso o script esteja sendo rodado em um servidor web, informaes sobre o cliente e o servidor sero exibidas. Caso o script esteja sendo executado da linha de comando, informaes sobre a mquina e o shell sero exibidas.

5.6.2 $_ENV
Contm todas as variveis do ambiente de execuo. muito comum utilizarmos a $_ENV quando estamos desenvolvendo scripts de linha de comando e precisamos acessar variveis de ambiente denidas por outros processos ou o usurio.

5.6.3 $_GET
Contm variveis passadas para o script usando o mtodo HTTP GET, isto , atravs da URL.

1 2

<? php echo $_GET [ meunome ]; // Retorna Z

Desenvolvimento Web com PHP

Pgina 107

4Linux www.4linux.com.br

Funcionalidades Web

Sendo que, na URL, eu chamei o script desta forma: http://www.meusite.com.br/teste.php?meunome

5.6.4 $_POST
Contm variveis passadas para o script usando o mtodo HTTP POST, isto , atravs de um formulrio.

1 2 3 4 5 6 7 8 9 10 11

<? php if ( $_POST ) { echo $_POST [ meunome ]; } ?> < form action = " teste . php " method = " POST " > < input type = " text " name = " meunome " / > < input type = " submit " value = " Enviar " / > </ form >

5.6.5 $_SESSION
Contm variveis denidas durante a sesso do navegador. Deve ser usada junto com a funo session_start().

1 2 3 4 5 6

<? php session_start () ; $_SESSION [ MeuCarro ] = Palio ; echo $_SESSION [ MeuCarro ];

Desenvolvimento Web com PHP

Pgina 108

4Linux www.4linux.com.br

Funcionalidades Web

5.6.6 $_COOKIE
A varivel superglobal $_COOKIE contm as informaes de nosso cookie, armazenadas em um array. Para criar um cookie, utilizamos a funo setcookie().

1 2 3

<? php setcookie ( " MeuCarro " , " Palio " ) ; echo $_COOKIE [ MeuCarro ];

Podemos determinar o tempo de vida de um cookie passando um terceiro parmetro para a funo. Este terceiro parmetro a data de expirao do cookie, no formato de timestamp UNIX. Para denirmos essa data de forma mais amigvel e legvel, vamos utilizar a funo strtotime() que converte uma frase de data em uma timestamp UNIX.

1 2 3

<? php setcookie ( " MeuCarro " , " Palio " , strtotime ( " +1 month " ) ) ; echo $_COOKIE [ MeuCarro ];

Nosso cookie ir expirar em um ms a partir da data de hoje.

5.6.7 $_REQUEST
Contm informaes sobre as superglobais $_GET, $_POST e $_COOKIE. No uma boa prtica utiliz-la, nem muito seguro.

5.6.8 $_FILES
Contm informaes sobre arquivos enviados atravs de um formulrio.

Desenvolvimento Web com PHP

Pgina 109

4Linux www.4linux.com.br

Funcionalidades Web

5.6.9 $GLOBALS
Contm todas as variveis disponveis no escopo global

1 2 3 4 5 6 7 8 9 10 11

<? php function carro () { $carro = " Fiesta local " ; echo $carro no escopo global . $GLOBALS [ " carro " ] . < br / > ; echo " \ $carro no escopo local : $carro " ; } $carro = " Fiesta global " ; echo carro () ;

Desenvolvimento Web com PHP

Pgina 110

4Linux www.4linux.com.br

Funcionalidades Web

5.7 Formulrios
Processamento de formulrios uma das tarefas mais comuns quando estamos trabalhando com aplicaes web. atravs dos formulrios que nossos usurios podem manipular e gerenciar informaes, portanto possvel dizer que os formulrios so a pedra losofal das aplicaes web. Quando um formulrio enviado, suas informaes so enviadas para algum lugar atravs do mtodo POST. Este "algum lugar"ir interpretar as informaes e fazer "alguma coisa"com elas. Como fazemos essa teoria virar prtica? Fcil. J conhecemos o protocolo, seus mtodos e variveis superglobais no PHP. Para montar um formulrio e process-lo, s nos falta criar o formulrio: exemplos/formulario.html
1 2 3 4 5 6 7 8 9 10 11 12 13

< html > < head > <h1 > Meu formul rio </ h1 > < form action = " processa . php " method = " POST " > <p >< label > Nome : </ label > < input type = " text " name = " nome " / > </ p > <p >< label > Email : </ label > < input type = " text " name = " email " / > </ p > <p ></p > <p >< input type = " submit " value = " Enviar " / > </ p > </ form > </ head > </ html >

Nosso formulrio bem simples. Observe que o campo action est direcionando para o arquivo processa.php. este arquivo que vai receber a requisio POST e processar as informaes do nosso formulrio vindas no cabealho. No temos ele ainda, certo? Ento vamos cri-lo: exemplos/processa.php
1

<? php

Desenvolvimento Web com PHP

Pgina 111

4Linux www.4linux.com.br

Funcionalidades Web

2 3

echo " Recebi um formul rio de { $_POST [ nome ]} , com o email { $_POST [ email ]}. " ;

No um processamento muito rebuscado, mas ainda um exemplo. Observe que estamos pegando as informaes de nosso formulrio utilizando a varivel superglobal $_POST. A partir deste exemplo, podemos fazer qualquer coisa. Guardar estas informaes em um arquivo, um banco de dados, enviar por email, etc. Agora, observe este segundo exemplo. No vamos mais ter o formulrio em uma pgina e process-lo em outra, vamos fazer tudo em uma s pgina. exemplos/formulario.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

<? php if ( $_POST ) { echo " Recebi um formul rio de { $_POST [ nome ]} , com o email { $_POST [ email ]}. " ; } ?> <html > <head > <h1 > Meu formul rio </ h1 > < form action = " " method = " POST " > <p >< label > Nome : </ label > < input type = " text " name = " nome " / > </p > <p >< label > Email : </ label > < input type = " text " name = " email " / > </p > <p > </p > <p >< input type = " submit " value = " Enviar " / > </p > </ form > </ head > </ html >

Note que o campo action est vazio. Quando o campo action de um formulrio est

Desenvolvimento Web com PHP

Pgina 112

4Linux www.4linux.com.br

Funcionalidades Web

vazio, ele ir fazer a requisio para a prpria pgina. Note tambm que temos uma condio envolvendo nosso echo. Essa condio serve para executarmos aquele bloco de cdigo somente quando recebermos uma requisio POST. Mas porque isso? Porque no queremos acessar a varivel superglobal $_POST sem que ela possua valores, seno, teremos alguns erros em nossa pgina.

Desenvolvimento Web com PHP

Pgina 113

Captulo 6 Banco de Dados

4Linux www.4linux.com.br

Banco de Dados

6.1 O que um banco de dados?


Durante a maior parte do tempo como um desenvolvedor, voc ir criar ou encontrar aplicaes que utilizam alguma forma de armazenamento de dados. Estes dados podem estar sendo armazenados em simples arquivos no sistema de arquivos de mquina, ou podem estar sendo armazenados em estruturas mais complexas como um banco de dados. Bancos de dados, em sua grande maioria, so constitudos com base nas relaes existentes entre suas entidades, dando o nome de bancos de dados relacionais. Um banco de dados um conjunto de registros organizados em uma estrutura prdenida. Ele composto de tabelas, linhas e colunas. As tabelas so como pastas, onde guardamos vrios tipos de informaes. Linhas so os registros dentro dessas "pastas"e as colunas so tipos de informaes que as linhas possuem. Em outras palavras, as colunas denem a estrutura dos dados e as linhas so os dados em si.

Desenvolvimento Web com PHP

Pgina 115

4Linux www.4linux.com.br

Banco de Dados

6.2 O que SQL?


SQL, conhecida como Structured Query Language, uma linguagem de programao declarativa, criada para gerenciar informaes em um sistema gerenciador de banco de dados. com a SQL que podemos criar, alterar, remover e ler informaes de nosso banco de dados. Existem dois grandes tipos de comandos SQL: uma declarao e uma consulta. Em uma consulta, ou query, especicamos clusulas e expresses para ler informaes do banco. Em uma declarao, fazemos o mesmo, mas com o objetivo de executar algo (como uma remoo, alterao, etc.).

Desenvolvimento Web com PHP

Pgina 116

4Linux www.4linux.com.br

Banco de Dados

6.3 MySQL

O MySQL um sistema de gerenciamento de banco de dados, que utiliza a linguagem SQL como interface. Ele foi inventado em 1994 e sua primeira verso lanada em 1995. Desde o surgimento do PHP 3, o MySQL tornou-se um el aliado, sendo usados juntos na maioria dos projetos para web. Um banco de dados nada mais, nada menos, que um conjunto de registros organizados. Desde a verso 3, o PHP possui um suporte muito slido ao MySQL. Hoje, na verso 5, existem trs formas de nos comunicarmos com um banco de dados MySQL. Existe a extenso MySQL clssica, que existe desde a verso 3, e existe tambm a extenso MySQL Improved (mysqli), adicionada na verso 5. E, claro, a extenso PDO (PHP Data Objects), tambm adicionada na verso 5. Neste curso, aprenderemos a trabalhar com a extenso clssica. No segundo curso da Formao PHP da 4Linux trabalharemos com o PDO.

6.3.1 Instalando o MySQL

A grande maioria das distribuies Linux possuem pacotes do MySQL em seus repositrios. Isso nos ajuda muito e torna a instalao do MySQL muito simples e rpida. Abra o shell, logue como root e use o gerenciador de pacotes para instalar o MySQL:

1 2 3

su apt - get update apt - get install mysql - server

Durante a instalao o MySQL ir pedir para voc denir uma senha padro para o usurio root no MySQL. Escolha uma senha ou coloque 123456.

Desenvolvimento Web com PHP

Pgina 117

4Linux www.4linux.com.br

Banco de Dados

6.3.2 Trabalhando com o MySQL


Podemos trabalhar com o MySQL atravs da linha de comando ou atravs de aplicativos grcos, que facilitam a administrao de bancos de dados. Mas, antes de conhecer as ferramentas grcas e suas vantagens, vamos ver como podemos trabalhar com o MySQL atravs do shell. Abra o shell e inicie o MySQL:

mysql -u root -p

O MySQL ir pedir a senha do usurio root. Por padro, essa senha denida por voc durante a instalao do MySQL. Uma vez dentro do shell do MySQL, podemos comear a interagir com o sistema gerenciador de banco de dados utilizando a linguagem SQL. Antes de trabalharmos em um banco de dados, precisamos selecionlo para uso. No mySQL, fazemos isso utilizando o comando USE:

USE nomedobanco ;

Desenvolvimento Web com PHP

Pgina 118

4Linux www.4linux.com.br

Banco de Dados

6.4 PostgreSQL

O PostgreSQL um poderoso sistema gerenciador de banco de dados objeto-relacional de cdigo aberto e 100% livre. O PostgreSQL considerado o banco de dados livre mais avanado do mundo por vrias razes. Suporta largamente os padres ANSI-SQL 92/99 e respeita a normativa ACID. altamente extensvel, tem vrios tipos de ndices para diversos tipos de aplicaes. Ele utilizado em larga escala por empresas como Skype, Caixa Econmica Federal e Datasus.

O PHP trabalha muito bem com o PostgreSQL e, assim como o MySQL, possui extenses nativas para trabalhar com ele. Existem duas formas de nos comunicarmos com um banco de dados PostgreSQL: a primeira, utilizando a extenso pgsql, e a segunda, utilizando o PDO. Neste curso vamos conhecer a extenso pgsql e como us-la para fazer nossas aplicaes interagirem com um banco de dados PostgreSQL.

6.4.1 Instalando o PostgreSQL

A grande maioria das distribuies Linux possuem pacotes do PostgreSQL em seus repositrios. Isso nos ajuda muito e torna a instalao do PostgreSQL muito simples e rpida. Abra o shell, logue como root e use o gerenciador de pacotes para instalar o PostgreSQL:

1 2 3

su apt - get update apt - get install postgresql

Desenvolvimento Web com PHP

Pgina 119

4Linux www.4linux.com.br

Banco de Dados

6.4.2 Trabalhando com o PostgreSQL


Podemos trabalhar com o PostgreSQL atravs da linha de comando ou atravs de aplicativos grcos, que facilitam a administrao de bancos de dados. Mas, antes de conhecer as ferramentas grcas e suas vantagens, vamos ver como podemos trabalhar com o PostgreSQL atravs do shell. Para trabalhar com o PostgreSQL, voc precisa estar logado como o superusurio postgres.

su - postgres

Agora voc pode abrir o cliente do PostgreSQL:

psql

Uma vez dentro do shell do PostgreSQL, podemos comear a interagir com o sistema gerenciador de banco de dados utilizando a linguagem SQL. Antes de trabalharmos em um banco de dados, precisamos selecion-lo para uso. No PostgreSQL, fazemos isso pela linha de comando passando um parmetro para o psql:

psql nomedobanco

Desenvolvimento Web com PHP

Pgina 120

4Linux www.4linux.com.br

Banco de Dados

6.5 SQLite
O SQLite um sistema gerenciador de banco de dados embutido escrito utilizando a linguagem de programao C. O SQLite distribudo como uma biblioteca que pode ser facilmente embarcada em sua aplicao, sem a necessidade de um processo ou o uso de um sistema gerenciador de banco de dados externo. Ele 100% livre e de cdigo aberto. O SQLite muito utilizado para armazenamento rpido e simples de informaes, j que ele muito leve e pode ser embutido em uma aplicao facilmente. Ele um pouco diferente de outros sistemas de banco de dados, j que ele possui tipagem dinmica. Uma coluna no SQLite no possui um tipo, j os valores sim. Isso signica que uma mesma coluna pode ter inteiros, doubles e string. O PHP possui uma extenso para se trabalhar com o SQLite. Essa extenso traz dentro de si o prprio SQLite, ento podemos dizer que como se o PHP tivesse um banco de dados embutido, sem precisarmos conectar ou instalar um sistema gerenciador de banco de dados como MySQL ou PostgreSQL.

Desenvolvimento Web com PHP

Pgina 121

4Linux www.4linux.com.br

Banco de Dados

6.6 SQL bsico


Vamos conhecer alguns comandos SQL bsicos para montarmos nosso primeiro banco de dados. Embora o padro SQL seja nico, diferentes sistemas gerenciadores de banco de dados implementam o padro de maneiras diferentes. Portanto, alguns comandos em MySQL so diferentes em PostgreSQL. Vamos mostrar aqui as principais diferenas. Note que a linguagem SQL muito fcil de compreender. Quando voc est fazendo uma declarao ou consulta, praticamente uma frase que voc est escrevendo. Justamente por isso, fcil se confundir entre informaes e comandos. Portanto, quando estiver escrevendo SQL, escreva comandos, clusulas e expresses sempre com letras maisculas, e informaes, minsculas.

6.6.1 Create
O comando CREATE permite que ns criemos uma srie de elementos comuns em um banco de dados. Com o comando create, podemos criar bancos de dados, tabelas, ndices, sequncias e muito mais. Vamos conhecer os casos mais comuns de uso do Create. Criar um banco de dados Podemos criar um banco de dados utilizando a seguinte declarao SQL:

CREATE DATABASE nomedobanco ;

Observe que declaraes SQL sempre devem ser terminadas com um ponto-evrgula. Criar uma tabela

Desenvolvimento Web com PHP

Pgina 122

4Linux www.4linux.com.br

Banco de Dados

Podemos criar uma tabela em nosso banco de dados utilizando a seguinte declarao SQL:

1 2 3 4 5 6

CREATE TABLE posts ( id INTEGER , titulo VARCHAR (255) , conteudo TEXT , PRIMARY KEY ( id ) );

Uma tabela como uma pasta, onde podemos guardar informaes separadas por colunas. Vamos criar uma tabela "posts", para guardar as informaes dos posts de nosso blog, como o seu ttulo e o contedo do post. Observe que, a cada linha, criamos colunas para nossa tabela. Colunas so como sees da pasta que criamos, que podem conter determinados tipos de informaes. Esses tipos de informaes foram especicados na prpria linha, onde dizemos depois do nome da coluna se ela VARCHAR ou TEXT. Logo veremos mais sobre isso. Observe tambm a linha PRIMARY KEY. Primary key signica chave primria e, do ponto de vista de bancos de dados relacionais, a chave que identica o registro em uma tabela. Cada registro nico e possui um valor. Esse valor a chave primria. Precisamos de uma coluna para nossas chaves primrias e estamos dizendo que a coluna id ser essa coluna. Criar uma sequncia Podemos criar uma sequncia para uma tabela de nosso banco de dados utilizando a seguinte declarao SQL:

CREATE SEQUENCE nome_da_sequencia ;

Desenvolvimento Web com PHP

Pgina 123

4Linux www.4linux.com.br

Banco de Dados

Sequncias so teis para colunas que devem ser automaticamente incrementadas ou decrementadas quando um registro for inserido na tabela. Criar um ndice Podemos criar um ndice em uma tabela de nosso banco de dados utilizando a seguinte declarao SQL:

CREATE INDEX nome_do_indice ON tabela ( coluna , outracoluna ) ;

ndices servem para melhorar a performance de nosso banco. Quando fazemos muitas consultas em algumas colunas, importante que seja criado um ndice nessas colunas.

6.6.2 Chaves estrangeiras


Alm de chaves primrias, nossas tabelas podem ter chaves estrangeiras. Chaves estrangeiras so chaves que esto diretamente relacionadas com outras chaves de outras tabelas no mesmo banco de dados. Por exemplo: um post e um usurio. Um post est diretamente relacionado ao seu autor, isto , usurio. Portanto, podemos criar uma chave estrangeira e relacionar a tabela de posts com usurios:

1 2 3 4 5 6 7 8 9 10

CREATE TABLE usuarios ( usuario_id INT NOT NULL AUTO_INCREMENT , usuario VARCHAR (255) NOT NULL , senha VARCHAR (4 ) NOT NULL , PRIMARY KEY ( usuario_id ) , INDEX ( usuario_id ) ) ENGINE = INNODB ; CREATE TABLE posts ( post_id INT NOT NULL AUTO_INCREMENT ,

Desenvolvimento Web com PHP

Pgina 124

4Linux www.4linux.com.br

Banco de Dados

11 12 13 14 15 16 17

autor INT NOT NULL , post VARCHAR (14 ) NOT NULL , PRIMARY KEY ( post_id ) , INDEX ( post_id ) , FOREIGN KEY autor ( autor ) REFERENCES usuarios ( usuario_id ) ON UPDATE CASCADE ON DELETE CASCADE ) ENGINE = INNODB ;

Observe a linha ON UPDATE CASCADE ON DELETE CASCADE. Esta linha determina o comportamento que ser adotado pelo banco de dados caso um registro desta tabela seja alterado ou removido. A opo CASCADE faz com que as relaes (de chave estrangeira) sejam automaticamente removidas, sem que haja uma interveno manual. Sem a opo cascade, no poderamos remover um post.

6.6.3 Alter

O comando ALTER permite que ns alteremos as caractersticas de um banco de dados ou tabela existente. Podemos alterar as colunas de uma tabela utilizando o alter da seguinte forma:

1 2 3 4

ALTER TABLE posts MODIFY titulo TEXT ; ALTER TABLE posts ADD autor VARCHAR (1 ALTER TABLE posts DROP conteudo ; ALTER TABLE posts ADD PRIMARY KEY ( id ) ; );

Na primeira linha estamos modicando o tipo da coluna titulo para TEXT. Na segunda, adicionamos uma nova coluna chamada autor. Na terceira, removemos a coluna conteudo. E, na ltima linha, adicionamos uma chave primria em nossa tabela na coluna id.

Desenvolvimento Web com PHP

Pgina 125

4Linux www.4linux.com.br

Banco de Dados

6.6.4 Drop

O comando DROP permite que ns deletemos bancos de dados e tabelas. Ele muito similar ao create, mas possui menos parmetros.

1 2 3

DROP TABLE posts ; DROP TABLE posts , usuarios , comentarios ; DROP DATABASE banco ;

6.6.5 Truncate

O comando TRUNCATE permite que ns esvaziemos uma tabela em nosso banco de dados. Isso ir remover todos os registros de uma tabela.

TRUNCATE TABLE posts ;

6.6.6 Insert

O comando INSERT permite a insero de registros em uma tabela. com ele que ns podemos comear a aprender mais sobre manipulao de dados em um banco de dados relacional. Para inserir informaes em uma tabela, podemos:

1 2

INSERT INTO posts ( titulo , conteudo ) VALUES ( Meu primeiro post , Este post muito legal , tri legal ! ) ; INSERT INTO posts ( titulo , conteudo ) VALUES ( O Gr mio ganhou ! , O tricolor ataca de novo ! ) ;

Desenvolvimento Web com PHP

Pgina 126

4Linux www.4linux.com.br

Banco de Dados

Observe que estamos especicando no s os valores que queremos inserir, mas onde queremos inseri-los. Especicamos que vamos inserir dados nas colunas titulo e conteudo, e logo depois com a clusula VALUES, especicamos que valores iro nestas colunas respectivamente.

6.6.7 Update
Podemos utilizar o comando UPDATE para atualizar registros em uma tabela. Para atualizar registros, podemos:

1 2

UPDATE posts SET titulo = Novo post WHERE titulo = Meu primeiro post ; UPDATE posts SET titulo = Novo post , conteudo = Novo conteudo WHERE id =1;

Usamos a clusula SET para especicar quais colunas recebero novos valores. Podemos especicar mais de uma coluna separando-as por vrgulas. Observe que temos uma clusula WHERE junto de nosso comando UPDATE. A clusula WHERE espera uma condio e serve como ltro. Caso os registros de nossa tabela batam com a condio especicada no WHERE, eles sero repassados para o comando que utilizamos, neste caso o UPDATE. comum utilizarmos a chave primria de um registro para fazer condies onde queremos encontrar um registro especco, mas podemos fazer condies com qualquer coluna da tabela. E no s condies de igualdade: Igual: = Diferente: != ou <> Menor que: <

Desenvolvimento Web com PHP

Pgina 127

4Linux www.4linux.com.br

Banco de Dados

Maior que: >

Menor ou igual: <=

Maior ou igual: >=

Alm disso, podemos ter mltiplas condies:

UPDATE posts SET titulo = Novo post WHERE categoria = 1 AND tag = futebol ;

Se executarmos o comando UPDATE sem WHERE, iremos alterar todos os registros da tabela. E tenho certeza que no isso que queremos, no ?

6.6.8 Delete

Podemos remover dados de nossas tabelas utilizando o comando DELETE. Assim como o UPDATE, o DELETE tambm pode ou no ter uma clusula WHERE, vejam:

1 2

DELETE FROM posts ; DELETE FROM posts WHERE id = 1;

Na primeira linha, vamos remover todos os registros da tabela posts. Na segunda, vamos remover apenas o registro com id igual a 1.

Desenvolvimento Web com PHP

Pgina 128

4Linux www.4linux.com.br

Banco de Dados

6.6.9 Select
Com certeza o comando SELECT o comando mais interessante de se trabalhar quando falamos de bancos de dados. ele que permite que ns faamos consultas em nosso banco. O comando SELECT muito verstil e permite que faamos consultas simples ou extremamente complexas, dependendo de como as informaes esto organizadas em nosso banco de dados. Para fazer uma simples consulta, fazemos:

1 2 3

SELECT * FROM posts ; SELECT titulo FROM posts ; SELECT titulo , conteudo FROM posts ;

O primeiro parmetro que o comando SELECT espera so as colunas que queremos ver. O segundo parmetro a tabela que queremos consultar. Quando no quisermos ver colunas especcas, mas sim, todas as colunas de uma tabela, podemos utilizar o asterisco. Tambm podemos ltrar e manipular nossa consulta de vrias maneiras. O primeiro exemplo utilizar o comando SELECT junto com a clusula WHERE:

1 2

SELECT * FROM posts WHERE categoria = 2; SELECT titulo , conteudo FROM posts WHERE categoria <> 2 AND tag = futebol ;

Organizando resultados Para organizar os resultados de nossa consulta por uma coluna, podemos:

1 2

SELECT * FROM posts ORDER BY id ; SELECT * FROM posts ORDER BY titulo DESC ;

Desenvolvimento Web com PHP

Pgina 129

4Linux www.4linux.com.br

Banco de Dados

Por padro, ser utilizada a ordem ascendente. Mas podemos, como na segunda linha do exemplo acima, organizar de forma descendente. Se organizarmos de forma descendente uma coluna que possui letras, no nmeros, a ordem ser Z-A no AZ. Limitando resultados Podemos tambm limitar o nmero de resultados de nossa consulta:

1 2

SELECT * FROM posts LIMIT

,1 ; ;

SELECT * FROM posts LIMIT 3 ,1

O primeiro nmero o incio e o segundo, o m. como se dissssemos para nosso banco de dados: faa a consulta e me traga os resultados de 30 a 100. Buscando informaes Podemos buscar informaes nos registros de nossas tabelas utilizando o comando SELECT em conjunto com a clusula WHERE e o operador LIKE. O LIKE permite que ns ltremos os resultados de nossa consulta com base no contedo de uma coluna:

1 2

SELECT * FROM posts WHERE titulo LIKE Meu carro ; SELECT * FROM posts WHERE titulo LIKE % futebol % ;

A primeira linha ir trazer todos os registros da tabela post que possuam exatamente a frase "Meu carro"na coluna titulo. J a segunda linha ir trazer todos os registros que possuam em qualquer parte da coluna titulo a palavra "futebol". Usamos o % para indicar um curinga, que pode representar qualquer letra, nmero ou palavra em nossa string.

Desenvolvimento Web com PHP

Pgina 130

4Linux www.4linux.com.br

Banco de Dados

6.6.10 Join
O comando join permite que, em uma consulta SQL, ns juntemos duas tabelas a partir de uma condio. Vamos supor que ns estamos querendo saber todos os posts que possuem uma categoria. Vamos executar a seguinte consulta:

SELECT * FROM posts , categorias WHERE posts . categoria = categorias . nome ;

Esta consulta ir retornar apenas os posts que possuem categorias, deixando de lado os posts que no possuem.

6.6.11 Left join


O comando left join um pouco diferente do join normal. Ao invs de combinar os resultados, o left join ir preservar os resultados da tabela que est esquerda do comando.

SELECT * FROM posts LEFT JOIN categorias ON posts . categoria = categorias . nome ;

Esta consulta ir retornar todos os posts, mesmo que eles no possuam uma categoria.

6.6.12 Right join


O comando right join muito similar ao left join, contudo, ele preservar os resultados da tabela que est direita do comando.

Desenvolvimento Web com PHP

Pgina 131

4Linux www.4linux.com.br

Banco de Dados

SELECT * FROM posts RIGHT JOIN categorias ON posts . categoria = categorias . nome ;

6.6.13 Inner join


O comando inner join um pouco diferente dos joins que j vimos. Ele permite que seja feita a unio de tabelas atravs das suas relaes com chaves estrangeiras, tambm conhecidas como foreign keys. Vamos supor que ns temos duas tabelas, uma de usurios e uma de seguidores. Algo como um mini-twitter. Nossa tabela de seguidores possui apenas duas colunas: o usurio (usuario_id) e quem ele segue (id_seguindo). Essas duas colunas fazem referncia chave primria da tabela de usurios (id_usuario). Precisamos de uma consulta que traga as informaes dos usurios que esto seguindo o usurio 1. Para isso:

SELECT * FROM usuarios INNER JOIN seguidores ON ( seguidores . id_seguindo = usuarios . usuario_id ) WHERE seguidores . id_usuario = 1

Desenvolvimento Web com PHP

Pgina 132

4Linux www.4linux.com.br

Banco de Dados

6.7 Tipos de dados


As colunas de uma tabela em um banco de dados podem ter diferentes tipos. importantssimo que durante a modelagem de nosso banco, faamos a escolha correta de tipos de dados, garantindo boa performance e alocao correta de memria. Tipos de dados CHAR(X): Uma string xa com 0 a 255 caracteres. VARCHAR(X): Uma string varivel com 0 a 255 caracteres. TINYTEXT: Uma string com tamanho mximo de 255 caracteres TEXT: Uma string de texto com tamanho mximo de 65535 caracteres BLOB: Uma string binria com tamanho mximo de 65535 caracteres MEDIUMTEXT: Uma string de texto com tamanho mximo de 16777215 caracteres MEDIUMBLOB: Uma string binria com tamanho mximo de 16777215 caracteres LONGTEXT: Uma string de texto com tamanho mximo de 4294967295 caracteres LONGBLOB: Uma string binria com tamanho mximo de 4294967295 caracteres

Desenvolvimento Web com PHP

Pgina 133

4Linux www.4linux.com.br

Banco de Dados

Tipos de nmeros TINYINT(X): Nmero inteiro de -128 a 127. 0 a 255 caso seja UNSIGNED. SMALLINT(X): Nmero inteiro de -32768 a 32767. 0 a 65535 caso seja UNSIGNED. MEDIUMINT(X): -8388608 a 8388607. 0 a 16777215 caso seja UNSIGNED. INT(X): -2147483648 a 2147483647. 0 a 4294967295 caso seja UNSIGNED. BIGINT(X): -9223372036854775808 a 9223372036854775807. 0 a 18446744073709551615 caso seja UNSIGNED. FLOAT: Um nmero decimal pequeno. DOUBLE: Um nmero decimal grande. Observe que X onde voc dene o tamanho do dado. UNSIGNED signica que o nmero inteiro s pode ser positivo.

Desenvolvimento Web com PHP

Pgina 134

4Linux www.4linux.com.br

Banco de Dados

Tipos de datas DATE: Guarda um valor de data no formato YYYY-MM-DD, 3 bytes DATETIME: Guarda um valor de data e horrio no formato YYYY-MM-DD HH:MM:SS, 8 bytes TIMESTAMP: Guarda um valor de data no formato YYYYMMDDHHMMSS, 4 bytes TIME: Guarda um valor de horrio no formato HH:MM:SS, 3 bytes Outros tipos ENUM (a, b, c): Signica enumerao e permite que voc especique uma lista de valores possveis para a coluna. De 1 a 65535. SET (a, b, c): Similar ao ENUM, exceto que mltiplos valores podem ser escolhidos. De 1 a 64.

Desenvolvimento Web com PHP

Pgina 135

4Linux www.4linux.com.br

Banco de Dados

6.8 Sequences e Auto Increment


Quando criamos nossa tabela, criamos uma coluna do tipo INT, no nula. Depois, denimos essa coluna como sendo a chave primria de nossa tabela. Chaves primrias precisam ser nicas, portanto, no interessante deixarmos o preenchimento dessa coluna a cargo do software ou do usurio. O banco que deveria controlar essa chave. Lembram das sequences que falamos anteriormente? Elas permitem que incrementemos ou decrementemos o valor de uma coluna quando um registro for inserido na tabela desta coluna. E isso exatamente o que queremos fazer quando estamos trabalhando com bancos de dados relacionais e chaves primrias. No PostgreSQL, criamos uma tabela e uma sequncia para que a chave primria seja incrementada toda vez que um registro for adicionado na tabela. Fazemos isso da seguinte forma:

1 2 3 4 5 6 7 8

CREATE SEQUENCE posts_id_seq ; CREATE TABLE posts ( id INTEGER DEFAULT NEXTVAL ( posts_id_seq ) , titulo VARCHAR (255) , conteudo TEXT , PRIMARY KEY ( id ) );

J no MySQL, no temos o conceito de sequences. Para incrementarmos uma chave primria automaticamente vamos utilizar o comando AUTO_INCREMENT. Quando o AUTO_INCREMENT associado a uma coluna, toda vez que inserirmos um novo registro, ela ser incrementada. Veja:

1 2

CREATE TABLE posts ( id INTEGER AUTO_INCREMENT ,

Desenvolvimento Web com PHP

Pgina 136

4Linux www.4linux.com.br

Banco de Dados

3 4 5 6

titulo VARCHAR (255) , conteudo TEXT , PRIMARY KEY ( id ) );

Desenvolvimento Web com PHP

Pgina 137

4Linux www.4linux.com.br

Banco de Dados

6.9 Funes do MySQL


Para fazer nossa aplicao em PHP conversar com um banco de dados MySQL, ns precisamos utilizar um conjunto de funes disponveis na extenso MySQL do PHP. Com essas funes, podemos conectar com um banco de dados, executar comandos e fazer consultas. Para podermos fazer uso dessas funes, precisamos instalar a extenso MySQL em nosso PHP, o que pode ser feito com uma simples instalao de pacote:

apt - get install php5 - mysql

6.9.1 Conexo

Antes de comearmos a interagir com o banco de dados, precisamos nos conectar com ele. Vamos utilizar a funo mysql_connect() para conectar no MySQL. Como estamos em um ambiente de desenvolvimento, o Apache, o PHP e o MySQL esto rodando na mesma mquina. Ento, basta conectarmos com o endereo de loopback, 127.0.0.1 ou localhost, ao invs de um servidor externo.

1 2

mysql_connect ( " localhost " , " root " , " 123456 " ) ; mysql_select_db ( " nomedobanco " ) ;

A funo mysql_connect() espera trs parmetros: o hostname do servidor onde est o MySQL, o usurio do MySQL e sua senha. Alm de conectarmos, observe que na segunda linha estamos utilizando a funo mysql_select_db(). Essa funo seleciona um banco de dados no MySQL para trabalharmos. Ela age como o USE que vimos anteriormente.

Desenvolvimento Web com PHP

Pgina 138

4Linux www.4linux.com.br

Banco de Dados

6.9.2 Inserindo registros


A m de interagirmos com nosso banco de dados, precisamos de uma funo que nos permita executar declaraes e consultas SQL. Essa funo a mysql_query(). Com esta funo, podemos executar INSERTs, UPDATEs e outros comandos SQL. Para inserirmos um registro, sabemos que precisamos utilizar o comando INSERT. Mas vamos ver como isso funciona no PHP:

1 2 3 4 5 6 7

mysql_connect ( " localhost " , " root " , " 123456 " ) ; mysql_select_db ( " blog " ) ; $titulo = " Meu primeiro post " ; $conteudo = " Meu post tri legal no meu blog ! " mysql_query ( " INSERT INTO posts ( titulo , conteudo ) VALUES ( $titulo , $conteudo ) " ) ;

Observe que, alm de executar um INSERT, estamos manipulando a string passada para a funo mysql_query(), criando uma query dinmica com as valores das variveis que criamos logo acima. Note tambm que no precisamos terminar nossa declarao com ponto-e-vrgula.

6.9.3 Atualizando registros


Para atualizarmos um registro, sabemos que precisamos utilizar o comando UPDATE, portanto:

1 2

mysql_connect ( " localhost " , " root " , " 123456 " ) ; mysql_select_db ( " blog " ) ;

Desenvolvimento Web com PHP

Pgina 139

4Linux www.4linux.com.br

Banco de Dados

3 4 5 6 7

$id = 1; $titulo = " Meu novo post " ; mysql_query ( " UPDATE posts SET titulo = $titulo WHERE id = $id " ) ;

6.9.4 Deletando registros

Para removermos um registro, sabemos que precisamos utilizar o comando DELETE, portanto:

1 2 3 4 5 6

mysql_connect ( " localhost " , " root " , " 123456 " ) ; mysql_select_db ( " blog " ) ; $id = 5; mysql_query ( " DELETE FROM posts WHERE id = $id " ) ;

6.9.5 Apresentando registros

Para fazer uma consulta em uma tabela, sabemos que precisamos utilizar o comando SELECT, portanto:

1 2 3 4

mysql_connect ( " localhost " , " root " , " 123456 " ) ; mysql_select_db ( " blog " ) ; mysql_query ( " SELECT * FROM posts " ) ;

Desenvolvimento Web com PHP

Pgina 140

4Linux www.4linux.com.br

Banco de Dados

Mas e agora? Fizemos a consulta, mas como podemos ver os resultados dela? A funo mysql_fetch_array() permite que ns vejamos os resultados de uma consulta SQL como se fosse um array, onde as colunas so as chaves de nosso array e os valores das colunas, valores do array.

1 2 3 4 5 6 7 8

mysql_connect ( " localhost " , " root " , " 123456 " ) ; mysql_select_db ( " blog " ) ; $query = mysql_query ( " SELECT * FROM posts " ) ; while ( $item = mysql_fetch_array ( $query ) ) { echo $item [ titulo ]; }

Observe que colocamos a funo mysql_fetch_array() em um while. Fazemos isto porque nossa consulta trouxe mais de um resultado, portanto, estamos trabalhando com mais de um registro. O while se encarrega de executar o bloco de cdigo contido nele enquanto houverem registros a serem exibidos da nossa consulta. O bloco de cdigo dentro do while simplesmente traz o valor contido na coluna titulo no registro atual. Listaremos, assim, todos os registros da tabela. Note tambm que associamos uma varivel ao retorno da funo mysql_query() e passamos essa varivel como parmetro para a mysql_fetch_array(), que precisa saber com qual consulta ela vai trabalhar.

Desenvolvimento Web com PHP

Pgina 141

4Linux www.4linux.com.br

Banco de Dados

6.10 Funes do PostgreSQL


Para fazer nossa aplicao em PHP conversar com um banco de dados PostgreSQL, ns precisamos utilizar um conjunto de funes disponveis na extenso PostgreSQL do PHP. Com essas funes, podemos conectar com um banco de dados, executar comandos e fazer consultas. Para podermos fazer uso dessas funes, precisamos instalar a extenso PostgreSQL em nosso PHP, o que pode ser feito com uma simples instalao de pacote:

apt - get install php5 - pgsql

6.10.1 Conexo

Antes de comearmos a interagir com o banco de dados, precisamos nos conectar com ele. Vamos utilizar a funo pg_connect() para conectar no PostgreSQL. Como estamos em um ambiente de desenvolvimento, o Apache, o PHP e o PostgreSQL esto rodando na mesma mquina. Ento, basta conectarmos com o endereo de loopback, 127.0.0.1 ou localhost, ao invs de um servidor externo.

pg_connect ( " host = localhost port =5432 dbname = blog user = root password =123456 " ) ;

A funo pg_connect() espera apenas um parmetro, mas este parmetro pode possuir sub-parmetros separados por espao. Observe que na verdade estamos passando cinco parmetros: o hostname do servidor que vamos conectar, a porta do servidor, o nome do banco, o usurio e sua senha.

Desenvolvimento Web com PHP

Pgina 142

4Linux www.4linux.com.br

Banco de Dados

6.10.2 Inserindo registros


A m de interagirmos com nosso banco de dados, precisamos de uma funo que nos permita executar declaraes e consultas SQL. Essa funo a pg_query(). Com esta funo, podemos executar INSERTs, UPDATEs e outros comandos SQL. Para inserirmos um registro, sabemos que precisamos utilizar o comando INSERT. Mas vamos ver como isso funciona no PHP:

1 2 3 4 5 6

pg_connect ( " host = localhost port =5432 dbname = blog user = root password =123456 " ) ; $titulo = " Meu primeiro post " ; $conteudo = " Meu post tri legal no meu blog ! " pg_query ( " INSERT INTO posts ( titulo , conteudo ) VALUES ( $titulo , $conteudo ) " ) ;

Observe que, alm de executar um INSERT, estamos manipulando a string passada para a funo pg_query(), criando uma query dinmica com as valores das variveis que criamos logo acima. Note tambm que no precisamos terminar nossa declarao com ponto-e-vrgula.

6.10.3 Atualizando registros


Para atualizarmos um registro, sabemos que precisamos utilizar o comando UPDATE, portanto:

pg_connect ( " host = localhost port =5432 dbname = blog user = root password =123456 " ) ;

Desenvolvimento Web com PHP

Pgina 143

4Linux www.4linux.com.br

Banco de Dados

2 3 4 5 6

$id = 1; $titulo = " Meu novo post " ; pg_query ( " UPDATE posts SET titulo = $titulo WHERE id = $id " ) ;

6.10.4 Deletando registros

Para removermos um registro, sabemos que precisamos utilizar o comando DELETE, portanto:

1 2 3 4 5

pg_connect ( " host = localhost port =5432 dbname = blog user = root password =123456 " ) ; $id = 5; pg_query ( " DELETE FROM posts WHERE id = $id " ) ;

6.10.5 Apresentando registros

Para fazer uma consulta em uma tabela, sabemos que precisamos utilizar o comando SELECT, portanto:

1 2 3

pg_connect ( " host = localhost port =5432 dbname = blog user = root password =123456 " ) ; pg_query ( " SELECT * FROM posts " ) ;

Desenvolvimento Web com PHP

Pgina 144

4Linux www.4linux.com.br

Banco de Dados

Mas e agora? Fizemos a consulta, mas como podemos ver os resultados dela? A funo pg_fetch_all() permite que ns vejamos os resultados de uma consulta SQL como se fosse um array, onde as colunas so as chaves de nosso array e os valores das colunas, valores do array.

1 2 3 4 5 6 7 8 9

pg_connect ( " host = localhost port =5432 dbname = blog user = root password =123456 " ) ; $query = pg_query ( " SELECT * FROM posts " ) ; $itens = pg_fetch_all ( $query ) ; foreach ( $itens as $item ) { echo $item [ titulo ]; }

A funo pg_fetch_all() retorna um array multidimensional todos todos os registros trazidos pela nossa consulta. Sendo assim, podemos usar um simples foreach para iterar entre os resultados e mostrar as informaes que queremos, no caso, o valor da coluna titulo. Note tambm que associamos uma varivel ao retorno da funo pg_query() e passamos essa varivel como parmetro para a pg_fetch_all(), que precisa saber com qual consulta ela vai trabalhar.

Desenvolvimento Web com PHP

Pgina 145

4Linux www.4linux.com.br

Banco de Dados

6.11 Funes do SQLite


Para fazer nossa aplicao em PHP conversar com um banco de dados SQLite, ns precisamos utilizar um conjunto de funes disponveis na extenso SQLite do PHP. Com essas funes, podemos abrir um banco de dados, executar comandos e fazer consultas. Para podermos fazer uso dessas funes, precisamos instalar a extenso SQLite em nosso PHP, o que pode ser feito com uma simples instalao de pacote:

apt - get install php5 - sqlite

6.11.1 Conexo
Antes de comearmos a interagir com o banco de dados, precisamos nos conectar com ele. Contudo, o SQLite funciona de maneira um tanto diferente se comparado com o MySQL e o PostgreSQL. Quando voc instalou a extenso do SQLite, voc embutiu o SQLite no PHP. Isso signica que no necessria uma abertura de conexo ou qualquer coisa, basta abrir um arquivo. Isso mesmo, o SQLite guarda as informaes em um arquivo. Este arquivo, criado pelo SQLite, o seu banco de dados. Ele pode estar na pasta da sua aplicao ou em qualquer outro parte do sistema. Para usarmos o banco, mas abrir o arquivo. Caso o arquivo no exista, isto , o banco no exista, ele ser criado automaticamente.

$banco = sqlite_open ( meubanco ) ;

Observe que estamos associando o retorno da funo sqlite_open() a uma varivel. Isto necessrio porque outras funes de interao com o banco SQLite precisam

Desenvolvimento Web com PHP

Pgina 146

4Linux www.4linux.com.br

Banco de Dados

saber com qualquer banco elas precisam interagir.

6.11.2 Inserindo registros


A m de interagirmos com nosso banco de dados, precisamos de uma funo que nos permita executar declaraes e consultas SQL. Essa funo a sqlite_query(). Com esta funo, podemos executar INSERTs, UPDATEs e outros comandos SQL. Para inserirmos um registro, sabemos que precisamos utilizar o comando INSERT. Mas vamos ver como isso funciona no PHP:

1 2 3 4 5 6

$banco = sqlite_open ( meubanco ) ; $titulo = " Meu primeiro post " ; $conteudo = " Meu post tri legal no meu blog ! " sqlite_query ( $banco , " INSERT INTO posts ( titulo , conteudo ) VALUES ( $titulo , $conteudo ) " ) ;

Observe que, alm de executar um INSERT, estamos manipulando a string passada para a funo sqlite_query(), criando uma query dinmica com as valores das variveis que criamos logo acima. Note tambm que no precisamos terminar nossa declarao com ponto-e-vrgula.

6.11.3 Atualizando registros


Para atualizarmos um registro, sabemos que precisamos utilizar o comando UPDATE, portanto:

Desenvolvimento Web com PHP

Pgina 147

4Linux www.4linux.com.br

Banco de Dados

1 2 3 4 5 6

$banco = sqlite_open ( meubanco ) ; $id = 1; $titulo = " Meu novo post " ; sqlite_query ( $banco , " UPDATE posts SET titulo = $titulo WHERE id = $id " ) ;

6.11.4 Deletando registros

Para removermos um registro, sabemos que precisamos utilizar o comando DELETE, portanto:

1 2 3 4 5

$banco = sqlite_open ( meubanco ) ; $id = 5; sqlite_query ( $banco , " DELETE FROM posts WHERE id = $id " ) ;

6.11.5 Apresentando registros

Para fazer uma consulta em uma tabela, sabemos que precisamos utilizar o comando SELECT, portanto:

1 2 3

$banco = sqlite_open ( meubanco ) ; sqlite_query ( $banco , " SELECT * FROM posts " ) ;

Desenvolvimento Web com PHP

Pgina 148

4Linux www.4linux.com.br

Banco de Dados

Mas e agora? Fizemos a consulta, mas como podemos ver os resultados dela? A funo sqlite_fetch_all() permite que ns vejamos os resultados de uma consulta SQL como se fosse um array, onde as colunas so as chaves de nosso array e os valores das colunas, valores do array.

1 2 3 4 5 6 7 8 9

$banco = sqlite_open ( meubanco ) ; $query = sqlite_query ( $banco , " SELECT * FROM posts " ) ; $itens = sqlite_fetch_all ( $query ) ; foreach ( $itens as $item ) { echo $item [ titulo ]; }

A funo sqlite_fetch_all() retorna um array multidimensional todos todos os registros trazidos pela nossa consulta. Sendo assim, podemos usar um simples foreach para iterar entre os resultados e mostrar as informaes que queremos, no caso, o valor da coluna titulo. Note tambm que associamos uma varivel ao retorno da funo sqlite_query() e passamos essa varivel como parmetro para a sqlite_fetch_all(), que precisa saber com qual consulta ela vai trabalhar.

Desenvolvimento Web com PHP

Pgina 149

Você também pode gostar