php - avançado

73
UNIVERSIDADE FEDERAL DE SERGIPE CCET - CENTRO DE CIÊNCIAS EXATAS E TECNOLOGIA DCCE - DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO E ESTATÍSTICA Projeto Supervisionado Tutorial da linguagem PHP por Maurício Vivas de Souza Barreto [email protected] [email protected] Professor Orientador: Giovanny Lucero

Upload: patrick-dorneles

Post on 27-Sep-2015

245 views

Category:

Documents


2 download

DESCRIPTION

Muito bom materia

TRANSCRIPT

  • UNIVERSIDADE FEDERAL DE SERGIPE

    CCET - CENTRO DE CINCIAS EXATAS E TECNOLOGIA

    DCCE - DEPARTAMENTO DE CINCIA DA COMPUTAO E ESTATSTICA

    Projeto Supervisionado

    Tutorial da linguagem PHPpor Maurcio Vivas de Souza Barreto

    [email protected]

    [email protected]

    Professor Orientador:

    Giovanny Lucero

  • UNIVERSIDADE FEDERAL DE SERGIPECENTRO DE CINCIAS EXATAS E TECNOLOGIA

    DEPARTAMENTO DE ESTATSTICA E INFORMTICA

    Projeto de Final de CursoSubmetido a uma banca examinadora

    composta por:

    ________________________________________

    Professor Giovanny Lucero

    ________________________________________

    Professora Ana Rosimere

    ________________________________________

    Professor Leonardo Nogueira Matos

    2

  • Agradecimentos

    A Giovanny, por ter acreditado no projeto e aceitado o desafio de realiz-lo em to

    pouco tempo;

    A Ana Rosimere, pela ajuda que sempre deu durante todo o curso;

    A minha me, SEMPRE!

    Aos professores do DCCE, pelo conhecimento que me transmitiram;

    A Mnica e Calliandra, tambm pelo incentivo, principalmente enquanto ainda

    estavam no curso;

    A Marina, por existir;

    A meus amigos, porque o so;

    A Shi eu no vou agradecer, s pra ser do contra!

    3

  • ndice

    NDICE..............................................................................................................................5

    1. INTRODUO.............................................................................................................7

    O QUE PHP?.........................................................................................7O QUE PODE SER FEITO COM PHP?.........................................................7COMO SURGIU A LINGUAGEM PHP?........................................................7

    2. SINTAXE BSICA.......................................................................................................8

    DELIMITANDO O CDIGO PHP.................................................................8SEPARADOR DE INSTRUES...................................................................9NOMES DE VARIVEIS..............................................................................9COMENTRIOS.........................................................................................9

    Comentrios de uma linha:................................................................9Comentrios de mais de uma linha:...................................................9

    3. CRIANDO OS PRIMEIROS SCRIPTS...................................................................11

    PRIMEIRO EXEMPLO..............................................................................11UTILIZANDO FORMULRIOS HTML......................................................13INTERAGINDO COM O BROWSER............................................................14ACESSANDO BANCOS DE DADOS..........................................................16

    Conexo com o servidor...................................................................16Seleo do banco de dados...............................................................16Execuo de queries SQL.................................................................17Tratamento de resultados de query SELECT....................................18

    4. TIPOS..........................................................................................................................21

    TIPOS SUPORTADOS...............................................................................21Inteiros (integer ou long)..................................................................21Nmeros em Ponto Flutuante (double ou float)...............................22Strings...............................................................................................22Arrays...............................................................................................24

    Listas..............................................................................................................................25Objetos..............................................................................................26Booleanos.........................................................................................26

    TRANSFORMAO DE TIPOS..................................................................26Coeres...........................................................................................26Transformao explcita de tipos.....................................................28Com a funo settype........................................................................28

    5. CONSTANTES............................................................................................................30

    CONSTANTES PR-DEFINIDAS................................................................30DEFININDO CONSTANTES.......................................................................30

    6. OPERADORES...........................................................................................................31

    ARITMTICOS.........................................................................................31DE STRINGS............................................................................................31DE ATRIBUIO......................................................................................31BIT A BIT................................................................................................32LGICOS................................................................................................32

    4

  • COMPARAO........................................................................................32EXPRESSO CONDICIONAL.....................................................................33DE INCREMENTO E DECREMENTO...........................................................33ORDEM DE PRECEDNCIA DOS OPERADORES.........................................34

    7. ESTRUTURAS DE CONTROLE.............................................................................35

    BLOCOS.................................................................................................35COMANDOS DE SELEO.......................................................................35

    if........................................................................................................36switch................................................................................................39

    COMANDOS DE REPETIO....................................................................41while.................................................................................................41do... while.........................................................................................42for.....................................................................................................43

    QUEBRA DE FLUXO................................................................................45Break.................................................................................................45Continue...........................................................................................45

    8. FUNES...................................................................................................................47

    DEFININDO FUNES.............................................................................47VALOR DE RETORNO..............................................................................47ARGUMENTOS........................................................................................47

    Passagem de parmetros por referncia..........................................48Argumentos com valores pr-definidos (default)..............................49

    CONTEXTO.............................................................................................50ESCOPO..................................................................................................50

    9. VARIVEIS.................................................................................................................53

    O MODIFICADOR STATIC.........................................................................53VARIVEIS VARIVEIS..........................................................................54VARIVEIS ENVIADAS PELO NAVEGADOR..............................................54

    URLencode.......................................................................................54VARIVEIS DE AMBIENTE......................................................................55VERIFICANDO O TIPO DE UMA VARIVEL..............................................55

    Funo que retorna o tipo da varivel.............................................55Funes que testam o tipo da varivel.............................................56

    DESTRUINDO UMA VARIVEL................................................................56VERIFICANDO SE UMA VARIVEL POSSUI UM VALOR............................57

    A funo isset....................................................................................57A funo empty.................................................................................57

    10. CLASSES E OBJETOS............................................................................................58

    CLASSE..................................................................................................58OBJETO..................................................................................................58A VARIVEL $THIS.................................................................................58SUBCLASSES..........................................................................................59CONSTRUTORES.....................................................................................60

    12. CONCLUSES.........................................................................................................62

    13. BIBLIOGRAFIA E REFERNCIAS.....................................................................63

    APNDICE 01 - FUNES PARA TRATAMENTO DE STRINGS........................64

    5

  • FUNES RELACIONADAS A HTML......................................................64htmlspecialchars...............................................................................64htmlentities.......................................................................................64nl2br.................................................................................................64get_meta_tags...................................................................................65strip_tags..........................................................................................66urlencode..........................................................................................66urldecode..........................................................................................67

    FUNES RELACIONADAS A ARRAYS.....................................................67Implode e join...................................................................................67split...................................................................................................67explode..............................................................................................68

    COMPARAES ENTRE STRINGS.............................................................68similar_text.......................................................................................68strcasecmp........................................................................................69strcmp...............................................................................................69strstr..................................................................................................69stristr.................................................................................................70strpos................................................................................................70strrpos...............................................................................................70

    FUNES PARA EDIO DE STRINGS......................................................70chop..................................................................................................70ltrim..................................................................................................71trim...................................................................................................71strrev.................................................................................................71strtolower..........................................................................................72strtoupper.........................................................................................72ucfirst................................................................................................73ucwords.............................................................................................73str_replace........................................................................................74

    FUNES DIVERSAS...............................................................................74chr.....................................................................................................74ord ....................................................................................................74echo ..................................................................................................74print .................................................................................................75strlen ................................................................................................75

    APNDICE 02 - FUNES PARA TRATAMENTO DE ARRAYS.........................76

    FUNES GENRICAS............................................................................76Array.................................................................................................76range.................................................................................................77shuffle...............................................................................................77sizeof.................................................................................................77

    FUNES DE NAVEGAO..................................................................77reset...................................................................................................78end....................................................................................................78next...................................................................................................78prev...................................................................................................78pos.....................................................................................................78key.....................................................................................................79each...................................................................................................79

    6

  • FUNES DE ORDENAO.....................................................................79sort....................................................................................................80rsort..................................................................................................80asort..................................................................................................80arsort................................................................................................80ksort..................................................................................................80usort..................................................................................................81uasort................................................................................................81uksort................................................................................................81

    7

  • Resumo

    O presente trabalho tem por objetivo relatar as atividades desenvolvidas

    durante a realizao do projeto supervisionado do aluno Maurcio Vivas de Souza

    Barreto, orientado pelo professor Giovanny Lucero.

    O projeto consistiu numa pesquisa sobre a linguagem PHP uma

    linguagem de script voltada para a construo de home-pages dinmicas, que

    executada no servidor http. Para a complementao do estudo sobre a linguagem foi

    desenvolvida uma aplicao, como exemplo da utilizao da linguagem PHP.

    A aplicao desenvolvida trata-se do preenchimento do formulrio para a

    GED Gratificao de Estmulo Docncia. Atravs do sistema desenvolvido, qualquer

    usurio cadastrado poder preencher os formulrios do GED atravs de um navegador

    http, e ao final do perodo poder imprimir o formulrio preenchido.

    8

  • 1. Introduo

    O que PHP?

    PHP uma linguagem que permite criar sites WEB dinmicos,

    possibilitando uma interao com o usurio atravs de formulrios, parmetros da URL

    e links. A diferena de PHP com relao a linguagens semelhantes a Javascript que o

    cdigo PHP executado no servidor, sendo enviado para o cliente apenas html puro.

    Desta maneira possvel interagir com bancos de dados e aplicaes existentes no

    servidor, com a vantagem de no expor o cdigo fonte para o cliente. Isso pode ser til

    quando o programa est lidando com senhas ou qualquer tipo de informao

    confidencial.

    O que diferencia PHP de um script CGI escrito em C ou Perl que o

    cdigo PHP fica embutido no prprio HTML, enquanto no outro caso necessrio que o

    script CGI gere todo o cdigo HTML, ou leia de um outro arquivo.

    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.

  • Como surgiu a linguagem PHP?

    A linguagem PHP foi concebida durante o outono de 1994 por Rasmus

    Lerdorf. As primeiras verses no foram disponibilizadas, tendo sido utilizadas em sua

    home-page apenas para que ele pudesse ter informaes sobre as visitas que estavam

    sendo feitas. A primeira verso utilizada por outras pessoas foi disponibilizada em 1995,

    e ficou conhecida como Personal Home Page Tools (ferramentas para pgina

    pessoal). Era composta por um sistema bastante simples que interpretava algumas

    macros e alguns utilitrios que rodavam por trs das home-pages: um livro de visitas,

    um contador e algumas outras coisas.

    Em meados de 1995 o interpretador foi reescrito, e ganhou o nome de

    PHP/FI, o FI veio de um outro pacote escrito por Rasmus que interpretava dados de

    formulrios HTML (Form Interpreter). Ele combinou os scripts do pacote Personal

    Home Page Tools com o FI e adicionou suporte a mSQL, nascendo assim o PHP/FI, que

    cresceu bastante, e as pessoas passaram a contribuir com o projeto.

    Estima-se que em 1996 PHP/FI estava sendo usado por cerca de 15.000

    sites pelo mundo, e em meados de 1997 esse nmero subiu para mais de 50.000. Nessa

    poca houve uma mudana no desenvolvimento do PHP. Ele deixou de ser um projeto

    de Rasmus com contribuies de outras pessoas para ter uma equipe de

    desenvolvimento mais organizada. O interpretador foi reescrito por Zeev Suraski e

    Andi Gutmans, e esse novo interpretador foi a base para a verso 3.

    Atualmente o uso do PHP3 vem crescendo numa velocidade incrvel, e j

    est sendo desenvolvida a verso 4 do PHP.

  • 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 PHP,

    atravs do arquivo de configurao php.ini.

    Separador de instrues

    Entre cada instruo em PHP preciso utilizar o ponto-e-vrgula, assim

    como em C, Perl e outras linguagens mais conhecidas. Na ltima instruo do bloco de

    script no necessrio o uso do ponto-e-vrgula, mas por questes estticas recomenda-

    se o uso sempre.

  • 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 $vivas e $VIVAS 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. Criando os primeiros scripts

    Primeiro Exemplo

    Neste exemplo, criaremos um script com uma sada simples, que servir

    para testar se a instalao foi feita corretamente:

    Aprendendo PHP

    Salve o arquivo como primeiro.php3 no diretorio de documentos do

    Apache (ou o Web Server escolhido). Abra uma janela do navegador e digite o endereo

    http://localhost/primeiro.php3. Verificando o cdigo fonte da pgina

    exibida, temos o seguinte:

    Aprendendo PHP

    Primeiro Script

    Isso mostra como o PHP funciona. O script executado no servidor,

    ficando disponvel para o usurio apenas o resultado. Agora vamos escrever um script

    que produza exatamente o mesmo resultado utilizando uma varivel:

  • Aprendendo PHP

    Utilizando formulrios HTML

    Ao clicar num boto Submit em um formulrio HTML as informaes

    dos campos sero enviadas ao servidor especificado para que possa ser produzida uma

    resposta. O PHP trata esses valores como variveis, cujo nome o nome do campo

    definido no formulrio. O exemplo a seguir mostra isso, e mostra tambm como o

    cdigo PHP pode ser inserido em qualquer parte do cdigo HTML:

    Aprendendo PHP

  • figura 01 figura 02

    Isso ocorre porque o cdigo PHP testa o contedo da varivel $texto.

    Inicialmente ele uma string vazia, e por isso nada impresso na primeira parte.

    Quando algum texto digitado no formulrio e submetido, o PHP passa a trat-lo como

    uma varivel. Como no formulrio o campo possui o nome texto, a varivel com seu

    contedo ser $texto. Assim, no prximo teste o valor da varivel ser diferente de uma

    string vazia, e o PHP imprime um texto antes do formulrio.

    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. As figuras 03 e 04 mostram o resultado visto no Netscape Communicator e o

    Microsoft Internet Explorer, respectivamente.

    Aprendendo PHP

    figura 03 figura 04

    Observe que o resultado mostra caractersticas de cada browser, como a

    verso, e no caso do Communicator at o idioma (en). Com isso, se voc criar uma

    pgina com recursos disponveis somente no Internet Explorer, por exemplo, pode

    esconder o cdigo dos outros browsers, com um cdigo semelhante ao seguinte:

    Aprendendo PHP

  • echo "Voc usa Internet Explorer";} else { echo "Voc no usa Internet Explorer";}?>

    Neste exemplo, ser apenas exibido um texto informando se est sendo

    utilizado o Microsoft Internet Explorer ou no, mas para outras funes poderia ser

    utilizado algo semelhante.

    bom notar o surgimento de mais uma funo no cdigo anterior:

    strpos(string1,string2). Essa funo retorna a posio da primeira apario de

    string2 em string1, contando a partir de zero, e no retorna valor algum se no ocorrer.

    Assim, para testar se a string $HTTP_USER_AGENT contm a string MSIE, basta

    testar se strpos devolve algum valor.

    Acessando Bancos de Dados

    Neste documento todos os exemplos referentes a acesso de bancos de

    dados utilizaro o gerenciador de banco de dados MySQL, que pode ser copiado

    gratuitamente no site http://www.mysql.org.

    Para interagir com uma base de dados SQL existem trs comandos

    bsicos que devem ser utilizados: um que faz a conexo com o servidor de banco de

    dados, um que seleciona a base de dados a ser utilizada e um terceiro que executa uma

    query SQL.

    Conexo com o servidor

    A conexo com o servidor de banco de dados mySQL em PHP feita

    atravs do comando mysql_connect, que tem a seguinte sintaxe:

    int mysql_connect(string /*host [:porta]*/ , string /*login*/ , string /*senha*/ );

  • Os parmetros so bastante simples: o endereo do servidor(host), o nome

    do usurio (login) e a senha para a conexo. A funo retorna um valor inteiro, que o

    identificador da conexo estabelecida e dever ser armazenado numa varivel para ser

    utilizado depois. No nosso exemplo, temos como servidor de banco de dados a mesma

    mquina que roda o servidor http, como login o usurio root e senha phppwd:

    $conexao = mysql_connect(localhost, root, phppwd);

    Assim, se a conexo for bem sucedida (existir um servidor no endereo

    especificado que possua o usurio com a senha fornecida), o identificador da conexo

    fica armazenado na varivel $conexo.

    Seleo do banco de dados

    Uma vez conectado, preciso selecionar o banco de dados existente no

    servidor com o qual desejamos trabalhar. Isso feito atravs da funo int

    mysql_select_db, que possui a seguinte sintaxe:

    int mysql_select_db(string /*nome_base*/, int /*conexao*/ );

    O valor de retorno 0 se o comando falhar, e 1 em caso de sucesso. O

    nome da base de dados a selecionar o primeiro parmetro fornecido, seguido pelo

    identificador da conexo. Se este for omitido, o interpretador PHP tentar utilizar a

    ltima conexo estabelecida. Recomenda-se sempre explicitar esse valor, para facilitar a

    legibilidade do cdigo. No nosso exemplo, a base de dados a ser selecionada possui o

    nome ged:

    mysql_select_db(ged, $conexao);

    Aps a execuo desse comando qualquer consulta executada para aquela

    conexo utilizar a base de dados selecionada.

  • Execuo de queries SQL

    Aps estabelecida a conexo e selecionada a base de dados a ser utilizada,

    quase toda a interao com o servidor mySQL pode ser feita atravs de consultas

    escritas em SQL (Structured Query Language), com o comando mysql_query, que

    utiliza a seguinte sintaxe:int mysql_query(string consulta, int [conexao] );

    O valor de retorno 0 se falhar ou 1 em caso de sucesso. Sucesso aqui

    significa que a consulta est sintaticamente correta e foi executada no servidor.

    Nenhuma informao sobre o resultado retornada deste comando, ou at mesmo se o

    resultado o esperado. No caso da consulta ser um comando SELECT, o valor de

    retorno um valor interno que identifica o resultado, que poder ser tratado com a

    funo mysql_result() e outras. A string query no deve conter ponto-e-vrgula no

    final do comando, e o identificador da conexo opcional. Vamos criar uma tabela

    como exemplo:$cria = CREATE TABLE exemplo (codigo INT AUTO_INCREMENT

    PRIMARY KEY, nome CHAR(40), email CHAR(50));

    mysql_query($cria, $conexao);

    Agora vejamos como ficou o cdigo completo para executar uma query

    SQL numa base de dados mySQL, com um exemplo que cria uma tabela chamada

    exemplo e adiciona alguns dados:

    $conexao = mysql_connect(localhost, root, phppwd);mysql_select_db(ged, $conexao);

    $cria = CREATE TABLE exemplo (codigo INT AUTO_INCREMENT PRIMARY KEY, nome CHAR(40), email CHAR(50));

    $insere1 = INSERT INTO exemplo (nome,email) VALUES (Mauricio Vivas,[email protected]);

    $insere2 = INSERT INTO exemplo (nome,email) VALUES (Jose da Silva,[email protected]);

    $insere3 = INSERT INTO exemplo (nome,email) VALUES (Fernando Henrique Cardoso,[email protected]);

    $insere4 = INSERT INTO exemplo (nome,email) VALUES (Bill Clinton,[email protected]);

    mysql_query($cria, $conexao);mysql_query($insere1, $conexao);

  • mysql_query($insere2, $conexao);mysql_query($insere3, $conexao);mysql_query($insere4, $conexao);

    Tratamento de resultados de query SELECT

    Ao executar uma query SQL SELECT atravs do comando

    mysql_query, o identificador do resultado deve ser armazenado numa varivel que

    pode ser tratada de diversas formas. Duas maneiras interessantes de faz-lo usam o

    comando mysql_result e o comando mysql_fetch_row, respectivamente.

    O comando mysql_result tem a seguinte sintaxe:

    int mysql_result(int resultado, int linha, mixed [campo]);

    Onde resultado o identificador do resultado, obtido com o retorno da

    funo mysql_query, linha especifica a tupla a ser exibida, j que uma query SELECT

    pode retornar diversas tuplas, e campo o identificador do campo a ser exibido, sendo o

    tipo descrito como mixed pela possibilidade de ser de diversos tipos (neste caso, inteiro

    ou string). Vejamos um exemplo utilizando a tabela criada anteriormente:

    $consulta = SELECT nome, email FROM exemplo WHERE email LIKE vivas;

    $resultado = mysql_query($consulta, $conexao);

    printf("Nome: ", mysql_result($resultado,0,"nome"), \n);

    printf("e-mail: ", mysql_result($resultado,0,"email"),);

    Com o exemplo acima, o resultado ser:

    Nome: Mauricio Vivase-mail: [email protected]

    importante notar que a utilizao desta funo um pouco trabalhosa,

    j que no caso de um resultado com vrias linhas preciso controlar o nmero de linhas

    para trat-las (pode-se utilizar a funo mysql_num_rows(int resultado), que

  • retorna o nmero de linhas de um resultado), e no caso de uma alterao no nome do

    campo preciso alterar tambm a maneira de trat-lo. Por isso mais aconselhvel que

    se use uma outra funo, como por exemplo mysql_fetch_row, que possui a seguinte

    sintaxe:

    array mysql_fetch_row(int result);

    A varivel resultado o identificador da memria de resultados, obtido

    como retorno da funo mysql_query. O resultado produzido por esta funo de

    retirar a primeira linha da memria de resultados, se houver, e coloc-la num array.

    Assim torna-se mais fcil tratar um resultado com vrias linhas, e sem utilizar os nomes

    dos campos na rotina de tratamento do resultado:

    $consulta = SELECT nome, email FROM exemplo;

    $resultado = mysql_query($consulta, $conexao);

    echo "\n";echo "Nomee-mail\n";while ($linha = mysql_fetch_row($resultado)) { printf("$linha[0]); printf("$linha[1]);}echo "\n";

    O cdigo acima ir imprimir todos os registros da tabela exemplo numa

    tabela html. Se o programador desejar pular alguma(s) linha(s) do resultado, poder

    utilizar a funo mysql_data_seek, que tem por objetivo definir qual ser a prxima

    linha da memria de resultados a ser impressa. Sua sintaxe :

    int mysql_data_seek(int resultado, int linha);

    Sendo resultado o identificador do resultado e linha o numero da

    linha. Retorna 0 em caso de falha, e um valor diferente de zero em caso de sucesso.

    Existem diversas outras funes para o tratamento de resultados, que

    armazenam as linhas em arrays e objetos, assim como outras funes para administrar o

    banco de dados, mas como este documento trata-se de uma introduo, inicialmente no

    tratar tpicos mais avanados.

  • 4. 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:

    $vivas = 1234; # inteiro positivo na base decimal$vivas = -234; # inteiro negativo na base decimal$vivas = 0234; # inteiro na base octal-simbolizado pelo 0

    # equivale a 156 decimal$vivas = 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:

    $vivas = 1.234;$vivas = 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 "---Mauricio--" (com uma quebra de linha no

    final).

  • A tabela seguinte lista os caracteres de escape:

    Sintax

    e Significado\n Nova linha

    \

    Aspa dupla

    No apndice 01 est disponvel uma lista das funes utilizadas no

    tratamento de strings.

    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.

  • No apndice 02 est disponvel uma lista das funes mais comuns para o

    tratamento de arrays.

    Objetos

    Um objeto pode ser inicializado utilizando o comando new para instanciar

    uma classe para uma varivel.

    Exemplo:class teste {

    function nada() {echo nada;

    }}

    $vivas = new teste;$vivas -> 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:

    Coeres

    Quando ocorrem determinadas operaes (+, por exemplo) entre dois

    valores de tipos diferentes, o PHP converte o valor de um deles automaticamente

    (coero). interessante notar que se o operando for uma varivel, seu valor no ser

    alterado.

  • O tipo para o qual os valores dos operandos sero convertidos

    determinado da seguinte forma: Se um dos operandos for float, o outro ser

    convertido para float, seno, se um deles for integer, o outro ser convertido para

    integer.

    Exemplo:$vivas = 1; // $vivas a string 1$vivas = $vivas + 1; // $vivas o integer 2$vivas = $vivas + 3.7;// $vivas o double 5.7$vivas = 1 + 1.5 // $vivas o double 2.5

    Como podemos notar, o PHP converte string para integer ou double

    mantendo o valor. O sistema utilizado pelo PHP para converter de strings para nmeros

    o seguinte:

    - analisado o incio da string. Se contiver um nmero, ele ser

    avaliado. Seno, o valor ser 0 (zero);

    - O nmero pode conter um sinal no incio (+ ou -);

    - Se a string contiver um ponto em sua parte numrica a ser

    analisada, ele ser considerado, e o valor obtido ser double;

    - Se a string contiver um e ou E em sua parte numrica a ser

    analisada, o valor seguinte ser considerado como expoente da base

    10, e o valor obtido ser double;

    Exemplos:$vivas = 1 + 10.5; // $vivas == 11.5$vivas = 1 + -1.3e3; // $vivas == -1299$vivas = 1 + teste10.5; // $vivas == 1$vivas = 1 + 10testes; // $vivas == 11$vivas = 1 + " 10testes"; // $vivas == 11$vivas = 1 + "+ 10testes"; // $vivas == 1

    Transformao explcita de tipos

    A sintaxe do typecast de PHP semelhante ao C: basta escrever o tipo

    entre parenteses antes do valor

  • Exemplo:$vivas = 15; // $vivas integer (15)$vivas = (double) $vivas // $vivas double (15.0)$vivas = 3.9 // $vivas double (3.9)$vivas = (int) $vivas // $vivas integer (3)

    // o valor decimal truncado

    Os tipos de cast permitidos so:

    (int), (integer) muda para integer;

    (real), (double), (float) muda para float;

    (string) muda para string;

    (array) muda para array;

    (object) muda para objeto.

    Com a funo settype

    A funo settype converte uma varivel para o tipo especificado, que

    pode ser integer, double, string, array ou object.

    Exemplo:$vivas = 15; // $vivas integersettype($vivas,double) // $vivas double

  • 5. 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;

  • 6. 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

    %

    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 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

    >>

    shift right

    Lgicos

    Utilizados para inteiros representando valores booleanos

    and e lgicoor ou 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 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;

    Precedncia Associatividad

    e

    Operadores

    1. esquerda ,

    2.

    no associa new

  • 7. 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): 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 sequencialmente, 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. Frequentemente 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 lampada: print joao apagou a lampada;

    }

  • 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 (): ; . . . ;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

  • O exemplo utilizado para ilustrar o uso do while pode ser feito da

    seguinte maneira utilizando o do.. while:

    $i = 0;do { print ++$i;} while ($i < 10);

    for

    O tipo de lao mais complexo o for. Para os que programam em C, C+

    + ou Java, a assimilao do funcionamento do for natural. Mas para aqueles que esto

    acostumados a linguagens como Pascal, h uma grande mudana para o uso do for. As

    duas sintaxes permitidas so:

    for (;;) ;

    for (;;) : ; . . . ;endfor;

    As trs expresses que ficam entre parnteses tm as seguintes

    finalidades:

    Inicializao: comando ou sequencia de comandos a serem realizados

    antes do inicio do lao. Serve para inicializar variveis.

    Condio: Expresso booleana que define se os comandos que esto

    dentro do lao sero executados ou no. Enquanto a expresso for verdadeira (valor

    diferente de zero) os comandos sero executados.

    Incremento: Comando executado ao final de cada execuo do lao.

    Um comando for funciona de maneira semelhante a um while escrito

    da seguinte forma:

  • while () {comandos...

    }

    Quebra de fluxo

    Break

    O comando break pode ser utilizado em laos de do, for e while,

    alm do uso j visto no comando switch. Ao encontrar um break dentro de um

    desses laos, o interpretador PHP para imediatamente a execuo do lao, seguindo

    normalmente o fluxo do script.while ($x > 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

  • O exemplo acima uma maneira ineficiente de imprimir os nmeros

    pares entre 0 e 99. O que o lao faz testar se o resto da diviso entre o nmero e 2 0.

    Se for diferente de zero (valor lgico true) o interpretador encontrar um continue,

    que faz com que os comandos seguintes do interior do lao sejam ignorados, seguindo

    para a prxima iterao.

  • 8. Funes

    Definindo funes

    A sintaxe bsica para definir uma funo :

    function nome_da_funo([arg1, arg2, arg3]) {Comandos;... ;[return ];

    }

    Qualquer cdigo PHP vlido pode estar contido no interior de uma

    funo. Como a checagem de tipos em PHP dinmica, o tipo de retorno no deve ser

    declarado, sendo necessrio que o programador esteja atento para que a funo retorne o

    tipo desejado. recomendvel que esteja tudo bem documentado para facilitar a leitura

    e compreenso do cdigo. Para efeito de documentao, utiliza-se o seguinte formato de

    declarao de funo:

    tipo function nome_da_funcao(tipo arg1, tipo arg2, ...);

    Este formato s deve ser utilizado na documentao do script, pois o PHP

    no aceita a declarao de tipos. Isso significa que em muitos casos o programador deve

    estar atento ao tipos dos valores passados como parmetros, pois se no for passado o

    tipo esperado no emitido nenhum alerta pelo interpretador PHP, j que este no testa

    os tipos.

    Valor de retorno

    Toda funo pode opcionalmente retornar um valor, ou simplesmente

    executar os comandos e no retornar valor algum.

    No possvel que uma funo retorne mais de um valor, mas permitido

    fazer com que uma funo retorne um valor composto, como listas ou arrays.

  • Argumentos

    possvel passar argumentos para uma funo. Eles devem ser

    declarados logo aps o nome da funo, entre parnteses, e tornam-se variveis

    pertencentes ao escopo local da funo. A declarao do tipo de cada argumento

    tambm utilizada apenas para efeito de documentao.

    Exemplo:

    function imprime($texto){ echo $texto;}

    imprime(teste de funes);

    Passagem de parmetros por referncia

    Normalmente, a passagem de parmetros em PHP feita por valor, ou

    seja, se o contedo da varivel for alterado, essa alterao no afeta a varivel original.

    Exemplo:

    function mais5($numero) { $numero += 5;}

    $a = 3;mais5($a); //$a continua valendo 3

    No exemplo acima, como a passagem de parmetros por valor, a funo

    mais5 intil, j que aps a execuo sair da funo o valor anterior da varivel

    recuperado. Se a passagem de valor fosse feita por referncia, a varivel $a teria 8 como

    valor. O que ocorre normalmente que ao ser chamada uma funo, o interpretador

    salva todo o escopo atual, ou seja, os contedos das variveis. Se uma dessas variveis

    for passada como parmetro, seu contedo fica preservado, pois a funo ir trabalhar

    na verdade com uma cpia da varivel. Porm, se a passagem de parmetros for feita

    por referncia, toda alterao que a funo realizar no valor passado como parmetro

    afetar a varivel que o contm.

  • H duas maneiras de fazer com que uma funo tenha parmetros

    passados por referncia: indicando isso na declarao da funo, o que faz com que a

    pasagem de parmetros sempre seja assim; e tambm na prpria chamada da funo.

    Nos dois casos utiliza-se o modificador &. Vejamos um exemplo que ilustra os dois

    casos:

    function mais5(&$num1, $num2) { $num1 += 5; $num2 += 5;}

    $a = $b = 1;mais5($a, $b); /* Neste caso, s $num1 ter seu valor

    alterado, pois a passagem por referncia est definida na declarao da funo. */

    mais5($a, &$b); /* Aqui as duas variveis tero seus valores alterados. */

    Argumentos com valores pr-definidos (default)

    Em PHP possvel ter valores default para argumentos de funes, ou

    seja, valores que sero assumidos em caso de nada ser passado no lugar do argumento.

    Quando algum parmetro declarado desta maneira, a passagem do mesmo na chamada

    da funo torna-se opcional.

    function teste($vivas = testando) { echo $vivas;}

    teste(); // imprime testandoteste(outro teste); // imprime outro teste

    bom lembrar que quando a funo tem mais de um parmetro, o que

    tem valor default deve ser declarado por ltimo:

    function teste($figura = circulo, $cor) { echo a figura um , $figura, de cor $cor;}

  • teste(azul); /* A funo no vai funcionar da maneira esperada,

    ocorrendo um erro no interpretador. A declarao correta : */

    function teste2($cor, $figura = circulo) { echo a figura um , $figura, de cor $cor;}

    teste2(azul);

    /* Aqui a funcao funciona da maneira esperada, ou seja, imprime o texto: a figura um crculo de cor azul */

    Contexto

    O contexto o conjunto de variveis e seus respectivos valores num

    determinado ponto do programa. Na chamada de uma funo, ao iniciar a execuo do

    bloco que contm a implementao da mesma criado um novo contexto, contendo as

    variveis declaradas dentro do bloco, ou seja, todas as variveis utilizadas dentro

    daquele bloco sero eliminadas ao trmino da execuo da funo.

    Escopo

    O escopo de uma varivel em PHP define a poro do programa onde ela

    pode ser utilizada. Na maioria dos casos todas as variveis tm escopo global.

    Entretanto, em funes definidas pelo usurio um escopo local criado. Uma varivel

    de escopo global no pode ser utilizada no interior de uma funo sem que haja uma

    declarao.

    Exemplo:$vivas = Testando;

    function Teste() { echo $vivas;}

    Teste();

    O trecho acima no produzir sada alguma, pois a varivel $vivas de

    escopo global, e no pode ser referida num escopo local, mesmo que no haja outra com

    nome igual que cubra a sua visibilidade. Para que o script funcione da forma desejada, a

    varivel global a ser utilizada deve ser declarada.

  • Exemplo:$vivas = Testando;

    function Teste() { global $vivas; echo $vivas;}

    Teste();

    Uma declarao global pode conter vrias variveis, separadas por

    vrgulas. Uma outra maneira de acessar variveis de escopo global dentro de uma

    funo utilizando um array pr-definido pelo PHP cujo nome $GLOBALS. O ndice

    para a varivel referida o proprio nome da varivel, sem o caracter $. O exemplo

    acima e o abaixo produzem o mesmo resultado:

    Exemplo:$vivas = "Testando";

    function Teste() { echo $GLOBALS["vivas"]; // imprime $vivas echo $vivas; // no imprime nada }

    Teste();

  • 9. Variveis

    O modificador static

    Uma varivel esttica visvel num escopo local, mas ela inicializada

    apenas uma vez e seu valor no perdido quando a execuo do script deixa esse

    escopo. Veja o seguinte exemplo:

    function Teste() { $a = 0; echo $a; $a++;}

    O ltimo comando da funo intil, pois assim que for encerrada a

    execuo da funo a varivel $a perde seu valor. J no exemplo seguinte, a cada

    chamada da funo a varivel $a ter seu valor impresso e ser incrementada:

    function Teste() { static $a = 0; echo $a; $a++;}

    O modificador static muito utilizado em funes recursivas, j que o

    valor de algumas variveis precisa ser mantido. Ele funciona da seguinte forma: O valor

    das variveis declaradas como estticas mantido ao terminar a execuo da funo. Na

    prxima execuo da funo, ao encontrar novamente a declarao com static, o valor

    da varivel recuperado.

    Em outras palavras, uma varivel declarada como static tem o mesmo

    tempo de vida que uma varivel global, porm sua visibilidade restrita ao escopo

    local em que foi declarada e s recuperada aps a declarao.

    Exemplo: function Teste() { echo "$a"; static $a = 0; $a++;}

  • O exemplo acima no produzir sada alguma. Na primeira execuo da

    funo, a impresso ocorre antes da atribuio de um valor funo, e portanto o

    contedo de $a nulo (string vazia). Nas execues seguintes da funo Teste() a

    impresso ocorre antes da recuperao do valor de $a, e portanto nesse momento seu

    valor ainda nulo. Para que a funo retorne algum valor o modificador static deve

    ser utilizado.

    Variveis Variveis

    O PHP tem um recurso conhecido como variveis variveis, que consiste

    em variveis cujos nomes tambm so variveis. Sua utilizao feita atravs do duplo

    cifro ($$).$a = teste;$$a = Mauricio Vivas;

    O exemplo acima e equivalente ao seguinte:

    $a = teste;$teste = Mauricio Vivas;

    Variveis enviadas pelo navegador

    Para interagir com a navegao feita pelo usurio, necessrio que o PHP

    possa enviar e receber informaes para o software de navegao. A maneira de enviar

    informaes, como j foi visto anteriormente, geralmente atravs de um comando de

    impresso, como o echo. Para receber informaes vindas do navegador atravs de um

    link ou um formulrio html o PHP utiliza as informaes enviadas atravs da URL. Por

    exemplo: se seu script php est localizado em http://localhost/teste.php3 e

    voc o chama com a url http://localhost/teste.php3?vivas=teste,

    automaticamente o PHP criar uma varivel com o nome $vivas contendo a string

    teste. Note que o contedo da varivel est no formato urlencode. Os formulrios

    html j enviam informaes automaticamente nesse formato, e o PHP decodifica sem

    necessitar de tratamento pelo programador.

  • URLencode

    O formato urlencode obtido substituindo os espaos pelo caracter +

    e todos os outros caracteres no alfa-numricos (com exceo de _) pelo caracter %

    seguido do cdigo ASCII em hexadecimal.

    Por exemplo: o texto Testando 1 2 3 !! em urlencode fica

    Testando+1+2+3+%21%21

    O PHP possui duas funes para tratar com texto em urlencode. Seguem

    suas sintaxes:

    string urlencode(string texto);string urldecode(string texto);

    Essas funes servem respectivamente para codificar ou decodificar um

    texto passado como argumento. Para entender melhor o que um argumento e como

    funciona uma funo, leia o tpico funes.

    Variveis de ambiente

    O PHP possui diversas variveis de ambiente, como a $PHP_SELF, por

    exemplo, que contm o nome e o path do prprio arquivo. Algumas outras contm

    informaes sobre o navegador do usurio, o servidor http, a verso do PHP e diversas

    informaes. Para ter uma listagem de todas as variveis e constantes de ambiente e

    seus respectivos contedos, deve-se utilizar a funo phpinfo().

    Verificando o tipo de uma varivel

    Por causa da tipagem dinmica utilizada pelo PHP, nem sempre possvel

    saber qual o tipo de uma varivel em determinado instantese no contar com a ajuda de

  • algumas funes que ajudam a verificar isso. A verificao pode ser feita de duas

    maneiras:

    Funo que retorna o tipo da varivel

    Esta funo a gettype. Sua assinatura a seguinte:

    string gettype(mixed var);

    A palavra mixed indica que a varivel var pode ser de diversos tipos.

    A funo gettype pode retornar as seguintes strings: integer,

    double, string, array, object e unknown type.

    Funes que testam o tipo da varivel

    So as funes is_int, is_integer, is_real, is_long,

    is_float, is_string, is_array e is_object. Todas tm o mesmo formato,

    seguindo modelo da assinatura a seguir:

    int is_integer(mixed var);

    Todas essas funes retornam true se a varivel for daquele tipo, e

    false em caso contrrio.

    Destruindo uma varivel

    possvel desalocar uma varivel se ela no for usada posteriormente

    atravs da funo unset, que tem a seguinte assinatura:

  • int unset(mixed var);

    A funo destri a varivel, ou seja, libera a memria ocupada por ela,

    fazendo com que ela deixe de existir. Se mais na frente for feita uma chamada

    varivel, ser criada uma nova varivel de mesmo nome e de contedo vazio, a no ser

    que a chamada seja pela funo isset. Se a operao for bem sucedida, retorna true.

    Verificando se uma varivel possui um valor

    Existem dois tipos de teste que podem ser feitos para verificar se uma

    varivel est setada: com a funo isset e com a funo empty.

    A funo isset

    Possui o seguinte prottipo:

    int isset(mixed var);

    E retorna true se a varivel estiver setada (ainda que com uma string

    vazia ou o valor zero), e false em caso contrrio.

    A funo empty

    Possui a seguinte assinatura:

    int empty(mixed var);

    E retorna true se a varivel no contiver um valor (no estiver setada) ou

    possuir valor 0 (zero) ou uma string vazia. Caso contrrio, retorna false.

  • 10. Classes e Objetos

    Classe

    Uma classe um conjunto de variveis e funes relacionadas a essas

    variveis. Uma vantagem da utilizao poder usufruir do recurso de encapsulamento

    de informao. Com o encapsulamento o usurio de uma classe no precisa saber como

    ela implementada, bastando para a utilizao conhecer a interface, ou seja, as funes

    disponveis. Uma classe um tipo, e portanto no pode ser atribuda a uma varivel.

    Para definir uma classe, deve-se utilizar a seguinte sintaxe:

    class Nome_da_classe { var $variavel1; var $variavel2; function funcao1 ($parametro) { /* === corpo da funo === */ }}

    Objeto

    Como foi dito anteriormente, classes so tipos, e no podem ser atribudas

    a variveis. Variveis do tipo de uma classe so chamadas de objetos, e devem ser

    criadas utilizando o operador new, seguindo o exemplo abaixo:

    $variavel = new $nome_da_classe;

    Para utilizar as funes definidas na classe, deve ser utilizado o

    operador ->, como no exemplo:

    $variavel->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 variavel 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.

  • 12. Concluses

    A realizao deste Projeto Supervisionado possibilitou o estudo da

    linguagem PHP, que se mostrou uma ferramenta poderosa e simples de utilizar na

    construo de sites para a World Wide Web dinmicos, possibilitando uma maior

    interao com o usurio e a armazenagem das informaes em Bancos de Dados.

    Aps a concluso da aplicao, tornou-se claro que a combinao de

    scripts server-side, como o PHP, com scripts client-side, como JavaScript, por

    exemplo, possibilita um maior aproveitamento dos recursos disponveis para criar

    pginas dinmicas, e no processo de criao deve-se ponderar bastante para concluir

    qual dos dois tipos de scripts deve ser utilizado para determinado fim.

    Entre as linguagens de script server-side, PHP surgiu como uma tima

    opo, por diversos motivos: o custo de aquisio, que no existe; a portabilidade,

    permitindo que uma aplicao seja desenvolvida em uma plataforma para ser executada

    em outra; a simplicidade, j que os scripts ficam no prprio cdigo html, e possuem

    uma sintaxe bastante simples; a possibilidade de trabalhar com diversos bancos de

    dados e servidores http, alm do grande nmero de funes pr-definidas, entre outras

    coisas.

    Por esses e outros motivos, possvel afirmar que o estudo sobre PHP foi

    bastante enriquecedor, por ter produzido uma documentao em portugus para a

    linguagem e ter motivado o aluno a continuar se dedicando ao tema.

  • 13. Bibliografia e Referncias

    A pesquisa foi baseada no manual de PHP, disponvel em www.php.net, e

    em diversos tutoriais disponveis no site www.phpbuilder.com. Esses dois endereos

    contm uma vasta documentao sobre a linguagem, alm de endereos para listas de

    discusso, onde pode-se solicitar ajuda de programadores mais experientes.

    Uma boa referncia em portugus a lista PHP para quem fala

    Portugus, que pode ser assinada no endereo www.egroups.com/group/php-pt/.

    Em ingls, alm dos endereos citados acima, uma boa fonte o site

    PHPWizard, que pode ser encontrado em www.phpwizard.net.

  • APNDICE 01 - Funes para tratamento de strings

    Funes relacionadas a HTML

    htmlspecialchars

    string htmlspecialchars(string str);

    Retorna a string fornecida, substituindo os seguintes caracteres:

    & para '&'

    " para '"'

    < para '