apostila php

Upload: rafael-sartorello

Post on 05-Oct-2015

222 views

Category:

Documents


0 download

DESCRIPTION

Apostila de PHP

TRANSCRIPT

ndice

Apostila de PHP

Apostila desenvolvida por Bruno Rodrigues Siqueira( [email protected] )

ndice

1ndice

101.Introduo

10O que PHP?

11Histria do PHP

12O que pode ser feito com PHP?

12Tabela comparativa

132. Sintaxe Bsica

13Delimitando o cdigo PHP

13Separador de instrues

14Nomes de variveis

14Comentrios

163. Tipos

16Tipos Suportados

16Inteiros (integer ou long)

16Nmeros em Ponto Flutuante (double ou float)

17Strings

18Arrays

18Listas

19Objetos

19Booleanos

19Transformao de tipos

20Coeres

20Transformao explcita de tipos

21Com a funo settype

224. Constantes

22Constantes pr-definidas

22Definindo constantes

235. Operadores

23Aritmticos

23de strings

23de atribuio

24bit a bit

24Lgicos

24Comparao

25Expresso condicional

25de incremento e decremento

25Ordem de precedncia dos operadores

276. Estruturas de Controle

27Blocos

27Comandos de seleo

27if

30switch

31comandos de repetio

31while

32do... while

33for

34Quebra de fluxo

34Break

34Continue

367. Funes

36Definindo funes

36Valor de retorno

36Argumentos

37Passagem de parmetros por referncia

38Argumentos com valores pr-definidos (default)

39Escopo

418. Variveis

41O modificador static

42Variveis Variveis

42Variveis enviadas pelo navegador

42URLencode

43Variveis de ambiente

43Verificando o tipo de uma varivel

43Funo que retorna o tipo da varivel

43Funes que testam o tipo da varivel

44Destruindo uma varivel

44Verificando se uma varivel possui um valor

45Arrays Multidimensionais

469. Classes e Objetos

46Classe

46Objeto

46A varivel $this

47SubClasses

47Construtores

4910. PHP avanado

49Interagindo com o browser

49Utilizando formulrios HTML

51Cookies

51Sesso

52Require

52Include

52Formulrios Avanados

53Arquivos Remotos

53Lendo

53Escrevendo

54Tratamento de erros

5511.SQL

55O que ?

55SELECT

56Subselees

56INSERT

56UPDATE

57DELETE

57O que em comum entre: DELETE x UPDATE

57CREATE

58DROP

58ALTER

5812. Bancos de dados compatveis com o PHP:

5913. Biblioteca de Funes

59Bibliotecas requeridas

59Array

59Array

59array_keys [PHP4]

60Array_merge [PHP4]

60Array_pop[PHP4]

60Array_push[PHP4]

60Array_shift[PHP4]

60Array_slice[PHP4]

60Array_splice[PHP4]

61Array_unshift[PHP4]

61Array_values[PHP4]

61Array_walk

61Arsort

61Asort

61Compact[PHP4]

62Count

62Current

62Each

62End

62Extract

63In_array[PHP4]

63Key

63Ksort

63List

63Next

63Pos

63Prev

63Range

64Reset

64Rsort

64Shuffle

64Sizeof

64Sort

64Uasort

64Uksort

65Usort

65Matemtica para nmeros inteiros

65Bcpow

65Bcscale

65Datas

65Checkdate

65Date

66Getdate

66Gettimeofday

67Gmdate

67Gmmktime

67Gmstrftime

67Microtime

67Mktime

67Strftime

68Time

68Diretrio

68Chdir

69Classe dir

69Closedir

69Opendir

69Readdir

69Rewinddir

69Execuo de Programas

69Escapeshellcmd

69Exec

70Passthru

70System

70Sistema de arquivos do servidor

70Basename

70Chgrp

70Chmod

71Chown

71Clearstatcache

71Copy

71Delete

71Dirname

71Diskfreespace

71Fclose

71Feof

72Fgetc

72Fgetcsv

72Fgets

72Fgetss

72File

72File_exists

72Fileatime

73Filectime

73Filegroup

73Fileinode

73Filemtime

73Fileowner

73Fileperms

73Filesize

74Filetype

74Flock

74Fopen

75Fpassthru

75Fputs

75Fread

75Fseek

75Ftell

75Fwrite

76Is_dir

76Is_executable

76Is_file

76Is_link

76Is_readable

76Is writeable

76Link

77Linkinfo

77Mkdir

77Pclose

77Popen

77Readfile

77Readlink

77Rename

77Rewind

78Rmdir

78Set_file_buffer

78Stat

78Symlink

78Tempnam

78Touch

79Umask

79Unlink

79Opes e informaes do PHP

79Error_log

79Error_reporting

80Extension_loaded

80Get_cfg_var

80Get_current_user

80Get_magic_quotes_gpc

80Get_magic_quotes_runtime

80Getenv

80Getlastmod

81Getmyinode

81Getmypid

81Getmyuid

81Getrusage

81Phpinfo

81Phpversion

81Putenv

81Set_magic_quotes_runtime

81Set_time_limit

82Matemtica

82Abs

82Acos

82Asin

82Atan

82Atan2

82Base_convert

82Bindec

82Ceil

83Cos

83Decbin

83Dechex

83Decoct

83Exp

83Floor

83Getrandmax

83Hexdec

83Log

83Log10

84Max

84Min

84Mt_rand

84Mt_srand

84Mt_getrandmax

84Number_format

84Octdec

84Pi

84Pow

85Rand

85Round

85Sin

85Sqrt

85Srand

85Tan

85Criptografia

85Mcrypt_cbc

85Mcrypt_cfb

86Mcrypt_create_iv

86Mcrypt_ecb

86Mcrypt_get_cipher_name

86Mcrypt_get_block_size

86Mcrypt_get_key_size

86Mcrypt_ofb

86Funes diversas

86Connection_aborted

86Connection_status

86Connection_timeout

87Dl

87Eval

87Die

87Exit

87Function_exists

87Ignore_user_abort

87Iptcparse

87Leak

88Mail

88Pack

88Register_shutdown_function

88Serialize

88Sleep

88Unpack

89Unserialize

89Uniquid

89Usleep

89Rede

89Checkdnsrr

89Closelog

89Debugger_on

89Debugger_off

89Fsockopen

89Gethostbyaddr

90Gethostbyname

90Openlog

90Pfsockopen

90Set_socket_blocking

90Syslog

90Expresses regulares

90Ereg

90Ereg_replace

91Eregi

91Eregi_replace

91Split

91Sql_regcase

91Tratamento de sesses

91Session_decode[PHP4]

91Session_destroy[PHP4]

91Session_encode[PHP4]

91Session_start[PHP4]

92Session_id[PHP4]

92Session_is_registered[PHP4]

92Session_module_name[PHP4]

92Session_name[PHP4]

92Session_register[PHP4]

92Session_save_path[PHP4]

92Session_unregister[PHP4]

92Strings

92Addslashes

93Bin2hex

93Chop

93Chr

93Chunk_split

93Convert_cyr_string

93Crypt

93Echo

93Explode

94Flush

94Get_meta_tags

94Htmlentities

94Htmlspecialchars

94Implode

94Join

94Ltrim

94Md5

95Nl2br

95Ord

95Parse_str

95Print

95Printf

95Quoted_printable_decode

95Quotemeta

95Rawurldeconde

96Rawurlenconde

96Setlocale

96Similar_text

96Soundex

96Sprintf

96Strchr

96Strcmp

96Strcspn

97Strip_tags

97Stripslashes

97Strlen

97Strpos

97Strrpos

97Strrchr

97Strrev

97Strspn

97Strstr

98Strtok

98Strtolower

98Strtoupper

98Str_replace

98Strtr

98Substr

98Trim

99Ucfirst

99Ucwords

99Funes para variveis

99Doubleval

99Empty

99Gettype

99Intval

99Is_array

99Is_double

99Is_float

100Is_int

100Is_integer

100Is_long

100Is_object

100Is_real

100Is_string

100Isset

100Settype

101Strval

101Unset

10114. Referncias na Internet

1. Introduo

O que PHP?

PHP significa: Hypertext Preprocessor. Realmente, o produto foi originalmente chamado de Personal Home Page Tools; mas como se expandiu em escopo, um nome novo e mais apropriado foi escolhido por votao da comunidade. Voc pode utilizar qualquer extenso que desejar para designar um arquivo PHP, mas os recomendados foram .php , .phtml. O PHP est atualmente na verso 4, chamado de PHP4 ou, simplesmente de PHP.

PHP uma linguagem de criao de scripts embutida em HTML no servidor. Os produtos patenteados nesse nicho do mercado so as Active Server Pages da Microsoft, o Coldfusion da Allaire e as Java Server Pages da Sun. PHP s vezes chamado de o ASP de cdigo-fonte aberto porque sua funcionabilidade to semelhante ao produto/conceito, ou o que quer que seja, da Microsoft.

Exploraremos a criao de script no servidor, mais profundamente, nos prximos captulos, mas, no momento, voc pode pensar no PHP como uma coleo de supertags de HTML que permitem adicionar funes do servidor s suas pginas da Web. Por exemplo, voc pode utilizar PHP para montar instantaneamente uma complexa pgina da Web ou desencadear um programa que automaticamente execute o dbito no carto de crdito quando um cliente realizar uma compra.

Falando estritamente, o PHP tem pouca relao com layout, eventos ou qualquer coisa relacionada aparncia de uma pgina da Web. De fato, a maior parte do que o PHP realiza invisvel para o usurio final. Algum visualizando uma pgina de PHP no ser capaz de dizer que no foi escrita em HTML, porque o resultado final do PHP HTML.

O PHP um mdulo oficial do servidor http Apache, o lder do mercado de servidores Web livres que constitui aproximadamente 55 por cento da World Wide Web. Isso significa que o mecanismo de script do PHP pode ser construdo no prprio servidor Web, tornando a manipulao de dados mais rpida. Assim como o servidor Apache, o PHP compatvel com vrias plataformas, o que significa que ele executa em seu formato original em vrias verses do UNIX e do Windows. Todos os projetos sob a gide da Apache Software Foundation incluindo o PHP so software de cdigo-fonte aberto.

As vrias verses do PHP foram aclamadas e premiadas nos ltimos anos. O PHP3 foi o finalista em 1999 no LinuxWorld Editors Choice Awards (na categoria de biblioteca/ferramentas de programao) e ganhou o segundo lugar, perdendo s para o ColdFusion, em 1998 no Cnet Builder.com Product Awards (na categoria de melhor ferramenta de script de servidor eles deram bastante importncia ao IDE), ao passo que a combinao PHP3/MySQL ganhou prmio de banco de dados do ano no Web98. Nada mau para um software sem relaes pblicas, sem publicidade e sem uma significativa exposio na mdia.

Histria do PHP

Rasmus Lerdorf engenheiro de software, membro da equipe Apache e o homem misterioso do ano o criador e a fora motriz original por trs do PHP. A primeira parte do PHP foi desenvolvida para utilizao pessoal no final de 1994. Tratava-se de um wrapper de PerlCGI que o auxiliava a monitorar as pessoas que acessavam o seu site pessoal. No ano seguinte, ele montou um pacote chamado de Personal Home Page Tools (tambm conhecido como PHP Construction Kit) em resposta demanda de usurios que por acaso ou por relatos falados depararam-se com o seu trabalho. A verso 2 foi logo lanada sob o ttulo de PHP/FI e inclua o Form Interpreter, uma ferramenta para analisar sintaticamente consultas de SQL.

Em meados de 1997, o PHP estava sendo utilizado mundialmente em aproximadamente 50.000 sites. Obviamente estava se tornando muito grande para uma nica pessoa administrar, mesmo para algum concentrado e cheio de energia como Rasmus. Agora uma pequena equipe central de desenvolvimento mantinha o projeto sobre o modelo de junta benevolente do cdigo-fonte aberto, com contribuies de desenvolvedores e usurios em todo o mundo. Zeev Suraski e Andi Gutmans, dois programadores israelenses que desenvolveram os analisadores de sintaxe PHP3 e PHP4, tambm generalizaram e estenderam seus trabalhos sob a rubrica de Zend.com (Zeev, Andi, Zend, entendeu?).

O quarto trimestre de 1998 iniciou um perodo de crescimento explosivo para o PHP, quando todas as tecnologias de cdigo-fonte aberto ganharam uma publicidade intensa. Em outubro de 1998, de acordo com a melhor suposio, mais de 100.000 domnios nicos utilizavam PHP de alguma maneira. Um ano depois, o PHP quebrou a marca de um milho de domnios. Enquanto escrevo esta apostila, o nmero explodiu para cerca de dois milhes de domnios.

O que pode ser feito com PHP?

Basicamente, qualquer coisa que pode ser feita por algum programa CGI pode ser feita tambm com PHP, como coletar dados de um formulrio, gerar pginas dinamicamente ou enviar e receber cookies.

PHP tambm tem como uma das caractersticas mais importantes o suporte a um grande nmero de bancos de dados, como dBase, Interbase, mSQL, mySQL, Oracle, Sybase, PostgreSQL e vrios outros. Construir uma pgina baseada em um banco de dados torna-se uma tarefa extremamente simples com PHP.

Alm disso, PHP tem suporte a outros servios atravs de protocolos como IMAP, SNMP, NNTP, POP3 e, logicamente, HTTP. Ainda possvel abrir sockets e interagir com outros protocolos.

Tabela comparativa

Custos Comparativos

ItemASPCold FusionJSPPHP

DesenvolvimentoUS$ 0 480US$ 395US$ 0US$ 0

ServidorUS$ 620US$ 1.295US$ 0 595US$ 0

RDBMSUS$ 1.220 - 4220US$ 0 - ~10.000US$ 0 - ~10.000US$ 0

Suporte de incidenteUS$0 - 245US$ 0 - 75US$ 0 - 75US$ 0

2. Sintaxe Bsica

Delimitando o cdigo PHP

O cdigo PHP fica embutido no prprio HTML. O interpretador identifica quando um cdigo PHP pelas seguintes tags:

comandos

O tipo de tags mais utilizado o terceiro, que consiste em uma abreviao do primeiro. Para utiliz-lo, necessrio habilitar a opo short-tags na configurao do PHP. O ltimo tipo serve para facilitar o uso por programadores acostumados sintaxe de ASP. Para utiliz-lo tambm necessrio habilit-lo no arquivo de configurao do PHP (php.ini)

Separador de instrues

Para cada fim de linha de cdigo tem que haver um ponto e vrgula, indicando ao sistema fim de instruo.

Exemplo.

Linhas de comando, de controle, no precisam de ponto e vrgula.

Exemplo.:

Nomes de variveis

Toda varivel em PHP tem seu nome composto pelo caracter $ e uma string, que deve iniciar por uma letra ou o caracter _. PHP case sensitive, ou seja, as variveis $php e $PHP so diferentes. Por isso preciso ter muito cuidado ao definir os nomes das variveis. bom evitar os nomes em maisculas, pois como veremos mais adiante, o PHP j possui alguma variveis pr-definidas cujos nomes so formados por letras maisculas.

Comentrios

H dois tipos de comentrios em cdigo PHP:

Comentrios de uma linha:

Marca como comentrio at o final da linha ou at o final do bloco de cdigo PHP - o que vier antes. Pode ser delimitado pelo caracter # ou por duas barras ( // ).

Exemplo:

Comentrios de mais de uma linha:

Tem como delimitadores os caracteres /* para o incio do bloco e */ para o final do comentrio. Se o delimitador de final de cdigo PHP ( ?> ) estiver dentro de um comentrio, no ser reconhecido pelo interpretador.

Exemplos:

3. Tipos

Tipos Suportados

PHP suporta os seguintes tipos de dados:

Inteiro

Ponto flutuante

String

Array

Objeto

PHP utiliza checagem de tipos dinmica, ou seja, uma varivel pode conter valores de diferentes tipos em diferentes momentos da execuo do script. Por este motivo no necessrio declarar o tipo de uma varivel para us-la. O interpretador PHP decidir qual o tipo daquela varivel, verificando o contedo em tempo de execuo.

Ainda assim, permitido converter os valores de um tipo para outro desejado, utilizando o typecasting ou a funo settype (ver adiante).

Inteiros (integer ou long)

Uma varivel pode conter um valor inteiro com atribuies que sigam as seguintes sintaxes:

$php = 1234;# inteiro positivo na base decimal

$php = -234;# inteiro negativo na base decimal

$php = 0234;# inteiro na base octal-simbolizado pelo 0

# equivale a 156 decimal

$php = 0x34;# inteiro na base hexadecimal(simbolizado

# pelo 0x) - equivale a 52 decimal.

A diferena entre inteiros simples e long est no nmero de bytes utilizados para armazenar a varivel. Como a escolha feita pelo interpretador PHP de maneira transparente para o usurio, podemos afirmar que os tipos so iguais.

Nmeros em Ponto Flutuante (double ou float)

Uma varivel pode ter um valor em ponto flutuante com atribuies que sigam as seguintes sintaxes:

$php = 1.234;

$php = 23e4;# equivale a 230.000

Strings

Strings podem ser atribudas de duas maneiras:

a)utilizando aspas simples ( ' ) - Desta maneira, o valor da varivel ser exatamente o texto contido entre as aspas (com exceo de \\ e \' - ver tabela abaixo)

b)utilizando aspas duplas ( " ) - Desta maneira, qualquer varivel ou caracter de escape ser expandido antes de ser atribudo.

Exemplo:

A sada desse script ser "---$teste--\n".

A sada desse script ser "---Brasil--" (com uma quebra de linha no final).

A tabela seguinte lista os caracteres de escape:

SintaxeSignificado

\nNova linha

\rRetorno de carro (semelhante a \n)

\tTabulao horizontal

\\A prpria barra ( \ )

\$O smbolo $

\Aspa simples

\Aspa dupla

Arrays

Arrays em PHP podem ser observados como mapeamentos ou como vetores indexados. Mais precisamente, um valor do tipo array um dicionrio onde os ndices so as chaves de acesso. Vale ressaltar que os ndices podem ser valores de qualquer tipo e no somente inteiros. Inclusive, se os ndices forem todos inteiros, estes no precisam formar um intervalo contnuo

Como a checagem de tipos em PHP dinmica, valores de tipos diferentes podem ser usados como ndices de array, assim como os valores mapeados tambm podem ser de diversos tipos.

Exemplo:

Equivalentemente, pode-se escrever:

Listas

As listas so utilizadas em PHP para realizar atribuies mltiplas. Atravs de listas possvel atribuir valores que esto num array para variveis. Vejamos o exemplo:

Exemplo:

list($a, $b, $c) = array(a, b, c);

O comando acima atribui valores s trs variveis simultaneamente. bom notar que s so atribudos s variveis da lista os elementos do array que possuem ndices inteiros e no negativos. No exemplo acima as trs atribuies foram bem sucedidas porque ao inicializar um array sem especificar os ndices eles passam a ser inteiros, a partir do zero. Um fator importante que cada varivel da lista possui um ndice inteiro e ordinal, iniciando com zero, que serve para determinar qual valor ser atribudo. No exemplo anterior temos $a com ndice 0, $b com ndice 1 e $c com ndice 2. Vejamos um outro exemplo:

$arr = array(1=>um,3=>tres,a=>letraA,2=>dois);

list($a,$b,$c,$d) = $arr;

Aps a execuo do cdigo acima temos os seguintes valores:

$a == null

$b == um

$c == dois

$d == tres

Devemos observar que varivel $a no foi atribudo valor, pois no array no existe elemento com ndice 0 (zero). Outro detalhe importante que o valor tres foi atribudo varivel $d, e no a $b, pois seu ndice 3, o mesmo que $d na lista. Por fim, vemos que o valor letraA no foi atribudo a elemento algum da lista, pois seu ndice no inteiro.

Os ndices da lista servem apenas como referncia ao interpretador PHP para realizar as atribuies, no podendo ser acessados de maneira alguma pelo programador. De maneira diferente do array, uma lista no pode ser atribuda a uma varivel, servindo apenas para fazer mltiplas atribuies atravs de um array.

Objetos

Um objeto pode ser inicializado utilizando o comando new para instanciar uma classe para uma varivel.

Exemplo:

class teste {

function nada() {

echo nada;

}

}

$php = new teste;

$php -> nada();

A utilizao de objetos ser mais detalhada mais frente.

Booleanos

PHP no possui um tipo booleano, mas capaz de avaliar expresses e retornar true ou false, atravs do tipo integer: usado o valor 0 (zero) para representar o estado false, e qualquer valor diferente de zero (geralmente 1) para representar o estado true.

Transformao de tipos

A transformao de tipos em PHP pode ser feita das seguintes maneiras:

4. Constantes

Constantes pr-definidas

O PHP possui algumas constantes pr-definidas, indicando a verso do PHP, o Sistema Operacional do servidor, o arquivo em execuo, e diversas outras informaes. Para ter acesso a todas as constantes pr-definidas, pode-se utilizar a funo phpinfo(), que exibe uma tabela contendo todas as constantes pr-definidas, assim como configuraes da mquina, sistema operacional, servidor http e verso do PHP instalada.

Definindo constantes

Para definir constantes utiliza-se a funo define. Uma vez definido, o valor de uma constante no poder mais ser alterado. Uma constante s pode conter valores escalares, ou seja, no pode conter nem um array nem um objeto. A assinatura da funo define a seguinte:

int define(string nome_da_constante, mixed valor);

A funo retorna true se for bem-sucedida. Veja um exemplo de sua utilizao a seguir:

define ("pi", 3.1415926536);

$circunf = 2*pi*$raio;

5. Operadores

Aritmticos

S podem ser utilizados quando os operandos so nmeros (integer ou float). Se forem de outro tipo, tero seus valores convertidos antes da realizao da operao.

+adio

-subtrao

*multiplicao

/diviso

%mdulo

de strings

S h um operador exclusivo para strings:

.concatenao

de atribuio

Existe um operador bsico de atribuio e diversos derivados. Sempre retornam o valor atribudo. No caso dos operadores derivados de atribuio, a operao feita entre os dois operandos, sendo atribudo o resultado para o primeiro. A atribuio sempre por valor, e no por referncia.

=atribuio simples

+=atribuio com adio

-=atribuio com subtrao

*=atribuio com multiplicao

/=atribuio com diviso

%=atribuio com mdulo

.=atribuio com concatenao

Exemplo:

$a = 7;

$a += 2; // $a passa a conter o valor 9

bit a bit

Comparam dois nmeros bit a bit.

&e lgico

|ou lgico

^ou exclusivo

~no (inverso)

shift right

Lgicos

Utilizados para inteiros representando valores booleanos

Ande lgico

Orou lgico

Xorou exclusivo

!no (inverso)

&&e lgico

||ou lgico

Existem dois operadores para e e para ou porque eles tm diferentes posies na ordem de precedncia.

Comparao

As comparaes so feitas entre os valores contidos nas variveis, e no as referncias. Sempre retornam um valor booleano.

==igual a

!=diferente de

maior que

=maior ou igual a

Expresso condicional

Existe um operador de seleo que ternrio. Funciona assim:

(expressao1)?(expressao2):( expressao3)

o interpretador PHP avalia a primeira expresso. Se ela for verdadeira, a expresso retorna o valor de expresso2. Seno, retorna o valor de expresso3.

de incremento e decremento

++Incremento

--Decremento

Podem ser utilizados de duas formas: antes ou depois da varivel. Quando utilizado antes, retorna o valor da varivel antes de increment-la ou decrement-la. Quando utilizado depois, retorna o valor da varivel j incrementado ou decrementado.

Exemplos:

$a = $b = 10; // $a e $b recebem o valor 10

$c = $a++; // $c recebe 10 e $a passa a ter 11

$d = ++$b; // $d recebe 11, valor de $b j incrementado

Ordem de precedncia dos operadores

A tabela a seguir mostra a ordem de precedncia dos operadores no momento de avaliar as expresses;

PrecednciaAssociatividadeOperadores

1. Esquerda,

2. Esquerdaor

3. Esquerdaxor

4. Esquerdaand

5. Direitaprint

6. Esquerda= += -= *= /= .= %= &= != ~= =

7. Esquerda? :

8. Esquerda||

9. Esquerda&&

10. Esquerda|

11. Esquerda^

12. Esquerda&

13. no associa== !=

14. no associa< >=

15. Esquerda>

16. Esquerda+ - .

17. Esquerda* / %

18. Direita! ~ ++ -- (int) (double) (string) (array) (object) @

19. Direita[

20. no associanew

6. Estruturas de Controle

As estruturas que veremos a seguir so comuns para as linguagens de programao imperativas, bastando, portanto, descrever a sintaxe de cada uma delas, resumindo o funcionamento.

Blocos

Um bloco consiste de vrios comandos agrupados com o objetivo de relacion-los com determinado comando ou funo. Em comandos como if, for, while, switch e em declaraes de funes blocos podem ser utilizados para permitir que um comando faa parte do contexto desejado. Blocos em PHP so delimitados pelos caracteres { e }. A utilizao dos delimitadores de bloco em uma parte qualquer do cdigo no relacionada com os comandos citados ou funes no produzir efeito algum, e ser tratada normalmente pelo interpretador.

Exemplo:

if ($x == $y)

comando1;

comando2;

Para que comando2 esteja relacionado ao if preciso utilizar um bloco:

if ($x == $y){

comando1;

comando2;

}

Comandos de seleo

Tambm chamados de condicionais, os comandos de seleo permitem executar comandos ou blocos de comandos com base em testes feitos durante a execuo.

if

O mais trivial dos comandos condicionais o if. Ele testa a condio e executa o comando indicado se o resultado for true (valor diferente de zero). Ele possui duas sintaxes:

if (expresso)

comando;

if (expresso){

comando1;

comando2;

comando3;

comando4;

comando5;

comando1;

comando2;

comando3;

}

if (expresso):

comando;

. . .

comando;

endif;

Para incluir mais de um comando no if da primeira sintaxe, preciso utilizar um bloco, demarcado por chaves.

O else um complemento opcional para o if. Se utilizado, o comando ser executado se a expresso retornar o valor false (zero). Suas duas sintaxes so:

if (expresso)

comando;

else

comando;

if (expresso):

comando;

. . .

comando;

else

comando;

. . .

comando;

endif;

A seguir, temos um exemplo do comando if utilizado com else:

if ($a > $b)

$maior = $a;

else

$maior = $b;

O exemplo acima coloca em $maior o maior valor entre $a e $b

Em determinadas situaes necessrio fazer mais de um teste, e executar condicionalmente diversos comandos ou blocos de comandos. Para facilitar o entendimento de uma estrutura do tipo:

if (expressao1)

comando1;

else

if (expressao2)

comando2;

else

if (expressao3)

comando3;

else

comando4;

foi criado o comando, tambm opcional elseif. Ele tem a mesma funo de um else e um if usados seqencialmente, como no exemplo acima. Num mesmo if podem ser utilizados diversos elseifs, ficando essa utilizao a critrio do programador, que deve zelar pela legibilidade de seu script.

O comando elseif tambm pode ser utilizado com dois tipos de sintaxe. Em resumo, a sintaxe geral do comando if fica das seguintes maneiras:

if (expressao1)

comando;

[ elseif (expressao2)

comando; ]

[ else

comando; ]

if (expressao1) :

comando;

. . .

comando;

[ elseif (expressao2)

comando;

. . .

comando; ]

[ else

comando;

. . .

comando; ]

endif;

switch

O comando switch atua de maneira semelhante a uma srie de comandos if na mesma expresso. Freqentemente o programador pode querer comparar uma varivel com diversos valores, e executar um cdigo diferente a depender de qual valor igual ao da varivel. Quando isso for necessrio, deve-se usar o comando switch. O exemplo seguinte mostra dois trechos de cdigo que fazem a mesma coisa, sendo que o primeiro utiliza uma srie de ifs e o segundo utiliza switch:

if ($i == 0)

print i igual a zero;

elseif ($i == 1)

print i igual a um;

elseif ($i == 2)

print i igual a dois;

switch ($i) {

case 0:

print i igual a zero;

break;

case 1:

print i igual a um;

break;

case 2:

print i igual a dois;

break;

}

importante compreender o funcionamento do switch para no cometer enganos. O comando switch testa linha a linha os cases encontrados, e a partir do momento que encontra um valor igual ao da varivel testada, passa a executar todos os comandos seguintes, mesmo os que fazem parte de outro teste, at o fim do bloco. por isso usa-se o comando break, quebrando o fluxo e fazendo com que o cdigo seja executado da maneira desejada. Veremos mais sobre o break mais adiante. Veja o exemplo:

switch ($i) {

case 0:

print i igual a zero;

case 1:

print i igual a um;

case 2:

print i igual a dois;

}

No exemplo acima, se $i for igual a zero, os trs comandos print sero executados. Se $i for igual a 1, os dois ltimos print sero executados. O comando s funcionar da maneira desejada se $i for igual a 2.

Em outras linguagens que implementam o comando switch, ou similar, os valores a serem testados s podem ser do tipo inteiro. Em PHP permitido usar valores do tipo string como elementos de teste do comando switch. O exemplo abaixo funciona perfeitamente:

switch ($s) {

case casa:

print A casa amarela;

case arvore:

print a rvore bonita;

case lmpada:

print Joo apagou a lmpada;

}

comandos de repetio

while

O while o comando de repetio (lao) mais simples. Ele testa uma condio e executa um comando, ou um bloco de comandos, at que a condio testada seja falsa. Assim como o if, o while tambm possui duas sintaxes alternativas:

while ()

;

while (){

;

;

;

;

;

;

}

while ():

;

. . .

;

endwhile;

A expresso s testada a cada vez que o bloco de instrues termina, alm do teste inicial. Se o valor da expresso passar a ser false no meio do bloco de instrues, a execuo segue at o final do bloco. Se no teste inicial a condio for avaliada como false, o bloco de comandos no ser executado.

O exemplo a seguir mostra o uso do while para imprimir os nmeros de 1 a 10:

$i = 1;

while ($i 0) {

...

if ($x == 20) {

echo erro! x = 20;

break;

...

}

No trecho de cdigo acima, o lao while tem uma condio para seu trmino normal ($x , como no exemplo:

$varivel->funcao1();

A varivel $this

Na definio de uma classe, pode-se utilizar a varivel $this, que o prprio objeto. Assim, quando uma classe instanciada em um objeto, e uma funo desse objeto na definio da classe utiliza a varivel $this, essa varivel significa o objeto que estamos utilizando.

Como exemplo da utilizao de classes e objetos, podemos utilizar a classe conta, que define uma conta bancria bastante simples, com funes para ver saldo e fazer um crdito.

class conta {

var $saldo;

function saldo() {

return $this->saldo;

}

function credito($valor) {

$this->saldo += $valor;

}

}

$minhaconta = new conta;

$minhaconta->saldo();// a varivel interna no foi

// inicializada, e no contm

// valor algum

$minhaconta->credito(50);

$minhaconta->saldo(); // retorna 50

SubClasses

Uma classe pode ser uma extenso de outra. Isso significa que ela herdar todas as variveis e funes da outra classe, e ainda ter as que forem adicionadas pelo programador. Em PHP no permitido utilizar herana mltipla, ou seja, uma classe pode ser extenso de apenas uma outra.Para criar uma classe extendida, ou derivada de outra, deve ser utilizada a palavra reservada extends, como pode ser visto no exemplo seguinte:

class novaconta extends conta {

var $numero;

function numero() {

return $this->numero;

}

}

A classe acima derivada da classe conta, tendo as mesmas funes e variveis, com a adio da varivel $numero e a funo numero().

Construtores

Um construtor uma funo definida na classe que automaticamente chamada no momento em que a classe instanciada (atravs do operador new). O construtor deve ter o mesmo nome que a classe a que pertence. Veja o exemplo:

class conta {

var $saldo;

function conta () {

$this.saldo = 0;

}

function saldo() {

return $this->saldo;

}

function credito($valor) {

$this->saldo += $valor;

}

}

Podemos perceber que a classe conta agora possui um construtor, que inicializa a varivel $saldo com o valor 0.

Um construtor pode conter argumentos, que so opcionais, o que torna esta ferramenta mais poderosa. No exemplo acima, o construtor da classe conta pode receber como argumento um valor, que seria o valor inicial da conta.

Vale observar que para classes derivadas, o construtor da classe pai no automaticamente herdado quando o construtor da classe derivada chamado.

10. PHP avanado

Interagindo com o browser

PHP tambm permite interagir com informaes do browser automaticamente. Por exemplo, o script a seguir mostra informaes sobre o browser do usurio.

Aprendendo PHP

Esse cdigo em um Internet Explorer 6.0 com sistema operacional Windows 98, geraria: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)

Aprendendo PHP