• Nenhum resultado encontrado

Instituto Politécnico do Porto Instituto Superior de Engenharia do Porto Departamento de Engenharia Informática

N/A
N/A
Protected

Academic year: 2021

Share "Instituto Politécnico do Porto Instituto Superior de Engenharia do Porto Departamento de Engenharia Informática"

Copied!
103
0
0

Texto

(1)

Instituto Politécnico do Porto

Instituto Superior de Engenharia do Porto

Departamento de Engenharia Informática

T

T

U

U

T

T

O

O

R

R

I

I

A

A

L

L

D

D

E

E

P

P

H

H

P

P

realizado por

José Bruno Pinto Rua

orientado por

António Cardoso Costa

(2)

Agradecimentos

Agradecimentos

Desejo agradecer ao Eng.º António Cardoso Costa por todo o apoio prestado, quer pela disponibilidade para esclarecer dúvidas, quer pela revisão das versões preliminares deste trabalho, ou através da indicação de bibliografia útil.

Quero também agradecer aos meus pais, por todo o apoio e motivação que sempre me deram, não apenas nos meus estudos, mas em todas as situações.

Por fim, quero agradecer a todos os professores, colegas e amigos, que ao longo de todos estes anos, de uma ou outra forma, me apoiaram, de forma a eu atingir com sucesso os meus objectivos.

A todos, o meu muito obrigado.

(3)

Índice

Índice

1 INTRODUÇÃO __________________________________________________ 7 2 INTRODUÇÃO AO PHP __________________________________________ 8

BREVE HISTÓRIA SOBRE PHP ___________________________________________ 8 O QUE É O PHP ? ____________________________________________________ 10 O QUE PODE SER FEITO COM PHP? ______________________________________ 11 PRINCIPAIS VANTAGENS DO PHP________________________________________ 12 3 SINTAXE BÁSICA ______________________________________________ 14 DELIMITAR O CÓDIGO PHP ____________________________________________ 14 SEPARADOR DE INSTRUÇÕES___________________________________________ 15 NOMES DE VARIÁVEIS________________________________________________ 15 COMENTÁRIOS______________________________________________________ 16

Comentários de uma linha __________________________________________ 16 Comentários de mais de uma linha ___________________________________ 16

IMPRIMIR CÓDIGO HTML _____________________________________________ 17

4 TIPOS _________________________________________________________ 18

TIPOS SUPORTADOS__________________________________________________ 18 Inteiros (integer ou long) ___________________________________________ 19 Virgula Flutuante (double ou float) ___________________________________ 19 Strings__________________________________________________________ 20 Arrays __________________________________________________________ 21 Listas___________________________________________________________ 22 Objectos ________________________________________________________ 23 Booleanos _______________________________________________________ 24 TRANSFORMAÇÃO DE TIPOS____________________________________________ 24 Atribuição _______________________________________________________ 24 Transformação explícita de tipos _____________________________________ 25 A função settype __________________________________________________ 26 5 OPERADORES _________________________________________________ 27 ARITMÉTICOS ______________________________________________________ 27 DE STRINGS________________________________________________________ 27 DE ATRIBUIÇÃO_____________________________________________________ 28 BIT A BIT__________________________________________________________ 29 LÓGICOS __________________________________________________________ 29 COMPARAÇÃO______________________________________________________ 30 EXPRESSÃO CONDICIONAL_____________________________________________ 30 DE INCREMENTO E DECREMENTO________________________________________ 31 Tutorial PHP - 3 -

(4)

Índice 6 ESTRUTURAS DE CONTROLO __________________________________ 32 CICLOS ___________________________________________________________ 32 COMANDOS DE SELECÇÃO_____________________________________________ 33 If ______________________________________________________________ 33 Switch __________________________________________________________ 36 COMANDOS DE REPETIÇÃO ____________________________________________ 38 While___________________________________________________________ 38 Do...While_______________________________________________________ 39 For ____________________________________________________________ 39 Break___________________________________________________________ 41 Continue ________________________________________________________ 41 7 FUNÇÕES ______________________________________________________ 43 DEFINIR FUNÇÕES ___________________________________________________ 43 RETORNO DE VALORES_______________________________________________ 44 ARGUMENTOS______________________________________________________ 44

Passagem de parâmetros por referência _______________________________ 45 Argumentos com valores predefinidos (default)__________________________ 46

CONTEXTO_________________________________________________________ 48

ENDEREÇAMENTO___________________________________________________ 48

8 VARIÁVEIS E CONSTANTES ____________________________________ 50

DECLARAÇÃO DE UMA VARIÁVEL_______________________________________ 50

O COMANDO STATIC _________________________________________________ 50

“VARIÁVEIS VARIÁVEIS” _____________________________________________ 52 VARIÁVEIS ENVIADAS PELO UTILIZADOR__________________________________ 52 URLencode ______________________________________________________ 53 Utilizar arrays ___________________________________________________ 54

VARIÁVEIS DE AMBIENTE _____________________________________________ 55

VERIFICANDO O TIPO DE UMA VARIÁVEL__________________________________ 56

DESTRUIR UMA VARIÁVEL_____________________________________________ 57

VERIFICAR O VALOR DE UMA VARIÁVEL __________________________________ 57 A função isset ____________________________________________________ 57 A função empty ___________________________________________________ 58 CONSTANTES PREDEFINIDAS___________________________________________ 59 DEFINIR CONSTANTES________________________________________________ 59 9 CLASSES E OBJECTOS _________________________________________ 60 CLASSES __________________________________________________________ 60 OBJECTO__________________________________________________________ 61 A VARIÁVEL $THIS __________________________________________________ 61 SUBCLASSES_______________________________________________________ 63 CONSTRUTORES_____________________________________________________ 64 10 NOÇÕES DE SQL _____________________________________________ 65 INTRODUÇÃO_______________________________________________________ 65 COMANDOS BÁSICOS DE SQL __________________________________________ 67 Comando Create__________________________________________________ 67 Comando Drop ___________________________________________________ 68 Comando Alter ___________________________________________________ 68 Tutorial PHP - 4 -

(5)

Índice

MANIPULAR DADOS DAS TABELAS_______________________________________ 69

Comando SELECT ________________________________________________ 69 Comando INSERT ________________________________________________ 70 Comando UPDATE _______________________________________________ 70 Comando DELETE________________________________________________ 71

11 ACEDER AO MYSQL VIA PHP _________________________________ 73

ESTABELECER CONEXÕES _____________________________________________ 73

SELECCIONAR A BASE DE DADOS________________________________________ 74

REALIZAR CONSULTAS _______________________________________________ 75

Apagar o resultado ________________________________________________ 75 Retornar o número de linhas ________________________________________ 76 Utilizar os resultados ______________________________________________ 76 Alterar o ponteiro de um resultado ___________________________________ 77

12 UTILIZAR COOKIES__________________________________________ 78

O QUE SÃO COOKIES? ________________________________________________ 78 GRAVAR COOKIES___________________________________________________ 79 LER COOKIES_______________________________________________________ 80

13 FICHEIROS __________________________________________________ 81

COPIAR FICHEIROS __________________________________________________ 81 VERIFICAR O TAMANHO DE UM FICHEIRO _________________________________ 82 VERIFICAR SE UM FICHEIRO EXISTE______________________________________ 82

LIMPAR O CACHE____________________________________________________ 83

ABRIR FICHEIROS PARA LEITURA E/OU ESCRITA_____________________________ 83

LER UM FICHEIRO ___________________________________________________ 86

ESCREVER NUM FICHEIRO _____________________________________________ 87

EXEMPLO__________________________________________________________ 88

UPLOADS COM FORMULÁRIOS HTML ____________________________________ 89

14 ENVIAR UM E-MAIL__________________________________________ 90 15 CONCLUSÃO_________________________________________________ 91 16 APÊNDICE 1 _________________________________________________ 92

INSTALAÇÃO E CONFIGURAÇÃO DO APACHE ( WINDOWS ) ____________________ 92

17 APÊNDICE 2 _________________________________________________ 94

INSTALAÇÃO E CONFIGURAÇÃO DO PHP ( WINDOWS ) _______________________ 94

18 APÊNDICE 3 _________________________________________________ 96

INSTALAÇÃO E CONFIGURAÇÃO DO MYSQL ( WINDOWS ) ____________________ 96

19 APÊNDICE 4 _________________________________________________ 98

COMANDOS BÁSICOS DE MYSQL________________________________________ 98

Iniciar o mySQL em background _____________________________________ 98 Fazer o login no mySQL como root ___________________________________ 98 Adicionar um novo utilizador________________________________________ 98 Fazer o login com o nome e password do utilizador criado ________________ 99 Criar uma base de dados chamada teste _______________________________ 99 Tornar essa base de dados, a base de dados activa_______________________ 99 Tutorial PHP - 5 -

(6)

Índice Mostrar tabelas existentes na base de dados teste _______________________ 100 Mostrar definições da tabela tabelateste ______________________________ 100 Listar o todos registos da tabela tabelateste ___________________________ 101 Listar todos os registos onde o ID tem o número 1 ______________________ 101 Apagar um registo _______________________________________________ 101 Actualizar um campo de um registo __________________________________ 102

20 BIBLIOGRAFIA _____________________________________________ 103

(7)

Introdução

1

1

I

I

N

N

T

T

R

R

O

O

D

D

U

U

Ç

Ç

Ã

Ã

O

O

Este trabalho tem como principal objectivo a introdução à programação na linguagem PHP.

Para isso tentei fazer uma abordagem simples e prática, tornando este tutorial acessível quer a programadores experientes, quer a programadores que se estejam a iniciar nesta área da programação. Para isso, como não poderia deixar de ser, foi preciso algumas explicações básicas, como por exemplo a definição de tipos, ou de estruturas de controle, possibilitando a um programador iniciante toda a informação necessária para dar os primeiros passos na programação PHP. O programador mais experiente também poderá encontrar informação de interesse, visto serem focados aspectos como o tratamento de cookies, ou de e-mails.

Apesar do PHP poder ser implementado em qualquer ambiente, visto ser independente do sistema operativo e do servidor de páginas, decidi especializar a elaboração deste trabalho em ambientes Windows, fornecendo para isso alguma informação nesse sentido, como por exemplo a instalação de algum software importante.

Em termos de ligação a base de dados, apesar do PHP estar preparado para trabalhar com quase todas as bases de dados disponíveis actualmente, decidi usar, para efeitos de exemplo, a base de dados mySQL, visto ser uma base de dados muito simples de usar, de forma a não se alargar o estudo muito além do PHP em si, e pelo facto de estar também disponível para ambientes Windows.

(8)

Introdução ao PHP

2

2

I

I

N

N

T

T

R

R

O

O

D

D

U

U

Ç

Ç

Ã

Ã

O

O

A

A

O

O

P

P

H

H

P

P

B

B

r

r

e

e

v

v

e

e

H

H

i

i

s

s

t

t

ó

ó

r

r

i

i

a

a

s

s

o

o

b

b

r

r

e

e

P

P

H

H

P

P

A linguagem PHP foi concebida durante o Outono de 1994 por Rasmus Lerdorf. As primeiras versões não foram disponibilizadas ao público, tendo sido utilizadas na sua página pessoal, apenas para que ele pudesse ter informações sobre as visitas que iam sendo feitas. A primeira versão utilizada por outras pessoas foi disponibilizada em 1995, e ficou conhecida como “Personal Home Page Tools” (ferramentas para páginas pessoais). Era composta por um sistema bastante simples que interpretava algumas macros e alguns utilitários de auxilio : um livro de visitas, um contador e outros pequenos utilitários.

Em meados de 1995 o interpretador foi reescrito, e ganhou o nome de PHP/FI. O FI veio de um outro programa escrito por Rasmus que interpretava dados de formulários HTML (Form Interpreter). Ele combinou os scripts do Personal Home

Page Tools com o FI e adicionou o suporte de mSQL, aparecendo assim o PHP/FI, que

entretanto cresceu bastante, contando para isso com a ajuda de pessoas que passaram a contribuir para o projecto.

(9)

Introdução ao PHP

Estima-se que em 1996, a linguagem PHP/FI era já utilizada por cerca de 15.000 sites em todo o mundo, e em meados de 1997 esse número subiu para mais de 50.000. Nessa época houve uma mudança no desenvolvimento do PHP. Deixou de ser um projecto de Rasmus, contando com contribuições de outras pessoas para ter uma equipa de desenvolvimento mais organizada. O interpretador foi posteriormente reescrito por Zeev Suraski e Andi Gutmans, e esse novo interpretador foi a base para a versão 3.

O lançamento da versão 4 do PHP, ocorrido em 22 de Maio 2000, trouxe muitas novidades aos programadores de PHP. Uma das principais novidades foi o suporte de sessões, bastante útil para identificar o cliente que solicitou determinada informação. Além das alterações referentes ao sintaxe e novos recursos de programação, o PHP4 teve como novidade um optimizador chamado Zend, que permite a execução muito mais rápida de scripts PHP. A empresa que produz o Zend promete ainda o lançamento de um compilador de PHP. Códigos compilados serão executados mais rapidamente, além de proteger o código fonte da aplicação.

(10)

Introdução ao PHP

O

O

q

q

u

u

e

e

é

é

o

o

P

P

H

H

P

P

?

?

PHP é uma linguagem que permite criar sites dinâmicos, possibilitando uma interacção com o utilizador através de formulários, parâmetros do browser e links. A diferença do PHP em relação a linguagens como o JAVASCRIPT, é que o código PHP é executado no servidor, sendo enviado para o cliente apenas código HTML puro. Desta maneira é possível interagir com bases de dados e aplicações existentes no servidor, com a vantagem de não se expor o código fonte para o utilizador. Isso pode ser útil quando se está a trabalhar com passwords ou qualquer outro tipo de informações confidenciais, e claro, para esconder o código, evitando cópias não autorizadas.

A principal diferença entre o PHP e um script CGI escrito em C ou PERL, é que o código PHP fica embutido no próprio HTML, enquanto no caso do script CGI é necessário gerar todo o código HTML, ou ler de um outro ficheiro.

PHP é portanto uma linguagem do tipo Server-Side Script, ou seja, o código do script PHP é executado no servidor.

Este tipo de scripts são responsáveis pela criação de páginas em tempo real. Num motor de busca, por exemplo, seria inviável manter um arquivo para cada consulta a ser realizada. O que existe é um modelo da página de resultados, que é elaborada em tempo real, com os dados respectivos.

(11)

Introdução ao PHP

O

O

q

q

u

u

e

e

p

p

o

o

d

d

e

e

s

s

e

e

r

r

f

f

e

e

i

i

t

t

o

o

c

c

o

o

m

m

P

P

H

H

P

P

?

?

Basicamente qualquer operação habitual em páginas da Internet, pode ser feita com PHP, como receber dados de um formulário, gerar páginas dinamicamente ou enviar e receber cookies.

Uma das características mais importantes do PHP é o facto de suportar um grande número de bases de dados, como dBase, Interbase, mSQL, mySQL, Oracle, Sybase, PostgreSQL e várias outras. Construir uma página que suporte uma base de dados, torna-se uma tarefa extremamente simples com PHP.

Além disso, o PHP suporta outros serviços através de protocolos como por exemplo IMAP, SNMP, NNTP, POP3 e, logicamente, HTTP.

É ainda possível abrir sockets e interagir com outros protocolos.

(12)

Introdução ao PHP

P

P

r

r

i

i

n

n

c

c

i

i

p

p

a

a

i

i

s

s

v

v

a

a

n

n

t

t

a

a

g

g

e

e

n

n

s

s

d

d

o

o

P

P

H

H

P

P

• PHP pode correr em (quase) todas os ambientes. Usando o mesmo código base, o PHP pode ser compilado em cerca de 25 plataformas diferentes, incluindo quase todos os UNIX, WINDOWS (95/98/NT/2000) e MACINTOSH. Como o código base é sempre o mesmo, os scripts irão ser sempre executados de forma idêntica.

• PHP é parecido com o C. Por isso, qualquer programador com experiência numa linguagem do estilo do C (JAVASCRIPT, JAVA, etc ), pode facilmente perceber PHP. Este factor é sem duvida importante para o desenvolvimento da linguagem.

• PHP é composto por módulos. Isto permite aos programadores duas maneiras de expandir o PHP de forma a corresponder a alguma característica especial pretendida: escrevendo um módulo e compilando-o dentro do executável; ou criando um executável que pode ser chamado usando um mecanismo do PHP (PHP’s Dynamic Loading Mechanism).

• Variedade de servidores de HTTP. O PHP é actualmente compatível com Apache, IIS, AOLServer, Roxen e THTTPD. Pode ainda ser executado como um módulo CGI.

(13)

Introdução ao PHP

• Compatibilidade com variadas bases de dados. O PHP é compatível com mySQL, MS SQL, Oracle, Informix, PostgreSQL, e muitas outras bases de dados. Também é já possível a integração com ODBC, e com bases de dados Access.

• Rapidez. O PHP é normalmente usado como um módulo do Apache, o que o torna extremamente rápido. É totalmente escrito em C, e relativamente pequeno, podendo portanto ser executado rapidamente e com pouca necessidade de memória.

PHP é “Open Source”. Ou seja, o seu código é totalmente livre (grátis) e disponível. Não se está dependente do fabricante para corrigir pequenos problemas que possam surgir, ou ser obrigado a pagar por actualizações. Pode-se simplesmente ajustar o código às necessidades especificas que possam surgir.

(14)

Sintaxe Básica

3

3

S

S

I

I

N

N

T

T

A

A

X

X

E

E

B

B

Á

Á

S

S

I

I

C

C

A

A

D

D

e

e

l

l

i

i

m

m

i

i

t

t

a

a

r

r

o

o

c

c

ó

ó

d

d

i

i

g

g

o

o

P

P

H

H

P

P

O código PHP fica embutido no próprio HTML. O interpretador identifica quando um código é PHP pelas seguintes tags:

<?php comandos ?> <script language=”php”> comandos </script> <? comandos ?> <% comandos %>

O tipo de tags mais utilizado é o terceiro, que consiste numa simplificação do primeiro. Para o utilizar, é necessário activar a opção short-tags na configuração do PHP. O último tipo serve para facilitar o uso por programadores acostumados à sintaxe de ASP. Para o utilizar é também necessário activá-lo no PHP, através do ficheiro de configuração php.ini.

(15)

Sintaxe Básica

S

S

e

e

p

p

a

a

r

r

a

a

d

d

o

o

r

r

d

d

e

e

i

i

n

n

s

s

t

t

r

r

u

u

ç

ç

õ

õ

e

e

s

s

Entre cada instrução em PHP é preciso utilizar o ponto e vírgula ( ; ), assim como em C, PERL e outras linguagens do género. Na última instrução do bloco de código não é necessário o uso do ponto e vírgula, mas por questões estéticas é normal a sua utilização.

N

N

o

o

m

m

e

e

s

s

d

d

e

e

v

v

a

a

r

r

i

i

á

á

v

v

e

e

i

i

s

s

Todas as variáveis em PHP têm o nome composto pelo caracter “$” e uma string, que deve iniciar por uma letra ou o caracter “_”.

O PHP é case sensitive, ou seja, as variáveis $temp e $TEMP são diferentes. Por isso é preciso ter muito cuidado ao definir os nomes das variáveis. É bom evitar os nomes em maiúsculas, pois como se irá ver mais à frente, o PHP já possui alguma variáveis predefinidas cujos nomes são formados por letras maiúsculas.

(16)

Sintaxe Básica

C

C

o

o

m

m

e

e

n

n

t

t

á

á

r

r

i

i

o

o

s

s

Existem dois tipos de comentários em código PHP:

Comentários de uma linha

Este tipo de comentário, marca como comentário até ao final da linha ou até ao final do bloco de código PHP. Pode ser delimitado pelo caracter “#” ou por duas barras ( // ).

Exemplo:

<? echo “teste”; #isto é um teste ?>

<? echo “teste”; //este teste é igual ao anterior ?>

Comentários de mais de uma linha

O PHP tem como delimitadores os caracteres “/*” para o início do bloco e “*/” para o fim do comentário. Se o delimitador de fim de código PHP ( “?>” ) estiver dentro de um comentário, não será reconhecido pelo interpretador.

Exemplos:

<?

echo “teste”; /* Isto é um comentário com mais de uma linha, mas não funciona correctamente ?> */

<?

echo “teste”; /* Isto é um comentário com mais de uma linha que funciona correctamente

*/ ?>

(17)

Sintaxe Básica

I

I

m

m

p

p

r

r

i

i

m

m

i

i

r

r

c

c

ó

ó

d

d

i

i

g

g

o

o

H

H

T

T

M

M

L

L

Um script PHP geralmente tem como resultado uma página HTML, ou algum outro texto. Para gerar esse resultado, deve ser utilizada uma das funções de impressão, echo ou print. Para isso deve-se utilizar um dos seguintes formatos:

print(argumento);

echo (argumento1, argumento2, ... ); echo argumento;

(18)

Tipos

4

4

T

T

I

I

P

P

O

O

S

S

T

T

i

i

p

p

o

o

s

s

S

S

u

u

p

p

o

o

r

r

t

t

a

a

d

d

o

o

s

s

O PHP suporta os seguintes tipos de dados:

Inteiros (Integer ou Long)

Virgula Flutuante (Float ou Double) • String

• Array • Object

O PHP utiliza verificação dinâmica de tipos, ou seja, uma variável pode conter valores de diferentes tipos em diferentes momentos da execução do script. Por este motivo não é necessário declarar o tipo de uma variável para a usar. O interpretador PHP decidirá qual o tipo daquela variável, verificando o conteúdo em tempo real.

Ainda assim, é permitido converter os valores de um tipo para outro desejado, utilizando o typecasting ou a função settype, conforme será explicado mais à frente.

(19)

Tipos

Inteiros (integer ou long)

Uma variável pode conter um valor inteiro com atribuições que sigam as seguintes sintaxes:

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

# pelo 0 - equivale a 156 decimal $temp = 0x34; # inteiro na base hexadecimal

# - simbolizado pelo 0x – equivale a 52 # decimal.

A diferença entre inteiros integer e long está no número de bytes utilizados para armazenar a variável. Como a escolha é feita pelo interpretador PHP de maneira transparente para o utilizador, podemos afirmar que os tipos são iguais.

Virgula Flutuante (double ou float)

Uma variável pode ter um valor em virgula flutuante com atribuições que sigam as seguintes sintaxes:

$temp = 1.234;

$temp = 23e4; # equivale a 230.000

(20)

Tipos

Strings

As Strings em PHP podem ser utilizadas de duas maneiras:

• utilizando aspas simples ( ' ) – Desta maneira, o valor da variável será exactamente o texto contido entre as aspas (com excepção de “\\” e “\'” – ver tabela seguinte)

• utilizando aspas duplas ( " ) – Desta maneira, qualquer variável ou caracter especial será expandido antes de ser atribuído.

Exemplo: <? $teste = "Nome"; $temp = '---$teste--\n'; echo "$temp"; ?>

O resultado deste exemplo será: ---$teste--\n

<?

$teste = "Nome";

$temp = "---$teste---\n"; echo "$temp";

?>

Neste exemplo o resultado será "---Nome--" (com uma quebra de linha no fim).

(21)

Tipos A tabela seguinte apresenta os caracteres especiais:

Sintaxe Significado

\N Nova linha \r Retorno de linha \t Tabulação horizontal \\ A própria barra ( “\” ) \$ O símbolo “$” \’ Aspa simples \” Aspa dupla Arrays

Arrays em PHP podem ser identificados como vectores indexados.

Mais especificamente, um valor do tipo array é um dicionário onde os índices são as chaves de acesso. De realçar que os índices podem ser valores de qualquer tipo e não apenas inteiros. Inclusive, se os índices forem todos inteiros, estes não precisam formar um intervalo contínuo.

Como a validação de tipos em PHP é dinâmica, valores de tipos diferentes podem ser usados como índices de array, assim como os valores atribuídos podem também ser de tipos diferentes.

Exemplo: <? $cor[1] = “vermelho”; $cor[2] = “verde”; $cor[3] = “azul”; $cor[“teste”] = 1; ?> Tutorial PHP - 21 -

(22)

Tipos Ou como alternativa:

<?

$cor = array(1 => “vermelho, 2 => “verde, 3 => “azul”, “teste => 1);

?>

Listas

As listas são utilizadas em PHP para realizar atribuições múltiplas.

Através de listas é possível atribuir valores que estão num array para variáveis.

Exemplo:

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

O comando anterior atribui valores às três variáveis simultaneamente. De notar que só são atribuídos às variáveis da lista os elementos do array que possuem índices inteiros e não negativos. No exemplo anterior as três atribuições foram bem sucedidas porque ao inicializar um array sem especificar os índices eles passam a ser inteiros, a partir do zero. Um factor importante, é que cada variável da lista possui um índice inteiro, começando pelo zero, que serve para determinar qual o valor que será atribuído. No exemplo anterior temos $a com índice 0, $b com índice 1 e $c com índice 2.

Outro exemplo:

$arr=array(1=>”um”,3=>”tres”,”a”=>”letraA”,2=>”dois); list($a,$b,$c,$d) = $arr;

(23)

Tipos Após a execução do código anterior temos os seguintes valores:

$a => null $b => “um” $c => “dois” $d => “tres”

De observar que à variável $a não foi atribuído valor, pois no array não existe elemento com índice 0 (zero). Outro pormenor importante é que o valor “tres” foi atribuído à variável $d, e não a $b, pois o seu índice é 3, o mesmo que $d na lista.

Por fim, pode-se constatar que o valor “letraA” não foi atribuído a nenhum elemento da lista, pois o seu índice não é inteiro.

Os índices da lista servem apenas como referência ao interpretador PHP para realizar as atribuições, não podendo ser acedidos de nenhuma maneira pelo programador. Ao contrário do array, uma lista não pode ser atribuída a uma variável, servindo apenas para fazer múltiplas atribuições através de um array.

Objectos

Um objecto pode ser inicializado utilizando o comando new para instanciar uma classe a uma variável.

Exemplo: class teste { function nada() { echo “nada”; } }

$temp = new teste; $temp -> nada();

A utilização de objectos será melhor explicada mais à frente.

(24)

Tipos

Booleanos

O PHP não possui um tipo de variável booleano, mas é capaz de avaliar expressões e retornar true ou false, através do tipo integer. É usado o valor 0 (zero) para representar o estado false, e qualquer valor diferente de zero (normalmente 1) para representar o estado true.

T

T

r

r

a

a

n

n

s

s

f

f

o

o

r

r

m

m

a

a

ç

ç

ã

ã

o

o

d

d

e

e

t

t

i

i

p

p

o

o

s

s

A transformação de tipos em PHP pode ser feita das seguintes maneiras:

Atribuição

Quando ocorrem determinadas operações (“+”, por exemplo) entre duas variáveis de tipos diferentes, o PHP converte o valor de uma delas automaticamente.

De notar que se o operando for uma variável, seu valor não será alterado.

O tipo para o qual os valores dos operandos serão convertidos é determinado da seguinte forma: Se um dos operandos for float, o outro será convertido para float, senão, se um deles for integer, o outro será convertido para integer.

Exemplo:

$temp = “1”; // $temp é a string “1”

$temp = $temp + 1; // $temp é o integer 2 $temp = $temp + 3.7; // $temp é o double 5.7

$temp = 1 + 1.5 // $temp é o double 2.5

(25)

Tipos De notar que o PHP converte string para integer ou double, mantendo o valor. O sistema utilizado pelo PHP para converter strings para números é o seguinte:

É analisado o início da string. Se existir um número, ele será avaliado. Senão, o valor será 0 (zero);

O número pode conter um sinal no início (“+” ou “-“);

Se na string existir um ponto na parte numérica a ser analisada, então esse ponto será considerado, e o valor obtido será double;

Se na string existir um “e” ou “E” na parte numérica a ser analisada, o valor seguinte será considerado como expoente da base 10, e o valor obtido será double;

Exemplos:

$temp = 1 + “10.5”; // $temp == 11.5 $temp = 1 + “-1.3e3”; // $temp == -1299 $temp = 1 + “teste10.5”; // $temp == 1 $temp = 1 + “10testes”; // $temp == 11 $temp = 1 + "10testes"; // $temp == 11 $temp = 1 + "+10testes"; // $temp == 1

Transformação explícita de tipos

A sintaxe do typecast do PHP é semelhante ao C. Basta escrever o tipo entre parênteses antes do valor :

Exemplo:

$temp = 15; // $temp é integer (15)

$temp = (double) $temp // $temp é double (15.0)

$temp = 3.9 // $temp é double (3.9)

$temp = (int) $temp // $temp é integer (3)

// o valor decimal é truncado

(26)

Tipos Os tipos do typecast permitidos são:

(int), (integer)⇒ altera para integer;

(real), (double), (float)⇒ altera para float; (string)⇒ altera para string;

(array)⇒ altera para array; (object)⇒ altera para objecto.

A função settype

A função settype converte uma variável para o tipo especificado, que pode ser integer, double, string, array ou object.

Exemplo:

$temp = 15; // $temp é integer

settype($temp,double) // $temp é double

(27)

Operadores

5

5

O

O

P

P

E

E

R

R

A

A

D

D

O

O

R

R

E

E

S

S

A

A

r

r

i

i

t

t

m

m

é

é

t

t

i

i

c

c

o

o

s

s

Este tipo de operadores só podem ser utilizados quando os operandos são números (integer ou float). Se forem de outro tipo, terão seus valores convertidos antes da realização da operação. + adição - subtracção * multiplicação / divisão % módulo

d

d

e

e

S

S

t

t

r

r

i

i

n

n

g

g

s

s

Só há um operador exclusivo para strings:

. concatenação

(28)

Operadores

d

d

e

e

A

A

t

t

r

r

i

i

b

b

u

u

i

i

ç

ç

ã

ã

o

o

Existe um operador básico de atribuição e diversos derivados que retornam sempre o valor atribuído. No caso dos operadores derivados de atribuição, a operação é feita entre os dois operandos, sendo atribuído o resultado para o primeiro. A atribuição é sempre por valor, e não por referência.

= atribuição simples

+= atribuição com adição -= atribuição com subtracção *= atribuição com multiplicação

/= atribuição com divisão %= atribuição com módulo

.= atribuição com concatenação

Exemplo:

$a = 7;

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

(29)

Operadores

B

B

i

i

t

t

a

a

B

B

i

i

t

t

Este tipo de operadores comparam dois números bit a bit.

& “e” lógico | “ou” lógico ^ ou exclusivo ~ não (negação) << shift left >> shift right

L

L

ó

ó

g

g

i

i

c

c

o

o

s

s

Os operadores lógicos são utilizados para inteiros que representem valores booleanos.

and “e” lógico or “ou” lógico xor ou exclusivo

! não (inversão) && “e” lógico

|| “ou” lógico

Existem dois operadores para “e” e para “ou” porque têm diferentes posições na ordem de precedência.

(30)

Operadores

C

C

o

o

m

m

p

p

a

a

r

r

a

a

ç

ç

ã

ã

o

o

As comparações são feitas entre os valores contidos nas variáveis e retornam sempre um valor booleano.

== igual a != diferente de < menor que > maior que <= menor ou igual a >= maior ou igual a

E

E

x

x

p

p

r

r

e

e

s

s

s

s

ã

ã

o

o

c

c

o

o

n

n

d

d

i

i

c

c

i

i

o

o

n

n

a

a

l

l

Existe um operador de selecção que pode avaliar até três termos :

(expressao1)?(expressao2):( expressao3)

O interpretador PHP avalia a primeira expressão. Se ela for verdadeira, a expressão retorna o valor de expressão2, caso seja verdadeira. Senão, retorna o valor de expressão3.

(31)

Operadores

D

D

e

e

i

i

n

n

c

c

r

r

e

e

m

m

e

e

n

n

t

t

o

o

e

e

d

d

e

e

c

c

r

r

e

e

m

m

e

e

n

n

t

t

o

o

++ incremento -- decremento

Podem ser utilizados de duas formas: antes ou depois da variável. Quando utilizado antes, retorna o valor da variável antes de incrementá-la ou decrementá-la. Quando utilizado depois, retorna o valor da variável 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

(32)

Estruturas de Controlo

6

6

E

E

S

S

T

T

R

R

U

U

T

T

U

U

R

R

A

A

S

S

D

D

E

E

C

C

O

O

N

N

T

T

R

R

O

O

L

L

O

O

As estruturas seguintes são comuns para a generalidade das linguagens de programação, portanto, será apenas descrito a sintaxe de cada uma delas, resumindo o seu funcionamento.

C

C

i

i

c

c

l

l

o

o

s

s

Um ciclo consiste em vários comandos agrupados com o objectivo de relacioná-los com determinado comando ou função. Em comandos como if, for, while e switch, pode-se utilizar ciclos, para permitir que um comando faça parte do contexto desejado. Os ciclos em PHP são delimitados pelos caracteres “{” e “}”. A utilização dos delimitadores de ciclo numa parte qualquer do código não relacionada com os comandos acima descritos ou funções não produzirá nenhum efeito, e será tratada normalmente pelo interpretador.

Por exemplo:

if ($x == $y) comando1; comando2;

Para que comando2 esteja relacionado com o if é preciso utilizar um ciclo:

if ($x == $y){ comando1; comando2; }

(33)

Estruturas de Controlo

C

C

o

o

m

m

a

a

n

n

d

d

o

o

s

s

d

d

e

e

s

s

e

e

l

l

e

e

c

c

ç

ç

ã

ã

o

o

Também chamados de condicionais, os comandos de selecção permitem executar comandos ou conjuntos de comandos com base em testes feitos durante a execução.

If

O mais trivial dos comandos condicionais é o if. Este comando testa uma condição e executa o comando indicado se o resultado for true (valor diferente de zero).

Possui duas sintaxes:

if (expressão) comando; if (expressão): comando; . . . comando; endif;

Para incluir mais de um comando no if da primeira sintaxe, é preciso utilizar um ciclo, delimitado pelos caracteres “{}”.

O else é um complemento opcional para o if. Se for utilizado, e se a expressão retornar o valor false (zero), então o comando será executado.

Tem duas sintaxes que são as seguintes:

if (expressão) comando; else

comando;

(34)

Estruturas de Controlo if (expressão): comando; . . . comando; else comando; . . . comando; endif;

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

if ($a > $b) $maior = $a; else

$maior = $b;

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

Em determinadas situações é necessário fazer mais que um teste, e executar condicionalmente diversos comandos ou conjunto de comandos.

Para facilitar uma estrutura do tipo:

if (expressao1) comando1; else if (expressao2) comando2; else if (expressao3) comando3; else comando4; Tutorial PHP - 34 -

(35)

Estruturas de Controlo

foi criado o comando, também opcional, elseif. O elseif tem a mesma função de um else e um if usados sequencialmente, como no exemplo anterior. Num mesmo if podem ser utilizados diversos elseif’s.

O comando elseif também pode ser utilizado com dois tipos de sintaxe. Em resumo, a sintaxe geral do comando if é a seguinte :

if (expressao1) comando; [ elseif (expressao2) comando; ] [ else comando; ] if (expressao1) : comando; . . . comando; [ elseif (expressao2) comando; . . . comando; ] [ else comando; . . . comando; ] endif; Tutorial PHP - 35 -

(36)

Estruturas de Controlo

Switch

O comando switch actua de maneira semelhante a uma série de comandos if na mesma expressão. Frequentemente o programador pode querer comparar uma variável com diversos valores, e executar um código diferente que depende de qual valor é igual ao da variável. Quando isso for necessário, deve-se usar o comando switch. O exemplo seguinte mostra dois pedaços de código que fazem a mesma coisa, sendo que o primeiro utiliza uma série de if’s e o segundo utiliza switch:

if ($i == 0)

print “i é igual a zero”; elseif ($i == 1)

print “i é igual a um”; elseif ($i == 2)

print “i é igual a dois”;

switch ($i) { case 0:

print “i é igual a zero”; break;

case 1:

print “i é igual a um”; break;

case 2:

print “i é igual a dois”; break;

}

(37)

Estruturas de Controlo

É importante compreender o funcionamento do switch para não cometer erros. O comando switch testa linha a linha os valores encontrados, e a partir do momento que encontra um valor igual ao da variável testada, passa a executar todos os comandos seguintes, mesmo os que fazem parte de outro teste, até o fim do ciclo switch. Por isso tem de ser usado o comando break, que termina a execução e faz com que o código seja executado da maneira desejada.

Por 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 anterior, se $i for igual a zero, os três comandos print serão executados. Se $i for igual a 1, então os dois últimos print serão executados. O comando só funcionará da maneira desejada se $i for igual a 2.

Em algumas linguagens que implementam o comando switch, ou semelhante, 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.

Como por exemplo:

switch ($s) { case “casa”:

print “A casa é amarela”; case “arvore”:

print “a árvore é bonita”; case “lampada”:

print “joao apagou a lampada”; }

(38)

Estruturas de Controlo

C

C

o

o

m

m

a

a

n

n

d

d

o

o

s

s

d

d

e

e

r

r

e

e

p

p

e

e

t

t

i

i

ç

ç

ã

ã

o

o

While

O while é o comando de repetição mais simples. Testa uma condição e executa um comando ou um conjunto de comandos, até que a condição testada seja falsa. Assim como o if, o while também possui duas sintaxes alternativas:

while (<expressao>) <comando>; while (<expressao>): <comando>; . . . <comando>; endwhile;

A expressão só é testada de cada vez que o conjunto de instruções termina, além do teste inicial. Se o valor da expressão passar a ser false no meio do conjunto de instruções, a execução segue até ao fim do ciclo. Se no teste inicial a condição for avaliada como false, o conjunto de comandos não será executado.

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

$i = 1;

while ($i <=10) print $i++;

(39)

Estruturas de Controlo

Do...While

O comando do...while funciona de maneira bastante semelhante ao while, com a simples diferença que a expressão é testada no fim do ciclo.

O comando do...while possui apenas uma sintaxe, que é a seguinte:

do {

<comando> . . . <comando>

} while (<expressao>);

O exemplo utilizado para ilustrar o uso do while pode ser feito da seguinte maneira utilizando o do...while:

$i = 0; do {

print ++$i;

} while ($i < 10);

For

O comando for já é um pouco mais complexo. Para os programadores de C, C++ ou JAVA, o funcionamento do for é bastante básico. Mas para programadores acostumados a programar em linguagens como o PASCAL, existe uma grande mudança na utilização do for.

(40)

Estruturas de Controlo As duas sintaxes permitidas são:

for (<inicializacao>;<condicao>;<incremento>) <comando>; for (<inicializacao>;<condicao>;<incremento>) : <comando>; . . . <comando>; endfor;

As três expressões que ficam entre parênteses têm as seguintes finalidades:

• Inicialização:

Comando ou sequência de comandos a serem realizados antes do inicio do ciclo. Serve para inicializar variáveis.

• Condição:

Expressão booleana que define se os comandos que estão dentro do ciclo serão executados ou não. Enquanto a expressão for verdadeira (valor diferente de zero) os comandos serão executados.

• Incremento:

Comando executado ao final de cada execução do ciclo.

Um comando for funciona de maneira semelhante a um while escrito da seguinte forma: <inicializacao> while (<condicao>) { comandos ... <incremento> } Tutorial PHP - 40 -

(41)

Estruturas de Controlo

Break

O comando break pode ser utilizado em ciclos do, for e while, além do já referido no comando switch. Ao encontrar um break dentro de um destes ciclos, o interpretador PHP para imediatamente a execução do ciclo, prosseguindo a execução normal do código seguinte ao ciclo.

while ($x > 0) { ... if ($x == 20) { echo “erro! x = 20”; break; ... }

No código anterior, o ciclo while tem uma condição de fim ($x <= 0), mas foi utilizado o break para uma situação de fim de ciclo, não prevista inicialmente. Assim o interpretador seguirá para a instrução seguinte ao ciclo.

Continue

O comando continue também deve ser utilizado no interior de ciclos, e funciona de maneira semelhante ao break, com a diferença que a execução ao contrário de sair do ciclo, volta para o seu principio.

Por exemplo:

for ($i = 0; $i < 100; $i++) { if ($i % 2) continue;

echo “ $i “; }

(42)

Estruturas de Controlo O que o ciclo faz, é testar se o resto da divisão entre o número e 2 é 0. Se for diferente de zero (valor lógico true) o interpretador encontrará um continue, que faz com que os comandos seguintes do interior do ciclo sejam ignorados, seguindo para a próxima iteração do ciclo.

(43)

Funções

7

7

F

F

U

U

N

N

Ç

Ç

Õ

Õ

E

E

S

S

D

D

e

e

f

f

i

i

n

n

i

i

r

r

f

f

u

u

n

n

ç

ç

õ

õ

e

e

s

s

A sintaxe básica para definir uma função é:

function nome_da_função([arg1, arg2, arg3]) { Comandos;

... ;

[return <valor de retorno>]; }

Qualquer código PHP válido pode estar contido no interior de uma função. Como a verificação de tipos em PHP é dinâmica, o tipo de retorno não precisa de ser declarado, sendo necessário que o programador esteja atento para que a função retorne o tipo desejado. No entanto é recomendável que o código esteja bem documentado para facilitar a sua leitura e compreensão. Para efeito de documentação, é normal utilizar-se o seguinte formato na declaração de funções:

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

Este formato só deve ser utilizado na documentação do script, pois o PHP não aceita a declaração de tipos. Isso significa que em muitos casos o programador deve estar atento ao tipos dos valores passados como parâmetros, pois se não se passar o tipo esperado, não é emitido qualquer aviso pelo interpretador PHP, já que este não testa os tipos.

(44)

Funções

R

R

e

e

t

t

o

o

r

r

n

n

o

o

d

d

e

e

V

V

a

a

l

l

o

o

r

r

e

e

s

s

Todas as funções podem opcionalmente retornar um valor, ou simplesmente executar os comandos e não retornar valor nenhum.

Não é possível que uma função retorne mais de um valor, mas é permitido fazer com que uma função retorne variáveis do tipo listas ou arrays.

A

A

r

r

g

g

u

u

m

m

e

e

n

n

t

t

o

o

s

s

É possível passar argumentos para uma função. Devem ser declarados logo após o nome da função, entre parênteses, e tornam-se variáveis pertencentes ao endereçamento local da função. A declaração do tipo de cada argumento também é utilizada apenas para efeito de documentação.

Exemplo: function imprime($texto){ echo $texto; } imprime(“teste de funções”); Tutorial PHP - 44 -

(45)

Funções

Passagem de parâmetros por referência

Normalmente, a passagem de parâmetros em PHP é feita por valor, ou seja, se o conteúdo da variável for alterado, essa alteração não afecta a variável original.

Por exemplo:

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

}

$a = 3;

mais5($a); //$a continua com o valor 3

No exemplo anterior, como a passagem de parâmetros é por valor, a função mais5 é inútil, já que após a execução sair da função, o valor anterior da variável é recuperado. Se a passagem de valor for feita por referência, a variável $a teria 8 como valor. O que normalmente acontece é que ao ser chamada uma função, o interpretador guarda todo o endereçamento actual, ou seja, os conteúdos das variáveis. Se uma dessas variáveis for passada como parâmetro, o seu conteúdo fica preservado, pois a função irá trabalhar na verdade com uma cópia da variável. Porém, se a passagem de parâmetros for feita por referência, todas as alterações que a função realizar no valor passado como parâmetro vão afectar a variável que o contém.

Há duas maneiras de fazer com que uma função tenha parâmetros passados por referência: indicando isso na declaração da função, o que faz com que a passagem de parâmetros sempre seja assim; ou na própria chamada da função. Nos dois casos utiliza-se o modificador “&”.

(46)

Funções

A seguir um exemplo que ilustra os dois casos:

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

$num2 += 5; }

$a = $b = 1;

mais5($a, $b); /* Neste caso, só $num1 terá seu valor alterado, pois a passagem por referência está definida na declaração da função. */

mais5($a, &$b); /* Aqui as duas variáveis terão os seus valores alterados. */

Argumentos com valores predefinidos (default)

Em PHP é possível ter valores default para argumentos de funções, ou seja, valores que serão assumidos em caso de nada ser passado como argumento. Quando algum parâmetro é declarado desta maneira, a passagem do mesmo na chamada da função torna-se opcional.

function teste($temp = “teste”) { echo $temp;

}

teste(); // imprime “teste”

teste(“outro teste”); // imprime “outro teste”

(47)

Funções É bom lembrar que quando a função tem mais que um parâmetro, o que tem valor default deve ser declarado em último lugar:

function teste($figura = circulo, $cor) {

echo “a figura é um “, $figura, “ de cor “ $cor; }

teste(azul);

/* A função não vai funcionar da maneira esperada, ocorrendo um erro no interpretador. A declaração correcta é: */

function teste2($cor, $figura = circulo) {

echo “a figura é um “, $figura, “ de cor “ $cor; }

teste2(azul);

/* Aqui a função funciona da maneira esperada, ou seja, imprime o texto: “a figura é um círculo de cor azul” */

(48)

Funções

C

C

o

o

n

n

t

t

e

e

x

x

t

t

o

o

O contexto é o conjunto de variáveis e seus respectivos valores num determinado ponto do programa. Na chamada de uma função, ao iniciar a execução do bloco que contém a implementação da mesma, é criado um novo contexto contendo as variáveis declaradas dentro do bloco, ou seja, todas as variáveis utilizadas dentro daquele bloco serão eliminadas no fim da execução da função.

E

E

n

n

d

d

e

e

r

r

e

e

ç

ç

a

a

m

m

e

e

n

n

t

t

o

o

O endereçamento de uma variável em PHP define a parte do programa onde ela pode ser utilizada. Na maioria dos casos todas as variáveis têm endereçamento global. Entretanto, em funções definidas pelo utilizador um endereçamento local é criado. Uma variável de endereçamento global não pode ser utilizada no interior de uma função sem que haja uma declaração.

Exemplo: $temp = “Teste”; function Teste() { echo $temp; } Teste();

O código anterior não produz nenhum resultado, pois a variável $temp é de endereçamento global, e não pode ser referida num endereçamento local, mesmo que não haja outra com nome igual. Para que o script funcione da forma desejada, a variável global a ser utilizada deve ser declarada como tal.

(49)

Funções Exemplo: $temp = “Teste”; function Teste() { global $temp; echo $temp; } Teste();

Uma declaração global pode conter várias variáveis, separadas por vírgulas. Uma outra maneira de aceder variáveis de endereçamento global dentro de uma função é utilizando um array predefinido pelo PHP cujo nome é $GLOBALS. O índice para a variável referida é o próprio nome da variável, sem o caracter $.

O exemplo anterior, assim como o exemplo seguinte, produzem o mesmo resultado:

Exemplo:

$temp = "Teste"; function Teste() {

echo $GLOBALS["abc"]; // imprime $temp echo $temp; // não imprime nada

}

Teste();

(50)

Variáveis e Constantes

8

8

V

V

A

A

R

R

I

I

Á

Á

V

V

E

E

I

I

S

S

E

E

C

C

O

O

N

N

S

S

T

T

A

A

N

N

T

T

E

E

S

S

D

D

e

e

c

c

l

l

a

a

r

r

a

a

ç

ç

ã

ã

o

o

d

d

e

e

u

u

m

m

a

a

v

v

a

a

r

r

i

i

á

á

v

v

e

e

l

l

Como os tipos em PHP são tratados de uma maneira dinâmica, as variáveis não precisam ser declaradas. Uma variável é inicializada no momento em que é feita a primeira atribuição. O tipo da variável será definido de acordo com o valor atribuído.

O

O

c

c

o

o

m

m

a

a

n

n

d

d

o

o

s

s

t

t

a

a

t

t

i

i

c

c

Uma variável estática é visível num endereçamento local, mas é inicializada apenas uma vez e seu valor não é perdido quando a execução do código deixa esse endereçamento. Por exemplo: function Teste() { $a = 0; echo $a; $a++; } Tutorial PHP - 50 -

(51)

Variáveis e Constantes O último comando da função é inútil, pois assim que for terminada a execução da função a variável $a perde seu valor. Já no exemplo seguinte, a cada chamada da função a variável $a terá seu valor imprimido e será incrementada:

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

$a++; }

O comando static é muito utilizado em funções recursivas, já que o valor de algumas variáveis precisa ser mantido.

Funciona da seguinte forma: O valor das variáveis declaradas como estáticas é mantido ao terminar a execução da função. Na próxima execução da função, ao encontrar novamente a declaração com static, o valor da variável é recuperado.

Por outras palavras, uma variável declarada como static tem o mesmo “tempo de vida” que uma variável global, contudo a sua validade é restrita ao endereçamento local em que foi declarada e só é recuperada após essa declaração.

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

O exemplo anterior não produz qualquer resultado. Na primeira execução da função, a impressão ocorre antes da atribuição de um valor à função, e portanto o conteúdo de $a é nulo (string vazia). Nas execuções seguintes da função Teste() a impressão ocorre antes da recuperação do valor de $a, e portanto nesse momento o seu valor ainda é nulo. Para que a função retorne algum valor o comando static deveria ser utilizado.

Referências

Documentos relacionados

Frequenta o Mestrado em Engenharia Eletrotécnica – Sistemas Elétricos de Energia (MEESEE) no Instituto Superior de Engenharia do Porto no Instituto Superior de Engenharia do Porto

Frequenta o Mestrado em Engenharia Eletrotécnica – Sistemas Elétricos de Energia (MEESEE) no Instituto Superior de Engenharia do Porto no Instituto Superior de Engenharia do Porto

Ao nível do conteúdo a modelação é utilizada para a verificação e validação do conteúdo de uma aplicação Web, ou seja, pretende-se que a técnica de

 O utilizador que detém o controlo conseguir carregar em todos os botões do MV.  Ambos os utilizadores conseguirem visualizar as acções de utilização sobre o MV. 

Departamento de Eletrotecnia do Instituto Superior de Engenharia do Porto; Ensino Industrial e Técnico; Instrumento Científico; Museu do Instituto Superior de Engenharia

Embora não em relação a todas as competências propostas, pode-se afirmar que os fatores escolhidos no trabalho trazem diferencial entre os professores do curso de Ciências

Os genótipos avaliados mostraram-se efectivamente tolerantes à HR elevada quer na resposta dos estomas à desidratação quer na longevidade das hastes florais durante

Após a migração, a primeira tarefa que um AgentRAM executa, passa por efectuar cálculos similares aos do “AgentDisk” para obter dados sobre a quantidade de RAM