apostila completa de php linux

150
500 Desenvolvimento Web com PHP www.4linux.com.br

Upload: gaston-navarre

Post on 21-Jan-2016

102 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Apostila Completa de PHP Linux

500

Desenvolvimento Web com PHP

www.4linux.com.br

Page 2: Apostila Completa de PHP Linux

Capítulo 1

Introdução

Page 3: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Introdução

1.1 Sobre o curso

Neste curso iremos aprender o que é o PHP, entender como a linguagem funcionae conhecê-la a fundo. O curso é recomendado para qualquer um interessado emcomeçar a desenvolver aplicações para a web. Se você já possui experiência comalguma outra linguagem de programação, você entenderá os conceitos apresenta-dos aqui rapidamente, mas o curso e a apostila irão assumir que você não possuinenhuma experiência com desenvolvimento de software.

O curso Desenvolvimento Web com PHP (500) é o primeiro curso da Formação PHPda 4Linux. Este curso de PHP foi desenvolvido para apresentar o poder do PHPa quem teve algum contato com a linguagem ou programadores PHP que desejamaprimorar seus conhecimentos e se atualizar. Ao longo do curso de PHP da 4Linuxserão desenvolvidos dois projetos: um microblog (similar ao Twitter) e um sistema deblog (similar ao Wordpress), conhecendo a fundo e aplicando as funcionalidades dalinguagem PHP.

Além de preparar o aluno para o mercado de trabalho, as aulas são estruturadas deforma que durante todo curso o aluno receba dicas e macetes relacionadas a parte doconteúdo para a Certificação Zend PHP 5.3. Com os três cursos da Formação PHPda 4Linux o aluno tem 100% do conteúdo necessário para a prova da CertificaçãoZend. PHP 5.3.

Durante as aulas o instrutor apresentará conceitos e através de exercícios práticosfixará o conteúdo. Ao final deste curso o aluno estará pronto para criar aplicaçõesweb com a linguagem de programação PHP, utilizando os principais bancos de dadosopen source como MySQL, PostgreSQL e SQLite, além de conhecer e poder decidirqual a melhor ferramenta para o trabalho certo.

Desenvolvimento Web com PHP Página 2

Page 4: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Introdução

1.2 Sobre a 4Linux

Há mais de 10 anos a 4Linux oferece cursos, soluções e serviços de T.I. baseados emsoftwares livres e padrões abertos para ambientes de missão crítica. Já treinou maisde 40.000 alunos e possui a maior oferta mundial de cursos baseados em softwareslivres (mais de 50 cursos) nas modalidades presenciais e e-learning (à distância pelainternet).

Desde 2006 presta suporte a softwares livres em ambientes de missão crítica paraa Caixa Econômica Federal, um dos principais cases mundiais de uso de padrõesabertos: atualmente quando um cidadão faz uma aposta nas loterias, saca um di-nheiro em um ATM (caixa eletrônico), recebe um SMS com o saldo de seu FGTS ousimula o valor de um financiamento imobiliário no ’feirão’ da casa própria, ele estáusando uma infraestrutura baseada em softwares livres com serviços prestados pela4Linux.

Além da Caixa a 4Linux realizou algumas das mais conhecidas implementações desoftware livre do Brasil, entre eles: Metrô de São Paulo, Casa da Moeda do Brasil,Ceagesp e Projeto CDTC (Centro de Difusão de Tecnologia e Conhecimento) – umaparceria entre a IBM e o ITI – que envolveu, entre outras ações, a maior capacitaçãoem Linux do Brasil: 785 educadores do MEC foram treinados em Linux pela 4Linux.Conheça nossos cases e clientes.

Idealizadora do HackerTeen – projeto de edutainment (entretenimento educacional)para jovens da geração internet sobre segurança da computação, empreendedo-rismo na Internet e ética hacker – que, com uma metodologia inovadora, foi avaliadocomo “primeiro e único no mundo” pela Harvard Business School.

Desenvolvimento Web com PHP Página 3

Page 5: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Introdução

1.3 Aula Zero

O foco principal do PHP como linguagem é a web, portanto, é necessário que vocêtenha um conhecimento sobre outras tecnologias para a web, como HTML e CSS.Além disso, para facilitar seu aprendizado, ter boas noções de lógica de programaçãoé ideal. Para suprir essa necessidade a 4Linux preparou o Aula Zero, um conteúdo di-gital exclusivo com tudo que você precisa saber sobre lógica de programação, HTMLe CSS.

Desenvolvimento Web com PHP Página 4

Page 6: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Introdução

1.4 A linguagem PHP

Sem mais delongas, bem-vindo ao mundo do PHP, a 5º linguagem de programaçãomais utilizada no mundo segundo o TIOBE e a mais popular no desenvolvimento deaplicações para web. Segundo o Netcraft, mais de 30 milhões de servidores webpossuem o PHP instalado. Se formos pensar em grandes casos de uso, podemoscitar os gigantes Yahoo, Wikipedia, Facebook, Flickr, Digg, entre outros. Com o lan-çamento da versão 5.3, o PHP nunca esteve mais pronto para o desenvolvimentosério e robusto de aplicações, contando com um suporte sólido e moderno ao para-digma de programação orientada a objetos e inúmeras extensões disponíveis paradiversas tecnologias.

O PHP surgiu em meados de 1994, criado por Rasmus Lerdorf como um pacotede programas CGI. Em 1997, dois desenvolvedores israelitas, Zeev Suraski e AndiGutmans, entraram no projeto e reescreveram grande parte do código do PHP. Juntocom Rasmus, lançaram a versão 3.0 do PHP em junho de 2008. Para a próximaversão, Zeev e Andi decidiram reescrever o core do projeto do zero, chamando-o deZend Engine. Esta nova versão, PHP 4, foi lançada em maio de 2000, contando comfuncionalidades novas como gerenciamento de sessão, buffer de saída e suportea vários servidores web. Infelizmente, a versão 4 ainda sofria com uma péssimaimplementação do paradigma de programação orientada a objetos, então em julho de2004, foi lançada a versão 5 do PHP, que trouxe várias novidades para a linguageme um jeito completamente novo de programar PHP.

Desenvolvimento Web com PHP Página 5

Page 7: Apostila Completa de PHP Linux

Capítulo 2

Servidor Web

Page 8: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Servidor Web

2.1 Como funciona um servidor web

Um servidor web é um programa de computador, responsável por receber requisi-ções do protocolo HTTP, tomar ações com base nessas requisições e enviar respos-tas também no protocolo HTTP. Por exemplo, quando digitamos uma URL em nossobrowser, estamos pedindo um arquivo que está em algum computador com um ser-vidor web instalado. Este computador pode estar localizado na casa ao lado ou emum gigantesco datacenter.

O servidor web irá interpretar seu pedido, localizar a página no sistema de arquivosda máquina e entregar o conteúdo da página para seu navegador, que irá intepretaro código HTML da página e mostrá-lo para você. No caso de arquivos de música,vídeo, etc, o navegador vai oferecer o download ao invés de mostrar o conteúdo.

Desenvolvimento Web com PHP Página 7

Page 9: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Servidor Web

2.2 Como funciona o PHP

Quando uma página é requisitada ao nosso servidor web, ele irá procurar pela pá-gina requisitada no sistema de arquivos, e caso ele encontre, o conteúdo desta pá-gina será exibido. Se esta página possuir hipertexto (HTML), vocês já sabem o queacontece: teremos uma página web sendo exibida. O PHP funciona como uma etapaextra.

Caso uma página PHP seja requisitada, o servidor web irá procurar pela página nosistema de arquivos e, caso exista algum código PHP dentro desta, ele irá chamaro PHP, que interpretará o código e retornará os dados. A sigla PHP é um acrônimorecursivo que significa PHP: Hypertext Preprocessor, que mostra claramente o intuitoda linguagem processar informações e gerar hipertexto (HTML).

Abaixo podemos ver um exemplo de uma página HTML simples:

1 <html >

2 <head >

3 <title >Teste </title >

4 </head >

5 <body >

6 <p>Hoje é dia 10/10/2010 </p>

7 </body >

8 </html >

E aqui, um exemplo do PHP em ação:

1 <html >

2 <head >

3 <title >Teste </title >

4 </head >

5 <body >

6 <p>Hoje é dia <?php echo date(’d/m/Y’); ?></p>

Desenvolvimento Web com PHP Página 8

Page 10: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Servidor Web

7 </body >

8 </html >

Desenvolvimento Web com PHP Página 9

Page 11: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Servidor Web

2.3 Instalando o Apache

Antes de começarmos a programar, precisamos instalar um servidor web em nossocomputador para que ele aceite requisições de nosso navegador e entregue páginas.Vamos instalar o Apache, um software servidor web 100% livre e open-source. NoDebian, podemos instalar utilizando o pacote apache2.

1 apt -get install apache2

Pronto, nosso servidor web está instalado. Para termos certeza que ele está funcio-nando, vamos entrar em nosso endereço web local:

1 http :// localhost

O diretório /var/www contém os arquivos que são mostrados em nosso localhost.Lá está a página index.html que contém a mensagem exibida quando entramos noendereço localhost em nosso navegador.

Desenvolvimento Web com PHP Página 10

Page 12: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Servidor Web

2.4 Instalando o PHP

Uma vez que temos o Apache instalado, ele já pode servidor páginas e arquivos.Mas ele ainda não consegue intepretar arquivos PHP porque nós não instalamos oPHP nesta máquina. Vamos fazer isso, instalando o pacote php5.

1 apt -get install php5

Para que o apache possa começar a intepretar nossas páginas PHP, precisamosreiniciá-lo. Vamos fazer isso rodando o seguinte comando:

1 /etc/init.d/apache2 restart

Está na hora de testar. Renomeie o arquivo index.html na pasta /var/www para in-dex.php. Agora, abra o arquivo e coloque o código a seguir dentro dele:

1 <?php

2

3 echo "Oi mundo";

Vamos acessar o endereço localhost em nosso navegador. Se aparecer uma men-sagem dizendo "Oi mundo", tudo está instalado corretamente e pronto para come-çarmos a nos divertir com o PHP!

Desenvolvimento Web com PHP Página 11

Page 13: Apostila Completa de PHP Linux

Capítulo 3

PHP

Page 14: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

3.1 Sintaxe básica

A sintaxe do PHP deriva de várias linguagens diferentes, predominantemente C. Alinguagem Perl foi responsável por influenciar a sintaxe do PHP. Com as novas funci-onalidades de programação orientada a objetos, o PHP incorpora elementos de Javae C#. Embora o PHP incorpore elementos de linguagens tão diferentes, sua sintaxese mantém simples e fácil de entender.

Quando criamos uma página, geralmente utilizamos a extensão .html. Quando criar-mos páginas que possuem código PHP, vamos utilizar a sessão .php. Dentro destapágina, podemos colocar HTML e PHP misturados, desde que utilizemos algumastags específicas para delimitar o que é um código PHP. Para definirmos o que é umcódigo PHP dentro de uma página, utilizamos as tags:

1 <?php

2 ?>

Existem também outras tags, como as short tags:

1 <?

2 ?>

As ASP tags, "roubadas"do ASP:

1 <%

2 %>

E também, a tag <script>:

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

Desenvolvimento Web com PHP Página 13

Page 15: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

• As short tags (<? ?>) precisam ser ativadas no arquivo de configuração doPHP antes de serem utilizadas. A opção é short_open_tags. O seu uso, noentanto, não é recomendado, já que elas conflitam com as tags de XML e foramdepreciadas em versões futuras.

• As tags ASP e script serão depreciadas nas versões futuras do PHP, portanto,não as use!

• Caso você esteja criando uma página que só possua código PHP, não é neces-sário utilizar a tag de fechamento (?>).

Olá Mundo

Em todos os cursos de programação, temos um exemplo cujo objetivo é ensinar oaluno a colocar um texto na tela. Não podemos fazer diferente!

O código abaixo faz uso do comando echo, que permite que você envie dados paraa tela. A tela, no nosso caso, é o navegador. Note que o comando print faz a mesmacoisa que o echo.

1 <?php

2

3 echo ’Olá mundo!’;

4 print ’Olá mundo!’;

Comentários

Também podemos adicionar comentários em nossos códigos. Comentários serãoignorados pelo PHP e são importantíssimos para manter nosso código limpo e orga-nizado.

1 <?php

2 // Comentário de uma linha

Desenvolvimento Web com PHP Página 14

Page 16: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

3

4 # Comentário de uma linha

5

6 /* Comentário

7 com várias

8 linhas

9 */

10

11 echo "teste"; // Comentário

Desenvolvimento Web com PHP Página 15

Page 17: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

3.2 Variáveis e constantes

Variáveis são essenciais em qualquer linguagem de programação. Elas servem paraguardar informações. Pense nelas como gavetas onde guardamos coisas e essasgavetas possuem etiquetas de nome. No PHP, nomes de variáveis são precedidosdo símbolo $.

1 <?php

2 $nome = "João";

3 $email = "[email protected]";

4 $time = "Grêmio";

Em nossas gavetas imaginárias, $nome $email $time, estamos guardando algumasinformações. No exemplo abaixo, iremos colocar na tela o nome do time do João:

1 <?php

2 $time = "Grêmio";

3 echo $time;

Nomes válidos

Precisamos ter alguns cuidados ao nomear nossas variáveis. São eles:

• Nunca inicie o nome de uma variável com um número

• Nunca use espaços em branco

Desenvolvimento Web com PHP Página 16

Page 18: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

• Nunca use caracteres especiais, apenas underline

• Evite criar variáveis com nomes gigantes, abrevie sempre que possível

• Evite criar nomes sem sentido, como $a ou $xyz. O nome da variável deveajudar o programador, não confundi-lo

• Evite utilizar letras maiúsculas

Variáveis variáveis

No PHP, podemos definir variáveis cujos nomes são... variáveis! Isso pode ser feitode maneira bastante simples:

1 <?php

2 $var = "time";

3 $$var = "Grêmio";

4 echo $time;

Observe que o valor da variável $var está sendo utilizado como nome de variáveldurante a atribuição de valor, criando de forma dinâmica a variável $time.

Constantes

Uma constante é como uma variável, mas como seu nome pode indicar, seu valor ésempre constante, invariável. O valor de uma constante jamais poderá ser alteradoem tempo de execução. Para definirmos uma constante, utilizamos a função define()do PHP.

1 <?php

2 define("VERSAO", 2)

3 echo VERSAO;

Desenvolvimento Web com PHP Página 17

Page 19: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

Constantes estão disponíveis por todo nosso script, inclusive dentro de funções queveremos logo logo. As regras de nomenclatura das constantes são as mesmas dasvariáveis. Contudo, é uma boa prática usar sempre letras maiúsculas e underline.Ex.: MELHOR_TIME, LIMITE_CAMPOS

Desenvolvimento Web com PHP Página 18

Page 20: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

3.3 Tipos de variáveis

Variáveis podem guardar qualquer informação. E cada informação possui um tipodiferente. Em outras linguagens de programação, é necessário declarar este tipojunto com o valor e o nome da variável. Mas o PHP possui tipagem dinâmica, oque significa que ele sabe o que é um texto (string) e um número (integer, float),dependendo do contexto onde essa informação é utilizada.

O PHP possui os seguintes tipos: Boolean, Integer, Float, String, Array, Objeto, Re-curso, NULL

Boolean

Uma variável booleana pode conter apenas dois valores, true ou false. Booleanossão a base das operações lógicas em nossas aplicações. Já que no PHP temostipagem dinâmica, um valor booleano por ter várias formas. True pode ser 1, falsepode ser 0, null ou uma string vazia.

Integer

Um integer é um número inteiro, podendo ser negativo ou positivo. Números inteirospossuem formas de notação diferentes:

• Decimal: 10, -11, 1452

• Octal: 0666, 0100

• Hexadecimal: 0x123, 0XFF, -0x100

Float

Um float, também chamado de double, é um ponto flutuante, um formato digital pararepresentar números reais. Assim como os inteiros, possuem formas de notação:

Desenvolvimento Web com PHP Página 19

Page 21: Apostila Completa de PHP Linux

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 definição, éuma sequência ordenada de caracteres. Podemos usar como texto, mas seu con-teúdo também pode ser binário, como o conteúdo de um arquivo MP3 ou JPG.

Array

Um array é uma estrutura de dados ordenados, que mantém uma série de elementosque podem ter diferentes tipos. Arrays são importantíssimos e saberemos mais sobreeles mais na frente.

Objeto

Um objeto é uma estrutura de dado e código, formando a base da programaçãoorientada a objetos.

Recurso

Um recurso é um recurso externo utilizado nativamente pelo PHP. São, por exemplo,conexões abertas com um banco de dados ou conexões abertas com um arquivo nosistema.

NULL

Uma variável NULL indica que ela não possui valor algum. Uma variável é conside-rada nula quando recebe o valor NULL ou nunca recebeu valor algum.

Confira no exemplo abaixo os tipos de variáveis em ação no PHP:

Desenvolvimento Web com PHP Página 20

Page 22: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

1 <?php

2 $v_ou_f = true;

3 $inteiro = 10;

4 $flutuante = 5.22;

5 $string = "Testando";

6 $array = array(’a’, ’b’, ’c’);

7 $objeto = new Objeto;

8 $recurso = fopen(’arquivo ’, ’r’);

9 $null = NULL;

3.3.1 Pseudo-tipos

Durante a leitura desta apostila, exercícios em aula e até mesmo pesquisas na inter-net, você encontrará vários menções a alguns tipos de variáveis conhecidos comopseudo-tipos. Eles são utilizados como referências a situações específicas que ocor-rem durante o desenvolvimento de uma aplicação.

mixed

O tipo mixed é utilizado para indicar que uma função pode esperar ou retornar maisde um tipo de variável ao mesmo tempo. Por exemplo, uma função pode retornaruma string ou um booleano, enquanto pode receber como parâmetro um array oustring.

number

O tipo number é utilizado para indicar que a variável pode ser um inteiro ou umfloat.

callback

Algumas funções no PHP podem esperar como parâmetro uma outra função definidapelo usuário. Chamamos essas funções passadas como parâmetro de callbacks.

Desenvolvimento Web com PHP Página 21

Page 23: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

3.3.2 Manipulação de tipos

Como vimos, a tipagem do PHP é dinâmica. Isso significa que, dependendo docontexto, a linguagem fará uma conversão automática entre os tipos de variáveisconhecidos, escolhendo a mais apropriada para a situação.

No exemplo abaixo, podemos analisar o comportamento de linguagem enquanto uti-lizamos o operator de soma com algumas variáveis.

1 <?php

2 $var = "0"; // $var é uma string

3 $var += 2; // $var agora é um inteiro

4 $var = $var + 1.3; // $var agora é um float

5 $var = 5 + "10 carros"; // inteiro ($var = 15)

6 $var = "1 casa" + "1 casa"; // inteiro ($var = 2)

3.3.3 Conversão de tipos

Embora a tipagem do PHP seja dinâmica, podemos forçar os tipos de nossas va-riáveis utilizando uma técnica conhecida como type casting, ou conversão de tipos.Veja no exemplo abaixo como podemos forçar os tipos de algumas variáveis:

1 <?php

2 $var = 10;

3 $cast = (boolean) $var; // torna -se booleano

4 $cast = (int) $var; // torna -se inteiro

5 $cast = (float) $var; // torna -se float

6 $cast = (string) $var; // torna -se string

7 $cast = (array) $var; // torna -se array

8 $cast = (object) $var; // torna -se object

9 $cast = (unset) $var; // torna -se NULL

10 $cast = (binary) $var; // torna -se uma string binária

Desenvolvimento Web com PHP Página 22

Page 24: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

Desenvolvimento Web com PHP Página 23

Page 25: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

3.4 Operadores

Bom, até agora aprendemos o que são variáveis, como criá-las e como associar va-lores a elas. Mas a vida de um desenvolvedor seria muito chata se isso fosse tudoque pudéssemos fazer com elas. Vamos conhecer agora operadores, que permi-tem que nós manipulemos o conteúdo de uma ou mais variáveis, produzindo novasvariáveis.

Operadores Aritméticos

Podemos utilizar operadores aritméticos para efetuar cálculos com os valores devariáveis, transformando os resultados desses cálculos em variáveis, que por suavez, também podem ser manipuladas. Por exemplo:

1 <?php

2 $a = 3;

3 $b = 3;

4 $c = $a * $b; // resultado é 9

5 $d = $a + $b; // resultado é 6

6 $e = $c - $d; // resultado é 3

Os operadores aritméticos disponíveis são:

• Adição: +

• Subtração: -

• Multiplicação:

• Divisão: /

• Módulo: %

Desenvolvimento Web com PHP Página 24

Page 26: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

Lembrando que o PHP possui tipagem dinâmica. Portanto:

1 <?php

2 $a = "5"; // string

3 echo $a + 2; // 7, integer

4 echo $a + ’5 carros ’; // 10, integer

Operadores de Atribuição

No PHP, utilizamos operadores de atribuição para definir variáveis e seus valores.Contudo, também podemos mesclar os operadores de atribuição com operadoresaritméticos, deixando o código mais limpo e seu trabalho mais ágil.

1 <?php

2 $a = 1; // A variável $a é igual a 1

3 $a += 2; // Somamos 2 ao valor da variável $a

4 $a -= 2; // Subtraimos 2 ao valor da variável $a

5 $a *= 2; // Multiplicamos o valor da variável $a por 2

6 $a /= 2; // Dividimos o valor da variável $a por 2

Podemos também incrementar ou decrementar variáveis utilizando os operadores deincrementação, herdados da linguagem C.

1 <?php

2 $a = 1;

3 echo ++$a; // Incrementamos 1 e retornamos o valor

4 echo $a++; // Retornamos o valor e incrementamos 1

5 echo --$a; // Decrementamos 1 e retornamos o valor

6 echo $a --; // Retornamos o valor e decrementamos 1

Operadores Relacionais

Desenvolvimento Web com PHP Página 25

Page 27: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

Operadores relacionais são usados para comparar valores ou expressões, retor-nando um valor booleano (true ou false). São eles:

• Igual: ==

• Idêntico: ===

• Diferente: != ou <>

• Menor que: <

• Maior que: >

• Menor ou igual: <=

• Maior ou igual: >=

Devido a tipagem dinâmica do PHP, você deve tomar alguns cuidados quando es-tiver criando expressões lógicas envolvendo valores booleanos. Se você fizer umacomparação utilizando o operador ==, o número inteiro 0 será igual ao booleanofalse, assim como NULL e uma string vazia. Isso pode não trazer bons resultados.Portanto, utilize sempre o operador ===, que checará não somente o conteúdo davariável, e sim, o tipo dela.

Operadores Lógicos

Existem também os operadores lógicos, que são utilizados para combinar expres-sões lógicas, criando testes condicionais. São eles:

• $a and $b

E: enquanto A e B forem verdadeiros

• $a or $b

Desenvolvimento Web com PHP Página 26

Page 28: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

OU: enquanto A ou B forem verdadeiros

• $a xor $b

XOR: enquanto A ou B forem verdadeiros, mas não 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 Página 27

Page 29: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

3.5 Strings

Uma string é, nada mais nada menos, que um texto. Para declarar uma string, utili-zamos aspas simples ” ou aspas duplas .

1 <?php

2 echo "Testando";

3 echo ’Testando ’;

Existe uma diferença bem clara entre a utilização de aspas duplas e aspas simples:O modo como o PHP interpreta o conteúdo delas. Diferentemente das aspas simples,as aspas duplas permitem que você faça uso de caracteres de escape e variáveisdentro de uma string.

1 <?php

2 $nome = ’João’;

3 echo "$nome e Maria andam pela rua <br />";

4 echo ’$nome e Maria andam pela rua ’;

Ao contrário do que muitos pensam, não existe diferença alguma de performance en-tre o uso de aspas duplas ou simples. O fato das aspas duplas fazerem substituiçãode variáveis pelos seus respectivos valores não torna o código mais lento.

Caracteres de escape

Ao usar aspas duplas, é necessário conhecer alguns caracteres de escape. Sãoeles:

1 Quebra de linha: \n

2 Tabulação: \t

3 Retorno do carro: \r

Desenvolvimento Web com PHP Página 28

Page 30: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

4 A própria barra: \\

5 Aspas simples: \’

6 Aspas duplas: \"

Vamos entender melhor usando o exemplo abaixo:

1 <?php

2 echo "<pre >Vou quebrar a linha\n";

3 echo "\tEstou tabulado\n";

4 echo "Mostrar aspas duplas , sem quebrar o código \"\n";

5 echo "Mostrar a barra \\";

6 echo "</pre >";

Navegadores, por padrão, não exibem caracteres de escape. Novas linhas e tabula-ções que forem colocadas em strings só serão exibidas em texto puro, isto é, casovocê salve a string em um arquivo de texto. Para mostrar caracteres de escape nonavegador, é comum utilizar a tag HTML <pre>.

Concatenação

Ao se trabalhar com strings, podemos concatená-las e obter resultados interessan-tes.

1 <?php

2 $carro = ’Gol ’;

3 $cor = ’Azul ’;

4

5 $meucarro = $carro . $cor;

6 $outrocarro = ’Meu ’. $carro .’ é ’. $cor .’’;

7

8 echo $meucarro;

9 echo $outrocarro;

Desenvolvimento Web com PHP Página 29

Page 31: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

Evite concatenar string quando seu único objetivo é colocar o valor de uma variáveldentro da outra. Para esse fim podemos utilizar as aspas duplas.

Desenvolvimento Web com PHP Página 30

Page 32: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

3.6 Estruturas de controle

No PHP, assim como em outras linguagens, possuímos estruturas de controle quepermitem que criemos um fluxo em nosso programa. Uma dessas estruturas é acondição. Caso algo seja verdadeiro, faça isto, senão, faça aquilo. No PHP, isso é oIF/ELSE.

1 <?php

2 $idade = 15;

3 if ($idade < 18) {

4 echo ’Você não pode entrar aqui!’;

5 } else {

6 echo ’Bem -vindo ao Bar!’;

7 }

Observe que estamos comparando o valor de uma variável utilizando os operadoresrelacionais. Se o valor da variável $idade for menor que 18, executaremos o blocode código contido entre as chaves do if. Caso contrário, executaremos o bloco decódigo contido entre as chaves do else.

Podemos também utilizar os operadores lógicos junto dos operadores relacionais,criando expressões mais complexas que atendem melhor nossos problemas:

1 <?php

2 $idade = 21;

3 $carteirinha = true;

4 if ($idade > 18 && $carteirinha == true) {

5 echo ’Bem -vindo!’;

6 }

Elseif

Desenvolvimento Web com PHP Página 31

Page 33: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

Além do IF/ELSE básico, podemos fazer uso do controle ELSEIF, que permite quecriemos uma outra condição, além da principal.

1 <?php

2 $nome = ’Zé’;

3 if ($nome == ’Zé’) {

4 echo ’Eaí Zé!’;

5 } elseif ($nome == ’Maria ’) {

6 echo ’Eaí Maria!’;

7 } else {

8 echo ’Eaí ninguém!’;

9 }

Switch

O ELSEIF pode ser muito útil, mas e quando tivermos muitas condições? Fica ruimde manter um código cheio de ELSEIF’s. É aí que entra o SWITCH. O switch permiteque criemos infinitas condições de forma bastante simples e organizada:

1 <?php

2 $nome = ’Zé’;

3 switch ($nome) {

4 case ’Zé’:

5 echo ’Eaí Zé!’;

6 break;

7

8 case ’Maria ’:

9 echo ’Eaí Maria!’;

10 break;

11

12 case ’Darth ’:

13 echo ’Eaí Vader!’;

14 break;

15

16 case ’Curinga ’:

Desenvolvimento Web com PHP Página 32

Page 34: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

17 echo ’Eaí Curinga!’;

18 break;

19

20 default:

21 echo ’Eaí rapá?’;

22 break;

23 }

Operador Ternário

Existe no PHP uma forma mais "curta"de criar condições. Ele é chamado de Opera-dor Ternário. Embora ele deixe o código menos legível para programadores menosexperientes, ele nos salva tempo e o código torna-se mais limpo.

1 <?php

2

3 $a = 1;

4 $b = 0;

5

6 if ($a > $b) {

7 $c = ’A é maior que B’;

8 } else {

9 $c = ’A não é maior que B’;

10 }

11

12 $d = ($a > $b) ? ’A é maior que B’ : ’A não é maior que B’;

13

14 echo $c;

15 echo $d;

Desenvolvimento Web com PHP Página 33

Page 35: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

3.7 Loops

Os loops no PHP são estruturas de controle muito importantes. Eles permitem queefetuemos um laço de repetição enquanto uma determinada condição for verdadeira.Temos quatro tipos de loop no PHP: while, do while, for e foreach. O foreach foiconstruído especialmente para lidar com arrays, portanto, vamos conhecê-lo maistarde.

while

O while permite que executemos um bloco de código enquanto a expressão que foipassada como parâmetro seja verdadeira.

1 <?php

2

3 $contador = 0;

4

5 while ($contador < 10) {

6 echo $contador;

7 $contador ++;

8 }

Neste caso, contamos até 10. Observe que estamos incrementando o valor da variá-vel logo depois de colocá-la na tela. Fiz dessa maneira para que ficasse mais claropara vocês, mas poderíamos fazer o mesmo da seguinte forma:

1 <?php

2

3 $contador = 0;

4

5 while ($contador < 10) {

6

7 echo $contador ++;

Desenvolvimento Web com PHP Página 34

Page 36: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

8

9 }

do while

O do while funciona da mesma forma que o while, com apenas uma diferença: Eleavalia a expressão depois de fazer algo. Isso garante que o código seja executadoao menos uma vez, mesmo que a expressão não seja verdadeira.

1 <?php

2

3 $contador = 1;

4

5 do {

6

7 $quadrado = $contador * $contador;

8 echo "O quadrado de $contador é $quadrado <br />";

9 $contador ++;

10

11 } while ($contador <= 10);

Esse exemplo é similar ao exemplo anterior. Mas vamos supor que a variável $con-tador não seja 0, seja 12 (maior que 10, portanto, falhando nossa condição). O dowhile garantirá que nosso bloco de código será executado apenas uma vez, mesmoa condição sendo falsa.

for

O for é uma estrutura de controle muito similar ao while e ao do while. Contudo,ele é mais sofisticado e permite que executemos três expressões em sua condição,separadas por ponto e vírgula. A primeira é executada ao início do loop, a segunda éa condição (enquanto ela for verdadeira, o loop continuará), e a terceira é executadaao fim de cada repetição.

Desenvolvimento Web com PHP Página 35

Page 37: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

1 <?php

2

3 for($contador = 1; $contador <= 10; $contador ++) {

4

5 $quadrado = $contador * $contador;

6 echo "O quadrado de $contador é $quadrado <br />";

7

8 }

Quebrando loops

Enquanto estamos dentro de um loop, podemos utilizar duas instruções: continuee break. Elas permitem que nós quebremos os laços de repetição. O continue iráignorar todas as instruções após sua inserção e irá para o próximo elemento noloop. O break irá quebrar o loop onde for inserido e nenhum outro elemento seráinterpretado.

1 <?php

2

3 for($contador = 1; $contador <= 10; $contador ++) {

4

5 if ($contador == 3) { continue; }

6

7 $quadrado = $contador * $contador;

8 echo "O quadrado de $contador é $quadrado <br />";

9

10 }

Note que nosso contador irá pular o terceiro item do loop. Nosso if retornou verda-deiro, portanto, o bloco de código contido nele foi executado. O bloco de código erao continue, que fez com que a execução do loop fosse pulada naquele momento,deixando de executar a conta do quadrado e nosso echo.

Desenvolvimento Web com PHP Página 36

Page 38: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

1 <?php

2

3 for($contador = 1; $contador <= 10; $contador ++) {

4

5 if ($contador == 3) { break; }

6

7 $quadrado = $contador * $contador;

8 echo "O quadrado de $contador é $quadrado <br />";

9

10 }

Observe agora que, ao invés de pular o terceiro item, nosso contador parou por ali.O break finaliza a execução do loop.

Desenvolvimento Web com PHP Página 37

Page 39: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

3.8 Arrays

Arrays são mapas de dados, guardados em forma de chave = valor. Arrays podemconter vários tipos diferentes de variáveis, até mesmo arrays. Se formos manternossa analogia de gavetas, arrays são grandes gavetas que possuem mais gavetasdentro de si, etiquetadas ou não. A melhor forma de explicar o que eles são e comofuncionam, é através de código:

1 <?php

2 $pessoas = array(’João’, ’Maria ’, ’Pedro ’);

3 print_r($pessoas);

No código acima, nós criamos um array chamado $pessoas e colocamos três valo-res dentro dele. Esses valores são como variáveis, contidos dentro de uma grandevariável chamada $pessoas. Ela é a nossa grande gaveta e as pequenas gavetascontidas nela podem possuir qualquer valor: string, inteiro, float, etc.

Note também que não utilizamos echo, e sim, uma função chamada print_r. A funçãoprint_r lista as chaves e os valores de um array. Existe também a função var_dump:

1 <?php

2 $pessoas = array(’João’, ’Maria ’, ’Pedro ’);

3 var_dump($pessoas);

Observe que a função var_dump irá exibir não só a estrutura do array, mas os tiposdos valores contidos dentro dele.

Caso utilizemos echo $pessoas, o PHP irá retornar "Array()". Porque? Porque umarray é um mapa de dados e o echo não pode retornar o mapa inteiro. Para podermosutilizar o echo com arrays, precisamos especificar qual chave queremos acessar.

Desenvolvimento Web com PHP Página 38

Page 40: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

1 <?php

2 $pessoas = array(’João’, ’Maria ’, ’Pedro ’);

3 echo $pessoas [1]; // Maria

3.8.1 Associativos

Por padrão, quando criamos um array, ele recebe chaves numéricas, incrementadasautomaticamente de acordo com novos valores. Contudo, podemos criar chaves quesão strings. Chamamos isto de arrays associativos. Para explicar melhor, faremosum exemplo em que mostraremos a temperatura média de alguns meses do ano.

1 <?php

2 $temperaturas = array(’Janeiro ’ => 30, ’Fevereiro ’ => 32, ’Março’

=> 29);

Observe que nossos valores, nossas pequenas gavetas dentro de uma grande ga-veta, agora possuem nomes. Podemos utilizar estes nomes para nos referenciarmosa um valor específico dentro de um array, permitindo que manipulemos nossos arraysde maneira mais precisa.

1 <?php

2 $temperaturas = array(’Janeiro ’ => 30, ’Fevereiro ’ => 32, ’Março’

=> 29);

3 echo "A temperatura média em Janeiro foi de:

{$temperaturas[’Janeiro ’]} graus";

Existem maneiras diferentes de se utilizar variáveis dentro de strings e vice-versaEssas maneiras dividem-se em concatenadas e não-concatenadas, sendo a formanão-concatenada a mais "limpa"

Desenvolvimento Web com PHP Página 39

Page 41: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

1 <?php

2

3 $nome = ’Carlos Carne ’;

4 $time = array(’melhor ’ => ’Grêmio ’, ’pior ’ => ’Curintia ’);

5

6 // Não concatenadas

7 echo "$nome torce para o {$time[’melhor ’]}";

8 echo "{$nome} torce para o {$time[’melhor ’]}";

9

10 // Concatenadas

11 echo "". $nome ." torce para o ". $time[’melhor ’] ."";

12 echo ’’. $nome .’ torce para o ’. $time[’melhor ’] .’’;

Portanto, nunca utilize concatenação para acessar valores dentro de um array. Façauso das chaves e evite sujar seu código e diminuir sua manutenibilidade.

3.8.2 Multidimensionais

Arrays multidimensionais, por mais complexo que o nome seja, são basicamente,arrays dentro de um array. Lembram que os valores de um array podem ter qualquertipo? String, float, inteiro? Bom, também podemos ter arrays!

Podemos ter infinitos arrays dentro de outros arrays para controlar e armazenar di-versos dados diferentes. Mas, seguindo o nosso exemplo anterior, podemos ter osdados de temperatura para vários anos:

1 <?php

2

3 $temperaturas = array(

4 ’2008’ => array(

5 ’Janeiro ’ => 30,

6 ’Fevereiro ’ => 32,

Desenvolvimento Web com PHP Página 40

Page 42: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

7 ’Março’ => 29),

8 ’2009’ => array(

9 ’Janeiro ’ => 31,

10 ’Fevereiro ’ => 34,

11 ’Março’ => 30),

12 ’2010’ => array(

13 ’Janeiro ’ => 32,

14 ’Fevereiro ’ => 34,

15 ’Março’ => 28)

16 );

17

18 echo "Janeiro de 2008 foi de: {$temperaturas [’2008’][’Janeiro ’]}

graus";

Note que fiz uso de uma estrutura identada, similar a da saída do print_r, para visu-alizar melhor os dados do array. Eu poderia colocar tudo em uma linha, mas ficariadifícil de entender no futuro.

Sempre que você for trabalhar com arrays multidimensionais, procure identar suadefinição para manter o código limpo e fácil de entender.

3.8.3 Foreach

Aprendemos anteriormente alguns loops, mas faltou o foreach. O foreach está ligadodiretamente a arrays. A ideia do foreach é que você possa iterar entre cada elementode um array. Por exemplo:

1 <?php

2

3 $pessoas = array(’João’, ’Maria ’, ’Pedro ’);

4

5 foreach ($pessoas as $valor) {

6 echo "Olá $valor!<br />";

Desenvolvimento Web com PHP Página 41

Page 43: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

7 }

Além de iterar entre os elementos e pegar os valores, podemos também pegar aschaves. Para cada elemento em nosso array (Mês e Temperatura) nós daremos umecho com a chave e valor desse elemento:

1 <?php

2

3 $temperaturas = array(’Janeiro ’ => 30, ’Fevereiro ’ => 32, ’Março’

=> 29);

4

5 foreach ($temperaturas as $chave => $valor) {

6 echo "A temperatura média de $chave foi de $valor graus <br />";

7 }

Mas e arrays multidimensionais? Fácil. Se arrays multidimensionais são simples-mente arrays dentro de arrays, foreachs multidimensionais são simplesmente forea-chs dentro de mais foreachs.

1 <?php

2

3 $temperaturas = array(

4 ’2008’ => array(

5 ’Janeiro ’ => 30,

6 ’Fevereiro ’ => 32,

7 ’Março’ => 29),

8 ’2009’ => array(

9 ’Janeiro ’ => 31,

10 ’Fevereiro ’ => 34,

11 ’Março’ => 30),

12 ’2010’ => array(

13 ’Janeiro ’ => 32,

14 ’Fevereiro ’ => 34,

15 ’Março’ => 28)

Desenvolvimento Web com PHP Página 42

Page 44: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

16 );

17

18 foreach ($temperaturas as $ano => $meses) {

19 echo "<strong >Temperaturas em $ano </strong ><br />";

20

21 foreach ($meses as $mes => $temp) {

22 echo "$mes: $temp graus <br />";

23 }

24 }

3.8.4 Sintaxe alternativa

Podemos criar arrays de forma simples e rápida utilizando o operador []. Dessaforma, iremos apenas jogar dados dentro do nosso array, sem nos preocuparmoscom a chave.

1 <?php

2

3 $array = array(’João’, ’Maria ’);

4

5 $array [] = ’José’;

6 $times [] = ’Grêmio ’;

7

8 print_r($array);

9 print_r($times);

Podemos também alterar os valores de um array usando os colchetes:

1 <?php

2

3 $array = array(’nome ’ => ’João’, ’time ’ => ’nenhum ’);

4

Desenvolvimento Web com PHP Página 43

Page 45: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

5 $array[’time ’] = ’Grêmio ’;

Desenvolvimento Web com PHP Página 44

Page 46: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

3.9 Funções

Uma função é um pedaço de código, que tem um objetivo específico, encapsuladoem uma estrutura única que recebe parâmetros e retorna um dado. Ela é essencialpara permitir reuso de código. O PHP possui várias funções "built-in", isto é, já vemcom ele. Você já viu algumas nos exemplos anteriores, como a função date(). Abaixo,criaremos uma função simples para que você entenda como elas funcionam e paraque servem.

1 <?php

2

3 function negrito($valor) {

4 echo "<strong >$valor </strong >";

5 }

6

7 echo negrito("Olá mundo!");

8 echo negrito("Olá mundo , novamente!");

Observe que a função tem dois parênteses e dentro deles temos uma variável, cha-mamos isso de parâmetro. Os parâmetros de uma função são somente valores,mas sempre criamos apelidos para eles. A variável $valor poderia ter qualquer outronome, optamos por esse para ficar mais claro.

O conteúdo dela sempre será o valor que está sendo passado para a função durantea chamada de função. Chamadas de função são muito simples. Basta você colocaro nome da função e passar quaisquer parâmetros para ela. Algumas funções podemnão possuir parâmetros.

1 <?php

2

3 negrito("Oi mundo");

4 italico("Oi pessoas");

5 quebra ();

Desenvolvimento Web com PHP Página 45

Page 47: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

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

3.9.1 Retorno

No PHP, nossas funções podem simplesmente executar um bloco de código, semretornar qualquer valor. Mas, em vários momentos, você vai precisar que ela retornaum valor para você. Esse valor pode ser o resultado de uma operação matemática,uma manipulação de string, uma manipulação de arrays ou até mesmo um valorbooleano, indicando se a operação foi bem sucedida ou não.

Para fazer uma função retornar um valor, precisamos utilizar a palavra-chave return,seguida do valor que desejamos retornar. Veja o exemplo:

1 <?php

2

3 function taxar($valor) {

4 $valor = $valor * 1.09;

5 return $valor;

6 }

7

8 $preco = 25;

9 $comtaxa = taxar($preco);

10

11 echo "O preço deste livro é $preco. Com taxa , fica: $comtaxa";

3.9.2 Parâmetros opcionais

Funções também podem possuir parâmetros opcionais. Esses parâmetros podemser omitidos durante a chamada de função e nossa função trabalhará com um valorpadrão no lugar dessa parâmetro obtido. Observe o código abaixo:

Desenvolvimento Web com PHP Página 46

Page 48: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

1 <?php

2

3 function taxar($valor , $subtaxa = 1) {

4 $valor = $valor * $subtaxa * 1.09;

5 return $valor;

6 }

7

8 $preco = 25;

9 $comtaxa = taxar($preco);

10 $comsubtaxa = taxar($preco , 1.02);

11

12 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 variáveis. Essas variáveisestão disponíveis no escopo global de nosso script. Ela sempre pode ser acessada.Contudo, dentro de nossas funções, existe um outro escopo, o escopo local. Fun-ções, que agem no escopo local, não podem acessar variáveis do escopo global.

Para podermos utilizar uma variável que está disponível no escopo global dentrode nossas funções, precisamos alocá-las no escopo local utilizando a palavra-chaveglobal. Observe o código abaixo:

1 <?php

2

3 $taxa = 1.09;

4

5 function taxar($valor) {

6 global $taxa;

7

Desenvolvimento Web com PHP Página 47

Page 49: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

8 $valor = $valor * $taxa;

9 return $valor;

10 }

11

12 $preco = 25;

13 $comtaxa = taxar($preco);

14

15 echo "O preço deste livro é $preco. Com taxa , fica: $comtaxa";

3.9.4 Passagem por referência

Quando passamos um valor para uma função, um parâmetro, aquele valor passa aexistir no escopo local da função. As alterações feitas nesse valor só existem noescopo local, portanto, precisamos retornar algo em nossa função para fazer essasalterações, se necessários, aparecerem no escopo global.

Com a passagem por referência, qualquer alteração feita no escopo local em umvalor passado por referência será refletida no escopo global. Utilizamos o operador& em frente a um parâmetro para especificar passagem referência. Por exemplo:

1 <?php

2

3 function adicionar (& $fruta) {

4 return ++ $fruta;

5 }

6

7 $laranjas = 5;

8

9 adicionar($laranjas);

10

11 echo $laranjas;

Desenvolvimento Web com PHP Página 48

Page 50: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

A variável $laranjas só existe no escopo global. Mas estamos passando essa variávelpara uma função por referência, o que irá alterar o valor da variável em ambos osescopos, sem que eu precise dizer que o valor da variável é igual ao retorno dafunção.

3.9.5 Funções anônimas e Closures

Funções lambda, ou funções anônimas como são comumente conhecidas, são fun-ções que podem ser definidas a qualquer momento, geralmente a uma variável edisponível somente no escopo desta. Este conceito vem do cálculo lambda, introdu-zido por Alonzo Church nos anos 30, que inspirou a criação de linguagens funcionaiscomo Lisp e Scheme.

Lambdas são muito úteis em conjunto com funções como array_filter e array_map.Como podemos ver no exemplo abaixo, que monta um array somente com os valoresímpares de outro:

1 <?php

2

3 $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);

4 $impares = array_filter($array , function ($valor) { return $valor %

2; });

5

6 print_r($impares);

Closures, são muito similares a lambdas, mas acabam sendo mais úteis já que elespodem interagir com o escopo global. Podemos importar variáveis do escopo glo-bal para o escopo local do closure utilizando a palavra-chave use, que neste casofunciona como a global que vimos anteriormente.

Podemos ver no exemplo abaixo um simples Closure:

Desenvolvimento Web com PHP Página 49

Page 51: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br PHP

1 <?php

2

3 $teste = "Oi mundo";

4 $closure = function () use ($teste) { echo $teste; };

5

6 $closure ();

Desenvolvimento Web com PHP Página 50

Page 52: Apostila Completa de PHP Linux

Capítulo 4

Funções Nativas

Page 53: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

4.1 Funções para variáveis

4.1.1 Função empty

A função empty verifica se a variável é considerada vazia, ou seja, caso seu conteúdoseja , 0, "0", NULL, FALSE, um array vazio, ou uma variável declarada porém semvalor em uma classe.

1 <?php

2 $variavel = 0;

3

4 if (empty($variavel)) {

5 echo ’Esta variável é considerada vazia!’;

6 }

4.1.2 Função isset

Esta função informa se determinada variável foi iniciada.

1 <?php

2

3 $variavel = ’’;

4 if (isset($variavel)) {

5 echo "A variável existe !!!";

6 }

Podemos também utilizar a função unset para destruir determinada variável.

Desenvolvimento Web com PHP Página 52

Page 54: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

4.1.3 Função is_array

Como o próprio nome já diz, esta função verifica se determinada variável é um ar-ray:

1 <?php

2

3 $vetor = array(’Isto ’, ’é’, ’um array ’);

4 echo is_array($vetor) ? ’Sim , isto é um array.’ : ’Não é um array ’;

4.1.4 Função is_bool

Verifica se a variável é booleana. No exemplo abaixo, como o conteúdo da variávelé false, a frase será mostrada na tela.

1 <?php

2 $variavel1 = false;

3

4 if (is_bool($a)) {

5 echo ’A variável $a é um valor booleano ’;

6 }

4.1.5 Função is_callable

Verifica se o conteúdo de uma variável é uma função válida.

1 <?php

2

Desenvolvimento Web com PHP Página 53

Page 55: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

3 function teste() {

4 }

5

6 $variavel = ’teste ’;

7

8 var_dump(is_callable($variavel , false , $nome));

9

10 echo $nome , "\n";

A saída será true, pois teste é de fato o nome de uma função válida e logo depois seráapresentado na tela o nome da função, encontrada na variável. Teste este mesmoexemplo modificando o conteúdo da variável para teste1 por exemplo. A saída deveráser falsa, tendo em vista que não há função com este nome.

4.1.6 Função is_float

A função is_float verificará se o conteúdo de uma variável é um valor em ponto flutu-ante.

1 <?php

2 $variavel = 13.33;

3 if(is_float($variavel)) {

4 echo "É float!\n";

5 }else {

6 echo "Não é float!\n";

7 }

4.1.7 Função is_int

Verifica se o número em questão é um inteiro.

Desenvolvimento Web com PHP Página 54

Page 56: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

1 <?php

2 $variavel = 13;

3 if(is_int($variavel)) {

4 echo "É inteiro !\n";

5 }else {

6 echo "Não é inteiro !\n";

7 }

4.1.8 Função is_null

Esta função indica se a variável é nula.

1 <?php

2 $variavel = NULL;

3

4 if(is_int($variavel)) {

5 echo "É nulo!\n";

6 }else {

7 echo "Não é nulo!\n";

8 }

4.1.9 Função is_numeric

Indica se a variável é numérica

1 <?php

2 $variavel = 30;

3

Desenvolvimento Web com PHP Página 55

Page 57: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

4 if(is_int($variavel)) {

5 echo "É um número!\n";

6 } else {

7 echo "Não é um número!\n";

8 }

4.1.10 Função is_object

Verifica se a varíavel em questão é um objeto.

1 <?php

2

3 function get_students($obj) {

4 if (! is_object($obj)) {

5 return false;

6 }

7

8 return $obj ->students;

9 }

10

11 $obj = new stdClass ();

12 $obj ->students = array(’Kalle ’, ’Ross ’, ’Felipe ’);

13

14 var_dump(get_students(null));

15 var_dump(get_students($obj));

4.1.11 Função is_resource

Verifica se uma determinada variável é um resource.

Desenvolvimento Web com PHP Página 56

Page 58: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

1 <?php

2

3 $conexao = @mysql_connect(’localhost ’, ’usuario ’, ’senha ’);

4 if (! is_resource($conexao)) {

5 die(’Não foi possível conectar! : ’ . mysql_error ());

6 }

4.1.12 Função is_scalar

Indica se a variável em questão é escalar.

1 <?php

2 function show_var($variavel) {

3 if (is_scalar($variavel)) {

4 echo $variavel;

5 } else {

6 echo "Não é escalar!";

7 }

8 }

9

10 $pi = 3.1416;

11

12 show_var($pi);

4.1.13 Função is_string

Verifica se determinado conteúdo é considerada uma string.

1 <?php

Desenvolvimento Web com PHP Página 57

Page 59: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

2 var_dump(is_string(’teste ’));

3 var_dump(is_string("50"));

4 var_dump(is_string (13));

5 var_dump(is_string(true));

Saída:

bool(true) bool(true) bool(false) bool(false)

Perceba que os valores dentro das aspas (simples ou duplas) são consideradasstrings, mesmo que se trate de números ou palavras reservadas.

4.1.14 Função settype

A função settype atribui um tipo a uma variável.

1 <?php

2 $variavel = true;

3 settype($variavel , "string");

Saída: variavel is now "1"(string)

Veja então que a variável que antes era booleana, foi convertida para seu correspon-dente em string, "1".

4.1.15 Função gettype

Esta função retorna qual o tipo da variável, analisando seu conteúdo:

Desenvolvimento Web com PHP Página 58

Page 60: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

1 <?php

2 $variavel = "teste";

3 echo ’Esta variável é do tipo ’ . gettype($variavel);

4.1.16 Função unset

Esta função apaga da memória determinada variável.

1 <?php

2 set ($variavel);

3 echo "Variável criada";

4 unset($variavel);

5 echo "Variável deletada";

4.1.17 Função var_dump

Esta é uma das funções mais importantes para quem desenvolve em PHP. Ela apre-senta detalhes a respeito de uma variável, o que torna mais fácil o reconhecimentode problemas no código. Muito utilizada para compreender o funcionamento de ar-rays.

1 <?php

2 $a = array (1, 2, array ("a", "b", "c"));

3 var_dump($a);

O código acima irá exibir:

Desenvolvimento Web com PHP Página 59

Page 61: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

1 array (3) {

2 [0]=>

3 int(1)

4 [1]=>

5 int(2)

6 [2]=>

7 array (3) {

8 [0]=>

9 string (1) "a"

10 [1]=>

11 string (1) "b"

12 [2]=>

13 string (1) "c"

14 }

15 }

4.1.18 Função var_export

Muio parecida com a função var_dump, porém a saída é um código PHP válido.

1 <?php

2 $vetor = array (1, 2, array ("a", "b", "c"));

3 var_export ($vetor);

4 ?>

O código acima irá exibir:

1 array (

2 0 => 1,

3 1 => 2,

4 2 =>

5 array (

Desenvolvimento Web com PHP Página 60

Page 62: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

6 0 => ’a’,

7 1 => ’b’,

8 2 => ’c’,

9 ),

10 )

Desenvolvimento Web com PHP Página 61

Page 63: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

4.2 Funções para strings

O PHP possui muitas funções nativas para se trabalhar com strings e manipulá-las.A partir de agora, veremos algumas dessas funções, exemplos de como trabalharcom elas, e ver como elas são úteis no dia a dia de um programador PHP.

4.2.1 Função printf

A função printf permite que formatemos uma string de diferentes formas.

1 <?php

2 $artilheiro = ’Ronaldo ’;

3 $gols = 19;

4

5 $formato = ’O artilheiro do brasileirão, %s, tem %d gols.’;

6 printf($formato , $artilheiro , $gols);

Dependendo do tipo da variável, especificamos a chave de substituição:

• %s = String

• %f = Float

• %d = Integer

4.2.2 Função sprintf

A função sprintf é similar a função printf, mas ao invés de mostrar a string na tela, elaapenas monta a string.

Desenvolvimento Web com PHP Página 62

Page 64: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

1 <?php

2 $artilheiro = ’Jonas ’;

3 $gols = 19;

4

5 $formato = ’O artilheiro do brasileirão, %s, tem %d gols.’;

6 $string = sprintf($formato , $artilheiro , $gols);

7 echo $string;

4.2.3 Função vsprintf

A função vsprintf é similar a função sprintf, mas ela aceita um array de valores aserem substituídos, ao invés de uma série de parâmetros.

1 <?php

2 $formato = ’O artilheiro do brasileirão, %s, tem %d gols.’;

3

4 $string = vsprintf($formato , array(’Jonas ’, ’19’));

5 echo $string;

4.2.4 Função str_replace

A função str_replace permite que você substitua uma ou mais strings por outras,dentro de uma string maior. Ela recebe três parâmetros: o que você quer substituir,pelo quê você quer substituir e onde você quer substituir. A função irá retornar astring com as substituições feitas. Veja o exemplo:

1 <?php

2

Desenvolvimento Web com PHP Página 63

Page 65: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

3 $string = "Oi mundo";

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

5

6 echo $novastring;

Observe que é possível passar não só uma string para os dois primeiros parâmetros,mas arrays também. Podemos substituir mais de uma palavra por uma string, ousubstituir igualmente:

1 <?php

2

3 $string = "Olá mundo cruel!";

4

5 $original = array(’mundo ’, ’cruel ’);

6 $substituto = array(’mundinho ’, ’feliz ’);

7

8 $novastring = str_replace($original , "coisa", $string);

9 $outrastring = str_replace($original , $substituto , $string);

10

11 echo $novastring;

12 echo $outrastring;

4.2.5 Função htmlentities

A função htmlentities transforma caracteres em entidades HTML equivalentes. Umexemplo de quando observamos este comportamento é ao digitar caracteres emeditores de texto na web que permitem formatação. Quando escrevemos no editor’<’ e clicamos para ver como ficou o código HTML, verificamos que o caractere querepresenta sinal de menor, foi identificado como ’&lt;’.

É exatamente isso que esta função faz. Para realizar o processo contrário, ouseja, decodificar os caracteres, usamos a função html_entity_decode ou htmlspe-

Desenvolvimento Web com PHP Página 64

Page 66: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

cialchars_decode.

1 <?php

2 $string = "Tenha um <b>bom </b> dia!";

3 echo htmlentites($string);

4

5 // A saída será: Tenha um &lt;bom&gt; dia!

Também podemos enviar outros parâmetros a esta função, se queremos ou nãoque aspas na string sejam convertidas, bem como indicar qual o tipo de codificaçãoutilizado. No exemplo abaixo com o parâmetro ENT_QUOTES, estamos indicandoque as aspas utilizadas na string também devem ser convertidas.

1 <?php

2 $string = "E ela me disse: ’tenha um <b>bom dia </b>’ e eu tive.";

3 echo htmlentities($string , ENT_QUOTES);

4

5 // A saída será: E ela me disse: &#039; tenha um &lt;bom&gt ;&#039;

dia e eu tive.

Observe que para verificar se a saída está correta você precisa ver o código fonte dapágina.

4.2.6 Função htmlspecialchars

Esta função é praticamente idêntica com a função htmlentitles. O diferencial é quena função htmlentitles, todos os caracteres que tem entidades HTML equivalentes,serão convertidos.

1 <?php

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

Desenvolvimento Web com PHP Página 65

Page 67: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

3 echo htmlspecialchars ($string , ENT_QUOTES);

Observe que para verificar se a saída está correta você precisa ver o código fonte dapágina!

4.2.7 Função htmlspecialchars_decode

Podemos também realizar o processo inverso, ou seja, ao obter um texto que estejacodificado, podemos transformá-lo em caracteres comuns.

1 <?php

2 $string = "Se ’3 &gt; 2’ então ’2 &lt; 3’";

3 echo htmlspecialchars_decode ($string , ENT_QUOTES);

Observe que para verificar se a saída está correta você precisa ver o código fonte dapágina!

4.2.8 Função trim

Esta função retira espaços em branco no início e no final de uma string. Além deespaços, esta função remove tabulações e linhas em branco. Também é possívelpassar por parâmetro outros caracteres queremos remover.

1 <?php

2

3 $string = "\t\tTenha um bom dia!!! :) ";

4 echo $string;

5

6 $trimmed = trim($string);

Desenvolvimento Web com PHP Página 66

Page 68: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

7 echo $trimmed;

Veja que no exemplo acima, usando um simples echo, não conseguimos observarexatamente a saída e que os espaços foram removidos. Para visualizar com maisdetalhes o comportamento da string, vamos utilizar a função var_dump, que nos mos-trará o número de caracteres existentes na string original e na string modificada.

1 <?php

2

3 $string = "\t\tTenha um bom dia!!! :) ";

4 var_dump($string);

5

6 $trimmed = trim($string);

7 var_dump($trimmed);

Podemos também utilizar um segundo parâmentro para indicar quais caracteres doinício e do final da string deverão ser removidos. No exemplo abaixo estamos remo-vendo as letras "Te"do início e "do"do final da string. Assim a saída será "stan".

1 <?php

2

3 $string = "Testando";

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

5 var_dump($trimmed);

4.2.9 Função ucfirst

Esta é uma função bem simples, que recebe como parâmetro uma string e retornaesta string com o primeiro caracter em maiúsculo.

Desenvolvimento Web com PHP Página 67

Page 69: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

1 <?php

2

3 $string = ’hello world!’;

4 echo ucfirst($string);

5

6 // Saída Hello world!

4.2.10 Função ucwords

Parecida com ucfirst, porém a função ucwords converte para maiúsculo os primeiroscaracteres de todas as palavras de uma string:

1 <?php

2

3 $string = ’hello world!’;

4 echo ucwords($string);

5

6 // Saída Hello World!

4.2.11 Função lcfirst

O retorno desta função é o oposto do que vimos com ucfirst (upper case first). A fun-ção lcfirst (lower case first) transforma o primeiro caracter da string em minúsculo.

1 <?php

2

3 $string = ’Hello World!’;

4 echo lcfirst($string);

5

Desenvolvimento Web com PHP Página 68

Page 70: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

6 // Saída hello World!

4.2.12 Função nl2br

Esta função insere a tag <br /> no lugar das newlines presentes na string.

1 <?php

2

3 echo nl2br("linha 1\ nlinha2\nlinha3\n");

Observe que para verificar se a saída está correta você precisa ver o código fonte dapágina!

4.2.13 Função str_split

A função str_split transforma uma string em um array, ou seja, separa a string empedaços e cada pedaço estará alocado em uma posição de um vetor. Recebe comoparâmetro a string que será separada e como segundo parâmetro podemos indicarquantos caracteres deverão ficar em cada posição do vetor.

Observe que por padrão, ele irá separar cada caracter em uma posição do vetor:

1 <?php

2

3 $string = "Oi, tudo bem?";

4 $string1 = str_split($string);

5 print_r($string1);

6

7 ?>

Desenvolvimento Web com PHP Página 69

Page 71: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

8

9 // Saída: Array ( [0] => O [1] => i [2] => , [3] => [4] => t [5] =>

u [6] => d [7] => o [8] => [9] => b [10] => e [11] => m [12] =>

? )

Já neste segundo exemplo, estamos indicando que queremos separar os caracteresde 5 em 5:

1 <?php

2

3 $string = "Oi, tudo bem?";

4 $string2 = str_split($string , 5);

5 print_r($string2);

6

7 ?>

8

9 // Saída: Array ( [0] => Oi, t [1] => udo b [2] => em? )

4.2.14 Função str_repeat

Esta é uma função simples, que repete a string de acordo com o valor indicado.

1 <?php

2 echo str_repeat("@", 10);

3 ?>

4

5 Saída: @@@@@@@@@@

Desenvolvimento Web com PHP Página 70

Page 72: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

4.2.15 Função str_pad

A função str_pad preenche uma string com espaços em branco ou determinadoscaracteres afim de que a string fique com o tamanho desejado.

1 <?php

2 $string = "May the force be with you!";

3 print str_pad($string , 1000);

4 ?>

Observe que para verificar se a saída está correta você precisa ver o código fonte dapágina!

Podemos também escolher em que posição ficará e quais serão os caracteres depreenchimento:

1 <?php

2 $string = "May the force be with you!";

3 print str_pad($string , 50, "@", STR_PAD_LEFT);

4 print str_pad($string , 50, "@", STR_PAD_BOTH);

5 print str_pad($string , 50 , "@");

6 ?>

4.2.16 Função str_shuffle

Esta função recebe uma string e tem como retorno o contúdo desta string, porémcom seus caracteres misturados.

1 <?php

2

Desenvolvimento Web com PHP Página 71

Page 73: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

3 $string = ’labirinto ’;

4 $mix = str_shuffle($string);

5 echo $mix;

4.2.17 Função str_word_count

Função simples e muito útil. Conta o número de palavras em uma string. Utilizando oparâmetro 0, mostrará apenas o de palavras. Com o parâmetro 1 mostrará um arraycom todas as palavras encontradas naquela string. E com o parâmetro 2 retorna umarray onde a chave será a posição da palavra dentro da string.

1 <?php

2

3 $string = "Oi, como vai voce?";

4 print_r(str_word_count($string , 1));

5 echo str_word_count($string);

6

7 // Saída: Array ( [0] => Oi [1] => como [2] => vai [3] => voce ) 4

Ou também:

1 <?php

2

3 $string = "Oi, como vai voce?";

4 print_r(str_word_count($string , 2));

5 echo str_word_count($string);

6

7 // Saída: Array ( [0] => Oi [4] => como [9] => vai [13] => voce ) 4

Desenvolvimento Web com PHP Página 72

Page 74: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

4.2.18 Função strchr

Esta função é apenas um apelido para a função strstr

4.2.19 Função strstr

A função strstr encontra a primeira ocorrência de uma string. No exemplo abaixo,mostrará na tela apenas o que for encontrado depois do @:

1 <?php

2

3 $email = ’[email protected] ’;

4 $dominio = strstr($email , ’@’);

5 echo $dominio;

6

7 // Saída: linux.org

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

1 <?php

2

3 $user = strstr($email , ’@’, true);

4 echo $user;

5

6 // Saída: linus

Desenvolvimento Web com PHP Página 73

Page 75: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

4.2.20 Função strcmp

A funcão strcmp realiza uma comparação entre strings. No exemplo abaixo, como asduas strings são iguais, o retorno é 0. Se a string1 for maior que a string2 o retornoserá um valor maior de zero, caso contrário o retorno será menor que zero.

1 <?php

2

3 $string1 = ’2’;

4 $string2 = ’2’;

5 var_dump(strcmp($string1 , $string2));

4.2.21 Função strlen

A função strlen retorna o número de caracteres dentro de uma string. Lembrandoque espaços também são contabilizados!

1 <?php

2

3 $string = ’May the source be with you! ’;

4 echo strlen($string);

5

6 // Saída: 28

4.2.22 Função strpos

Retorna a posição onde se encontra determinada ocorrência dentro de uma string.Se a string for encontrada, retorna true, caso contrário, retorna false.

Desenvolvimento Web com PHP Página 74

Page 76: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

1 <?php

2

3 $string = ’0123456789 ’;

4 $procurar = ’7’;

5 $pos = strpos($string , $procurar);

6

7 if ($pos === false) {

8 echo "A string ’$procurar ’ não foi encontrada na string

’$string ’";

9 } else {

10 echo "A string ’$procurar ’ foi encontrada na string ’$string ’";

11 echo " e existe na posição $pos";

12 }

13

14 // Saída: A string ’7’ foi encontrada na string ’0123456789 ’ e

existe na posição 7

Apenas um detalhe. Ao realizar esta busca, use três sinais de igual para realizar acomparação (===). Ao usar apenas dois sinais de igual (==), quando o resultado fora posição 0, a função retornará que a string não foi encontrada, tendo em vista queo valor zero também equivale a false em booleano!

Pode fazer o teste!

1 <?php

2

3 $string = ’0123456789 ’;

4 $procurar = ’0’;

5 $pos = strpos($string , $procurar);

6

7 if ($pos == false) {

8 echo "A string ’$procurar ’ não foi encontrada na string

’$string ’";

9 } else {

Desenvolvimento Web com PHP Página 75

Page 77: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

10 echo "A string ’$procurar ’ foi encontrada na string ’$string ’";

11 echo " e existe na posição $pos";

12 }

13

14 // Saída: A string ’0’ não foi encontrada na string ’0123456789 ’

Agora usando três sinais de igual para realizar a comparação:

1 <?php

2

3 $string = ’0123456789 ’;

4 $procurar = ’0’;

5 $pos = strpos($string , $procurar);

6

7 if ($pos === false) {

8 echo "A string ’$procurar ’ não foi encontrada na string

’$string ’";

9 } else {

10 echo "A string ’$procurar ’ foi encontrada na string ’$string ’";

11 echo " e existe na posição $pos";

12 }

13

14 // Saída: A string ’0’ foi encontrada na string ’0123456789 ’ e

existe na posição 0

4.2.23 Função strrpos

Muito parecida com a função strpos, a função strrpos apresenta a última ocorrênciade um caracter em uma string.

No exemplo abaixo, observe que agora ao buscar o número zero, ele indica que suaposição é a 10 e não mais a zero.

Desenvolvimento Web com PHP Página 76

Page 78: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

1 <?php

2

3 $string = ’01234567890123456789 ’;

4 $procurar = ’0’;

5 $pos = strrpos($string , $procurar);

6

7 if ($pos == false) {

8 echo "A string ’$procurar ’ não foi encontrada na string

’$string ’";

9 } else {

10 echo "A string ’$procurar ’ foi encontrada na string ’$string ’";

11 echo " e existe na posição $pos";

12 }

13

14 // Saída: A string ’0’ foi encontrada na string

’01234567890123456789 ’ e existe na posição 10

4.2.24 Função strripos

Faz a mesma coisa que a função strrpos, porém não é case sensitive. Ou seja, irápesquisar pela última ocorrência de um caracter em uma string, ignorando se a letraestá maiúscula ou minúscula.

1 <?php

2 $string = ’abcdeABCDEabcdeABCDE ’;

3 $procurar = ’a’;

4 $pos = strrpos($string , $procurar);

5

6 if ($pos === false) {

7 echo "A string ’$procurar ’ não foi encontrada na string

’$string ’";

8 } else {

Desenvolvimento Web com PHP Página 77

Page 79: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

9 echo "A string ’$procurar ’ foi encontrada na string ’$string ’";

10 echo " e existe na posição $pos";

11 }

12

13 ?>

14

15 //Saída: A string ’a’ foi encontrada na string

’abcdeABCDEabcdeABCDE ’ e existe na posição 15

Perceba então, que o caracter ’a’ apesar está na posição 0, 5, 10 e 15, é apresentadocomo última ocorrência na posição 15, mesmo que o ’A’ que está na posição 15esteja em maiúsulo.

4.2.25 Função stripos

Faz a mesma coisa que a função strpos, porém não é case sensitive. Ou seja, irápesquisar pela primeira ocorrência de um caracter em uma string, ignorando se aletra está maiúscula ou minúscula.

1 <?php

2

3 $string = ’abcdeABCDEabcdeABCDE ’;

4 $procurar = ’A’;

5 $pos = stripos($string , $procurar);

6

7 if ($pos === false) {

8 echo "A string ’$procurar ’ não foi encontrada na string

’$string ’";

9 } else {

10 echo "A string ’$procurar ’ foi encontrada na string ’$string ’";

11 echo " e existe na posição $pos";

12 }

13

Desenvolvimento Web com PHP Página 78

Page 80: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

14 // Saída: A string ’a’ foi encontrada na string

’abcdeABCDEabcdeABCDE ’ e existe na posição 0

Perceba então, que o caracter ’A’ apesar está na posição 0, 5, 10 e 15, é apresentadocomo primeira ocorrência na posição 0, mesmo que o ’a’ que está na posição 0 estejaem minúsculo.

4.2.26 Função substr

Esta função retorna uma parte de uma string.

No exemplo abaixo, quero que a saída seja o caracter na posição zero até o caracterque está na penúltima posição (-1):

1 <?php

2

3 $string = substr("0123456789", 0, -1);

4 echo $string;

5

6 // Saída: 012345678

Agora quero retornar os valores da posição 1 até a posição 5:

1 <?php

2

3 $string = substr("0123456789", 1, -4);

4 echo $string;

5

6 // Saída: 12345

Desenvolvimento Web com PHP Página 79

Page 81: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

4.2.27 Função substr_replace

A função substr_replace, como o nome já diz, substitui uma string por outra. Noexemplo abaixo iremos substituir a palavra cedo por tarde:

1 <?php

2

3 $string = ’hoje acordei muito cedo.’;

4 echo "Original: $var <hr />\n";

5 echo substr_replace($var , ’tarde ’, -5, -1) . "<br />\n";

6

7 // Saída: hoje acordei muito tarde.

Neste exemplo iremos substituir a palavra cedo por um espaço vazio, ou seja, esta-remos deletando a plavra da string:

1 <?php

2

3 $string = ’hoje acordei muito cedo.’;

4 echo "Original: $var <hr />\n";

5 echo substr_replace($var , ’’, 12, -1) . "<br />\n";

6

7 // Saída: hoje acordei.

4.2.28 Função strtoupper

Função simples que retorna a string de entrada em letras maiúsculas.

1 <?php

2

Desenvolvimento Web com PHP Página 80

Page 82: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

3 $string = "Luke , eu sou seu pai!";

4 echo strtoupper($string);

5

6 // Saída: LUKE , EU SOU SEU PAI!

4.2.29 Função strtolower

Faz a mesma coisa que a função anterior porém ao contrário, ou seja, apresenta astring em caixa baixa.

1 <?php

2

3 $string = "Luke , eu sou seu pai!";

4 echo strtolower($string);

5

6 //Saída: Luke , eu sou seu pai!

Desenvolvimento Web com PHP Página 81

Page 83: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

4.3 Funções para arrays

4.3.1 Ordenação de arrays

Existem várias funções nativas no PHP para ordenarmos arrays. Na tabela abaixovocê pode ver as funções mais comuns e suas diferenças, servindo de referênciarápida na hora de ordenar um array.

4.3.2 Função array_map

A função array_map permite que todos os elementos de um array sejam modificadospor uma função, sem a necessidade de criar um loop, passando cada elemento paraa função.

Exemplo:

Desenvolvimento Web com PHP Página 82

Page 84: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

1 <?php

2 function cubo($num)

3 {

4 return $num*$num*$num;

5 }

6

7 $a = array(1, 2, 3, 4, 5);

8 $b = array_map("cubo", $a);

9 print_r($b);

10 ?>

No exemplo acima, a função cubo recebe um valor como parâmetro e retorna seuvalor multiplicado por ele mesmo três vezes. Isso eqüivale ao número ao cubo. Logodepois encontramos um arras denominado $a com 5 valores. Abaixo encontramosum arras $b que chama a função array_map. Esta função está chamando a funçãocubo e passando o array $a para que cada número dentro deste array seja calculadodentro da função cubo.

Como resultado, encontramos:

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

4.3.3 Função array_filter

A função array_filter, filtra o conteúdo de um array de acordo com a ação de algumafunção.

1 <?php

2

3 function impar($variavel)

4 {

Desenvolvimento Web com PHP Página 83

Page 85: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

5 return($variavel & 1);

6 }

7

8 function par($variavel)

9 {

10 return (!( $variavel & 1));

11 }

12

13 $vetor = array(6, 7, 8, 9, 10, 11, 12);

14

15 echo "Impares: \n";

16 print_r(array_filter($vetor , "impar"));

17 echo "Pares: \n";

18 print_r(array_filter($vetor , "par"));

O código acima irá exibir:

1 Impares:

2 Array

3 (

4 [1] => 7

5 [3] => 9

6 [5] => 11

7 )

8 Pares:

9 Array

10 (

11 [0] => 6

12 [2] => 8

13 [4] => 10

14 [6] => 12

15 )

Desenvolvimento Web com PHP Página 84

Page 86: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

4.3.4 Função array_chunk

A função de array_chunk divide um array em pedaços, retornando assim um arraymultidimensional.

1 <?php

2

3 $vetor = array(’a’, ’b’, ’c’, ’d’, ’e’, ’f’, ’g’, ’h’, ’i’);

4 print_r(array_chunk($vetor , 3));

O código acima irá exibir:

1 Array

2 (

3 [0] => Array

4 (

5 [0] => a

6 [1] => b

7 [2] => c

8 )

9

10 [1] => Array

11 (

12 [0] => d

13 [1] => e

14 [2] => f

15 )

16

17 [2] => Array

18 (

19 [0] => g

20 [1] => h

21 [2] => i

22 )

Desenvolvimento Web com PHP Página 85

Page 87: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

23

24 )

Perceba então que o array original com 9 itens foi separado em 3 arrays, com 3 itenscada.

4.3.5 Função array_combine

Esta função une dois arrays, sendo um array usado para as chaves e outro para ositens.

1 <?php

2

3 $vetor1 = array(’1’, ’2’, ’3’);

4 $vetor2 = array(’um’, ’dois ’, ’três’);

5 $vetor3 = array_combine($vetor1 , $vetor2);

6

7 print_r($vetor3);

Desta forma teremos o vetor1 indicando o índice do vetor e vetor2 indicando os va-lores.

O código acima irá exibir:

1 Array

2 (

3 [1] => um

4 [2] => dois

5 [3] => três

6 )

Desenvolvimento Web com PHP Página 86

Page 88: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

4.3.6 Função array_diff

Usado para verificar diferenças entre os valores de um array.

1 <?php

2

3 $vetor1 = array("a" => "amor", "paixão", "carinho", "saudade");

4 $vetor2 = array("b" => "amor", "paixão", "saudade");

5 $resultado = array_diff($vetor1 , $vetor2);

6 print_r($resultado);

O código acima irá exibir:

1 Array

2 (

3 [1] => carinho

4 )

4.3.7 Função array_merge

Faz a união/fusão entre um ou mais vetores, retornando o vetor resultante. Se osvetores tiverem a mesma chave string, o último valor irá sobrescrever o primeiro.Porém se a chave for numérica, o valor não será sobrescrito e sim adicionado aovetor resultante.

1 <?php

2

3 $vetor1 = array("cor" => "vermelho", 2, 4);

4 $vetor2 = array("a", "b", "cor" => "verde", "forma" =>

"trapezoide", 4);

Desenvolvimento Web com PHP Página 87

Page 89: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

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

6 print_r($resultado);

O código acima irá exibir:

1 Array

2 (

3 [cor] => verde

4 [0] => 2

5 [1] => 4

6 [2] => a

7 [3] => b

8 [forma] => trapezoide

9 [4] => 4

10 )

Perceba que a cor verde sobrepôs a cor vermelha ao realizar o merge, pois estavamutilizando o mesmo índice (string). Quando o índice era numérico não houve sobre-posição, então os demais valores foram apenas unidos, formando assim um novoarray.

4.3.8 Função array_fill

Preenche um array com valores pré-determinados.

1 <?php

2

3 $vetor = array_fill (5, 3, ’Preenchendo ’);

4 print_r($vetor);

O código acima irá exibir:

Desenvolvimento Web com PHP Página 88

Page 90: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

1 Array

2 (

3 [5] => Preenchendo

4 [6] => Preenchendo

5 [7] => Preenchendo

6 )

Onde o valor 5 indica o índice, ou seja, o vetor será preenchido a partir daqueleíndice. O valor 3 indica o número de itens a serem acrescentados.

4.3.9 Função array_flip

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

1

2 <?php

3

4 $vetor = array("a" => 0, "b" => 1, "c" => 2);

5 $vetor = array_flip($vetor);

6 print_r($vetor);

O código acima irá mostrar:

1 Array

2 (

3 [0] => a

4 [1] => b

5 [2] => c

6 )

Desenvolvimento Web com PHP Página 89

Page 91: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

4.3.10 Função array_reduce

Esta função reduz o vetor a um único valor, utilizando para isso uma função.

1 <?php

2 function soma($v, $w) {

3 $v += $w;

4 return $v;

5 }

6

7 $vetor = array(1, 2, 3, 4, 5);

8 $resultado = array_reduce($vetor , "soma");

9 echo $resultado;

Saída: 15

4.3.11 Função array_key_exists

Verifica se uma chave ou valor existe em um vetor.

1 <?php

2

3 $vetor = array("a" => 1, "b" => 2);

4 if (array_key_exists("b", $vetor)) {

5 echo "O elemento ’b’ está no array!";

6 }

Desenvolvimento Web com PHP Página 90

Page 92: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

4.3.12 Função array_search

Esta função faz uma busca em um vetor por um valor. Ao encontrá-lo, retorna achave indicando a posição em que o valor se encontra.

1 <?php

2

3 $vetor = array(0 => ’a’, 1 => ’b’, 2 => ’c’, 3 => ’d’);

4 $chave = array_search(’d’, $vetor);

5 echo $chave;

Saída: 3

4.3.13 Função array_slice

Esta função retorna uma parte de um vetor.

1 <?php

2 $vetor = array("a", "b", "c", "d", "e");

3 print_r(array_slice($vetor , 0, 3));

4 ?>

Onde 0 indica o índice do primeiro valor e 3 indica o número de itens que deve serapresentado.

Saída:

1 Array

2 (

3 [0] => a

Desenvolvimento Web com PHP Página 91

Page 93: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

4 [1] => b

5 [2] => c

6

7 )

4.3.14 Função array_splice

Esta função remove uma parte do vetor e subsitui com outros valores.

1 <?php

2

3 $vetor = array("vermelho", "verde", "azul", "amarelo");

4 array_splice($vetor , -1, 1, array("preto", "marrom"));

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

4.3.15 Função array_replace

Substitui valores de um vetor

1 <?php

2 $vetor = array("laranja", "banana", "maçã", "mamão");

3 $subtituir = array(0 => "abacaxi", 4 => "cereja");

4 print_r(array_replace($vetor , $substituir));

5 ?>

Saída:

Desenvolvimento Web com PHP Página 92

Page 94: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

1 Array

2 (

3 [0] => abacaxi

4 [1] => banana

5 [2] => maçã

6 [3] => mamão

7 [4] => cereja

8 )

4.3.16 Função array_sum

Função simples, que retorna a soma dos valores do vetor.

1 <?php

2

3 $vetor = array(1, 2, 3, 4);

4 echo "A soma dos valores é = ".array_sum($vetor);

Saída: 11

4.3.17 Função array_unique

Pesquisa por valores duplicados no array, removendo-os.

1 <?php

2

3 $vetor = array(1 => "verde", 2 => "vermelho", 3 => "verde", 4 =>

"azul", 5 => "vermelho");

Desenvolvimento Web com PHP Página 93

Page 95: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

4 $resultado = array_unique($vetor);

5 print_r($resultado);

O código acima irá mostrar:

1 Array

2 (

3 [1] => verde

4 [2] => vermelho

5 [4] => azul

6

7 )

4.3.18 Função array_walk

Aplica uma função a cada item do vetor.

1 <?php

2

3 $frutas = array("limão", "laranja", "banana", "melancia");

4

5 function test_print($item , $key) {

6 echo "$key. $item <br >\n";

7 }

8

9 array_walk($frutas , ’test_print ’);

Desenvolvimento Web com PHP Página 94

Page 96: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

4.3.19 Função in_array

Mais uma função que verifica se determinado valor está presente em um vetor.

1 <?php

2

3 $vetor = array("um", "dois", "três", "quatro");

4 if (in_array("dois", $vetor)) {

5 echo "Encontrei o valor dois";

6 }

4.3.20 Função sizeof

É sinônimo para a função count().

4.3.21 Função count

A função count conta o número de itens em um vetor.

1 <?php

2

3 $vetor = array("um", "dois", "três", "quatro");

4 $resultado = count($vetor);

5 echo $resultado;

Saída: 4

Desenvolvimento Web com PHP Página 95

Page 97: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

4.3.22 Função serialize

A função serialize permite que você transforme um array em uma string, que podeser armazenada de várias formas diferentes.

1 <?php

2

3 $array = array(’Luke ’, ’Leia ’, ’Han Solo ’, array(’Vader ’, ’Storm

Trooper ’));

4 serialize($array);

No exemplo acima a variável contém um array multidimensional e utilizamos a funçãoserialize para armazenar estes dados como uma string.

4.3.23 Função unserialize

Faz o processo contrário ao serialize, ou seja, converte os dados armazenados nobanco de dados, em PHP.

Desenvolvimento Web com PHP Página 96

Page 98: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

4.4 Outras funções

4.4.1 Função mail

A função mail, como o próprio nome diz, permite o envio de e-mails através do PHP.

1 <?php

2

3 $messagem = "Olá\nEnvio este e-mail para desejar\num bom dia!!!";

4 mail(’[email protected]’, ’Assunto ’, $messagem);

Onde: [email protected] refere-se ao destinatário

Assunto é a string que indica o assunto do e-mail

E no parâmetro final temos a mensagem, que preferencialmente deve ser colocadaem uma variável.

4.4.2 Função md5

A função md5 calcula o hash md5 de uma string.

1 <?php

2

3 $string = ’exemplo ’;

4 echo md5($string)

Desenvolvimento Web com PHP Página 97

Page 99: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funções Nativas

4.4.3 Função sha1

Assim como a função md5(), existem outras, relacionadas a outros tipos de algorit-mos de hash como por exemplo sha1(), crc32(), etc. A função sha calcula a hashsha1 de uma string.

1 <?php

2

3 $string = ’exemplo ’;

4 echo sha1($string)

Também é possível utilizar a função sha1_file() para criar um hash de um arquivoutilizando o algoritmo sha1.

4.4.4 Função hash

Ainda é possível utiliza a função hash, que permite escolhermos qual tipo de algo-ritmo de hash enviar como parâmetro para a função:

1 <?php

2

3 $string = ’exemplo ’;

4 echo hash(md5 , $string)

Desenvolvimento Web com PHP Página 98

Page 100: Apostila Completa de PHP Linux

Capítulo 5

Funcionalidades Web

Page 101: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funcionalidades Web

5.1 Protocolo HTTP

Toda aplicação web, seja ela construída utilizando PHP, Python, Ruby, Java ou qual-quer outra linguagem, vive sob as normas e especificações do protocolo HTTP. Oprotocolo HTTP, HyperText Transfer Protocol, define como mensagens são formata-das e transmitidas, além de quais ações servidores web e navegadores devem tomarem resposta a vários comandos diferentes. Por exemplo, quando você coloca umaURL em seu navegador, isso na verdade envia um comando HTTP para o servidorweb desta página, que irá localizar o documento que você quer ver e transmiti-lo paraseu navegador.

O protocolo HTTP é um protocolo stateless, já que cada comando é executado inde-pendentemente, sem qualquer conhecimento dos comandos que vieram antes deleou que virão depois dele. Este é o principal motivo do desenvolvimento de aplica-ções para web ser tão diferente e peculiar, comparado com o desenvolvimento desoftware em geral. Um protocolo stateless é um protocolo onde seus comandos sãoindependentes, assim como nossos scripts PHP. Eles são executados e terminados,sem qualquer persistência na memória. Coincidência? Não, o PHP foi feito com aweb e o protocolo HTTP em mente.

São definidos no protocolo HTTP oito métodos que indicam a ação a ser realizadaa partir de uma requisição. Os oito métodos são GET, HEAD, POST, PUT, DELETE,TRACE, OPTIONS e CONNECT.

Desenvolvimento Web com PHP Página 100

Page 102: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funcionalidades Web

5.2 Sessões

O protocolo HTTP é stateless, portanto, cada requisição GET, POST, PUT, etc. éindependente. Não é possível saber se o GET feito há 5 minutos foi feito por mim oupor outro usuário. Isso complica um pouco a nossa vida quando queremos criar, porexemplo, aplicações com autenticação, com partes da aplicação acessíveis somentepor um usuário específico.

Para contornar este problema, existe a sessão. A sessão pode ser criada pelo PHP,que irá identificar o usuário e manter uma sessão viva para ele. Cada visitante teráuma sessão e através dela poderemos identificar quem é que, inclusive, autenticá-los.

O tempo de vida de uma sessão é, por padrão, 24 minutos. Esse valor pode seralterado na configuração do PHP, alterando a diretiva session.gc_maxlifetime.

Desenvolvimento Web com PHP Página 101

Page 103: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funcionalidades Web

5.3 Cookies

Um cookie é uma forma de armazenar informações no navegador de um usuário. Onavegador guarda informações de um website que podem ser acessadas posterior-mente por este website, até que o cookie expire ou seja removido. Essas informa-ções podem ser criadas, alteradas, removidas e acessadas somente pelo website deorigem.

Podemos utilizar cookies para vários fins, mas seu uso mais comum é para salvar aspreferências do usuário na sua aplicação (língua padrão, cor do texto, se ele gosta decafé ou chá, etc.). Também é comum utilizar cookies para manter um usuário logadoem nosso sistema, mesmo que a sessão expire.

Cookies possuem um tempo de vida, definido pelo website que o criou. O navegadorirá removê-los automaticamente quando este tempo de vida expirar, mas o usuáriosempre poderá limpar os cookies de seu navegador manualmente.

Desenvolvimento Web com PHP Página 102

Page 104: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funcionalidades Web

5.4 GET e POST

O método GET serve para fazer uma requisição de recurso, seja este recurso umapágina web (HTML), um script (PHP) ou qualquer outro arquivo, como uma imagemou um vídeo. Uma vez feita a requisição, o servidor irá retornar o recurso pedido.

O método POST serve para enviar dados a serem processados pelo recurso espe-cificado. Os dados a serem processados são sempre inclusos no corpo do métodoPOST. É através do método POST que é possível preencher e processar formuláriosna web.

Desenvolvimento Web com PHP Página 103

Page 105: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funcionalidades Web

5.5 Headers HTTP

Já falamos do protocolo HTTP e de suas requisições. Toda requisição possui umcorpo e toda requisição deve receber uma resposta. Headers HTTP, ou cabeçalhosHTTP, são estes corpos. Eles carregam informações de requisições e respostas,especificando os métodos utilizados, seus parâmetros e suas informações.

Por exemplo, quando colocamos uma URL em nosso navegador e apertamos enter,a seguinte requisição é enviada:

1 GET /minhapagina.php HTTP /1.1

2 Host: meusite.com

3 User -Agent: Mozilla /5.0 (X11; Linux i686) AppleWebKit /534.30

(KHTML , like Gecko) Ubuntu /10.10 Chromium /12.0.742.112

Chrome /12.0.742.112 Safari /534.30

4 Accept:

text/html ,application/xhtml+xml ,application/xml;q=0.9 ,*/*;q=0.8

5 Accept -Language: en-us,en;q=0.5

6 Accept -Encoding: gzip ,deflate ,sdch

7 Accept -Charset: ISO -8859-1,utf -8;q=0.7 ,*;q=0.7

8 Keep -Alive: 300

9 Connection: keep -alive

10 Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120

11 Pragma: no-cache

12 Cache -Control: no-cache

Após essa requisição, nosso navegador receberá uma resposta. Que parece maisou menos com isto:

1 HTTP /1.x 200 OK

2 Transfer -Encoding: chunked

3 Date: Thu , 18 Aug 2011 14:38:14 GMT

4 Server: Apache

Desenvolvimento Web com PHP Página 104

Page 106: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funcionalidades Web

5 Connection: close

6 Pragma: public

7 Etag: "be65d40792fe1a9d5bebcad7dfdd8205"

8 Cache -Control: max -age=3600, public

9 Content -Type: text/html; charset=UTF -8

10 Last -Modified: Thu , 18 Aug 2011 14:38:14 GMT

11 Content -Encoding: gzip

12 Vary: Accept -Encoding , Cookie , User -Agent

13

14 CONTEÚDO DA PÀGINA AQUI

Isso, basicamente, são cabeçalhos HTTP. Os cabeçalhos contém informações sobrea requisição e a resposta. Quando estamos em um script PHP, podemos manipularo conteúdo do cabeçalho da resposta. Para manipular o cabeçalho HTTP, usamos afunção header().

A manipulação mais simples de cabeçalho HTTP é a manipulação do local da página.Ao trocarmos o valor do local da página, faremos com que o navegador redirecionepara o novo valor. Por exemplo:

1 <?php

2

3 header(’Location: http ://www.4linux.com.br ’);

Quando entrarmos nesse script PHP, seremos redirecionados para a página inicialda 4Linux. Podemos também manipular os cabeçalhos HTTP e dizer que a páginanão é realmente uma página, e sim, um arquivo qualquer. Por exemplo:

1 <?php

2 header(’Content -type: application/pdf ’);

3

4 header(’Content -Disposition: attachment; filename="documento.pdf"’);

5

Desenvolvimento Web com PHP Página 105

Page 107: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funcionalidades Web

6 readfile(’4Linux.pdf ’);

No código acima estamos alterando o tipo de conteúdo da página e sua disposição.Agora o navegador sabe que está acessando não uma página web, mas um arquivoPDF. Através da manipulação do Content-Disposition, o navegador irá baixar o ar-quivo ao invés de exibi-lo. Na terceiro linha, usamos a função readfile para carregaro conteúdo do arquivo 4Linux.pdf em nosso script.

Desenvolvimento Web com PHP Página 106

Page 108: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funcionalidades Web

5.6 Variáveis superglobais

No PHP, existem variáveis nativas que estão disponíveis em qualquer escopo. Elassão, na maioria das vezes, arrays bidimensionais ou multidimensionais. As variáveissupergloais são essenciais para qualquer aplicação web. Já vimos um pouco sobrePOST e GET e logo logo veremos como trabalhar com eles no PHP.

5.6.1 $_SERVER

Contém informações sobre ambiente de execução do script. Caso o script estejasendo rodado em um servidor web, informações sobre o cliente e o servidor serãoexibidas. Caso o script esteja sendo executado da linha de comando, informaçõessobre a máquina e o shell serão exibidas.

5.6.2 $_ENV

Contém todas as variáveis do ambiente de execução. É muito comum utilizarmos a$_ENV quando estamos desenvolvendo scripts de linha de comando e precisamosacessar variáveis de ambiente definidas por outros processos ou o usuário.

5.6.3 $_GET

Contém variáveis passadas para o script usando o método HTTP GET, isto é, atravésda URL.

1 <?php

2 echo $_GET[’meunome ’]; // Retorna Zé

Desenvolvimento Web com PHP Página 107

Page 109: Apostila Completa de PHP Linux

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=Zé

5.6.4 $_POST

Contém variáveis passadas para o script usando o método HTTP POST, isto é, atra-vés de um formulário.

1 <?php

2

3 if($_POST){

4 echo $_POST[’meunome ’];

5 }

6

7 ?>

8 <form action="teste.php" method="POST">

9 <input type="text" name="meunome" />

10 <input type="submit" value="Enviar" />

11 </form >

5.6.5 $_SESSION

Contém variáveis definidas durante a sessão do navegador. Deve ser usada juntocom a função session_start().

1 <?php

2 session_start ();

3

4 $_SESSION[’MeuCarro ’] = ’Palio ’;

5

6 echo $_SESSION[’MeuCarro ’];

Desenvolvimento Web com PHP Página 108

Page 110: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funcionalidades Web

5.6.6 $_COOKIE

A variável superglobal $_COOKIE contém as informações de nosso cookie, armaze-nadas em um array. Para criar um cookie, utilizamos a função setcookie().

1 <?php

2 setcookie("MeuCarro", "Palio");

3 echo $_COOKIE[’MeuCarro ’];

Podemos determinar o tempo de vida de um cookie passando um terceiro parâmetropara a função. Este terceiro parâmetro é a data de expiração do cookie, no formatode timestamp UNIX. Para definirmos essa data de forma mais amigável e legível,vamos utilizar a função strtotime() que converte uma frase de data em uma timestampUNIX.

1 <?php

2 setcookie("MeuCarro", "Palio", strtotime("+1 month"));

3 echo $_COOKIE[’MeuCarro ’];

Nosso cookie irá expirar em um mês a partir da data de hoje.

5.6.7 $_REQUEST

Contém informações sobre as superglobais $_GET, $_POST e $_COOKIE. Não éuma boa prática utilizá-la, nem muito seguro.

5.6.8 $_FILES

Contém informações sobre arquivos enviados através de um formulário.

Desenvolvimento Web com PHP Página 109

Page 111: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funcionalidades Web

5.6.9 $GLOBALS

Contém todas as variáveis disponíveis no escopo global

1 <?php

2

3 function carro() {

4 $carro = "Fiesta local";

5

6 echo ’$carro no escopo global ’ . $GLOBALS["carro"] . ’ <br/>’;

7 echo "\$carro no escopo local: $carro";

8 }

9

10 $carro = "Fiesta global";

11 echo carro();

Desenvolvimento Web com PHP Página 110

Page 112: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funcionalidades Web

5.7 Formulários

Processamento de formulários é uma das tarefas mais comuns quando estamos tra-balhando com aplicações web. É através dos formulários que nossos usuários po-dem manipular e gerenciar informações, portanto é possível dizer que os formuláriossão a pedra filosofal das aplicações web.

Quando um formulário é enviado, suas informações são enviadas para algum lugaratravés do método POST. Este "algum lugar"irá interpretar as informações e fazer"alguma coisa"com elas. Como fazemos essa teoria virar prática? Fácil. Já conhe-cemos o protocolo, seus métodos e variáveis superglobais no PHP. Para montar umformulário e processá-lo, só nos falta criar o formulário:

exemplos/formulario.html

1 <html>

2 <head>

3 <h1>Meu formulário</h1>

4

5 <form action="processa.php" method="POST">

6 <p><label>Nome: </label><input type="text" name="nome" /></p>

7 <p><label>Email: </label><input type="text" name="email" /></p>

8 <p></p>

9 <p><input type="submit" value="Enviar" /></p>

10 </form>

11

12 </head>

13 </html>

Nosso formulário é bem simples. Observe que o campo action está direcionandopara o arquivo processa.php. É este arquivo que vai receber a requisição POST eprocessar as informações do nosso formulário vindas no cabeçalho. Não temos eleainda, certo? Então vamos criá-lo:

exemplos/processa.php

1 <?php

Desenvolvimento Web com PHP Página 111

Page 113: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funcionalidades Web

2

3 echo "Recebi um formulário de {$_POST[’nome ’]}, com o email

{$_POST[’email ’]}.";

Não é um processamento muito rebuscado, mas ainda é um exemplo. Observe queestamos pegando as informações de nosso formulário utilizando a variável superglo-bal $_POST. A partir deste exemplo, podemos fazer qualquer coisa. Guardar estasinformações em um arquivo, um banco de dados, enviar por email, etc.

Agora, observe este segundo exemplo. Não vamos mais ter o formulário em umapágina e processá-lo em outra, vamos fazer tudo em uma só página.

exemplos/formulario.php

1 <?php

2

3 if($_POST) {

4 echo "Recebi um formulário de {$_POST[’nome ’]}, com o email

{$_POST[’email ’]}.";

5 }

6

7 ?>

8 <html >

9 <head >

10 <h1>Meu formulário </h1>

11

12 <form action="" method="POST">

13 <p><label >Nome: </label ><input type="text" name="nome" /></p>

14 <p><label >Email: </label ><input type="text" name="email" /></p>

15 <p></p>

16 <p><input type="submit" value="Enviar" /></p>

17 </form >

18

19 </head >

20 </html >

Note que o campo action está vazio. Quando o campo action de um formulário está

Desenvolvimento Web com PHP Página 112

Page 114: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Funcionalidades Web

vazio, ele irá fazer a requisição para a própria página. Note também que temos umacondição envolvendo nosso echo. Essa condição serve para executarmos aquelebloco de código somente quando recebermos uma requisição POST. Mas porqueisso? Porque não queremos acessar a variável superglobal $_POST sem que elapossua valores, senão, teremos alguns erros em nossa página.

Desenvolvimento Web com PHP Página 113

Page 115: Apostila Completa de PHP Linux

Capítulo 6

Banco de Dados

Page 116: Apostila Completa de PHP Linux

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 encontraraplicações que utilizam alguma forma de armazenamento de dados. Estes dadospodem estar sendo armazenados em simples arquivos no sistema de arquivos demáquina, ou podem estar sendo armazenados em estruturas mais complexas comoum banco de dados. Bancos de dados, em sua grande maioria, são constituídoscom base nas relações existentes entre suas entidades, dando o nome de bancosde dados relacionais.

Um banco de dados é um conjunto de registros organizados em uma estrutura pré-definida. Ele é composto de tabelas, linhas e colunas. As tabelas são como pastas,onde guardamos vários tipos de informações. Linhas são os registros dentro dessas"pastas"e as colunas são tipos de informações que as linhas possuem. Em outraspalavras, as colunas definem a estrutura dos dados e as linhas são os dados emsi.

Desenvolvimento Web com PHP Página 115

Page 117: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

6.2 O que é SQL?

SQL, conhecida como Structured Query Language, é uma linguagem de programa-ção declarativa, criada para gerenciar informações em um sistema gerenciador debanco de dados. É com a SQL que podemos criar, alterar, remover e ler informa-ções de nosso banco de dados. Existem dois grandes tipos de comandos SQL: umadeclaração e uma consulta. Em uma consulta, ou query, especificamos cláusulas eexpressões para ler informações do banco. Em uma declaração, fazemos o mesmo,mas com o objetivo de executar algo (como uma remoção, alteração, etc.).

Desenvolvimento Web com PHP Página 116

Page 118: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

6.3 MySQL

O MySQL é um sistema de gerenciamento de banco de dados, que utiliza a lingua-gem SQL como interface. Ele foi inventado em 1994 e sua primeira versão lançadaem 1995. Desde o surgimento do PHP 3, o MySQL tornou-se um fiel aliado, sendousados juntos na maioria dos projetos para web. Um banco de dados é nada mais,nada menos, que um conjunto de registros organizados.

Desde a versão 3, o PHP possui um suporte muito sólido ao MySQL. Hoje, na ver-são 5, existem três formas de nos comunicarmos com um banco de dados MySQL.Existe a extensão MySQL clássica, que existe desde a versão 3, e existe também aextensão MySQL Improved (mysqli), adicionada na versão 5. E, é claro, a extensãoPDO (PHP Data Objects), também adicionada na versão 5. Neste curso, aprendere-mos a trabalhar com a extensão clássica. No segundo curso da Formação PHP da4Linux trabalharemos com o PDO.

6.3.1 Instalando o MySQL

A grande maioria das distribuições Linux possuem pacotes do MySQL em seus re-positórios. Isso nos ajuda muito e torna a instalação do MySQL muito simples erápida. Abra o shell, logue como root e use o gerenciador de pacotes para instalar oMySQL:

1 su

2 apt -get update

3 apt -get install mysql -server

Durante a instalação o MySQL irá pedir para você definir uma senha padrão para ousuário root no MySQL. Escolha uma senha ou coloque 123456.

Desenvolvimento Web com PHP Página 117

Page 119: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

6.3.2 Trabalhando com o MySQL

Podemos trabalhar com o MySQL através da linha de comando ou através de apli-cativos gráficos, que facilitam a administração de bancos de dados. Mas, antes deconhecer as ferramentas gráficas e suas vantagens, vamos ver como podemos tra-balhar com o MySQL através do shell.

Abra o shell e inicie o MySQL:

1 mysql -u root -p

O MySQL irá pedir a senha do usuário root. Por padrão, essa senha é definida porvocê durante a instalação do MySQL. Uma vez dentro do shell do MySQL, podemoscomeçar a interagir com o sistema gerenciador de banco de dados utilizando a lin-guagem SQL. Antes de trabalharmos em um banco de dados, precisamos selecioná-lo para uso. No mySQL, fazemos isso utilizando o comando USE:

1 USE nomedobanco;

Desenvolvimento Web com PHP Página 118

Page 120: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

6.4 PostgreSQL

O PostgreSQL é um poderoso sistema gerenciador de banco de dados objeto-relacionalde código aberto e 100% livre. O PostgreSQL é considerado o banco de dados li-vre mais avançado do mundo por várias razões. Suporta largamente os padrõesANSI-SQL 92/99 e respeita a normativa ACID. É altamente extensível, tem vários ti-pos de índices para diversos tipos de aplicações. Ele é utilizado em larga escala porempresas como Skype, Caixa Econômica Federal e Datasus.

O PHP trabalha muito bem com o PostgreSQL e, assim como o MySQL, possuiextensões nativas para trabalhar com ele. Existem duas formas de nos comunicar-mos com um banco de dados PostgreSQL: a primeira, utilizando a extensão pgsql,e a segunda, utilizando o PDO. Neste curso vamos conhecer a extensão pgsql ecomo usá-la para fazer nossas aplicações interagirem com um banco de dados Post-greSQL.

6.4.1 Instalando o PostgreSQL

A grande maioria das distribuições Linux possuem pacotes do PostgreSQL em seusrepositórios. Isso nos ajuda muito e torna a instalação do PostgreSQL muito simplese rápida. Abra o shell, logue como root e use o gerenciador de pacotes para instalaro PostgreSQL:

1 su

2 apt -get update

3 apt -get install postgresql

Desenvolvimento Web com PHP Página 119

Page 121: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

6.4.2 Trabalhando com o PostgreSQL

Podemos trabalhar com o PostgreSQL através da linha de comando ou através deaplicativos gráficos, que facilitam a administração de bancos de dados. Mas, antesde conhecer as ferramentas gráficas e suas vantagens, vamos ver como podemostrabalhar com o PostgreSQL através do shell.

Para trabalhar com o PostgreSQL, você precisa estar logado como o superusuáriopostgres.

1 su - postgres

Agora você pode abrir o cliente do PostgreSQL:

1 psql

Uma vez dentro do shell do PostgreSQL, podemos começar a interagir com o sistemagerenciador de banco de dados utilizando a linguagem SQL. Antes de trabalharmosem um banco de dados, precisamos selecioná-lo para uso. No PostgreSQL, fazemosisso pela linha de comando passando um parâmetro para o psql:

1 psql nomedobanco

Desenvolvimento Web com PHP Página 120

Page 122: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

6.5 SQLite

O SQLite é um sistema gerenciador de banco de dados embutido escrito utilizando alinguagem de programação C. O SQLite é distribuído como uma biblioteca que podeser facilmente embarcada em sua aplicação, sem a necessidade de um processo ouo uso de um sistema gerenciador de banco de dados externo. Ele é 100% livre e decódigo aberto.

O SQLite é muito utilizado para armazenamento rápido e simples de informações, jáque ele é muito leve e pode ser embutido em uma aplicação facilmente. Ele é umpouco diferente de outros sistemas de banco de dados, já que ele possui tipagemdinâmica. Uma coluna no SQLite não possui um tipo, já os valores sim. Isso significaque uma mesma coluna pode ter inteiros, doubles e string.

O PHP possui uma extensão para se trabalhar com o SQLite. Essa extensão trazdentro de si o próprio SQLite, então podemos dizer que é como se o PHP tivesseum banco de dados embutido, sem precisarmos conectar ou instalar um sistemagerenciador de banco de dados como MySQL ou PostgreSQL.

Desenvolvimento Web com PHP Página 121

Page 123: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

6.6 SQL básico

Vamos conhecer alguns comandos SQL básicos para montarmos nosso primeirobanco de dados. Embora o padrão SQL seja único, diferentes sistemas gerencia-dores de banco de dados implementam o padrão de maneiras diferentes. Portanto,alguns comandos em MySQL são diferentes em PostgreSQL. Vamos mostrar aqui asprincipais diferenças.

Note que a linguagem SQL é muito fácil de compreender. Quando você está fazendouma declaração ou consulta, é praticamente uma frase que você está escrevendo.Justamente por isso, é fácil se confundir entre informações e comandos. Portanto,quando estiver escrevendo SQL, escreva comandos, cláusulas e expressões semprecom letras maiúsculas, e informações, minúsculas.

6.6.1 Create

O comando CREATE permite que nós criemos uma série de elementos comuns emum banco de dados. Com o comando create, podemos criar bancos de dados, tabe-las, índices, sequências e muito mais. Vamos conhecer os casos mais comuns deuso do Create.

Criar um banco de dados

Podemos criar um banco de dados utilizando a seguinte declaração SQL:

1 CREATE DATABASE nomedobanco;

Observe que declarações SQL sempre devem ser terminadas com um ponto-e-vírgula.

Criar uma tabela

Desenvolvimento Web com PHP Página 122

Page 124: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

Podemos criar uma tabela em nosso banco de dados utilizando a seguinte declara-ção SQL:

1 CREATE TABLE posts (

2 id INTEGER ,

3 titulo VARCHAR (255),

4 conteudo TEXT ,

5 PRIMARY KEY (id)

6 );

Uma tabela é como uma pasta, onde podemos guardar informações separadas porcolunas. Vamos criar uma tabela "posts", para guardar as informações dos posts denosso blog, como o seu título e o conteúdo do post.

Observe que, a cada linha, criamos colunas para nossa tabela. Colunas são comoseções da pasta que criamos, que podem conter determinados tipos de informações.Esses tipos de informações foram especificados na própria linha, onde dizemos de-pois do nome da coluna se ela é VARCHAR ou TEXT. Logo veremos mais sobreisso.

Observe também a linha PRIMARY KEY. Primary key significa chave primária e, doponto de vista de bancos de dados relacionais, é a chave que identifica o registro emuma tabela. Cada registro é único e possui um valor. Esse valor é a chave primária.Precisamos de uma coluna para nossas chaves primárias e estamos dizendo que acoluna id será essa coluna.

Criar uma sequência

Podemos criar uma sequência para uma tabela de nosso banco de dados utilizandoa seguinte declaração SQL:

1 CREATE SEQUENCE nome_da_sequencia;

Desenvolvimento Web com PHP Página 123

Page 125: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

Sequências são úteis para colunas que devem ser automaticamente incrementadasou 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 se-guinte declaração SQL:

1 CREATE INDEX nome_do_indice ON tabela (coluna , outracoluna);

Índices servem para melhorar a performance de nosso banco. Quando fazemos mui-tas consultas em algumas colunas, é importante que seja criado um índice nessascolunas.

6.6.2 Chaves estrangeiras

Além de chaves primárias, nossas tabelas podem ter chaves estrangeiras. Chavesestrangeiras são chaves que estão diretamente relacionadas com outras chaves deoutras tabelas no mesmo banco de dados. Por exemplo: um post e um usuário. Umpost está diretamente relacionado ao seu autor, isto é, usuário. Portanto, podemoscriar uma chave estrangeira e relacionar a tabela de posts com usuários:

1 CREATE TABLE usuarios (

2 usuario_id INT NOT NULL AUTO_INCREMENT ,

3 usuario VARCHAR (255) NOT NULL ,

4 senha VARCHAR (40) NOT NULL ,

5 PRIMARY KEY (usuario_id),

6 INDEX (usuario_id)

7 ) ENGINE=INNODB;

8

9 CREATE TABLE posts (

10 post_id INT NOT NULL AUTO_INCREMENT ,

Desenvolvimento Web com PHP Página 124

Page 126: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

11 autor INT NOT NULL ,

12 post VARCHAR (140) NOT NULL ,

13 PRIMARY KEY (post_id),

14 INDEX (post_id),

15 FOREIGN KEY autor (autor) REFERENCES usuarios (usuario_id)

16 ON UPDATE CASCADE ON DELETE CASCADE

17 ) ENGINE=INNODB;

Observe a linha ON UPDATE CASCADE ON DELETE CASCADE. Esta linha de-termina o comportamento que será adotado pelo banco de dados caso um registrodesta tabela seja alterado ou removido. A opção CASCADE faz com que as rela-ções (de chave estrangeira) sejam automaticamente removidas, sem que haja umaintervenção manual. Sem a opção cascade, não poderíamos remover um post.

6.6.3 Alter

O comando ALTER permite que nós alteremos as características de um banco dedados ou tabela existente. Podemos alterar as colunas de uma tabela utilizando oalter da seguinte forma:

1 ALTER TABLE posts MODIFY titulo TEXT;

2 ALTER TABLE posts ADD autor VARCHAR (100);

3 ALTER TABLE posts DROP conteudo;

4 ALTER TABLE posts ADD PRIMARY KEY (id);

Na primeira linha estamos modificando o tipo da coluna titulo para TEXT. Na se-gunda, adicionamos uma nova coluna chamada autor. Na terceira, removemos acoluna conteudo. E, na última linha, adicionamos uma chave primária em nossatabela na coluna id.

Desenvolvimento Web com PHP Página 125

Page 127: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

6.6.4 Drop

O comando DROP permite que nós deletemos bancos de dados e tabelas. Ele émuito similar ao create, mas possui menos parâmetros.

1 DROP TABLE posts;

2 DROP TABLE posts , usuarios , comentarios;

3 DROP DATABASE banco;

6.6.5 Truncate

O comando TRUNCATE permite que nós esvaziemos uma tabela em nosso bancode dados. Isso irá remover todos os registros de uma tabela.

1 TRUNCATE TABLE posts;

6.6.6 Insert

O comando INSERT permite a inserção de registros em uma tabela. É com ele quenós podemos começar a aprender mais sobre manipulação de dados em um bancode dados relacional. Para inserir informações em uma tabela, podemos:

1 INSERT INTO posts (titulo , conteudo) VALUES (’Meu primeiro post ’,

’Este post é muito legal , tri legal!’);

2 INSERT INTO posts (titulo , conteudo) VALUES (’O Grêmio ganhou!’, ’O

tricolor ataca de novo!’);

Desenvolvimento Web com PHP Página 126

Page 128: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

Observe que estamos especificando não só os valores que queremos inserir, masonde queremos inseri-los. Especificamos que vamos inserir dados nas colunas tituloe conteudo, e logo depois com a cláusula VALUES, especificamos que valores irãonestas colunas respectivamente.

6.6.7 Update

Podemos utilizar o comando UPDATE para atualizar registros em uma tabela. Paraatualizar registros, podemos:

1 UPDATE posts SET titulo = ’Novo post ’ WHERE titulo = ’Meu primeiro

post ’;

2 UPDATE posts SET titulo = ’Novo post ’, conteudo = ’Novo conteudo ’

WHERE id=1;

Usamos a cláusula SET para especificar quais colunas receberão novos valores.Podemos especificar mais de uma coluna separando-as por vírgulas.

Observe que temos uma cláusula WHERE junto de nosso comando UPDATE. A cláu-sula WHERE espera uma condição e serve como filtro. Caso os registros de nossatabela batam com a condição especificada no WHERE, eles serão repassados parao comando que utilizamos, neste caso o UPDATE.

É comum utilizarmos a chave primária de um registro para fazer condições onde que-remos encontrar um registro específico, mas podemos fazer condições com qualquercoluna da tabela. E não só condições de igualdade:

• Igual: =

• Diferente: != ou <>

• Menor que: <

Desenvolvimento Web com PHP Página 127

Page 129: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

• Maior que: >

• Menor ou igual: <=

• Maior ou igual: >=

Além disso, podemos ter múltiplas condições:

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

’futebol ’;

Se executarmos o comando UPDATE sem WHERE, iremos alterar todos os registrosda tabela. E tenho certeza que não é isso que queremos, não é?

6.6.8 Delete

Podemos remover dados de nossas tabelas utilizando o comando DELETE. Assimcomo o UPDATE, o DELETE também pode ou não ter uma cláusula WHERE, ve-jam:

1 DELETE FROM posts;

2 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 Página 128

Page 130: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

6.6.9 Select

Com certeza o comando SELECT é o comando mais interessante de se trabalharquando falamos de bancos de dados. É ele que permite que nós façamos consultasem nosso banco. O comando SELECT é muito versátil e permite que façamos con-sultas simples ou extremamente complexas, dependendo de como as informaçõesestão organizadas em nosso banco de dados.

Para fazer uma simples consulta, fazemos:

1 SELECT * FROM posts;

2 SELECT titulo FROM posts;

3 SELECT titulo , conteudo FROM posts;

O primeiro parâmetro que o comando SELECT espera são as colunas que queremosver. O segundo parâmetro é a tabela que queremos consultar. Quando não quiser-mos ver colunas específicas, mas sim, todas as colunas de uma tabela, podemosutilizar o asterisco.

Também podemos filtrar e manipular nossa consulta de várias maneiras. O primeiroexemplo é utilizar o comando SELECT junto com a cláusula WHERE:

1 SELECT * FROM posts WHERE categoria = 2;

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 SELECT * FROM posts ORDER BY id;

2 SELECT * FROM posts ORDER BY titulo DESC;

Desenvolvimento Web com PHP Página 129

Page 131: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

Por padrão, será utilizada a ordem ascendente. Mas podemos, como na segundalinha do exemplo acima, organizar de forma descendente. Se organizarmos de formadescendente uma coluna que possui letras, não números, a ordem será Z-A não A-Z.

Limitando resultados

Podemos também limitar o número de resultados de nossa consulta:

1 SELECT * FROM posts LIMIT 0,10;

2 SELECT * FROM posts LIMIT 30 ,100;

O primeiro número é o início e o segundo, o fim. É como se disséssemos para nossobanco de dados: faça a consulta e me traga os resultados de 30 a 100.

Buscando informações

Podemos buscar informações nos registros de nossas tabelas utilizando o comandoSELECT em conjunto com a cláusula WHERE e o operador LIKE. O LIKE permiteque nós filtremos os resultados de nossa consulta com base no conteúdo de umacoluna:

1 SELECT * FROM posts WHERE titulo LIKE ’Meu carro ’;

2 SELECT * FROM posts WHERE titulo LIKE ’%futebol%’;

A primeira linha irá trazer todos os registros da tabela post que possuam exatamentea frase "Meu carro"na coluna titulo. Já a segunda linha irá trazer todos os registrosque possuam em qualquer parte da coluna titulo a palavra "futebol".

Usamos o % para indicar um curinga, que pode representar qualquer letra, númeroou palavra em nossa string.

Desenvolvimento Web com PHP Página 130

Page 132: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

6.6.10 Join

O comando join permite que, em uma consulta SQL, nós juntemos duas tabelas apartir de uma condição. Vamos supor que nós estamos querendo saber todos osposts que possuem uma categoria. Vamos executar a seguinte consulta:

1 SELECT * FROM posts , categorias WHERE posts.categoria =

categorias.nome;

Esta consulta irá retornar apenas os posts que possuem categorias, deixando delado os posts que não possuem.

6.6.11 Left join

O comando left join é um pouco diferente do join normal. Ao invés de combinar osresultados, o left join irá preservar os resultados da tabela que está à esquerda docomando.

1 SELECT * FROM posts LEFT JOIN categorias ON posts.categoria =

categorias.nome;

Esta consulta irá retornar todos os posts, mesmo que eles não possuam uma cate-goria.

6.6.12 Right join

O comando right join é muito similar ao left join, contudo, ele preservará os resultadosda tabela que está à direita do comando.

Desenvolvimento Web com PHP Página 131

Page 133: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

1 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 queseja feita a união de tabelas através das suas relações com chaves estrangeiras,também conhecidas como foreign keys. Vamos supor que nós temos duas tabelas,uma de usuários e uma de seguidores. Algo como um mini-twitter.

Nossa tabela de seguidores possui apenas duas colunas: o usuário (usuario_id)e quem ele segue (id_seguindo). Essas duas colunas fazem referência à chaveprimária da tabela de usuários (id_usuario). Precisamos de uma consulta que tragaas informações dos usuários que estão seguindo o usuário 1. Para isso:

1 SELECT * FROM usuarios INNER JOIN seguidores ON

(seguidores.id_seguindo = usuarios.usuario_id) WHERE

seguidores.id_usuario = 1

Desenvolvimento Web com PHP Página 132

Page 134: Apostila Completa de PHP Linux

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. É im-portantíssimo que durante a modelagem de nosso banco, façamos a escolha corretade tipos de dados, garantindo boa performance e alocação correta de memória.

Tipos de dados

CHAR(X): Uma string fixa com 0 a 255 caracteres.

VARCHAR(X): Uma string variável com 0 a 255 caracteres.

TINYTEXT: Uma string com tamanho máximo de 255 caracteres

TEXT: Uma string de texto com tamanho máximo de 65535 caracteres

BLOB: Uma string binária com tamanho máximo de 65535 caracteres

MEDIUMTEXT: Uma string de texto com tamanho máximo de 16777215 caracteres

MEDIUMBLOB: Uma string binária com tamanho máximo de 16777215 caracteres

LONGTEXT: Uma string de texto com tamanho máximo de 4294967295 caracteres

LONGBLOB: Uma string binária com tamanho máximo de 4294967295 caracteres

Desenvolvimento Web com PHP Página 133

Page 135: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

Tipos de números

TINYINT(X): Número inteiro de -128 a 127. 0 a 255 caso seja UNSIGNED.

SMALLINT(X): Número inteiro de -32768 a 32767. 0 a 65535 caso seja UNSIG-NED.

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 18446744073709551615caso seja UNSIGNED.

FLOAT: Um número decimal pequeno.

DOUBLE: Um número decimal grande.

Observe que X é onde você define o tamanho do dado. UNSIGNED significa que onúmero inteiro só pode ser positivo.

Desenvolvimento Web com PHP Página 134

Page 136: Apostila Completa de PHP Linux

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 horário 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 horário no formato HH:MM:SS, 3 bytes

Outros tipos

ENUM (’a’, ’b’, ’c’): Significa enumeração e permite que você especifique uma listade valores possíveis para a coluna. De 1 a 65535.

SET (’a’, ’b’, ’c’): Similar ao ENUM, exceto que múltiplos valores podem ser escolhi-dos. De 1 a 64.

Desenvolvimento Web com PHP Página 135

Page 137: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

6.8 Sequences e Auto Increment

Quando criamos nossa tabela, criamos uma coluna do tipo INT, não nula. Depois,definimos essa coluna como sendo a chave primária de nossa tabela. Chaves primá-rias precisam ser únicas, portanto, não é interessante deixarmos o preenchimentodessa coluna a cargo do software ou do usuário. O banco é que deveria controlaressa chave.

Lembram das sequences que falamos anteriormente? Elas permitem que incremen-temos ou decrementemos o valor de uma coluna quando um registro for inserido natabela desta coluna. E isso é exatamente o que queremos fazer quando estamostrabalhando com bancos de dados relacionais e chaves primárias.

No PostgreSQL, criamos uma tabela e uma sequência para que a chave primáriaseja incrementada toda vez que um registro for adicionado na tabela. Fazemos issoda seguinte forma:

1 CREATE SEQUENCE posts_id_seq;

2

3 CREATE TABLE posts (

4 id INTEGER DEFAULT NEXTVAL(’posts_id_seq ’),

5 titulo VARCHAR (255),

6 conteudo TEXT ,

7 PRIMARY KEY (id)

8 );

Já no MySQL, não temos o conceito de sequences. Para incrementarmos uma chaveprimária automaticamente vamos utilizar o comando AUTO_INCREMENT. Quando oAUTO_INCREMENT é associado a uma coluna, toda vez que inserirmos um novoregistro, ela será incrementada. Veja:

1 CREATE TABLE posts (

2 id INTEGER AUTO_INCREMENT ,

Desenvolvimento Web com PHP Página 136

Page 138: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

3 titulo VARCHAR (255),

4 conteudo TEXT ,

5 PRIMARY KEY (id)

6 );

Desenvolvimento Web com PHP Página 137

Page 139: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

6.9 Funções do MySQL

Para fazer nossa aplicação em PHP conversar com um banco de dados MySQL, nósprecisamos utilizar um conjunto de funções disponíveis na extensão MySQL do PHP.Com essas funções, podemos conectar com um banco de dados, executar comandose fazer consultas.

Para podermos fazer uso dessas funções, precisamos instalar a extensão MySQLem nosso PHP, o que pode ser feito com uma simples instalação de pacote:

1 apt -get install php5 -mysql

6.9.1 Conexão

Antes de começarmos a interagir com o banco de dados, precisamos nos conectarcom ele. Vamos utilizar a função mysql_connect() para conectar no MySQL. Comoestamos em um ambiente de desenvolvimento, o Apache, o PHP e o MySQL estãorodando na mesma máquina. Então, basta conectarmos com o endereço de loop-back, 127.0.0.1 ou localhost, ao invés de um servidor externo.

1 mysql_connect("localhost", "root", "123456");

2 mysql_select_db("nomedobanco");

A função mysql_connect() espera três parâmetros: o hostname do servidor ondeestá o MySQL, o usuário do MySQL e sua senha. Além de conectarmos, observeque na segunda linha estamos utilizando a função mysql_select_db(). Essa funçãoseleciona um banco de dados no MySQL para trabalharmos. Ela age como o USEque vimos anteriormente.

Desenvolvimento Web com PHP Página 138

Page 140: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

6.9.2 Inserindo registros

A fim de interagirmos com nosso banco de dados, precisamos de uma função quenos permita executar declarações e consultas SQL. Essa função é a mysql_query().Com esta função, 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 mysql_connect("localhost", "root", "123456");

2 mysql_select_db("blog");

3

4 $titulo = "Meu primeiro post";

5 $conteudo = "Meu post tri legal no meu blog!"

6

7 mysql_query("INSERT INTO posts (titulo , conteudo) VALUES

(’$titulo ’, ’$conteudo ’)");

Observe que, além de executar um INSERT, estamos manipulando a string passadapara a função mysql_query(), criando uma query dinâmica com as valores das variá-veis que criamos logo acima.

Note também que não precisamos terminar nossa declaração com ponto-e-vírgula.

6.9.3 Atualizando registros

Para atualizarmos um registro, sabemos que precisamos utilizar o comando UP-DATE, portanto:

1 mysql_connect("localhost", "root", "123456");

2 mysql_select_db("blog");

Desenvolvimento Web com PHP Página 139

Page 141: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

3

4 $id = 1;

5 $titulo = "Meu novo post";

6

7 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 mysql_connect("localhost", "root", "123456");

2 mysql_select_db("blog");

3

4 $id = 5;

5

6 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 comandoSELECT, portanto:

1 mysql_connect("localhost", "root", "123456");

2 mysql_select_db("blog");

3

4 mysql_query("SELECT * FROM posts");

Desenvolvimento Web com PHP Página 140

Page 142: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

Mas e agora? Fizemos a consulta, mas como podemos ver os resultados dela? Afunção mysql_fetch_array() permite que nós vejamos os resultados de uma consultaSQL como se fosse um array, onde as colunas são as chaves de nosso array e osvalores das colunas, valores do array.

1 mysql_connect("localhost", "root", "123456");

2 mysql_select_db("blog");

3

4 $query = mysql_query("SELECT * FROM posts");

5

6 while($item = mysql_fetch_array($query)) {

7 echo $item[’titulo ’];

8 }

Observe que colocamos a função mysql_fetch_array() em um while. Fazemos istoporque nossa consulta trouxe mais de um resultado, portanto, estamos trabalhandocom mais de um registro. O while se encarrega de executar o bloco de código contidonele enquanto houverem registros a serem exibidos da nossa consulta.

O bloco de código dentro do while simplesmente traz o valor contido na coluna titulono registro atual. Listaremos, assim, todos os registros da tabela. Note tambémque associamos uma variável ao retorno da função mysql_query() e passamos essavariável como parâmetro para a mysql_fetch_array(), que precisa saber com qualconsulta ela vai trabalhar.

Desenvolvimento Web com PHP Página 141

Page 143: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

6.10 Funções do PostgreSQL

Para fazer nossa aplicação em PHP conversar com um banco de dados PostgreSQL,nós precisamos utilizar um conjunto de funções disponíveis na extensão PostgreSQLdo PHP. Com essas funções, podemos conectar com um banco de dados, executarcomandos e fazer consultas.

Para podermos fazer uso dessas funções, precisamos instalar a extensão Post-greSQL em nosso PHP, o que pode ser feito com uma simples instalação de pa-cote:

1 apt -get install php5 -pgsql

6.10.1 Conexão

Antes de começarmos a interagir com o banco de dados, precisamos nos conectarcom ele. Vamos utilizar a função pg_connect() para conectar no PostgreSQL. Comoestamos em um ambiente de desenvolvimento, o Apache, o PHP e o PostgreSQLestão rodando na mesma máquina. Então, basta conectarmos com o endereço deloopback, 127.0.0.1 ou localhost, ao invés de um servidor externo.

1 pg_connect("host=localhost port =5432 dbname=blog user=root

password =123456");

A função pg_connect() espera apenas um parâmetro, mas este parâmetro pode pos-suir sub-parâmetros separados por espaço. Observe que na verdade estamos pas-sando cinco parâmetros: o hostname do servidor que vamos conectar, a porta doservidor, o nome do banco, o usuário e sua senha.

Desenvolvimento Web com PHP Página 142

Page 144: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

6.10.2 Inserindo registros

A fim de interagirmos com nosso banco de dados, precisamos de uma função quenos permita executar declarações e consultas SQL. Essa função é a pg_query().Com esta função, 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 pg_connect("host=localhost port =5432 dbname=blog user=root

password =123456");

2

3 $titulo = "Meu primeiro post";

4 $conteudo = "Meu post tri legal no meu blog!"

5

6 pg_query("INSERT INTO posts (titulo , conteudo) VALUES (’$titulo ’,

’$conteudo ’)");

Observe que, além de executar um INSERT, estamos manipulando a string passadapara a função pg_query(), criando uma query dinâmica com as valores das variáveisque criamos logo acima.

Note também que não precisamos terminar nossa declaração com ponto-e-vírgula.

6.10.3 Atualizando registros

Para atualizarmos um registro, sabemos que precisamos utilizar o comando UP-DATE, portanto:

1 pg_connect("host=localhost port =5432 dbname=blog user=root

password =123456");

Desenvolvimento Web com PHP Página 143

Page 145: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

2

3 $id = 1;

4 $titulo = "Meu novo post";

5

6 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 pg_connect("host=localhost port =5432 dbname=blog user=root

password =123456");

2

3 $id = 5;

4

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 comandoSELECT, portanto:

1 pg_connect("host=localhost port =5432 dbname=blog user=root

password =123456");

2

3 pg_query("SELECT * FROM posts");

Desenvolvimento Web com PHP Página 144

Page 146: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

Mas e agora? Fizemos a consulta, mas como podemos ver os resultados dela? Afunção pg_fetch_all() permite que nós vejamos os resultados de uma consulta SQLcomo se fosse um array, onde as colunas são as chaves de nosso array e os valoresdas colunas, valores do array.

1 pg_connect("host=localhost port =5432 dbname=blog user=root

password =123456");

2

3 $query = pg_query("SELECT * FROM posts");

4

5 $itens = pg_fetch_all($query);

6

7 foreach($itens as $item) {

8 echo $item[’titulo ’];

9 }

A função pg_fetch_all() retorna um array multidimensional todos todos os registrostrazidos pela nossa consulta. Sendo assim, podemos usar um simples foreach paraiterar entre os resultados e mostrar as informações que queremos, no caso, o valorda coluna titulo.

Note também que associamos uma variável ao retorno da função pg_query() e pas-samos essa variável como parâmetro para a pg_fetch_all(), que precisa saber comqual consulta ela vai trabalhar.

Desenvolvimento Web com PHP Página 145

Page 147: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

6.11 Funções do SQLite

Para fazer nossa aplicação em PHP conversar com um banco de dados SQLite, nósprecisamos utilizar um conjunto de funções disponíveis na extensão SQLite do PHP.Com essas funções, podemos abrir um banco de dados, executar comandos e fazerconsultas.

Para podermos fazer uso dessas funções, precisamos instalar a extensão SQLite emnosso PHP, o que pode ser feito com uma simples instalação de pacote:

1 apt -get install php5 -sqlite

6.11.1 Conexão

Antes de começarmos a interagir com o banco de dados, precisamos nos conectarcom ele. Contudo, o SQLite funciona de maneira um tanto diferente se comparadocom o MySQL e o PostgreSQL. Quando você instalou a extensão do SQLite, vocêembutiu o SQLite no PHP. Isso significa que não é necessária uma abertura de co-nexão ou qualquer coisa, basta abrir um arquivo. Isso mesmo, o SQLite guarda asinformações em um arquivo.

Este arquivo, criado pelo SQLite, é o seu banco de dados. Ele pode estar na pastada sua aplicação ou em qualquer outro parte do sistema. Para usarmos o banco,mas abrir o arquivo. Caso o arquivo não exista, isto é, o banco não exista, ele serácriado automaticamente.

1 $banco = sqlite_open(’meubanco ’);

Observe que estamos associando o retorno da função sqlite_open() a uma variável.Isto é necessário porque outras funções de interação com o banco SQLite precisam

Desenvolvimento Web com PHP Página 146

Page 148: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

saber com qualquer banco elas precisam interagir.

6.11.2 Inserindo registros

A fim de interagirmos com nosso banco de dados, precisamos de uma função quenos permita executar declarações e consultas SQL. Essa função é a sqlite_query().Com esta função, 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 $banco = sqlite_open(’meubanco ’);

2

3 $titulo = "Meu primeiro post";

4 $conteudo = "Meu post tri legal no meu blog!"

5

6 sqlite_query($banco , "INSERT INTO posts (titulo , conteudo) VALUES

(’$titulo ’, ’$conteudo ’)");

Observe que, além de executar um INSERT, estamos manipulando a string passadapara a função sqlite_query(), criando uma query dinâmica com as valores das variá-veis que criamos logo acima.

Note também que não precisamos terminar nossa declaração com ponto-e-vírgula.

6.11.3 Atualizando registros

Para atualizarmos um registro, sabemos que precisamos utilizar o comando UP-DATE, portanto:

Desenvolvimento Web com PHP Página 147

Page 149: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

1 $banco = sqlite_open(’meubanco ’);

2

3 $id = 1;

4 $titulo = "Meu novo post";

5

6 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 $banco = sqlite_open(’meubanco ’);

2

3 $id = 5;

4

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 comandoSELECT, portanto:

1 $banco = sqlite_open(’meubanco ’);

2

3 sqlite_query($banco , "SELECT * FROM posts");

Desenvolvimento Web com PHP Página 148

Page 150: Apostila Completa de PHP Linux

4Linux – www.4linux.com.br Banco de Dados

Mas e agora? Fizemos a consulta, mas como podemos ver os resultados dela?A função sqlite_fetch_all() permite que nós vejamos os resultados de uma consultaSQL como se fosse um array, onde as colunas são as chaves de nosso array e osvalores das colunas, valores do array.

1 $banco = sqlite_open(’meubanco ’);

2

3 $query = sqlite_query($banco , "SELECT * FROM posts");

4

5 $itens = sqlite_fetch_all($query);

6

7 foreach($itens as $item) {

8 echo $item[’titulo ’];

9 }

A função sqlite_fetch_all() retorna um array multidimensional todos todos os registrostrazidos pela nossa consulta. Sendo assim, podemos usar um simples foreach paraiterar entre os resultados e mostrar as informações que queremos, no caso, o valorda coluna titulo.

Note também que associamos uma variável ao retorno da função sqlite_query() epassamos essa variável como parâmetro para a sqlite_fetch_all(), que precisa sabercom qual consulta ela vai trabalhar.

Desenvolvimento Web com PHP Página 149