Professional Documents
Culture Documents
PHP
PHP
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
Projeto Supervisionado de Final de Curso Este apostila de PHP e fruto do Projeto Supervisionado de Final de Curso de Maurcio Vivas de Souza Barreto, tendo o mesmo sido submetido a uma banca examinadora composta pelo Professor Giovanny Lucero, Professora Ana Rosimeri e Professor Leonardo Nogueira Matos, da Universidade Federal de Sergipe, Centro de Cincias Exatas e Tecnologia do Departamento de Estatistica e Informtica.
&RS\ULJKW F 0DXUtFLR 9LYDV GH 6RX]D %DUUHWR 3HUPLVVLRQ LV JUDQWHG WR FRS\ GLVWULEXWH DQGRU PRGLI\ WKLV GRFXPHQW XQGHU WKH WHUPV RI WKH *18 )UHH 'RFXPHQWDWLRQ /LFHQVH 9HUVLRQ RU DQ\ ODWHU YHUVLRQ SXEOLVKHG E\ WKH )UHH 6RIWZDUH )RXQGDWLRQ ZLWK WKH ,QYDULDQW 6HFWLRQV EHLQJ /,67 7+(,5 7,7/(6 ZLWK WKH )URQW&RYHU 7H[WV EHLQJ /,67 DQG ZLWK WKH %DFN&RYHU 7H[WV EHLQJ /,67 $ FRS\ RI WKH OLFHQVH LV LQFOXGHG LQ WKH VHFWLRQ HQWLWOHG *18 )UHH 'RFXPHQWDWLRQ /LFHQVH
&RS\ULJKW F 0DXUtFLR 9LYDV GH 6RX]D %DUUHWR ( JDUDQWLGD D SHUPLVVmR SDUD FRSLDU GLVWULEXLU HRX PRGLILFDU HVWH GRFXPHQWR VRE RV WHUPRV GD *18 )UHH 'RFXPHQWDWLRQ /LFHQVH YHUVmR RX TXDOTXHU RXWUD YHUVmR SRVWHULRU SXEOLFDGD SHOD )UHH 6RIWZDUH )RXQGDWLRQ VHP REULJDWRULHGDGH GH 6Ho}HV ,QYDULDQWHV QD DEHUWXUD H DR ILQDO GRV WH[WRV 8PD FRSLD GD OLFHQoD GHYH VHU LQFOXtGD QD VHomR LQWLWXODGD *18 )UHH 'RFXPHQWDWLRQ /LFHQVH
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
Indice
1. INTRODUO ................................................................................................................................... 5 O QUE PHP?..................................................................................................................................................................... 6 O QUE PODE SER FEITO COM PHP? ...................................................................................................................................... 6 COMO SURGIU A LINGUAGEM PHP?..................................................................................................................................... 6 2. SINTAXE BSICA.............................................................................................................................. 8 DELIMITANDO O CDIGO PHP ............................................................................................................................................. 8 SEPARADOR DE INSTRUES ............................................................................................................................................... 8 NOMES DE VARIVEIS.......................................................................................................................................................... 8 COMENTRIOS..................................................................................................................................................................... 9 Comentrios de uma linha: ............................................................................................................................................ 9 Comentrios de mais de uma linha: ............................................................................................................................... 9 3. CRIANDO OS PRIMEIROS SCRIPTS ............................................................................................. 10 PRIMEIRO EXEMPLO .......................................................................................................................................................... 10 UTILIZANDO FORMULRIOS HTML ................................................................................................................................... 11 INTERAGINDO COM O BROWSER......................................................................................................................................... 12 ACESSANDO BANCOS DE DADOS ....................................................................................................................................... 13 Conexo com o servidor ............................................................................................................................................... 13 Seleo do banco de dados........................................................................................................................................... 13 Execuo de queries SQL ............................................................................................................................................. 14 TRATAMENTO DE RESULTADOS DE QUERY SELECT ......................................................................................................... 15 4. TIPOS ............................................................................................................................................... 17 TIPOS SUPORTADOS ........................................................................................................................................................... 17 Inteiros (integer ou long).............................................................................................................................................. 17 Strings........................................................................................................................................................................... 18 Arrays ........................................................................................................................................................................... 19 LISTAS ............................................................................................................................................................................... 19 Objetos.......................................................................................................................................................................... 20 Booleanos ..................................................................................................................................................................... 20 TRANSFORMAO DE TIPOS............................................................................................................................................... 20 Coeres ....................................................................................................................................................................... 20 Transformao explcita de tipos ................................................................................................................................. 21 Com a funo settype.................................................................................................................................................... 22 5. CONSTANTES ................................................................................................................................. 23 CONSTANTES PR-DEFINIDAS............................................................................................................................................. 23 DEFININDO CONSTANTES ................................................................................................................................................... 23 6. OPERADORES ................................................................................................................................ 24 ARITMTICOS .................................................................................................................................................................... 24 DE STRINGS ........................................................................................................................................................................ 24 DE ATRIBUIO.................................................................................................................................................................. 24 BIT A BIT ............................................................................................................................................................................ 25 LGICOS ............................................................................................................................................................................ 25 COMPARAO ................................................................................................................................................................... 25 EXPRESSO CONDICIONAL ................................................................................................................................................. 26 DE INCREMENTO E DECREMENTO ....................................................................................................................................... 26 ORDEM DE PRECEDNCIA DOS OPERADORES ..................................................................................................................... 27 7. ESTRUTURAS DE CONTROLE ...................................................................................................... 28 BLOCOS ............................................................................................................................................................................. 28
&XUVR GH /LQJXDJHP 3+3 ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU 3iJLQD
COMANDOS DE SELEO.................................................................................................................................................... 28 if .................................................................................................................................................................................... 28 switch ............................................................................................................................................................................ 30 COMANDOS DE REPETIO ................................................................................................................................................. 32 while.............................................................................................................................................................................. 32 do... while...................................................................................................................................................................... 32 for.................................................................................................................................................................................. 33 QUEBRA DE FLUXO ............................................................................................................................................................ 33 Break............................................................................................................................................................................. 33 Continue........................................................................................................................................................................ 34 8. FUNES ........................................................................................................................................ 35 DEFININDO FUNES ......................................................................................................................................................... 35 VALOR DE RETORNO .......................................................................................................................................................... 35 ARGUMENTOS .................................................................................................................................................................... 35 Passagem de parmetros por referncia ...................................................................................................................... 36 Argumentos com valores pr-definidos (default) .......................................................................................................... 37 CONTEXTO ......................................................................................................................................................................... 37 ESCOPO.............................................................................................................................................................................. 37 9. VARIVEIS....................................................................................................................................... 39 O MODIFICADOR STATIC .................................................................................................................................................... 39 VARIVEIS VARIVEIS....................................................................................................................................................... 40 VARIVEIS ENVIADAS PELO NAVEGADOR........................................................................................................................... 40 URLencode ................................................................................................................................................................... 40 VARIVEIS DE AMBIENTE ................................................................................................................................................... 41 VERIFICANDO O TIPO DE UMA VARIVEL............................................................................................................................ 41 Funo que retorna o tipo da varivel ......................................................................................................................... 41 Funes que testam o tipo da varivel ......................................................................................................................... 41 DESTRUINDO UMA VARIVEL............................................................................................................................................. 42 VERIFICANDO SE UMA VARIVEL POSSUI UM VALOR .......................................................................................................... 42 A funo isset ................................................................................................................................................................ 42 A funo empty ............................................................................................................................................................. 42 10. CLASSES E OBJETOS ................................................................................................................. 43 CLASSE .............................................................................................................................................................................. 43 OBJETO .............................................................................................................................................................................. 43 A VARIVEL $THIS ............................................................................................................................................................. 43 SUBCLASSES...................................................................................................................................................................... 44 CONSTRUTORES ................................................................................................................................................................. 44 12. CONCLUSES .............................................................................................................................. 46 13. BIBLIOGRAFIA E REFERNCIAS................................................................................................ 47 APNDICE 01 - FUNES PARA TRATAMENTO DE STRINGS ..................................................... 48 FUNES RELACIONADAS A HTML ................................................................................................................................... 48 htmlspecialchars ........................................................................................................................................................... 48 htmlentities.................................................................................................................................................................... 48 nl2br.............................................................................................................................................................................. 48 get_meta_tags ............................................................................................................................................................... 49 strip_tags ...................................................................................................................................................................... 49 urlencode ...................................................................................................................................................................... 49 urldecode ...................................................................................................................................................................... 49 FUNES RELACIONADAS A ARRAYS ................................................................................................................................. 50 Implode e join ............................................................................................................................................................... 50 split ............................................................................................................................................................................... 50 explode.......................................................................................................................................................................... 50
&XUVR GH /LQJXDJHP 3+3 ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU 3iJLQD
COMPARAES ENTRE STRINGS ......................................................................................................................................... 51 similar_text ................................................................................................................................................................... 51 strcasecmp .................................................................................................................................................................... 51 strcmp ........................................................................................................................................................................... 51 strstr.............................................................................................................................................................................. 51 stristr............................................................................................................................................................................. 52 strpos ............................................................................................................................................................................ 52 strrpos........................................................................................................................................................................... 52 FUNES PARA EDIO DE STRINGS .................................................................................................................................. 52 chop .............................................................................................................................................................................. 52 ltrim .............................................................................................................................................................................. 52 trim ............................................................................................................................................................................... 53 strrev............................................................................................................................................................................. 53 strtolower...................................................................................................................................................................... 53 strtoupper ..................................................................................................................................................................... 53 ucfirst............................................................................................................................................................................ 54 ucwords......................................................................................................................................................................... 54 str_replace.................................................................................................................................................................... 54 FUNES DIVERSAS ........................................................................................................................................................... 54 chr................................................................................................................................................................................. 54 ord ................................................................................................................................................................................ 54 echo .............................................................................................................................................................................. 55 print .............................................................................................................................................................................. 55 strlen ............................................................................................................................................................................. 55 APNDICE 02 - FUNES PARA TRATAMENTO DE ARRAYS ...................................................... 56 FUNES GENRICAS ........................................................................................................................................................ 56 Array............................................................................................................................................................................. 56 range............................................................................................................................................................................. 56 shuffle ........................................................................................................................................................................... 57 sizeof ............................................................................................................................................................................. 57 FUNES DE NAVEGAO.............................................................................................................................................. 57 reset .............................................................................................................................................................................. 57 end ................................................................................................................................................................................ 57 next ............................................................................................................................................................................... 57 prev............................................................................................................................................................................... 57 pos ................................................................................................................................................................................ 58 key................................................................................................................................................................................. 58 each .............................................................................................................................................................................. 58 FUNES DE ORDENAO ................................................................................................................................................. 58 sort................................................................................................................................................................................ 59 rsort .............................................................................................................................................................................. 59 asort.............................................................................................................................................................................. 59 arsort ............................................................................................................................................................................ 59 ksort .............................................................................................................................................................................. 59 usort.............................................................................................................................................................................. 59 uasort............................................................................................................................................................................ 60 uksort ............................................................................................................................................................................ 60 SOBRE O AUTOR DA APOSTILA ...................................................................................................... 61
*18 )5(( '2&80(17$7,21 /,&(16( .........................................................................................
62
1. Introduo
&XUVR GH /LQJXDJHP 3+3 ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU 3iJLQD
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.
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
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.
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
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:
<?php comandos ?> <script language=php> comandos </script> <? comandos ?> <% 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.
&XUVR GH /LQJXDJHP 3+3 ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU 3iJLQD
Comentrios
H dois tipos de comentrios em cdigo PHP:
Exemplo: <? echo teste; #isto um teste ?> <? echo teste; //este teste similar ao anterior ?>
Exemplos:
<? echo teste; /* Isto um comentrio com mais de uma linha, mas no funciona corretamente ?> */ <? echo teste; /* Isto um comentrio com mais de uma linha que funciona corretamente */ ?>
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
<html> <head><title>Aprendendo PHP</title></head> <body> <?php echo "Primeiro Script"; ?> </body> </html>
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:
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:
<html> <head><title>Aprendendo PHP</title></head> <body> <?php $texto = "Primeiro Script"; echo $texto; ?> </body> </html>
&XUVR GH /LQJXDJHP 3+3 ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU 3iJLQD
10
<html> <head><title>Aprendendo PHP</title></head> <body> <?php if ($texto != "") echo "Voc digitou \"$texto\"<br><br>"; ?> <form method=post action="<? echo $PATH_INFO; ?>"> <input type="text" name="texto" value="" size=10> <br> <input type="submit" name="sub" value="Enviar!"> </form> </body> </html>
Ao salvar o arquivo acima e carreg-lo no browser, o usurio ver apenas um formulrio que contm um espao para digitar o texto, como visto na figura 01. Ao digitar um texto qualquer e submeter o formulrio, a resposta, que o mesmo arquivo PHP (indicado pela constante $PATH_INFO, que retorna o nome do arquivo) ser como na figura 02:
[Imagem16] figura 01 [Imagem17] 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.
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
11
<html> <head><title>Aprendendo PHP</title></head> <body> <? echo $HTTP_USER_AGENT; ?> </body> </html>
[Imagem18] figura 03 [Imagem19] 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:
<html> <head><title>Aprendendo PHP</title></head> <body> <? if (strpos($HTTP_USER_AGENT,"MSIE 5") != 0) { echo "Voc usa Internet Explorer"; } else { echo "Voc no usa Internet Explorer"; } ?> </body> </html>
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
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
12
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:
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.
mysql_select_db(ged, $conexao);
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
13
Aps a execuo desse comando qualquer consulta executada para aquela conexo utilizar a base de dados selecionada.
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 Vivas,vivas@usa.net); $insere2 = INSERT Silva,jose@teste.com); INTO INTO exemplo exemplo (nome,email) (nome,email) (nome,email) VALUES VALUES VALUES (Mauricio (Jose da
(Fernando (Bill
$insere4 = INSERT INTO exemplo Clinton,president@whitehouse.gov); mysql_query($cria, $conexao); mysql_query($insere1, $conexao); mysql_query($insere2, $conexao); mysql_query($insere3, $conexao); mysql_query($insere4, $conexao);
(nome,email)
VALUES
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
14
$consulta vivas;
SELECT
nome,
FROM
exemplo
WHERE
LIKE
$resultado = mysql_query($consulta, $conexao); printf("Nome: ", mysql_result($resultado,0,"nome"), <br>\n); printf("e-mail: ", mysql_result($resultado,0,"email"),<br>);
Com o exemplo acima, o resultado ser:
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:
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
15
$consulta = SELECT nome, email FROM exemplo; $resultado = mysql_query($consulta, $conexao); echo "<table border=1>\n"; echo "<tr><td>Nome</td><td>e-mail</tr>\n"; while ($linha = mysql_fetch_row($resultado)) { printf("<tr><td>$linha[0]</td>); printf("<td>$linha[1]</td></tr>); } echo "</table>\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 :
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
16
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
inteiro positivo na base decimal inteiro negativo na base decimal inteiro na base octal-simbolizado pelo 0 equivale a 156 decimal 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.
17
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:
Sintaxe
Significado
\n \r \t \\ \$ \ \
Nova linha Retorno de carro (semelhante a \n) Tabulao horizontal A prpria barra ( \ ) O smbolo $ Aspa simples Aspa dupla
No apndice 01 est disponvel uma lista das funes utilizadas no tratamento de strings.
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
18
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: <? $cor[1] = vermelho; $cor[2] = verde; $cor[3] = azul; $cor[teste] = 1; ?> Equivalentemente, pode-se escrever: <? $cor = array(1 => vermelho, 2 => verde, 3 => azul, teste => 1); ?>
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:
$a $b $c $d
== == == ==
19
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.
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
20
1; // $vivas a string 1 $vivas + 1; // $vivas o integer 2 $vivas + 3.7;// $vivas o double 5.7 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;
+ + + + + +
// // // // //
$vivas integer (15) $vivas double (15.0) $vivas double (3.9) $vivas integer (3) o valor decimal truncado
Os tipos de cast permitidos so: (int), (integer) (real), (double), (float) (string) (array) (object) muda para integer; muda para float; muda para string; muda para array; muda para objeto.
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
21
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
22
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, podese 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:
2*pi*$raio;
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
23
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.
+ * / %
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
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
24
bit a bit
Comparam dois nmeros bit a bit.
Lgicos
Utilizados para inteiros representando valores booleanos and or xor ! && || e lgico ou lgico ou 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.
== != <
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
25
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
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
26
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
27
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.
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:
28
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;
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;
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
29
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:
30
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;
}
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
31
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:
do... while
O lao do..while funciona de maneira bastante semelhante ao while, com a simples diferena que a expresso testada ao final do bloco de comandos. O lao do..while possui apenas uma sintaxe, que a seguinte:
while:
32
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:
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:
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.
33
Continue
O comando continue tambm deve ser utilizado no interior de laos, e funciona de maneira semelhante ao break, com a diferena que o fluxo ao invs de sair do lao volta para o incio dele. Vejamos o exemplo:
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
34
8. Funes
Definindo funes
A sintaxe bsica para definir uma funo :
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:
&XUVR GH /LQJXDJHP 3+3 ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU 3iJLQD
35
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, alterados. */ &$b); /* Aqui as duas variveis tero seus valores
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
36
function teste($vivas = testando) { echo $vivas; } teste(); // imprime testando teste(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.
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
37
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();
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
38
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:
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
39
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;
http://localhost/teste.php3
voc
chama
com
url
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.
O PHP possui duas funes para tratar com texto em urlencode. Seguem suas sintaxes:
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
40
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().
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.
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
41
A funo isset
Possui o seguinte prottipo:
A funo empty
Possui a seguinte assinatura:
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
42
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->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;
&XUVR GH /LQJXDJHP 3+3 ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU 3iJLQD
43
} } $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
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; } }
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
44
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.
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
45
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.
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
46
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
47
htmlentities
string htmlentities(string str);
Funciona de maneira semelhante ao comando anterior, mas de maneira mais completa, pois converte todos os caracteres da string que possuem uma representao especial em html, como por exemplo: para 'º' para 'ª' para 'á' para ç'
nl2br
string nl2br(string str);
Retorna a string fornecida substituindo todas as quebras de linha (\n) por quebras de linhas em html (<br>).
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
48
get_meta_tags
array get_meta_tags(string arquivo);
Abre um arquivo html e percorre o cabealho em busca de meta tags, retornando num array todos os valores encontrados.
Exemplo: No arquivo teste.html temos: ... <head> <meta name="author" content="jose"> <meta name="tags" content="php3 documentation"> ... </head><!-- busca encerra aqui --> ... a execuo da funo: get_meta_tags(teste.html); retorna o array: array(author=>jose,tags=>"php3 documentation");
strip_tags
string strip_tags(string str);
Retorna a string fornecida, retirando todas as tags html e/ou PHP encontradas.
urlencode
string urlencode(string str);
Retorna a string fornecida, convertida para o formato urlencode. Esta funo til para passar variveis para uma prxima pgina.
urldecode
string urldecode(string str);
Funciona de maneira inversa a urlencode, desta vez decodificando a string fornecida do formato urlencode para texto normal.
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
49
Exemplo: $partes = array("a", "casa nmero", 13, " azul"); $inteiro = join(" ",$partes); $inteiro passa a conter a string: a casa nmero 13 azul
split
array split(string padrao, string str, int [limite]);
Retorna um array contendo partes da string fornecida separadas pelo padro fornecido, podendo limitar o nmero de elementos do array.
Exemplo: $data = 11/14/1975; $data_array = split(/,$data); O cdigo acima faz com que a varivel $data_array receba o valor: array(11,14,1975);
explode
array explode(string padrao, string str);
Funciona de maneira bastante semelhante funo split, com a diferena que no possvel estabelecer um limite para o nmero de elementos do array.
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
50
Exemplo: $num = similar_text("teste", "testando",&$porc); As variveis passam a ter os seguintes valores: $num == 4; $porc == 61.538461538462
strcasecmp
int strcasecmp(string str1, string str2);
Compara as duas strings e retorna 0 (zero) se forem iguais, um valor maior que zero se str1 > str2, e um valor menor que zero se str1 < str2. Esta funo case insensitive, ou seja, maisculas e minsculas so tratadas como iguais.
strcmp
int strcasecmp(string str1, string str2);
Funciona de maneira semelhante funo strcasecmp, com a diferena que esta case sensitive, ou seja, maisculas e minsculas so tratadas como diferentes.
strstr
string strstr(string str1, string str2); string strchr(string str1, string str2);
As duas funes so idnticas. Procura a primeira ocorrncia de str2 em str1. Se no encontrar, retorna uma string vazia, e se encontrar retorna todos os caracteres de str1 a partir desse ponto.
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
51
stristr
string strstr(string str1, string str2);
Funciona de maneira semelhante funo strstr, com a diferena que esta case insensitive, ou seja, maisculas e minsculas so tratadas como iguais.
strpos
int strpos(string str1, string str2, int [offset] );
Retorna a posio da primeira ocorrncia de str2 em str1, ou zero se no houver. O parmetro opcional offset determina a partir de qual caracter de str1 ser efetuada a busca. Mesmo utilizando o offset, o valor de retorno referente ao incio de str1.
strrpos
int strrpos(string haystack, char needle);
Retorna a posio da ltima ocorrncia de str2 em str1, ou zero se no houver.
\n
\n
); // retorna
Teste
ltrim
string ltrim(string str);
Retira espaos e linhas em branco do final da string fornecida.
Exemplo: ltrim(
Teste
\n
\n ); // retorna Teste
\n
\n
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
52
trim
string trim(string str);
Retira espaos e linhas em branco do incio e do final da string fornecida.
\n
\n ); // retorna Teste
strrev
string strrev(string str);
Retorna a string fornecida invertida.
strtolower
string strtolower(string str);
Retorna a string fornecida com todas as letras minsculas.
strtoupper
string strtoupper(string str);
Retorna a string fornecida com todas as letras maisculas.
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
53
ucfirst
string ucfirst(string str);
Retorna a string fornecida com o primeiro caracter convertido para letra maiscula.
ucwords
string ucwords(string str);
Retorna a string fornecida com todas as palavras iniciadas por letras maisculas.
str_replace
string str_replace(string str1, string str2, string str3);
Altera todas as ocorrncias de str1 em str3 pela string str2.
Funes diversas
chr
string chr(int ascii);
Retorna o caracter correspondente ao cdigo ASCII fornecido.
ord
int ord(string string);
Retorna o cdigo ASCII correspontente ao caracter fornecido.
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
54
echo
echo(string arg1, string [argn]... );
Imprime os argumentos fornecidos.
print
print(string arg);
Imprime o argumento fornecido.
strlen
int strlen(string str);
Retorna o tamanho da string fornecida.
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
55
Exemplo 1 $teste = array("um", "dois","tr"=>"tres",5=>"quatro","cinco"); Temos o seguinte mapeamento: 0 => um (0 o primeiro ndice, se no houver um explicito) 1 => dois (o inteiro seguinte) tr => tres 5 => quatro (valor explicitado) 6 => cinco (o inteiro seguinte ao ltimo atribudo, e no o prximo valor, que seria 2) Exemplo 2 $teste = array("um", 6=>"dois","tr"=>"tres",5=>"quatro","cinco"); Temos o seguinte mapeamento: 0 => um 6 => dois tr => tres 5 => quatro (seria 7, se no fosse explicitado) 7 => cinco (seria 6, se no estivesse ocupado)
Em geral, no recomendvel utilizar arrays com vrios tipos de ndices, j que isso pode confundir o programador. No caso de realmente haver a necessidade de utilizar esse recurso, deve-se ter bastante ateno ao manipular os ndices do array.
range
array range(int minimo, int maximo);
A funo range cria um array cujos elementos so os inteiros pertencentes ao intervalo fornecido, inclusive. Se o valor do primeiro parmetro for maior do que o do segundo, a funo retorna false (valor vazio).
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
56
shuffle
void shuffle(array &arr);
Esta funo embaralha o array, ou seja, troca as posies dos elementos aleatoriamente e no retorna valor algum.
sizeof
int sizeof(array arr);
Retorna um valor inteiro contendo o nmero de elementos de um array. Se for utilizada com uma varivel cujo valor no do tipo array, retorna 1. Se a varivel no estiver setada ou for um array vazio, retorna 0.
Funes de navegao
Toda varivel do tipo array possui um ponteiro interno indicando o prximo elemento a ser acessado no caso de no ser especificado um ndice. As funes seguintes servem para modificar esse ponteiro, permitindo assim percorrer um array para verificar seu contedo (chaves e elementos).
reset
mixed reset(array arr);
Seta o ponteiro interno para o primeiro elemento do array, e retorna o contedo desse elemento.
end
mixed end(array arr);
Seta o ponteiro interno para o ltimo elemento do array, e retorna o contedo desse elemento.
next
mixed next(array arr);
Seta o ponteiro interno para o prximo elemento do array, e retorna o contedo desse elemento. Obs.: esta no uma boa funo para determinar se um elemento o ltimo do array, pois pode retornar
prev
mixed prev(array arr);
Seta o ponteiro interno para o elemento anterior do array, e retorna o contedo desse elemento. Funciona de maneira inversa a next.
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
57
pos
mixed pos(array arr);
Retorna o contedo do elemento atual do array, indicado pelo ponteiro interno.
key
mixed key(array arr);
Funciona de maneira bastante semelhante a pos, mas ao invs de retornar o elemento atual indicado pelo ponteiro interno do array, retorna seu ndice.
each
array each(array arr);
Retorna um array contendo o ndice e o elemento atual indicao pelo ponteiro interno do array. o valor de retorno um array de quatro elementos, cujos ndices so 0, 1, key e value. Os elementos de ndices 0 e key armazenam o ndice do valor atual, e os elementos de ndices 1 e value contm o valor do elemento atual indicado pelo ponteiro. Esta funo pode ser utilizada para percorrer todos os elementos de um array e determinar se j foi encontrado o ltimo elemento, pois no caso de haver um elemento vazio, a funo no retornar o valor false. A funo
each s retorna false depois q o ltimo elemento do array foi encontrado. Exemplo: /*funo que percorre todos os elementos de um array e imprime seus ndices e valores */ function imprime_array($arr) { reset($arr); while (list($chave,$valor) = each($arr)) echo Chave: $chave. Valor: $valor; }
Funes de ordenao
So funes que servem para arrumar os elementos de um array de acordo com determinados critrios. Estes critrios so: manuteno ou no da associao entre ndices e elementos; ordenao por elementos ou por ndices; funo de comparao entre dois elementos.
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
58
sort
void sort(array &arr);
A funo mais simples de ordenao de arrays. Ordena os elementos de um array em ordem crescente, sem manter os relacionamentos com os ndices.
rsort
void rsort(array &arr);
Funciona de maneir ainversa funo sort. Ordena os elementos de um array em ordem decrescente, sem manter os relacionamentos com os ndices.
asort
void asort(array &arr);
Tem o funcionamento bastante semelhante funo sort. Ordena os elementos de um array em ordem crescente, porm mantm os relacionamentos com os ndices.
arsort
void arsort(array &arr);
Funciona de maneira inversa funo asort. Ordena os elementos de um array em ordem decrescente e mantm os relacionamentos dos elementos com os ndices.
ksort
void ksort(array &arr);
Funo de ordenao baseada nos ndices. Ordena os elementos de um array de acordo com seus ndices, em ordem crescente, mantendo os relacionamentos.
usort
void usort(array &arr, function compara);
Esta uma funo que utiliza outra funo como parmetro. Ordena os elementos de um array sem manter os relacionamentos com os ndices, e utiliza para efeito de comparao uma funo definida pelo usurio, que deve comparar dois elementos do array e retornar 0, 1 ou 1, de acordo com qualquer critrio estabelecido pelo usurio.
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
59
uasort
void uasort(array &arr, function compara);
Esta funo tambm utiliza outra funo como parmetro. Ordena os elementos de um array e mantm os relacionamentos com os ndices, utilizando para efeito de comparao uma funo definida pelo usurio, que deve comparar dois elementos do array e retornar 0, 1 ou 1, de acordo com qualquer critrio estabelecido pelo usurio.
uksort
void uksort(array &arr, function compara);
Esta funo ordena o array atravs dos ndices, mantendo os relacionamentos com os elementos., e utiliza para efeito de comparao uma funo definida pelo usurio, que deve comparar dois ndices do array e retornar 0, 1 ou 1, de acordo com qualquer critrio estabelecido pelo usurio.
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
60
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
61
*18)UHH'RFXPHQWDWLRQ/LFHQVH
9HUVLRQ 0DUFK &RS\ULJKW & )UHH 6RIWZDUH )RXQGDWLRQ ,QF 7HPSOH 3ODFH 6XLWH %RVWRQ 0$ 86$ (YHU\RQH LV SHUPLWWHG WR FRS\ DQG GLVWULEXWH YHUEDWLP FRSLHV RI WKLV OLFHQVH GRFXPHQW EXW FKDQJLQJ LW LV QRW DOORZHG
35($0%/(
7KH SXUSRVH RI WKLV /LFHQVH LV WR PDNH D PDQXDO WH[WERRN RU RWKHU ZULWWHQ GRFXPHQW IUHH LQ WKH VHQVH RI IUHHGRP WR DVVXUH HYHU\RQH WKH HIIHFWLYH IUHHGRP WR FRS\ DQG UHGLVWULEXWH LW ZLWK RU ZLWKRXW PRGLI\LQJ LW HLWKHU FRPPHUFLDOO\ RU QRQFRPPHUFLDOO\ 6HFRQGDULO\ WKLV /LFHQVH SUHVHUYHV IRU WKH DXWKRU DQG SXEOLVKHU D ZD\ WR JHW FUHGLW IRU WKHLU ZRUN ZKLOH QRW EHLQJ FRQVLGHUHG UHVSRQVLEOH IRU PRGLILFDWLRQV PDGH E\ RWKHUV 7KLV /LFHQVH LV D NLQG RI FRS\OHIW ZKLFK PHDQV WKDW GHULYDWLYH ZRUNV RI WKH GRFXPHQW PXVW WKHPVHOYHV EH IUHH LQ WKH VDPH VHQVH ,W FRPSOHPHQWV WKH *18 *HQHUDO 3XEOLF /LFHQVH ZKLFK LV D FRS\OHIW OLFHQVH GHVLJQHG IRU IUHH VRIWZDUH :H KDYH GHVLJQHG WKLV /LFHQVH LQ RUGHU WR XVH LW IRU PDQXDOV IRU IUHH VRIWZDUH EHFDXVH IUHH VRIWZDUH QHHGV IUHH GRFXPHQWDWLRQ D IUHH SURJUDP VKRXOG FRPH ZLWK PDQXDOV SURYLGLQJ WKH VDPH IUHHGRPV WKDW WKH VRIWZDUH GRHV %XW WKLV /LFHQVH LV QRW OLPLWHG WR VRIWZDUH PDQXDOV LW FDQ EH XVHG IRU DQ\ WH[WXDO ZRUN UHJDUGOHVV RI VXEMHFW PDWWHU RU ZKHWKHU LW LV SXEOLVKHG DV D SULQWHG ERRN :H UHFRPPHQG WKLV /LFHQVH SULQFLSDOO\ IRU ZRUNV ZKRVH SXUSRVH LV LQVWUXFWLRQ RU UHIHUHQFH
$33/,&$%,/,7< $1' '(),1,7,216
7KLV /LFHQVH DSSOLHV WR DQ\ PDQXDO RU RWKHU ZRUN WKDW FRQWDLQV D QRWLFH SODFHG E\ WKH FRS\ULJKW KROGHU VD\LQJ LW FDQ EH GLVWULEXWHG XQGHU WKH WHUPV RI WKLV /LFHQVH 7KH 'RFXPHQW EHORZ UHIHUV WR DQ\ VXFK PDQXDO RU ZRUN $Q\ PHPEHU RI WKH SXEOLF LV D OLFHQVHH DQG LV DGGUHVVHG DV \RX $ 0RGLILHG 9HUVLRQ RI WKH 'RFXPHQW PHDQV DQ\ ZRUN FRQWDLQLQJ WKH 'RFXPHQW RU D SRUWLRQ RI LW HLWKHU FRSLHG YHUEDWLP RU ZLWK PRGLILFDWLRQV DQGRU WUDQVODWHG LQWR DQRWKHU ODQJXDJH $ 6HFRQGDU\ 6HFWLRQ LV D QDPHG DSSHQGL[ RU D IURQWPDWWHU VHFWLRQ RI WKH 'RFXPHQW WKDW GHDOV H[FOXVLYHO\ ZLWK WKH UHODWLRQVKLS RI WKH SXEOLVKHUV RU DXWKRUV RI WKH 'RFXPHQW WR WKH 'RFXPHQW
V RYHUDOO VXEMHFW RU WR UHODWHG PDWWHUV DQG FRQWDLQV QRWKLQJ WKDW FRXOG IDOO GLUHFWO\ ZLWKLQ WKDW RYHUDOO VXEMHFW )RU H[DPSOH LI WKH 'RFXPHQW LV LQ SDUW D WH[WERRN RI PDWKHPDWLFV D 6HFRQGDU\ 6HFWLRQ PD\ QRW H[SODLQ DQ\ PDWKHPDWLFV 7KH UHODWLRQVKLS FRXOG EH D PDWWHU RI KLVWRULFDO FRQQHFWLRQ ZLWK WKH VXEMHFW RU ZLWK UHODWHG PDWWHUV RU RI OHJDO FRPPHUFLDO SKLORVRSKLFDO HWKLFDO RU SROLWLFDO SRVLWLRQ UHJDUGLQJ WKHP 7KH ,QYDULDQW 6HFWLRQV DUH FHUWDLQ 6HFRQGDU\ 6HFWLRQV ZKRVH WLWOHV DUH GHVLJQDWHG DV EHLQJ WKRVH RI ,QYDULDQW 6HFWLRQV LQ WKH QRWLFH WKDW VD\V WKDW WKH 'RFXPHQW LV UHOHDVHG XQGHU WKLV /LFHQVH 7KH &RYHU 7H[WV DUH FHUWDLQ VKRUW SDVVDJHV RI WH[W WKDW DUH OLVWHG DV )URQW&RYHU 7H[WV RU %DFN&RYHU 7H[WV LQ WKH QRWLFH WKDW VD\V WKDW WKH 'RFXPHQW LV UHOHDVHG XQGHU WKLV /LFHQVH $ 7UDQVSDUHQW FRS\ RI WKH 'RFXPHQW PHDQV D PDFKLQHUHDGDEOH FRS\ UHSUHVHQWHG LQ D IRUPDW ZKRVH VSHFLILFDWLRQ LV DYDLODEOH WR WKH JHQHUDO SXEOLF ZKRVH FRQWHQWV FDQ EH YLHZHG DQG HGLWHG GLUHFWO\ DQG VWUDLJKWIRUZDUGO\ ZLWK JHQHULF WH[W HGLWRUV RU IRU LPDJHV FRPSRVHG RI SL[HOV JHQHULF SDLQW SURJUDPV RU IRU GUDZLQJV VRPH ZLGHO\ DYDLODEOH GUDZLQJ HGLWRU DQG WKDW LV VXLWDEOH IRU LQSXW WR WH[W IRUPDWWHUV RU IRU DXWRPDWLF WUDQVODWLRQ WR D YDULHW\ RI IRUPDWV VXLWDEOH IRU LQSXW WR WH[W IRUPDWWHUV $ FRS\ PDGH LQ DQ RWKHUZLVH 7UDQVSDUHQW ILOH IRUPDW ZKRVH PDUNXS KDV EHHQ GHVLJQHG WR WKZDUW RU GLVFRXUDJH VXEVHTXHQW PRGLILFDWLRQ E\ UHDGHUV LV QRW 7UDQVSDUHQW $ FRS\ WKDW LV QRW 7UDQVSDUHQW LV FDOOHG 2SDTXH ([DPSOHV RI VXLWDEOH IRUPDWV IRU 7UDQVSDUHQW FRSLHV LQFOXGH SODLQ $6&,, ZLWKRXW PDUNXS 7H[LQIR LQSXW IRUPDW /D7H; LQSXW IRUPDW 6*0/ RU ;0/ XVLQJ D SXEOLFO\ DYDLODEOH '7' DQG &XUVR GH /LQJXDJHP 3+3 ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU 3iJLQD
62
&RPLWr GH ,QFHQWLYR D 3URGXomR GR 6RIWZDUH *UDWXLWR H $OWHUQDWLYR &,36*$ VWDQGDUGFRQIRUPLQJ VLPSOH +70/ GHVLJQHG IRU KXPDQ PRGLILFDWLRQ 2SDTXH IRUPDWV LQFOXGH 3RVW6FULSW 3') SURSULHWDU\ IRUPDWV WKDW FDQ EH UHDG DQG HGLWHG RQO\ E\ SURSULHWDU\ ZRUG SURFHVVRUV 6*0/ RU ;0/ IRU ZKLFK WKH '7' DQGRU SURFHVVLQJ WRROV DUH QRW JHQHUDOO\ DYDLODEOH DQG WKH PDFKLQHJHQHUDWHG +70/ SURGXFHG E\ VRPH ZRUG SURFHVVRUV IRU RXWSXW SXUSRVHV RQO\ 7KH 7LWOH 3DJH PHDQV IRU D SULQWHG ERRN WKH WLWOH SDJH LWVHOI SOXV VXFK IROORZLQJ SDJHV DV DUH QHHGHG WR KROG OHJLEO\ WKH PDWHULDO WKLV /LFHQVH UHTXLUHV WR DSSHDU LQ WKH WLWOH SDJH )RU ZRUNV LQ IRUPDWV ZKLFK GR QRW KDYH DQ\ WLWOH SDJH DV VXFK 7LWOH 3DJH PHDQV WKH WH[W QHDU WKH PRVW SURPLQHQW DSSHDUDQFH RI WKH ZRUN
V WLWOH SUHFHGLQJ WKH EHJLQQLQJ RI WKH ERG\ RI WKH WH[W
9(5%$7,0 &23<,1*
<RX PD\ FRS\ DQG GLVWULEXWH WKH 'RFXPHQW LQ DQ\ PHGLXP HLWKHU FRPPHUFLDOO\ RU QRQFRPPHUFLDOO\ SURYLGHG WKDW WKLV /LFHQVH WKH FRS\ULJKW QRWLFHV DQG WKH OLFHQVH QRWLFH VD\LQJ WKLV /LFHQVH DSSOLHV WR WKH 'RFXPHQW DUH UHSURGXFHG LQ DOO FRSLHV DQG WKDW \RX DGG QR RWKHU FRQGLWLRQV ZKDWVRHYHU WR WKRVH RI WKLV /LFHQVH <RX PD\ QRW XVH WHFKQLFDO PHDVXUHV WR REVWUXFW RU FRQWURO WKH UHDGLQJ RU IXUWKHU FRS\LQJ RI WKH FRSLHV \RX PDNH RU GLVWULEXWH +RZHYHU \RX PD\ DFFHSW FRPSHQVDWLRQ LQ H[FKDQJH IRU FRSLHV ,I \RX GLVWULEXWH D ODUJH HQRXJK QXPEHU RI FRSLHV \RX PXVW DOVR IROORZ WKH FRQGLWLRQV LQ VHFWLRQ <RX PD\ DOVR OHQG FRSLHV XQGHU WKH VDPH FRQGLWLRQV VWDWHG DERYH DQG \RX PD\ SXEOLFO\ GLVSOD\ FRSLHV
&23<,1* ,1 48$17,7<
,I \RX SXEOLVK SULQWHG FRSLHV RI WKH 'RFXPHQW QXPEHULQJ PRUH WKDQ DQG WKH 'RFXPHQW
V OLFHQVH QRWLFH UHTXLUHV &RYHU 7H[WV \RX PXVW HQFORVH WKH FRSLHV LQ FRYHUV WKDW FDUU\ FOHDUO\ DQG OHJLEO\ DOO WKHVH &RYHU 7H[WV )URQW&RYHU 7H[WV RQ WKH IURQW FRYHU DQG %DFN&RYHU 7H[WV RQ WKH EDFN FRYHU %RWK FRYHUV PXVW DOVR FOHDUO\ DQG OHJLEO\ LGHQWLI\ \RX DV WKH SXEOLVKHU RI WKHVH FRSLHV 7KH IURQW FRYHU PXVW SUHVHQW WKH IXOO WLWOH ZLWK DOO ZRUGV RI WKH WLWOH HTXDOO\ SURPLQHQW DQG YLVLEOH <RX PD\ DGG RWKHU PDWHULDO RQ WKH FRYHUV LQ DGGLWLRQ &RS\LQJ ZLWK FKDQJHV OLPLWHG WR WKH FRYHUV DV ORQJ DV WKH\ SUHVHUYH WKH WLWOH RI WKH 'RFXPHQW DQG VDWLVI\ WKHVH FRQGLWLRQV FDQ EH WUHDWHG DV YHUEDWLP FRS\LQJ LQ RWKHU UHVSHFWV ,I WKH UHTXLUHG WH[WV IRU HLWKHU FRYHU DUH WRR YROXPLQRXV WR ILW OHJLEO\ \RX VKRXOG SXW WKH ILUVW RQHV OLVWHG DV PDQ\ DV ILW UHDVRQDEO\ RQ WKH DFWXDO FRYHU DQG FRQWLQXH WKH UHVW RQWR DGMDFHQW SDJHV ,I \RX SXEOLVK RU GLVWULEXWH 2SDTXH FRSLHV RI WKH 'RFXPHQW QXPEHULQJ PRUH WKDQ \RX PXVW HLWKHU LQFOXGH D PDFKLQHUHDGDEOH 7UDQVSDUHQW FRS\ DORQJ ZLWK HDFK 2SDTXH FRS\ RU VWDWH LQ RU ZLWK HDFK 2SDTXH FRS\ D SXEOLFO\DFFHVVLEOH FRPSXWHUQHWZRUN ORFDWLRQ FRQWDLQLQJ D FRPSOHWH 7UDQVSDUHQW FRS\ RI WKH 'RFXPHQW IUHH RI DGGHG PDWHULDO ZKLFK WKH JHQHUDO QHWZRUNXVLQJ SXEOLF KDV DFFHVV WR GRZQORDG DQRQ\PRXVO\ DW QR FKDUJH XVLQJ SXEOLFVWDQGDUG QHWZRUN SURWRFROV ,I \RX XVH WKH ODWWHU RSWLRQ \RX PXVW WDNH UHDVRQDEO\ SUXGHQW VWHSV ZKHQ \RX EHJLQ GLVWULEXWLRQ RI 2SDTXH FRSLHV LQ TXDQWLW\ WR HQVXUH WKDW WKLV 7UDQVSDUHQW FRS\ ZLOO UHPDLQ WKXV DFFHVVLEOH DW WKH VWDWHG ORFDWLRQ XQWLO DW OHDVW RQH \HDU DIWHU WKH ODVW WLPH \RX GLVWULEXWH DQ 2SDTXH FRS\ GLUHFWO\ RU WKURXJK \RXU DJHQWV RU UHWDLOHUV RI WKDW HGLWLRQ WR WKH SXEOLF ,W LV UHTXHVWHG EXW QRW UHTXLUHG WKDW \RX FRQWDFW WKH DXWKRUV RI WKH 'RFXPHQW ZHOO EHIRUH UHGLVWULEXWLQJ DQ\ ODUJH QXPEHU RI FRSLHV WR JLYH WKHP D FKDQFH WR SURYLGH \RX ZLWK DQ XSGDWHG YHUVLRQ RI WKH 'RFXPHQW
02',),&$7,216
<RX PD\ FRS\ DQG GLVWULEXWH D 0RGLILHG 9HUVLRQ RI WKH 'RFXPHQW XQGHU WKH FRQGLWLRQV RI VHFWLRQV DQG DERYH SURYLGHG WKDW \RX UHOHDVH WKH 0RGLILHG 9HUVLRQ XQGHU SUHFLVHO\ WKLV /LFHQVH ZLWK WKH 0RGLILHG 9HUVLRQ ILOOLQJ WKH UROH RI WKH 'RFXPHQW WKXV OLFHQVLQJ GLVWULEXWLRQ DQG PRGLILFDWLRQ RI WKH 0RGLILHG 9HUVLRQ WR ZKRHYHU SRVVHVVHV D FRS\ RI LW ,Q DGGLWLRQ \RX PXVW GR WKHVH WKLQJV LQ WKH 0RGLILHG 9HUVLRQ
$
8VH LQ WKH 7LWOH 3DJH DQG RQ WKH FRYHUV LI DQ\ D WLWOH GLVWLQFW IURP WKDW RI WKH 'RFXPHQW DQG IURP WKRVH RI SUHYLRXV YHUVLRQV ZKLFK VKRXOG LI WKHUH ZHUH DQ\ EH OLVWHG LQ WKH +LVWRU\ VHFWLRQ RI WKH 'RFXPHQW <RX PD\ XVH WKH VDPH WLWOH DV D SUHYLRXV YHUVLRQ LI WKH RULJLQDO SXEOLVKHU RI WKDW YHUVLRQ JLYHV SHUPLVVLRQ
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
63
&RPLWr GH ,QFHQWLYR D 3URGXomR GR 6RIWZDUH *UDWXLWR H $OWHUQDWLYR &,36*$ % /LVW RQ WKH 7LWOH 3DJH DV DXWKRUV RQH RU PRUH SHUVRQV RU HQWLWLHV UHVSRQVLEOH IRU DOO RI LWV SULQFLSDO DXWKRUV LI LW KDV OHVV WKDQ ILYH DXWKRUVKLS RI WKH
PRGLILFDWLRQV LQ WKH 0RGLILHG 9HUVLRQ WRJHWKHU ZLWK DW OHDVW ILYH RI WKH SULQFLSDO DXWKRUV RI WKH 'RFXPHQW
& ' ( )
6WDWH RQ WKH 7LWOH SDJH WKH QDPH RI WKH SXEOLVKHU RI WKH 0RGLILHG 9HUVLRQ DV WKH SXEOLVKHU 3UHVHUYH DOO WKH FRS\ULJKW QRWLFHV RI WKH 'RFXPHQW $GG DQ DSSURSULDWH FRS\ULJKW QRWLFH IRU \RXU PRGLILFDWLRQV DGMDFHQW WR WKH RWKHU FRS\ULJKW QRWLFHV ,QFOXGH LPPHGLDWHO\ DIWHU WKH FRS\ULJKW QRWLFHV D OLFHQVH QRWLFH JLYLQJ WKH SXEOLF SHUPLVVLRQ WR XVH WKH 0RGLILHG 9HUVLRQ XQGHU WKH WHUPV RI WKLV /LFHQVH LQ WKH IRUP VKRZQ LQ WKH $GGHQGXP EHORZ
*
3UHVHUYH LQ WKDW OLFHQVH QRWLFH WKH IXOO OLVWV RI ,QYDULDQW 6HFWLRQV DQG UHTXLUHG &RYHU 7H[WV JLYHQ LQ WKH 'RFXPHQW
V OLFHQVH QRWLFH
+ ,
,QFOXGH DQ XQDOWHUHG FRS\ RI WKLV /LFHQVH 3UHVHUYH WKH VHFWLRQ HQWLWOHG +LVWRU\ DQG LWV WLWOH DQG DGG WR LW DQ LWHP VWDWLQJ DW OHDVW WKH WLWOH \HDU QHZ DXWKRUV DQG SXEOLVKHU RI WKH 0RGLILHG 9HUVLRQ DV JLYHQ RQ WKH 7LWOH 3DJH ,I WKHUH LV QR VHFWLRQ HQWLWOHG +LVWRU\ LQ WKH 'RFXPHQW FUHDWH RQH VWDWLQJ WKH WLWOH \HDU DXWKRUV DQG SXEOLVKHU RI WKH 'RFXPHQW DV JLYHQ RQ LWV 7LWOH 3DJH WKHQ DGG DQ LWHP GHVFULELQJ WKH 0RGLILHG 9HUVLRQ DV VWDWHG LQ WKH SUHYLRXV VHQWHQFH
-
3UHVHUYH WKH QHWZRUN ORFDWLRQ LI DQ\ JLYHQ LQ WKH 'RFXPHQW IRU SXEOLF DFFHVV WR D 7UDQVSDUHQW FRS\ RI WKH 'RFXPHQW DQG OLNHZLVH WKH QHWZRUN ORFDWLRQV JLYHQ LQ WKH 'RFXPHQW IRU SUHYLRXV YHUVLRQV LW ZDV EDVHG RQ 7KHVH PD\ EH SODFHG LQ WKH +LVWRU\ VHFWLRQ <RX PD\ RPLW D QHWZRUN ORFDWLRQ IRU D ZRUN WKDW ZDV SXEOLVKHG DW OHDVW IRXU \HDUV EHIRUH WKH 'RFXPHQW LWVHOI RU LI WKH RULJLQDO SXEOLVKHU RI WKH YHUVLRQ LW UHIHUV WR JLYHV SHUPLVVLRQ
.
/
3UHVHUYH DOO WKH ,QYDULDQW 6HFWLRQV RI WKH 'RFXPHQW XQDOWHUHG LQ WKHLU WH[W DQG LQ WKHLU WLWOHV 6HFWLRQ QXPEHUV RU WKH HTXLYDOHQW DUH QRW FRQVLGHUHG SDUW RI WKH VHFWLRQ WLWOHV
0 'HOHWH DQ\ VHFWLRQ HQWLWOHG (QGRUVHPHQWV 6XFK D VHFWLRQ PD\ QRW EH LQFOXGHG LQ WKH 0RGLILHG 9HUVLRQ 1 1 'R QRW UHWLWOH DQ\ H[LVWLQJ VHFWLRQ DV (QGRUVHPHQWV RU WR FRQIOLFW LQ WLWOH ZLWK DQ\ ,QYDULDQW 6HFWLRQ
2 ,I WKH 0RGLILHG 9HUVLRQ LQFOXGHV QHZ IURQWPDWWHU VHFWLRQV RU DSSHQGLFHV WKDW TXDOLI\ DV 6HFRQGDU\ 6HFWLRQV DQG FRQWDLQ QR PDWHULDO FRSLHG IURP WKH 'RFXPHQW \RX PD\ DW \RXU RSWLRQ GHVLJQDWH VRPH RU DOO RI WKHVH VHFWLRQV DV LQYDULDQW 7R GR WKLV DGG WKHLU WLWOHV WR WKH OLVW RI ,QYDULDQW 6HFWLRQV LQ WKH 0RGLILHG 9HUVLRQ
V OLFHQVH QRWLFH 7KHVH WLWOHV PXVW EH GLVWLQFW IURP DQ\ RWKHU VHFWLRQ WLWOHV <RX PD\ DGG D VHFWLRQ HQWLWOHG (QGRUVHPHQWV SURYLGHG LW FRQWDLQV QRWKLQJ EXW HQGRUVHPHQWV RI \RXU 0RGLILHG 9HUVLRQ E\ YDULRXV SDUWLHVIRU H[DPSOH VWDWHPHQWV RI SHHU UHYLHZ RU WKDW WKH WH[W KDV EHHQ DSSURYHG E\ DQ RUJDQL]DWLRQ DV WKH DXWKRULWDWLYH GHILQLWLRQ RI D VWDQGDUG <RX PD\ DGG D SDVVDJH RI XS WR ILYH ZRUGV DV D )URQW&RYHU 7H[W DQG D SDVVDJH RI XS WR ZRUGV DV D %DFN &RYHU 7H[W WR WKH HQG RI WKH OLVW RI &RYHU 7H[WV LQ WKH 0RGLILHG 9HUVLRQ 2QO\ RQH SDVVDJH RI )URQW&RYHU 7H[W DQG RQH RI %DFN&RYHU 7H[W PD\ EH DGGHG E\ RU WKURXJK DUUDQJHPHQWV PDGH E\ DQ\ RQH HQWLW\ ,I WKH 'RFXPHQW DOUHDG\ LQFOXGHV D FRYHU WH[W IRU WKH VDPH FRYHU SUHYLRXVO\ DGGHG E\ \RX RU E\ DUUDQJHPHQW PDGH
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
64
&RPLWr GH ,QFHQWLYR D 3URGXomR GR 6RIWZDUH *UDWXLWR H $OWHUQDWLYR &,36*$ E\ WKH VDPH HQWLW\ \RX DUH DFWLQJ RQ EHKDOI RI \RX PD\ QRW DGG DQRWKHU EXW \RX PD\ UHSODFH WKH ROG RQH RQ H[SOLFLW SHUPLVVLRQ IURP WKH SUHYLRXV SXEOLVKHU WKDW DGGHG WKH ROG RQH 7KH DXWKRUV DQG SXEOLVKHUV RI WKH 'RFXPHQW GR QRW E\ WKLV /LFHQVH JLYH SHUPLVVLRQ WR XVH WKHLU QDPHV IRU SXEOLFLW\ IRU RU WR DVVHUW RU LPSO\ HQGRUVHPHQW RI DQ\ 0RGLILHG 9HUVLRQ
&20%,1,1* '2&80(176
<RX PD\ FRPELQH WKH 'RFXPHQW ZLWK RWKHU GRFXPHQWV UHOHDVHG XQGHU WKLV /LFHQVH XQGHU WKH WHUPV GHILQHG LQ VHFWLRQ DERYH IRU PRGLILHG YHUVLRQV SURYLGHG WKDW \RX LQFOXGH LQ WKH FRPELQDWLRQ DOO RI WKH ,QYDULDQW 6HFWLRQV RI DOO RI WKH RULJLQDO GRFXPHQWV XQPRGLILHG DQG OLVW WKHP DOO DV ,QYDULDQW 6HFWLRQV RI \RXU FRPELQHG ZRUN LQ LWV OLFHQVH QRWLFH 7KH FRPELQHG ZRUN QHHG RQO\ FRQWDLQ RQH FRS\ RI WKLV /LFHQVH DQG PXOWLSOH LGHQWLFDO ,QYDULDQW 6HFWLRQV PD\ EH UHSODFHG ZLWK D VLQJOH FRS\ ,I WKHUH DUH PXOWLSOH ,QYDULDQW 6HFWLRQV ZLWK WKH VDPH QDPH EXW GLIIHUHQW FRQWHQWV PDNH WKH WLWOH RI HDFK VXFK VHFWLRQ XQLTXH E\ DGGLQJ DW WKH HQG RI LW LQ SDUHQWKHVHV WKH QDPH RI WKH RULJLQDO DXWKRU RU SXEOLVKHU RI WKDW VHFWLRQ LI NQRZQ RU HOVH D XQLTXH QXPEHU 0DNH WKH VDPH DGMXVWPHQW WR WKH VHFWLRQ WLWOHV LQ WKH OLVW RI ,QYDULDQW 6HFWLRQV LQ WKH OLFHQVH QRWLFH RI WKH FRPELQHG ZRUN ,Q WKH FRPELQDWLRQ \RX PXVW FRPELQH DQ\ VHFWLRQV HQWLWOHG +LVWRU\ LQ WKH YDULRXV RULJLQDO GRFXPHQWV IRUPLQJ RQH VHFWLRQ HQWLWOHG +LVWRU\ OLNHZLVH FRPELQH DQ\ VHFWLRQV HQWLWOHG $FNQRZOHGJHPHQWV DQG DQ\ VHFWLRQV HQWLWOHG 'HGLFDWLRQV <RX PXVW GHOHWH DOO VHFWLRQV HQWLWOHG (QGRUVHPHQWV
&2//(&7,216 2) '2&80(176
<RX PD\ PDNH D FROOHFWLRQ FRQVLVWLQJ RI WKH 'RFXPHQW DQG RWKHU GRFXPHQWV UHOHDVHG XQGHU WKLV /LFHQVH DQG UHSODFH WKH LQGLYLGXDO FRSLHV RI WKLV /LFHQVH LQ WKH YDULRXV GRFXPHQWV ZLWK D VLQJOH FRS\ WKDW LV LQFOXGHG LQ WKH FROOHFWLRQ SURYLGHG WKDW \RX IROORZ WKH UXOHV RI WKLV /LFHQVH IRU YHUEDWLP FRS\LQJ RI HDFK RI WKH GRFXPHQWV LQ DOO RWKHU UHVSHFWV <RX PD\ H[WUDFW D VLQJOH GRFXPHQW IURP VXFK D FROOHFWLRQ DQG GLVWULEXWH LW LQGLYLGXDOO\ XQGHU WKLV /LFHQVH SURYLGHG \RX LQVHUW D FRS\ RI WKLV /LFHQVH LQWR WKH H[WUDFWHG GRFXPHQW DQG IROORZ WKLV /LFHQVH LQ DOO RWKHU UHVSHFWV UHJDUGLQJ YHUEDWLP FRS\LQJ RI WKDW GRFXPHQW
$**5(*$7,21 :,7+ ,1'(3(1'(17 :25.6
$ FRPSLODWLRQ RI WKH 'RFXPHQW RU LWV GHULYDWLYHV ZLWK RWKHU VHSDUDWH DQG LQGHSHQGHQW GRFXPHQWV RU ZRUNV LQ RU RQ D YROXPH RI D VWRUDJH RU GLVWULEXWLRQ PHGLXP GRHV QRW DV D ZKROH FRXQW DV D 0RGLILHG 9HUVLRQ RI WKH 'RFXPHQW SURYLGHG QR FRPSLODWLRQ FRS\ULJKW LV FODLPHG IRU WKH FRPSLODWLRQ 6XFK D FRPSLODWLRQ LV FDOOHG DQ DJJUHJDWH DQG WKLV WKLV /LFHQVH GRHV QRW DSSO\ WR WKH RWKHU VHOIFRQWDLQHG ZRUNV WKXV FRPSLOHG ZLWK WKH 'RFXPHQW RQ DFFRXQW RI WKHLU EHLQJ WKXV FRPSLOHG LI WKH\ DUH QRW WKHPVHOYHV GHULYDWLYH ZRUNV RI WKH 'RFXPHQW ,I WKH &RYHU 7H[W UHTXLUHPHQW RI VHFWLRQ LV DSSOLFDEOH WR WKHVH FRSLHV RI WKH 'RFXPHQW WKHQ LI WKH 'RFXPHQW LV OHVV WKDQ RQH TXDUWHU RI WKH HQWLUH DJJUHJDWH WKH 'RFXPHQW
V &RYHU 7H[WV PD\ EH SODFHG RQ FRYHUV WKDW VXUURXQG RQO\ WKH 'RFXPHQW ZLWKLQ WKH DJJUHJDWH 2WKHUZLVH WKH\ PXVW DSSHDU RQ FRYHUV DURXQG WKH ZKROH DJJUHJDWH
75$16/$7,21
7UDQVODWLRQ LV FRQVLGHUHG D NLQG RI PRGLILFDWLRQ VR \RX PD\ GLVWULEXWH WUDQVODWLRQV RI WKH 'RFXPHQW XQGHU WKH WHUPV RI VHFWLRQ 5HSODFLQJ ,QYDULDQW 6HFWLRQV ZLWK WUDQVODWLRQV UHTXLUHV HVSHFLDO SHUPLVVLRQ IURP WKHLU FRS\ULJKW KROGHUV EXW \RX PD\ LQFOXGH WUDQVODWLRQV RI VRPH RU DOO ,QYDULDQW 6HFWLRQV LQ DGGLWLRQ WR WKH RULJLQDO YHUVLRQV RI WKHVH ,QYDULDQW 6HFWLRQV <RX PD\ LQFOXGH D WUDQVODWLRQ RI WKLV /LFHQVH SURYLGHG WKDW \RX DOVR LQFOXGH WKH RULJLQDO (QJOLVK YHUVLRQ RI WKLV /LFHQVH ,Q FDVH RI D GLVDJUHHPHQW EHWZHHQ WKH WUDQVODWLRQ DQG WKH RULJLQDO (QJOLVK YHUVLRQ RI WKLV /LFHQVH WKH RULJLQDO (QJOLVK YHUVLRQ ZLOO SUHYDLO
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
65
7(50,1$7,21
<RX PD\ QRW FRS\ PRGLI\ VXEOLFHQVH RU GLVWULEXWH WKH 'RFXPHQW H[FHSW DV H[SUHVVO\ SURYLGHG IRU XQGHU WKLV /LFHQVH $Q\ RWKHU DWWHPSW WR FRS\ PRGLI\ VXEOLFHQVH RU GLVWULEXWH WKH 'RFXPHQW LV YRLG DQG ZLOO DXWRPDWLFDOO\ WHUPLQDWH \RXU ULJKWV XQGHU WKLV /LFHQVH +RZHYHU SDUWLHV ZKR KDYH UHFHLYHG FRSLHV RU ULJKWV IURP \RX XQGHU WKLV /LFHQVH ZLOO QRW KDYH WKHLU OLFHQVHV WHUPLQDWHG VR ORQJ DV VXFK SDUWLHV UHPDLQ LQ IXOO FRPSOLDQFH
)8785( 5(9,6,216 2) 7+,6 /,&(16(
7KH )UHH 6RIWZDUH )RXQGDWLRQ PD\ SXEOLVK QHZ UHYLVHG YHUVLRQV RI WKH *18 )UHH 'RFXPHQWDWLRQ /LFHQVH IURP WLPH WR WLPH 6XFK QHZ YHUVLRQV ZLOO EH VLPLODU LQ VSLULW WR WKH SUHVHQW YHUVLRQ EXW PD\ GLIIHU LQ GHWDLO WR DGGUHVV QHZ SUREOHPV RU FRQFHUQV 6HH KWWSZZZJQXRUJFRS\OHIW (DFK YHUVLRQ RI WKH /LFHQVH LV JLYHQ D GLVWLQJXLVKLQJ YHUVLRQ QXPEHU ,I WKH 'RFXPHQW VSHFLILHV WKDW D SDUWLFXODU QXPEHUHG YHUVLRQ RI WKLV /LFHQVH RU DQ\ ODWHU YHUVLRQ DSSOLHV WR LW \RX KDYH WKH RSWLRQ RI IROORZLQJ WKH WHUPV DQG FRQGLWLRQV HLWKHU RI WKDW VSHFLILHG YHUVLRQ RU RI DQ\ ODWHU YHUVLRQ WKDW KDV EHHQ SXEOLVKHG QRW DV D GUDIW E\ WKH )UHH 6RIWZDUH )RXQGDWLRQ ,I WKH 'RFXPHQW GRHV QRW VSHFLI\ D YHUVLRQ QXPEHU RI WKLV /LFHQVH \RX PD\ FKRRVH DQ\ YHUVLRQ HYHU SXEOLVKHG QRW DV D GUDIW E\ WKH )UHH 6RIWZDUH )RXQGDWLRQ
+RZ WR XVH WKLV /LFHQVH IRU \RXU GRFXPHQWV 7R XVH WKLV /LFHQVH LQ D GRFXPHQW \RX KDYH ZULWWHQ LQFOXGH D FRS\ RI WKH /LFHQVH LQ WKH GRFXPHQW DQG SXW WKH IROORZLQJ FRS\ULJKW DQG OLFHQVH QRWLFHV MXVW DIWHU WKH WLWOH SDJH
&RS\ULJKW F <($5 <285 1$0( 3HUPLVVLRQ LV JUDQWHG WR FRS\ GLVWULEXWH DQGRU PRGLI\ WKLV GRFXPHQW XQGHU WKH WHUPV RI WKH *18 )UHH 'RFXPHQWDWLRQ /LFHQVH 9HUVLRQ RU DQ\ ODWHU YHUVLRQ SXEOLVKHG E\ WKH )UHH 6RIWZDUH )RXQGDWLRQ ZLWK WKH ,QYDULDQW 6HFWLRQV EHLQJ /,67 7+(,5 7,7/(6 ZLWK WKH )URQW&RYHU 7H[WV EHLQJ /,67 DQG ZLWK WKH %DFN&RYHU 7H[WV EHLQJ /,67 $ FRS\ RI WKH OLFHQVH LV LQFOXGHG LQ WKH VHFWLRQ HQWLWOHG *18 )UHH 'RFXPHQWDWLRQ /LFHQVH ,I \RX KDYH QR ,QYDULDQW 6HFWLRQV ZULWH ZLWK QR ,QYDULDQW 6HFWLRQV LQVWHDG RI VD\LQJ ZKLFK RQHV DUH LQYDULDQW ,I \RX KDYH QR )URQW&RYHU 7H[WV ZULWH QR )URQW&RYHU 7H[WV LQVWHDG RI 7H[WV EHLQJ /,67 OLNHZLVH IRU %DFN&RYHU 7H[WV ,I \RXU GRFXPHQW FRQWDLQV QRQWULYLDO H[DPSOHV RI SURJUDP FRGH ZH UHFRPPHQG UHOHDVLQJ WKHVH H[DPSOHV LQ SDUDOOHO XQGHU \RXU FKRLFH RI IUHH VRIWZDUH OLFHQVH VXFK DV WKH *18 *HQHUDO 3XEOLF /LFHQVH WR SHUPLW WKHLU XVH LQ IUHH VRIWZDUH )URQW&RYHU
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
66
&RPLWrGH,QFHQWLYRD3URGXomRGR 6RIWZDUH*UDWXLWRH$OWHUQDWLYR
1 Diretoria
'LUHWRU ([HFXWLYR
CIPSGA Rua Professora Ester de Melo, numero 202, Parte, Benfica, Rio de Janeiro, RJ, CEP. 20930-010; Telefone (Fax/Dados): 021-5564201; e-mail: administracao@cipsga.org.br CNPJ: 03179614-0001/70
ZZZFLSVJDRUJEU FXUVRV#FLSVJDRUJEU
3iJLQD
67