You are on page 1of 55
CAPITULO PHP INTRODUGAO A sigla PHP significa Pré-Processador de Hipertexto. O PHP é uma linguagem de programacao para geragéo de documentos HTML. O PHP é interpretado e executado do lado do servidor, possibilitando o acesso a bases de dados. E a linguagem de programac&o para Intemet mais amplamente utilizada. Pode ser executada em qualquer das plataformas: Unix, Linux, Windows, Solaris, HPUX. Pode ser executada a partir de diversos servidores de Internet, entre eles, o Apache @ o IIS. E uma linguagem de Ultima geracéo, que cruza caracteristicas provenientes do Java, C++, PERLe C. O PHP 6 inserido em ficheiros HTML entre as marcas . CODIGO FONTE 6.1 - INSERCAO DE PHP EM HTML. VANTAGENS E DESVANTAGENS DO PHP 2.1. Desvantagens — O PHP é uma linguagem interpretada, sendo por isso mais lenta que o C ou o C++. — O PHP néo é uma linguagem nativamente orientada a objectos.’ Os progra- mas em PHP nao devem exceder 300.000 linhas de cédigo, sendo complexa a manutengdo de programas com mais de 100.000 linhas. () A versdo § do PHP apresenta melhorias significativas, a este nivel, em relagao a versao 4. 2.2. Vantagens _ Permite 0 desenvolvimento muito répido de aplicacdes uma vez que os procedi- mentos de compilagio e ligag&o no existem em linguagens interpretadas. _ As aplicages em PHP séio muito estaveis e nao dependem do navegador uti- lizado pelo cliente, Para além disso, 0 PHP permite liberdade de escolha da plataforma servidora. __ Tem ligagdes aos sistemas de gestéo de bases de dados mais utilizados. __ Tem suporte parcial para programagao orientada a objectos. — Corre em muitas plataformas e 6 mais potente que 0 ASP ou o JSP. _— Tem uma grande base de programadores e solugées jé implementadas. TIPOS DE VARIAVEIS O PHP suporta cito tipos primitivos: — quatro escalares: boolean, integer, float e string, — dois compostos: array e object; _— dois especiais: resource e NULL. 3.1. Booleanos Um booleano — boolean — expressa um valor l6gico que pode ser TRUE (verda- deiro) ou FALSE (also). Estes literais lgicos podem ser escritos em mailisculas ou minisculas. No exemplo seguinte, a varidvel $b1 recebe o valor TRUE @ a varidvel $b2 recebe o valor FALSE. CODIGO FONTE 6.2 - VARIAVEIS BOOLEANAS bl = True; $b2 = False; Os dois exemplos seguintes sdo equivalentes, uma vez que a condicéo testada pela instrugdo condicional if deve ter um valor booleano. CODIGO FONTE 6.3 ~ TESTE DE VARIAVEL BOOLEANA (1) // Neste caso a variavel $linha horizontal € comparada com TRUE if (Slinha_horizontal == TRUE} { echo "che>\n"; // Neste caso a varidvel $linha_horizontal é avaliada como booleana if (Slinha_horizontal) ( echo "
\n"j 3.1.1. CONVERSAO PARA BOOLEANO Para converter explicitamente um valor para booleano, deve utilizar-se 0 opera- dor de coereao (bool) ou (boolean). No exemplo seguinte, a varidvel $b3 toma o valor TRUE. CODIGO FONTE 6.5 - CONVERSAO PARA BOOLEANO oe) $b3 = (bool) $xz Na maior parte dos casos, nao é necessario recorrer & conversao explicita pois 0 PHP converte automaticamente qualquer valor para booleano, quando necessétio. Os seguintes valores so considerados FALSE:* — 0 booleano FALSE; — o inteiro 0 (zero); — o real 0.0 (zero); — a cadeia vazia, e a cadeia — um vector com zero elementos; — o tipo especial NULL. Todos os outros valores sao considerados TRUE. () Nas verses anteriores a0 PHP 5, 0s objectos sem atributos também sao avaliados como FALSE. 3.2. Inteiros Um inteiro — integer ~ 6 um numero do conjunto Z. © PHP nao suporta ntimeros inteiros sem sinal, o equivalente ao tipo unsigned da linguagem C. O maior valor inteiro depende da plataforma, sendo usualmente 2147483647.' Os inteiros podem ser especificados em notac&o decimal (base 10), hexadecimal (base 16) ou octal (base 8). Seguem-se alguns exemplos de literais inteiros. CODIGO FONTE 6.6 - NUMEROS INTEIROS 1234; # Um nimero decimal -123; # Um nimero negativo 0123; # Um namero octal equivalente a 83 em notacao decimal Ox1A; # Um nimero hexadecimal equivalente ao decimal 26 3.2.1. EXTRAVASAMENTO DE INTEIROS Se se especificar um ntimero inteiro para além dos limites possiveis de repre- sentagdo, ou se um calculo entre inteiros ultrapassar esses limites, esse numero passa a ser interpretado como real. No exemplo seguinte, a varidvel $grande 6 um numero inteiro, mas a varidvel Sexcessivo passa a ser do tipo nlimero real. CODIGO FONTE 6.7 - EXTRAVASAMENTO DE INTEIROS Sgrande = 2147483647; Sexcessivo = 2 * Sgrande; 2.2. CONVERSAO PARA INTEIRO Para converter explicitamente um valor para inteiro, deve utilizar-se 0 operador de coeredo (int) ou (integer). Na maior parte dos casos, nao é necessario recorrer a converséo explicita pois 0 PHP converte automaticamente qualquer valor para inteiro, quando necessario. CONVERSAO DE BOOLEANOS O valor booleano FALSE é convertido para 0 e o valor TRUE para 1. ( para uma discussio genética sobre nimeros intros, ver ponto 1.2 do capitulo 8, O PHP permite trabalhar com inteits do tamanho arbitra, ou sla intros com qualquer nimero de digits, através das fungdes GMP (consultar 0 manual do PHP em http:/Avww.php.net). CONVERSAO DE REAIS Na converséo de um real para inteiro, o numero é truncado, perdendo a sua parte decimal. Se o real for superior ao maior inteiro representavel, o resultado 6 indefinido. No exemplo seguinte, o resultado pode nao ser o esperado pois as representa- Ges internas dos ntimeros decimais 0.1 0.7 no sao suficientemente precisas. echo (int) ( (0.1+0.7) * 10 );// imprime o valor 7 !! 3.3. Reais Um real ~ float ~ 6 um niimero do conjunto R. © maior valor real depende da plataforma, sendo usualmente ~1,80e+308, que é o formato IEEE 754 para um real de 64 bits, com uma precisao de 15 digitos decimais.' Os reais podem ser especifi- cados segundo quaisquer das sintaxes abaixo: CODIGO FONTE 6.8 - NUMEROS REAIS Sa = 1.234; # O real 1,234 $b = 1.2e3; #0 real 1200 $c = 7E-10; # O real 0,0000000007 3.4. Cadeias Uma cadeia é uma sequéncia de caracteres. Os caracteres em PHP sao codifi- cados com 8 bits, no havendo suporte nativo para Unicode. As cadelas em PHP no tém limite de comprimento. Uma cadeia pode ser especificada de trés formas diferentes: — entre plicas; — entre aspas; — entre marcas. 3.4.1. CADEIA ENTRE PLICAS A forma mais simples de especificar uma cadeia é coloca-la entre plicas. Para especificar uma plica dentro de uma cadeia 6 necessdrio precedé-la de uma barra invertida. Para especificar uma barra invertida antes de uma plica, ou no fim da cadeia, é necessério precedé-la de outra barra invertida, Em todas as outras situa- Ges, a barra invertida 6 impressa como parte de cadeia. ©) para uma discussao genérica sobre ntimeros reais, ver ponto 1.3 do capitulo 8. CODIGO FONTE 6.9 - CADEIAS DEFINIDAS ENTRE PLICAS echo 'Esta é uma cadeia simples"; # Imprime: Esta & uma cadeia simples echo 'Ela disse \'014\' e saiu.'; # Imprime: Ela disse '014' e saiu. echo 'Pretende apagar C:\*.*?! # Imprime: Pretende apagar C:\*.*? echo 'O carécter \n imprime uma linha’; # Imprime: O caracter \n imprime uma linha 3.4.2. CADEIA ENTRE ASPAS Se uma cadeia for especificada entre aspas, 0 PHP reconhece as seguintes sequéncias que representam caracteres especiais: TABELA 6.1 - CARACTERES ESPECIAIS EM PHP SequeNcia SIGNIFICADO \n Cardcter de nova linha (0x0A em ASCII) v Cardcter de retomo (0x0D em ASCII) \ | Cardcter de tabulagao (0x09 em ASCII) N Barra invertida s Cito v spa Uma expresso regular que representa No-7it.8) tum carécter em notagao octal on Fast Uma expressao regular que representa \(0-94-Fa-fi(1,2) | um cardcter em notacdo hexadecimal A maior vantagem de especificar cadeias entre aspas é 0 facto dos nomes das varidvels serem expandidos dentro das cadeias. No exemplo seguinte, o valor da variével $meuNome 6 substituido na cadeia impressa. CODIGO FONTE 6.10 - CADEIAS DEFINIDAS ENTRE ASPAS §meuNome = 'o meu nome'; echo “Este é $meuNome";# Imprime: Este é o meu nome 3.4.3. CADEIA ENTRE MARCAS Outra forma de especificar cadeias 6 utilizando a notagdo entre marcas. A cadeia 6 delimitada no inicio pela marca “<<<" seguida de um identificador, e no fim pelo mesmo identificador colocado no inicio de uma nova linha. Exemplo de uma cadeia delimitada entre marcas: CODIGO FONTE 6.11 - CADEIAS DEFINIDAS ENTRE MARCAS Sstr = << # Imprime: CONVERSAO DE CADEIAS A converséo de uma cadeia para um valor numérico obedece as seguintes regras: — Acadeia é avaliada como ntimero real se contiver qualquer dos caracteres ‘’, ‘e' ou ‘E’. Caso contrario é avaliada como inteiro. — O valor é dado pela parte inicial da cadeia. Se a cadeia se inicia com um valor numérico utiliza-se esse valor. Caso contrario, o valor é 0 (zero). CODIGO FONTE 6.14 - CONVERSAO AUTOMATICA DE CADEIAS PARA NUMEROS + "10.5" # 0 resultado é + "1,303"; #0 resultado é + “abe-1.3e3"; #0 resultado é | + "abe3"; #0 resultado é + "3 porquinhos"; # O resultado & [ + "3.2 porquinhos"; # 0 resultado & 3.5. Vectores Um vector — array - 6 uma sequéncia ordenada que faz corresponder chaves a valores. Contrariamente a outras linguagens, os elementos de um vector em PHP podem ter tipos distintos uns dos outros. Em PHP, um vector pode ser utilizado como um vector tradicional, como um vector associativo, como uma lista, uma tabela de hash, um dicionario, uma pilha, uma fila, etc. E também possivel construir arvores utili- zando estruturas de vectores de vectores. Um vector pode ser criado utilizando a fungao array() que utiliza, como parametro uma sequéncia de pares chave => valor separados por virgula. Acchave pode ser um inteiro ou uma cadeia. O valor pode ser qualquer coisa. Se se omitir a chave, o PHP utiliza o inteiro imediatamente superior ao maximo inteiro ja utilizado como chave. Se o indice maximo for —6, o PHP escolhe o -5. Se no houver ainda indices inteiros, o PHP escolhe 0 (zero). Se se usar 0 valor TRUE como chave, ele é convertido no indice 1. O valor FALSE € convertido na chave 0. Se se utilizar 0 valor NULL como chave, 0 PHP converte-o numa cadeia vazia. Utilizar uma cadeia vazia como chave tem o mesmo efeito. Nao se podem utilizar vectores ou objectos como chaves. $a = array( 1 => ‘um', 2 => 'dois', 3 => 'trés' ); Pode modificar-se um vector alterando ou acrescentando valores. Isso faz-se especificando o valor da chave entre paréntesis rectos. Pode omitir-se o valor da chave. CODIGO FONTE 6.15 - ACESSO A ELEMENTOS DE UM VECTOR 9b(3] = 307 ; $b(3] = 'trinta'; // Substitui o valor anterior Sb{ ] = ‘quinze'; // Atribui a chave 4 ao valor "quinze” Se o vector nao existir, 6 criado pela atribuigao. Para remover um elemento de um vector, utiliza-se a fungao unset(). CODIGO FONTE 6.16 - REMOVER UM ELEMENTO DE UM VECTOR $a = array( 1 => ‘um', 2 => 'dois', 3 => 'trés' }7 unset ( $a(2] ); // 0 resultado é 0 vector: $a = > ‘um, 3 => 'trés' ); 3.5.1. UTILIZACAO DE VECTORES Os dois exemplos seguintes sao perfeitamente equivalentes. CODIGO FONTE 6.17 - CRIAR UM VECTOR (1) $a = array( ‘cor' => 'vermelho! *sabor' => ‘doce! ‘forma’ => 'redonda' ‘nome! => ‘maga! 4// chave tem valor 0 CODIGO FONTE 6.18 - CRIAR UM VECTOR (2) $a['cor'] = ‘vermelho'; $a['sabor'] = ‘doce’; $a['forma’] = 'redonda'; $a['nome'] = 'maga'; | Sal 1 = 47 // chave tem valor 0 CODIGO FONTE 6.19 ~ CRIAR UM VECTOR (3) © exemplo anterior resulta no vector array( 0 => ‘a’, 1 => plesmente no vector array( ‘a’, 'b’, ‘0’ ). ', 2 => ‘c’) ou sim- 3.5.2, VECTORES MULTIDIMENSIONAIS CODIGO FONTE 6.20 - DECLARACAO DE UM VECTOR DE VECTORES $£rutos = array ( "frutos" => array ( "a" => "laranja" » "b" => "banana" {omen => maga” ) “mimeros" => array (1 i 3.6. Objectos Para inicializar um objecto, a partir de uma classe, utiliza-se 0 comando new que instancia 0 objecto numa variavel. CODIGO FONTE 6.21 - UM OBJECTO SIMPLES EM PHP testar (); > Utiliza-se 0 operador “->” para aceder aos métodos de um objecto. 3.7. Recursos Um recurso ~ resource ~ é uma varidvel especial que contém uma referéncia para um recurso externo.* Seguem-se alguns exemplos de instanciagao de recursos. CODIGO FONTE 6.22 - INSTANCIAGAO DE UM RECURSO DO TIPO LIGAGAO A BASE DE DADOS CODIGO FONTE 6.28 - INSTANCIAGAO DE UM RECURSO DO TIPO INTERPRETADOR DE XML () Consuttar 0 apéndice List of Resource Types do manual de PHP em http/uww.php.nevmanuallen para uma istagem completa dos recursos disponiveis. CODIGO FONTE 6.24 - INSTANCIACAO DE UM RECURSO DO TIPO GESTOR DE NUMEROS GRANDES | 3.8. NULL O tipo especial NULL representa uma varidvel que nao tem valor. O termo NULL pode ser escrito em maiisculas ou minusculas. O PHP faz recolecgdio automatica de lixo e liberta os recursos que jé nao estejam a ser utilizados (aqueles para os quais j4 nao hd referéncias). No entanto 6 possivel libertar a meméria retida por um recurso utllizando uma func free_resull() VARIAVEIS As variavels em PHP sao representadas por um cifréo seguido do nome da varié- vel. O nome da varidvel tem que comegar com uma letra’ ou um simbolo de subli- nhado “_". Pode seguir-se uma sequéncia de qualquer destes simbolos ou qualquer algarismo. O PHP distingue maitisculas de mintisculas nos nomes das varidveis. CODIGO FONTE 6.25 - VARIAVEIS EM PHP // Imprime: Jo’o, Jalia | $2pontos = “Ponto, ponto"; —// Tnvalido: comega com algarismo | $_2pontos = "Ponto, ponto"; // Valido: comeca com sublinhado | Sarvore = "pinheirons // Valido: ‘a" € caracter ASCII 225 > (Em PHP, as letras podem ter acentos, cedilhas, ou outros sinais graficos (ASCII 127 até 255). 1. Referéncias E possivel atribuir a uma varidvel uma referéncia para outra varidvel. Alteragdes nova varidvel afectam a varidvel original, e vice-versa. Para obter a referéncia de uma variavel, precede-se 0 nome da varidvel preten- dida do simbolo ‘&’. CODIGO FONTE 6.26 - REFERENCIAS 4.2. Variaveis predefinidas © PHP define um conjunto de varidveis vectoriais supergiobais' que contém informagao relevante sobre o ambiente e o programa em curso. TABELA 6.2 ~ VARIAVEIS PREDEFINIDAS EM PHP | Vector Descrigho Contém uma referéncia para cada variavel SelonAls que esta disponivel de forma global no programa em curso Variaveis da responsabilidade do servidor Web, | S_SERVER | nomeadamento, 0 enderaco IP @ 0 porto do cliente $_GET Variaveis obtidas por meio do comando HTTP GET $_POST Varidveis obtidas por meio do comando HTTP POST $_COOKIE Varidvels obtidas a partir dos cookies, via HTTP $_FILES Varidveis respeitantes ao carregamento de ficheiros $_ENV Varidveis de ambiente Variaveis fornecidas pelo utilizador, S_REQUEST | jogo de baixo nivel de seguranca $_SESSION Varidveis associadas & sesso do programa actual (1) As varidveis superglobais sao vistvels em todo o programa, inclusive no ambito das fungSes definidas pelo programador, contrariamente s variéveis globais. 4.3. Ambito das varidveis 4.3.1. VARIAVEIS GLOBAIS Em PHP, o ambito das varidveis estende-se aos ficheiros incluidos. No exemplo seguinte, a varidvel $a fica disponivel para ser utilizada pelas instrugdes contidas no ficheiro fich.inc incluido. CODIGO FONTE 6.27 - VARIAVEIS GLOBAIS E FICHEIROS INCLUIDOS ! No entanto, contrariamente a grande maioria das linguagens de programagao, o Ambito das varidveis em PHP nao se estende pelas fungées definidas pelo utilizador. No exemplo abaixo, a fungao nao imprime valor algum pois a varidvel $b nao esta definida dentro da fungdo. CODIGO FONTE 6.28 - VARIAVEIS GLOBAIS E FUNGOES (1) Para estender a visibilidade das varidveis globais ao Ambito de uma fungao, defi- nem-se as variaveis como globais dentro da fungao. CODIGO FONTE 6.29 - VARIAVEIS GLOBAIS E FUNCOES (2) Nome:
Correio-e:
Do lado do PHP (no ficheiro dados.php), as variéveis podem ser acedidas da seguinte forma: CODIGO FONTE 6.35 ~ RECEPCAO DOS DADOS DE UM FORMULARIO . O exemplo seguinte acede ao valor do cookie meuCookie. echo $_COOKIE['meuCookie']; Ver nota 1, na pagina 92. CONSTANTES Uma constante é um identificador para um valor simples. O nome de uma cons- tante forma-se da mesma maneira que 0 nome de uma variével. Enumeram-se, de seguida, algumas caracteristicas das constantes: — Os nomes das constantes nao sao precedidos de cifra — As constantes sao definidas através da fungao define(); — As constantes séio globais e podem ser imediatamente acedidas dentro das fungdes definidas pelo utilizador; As constantes nao podem ser redefinidas ou eliminadas; — As constantes s6 podem ter valores escalares. Exemplos de definic&o de constantes: CODIGO FONTE 6.36 - DEFINIR CONSTANTES define ( "PI", 3.1415926 ); define ( "Cumprimento", "014 mundo." ); EXPRESSOES As expressdes sao 0 elemento mais importante de uma linguagem de programa- 9&0. A maior parte das instrugdes de um programa contém expressées. As expres- sdes mais simples sao as constantes ¢ as variéveis. 6.1. Atribuigao Numa atribuig&o, 0 membro direito da atribuicao (uma expressao) é calculado e atribuido a variavel do lado esquerdo. A sintaxe do PHP contém instrugdes de atribuigéo mais complexas, que envol- vem simultaneamente o calculo de express6es. Sao as instrugdes de incremento e decremento. As instrugdes $a++ (pés-incremento) e ++$a (pré-incremento) incrementam a varidvel $a de uma unidade. As instrugées $a-- (pés-decremento) e --$a (pré-decre- mento) decrementam a varidvel $a. Por outro lado, a instrugdo $a += 3 incrementa a varidvel $a em trés unidades. CODIGO FONTE 6.37 - ATRIBUICOES EM PHP function duplica ($i) { return $i*2; } $b = $a = 5 /* atribui o valor 5 as variaveis $a e $b +/ | $c = Sate; /* pos-incremento, atribui o valor original de $a (5) a $c e sé depois incrementa $a */ $d = +#8b; /* pré-incremento, atribui o valor incrementado de $b (6) a $d e Se; neste ponto, ambos $d e $e sao iguais a 6 */ duplica ($d++); | /* atribui o dobro do valor de $d antes do incremento, 2*6 = 12 a $f e 56 depois incrementa $d */ duplica (+#$e); /* atribui o dobro do valor de $e apés o incremento, 2*7 = 14 a $g */ Sg += 10; /* primeiro, $g & incrementado de 10 e termina com o valor 24; 0 valor da atribuigdo (24) € entao atribuido a $h, e $h termina também com o valor 24. */ se Se 89 sh 6.2. Fungdes Uma fungao 6, também, uma expresso. Considerando a fungao seguinte: CODIGO FONTE 6.38 - UMA FUNCAO SIMPLES function simples() { return 5; d A instrugao $c = simples() atribui o valor 5 a variavel $c. 6.3. Comparagao Outras expressées comuns sao as expressdes relacionais, cujo resultado 6 TRUE ou FALSE. O PHP suporta > (maior), >= (maior ou igual), == (igual), != (dife- rente), < (menor) e <= (menor ou igual). Estas expresses so, usualmente, utiliza- das em instrugdes de execugao condicional como as instrugdes while e if Ha uma expressao mais complexa, herdada da linguagem C: a expresso ternd- ria condicional.! OPERADORES 7.1. Precedéncia dos operadores A precedéncia de um operador indica a forga com que esse operador liga duas expressées. A expressdo 1 + 5 *3 vale 16 e ndo 18 porque a multiplicagao tem uma precedéncia superior a adicdo. Se necessdrio, podem utilizar-se paréntesis para forgar a precedéncia. Por exemplo, (1 +5) * 3vale 18. Segue-se um quadro com a precedéncia dos operadores em PHP, com os ope- radores de menor precedéncia primeiro. TABELA 6.3 ~ PRECEDENCIA DOS OPERADORES EM PHP ASSOCIATIVIDADE OPERADORES esquerda esquerda or esquerda esquerda direita esquerda esquerda () Ver ponto 2.9 do capitulo 8. ASSOCIATIVIDADE OPERADORES esquerda esquerda esquerda esquerda nao associative nao associative esquerda << >> esquerda esquerda 7% nao associative | ~ = (int) (double) (string) (array) (object) @ nao associative direita 7.2. Operadores aritméticos O PHP possui os seguintes operadores aritméticos: TABELA 6.4 - OPERADORES ARITMETICOS EM PHP EXEMPLO- NOME RESULTADO $a+$b Adigéo | Soma de $a com $b Sa- $b Subtracgao Diferenga entre $ae $b $a* $b Multiplicagao. Produto de $a por $b $a/ $b Divisao Quociente entre $a e $b $a % $b Médulo Resto da divisdo inteira de $a por $b 7.3. Operadores de atribuigéo O operador basico de atribuigéo é 0 simbolo “=”. Calcula a expressdo do lado direito da atribuigdo e atribui-a a variavel do lado esquerdo. Uma atribuigao 6 uma expresso, logo tem um valor. O valor de uma atribuigao © valor atribuido @ varidvel destino. Assim, o valor de $a = 3 6 3. Isto permite esore- ver instrugdes como a seguinte: $a = ($b = 4) + 5; // $b fica com o valor 4 e $a como valor 9 Para além do operador basico de atribuigdo, hd operadores compostos para todos os operadores aritméticos, de cadeia e bit a bit. CODIGO FONTE 6.39 - OPERADORES DE ATRIBUICAO $a = $a += 5; // coloca $a a 8; equivalente a $a = $a + 5; La; "mundo"; // atribui a $b // a Sb = $b. ‘014 mundo"; equivalente undo"; 7.4. Operadores hit a bit Os operadores bit a bit, exceptuando os operadores de deslocamento, operam cada bit de um operando com o bit correspondente do outro operando, independen- temente dos outros bits. TABELA 6.5 - OPERADORES BIT A BIT EM PHP EXEMPLO- Nome RESULTADO $a & $b Conjungao 1 se ambos o8 bits forem 1 Sal $b Disjungdo inclusiva | 1 se qualquer dos bits for 1 $a’$b Disjungo exclusiva _| 1 se os bits forem diferentes ~$a Negagao légica 1 se o bit for 0 facets Deslocamento Desloca $a & esquerda $b bits a esquerda (cada passo significa multiplicar por 2) dase Deslocamento Desioca $a a direita $b bits Adireita (cada passo significa dividir por 2) CODIGO FONTE 6.40 - OPERADORES BIT A BIT echo 12 & 9; // Imprime: 8 // Explicagdo: 12;19=1100,) © 9a0)=100le, // © que resulta em 1000. )~8,0- echo 12° 9; // Imprime: 5 Jf Explicag&o: 1229-11002) € 9a0=1001 a, // 0 que resulta em 0101.)=5«0 7.5. Operadores relacionais © PHP possui os seguintes operadores relacionais: TABELA 6.6 - OPERADORES RELACIONAIS EM PHP Nome RESULTADO Igual ___| Verdade se $a for igual a $b “ Verdade se $a for igual a $b ‘entice @ se forem do mesmo tipo Diferente Verdade se $a for diferente de $b Diferente Verdade se $a for diferente de $b \Verdade se $a for diferente de $b, SHl-=S0' | INagIeenteS ou se forem de tipos diferentes $a<$b Menor Verdade se $a for menor que $b $a>$b Maior Verdade se $a for maior que $b $a<= $b Menor ou igual Verdade se $a for menor ou igual que $b $a>=$b | Malorouigual | Verdade se $a for maior ou igual que $b 7.6. Operador condicional operador condicional “?:" possibilita criar expressdes condicionais com um fun- cionamento, em certos aspectos, semelhante ao da instrugao condicional if. A sua sintaxe 6 a seguinte: exprl ? expr2 : expr3 ‘A expressao exprt 6 avaliada. Se for verdadeira, a expressao condicional devolve o valor do termo expr2. Se for falsa, devolve o valor do termo expr3. CODIGO FONTE 6.41 - OPERADOR CONDICIONAL print ($a > $b ? "a é maior que b" : "a nao é maior que b"); 7.7. Operadores de controlo de erro Se se preceder uma expresso do simbolo “@", qualquer mensagem de erro gerada por essa expressdo é ignorada. Se a peo track_errors (do ficheiro php.ini, de configuragéio do PHP) estiver activa, as mensagens de erro geradas pela expres- so so guardadas na varidvel $php_errormsg. 7.8. Operadores de execugao Se se pretender executar programas externos, pode utilizar-se o operador de execugao (""). © simbolo nao é 0 de uma plica, mas sim 0 de um acento grave CODIGO FONTE 6.42 - OPERADORES DE EXECUCAO. $directoria = “1s -al*; // Lista o contetido de uma J/ dixectoria em Linux echo "
Sdirectoria
"; exemplo anterior apresenta, no navegador, o contetido da directoria actual. Em Windows seria: $directoria=‘dir; mas nao funciona uma vez que dir é um comando interno do MS-DOS. Em Windows 2000, ou superior, experimentar outro comando: $rede="jpcontig 7.9. Operadores de incremento e decremento O PHP disponibiliza os seguintes operadores de incremento e decremento: TABELA 6.7 - OPERADORES DE INCREMENTO E DECREMENTO EM PHP ExEMPLO Nome RESULTADO | 48a Pré-incremento Incrementa $a de uma unidade e depois devolve $a | gas+ Pés-incremento | Devolve $a e depois incromenta $a de uma unidade ~$a Pré-decremento_| Decrementa $a de uma unidade e depois devolve $a $a Pés-decremento | Devolve $a e depois decrementa $a de uma unidade Consuttar exemplos de aplicagao no ponto 6.1 deste capitulo. 7.10. Operadores légicos Os operadores légicos operam valores Idgicos e permitem construir expressdes légicas complexas. TABELA 6.8 - OPERADORES LOGICOS EM PHP EXEMPLO- NOME RESULTADO Saand$> | Conjungéio TAUE se $a e $b forem TRUE | Saor$b | Disjungao inclusiva | TRUE se $a ou $b forem TRUE $axor $b | Disjungao exclusiva | TRUE se $aou $bforem TRUE, mas nao ambos 18a Negagao légica | TRUE se $a for FALSE $a && Sb | Conjuncao TRUE se $ae $b forem TRUE _ Sali $b Disjungdo inclusiva | TAUE'se Saou $b forem TRUE Os operadores and e && séo equivalentes, assim como os operadores or e II, excepto nas precedéncias (ver ponto 7.1 deste capitulo). 7.11. Operadores de cadeia O PHP possui um operador de concatenagao de cadeias “.” e um operador de concatenagao e atribuigao “=”. Ver ponto 7.3 deste capitulo para mais informagao. Os dois exemplos seguintes sao equivalentes. CODIGO FONTE 6.43 - CONCATENAGAO DE CADEIAS (1) $b = "ola "7 Sb = Sb . "mundo"; // atribui a $b 0 texto “Olé mundo” CODIGO FONTE 6.44 - CONCATENAGAO DE CADEIAS (2) $b = "Ola "7 $b .= "mundo"; // atribui a $b o texto "Ola mundo" 7.12. Operadores de vector © operador “+” acrescenta o segundo vector ao primeito. As chaves duplicadas no sao sobrepostas. CODIGO FONTE 6.45 - CONCATENACGAO DE VECTORES array("a" => "maga", array("a" =>"pera", > “morango", $a + Sb; "banana") ; | Para visualizar 0 conteudo da varidvel $c do exemplo anterior, pode executar-se a instrugo var_dump($c)'. Verifica-se que o resultado array(3) { ["a"] => string(4) “maga” ["b"] => string(é) "banana" ["c"] => string(6) "cereja" ) INSTRUGOES CONDICIONAIS No ponto 3 do capitulo 8 descrevem-se as estruturas de controlo mais comuns as diversas linguagens de programagao. Aconselha-se 0 programador menos experiente a ler esse capitulo antes de continuar. 8.1. A instrugao if A instrugao if em PHP pode ter uma das trés formas seguintes: it (expresséo) instrucao it (expresso) insirugéo else instrugao if (expresso!) instrugaot elseif (expresso2) instrugao2... else instrugaoN Podem existir varios elseif na mesma instrugao, sendo executado o primeiro cuja condigao for verdadeira. Cada instrugao anterior pode ser substituida por diversas instrugdes, desde que delimitadas por chavetas. Segue-se um exemplo de utilizagao: (a fungao var_dump() imprime © contetido de uma variével. CODIGO FONTE 6.46 ~ UTILIZACAO DA INSTRUGAO IF if (Sa > $b) ( print "a é maior que b"; } elseif ($a == $b) { print “a 6 igual a b"; } else { print “a € menor que b"; ) 8.2. Ainstrugao switch A instrugao switch pode, em determinadas situagdes, substituir um conjunto de instrugdes if, da mesma expresso, encadeadas. Segue-se um exemplo simples de aplicagao: CODIGO FONTE 6.47 - UTILIZACAO DA INSTRUCAO SWITCH switch ($i) { case 0: print break @ igual a 0"; case i print “i é igual a 1"; break; case 2: print "i é igual a 2"; break; INSTRUGOES ITERATIVAS 9.1. Ainstrugao while A instrugao iterativa while, do PHP, funciona de forma idéntica a da linguagem C. Asua sintaxe é: while (expresso) instrugao A instrugao do Ambito do ciclo pode ser substituida por diversas instrugdes, desde que delimitadas por chavetas. CODIGO FONTE 6.48 - UTILIZAGAO DA INSTRUGAO WHILE sisly while ($i <= 10) { print $i++; | /* imprime antes de incrementar */ ; 9.2. Ai A instrugao iterativa do-while, do PHP, funciona de forma idéntica a da linguagem C. A sua sintaxe é: do instrugao while (expressdo) A instrugéo do Ambito do ciclo pode ser substitufda por diversas instrugdes, desde que delimitadas por chavetas. CODIGO FONTE 6.49 - UTILIZAGAO DA INSTRUGAO DO-WHILE $i = 0; do { print $i; } while ($i>0); 9.3. Ainstrugao for A instrugao iterativa for, do PHP, funciona de forma idéntica & da linguagem C. A sua sintaxe 6: for (expressao1; expressao2, expressdo3) instrugao A instrugdo do ambito do ciclo pode ser substituida por diversas instrugdes, desde que delimitadas por chavetas. CODIGO FONTE 6.50 - UTILIZACAO DA INSTRUCAO FOR for ($i = 1; $i <= 10; $it4) { print $i? ) 9.4. A instrugao foreach A instrugdo foreach s6 pode ser utilizada com vectores. O foreach permite percorrer todos os elementos de um yector. A sua sintaxe tem as duas variantes seguintes: foreach ($vector as $valor) insirugéo foreach ($vector as $chave => $valor) instrugao A primeira forma percorre 0 $vector atribuindo a $valor, em cada iteracdo, o valor de um elemento do vector. A segunda forma tem 0 mesmo funcionamento atribuindo também a $chave, em cada iteragao, a chave correspondente ao elemento $valor. A instrugdo do Ambito do ciclo foreach pode ser substitu(da por diversas instru- gées, desde que delimitadas por chavetas. CODIGO FONTE 6.51 ~ UTILIZACAO DA INSTRUGAO FOREACH, APENAS COM VALOR $a = array (1, 2, 3, 17)7 foreach ($a as $v) ( print "Valor: §v.\n"; CODIGO FONTE 6.52 - UTILIZAGAO DA INSTRUCAO FOREACH, COM VALOR E CHAVE array ( mn" => 1, "dois" => 2, “trés" => 3, “dezassete" => 17 oF foreach ($a as $k => $v) { print "\Sa[$k] => $v.\n"; 9.5. Ainstrugao break A instrugao break quebra uma instrugao for, foreach, while, do-while ou switch. A instrugao break aceita um argumento numérico opcional que indica quantas estrutu- ras aninhadas devem ser quebradas. CODIGO FONTE 6.53 - UTILIZACAO DA INSTRUCAO BREAK Si while (++$i) ( switch ($i) { case 5: echo "Aos 5
\n"; break 1; /* Sai apenas do switch. */ case 10: echo "Aos 10; fim
\n"; break 2; /* Sai do switch e do while. */ default: break; ) } 9.6. A instrugado continue A instrugao continue é utilizada dentro de um ciclo para ignorar o resto do ciclo e continuar a execug&o no inicio da préxima iteragao. A instrugao continue aceita um argumento numérico opcional que indica quantas estruturas aninhadas devem ser ignoradas. CODIGO FONTE 6.54 - UTILIZACAO DA INSTRUGAO CONTINUE while (list ($chave, $valor) = each ($vect)) { if (!($chave % 2)) { // salta as chaves pares continue; } fungdo_impar ($valor); } 9.7. A instrugao return A instrugao return pode ser executada dentro de uma fungéio para terminar a sua execugdo e passar 0 controlo ao programa de chamada. A instrugdo return tem um parametro opcional que 6 o valor devolvido pela fungao. A instrugdo return pode ser executada no programa principal (cédigo global) e, neste caso, termina a execugdo do programa. Se o cédigo foi incluido com include() ou require(), entao 0 controlo é passado ao programa de chamada. 9.8. As instrugées require()e include() As instrugdes require() e include() incluem e avaliam o ficheiro especificado. Dite- rem na forma como reagem aos erros: 0 include() produz um aviso caso o ficheiro nao exista e continua a execugao do programa; o require() produz um erro fatal e termina a execugdo do programa. Em ambos os casos, quando um ficheiro € incluido, herda as varidveis globais do programa de chamada. Seguem-se alguns exemplos de aplicagao: CODIGO FONTE 6.55 - INCLUSAO DE FICHEIROS EXTERNOS (1) CODIGO FONTE 6.56 - INCLUSAO DE FICHEIROS EXTERNOS (2) Neste ultimo exemplo, as chavetas sdo necessdrias para delimitar 0 Ambito do ficheiro incluido. 9.9. As instrugdes require_once()e include_once() © tuncionamento destas instrugdes 6 semelhante ao das instrugdes require() © include). Diferem destas pelo facto de nao incluirem o ficheiro especificado se ele ja tiver sido incluido anteriormente no programa. Estas instrugSes séo utilizadas quando ha a possibilidade de um ficheiro ser incluido mais do que uma vez, no mesmo programa, e se quer garantir que esse ficheiro é incluido apenas uma vez, para evitar problemas de redefinicao de fungoes, ou reatribuigdes a varidveis, entre outros. require_once “util.php"; FUNGOES Uma fung&o pode conter qualquer tipo de instrugdes em PHP. As fungdes nao precisam de ser definidas antes de serem utilizadas. A sintaxe de uma funcéo definida pelo utilizador tem 0 formato do exemplo seguinte: function exemplo ($arg_1, $arg_2, ..., $arg_n) { echo "Fungo exemplo.\n"; return $valor; 10.1. Argumentos de uma fungao A informagao 6 passada a uma fungao sob a forma de uma lista de argumentos que podem ser varidveis ou constantes. Os argumentos podem ser passados por valor, por referéncia, ou definides por omissao. A lista de argumentos pode ter um comprimento variavel." () Ver as fungées fune_num_args(), func_get_arg() e func_get_args() no manual do PHP em http://www.php. net. 10.1.1. ARGUMENTOS PASSADOS POR REFERENCIA Por omisso, os argumentos sao passados por valor. Neste caso, as alteragdes efectuadas ao argumento dentro da fungao nao s&o visiveis fora dela. Para que as modificagdes feitas aos argumentos dentro de uma fungao se man- tenham fora da funcao, os argumentos devem ser passados por referéncia. Para indicar que um argumento 6 passado por referéncia, coloca-se 0 simbolo “&" antes do nome da variavel, na lista de argumentos da fungao. CODIGO FONTE 6.57 ~ PASSAR ARGUMENTOS POR REFERENCIA function acrescenta (&$cadeia), { §cadeia .= 'e algo mais.'; } Scad = 'Isto é uma cadeia, '; acrescenta ($cad) echo $cad; // Imprime: Isto é uma cadeia, e algo mais. 10.1.2. ARGUMENTOS DEFINIDOS POR OMISSAO Os argumentos escalares de uma fung&o podem ser definidos por omissao. Se uma fungao tiver argumentos definidos por omissao juntamente com outros que nao 0 sejam, os argumentos por omissao devem ser colocados do lado direito da lista de argumentos. CODIGO FONTE 6.58 - DEFINIR ARGUMENTOS POR OMISSAO function faz_café (Sorigem, $tipo = "com leite") { return "Fazer uma chavena de café Sorigem $tipo.\n"; y echo faz_café ("de Timor’ echo faz_café ("do Fogo", "expresso"); O resultado do cédigo acima € o seguinte: Fazer uma chavena de café de Timor com leite Fazer uma chavena de café do Fogo expresso 10.2. Devolver valores Uma fungao pode devolver valores por meio da instrugao opcional return. Os valores devolvidos podem ser de qualquer tipo, incluindo vectores e objectos. CODIGO FONTE 6.59 - DEVOLVER VALORES DE UMA FUNCAO functi { return $num * $num; ) echo quadrado (4); // Imprime: 16 In quadrado ($num) CODIGO FONTE 6.60 - DEVOLVER UM VECTOR A PARTIR DE UMA FUNCAO function niimeros_pequenos () t return array (0, 1, 2); } I list (Szero, $um, $dois) = ntmeros_pequenos(); 10.3. Fungées varidveis Uma variavel pode conter 0 nome de uma fung&o e ser utilizada para invocar essa fung&o. Para isso, coloca-se um par de paréntesis & frente do nome da varid- vel. Se essa funco tiver argumentos, coloca-se a lista de parametros entre os paréntesis. CODIGO FONTE 6.61 - UTILIZAR FUNGOES VARIAVEIS \n"; ) function teste( Sarg = "" ) { echo "Fungo teste(); com o argumento 'Sarg'.
\n"; ) $func = ‘vazia'; Sfunc(); —// Invoca fungao vazia() Sfunc = ‘teste’; $func('123'); // Invoca fungao teste() com o argumento '123' > CLASSES E OBJECTOS Uma classe 6 uma coleccao de varidveis (ou atributos) e fungdes (ou métodos) que manipulam essas variaveis.' Em PHP, a sintaxe utilizada para criar uma classe € exemplificada no eddigo abaixo. CODIGO FONTE 6.62 ~ DEFINIR UMA CLASSE x = $a; // Sthis é uma pseudo-variavel que Sthis->y = $b; // refere o préprio objecto } function 16 ponte () ! t return array ( Sthis->x, Sthis->y ); Para criar um objecto a partir de uma classe, uttliza-se 0 operador new. Sp = new ponto; $p->altera_ponto( 5, 12 )+ © exemplo anterior cria um ponto $p com as coordenadas (6, 12). (© Ver ponto & do capitulo 8 para mais informagdo sobre programngdo orientada a objectos. 11.1. Visibilidade Os attibutos e métodos de uma classe podem ser definidos como private, pro- tected ou public.’ Os itens public so visiveis em qualquer local do programa. Os itens protected sao visiveis apenas na propria classe e nas classes herdadas. Os itens private séo visiveis s6 na classe onde sao definidos. Os atributos tém, obrigatoriamente, que ser decarados. Métodos sem declaracao so considerados public. 11.2. Construtores Em PHP os atributos da classe podem ser inicializados na definigéo da classe desde que se utilizem valores constantes na inicializagao. Se se pretender utilizar variéveis ou chamadas a fungées, deve recorrer-se a um. construtor. Um construtor é um método com a designagao __construct(), que 6 invocado automaticamente sempre que um objecto dessa classe é criado.? CODIGO FONTE 6.63 - DEFINIR UM CONSTRUTOR DE UMA CLASSE (1) <2php class ponto { private $x, $y; // Definem as coordenadas do ponto function __construct () ( $this->x = $this->y = 0; ) ) > Um construtor pode ter parametros que sao passados no momento da criagao do objecto CODIGO FONTE 6.64 - DEFINIR UM CONSTRUTOR DE UMA CLASSE (2) function construct ( $a = 0, $= 0) { Sthis->x = Sa; Sthis->y = Sb; (1) Nas verses anteriores ao PHP 5, 08 alributos declaram-se com var tém uma visibilidade piblica, () Nas versbes anteriores ao PHP 5, 0 construtor é um método com o mesmo nome da classe. 11.3. Heranga Por vezes & necessétio criar uma classe semelhante a outra jd existente, & qual seja apenas necessario acrescentar ou alterar atributos ou métodos. A nova classe pode ser criada a partir da primeira utilizando o mecanismo de heranga. O PHP nao permite heranga multipla, a heranga tem sempre uma Unica classe de base. ‘A nova classe utiliza a palavra reservada extends para indicar qual 0 nome da classe da qual herda atributos e métodos. CODIGO FONTE 6.65 - HERANCA EM PHP <2php class ponto_visivel extends ponto { private Svisivel; | function __construct ( $a = 0, b= 0) ¢ S$this->visivel = TRUE; parent:: construct (); // Invoca construtor da superclasse ) function troca_visivel () { §this->visivel = ! $this->visivel; A classe ponto_visivel herda as coordenadas $x e $y da classe ponto, assim como os seus métodos. Acrescenta um novo atributo ($visivel) e um método para modificar esse atributo. Se a subclasse define um construtor, o construtor da superclasse nao é invocado implicitamente. Se se pretender também invocar 0 construtor da superclasse, isso deve ser feito de forma explicita: parent::__construct(); 11.4. Destrutores Um destrutor 6 um método que é invocado automaticamente quando o objecto cor- respondente é destrufdo (com a fungio unset(), ou quando 0 seu ambito desaparece). No PHP 5, o destrutor de uma classe 6 0 método com o nome __destruct() Nas verses anteriores ao PHP 5 néo hd destrutores. 11.5. 0 operador :: O operador : tenham ainda sido instanciadas. CODIGO FONTE 6.86 — UTILIZACAO DO OPERADOR class A ( function exemplo() { echo "Sou a fungéo original A::exemplo() .
\n"; ) , class B extends A 1 function exemplo() { echo "Sou a fungao redefinida B::exemplo().
\n"; Ariexemplo(); } ) Azzexemplo(); // A classe A nao esta instanciada // Imprime: Sou a fungao original A::exemplo() .
$b = new By $b->exemplo();// Imprime:Sou a fungao redefinida B::exemplo() .
// Sou a fungao original A::exemplo() .
permite invocar métodos de superclasses ou de classes que nao 11.6. A classe de base Para aceder aos atributos ou métodos da superclasse, ou classe de base, pode utilizar-se a palavra reservada parent. No exemplo da secc&o anterior, a classe B poderia ser reescrita da seguinte forma, para se obter o mesmo efeito: CODIGO FONTE 6.67 - ACEDER A CLASSE DE BASE class B extends A { function exemplo() jou a fungdo redefinida exemplo() .
\n"; 11.7. Representar objectos em texto A fungao serialize() devolve uma cadeia contendo uma representagdo textual do objecto passado como parametro. A func&o unserialize() tem a funcionalidade contraria. CODIGO FONTE 6.68 — SERIALIZACAO DE OBJECTOS new Ay 1 serialize ($a) + echo $s; O exemplo anterior imprime uma cadeia contendo uma representacéo textual do objecto $a. VARIAVEIS DE SESSAO © suporte a gestdo de sessdes, em PHP, consiste numa forma de preservar informago para acessos futuros. O servidor atribui um identificador Unico ao cliente, que é mantido enquanto a sessdo estiver activa. Uma varidvel de sessao, oriada numa pagina de um sitio, pode ser consultada nas paginas seguintes ¢ até desacti- vada. Segue-se um exemplo de registo de uma variével de sessao, que simultanea- mente contabiliza o niimero de acessos de cada cliente. CODIGO FONTE 6.69 - CRIAR UMA VARIAVEL DE SESSAO Para testar se a sessAo esta activa, pode utilizar-se 0 cédigo abaixo: CODIGO FONTE 6.71 - TESTAR UMA VARIAVEL DE SESSAO Os exemplos anteriores permitem, ainda, contabilizar o ntimero de acessos do cliente aos documentos geridos pela varidvel de sessao. Para imprimir 0 numero de acessos, pode utilizar-se o cédigo seguinte: CODIGO FONTE 6.72 - UTILIZAR UMA VARIAVEL DE SESSAO Vocé visitou esta pagina vezes. SERVICOS DE WEB EM PHP Um servigo de Web é um sistema que fornece servicos de dados através da Internet, geralmente sobre o protocolo HTTP. O servigo é descrito no formato WSDL; 08 clientes do servigo Web acedem ao servidor utilizando mensagens SOAP; e os dados s4o veiculados no formato XML. Como exemplo de um sistema baseado em servigos de Web considere-se a Euronext (0 servidor) e um banco em linha (0 cliente). O cliente consulta o servigo de Web e faculta aos seus utilizadores as cotagdes mais actuais. Note-se que a utiliza- do de um servigo de Web envolve trés entidades distintas: — O servidor, que 6 um repositério de informacao — O cliente, que interroga o servigo de repositério de dados — 0 utllizador, que consulta o cliente e visualiza os dados, jé formatados, num navegador Actualmente, 0 PHP tem um suporte bastante limitado para servigos de Web. Para criar servigos Web, clientes ou servidores, é conveniente utilizar 0 pacote NuSOAP", ou PEAR-SOAP2, Os ficheiros dos pacotes NuSOAP ou PEAR-SOAP so escritos em PHP, devendo por isso ser colocados abaixo da raiz do servidor Web. 13.1. Servidor de servigos Web, em PHP Apresenta-se, de seguida, um exemplo de um servidor de servigos Web, com 0 pacote NuSOAP, que verifica a identidade de utilizadores, baseada num nome de utilizador e numa palavra-chave. cédigo seguinte deve ser guardado num ficheiro com 0 nome passaporte.php. CODIGO FONTE 6.73 - SERVIDOR DE SERVICOS WEB EM PHP, PARA VERIFICACAO DE IDENTIDADES register ('validaNome') SnomesValidos = array ( ! "Sofia" => "abc123", "Manuel" => "xpto55", ) "Teresa" => "xana88"); // Definigao da fungao function validaNome ($nome, $chave) { i global $nomesValidos; ; if(is_string($nome) && is_string($chave)) { return @(§nomesValidos[§nome] == $chave) ? 1: 0+ } else { | return new soap_fault ('Erro do cliente',"', ‘Este servigo recebe duas cadeias .'); | } } } // Passar qualquer informacdo para o método SOAP do servidor 17 Rete método processa a informacao e invoca a fun¢ao apropriada 1 7// Depois formula a resposta e imprime-a D> $s->service ($HTTP_RAW_POST_DATA) ; | Neste exemplo, considera-se que os ficheiros do pacote NuSOAP se encontram na directoria nusoap, de acordo com a instrugao require() no inicio do ficheiro. 13.2. Cliente de servigos Web, em PHP cliente apresentado abaixo executa trés consultas ao servidor. A primeira com um utilizador valido; a segunda com um utilizador vélido, mas com a palavra-chave incorrecta; a terceira com um utilizador invalido. CODIGO FONTE 6.74 — CLIENTE DE SERVICOS WEB EM PHP, PARA VERIFICACAO DE IDENTIDADES call('validaNome', Sparametros) 7 if(!Serr = $s->getError()){ echo ‘' . §nome .'-' . (Sresultado ? "Valido" : "Invalido" belse ( echo '' . Serr . ''; ) } Senderego = "http: //localhost/passaporte.php"; $s = new soapclient (Senderego) ; ''; echo ''; valida (Snomel, $chavel); valida (Snome2, $chave2); valida ($nome3, $chave3); echo ''; > O resultado da execugao deste cddigo é 0 seguinte: Sofia - Valido Teresa - Invalido Pedro - Invalido Neste exemplo, supde-se que o cliente ¢ o servidor de servigos Web estéo aloja- dos no mesmo computador. Na maior parte dos casos nao é isso que acontece. No caso do servidor se encontrar noutro local, deve indicar-se 0 enderego correspon dente na variavel Senderego. PHP E MYSQL © PHP contém cerca de trés mil fungdes predefinidas: desde fungdes para mani- pular vectores, cadeias, ficheiros, expressdes regulares, datas, etc; alé fungoes para manipular bases de dados MySql, SQL Server, PostgreSQL, Oracle, Informix, ODBC, ete; passando por fungées de comunicagéo Sockets, FTP, HTTP, IMAP, POPS, SSL, etc; e por fungdes de criagéo de imagens e animagées GIF, JPEG, Shockwave Flash; entre muitas outras. Nesta secgfio abordam-se algumas das fungdes necessérias & manipulagao de uma base de dados MySQL." 14.1. Ligagao a uma base de dados Para estabelecer ligacéio ao servidor de bases de dados, utiliza-se a fungao mysql_connect(). Esta fungao tem trés parametros: 0 nome do computador onde se encontra a base de dados, o nome do utilizador com permiss6es de acesso & base de dados e a palavra-chave do utilizador. Acchamada devolve um valor do tipo recurso (ligagao) que deve ser utilizado em todas as interacgdes subsequentes com a base de dados. Para estabelecer uma ligagéo a uma base de dados, utiliza-se a fungao mysql_select_db(). Esta fungao tem dois parametros: 0 nome da base de dados eo nome da ligago (opcional). CODIGO FONTE 6.75 - ESTABELECER LIGAGAO A UMA BASE DE DADOS MYSQL $ligagao = mysql_connect ( "localhost", "nome", "chave") or die ("N&o possivel estabelecer ligagdo"); mysql_select_db ("autos") or die ("Nao é possivel seleccionar a base de dados"); As manipulagdes da base de dados, sejam insergdes, remogdes, pesquisas ou actualizacdes, s4o efectuadas apés a execugao dos dois comandos anteriores. Para terminar a ligagao, utiliza-se a fungo mysql_close(). CODIGO FONTE 6.76 - TERMINAR LIGAGAO A UMA BASE DE DADOS MYSQL mysql_close ($ligagao) ; (© MySQL 6 um sistema de gosto de bases de dados relacional e transaccional, desde a verséo 4.0.1. E distribuldo sem custos, sujeito a uma licenga GPL e pode ser obtido em htip/www.mnysql.com, 14.2. Acesso a uma hase de dados O acesso a uma base de dados MySQL, em PHP, faz-se por meio de comandos SQL. Para os exemplos seguintes, considere-se uma base de dados com duas tabelas criadas com os seguintes comandos SQL: CODIGO FONTE 6.77 - CODIGO MYSQL PARA CRIAR DUAS TABELAS CREATE TABLE marca ( mar_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, mar_marca VARCHAR (30) NOT NULL, UNIQUE INDEX ixmarcaid (mar_id) dF CREATE TABLE modelo ( mod_mar_id INT NOT NULL, mod_modelo VARCHAR(50) NOT NULL, mod_cilindrada INT NOT NULL, PRIMARY KEY (mod_mar_id, mod_modelo), FOREIGN KEY (mod_mar_id) REFERENCES marca (mar_id) ON UPDATE CASCADE, UNIQUE INDEX ixmodeloid (mod_mar_id, mod_modelo) di 14.2.1. INSERCAO NA BASE DE DADOS A insergao de um registo numa tabela da base de dados faz-se com a chamada @ fungao mysql_query(), a qual se passa um comando SQL de insergéo e, opcional- mente, o nome da ligacao. A fungaéo mysqi_query() devolve TRUE, se a insergao teve sucesso, e FALSE, caso contrario. Também devolve FALSE se o utilizador nao tiver permissdes de acesso a base de dados. A insergao pode ter sucesso mas n€o inserir registos na tabela. Para saber se foi inserido algum registo, pode invocar-se a fungdo mysql_affected_rows(), que tem um parametro opcional: 0 nome da ligagao. CODIGO FONTE 6.78 - INSERCAO DE DADOS NUMA TABELA DE MYSQL. S$comando = "INSERT INTO marca VALUES (0, 'Ferrari')"; $resultado = mysql_query ($comando) or die ("Insercao ii if ( mysql_affecteéd_rows() ) echo "Insergao efectuad ‘Ao atributo mar_id, chave priméria da tabela em causa, deve passar-se 0 valor 0 (zero) para 0 MySQL atribuir um valor nico, uma vez que possui a propriedade AUTO_INCREMENT. 14.2.2. REMOCAO DA BASE DE DADOS A remocéio de um registo de uma tabela da base de dados faz-se com a cha- mada a funcdo mysgl_query(), 4 qual se passa um comando SQL de remogao e, opcionalmente, o nome da ligacao. A fungo mysql_query() devolve TRUE, se a remogao teve sucesso, e FALSE, caso contrério, Também devolve FALSE se 0 utilizador no tiver permiss6es de acesso & base de dados. A remogao pode ter sucesso mas néo remover registos da tabela. Para saber se foi removido algum registo, pode invocar-se a fungao mysql_affected_rows(), que tem um parémetro opcional: o nome da ligacao. CODIGO FONTE 6.79 - REMOGAO DE DADOS DE UMA TABELA DE MYSQL $comando = "DELETE FROM marca WHERE mar_marca="Ferrari'"; Sresultado = mysql_query ($comando) or die ("Remogdo invalida if ( mysql_affected rows() ) echo "Remogéo efectuada"; 14.2.3, ACTUALIZAGAO DA BASE DE DADOS A actualizagao de um registo numa tabela da base de dados faz-se com a cha- mada a funeao mysql_query(), & qual se passa um comando SQL de actualizacao e, opcionalmente, o nome da ligacao. ‘A fungéo mysql_query() devolve TRUE, se a actualizagéo teve sucesso, & FALSE, caso contrario. Também devolve FALSE se o utilizador nao tiver permissdes de acesso & base de dados. ‘A actualizagéo pode ter sucesso mas no actualizar registos na tabela. Para saber se foi actualizado algum registo, pode invocar-se a fungao mysql_affected_rows(), que tem um parametro opcional: 0 nome da ligacao. CODIGO FONTE 6.80 - ACTUALIZACAO DE DADOS NUMA TABELA DE MYSQL. Scomando = "UPDATE modelo SET mod_cilindrada=3750". " WHERE mod_maz_id =1 AND mod modelo="Testarossa'"; Sresultado = mysql_query (Scomando) or die ("Actualizacéo invalida"); if ( mysql_affected_rows() ) echo “Actualizacao efectuada"; 14.2.4. PESQUISA DA BASE DE DADOS A pesquisa de informagao numa base de dados faz-se com a chamada a funcao mysql_query(), @ qual se passa um comando SQL de pesquisa e, opcionalmente, o nome da ligacao. A fungaéo mysq/_query() devolve TRUE, se a pesquisa teve sucesso, e FALSE, caso contrario. Também devolve FALSE se 0 utilizador nao tiver permissées de acesso a base de dados. A pesquisa pode ter sucesso mas nao encontrar registos na base de dados. Para saber quantos registos foram encontrados, pode invocar-se a fungaio mysql_num_rows(), que tem um parametro: 0 resultado da pesquisa. CODIGO FONTE 6.81 - PESQUISA DE DADOS NUMA TABELA DE MYSQL $comando = "SELECT * FROM marca WHERE mar_marca='Ferrari'"; $resultado = mysql_query ($comando) or die ("Pesquisa invalida"); $num_registos = mysql_num_rows ($resultado) ; EXEMPLOS Nesta secgao apresentam-se dois exemplos completos de programacao em PHP: um livro de visitantes e um sistema para fazer carregamentos de ficheiros. 15.1. Um livro de visitantes O exemplo seguinte implementa um livro de visitantes. A partir da primeira pagina é possivel efectuar uma inscrigao ou mandar listar todos os utilizadores. O programa utiliza uma base de dados MySql com o nome lista e uma tabela uti- lizador com a seguinte estrutura: CODIGO FONTE 6.82 - CODIGO MYSQL. PARA CRIAR UMA TABELA CREATE TABLE utilizador ( ut_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, ut_nome VARCHAR(64) NOT NULL, ut_apelido VARCHAR(80) NOT NULL, ut_correioe VARCHAR(128) NOT NULL, ut_telefone — VARCHAR(30), ut_ipremoto VARCHAR(23) NOT NULL, ut_portoremotoVARCHAR(10) NOT NULL, ut_navegador VARCHAR(100) NOT NULL, UNIQUE INDEX ixutid (ut_id) Me 0 cédigo da primeira pagina (index.php) & apresentado de seguida: CODIGO FONTE 6.83 - PAGINA DE ENTRADA DE UM LIVRO DE VISITANTES

Gestao de utilizadores do sitio


Acesso reservado

nbsp;

énbsp;Correio-e:
énbsp;Nome:
">
@nbsp;Apelido:
anbsp;Telefone:
">


Listar utilizadores
.
Este cédigo contém um formulério simples, cujos campos de texto sao carrega- dos com o valor anterior, no caso da insergdo ser rejeitada (persisténcia de dados). A pagina inicial dé acesso a dois ficheiros: insere.php, por meio do botao Inserir, e listar.php, através da hiperligagao no final da pagina. Segue-se a apresentagao do ficheiro insere.php. CODIGO FONTE 6.84 - RECEPGAO DOS DADOS DO VISITANTE E INSERCAO NA BASE DE DADOS Por favor, preencha os campos NomeCorreio-e
énbsp"; require ("index.php") ; delse{ >

Gest&o de utilizadores do sitio


Utilizador inserido com sucesso.

"; > Inserir novo utilizador
Lista de utilizadores

Gestao de utilizadores do sitio

snbsp;

\n" echo "\n"; echo "\n"; echo "\n echo "\n"; echo "\n" echo "\n"; echo "\n"; echo "\n"; echo "\n"; ) mysql_close ($1iga¢ao) ; 2
utid Nome apel ido Correio-e Telefone IP Remoto Porto Remoto Navegador
gutid$nome$apelido$correioe$telefone$ipremotoSportoremotoSnavegador
 
Inserir novo utilizador
Este cédigo efectua uma consulta & base de dados, obtendo a lista de todos os utilizadores inscritos. Depois, utilizando uma instrugao while, para cada registo devolvido pela fungae mysql_fetch_row(), constréi uma linha da tabela de resultados que 6 colocada na pagina. 15.2. Sistema de envio de ficheiros por HTTP (© exemplo que se segue apresenta um sistema para envio de ficheiros por HTTP. O sistema baseia-se em dois ficheiros: index.php e carrega.php. O primeiro ficheiro (index.php) contém um formulério para selecgao do ficheiro a enviar e, além disso, apresenta uma listagem dos ficheiros contidos na directoria. O segundo ficheiro (carrega.php) copia o ficheiro enviado para a directoria ade- quada, mantendo o nome original. Neste exemplo, os ficheiros recebidos pelo sistema séo armazenados numa directoria denominada soft. 0 programador tem que criar esta directoria antes de executar 0 cédigo apresentado. Segue-se 0 ficheiro index.php. CODIGO FONTE 6.86 ~ PAGINA DE ENTRADA DE UM SISTEMA DE ENVIO DE FICHEIROS

Carregamentos

Ficheiro a enviar:
|

anbsp;

Lista

$par2 - (Stam octetos) \n"; } } function GetDirArray($sPath) { ‘ ! //Carrega directoria num vector f $retVal = array(); } $listaDir=opendir ($sPath) ; } while ($£ich = readdir($listaDir)) } $retVal [count ($retVal)] = $£ich; //®echa e ordena closedir ($listaDir); sort ($retVal) + return $retVal; } 2 0 formuldrio tem um parametro — enctype='multiparV/form-data' — que indica que vai transferir um ficheiro. O tamanho maximo do ficheiro é definido pelo campo escondido de nome MAX_FILE_SIZE. Mais abaixo, 0 campo de input 6 do tipo file, 0 que indica ao navegador para colocar um botdo adicional para o utilizador seleccionar um ficheiro do seu computa- dor. O nome deste campo (fichutil) é utilizado na recepodo para referenciar o ficheiro enviado. A parte de php imprime a listagem da directoria soft, omitindo a directoria actual () ea directoria mae (..). Segue-se 0 cddigo do ficheiro carrega.php. CODIGO FONTE 6.87 - RECEPCAO E ARMAZENAMENTO DE FICHEIROS, POR HTTP | i Nome = " . $fu['name']; print "

Tamanho $ful'size']; if (!preg_match("/\"/",$fu['name']) 66 is_uploaded_file($fu['tmp_name'])) { print "

Ficheiro carregado. Prima voltar para confirmar."; $fich = str_replace(" ", "+", $fu['name']); move_uploaded_file($fu['tmp_name'], $ficheiro); } else { echo "

Algo correu mal: ficheiro '" . $fu['name'] | ) | > |

énbsp;

}

You might also like