apostila php
DESCRIPTION
Apostila de PHPTRANSCRIPT
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