Академический Документы
Профессиональный Документы
Культура Документы
www.4linux.com.br
Captulo 1 Introduo
4Linux www.4linux.com.br
Introduo
Pgina 2
4Linux www.4linux.com.br
Introduo
Pgina 3
4Linux www.4linux.com.br
Introduo
Pgina 4
4Linux www.4linux.com.br
Introduo
Pgina 5
4Linux www.4linux.com.br
Servidor Web
Pgina 7
4Linux www.4linux.com.br
Servidor Web
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 >
1 2 3 4 5 6
<html > <head > < title > Teste </ title > </ head > <body > <p > Hoje dia <? php echo date ( d / m /Y ) ; ? > </p >
Pgina 8
4Linux www.4linux.com.br
Servidor Web
7 8
Pgina 9
4Linux www.4linux.com.br
Servidor Web
Pronto, nosso servidor web est instalado. Para termos certeza que ele est funcionando, vamos entrar em nosso endereo web local:
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.
Pgina 10
4Linux www.4linux.com.br
Servidor Web
Para que o apache possa comear a intepretar nossas pginas PHP, precisamos reinici-lo. Vamos fazer isso rodando o seguinte comando:
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
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!
Pgina 11
Captulo 3 PHP
4Linux www.4linux.com.br
PHP
1 2
1 2
<? ?>
1 2
<% %>
< script language = " php " > </ script >
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
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
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
Pgina 15
4Linux www.4linux.com.br
PHP
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
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
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
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
Pgina 18
4Linux www.4linux.com.br
PHP
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:
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:
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.
Pgina 21
4Linux www.4linux.com.br
PHP
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)
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
Pgina 22
4Linux www.4linux.com.br
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
Pgina 24
4Linux www.4linux.com.br
PHP
1 2 3 4
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
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:
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
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
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
Pgina 28
4Linux www.4linux.com.br
PHP
4 5 6
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 ;
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.
Pgina 30
4Linux www.4linux.com.br
PHP
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
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 :
Pgina 32
4Linux www.4linux.com.br
PHP
17 18 19 20 21 22 23
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 ;
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
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
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.
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.
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.
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
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
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.
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"
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 ,
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 / > " ;
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)
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 / > " ; } }
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 ) ;
1 2 3 4
Pgina 43
4Linux www.4linux.com.br
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 () ;
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 " ;
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
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 " ;
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 ;
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.
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:
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 () ;
Pgina 50
4Linux www.4linux.com.br
Funes Nativas
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
1 2 3 4 5 6
<? php $variavel = ; if ( isset ( $variavel ) ) { echo "A vari vel existe !!! " ; }
Pgina 52
4Linux www.4linux.com.br
Funes Nativas
1 2 3 4
<? php $vetor = array ( Isto , , um array ) ; echo is_array ( $vetor ) ? Sim , isto um array . : N o um array ;
1 2 3 4 5 6
<? php $variavel1 = false ; if ( is_bool ( $a ) ) { echo A vari vel $a um valor booleano ; }
1 2
<? 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.
1 2 3 4 5 6 7
<? php $variavel = 13.33; if ( is_float ( $variavel ) ) { echo " float !\ n " ; } else { echo "N o float !\ n " ; }
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 " ; }
1 2 3 4 5 6 7 8
<? php $variavel = NULL ; if ( is_int ( $variavel ) ) { echo " nulo !\ n " ; } else { echo "N o nulo !\ n " ; }
1 2 3
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 " ; }
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 ) ) ;
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 () ) ; }
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 ) ;
<? 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.
1 2 3
Sada: variavel is now "1"(string) Veja ento que a varivel que antes era booleana, foi convertida para seu correspondente em string, "1".
Pgina 58
4Linux www.4linux.com.br
Funes Nativas
1 2 3
<? php $variavel = " teste " ; echo Esta vari vel do tipo . gettype ( $variavel ) ;
1 2 3 4 5
<? php set ( $variavel ) ; echo " Vari vel criada " ; unset ( $variavel ) ; echo " Vari vel deletada " ;
1 2 3
<? php $a = array (1 , 2 , array ( " a " , " b " , " c " ) ) ; var_dump ( $a ) ;
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 " } }
1 2 3 4
<? php $vetor = array (1 , 2 , array ( " a " , " b " , " c " ) ) ; var_export ( $vetor ) ; ?>
1 2 3 4 5
Pgina 60
4Linux www.4linux.com.br
Funes Nativas
6 7 8 9 10
Pgina 61
4Linux www.4linux.com.br
Funes Nativas
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 ) ;
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 ;
1 2 3 4 5
<? php $formato = O artilheiro do brasileir o , %s , tem % d gols . ; $string = vsprintf ( $formato , array ( Jonas , 19 ) ) ; echo $string ;
1 2
<? 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 ;
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.
1 2
<? php $string = " <a href = http :// www .4 linux . com . br > 4 linux </a > " ;
Pgina 65
4Linux www.4linux.com.br
Funes Nativas
Observe que para vericar se a sada est correta voc precisa ver o cdigo fonte da pgina!
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!
1 2 3 4 5 6
<? php $string = " \ t \ tTenha um bom dia !!! echo $string ; $trimmed = trim ( $string ) ; :) " ;
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
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 !
1 2 3 4 5 6
<? php $string = hello world ! ; echo ucwords ( $string ) ; // Sa da Hello World !
1 2 3 4 5
Pgina 68
4Linux www.4linux.com.br
Funes Nativas
// Sa da hello World !
1 2 3
Observe que para vericar se a sada est correta voc precisa ver o cdigo fonte da pgina!
1 2 3 4 5 6 7
<? php $string = " Oi , tudo bem ? " ; $string1 = str_split ( $string ) ; print_r ( $string1 ) ; ?>
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] = > ? )
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 ? )
Esta uma funo simples, que repete a string de acordo com o valor indicado.
1 2 3 4 5
Pgina 70
4Linux www.4linux.com.br
Funes Nativas
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 ?> , "@");
1 2
<? php
Pgina 71
4Linux www.4linux.com.br
Funes Nativas
3 4 5
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
Pgina 72
4Linux www.4linux.com.br
Funes Nativas
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
1 2 3 4 5 6
Pgina 73
4Linux www.4linux.com.br
Funes Nativas
1 2 3 4 5
1 2 3 4 5 6
<? php $string = May the source be with you ! ; echo strlen ( $string ) ; // Sa da : 28
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 {
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
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
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
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 {
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.
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 " ; }
Pgina 78
4Linux www.4linux.com.br
Funes Nativas
14
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.
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) ;
1 2 3 4 5 6
<? php $string = substr ( " 123456789 " , 1 , -4) ; echo $string ; // Sa da : 12345
Pgina 79
4Linux www.4linux.com.br
Funes Nativas
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 .
1 2
<? 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 !
1 2 3 4 5 6
<? php $string = " Luke , eu sou seu pai ! " ; echo strtolower ( $string ) ; // Sa da : Luke , eu sou seu pai !
Pgina 81
4Linux www.4linux.com.br
Funes Nativas
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 )
1 2 3 4
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 " ) ) ;
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 )
Pgina 84
4Linux www.4linux.com.br
Funes Nativas
1 2 3 4
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 )
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.
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
[3] = > tr s
Pgina 86
4Linux www.4linux.com.br
Funes Nativas
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 ) ;
1 2 3 4
1 2 3 4
<? php $vetor1 = array ( " cor " = > " vermelho " , 2 , 4) ; $vetor2 = array ( " a " , " b " , " cor " = > " verde " , " forma " = > " trapezoide " , 4) ;
Pgina 87
4Linux www.4linux.com.br
Funes Nativas
5 6
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.
1 2 3 4
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.
1 2 3 4 5 6
<? php $vetor = array ( " a " = > print_r ( $vetor ) ; , " b " = > 1 , " c " = > 2) ;
1 2 3 4 5 6
Pgina 89
4Linux www.4linux.com.br
Funes Nativas
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
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 ! " ; }
Pgina 90
4Linux www.4linux.com.br
Funes Nativas
1 2 3 4 5
<? php $vetor = array ( echo $chave ; = > a , 1 = > b , 2 = > c , 3 = > d ) ;
Sada: 3
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
Pgina 91
4Linux www.4linux.com.br
Funes Nativas
4 5 6 7
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")
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:
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 )
1 2 3 4
<? php $vetor = array (1 , 2 , 3 , 4) ; echo "A soma dos valores = " . array_sum ( $vetor ) ;
Sada: 11
1 2 3
<? php $vetor = array (1 = > " verde " , 2 = > " vermelho " , 3 = > " verde " , 4 = > " azul " , 5 = > " vermelho " ) ;
Pgina 93
4Linux www.4linux.com.br
Funes Nativas
4 5
1 2 3 4 5 6 7
Array ( [1] = > verde [2] = > vermelho [4] = > azul )
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 ) ;
Pgina 94
4Linux www.4linux.com.br
Funes Nativas
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 " ; }
1 2 3 4 5
<? php $vetor = array ( " um " , " dois " , " tr s " , " quatro " ) ; $resultado = count ( $vetor ) ; echo $resultado ;
Sada: 4
Pgina 95
4Linux www.4linux.com.br
Funes Nativas
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.
Pgina 96
4Linux www.4linux.com.br
Funes Nativas
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.
1 2 3 4
Pgina 97
4Linux www.4linux.com.br
Funes Nativas
1 2 3 4
Tambm possvel utilizar a funo sha1_le() para criar um hash de um arquivo utilizando o algoritmo sha1.
1 2 3 4
Pgina 98
4Linux www.4linux.com.br
Funcionalidades Web
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.
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.
Pgina 102
4Linux www.4linux.com.br
Funcionalidades Web
Pgina 103
4Linux www.4linux.com.br
Funcionalidades Web
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
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
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 " ) ;
Pgina 105
4Linux www.4linux.com.br
Funcionalidades Web
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.
Pgina 106
4Linux www.4linux.com.br
Funcionalidades Web
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
Pgina 107
4Linux www.4linux.com.br
Funcionalidades Web
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
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 ];
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.
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 () ;
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
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
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.
Pgina 113
4Linux www.4linux.com.br
Banco de Dados
Pgina 115
4Linux www.4linux.com.br
Banco de Dados
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.
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
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.
Pgina 117
4Linux www.4linux.com.br
Banco de Dados
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 ;
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.
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
Pgina 119
4Linux www.4linux.com.br
Banco de Dados
su - postgres
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
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.
Pgina 121
4Linux www.4linux.com.br
Banco de Dados
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:
Observe que declaraes SQL sempre devem ser terminadas com um ponto-evrgula. Criar uma tabela
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:
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:
ndices servem para melhorar a performance de nosso banco. Quando fazemos muitas consultas em algumas colunas, importante que seja criado um ndice nessas colunas.
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 ,
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.
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.
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 ! ) ;
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: <
Pgina 127
4Linux www.4linux.com.br
Banco de Dados
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
Na primeira linha, vamos remover todos os registros da tabela posts. Na segunda, vamos remover apenas o registro com id igual a 1.
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 ;
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
,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.
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:
Esta consulta ir retornar apenas os posts que possuem categorias, deixando de lado os posts que no possuem.
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.
Pgina 131
4Linux www.4linux.com.br
Banco de Dados
SELECT * FROM posts RIGHT JOIN categorias ON posts . categoria = categorias . nome ;
SELECT * FROM usuarios INNER JOIN seguidores ON ( seguidores . id_seguindo = usuarios . usuario_id ) WHERE seguidores . id_usuario = 1
Pgina 132
4Linux www.4linux.com.br
Banco de Dados
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.
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.
Pgina 135
4Linux www.4linux.com.br
Banco de Dados
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
Pgina 136
4Linux www.4linux.com.br
Banco de Dados
3 4 5 6
Pgina 137
4Linux www.4linux.com.br
Banco de Dados
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.
Pgina 138
4Linux www.4linux.com.br
Banco de Dados
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.
1 2
mysql_connect ( " localhost " , " root " , " 123456 " ) ; mysql_select_db ( " blog " ) ;
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 " ) ;
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 " ) ;
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 " ) ;
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.
Pgina 141
4Linux www.4linux.com.br
Banco de Dados
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.
Pgina 142
4Linux www.4linux.com.br
Banco de Dados
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.
pg_connect ( " host = localhost port =5432 dbname = blog user = root password =123456 " ) ;
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 " ) ;
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 " ) ;
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 " ) ;
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.
Pgina 145
4Linux www.4linux.com.br
Banco de Dados
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.
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
Pgina 146
4Linux www.4linux.com.br
Banco de Dados
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.
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 " ) ;
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 " ) ;
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 " ) ;
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.
Pgina 149