PHP
PHP
Personal Home Page
http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 1
1
07
07-
-11
11-
-10
10
Isidro Vila Verde
Isidro Vila Verde
PhP Hypertext Preprocessor
Personal Home Page
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 2
2
O que é?
O que é?

 Linguagem “scriptica” de servidor que
Linguagem “scriptica” de servidor que
pode funcionar em dois modos distintos
pode funcionar em dois modos distintos

 Como preprocessador de HTML para um
Como preprocessador de HTML para um

 Como preprocessador de HTML para um
Como preprocessador de HTML para um
servidor WEB
servidor WEB

 Interpretada como uma linguagem
Interpretada como uma linguagem
“scriptica” convencional
“scriptica” convencional
php test.php
php test.php
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 3
3
Resumo Histórico
Resumo Histórico

 PHP foi criado em 1994 por Rasmus Lerdorf
PHP foi criado em 1994 por Rasmus Lerdorf
(membro da equipa do Apache) para registar
(membro da equipa do Apache) para registar
os acesso á sua Página Pessoal
os acesso á sua Página Pessoal

 PHP (Personal Home Page)
PHP (Personal Home Page)

 Em 1995 foi baptizado com o nome PHP/FI
Em 1995 foi baptizado com o nome PHP/FI

 Em 1995 foi baptizado com o nome PHP/FI
Em 1995 foi baptizado com o nome PHP/FI
(Form Interpreter) com interface para o
(Form Interpreter) com interface para o
mSQL
mSQL

 Em 1997 saiu o PHP/FI 2. Foi estimado que
Em 1997 saiu o PHP/FI 2. Foi estimado que
estivesse instalado em cerca de 50.000
estivesse instalado em cerca de 50.000
domínios (1% da Internet)
domínios (1% da Internet)
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 4
4
Resumo Histórico
Resumo Histórico

 Em 1998 foi oficialmente lançado o PHP3,
Em 1998 foi oficialmente lançado o PHP3,
re
re-
-escrito de raiz por Zeev Suraski e Andi
escrito de raiz por Zeev Suraski e Andi
Gutmans
Gutmans

 No final de 1999 estava a ser utilizado num
No final de 1999 estava a ser utilizado num
milhão de sítios WEB
milhão de sítios WEB
milhão de sítios WEB
milhão de sítios WEB

 A versão actual PHP4 é baseado na
A versão actual PHP4 é baseado na
ferramenta ‘Zeend Engine’
ferramenta ‘Zeend Engine’

 O PHP5 encontra
O PHP5 encontra-
-se em fase experimental
se em fase experimental

 Em Junho de 2002 estava ser utilizado em
Em Junho de 2002 estava ser utilizado em
10 milhões de sítios WEB
10 milhões de sítios WEB
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 5
5
html
head
titleUntitled/title
/head
body
?php
//O php é escrito dentro disto
print Hello World; #imprime a saudação
“Hello Word”
“Hello Word”
helloworld.php
helloworld.php
Inicia um bloco
de código PHP
print Hello World; #imprime a saudação
/*Esta é a terceira forma de comentar*/
?
/body
/html Termina o bloco
de código PHP

 O PHP suporta os comentários na forma
O PHP suporta os comentários na forma
suportada no Java e no Perl
suportada no Java e no Perl
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 6
6
PHP intercalado com HTML
PHP intercalado com HTML

 Um bloco PHP é delimitado de 3 formas
Um bloco PHP é delimitado de 3 formas

 ?
? código PHP
código PHP ?
?

 ?php
?php código PHP
código PHP ?
?

 ?php
?php código PHP
código PHP ?
?

 script language=“php”
script language=“php” código PHP
código PHP /script
/script

 As intruções terminam com um
As intruções terminam com um ;
;
•
• Pode ser omitido na ultima linha
Pode ser omitido na ultima linha
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 7
7
Uso de Variáveis
Uso de Variáveis
html
/head
body
?php
$i = 10; //$i é uma variável. Aqui está iniciada com o valo 10
while($i  0 ){ //testa se $i é maior que zero
echo a) Linha = , $i, br;
echo a) Linha = , $i, br;
echo b) Linha = $i, br; //comparar o resultado desta
echo 'c) Linha = $i', br; //com o resultado desta
echo d) Linha = $i, br; //e com o resultado desta
echo '-------br';
$i = $i - 1;
}
?
/body
/html
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 8
8
Strings
Strings

 As strings são cadeias de caracteres
As strings são cadeias de caracteres

 Para identificar um conjunto de caracteres
Para identificar um conjunto de caracteres
como sendo uma string é necessário delimitá
como sendo uma string é necessário delimitá-
-
los por caracteres especiais
los por caracteres especiais
o
o Em PHP há dois caracteres usados para delimitar
Em PHP há dois caracteres usados para delimitar
o
o Em PHP há dois caracteres usados para delimitar
Em PHP há dois caracteres usados para delimitar
as strings
as strings
–
– O carácter aspa
O carácter aspa
•
• “esta string contém o valor de
“esta string contém o valor de 
$i que é $i”
$i que é $i”
•
• Note
Note-
-se o uso do carácter de escape
se o uso do carácter de escape 
 para sinalizar
para sinalizar
que o próximo carácter deve ser interpretado
que o próximo carácter deve ser interpretado
literalmente
literalmente
–
– O carácter apóstrofo
O carácter apóstrofo
•
• 'Esta string não substitui o $i pelos seu valor'
'Esta string não substitui o $i pelos seu valor'
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 9
9
Operadores
Operadores
htnl
/head
body
?php
$a = 10; // operador atribuição
$prod = 10 * 10; // operador produto
$soma = $prod + $a; // operador soma
$soma = $prod + $a; // operador soma
$sub = $prod – ($a + $soma * 3); // operador subtracção
$div = $sub / 5; //operador divisão inteira
echo a=$a, prod=$prod, soma=$soma, sub=$sub, div=$div;
echo 'br';
//.... continua
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 10
10
Operadores
Operadores
//... continuação
$posinc = 5;
echo 'posinc = ', $posinc++,'br'; //operador pós incr.
$preinc = 5;
echo 'preinc = ', ++$preinc,'br'; //operador pré incr.
$posdec = 5;
echo 'posdec = ', $posdec--,'br'; //operador pré decr.
echo 'posdec = ', $posdec--,'br'; //operador pré decr.
$predec = 5;
echo 'predec = ', --$predec,'br'; //operador pré decr.
//... continua
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 11
11
Operadores
Operadores
//... continuação
$a = 5;
echo 'a = ', $a, 'br';
$a += 10;
echo 'a = ', $a, 'br';
$a -= 5;
echo 'a = ', $a, 'br';
echo 'a = ', $a, 'br';
$a *= 5;
echo 'a = ', $a, 'br';
$a /= 4;
echo 'a = ', $a, 'br';
$r = 8 % 3; //operador resto de divisão inteira
echo 'r = ', $r, 'br';
?
/body
/html
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 12
12
html
body
?php //ver http://www.php.net/manual/en/language.operators.php
$i = 5;
echo 'bri=',$i++;
$j = ++$i;
Operadores
Operadores -
- Exemplo
Exemplo
echo 'brj=',++$j;
$a = 2;
$a += ++$a; // ver
echo 'bra=',$a;
$b = 2;
$b += $b++;
echo 'brb=',$b;
?
/body
/html
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 13
13
Variáveis
Variáveis

 As variáveis são precedidas de um
As variáveis são precedidas de um $
$

 O nome de uma variável deve começar por um
O nome de uma variável deve começar por um
caracter de ‘a’ a ‘z’* ou por um “underscore”
caracter de ‘a’ a ‘z’* ou por um “underscore”

 As variáveis são sensíveis à capitalização
As variáveis são sensíveis à capitalização
dos caracteres
dos caracteres
dos caracteres
dos caracteres

 O PHP é uma linguagem “untyped”
O PHP é uma linguagem “untyped”

 As variáveis não tem tipo
As variáveis não tem tipo

 Na realidade é dinamicamente “typed”
Na realidade é dinamicamente “typed”
o
o Type Juggling
Type Juggling
–
– O tipo é implicitamente assumido no contexto de
O tipo é implicitamente assumido no contexto de
utilização da variável
utilização da variável
Nota: *Na realidade o nome pode ter este padrão
Nota: *Na realidade o nome pode ter este padrão [a
[a-
-zA
zA-
-Z_
Z_
x7f
x7f-
-
xff][a
xff][a-
-zA
zA-
-Z0
Z0-
-9_
9_
x7f
x7f-
-
xff]*
xff]*
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 14
14
Variáveis
Variáveis -
- Exemplo
Exemplo
/head
body
?php
$i = 13; //$i é inteiro
$s = i=$i; //$s é uma string
$f = 10.23; //$f é float
ex0.php
ex0.php
Nas strings delimitadas por aspas as
variáveis embutidas na string são
substituídas pelo seu valor presente
$g = 2e-1; //$g é float
$ri = $i; //$ri é uma referência para $i
$ri = '$i é alterada e muda de inteiro para string';
echo $i, 'br', $f, 'br', $s, 'br', $g
?
/body
/html O echo é uma função que imprime para a
saída o valor dos seus argumentos
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 15
15
Variáveis (2)
Variáveis (2)

 O PHP4 suporta referências para variáveis
O PHP4 suporta referências para variáveis
$ri = $i;

 Os nomes das variáveis podem ser variáveis
Os nomes das variáveis podem ser variáveis
$v = “nome da variável”;
$v = “nome da variável”;
$$v = 7;

 A função
A função isset($v)
isset($v) testa se a variável $v
testa se a variável $v
está definida
está definida

 Para “eliminar” uma variável usa
Para “eliminar” uma variável usa-
-se a função
se a função
unset($v)
unset($v);
;
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 16
16
Variáveis
Variáveis –
– Exemplo 2
Exemplo 2
body
?php
$i = 6;
$n = 'i';
if (isset($$n))echo $$n =, $$n,br;
$n1 = 'Variável 1';
$n2 = 'Variável 2';
$n3 = 'Variável 3';
ex4.php
ex4.php
$i =6
$Variável 1 =1
$Variável 2 =
$Variável 3 =3
Resultado
Resultado
Variável de
nome variável
$n3 = 'Variável 3';
$$n1 = 1;
$$n2 = 2;
$$n3 = 3;
unset($$n2);
$k = 0;
while($k++  3){
$s = Variável $k;
echo $$s =, $$s,br;
}
?
/body
/html
O nome desta variável é:
Variável 1
Sequência de
escape para o $
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 17
17
Controlo de Fluxo
Controlo de Fluxo

 O PHP suporta as mesmas estruturas de
O PHP suporta as mesmas estruturas de
controlo de fluxo do C
controlo de fluxo do C

 if
if,
, if
if else
else,
, if
if elseif
elseif,
, if
if elseif
elseif else
else

 while
while

 do
do while
while

 do
do while
while

 for
for

 switch
switch

 break
break ,
, continue
continue

 Mais o
Mais o foreach
foreach

 Utilizado para percorrer os arrays
Utilizado para percorrer os arrays
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 18
18
Switch
Switch -
- Exemplo
Exemplo
html
body
?php
$s = um ou dois;
switch ($s) {
case um :
echo '$s é 1';
break;
ex1.php
ex1.php
O argumento do switch pode ser um
inteiro, uma string ou um float
break;
case dois :
echo '$s é 2';
break;
default:
echo 'nenhum do valores previstos';
}
?
/body
/html
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 19
19
html
body
table border=1
trtdi/tdtd i * i /td
?php for($i = 5; $i-- 0;){ ?
tr
td
?php echo $i ? !-- é um alias para ? echo $i ? --
Ciclos com HTML
Ciclos com HTML -
- Exemplo
Exemplo
ex2.php
ex2.php
Código HTML dentro
de um ciclo for!!!
?php echo $i ? !-- é um alias para ? echo $i ? --
/td
td
?php echo $i * $i ?
/td
/tr
?php } ?
/table
/body
/html
Dentro do HTML os
comentários são,
naturalmente,
definidos em HTML
Dentro do HTML os
comentários são,
naturalmente,
definidos em HTML
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 20
20
Resultado de ex2.php
Resultado de ex2.php
html
html
body
body
table border=1
table border=1
trtdi/tdtd i * i /td
trtdi/tdtd i * i /td
tr
tr
td
td
4 !
4 !--
-- é um alias para 4
é um alias para 4 --
--

/td
/td
td
td
16 /td
16 /td
/tr
/tr
/td
td
4 /td
/tr
tr
td
1 !-- é um alias para 1 --
/td
td
/tr
/tr
tr
tr
td
td
3 !
3 !--
-- é um alias para 3
é um alias para 3 --
--

/td
/td
td
td
9 /td
9 /td
/tr
/tr
tr
tr
td
td
2 !
2 !--
-- é um alias para 2
é um alias para 2 --
--

td
1 /td
/tr
tr
td
0 !-- é um alias para 0 --
/td
td
0 /td
/tr
/table/body/html
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 21
21
Arrays
Arrays Associativos
Associativos

 Em PHP os
Em PHP os arrays
arrays são sempre associativos
são sempre associativos

 A indexação de um
A indexação de um array
array associativo é feita com
associativo é feita com
os parênteses rectos
os parênteses rectos
 $d['nfolhas'] = desconhecido;

 Um
Um array
array é criado com o
é criado com o constructor
constructor array
array()
()
$a = array(20,folhas,40,páginas);
 $a = array(20,folhas,40,páginas);

 As chaves dos
As chaves dos arrays
arrays podem ser definidas
podem ser definidas
explicitamente, ou
explicitamente, ou implicitivamente
implicitivamente criadas
criadas
sequencialmente
sequencialmente
 $c = array(30, nfolhas = 65, 50);
 O par (chave,valor) é indicado na forma
chave = valor
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 22
22
Arrays Associativos (2)
Arrays Associativos (2)

 A atribuição de um valor a uma chave
A atribuição de um valor a uma chave
inexistente cria um novo par
inexistente cria um novo par
$g[10] = 'dez';
$d['nfolhas'] = desconhecido;

 A omissão da chave ao inicializar ou atribuir,
A omissão da chave ao inicializar ou atribuir,

 A omissão da chave ao inicializar ou atribuir,
A omissão da chave ao inicializar ou atribuir,
associa o valor a uma chave inteira igual à última
associa o valor a uma chave inteira igual à última
chave inteira + 1 (ou zero se o
chave inteira + 1 (ou zero se o array
array ainda não
ainda não
tiver qualquer chave inteira)
tiver qualquer chave inteira)
 $f = array(5 = 'cinco','seis','sete');
 $f[] = 'e aqui?';
 $e[] = 7;
----------a---------
0 = 20
1 = folhas
2 = 40
3 = páginas
----------b---------
nfolhas = 100
npaginas = 200
----------c---------
0 = 30
nfolhas = 65
1 = 50
----------d---------
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 23
23
Arrays
Arrays -
- Exemplo
Exemplo
body
?php
$a = array(20,folhas,40,páginas);
$b = array(nfolhas = 100, npaginas = 200);
$c = array(30, nfolhas = 65, 50);
$d['nfolhas'] = desconhecido;
$e[] = 7;
$f = array(5 = 'cinco','seis','sete');
$g = array(5 = 'cinco','seis','sete');
ex3.php
ex3.php
Resultado
Resultado
----------d---------
nfolhas =
desconhecido
----------e---------
0 = 7
----------f---------
5 = cinco
6 = seis
7 = sete
8 = e aqui?
----------g---------
5 = cinco
6 = seis
7 = sete
10 = dez
11 = e agora?
$g = array(5 = 'cinco','seis','sete');
$f[] = 'e aqui?';
$g[10] = 'dez';
$g[] = 'e agora?';
$arr = array('a','b','c','d','e','f','g');
foreach ($arr as $V){
echo ----------$V---------br;
foreach ($$V as $k = $v){
echo $k = $vbr;
}
}
?
/body
/html
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 24
24
foreach
foreach

 O ciclo
O ciclo foreach
foreach percorre um array e obtem
percorre um array e obtem
sucessivamente os pares chave = valor
sucessivamente os pares chave = valor
foreach ($array as $k = $v)

 Num
Num foreach
foreach pode
pode-
-se omitir a recolha da
se omitir a recolha da
chave
chave
foreach ($array as $v){
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 25
25
Arrays Associativos (3)
Arrays Associativos (3)

 A verificação da existência de uma
A verificação da existência de uma
chave é conseguida com a função
chave é conseguida com a função isset
isset

 isset($a[‘chave’])
isset($a[‘chave’]) retorna verdadeiro se o
retorna verdadeiro se o

 isset($a[‘chave’])
isset($a[‘chave’]) retorna verdadeiro se o
retorna verdadeiro se o
par (chave, valor) existe
par (chave, valor) existe

 O
O unset($a[‘chave’])
unset($a[‘chave’]) elimina um par
elimina um par
(chave,valor)
(chave,valor)
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 26
26
Variáveis Externas
Variáveis Externas

 O PHP fornece um conjunto vasto de
O PHP fornece um conjunto vasto de
variáveis pré
variáveis pré-
-definidas que permitem o
definidas que permitem o
acesso a variáveis externas
acesso a variáveis externas

 Sistema Operativo (ambiente)
Sistema Operativo (ambiente)

 Servidor
Servidor

 Servidor
Servidor

 Formulário HTML submetido
Formulário HTML submetido
(Nota: de versão para versão vão sendo adicionadas
(Nota: de versão para versão vão sendo adicionadas
novas variáveis, muitas vezes por questões de
novas variáveis, muitas vezes por questões de
segurança, que tornam as antigas “deprecated” e
segurança, que tornam as antigas “deprecated” e
conduzem numa próxima versão a estarem inacessíveis
conduzem numa próxima versão a estarem inacessíveis
por configuração por omissão)
por configuração por omissão)
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 27
27
Variáveis Externas
Variáveis Externas

 A partir do PHP 3 está acessível o array $GLOBAL
A partir do PHP 3 está acessível o array $GLOBAL
que permite aceder a tudo o que é variável global
que permite aceder a tudo o que é variável global

 Variáveis do script
Variáveis do script
$GLOBALS[i] = 6

 Variáveis de ambiente
Variáveis de ambiente

 Variáveis de ambiente
Variáveis de ambiente
$GLOBALS[PATH] =
/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin

 Variáveis do Servidor
Variáveis do Servidor
$GLOBALS[REQUEST_METHOD] = GET

 Variáveis do Formulário WEB
Variáveis do Formulário WEB
$GLOBALS[campo1] = valor1
$GLOBALS[campo2 ] = valor2
QUERY_STRING =
campo1=valor1campo2=valor2
HTTP_POST_VARS = Array
_POST = Array
HTTP_GET_VARS = Array
_GET = Array
HTTP_COOKIE_VARS = Array
_COOKIE = Array
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 28
28
... continuação
... continuação
Variáveis Externas
Variáveis Externas -
- Exemplo
Exemplo
body
?php
$i = 6;
foreach($GLOBALS as $k = $v){
echo $k = $vbr;
}
?
/body
/html
ex5.php
ex5.php
_COOKIE = Array
HTTP_SERVER_VARS = Array
_SERVER = Array
HTTP_ENV_VARS = Array
_ENV = Array
HTTP_POST_FILES = Array
_FILES = Array
_REQUEST = Array
GLOBALS = Array
i = 6
k = i
v = i
Extracto parcial do resultado de
Extracto parcial do resultado de
http://gnomo.fe.up.pt/~jvv/php/ex5.php?campo1=valor1campo2=valor2
http://gnomo.fe.up.pt/~jvv/php/ex5.php?campo1=valor1campo2=valor2
/html
campo1 = valor1
campo2 = valor2
REMOTE_ADDR = 213.205.70.108
SERVER_SOFTWARE = Apache/1.3.26 (Unix)
ApacheJServ/1.1.2 PHP/4.2.1 mod_ssl/2.8.10
OpenSSL/0.9.6a
REQUEST_METHOD = GET
Continunua...
Continunua...
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 29
29
Variáveis Externas
Variáveis Externas

 A partir do PHP 4.1 estão acessíveis os
A partir do PHP 4.1 estão acessíveis os arrays
arrays
$_GET
$_GET,
, $_POST
$_POST e
e $_REQUEST
$_REQUEST que
que permitem
permitem
aceder aos dados submetidos num formulário
aceder aos dados submetidos num formulário
HTML
HTML
 O $_REQUEST é o conjunto dos dados de $_GET
 O $_REQUEST é o conjunto dos dados de $_GET
e $_POST
o Deve ser usado quando queremos tratar indistintamente
formulários submetidos por POST ou GET
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 30
30
--------_GET-------
campo1 = valor1
--------_POST-------
campo2 = vou escrever aqui
--------_REQUEST-------
campo1 = valor1
campo2 = vou escrever aqui
Variáveis Externas
Variáveis Externas -
- Exemplo 2
Exemplo 2
body
?php
$ag = array ('_GET','_POST',
'_REQUEST');
foreach($ag as $n){
echo --------$n-------br;
foreach($$n as $k = $v){
echo $k = $vbr;
}
ex6.php
ex6.php
Resultado de
Resultado de
http://gnomo.fe.up.pt/~jvv/php/ex1.html
http://gnomo.fe.up.pt/~jvv/php/ex1.html
}
}
?
/body
/html
html
body
form action=ex6.php?campo1=valor1 method=post
Campo:input type=text name=campo2/input
/form
/body
/html
ex1.html
ex1.html
O array _REQUEST
incluí os campos
enviados quer por
GET quer por POST
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 31
31
Modularidade
Modularidade
?
include(header.php);
include(menus.php);
?
!--write here the specific code --

 Permite reutilizar
Permite reutilizar
código
código

 Exemplo
Exemplo

 Um site com
Um site com
diversas páginas
diversas páginas !--write here the specific code --
?
include(footer.php);
?
diversas páginas
diversas páginas
mas todas
mas todas
contendo os
contendo os
mesmos menus,
mesmos menus,
cabeçalhos,
cabeçalhos,
rodapés,
rodapés, etc
etc
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 32
32
Funções
Funções
?
function soma($a, $b){
return $a + $b;
}
function troca($a, $b){
$c = $a;
$a = $b;
$b = $c;

 As
As funcões
funcões são declaradas
são declaradas
com a palavra reservada
com a palavra reservada
function
function

 Os argumentos podem ser
Os argumentos podem ser
passados por valor, por
passados por valor, por $b = $c;
}
function diz($mesg = “Hello”){
print $mesg . “br”;
}
$x = 5; $y = 7;
troca($x,$y);
echo “x = $x, y = $y”);
say();
echo soma(312, 4753);
?
passados por valor, por
passados por valor, por
referência ou assumir
referência ou assumir
valores por omissão
valores por omissão

 Em PHP5 por
Em PHP5 por o
os objectos
s objectos
são manipulados como
são manipulados como
referências
referências
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 33
33
Manuseamento de Erros
Manuseamento de Erros
try {
$a=$_GET[‘num’]/$_GET[‘den’];
} catch (Exception $e) {
echo 'Caught exception: ', $e-getMessage();
throw $e; // route it further
}
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 34
34
Classes
Classes
class User{
public $username ;
protected $email;
private $pass = ‘secret’;
public __construct($name){
public __construct($name){
$this-username = $name
}
public login($secret){
return $secret == $this-pass;
}
}
$u = new User(‘xpto’);
$u-login(‘myscret’);
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 35
35
Herança
Herança
class Administrator extends User{
private $domain = ‘ntdomain.local’;
public __construct($name, $domain){
$this-domain= $domain;
parent::__construct($name);
parent::__construct($name);
}
public login($secret){
return $secret = $this-pass;
}
}
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 36
36
PDO
PDO

 PHP Data
PHP Data Object
Object Layer
Layer

 É uma interface comum para diversas
É uma interface comum para diversas BD’s
BD’s
• MySQL
• PostgreSQL
• SQLite
• ODBC
• DB2
• Oracle
• Firebird
• FreeTDS/Sybase/MSSQL
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 37
37
PDO
PDO
$db = new PDO(‘sqlite:/path/to/database_file’);
$res1 = $db-exec(“INSERT INTO foo (id) VALUES(‘bar’)”);
$res2 = $db-exec(“UPDATE foo SET id=‘bar’”);
if ($res2 == FALSE) echo ‘error’;
$res = $db-query(“SELECT * FROM foo”);
while ($row = $res-fetch(PDO::FETCH_ASSOC)){
while ($row = $res-fetch(PDO::FETCH_ASSOC)){
echo $row[‘id’]
}
$res3 = $db-prepare(“SELECT * FROM foo WHERE id=?”);
$res3-execute(array($_GET[‘id’]));
while ($row = $res3-fetch(PDO::FETCH_ASSOC)){
echo $row[‘id’];
}
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 38
38
PDO
PDO
$res4= $db-prepare(“INSERT INTO users VALUES(:user)”);
$res4 -bindParam(‘:user’, $user);
foreach($_POST[‘user’] as $user){
$res4-execute();
}
//TODO
XML em PHP
ou PHP em XML
ou PHP em XML
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 40
40
PHP em XML
PHP em XML
?
header('Content-type: text/xml');
echo '?xml version=1.0 encoding=iso-8859-1?';
if (isset($_REQUEST['xsl'])){
echo '?xml-stylesheet type=text/xsl href=', $_REQUEST['xsl'], '?';
}
exemplos/grupo.php
exemplos/grupo.php
Definição dinâmica
do script XSL
associado
Define o tipo de documento gerado por este
script PHP
?
grupo
aluno
nome ? echo $_REQUEST[‘nome'] ?/nome
email ? echo $_REQUEST[‘email'] ?/email
/aluno
/grupo O PHP é agnóstico
relativamente à
linguagem hospedeira
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 41
41
PHP
PHP e DOM
e DOM
?php
header('Content-type: text/xml');
echo '?xml version=1.0 encoding=utf-8?';
echo 'result';
$dom = new DOMDocument();
$dom-load('grupo.xml');
exemplos/
exemplos/dom.php
dom.php
Define o tipo de documento gerado por este
script PHP
A variável $dom é
um documento DOM
que representa o
ficheiro grupo.xml
Um dos
métodos da
API do
DOM.
$dom-load('grupo.xml');
$field = $_REQUEST['field'];
$nodelist = $dom-getElementsByTagName($field);
foreach ($nodelist AS $key=$node) {
echo $field index=$key.$node-nodeValue./$field;
}
echo '/result';
?
DOM.
Uma propriedade da DOM API
para o tipo Node
http://paginas.fe.up.pt/~jvv/Assuntos/PHP/exemplos/grupo.xml
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 42
42
PHP
PHP e DOM/
e DOM/Xpath
Xpath
?php
header('Content-type: text/plain');
echo '?xml version=1.0 encoding=utf-8?';
echo 'result';
$dom = new DOMDocument();
$dom-load('grupo.xml');
exemplos/
exemplos/xpath.php
xpath.php
Cria um
Documento DOM
O Documento DOM
representa agora o
documento XML
Cria um
Objecto Xpath
$dom-load('grupo.xml');
$xpath = new DOMXPath($dom);
$nodelist = $xpath-query(//aluno[email='msilva@dominio.pt']/nome);
foreach ($nodelist AS $key=$node) {
echo nome index=$key.$node-nodeValue./nome;
}
echo '/result';
?
Objecto Xpath
Executa a query Expressão Xpath
http://paginas.fe.up.pt/~jvv/Assuntos/PHP/exemplos/grupo.xml
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 43
43
PHP
PHP -
- módulo
módulo SimpleXML
SimpleXML
?php
header('Content-type: text/xml');
$rss = new SimpleXMLElement('http://www.digitalcowboy.com/dc_updates.rss', ULL,TRUE);
print $rss-asXML();
?
exemplos/simpleXML.php
rss version=0.91
channel
titleDigitalCowboy.com/title
linkhttp://www.digitalcowboy.com/link
linkhttp://www.digitalcowboy.com/link
descriptionDC Update Feed/description
languageen-us/language
item
titleMisc. Graphics Section Added to Work/title
linkhttp://www.digitalcowboy.com/link
descriptionA new section on the Work p.../description
/item
…
item
titleRSS Feed Activated/title
linkhttp://www.digitalcowboy.com/link
descriptionI plan on updating this on a r.../description
/item
/channel/rs
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 44
44
XML Objecto
XML Objecto
?php
header('Content-type: text/xml');
$rss = new SimpleXMLElement('http://www.digitalcowboy.com/dc_updates.rss', ULL,TRUE);
print R;
exemplos/simpleXML3.php
print $rss-channel-title;
print /R;
?
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 45
45
Arrays
Arrays de Objectos
de Objectos
?php
header('Content-type: text/xml');
$rss = new SimpleXMLElement('http://www.digitalcowboy.com/dc_updates.rss', ULL,TRUE);
print R;
exemplos/simpleXML3.php
print $rss-channel-item[0]-title;
print /R;
?
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 46
46
Conversão de objecto para XML
Conversão de objecto para XML
?php
header('Content-type: text/xml');
$rss = new SimpleXMLElement('http://www.digitalcowboy.com/dc_updates.rss', ULL,TRUE);
print R;
exemplos/simpleXML4.php
print $rss-channel-item[0]-title-asXML();
print /R;
?
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 47
47
Listas de Objectos
Listas de Objectos
?php
header('Content-type: text/xml');
$rss = new SimpleXMLElement('http://www.digitalcowboy.com/dc_updates.rss', ULL,TRUE);
print R;
$nodelist = $rss-channel-item;
exemplos/simpleXML5.php
foreach($nodelist as $k = $v){
print $v-asXML();
};
print /R;
?
07
07-
-11
11-
-10
10 http://www.fe.up.pt/~jvv/
http://www.fe.up.pt/~jvv/ 48
48
Xpath
Xpath
?php
header('Content-type: text/xml');
$rss = new SimpleXMLElement('http://www.digitalcowboy.com/dc_updates.rss', ULL,TRUE);
print R;
$nodelist = $rss-xpath(//title[parent::item]);
foreach($nodelist as $k = $v){
exemplos/simpleXML6.php
print $v-asXML();
};
print /R;
?

phpDSFLKJLFKJSDFJLSFLSFDJLKSFLKSJFSFDJLKJ.pdf

  • 1.
    PHP PHP Personal Home Page http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/1 1 07 07- -11 11- -10 10 Isidro Vila Verde Isidro Vila Verde PhP Hypertext Preprocessor Personal Home Page
  • 2.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 2 2 Oque é? O que é? Linguagem “scriptica” de servidor que Linguagem “scriptica” de servidor que pode funcionar em dois modos distintos pode funcionar em dois modos distintos Como preprocessador de HTML para um Como preprocessador de HTML para um Como preprocessador de HTML para um Como preprocessador de HTML para um servidor WEB servidor WEB Interpretada como uma linguagem Interpretada como uma linguagem “scriptica” convencional “scriptica” convencional php test.php php test.php
  • 3.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 3 3 ResumoHistórico Resumo Histórico PHP foi criado em 1994 por Rasmus Lerdorf PHP foi criado em 1994 por Rasmus Lerdorf (membro da equipa do Apache) para registar (membro da equipa do Apache) para registar os acesso á sua Página Pessoal os acesso á sua Página Pessoal PHP (Personal Home Page) PHP (Personal Home Page) Em 1995 foi baptizado com o nome PHP/FI Em 1995 foi baptizado com o nome PHP/FI Em 1995 foi baptizado com o nome PHP/FI Em 1995 foi baptizado com o nome PHP/FI (Form Interpreter) com interface para o (Form Interpreter) com interface para o mSQL mSQL Em 1997 saiu o PHP/FI 2. Foi estimado que Em 1997 saiu o PHP/FI 2. Foi estimado que estivesse instalado em cerca de 50.000 estivesse instalado em cerca de 50.000 domínios (1% da Internet) domínios (1% da Internet)
  • 4.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 4 4 ResumoHistórico Resumo Histórico Em 1998 foi oficialmente lançado o PHP3, Em 1998 foi oficialmente lançado o PHP3, re re- -escrito de raiz por Zeev Suraski e Andi escrito de raiz por Zeev Suraski e Andi Gutmans Gutmans No final de 1999 estava a ser utilizado num No final de 1999 estava a ser utilizado num milhão de sítios WEB milhão de sítios WEB milhão de sítios WEB milhão de sítios WEB A versão actual PHP4 é baseado na A versão actual PHP4 é baseado na ferramenta ‘Zeend Engine’ ferramenta ‘Zeend Engine’ O PHP5 encontra O PHP5 encontra- -se em fase experimental se em fase experimental Em Junho de 2002 estava ser utilizado em Em Junho de 2002 estava ser utilizado em 10 milhões de sítios WEB 10 milhões de sítios WEB
  • 5.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 5 5 html head titleUntitled/title /head body ?php //Ophp é escrito dentro disto print Hello World; #imprime a saudação “Hello Word” “Hello Word” helloworld.php helloworld.php Inicia um bloco de código PHP print Hello World; #imprime a saudação /*Esta é a terceira forma de comentar*/ ? /body /html Termina o bloco de código PHP O PHP suporta os comentários na forma O PHP suporta os comentários na forma suportada no Java e no Perl suportada no Java e no Perl
  • 6.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 6 6 PHPintercalado com HTML PHP intercalado com HTML Um bloco PHP é delimitado de 3 formas Um bloco PHP é delimitado de 3 formas ? ? código PHP código PHP ? ? ?php ?php código PHP código PHP ? ? ?php ?php código PHP código PHP ? ? script language=“php” script language=“php” código PHP código PHP /script /script As intruções terminam com um As intruções terminam com um ; ; • • Pode ser omitido na ultima linha Pode ser omitido na ultima linha
  • 7.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 7 7 Usode Variáveis Uso de Variáveis html /head body ?php $i = 10; //$i é uma variável. Aqui está iniciada com o valo 10 while($i 0 ){ //testa se $i é maior que zero echo a) Linha = , $i, br; echo a) Linha = , $i, br; echo b) Linha = $i, br; //comparar o resultado desta echo 'c) Linha = $i', br; //com o resultado desta echo d) Linha = $i, br; //e com o resultado desta echo '-------br'; $i = $i - 1; } ? /body /html
  • 8.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 8 8 Strings Strings As strings são cadeias de caracteres As strings são cadeias de caracteres Para identificar um conjunto de caracteres Para identificar um conjunto de caracteres como sendo uma string é necessário delimitá como sendo uma string é necessário delimitá- - los por caracteres especiais los por caracteres especiais o o Em PHP há dois caracteres usados para delimitar Em PHP há dois caracteres usados para delimitar o o Em PHP há dois caracteres usados para delimitar Em PHP há dois caracteres usados para delimitar as strings as strings – – O carácter aspa O carácter aspa • • “esta string contém o valor de “esta string contém o valor de $i que é $i” $i que é $i” • • Note Note- -se o uso do carácter de escape se o uso do carácter de escape para sinalizar para sinalizar que o próximo carácter deve ser interpretado que o próximo carácter deve ser interpretado literalmente literalmente – – O carácter apóstrofo O carácter apóstrofo • • 'Esta string não substitui o $i pelos seu valor' 'Esta string não substitui o $i pelos seu valor'
  • 9.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 9 9 Operadores Operadores htnl /head body ?php $a= 10; // operador atribuição $prod = 10 * 10; // operador produto $soma = $prod + $a; // operador soma $soma = $prod + $a; // operador soma $sub = $prod – ($a + $soma * 3); // operador subtracção $div = $sub / 5; //operador divisão inteira echo a=$a, prod=$prod, soma=$soma, sub=$sub, div=$div; echo 'br'; //.... continua
  • 10.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 10 10 Operadores Operadores //...continuação $posinc = 5; echo 'posinc = ', $posinc++,'br'; //operador pós incr. $preinc = 5; echo 'preinc = ', ++$preinc,'br'; //operador pré incr. $posdec = 5; echo 'posdec = ', $posdec--,'br'; //operador pré decr. echo 'posdec = ', $posdec--,'br'; //operador pré decr. $predec = 5; echo 'predec = ', --$predec,'br'; //operador pré decr. //... continua
  • 11.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 11 11 Operadores Operadores //...continuação $a = 5; echo 'a = ', $a, 'br'; $a += 10; echo 'a = ', $a, 'br'; $a -= 5; echo 'a = ', $a, 'br'; echo 'a = ', $a, 'br'; $a *= 5; echo 'a = ', $a, 'br'; $a /= 4; echo 'a = ', $a, 'br'; $r = 8 % 3; //operador resto de divisão inteira echo 'r = ', $r, 'br'; ? /body /html
  • 12.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 12 12 html body ?php//ver http://www.php.net/manual/en/language.operators.php $i = 5; echo 'bri=',$i++; $j = ++$i; Operadores Operadores - - Exemplo Exemplo echo 'brj=',++$j; $a = 2; $a += ++$a; // ver echo 'bra=',$a; $b = 2; $b += $b++; echo 'brb=',$b; ? /body /html
  • 13.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 13 13 Variáveis Variáveis As variáveis são precedidas de um As variáveis são precedidas de um $ $ O nome de uma variável deve começar por um O nome de uma variável deve começar por um caracter de ‘a’ a ‘z’* ou por um “underscore” caracter de ‘a’ a ‘z’* ou por um “underscore” As variáveis são sensíveis à capitalização As variáveis são sensíveis à capitalização dos caracteres dos caracteres dos caracteres dos caracteres O PHP é uma linguagem “untyped” O PHP é uma linguagem “untyped” As variáveis não tem tipo As variáveis não tem tipo Na realidade é dinamicamente “typed” Na realidade é dinamicamente “typed” o o Type Juggling Type Juggling – – O tipo é implicitamente assumido no contexto de O tipo é implicitamente assumido no contexto de utilização da variável utilização da variável Nota: *Na realidade o nome pode ter este padrão Nota: *Na realidade o nome pode ter este padrão [a [a- -zA zA- -Z_ Z_ x7f x7f- - xff][a xff][a- -zA zA- -Z0 Z0- -9_ 9_ x7f x7f- - xff]* xff]*
  • 14.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 14 14 Variáveis Variáveis- - Exemplo Exemplo /head body ?php $i = 13; //$i é inteiro $s = i=$i; //$s é uma string $f = 10.23; //$f é float ex0.php ex0.php Nas strings delimitadas por aspas as variáveis embutidas na string são substituídas pelo seu valor presente $g = 2e-1; //$g é float $ri = $i; //$ri é uma referência para $i $ri = '$i é alterada e muda de inteiro para string'; echo $i, 'br', $f, 'br', $s, 'br', $g ? /body /html O echo é uma função que imprime para a saída o valor dos seus argumentos
  • 15.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 15 15 Variáveis(2) Variáveis (2) O PHP4 suporta referências para variáveis O PHP4 suporta referências para variáveis $ri = $i; Os nomes das variáveis podem ser variáveis Os nomes das variáveis podem ser variáveis $v = “nome da variável”; $v = “nome da variável”; $$v = 7; A função A função isset($v) isset($v) testa se a variável $v testa se a variável $v está definida está definida Para “eliminar” uma variável usa Para “eliminar” uma variável usa- -se a função se a função unset($v) unset($v); ;
  • 16.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 16 16 Variáveis Variáveis– – Exemplo 2 Exemplo 2 body ?php $i = 6; $n = 'i'; if (isset($$n))echo $$n =, $$n,br; $n1 = 'Variável 1'; $n2 = 'Variável 2'; $n3 = 'Variável 3'; ex4.php ex4.php $i =6 $Variável 1 =1 $Variável 2 = $Variável 3 =3 Resultado Resultado Variável de nome variável $n3 = 'Variável 3'; $$n1 = 1; $$n2 = 2; $$n3 = 3; unset($$n2); $k = 0; while($k++ 3){ $s = Variável $k; echo $$s =, $$s,br; } ? /body /html O nome desta variável é: Variável 1 Sequência de escape para o $
  • 17.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 17 17 Controlode Fluxo Controlo de Fluxo O PHP suporta as mesmas estruturas de O PHP suporta as mesmas estruturas de controlo de fluxo do C controlo de fluxo do C if if, , if if else else, , if if elseif elseif, , if if elseif elseif else else while while do do while while do do while while for for switch switch break break , , continue continue Mais o Mais o foreach foreach Utilizado para percorrer os arrays Utilizado para percorrer os arrays
  • 18.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 18 18 Switch Switch- - Exemplo Exemplo html body ?php $s = um ou dois; switch ($s) { case um : echo '$s é 1'; break; ex1.php ex1.php O argumento do switch pode ser um inteiro, uma string ou um float break; case dois : echo '$s é 2'; break; default: echo 'nenhum do valores previstos'; } ? /body /html
  • 19.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 19 19 html body tableborder=1 trtdi/tdtd i * i /td ?php for($i = 5; $i-- 0;){ ? tr td ?php echo $i ? !-- é um alias para ? echo $i ? -- Ciclos com HTML Ciclos com HTML - - Exemplo Exemplo ex2.php ex2.php Código HTML dentro de um ciclo for!!! ?php echo $i ? !-- é um alias para ? echo $i ? -- /td td ?php echo $i * $i ? /td /tr ?php } ? /table /body /html Dentro do HTML os comentários são, naturalmente, definidos em HTML Dentro do HTML os comentários são, naturalmente, definidos em HTML
  • 20.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 20 20 Resultadode ex2.php Resultado de ex2.php html html body body table border=1 table border=1 trtdi/tdtd i * i /td trtdi/tdtd i * i /td tr tr td td 4 ! 4 !-- -- é um alias para 4 é um alias para 4 -- -- /td /td td td 16 /td 16 /td /tr /tr /td td 4 /td /tr tr td 1 !-- é um alias para 1 -- /td td /tr /tr tr tr td td 3 ! 3 !-- -- é um alias para 3 é um alias para 3 -- -- /td /td td td 9 /td 9 /td /tr /tr tr tr td td 2 ! 2 !-- -- é um alias para 2 é um alias para 2 -- -- td 1 /td /tr tr td 0 !-- é um alias para 0 -- /td td 0 /td /tr /table/body/html
  • 21.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 21 21 Arrays ArraysAssociativos Associativos Em PHP os Em PHP os arrays arrays são sempre associativos são sempre associativos A indexação de um A indexação de um array array associativo é feita com associativo é feita com os parênteses rectos os parênteses rectos $d['nfolhas'] = desconhecido; Um Um array array é criado com o é criado com o constructor constructor array array() () $a = array(20,folhas,40,páginas); $a = array(20,folhas,40,páginas); As chaves dos As chaves dos arrays arrays podem ser definidas podem ser definidas explicitamente, ou explicitamente, ou implicitivamente implicitivamente criadas criadas sequencialmente sequencialmente $c = array(30, nfolhas = 65, 50); O par (chave,valor) é indicado na forma chave = valor
  • 22.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 22 22 ArraysAssociativos (2) Arrays Associativos (2) A atribuição de um valor a uma chave A atribuição de um valor a uma chave inexistente cria um novo par inexistente cria um novo par $g[10] = 'dez'; $d['nfolhas'] = desconhecido; A omissão da chave ao inicializar ou atribuir, A omissão da chave ao inicializar ou atribuir, A omissão da chave ao inicializar ou atribuir, A omissão da chave ao inicializar ou atribuir, associa o valor a uma chave inteira igual à última associa o valor a uma chave inteira igual à última chave inteira + 1 (ou zero se o chave inteira + 1 (ou zero se o array array ainda não ainda não tiver qualquer chave inteira) tiver qualquer chave inteira) $f = array(5 = 'cinco','seis','sete'); $f[] = 'e aqui?'; $e[] = 7;
  • 23.
    ----------a--------- 0 = 20 1= folhas 2 = 40 3 = páginas ----------b--------- nfolhas = 100 npaginas = 200 ----------c--------- 0 = 30 nfolhas = 65 1 = 50 ----------d--------- 07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 23 23 Arrays Arrays - - Exemplo Exemplo body ?php $a = array(20,folhas,40,páginas); $b = array(nfolhas = 100, npaginas = 200); $c = array(30, nfolhas = 65, 50); $d['nfolhas'] = desconhecido; $e[] = 7; $f = array(5 = 'cinco','seis','sete'); $g = array(5 = 'cinco','seis','sete'); ex3.php ex3.php Resultado Resultado ----------d--------- nfolhas = desconhecido ----------e--------- 0 = 7 ----------f--------- 5 = cinco 6 = seis 7 = sete 8 = e aqui? ----------g--------- 5 = cinco 6 = seis 7 = sete 10 = dez 11 = e agora? $g = array(5 = 'cinco','seis','sete'); $f[] = 'e aqui?'; $g[10] = 'dez'; $g[] = 'e agora?'; $arr = array('a','b','c','d','e','f','g'); foreach ($arr as $V){ echo ----------$V---------br; foreach ($$V as $k = $v){ echo $k = $vbr; } } ? /body /html
  • 24.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 24 24 foreach foreach O ciclo O ciclo foreach foreach percorre um array e obtem percorre um array e obtem sucessivamente os pares chave = valor sucessivamente os pares chave = valor foreach ($array as $k = $v) Num Num foreach foreach pode pode- -se omitir a recolha da se omitir a recolha da chave chave foreach ($array as $v){
  • 25.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 25 25 ArraysAssociativos (3) Arrays Associativos (3) A verificação da existência de uma A verificação da existência de uma chave é conseguida com a função chave é conseguida com a função isset isset isset($a[‘chave’]) isset($a[‘chave’]) retorna verdadeiro se o retorna verdadeiro se o isset($a[‘chave’]) isset($a[‘chave’]) retorna verdadeiro se o retorna verdadeiro se o par (chave, valor) existe par (chave, valor) existe O O unset($a[‘chave’]) unset($a[‘chave’]) elimina um par elimina um par (chave,valor) (chave,valor)
  • 26.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 26 26 VariáveisExternas Variáveis Externas O PHP fornece um conjunto vasto de O PHP fornece um conjunto vasto de variáveis pré variáveis pré- -definidas que permitem o definidas que permitem o acesso a variáveis externas acesso a variáveis externas Sistema Operativo (ambiente) Sistema Operativo (ambiente) Servidor Servidor Servidor Servidor Formulário HTML submetido Formulário HTML submetido (Nota: de versão para versão vão sendo adicionadas (Nota: de versão para versão vão sendo adicionadas novas variáveis, muitas vezes por questões de novas variáveis, muitas vezes por questões de segurança, que tornam as antigas “deprecated” e segurança, que tornam as antigas “deprecated” e conduzem numa próxima versão a estarem inacessíveis conduzem numa próxima versão a estarem inacessíveis por configuração por omissão) por configuração por omissão)
  • 27.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 27 27 VariáveisExternas Variáveis Externas A partir do PHP 3 está acessível o array $GLOBAL A partir do PHP 3 está acessível o array $GLOBAL que permite aceder a tudo o que é variável global que permite aceder a tudo o que é variável global Variáveis do script Variáveis do script $GLOBALS[i] = 6 Variáveis de ambiente Variáveis de ambiente Variáveis de ambiente Variáveis de ambiente $GLOBALS[PATH] = /usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin Variáveis do Servidor Variáveis do Servidor $GLOBALS[REQUEST_METHOD] = GET Variáveis do Formulário WEB Variáveis do Formulário WEB $GLOBALS[campo1] = valor1 $GLOBALS[campo2 ] = valor2
  • 28.
    QUERY_STRING = campo1=valor1campo2=valor2 HTTP_POST_VARS =Array _POST = Array HTTP_GET_VARS = Array _GET = Array HTTP_COOKIE_VARS = Array _COOKIE = Array 07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 28 28 ... continuação ... continuação Variáveis Externas Variáveis Externas - - Exemplo Exemplo body ?php $i = 6; foreach($GLOBALS as $k = $v){ echo $k = $vbr; } ? /body /html ex5.php ex5.php _COOKIE = Array HTTP_SERVER_VARS = Array _SERVER = Array HTTP_ENV_VARS = Array _ENV = Array HTTP_POST_FILES = Array _FILES = Array _REQUEST = Array GLOBALS = Array i = 6 k = i v = i Extracto parcial do resultado de Extracto parcial do resultado de http://gnomo.fe.up.pt/~jvv/php/ex5.php?campo1=valor1campo2=valor2 http://gnomo.fe.up.pt/~jvv/php/ex5.php?campo1=valor1campo2=valor2 /html campo1 = valor1 campo2 = valor2 REMOTE_ADDR = 213.205.70.108 SERVER_SOFTWARE = Apache/1.3.26 (Unix) ApacheJServ/1.1.2 PHP/4.2.1 mod_ssl/2.8.10 OpenSSL/0.9.6a REQUEST_METHOD = GET Continunua... Continunua...
  • 29.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 29 29 VariáveisExternas Variáveis Externas A partir do PHP 4.1 estão acessíveis os A partir do PHP 4.1 estão acessíveis os arrays arrays $_GET $_GET, , $_POST $_POST e e $_REQUEST $_REQUEST que que permitem permitem aceder aos dados submetidos num formulário aceder aos dados submetidos num formulário HTML HTML O $_REQUEST é o conjunto dos dados de $_GET O $_REQUEST é o conjunto dos dados de $_GET e $_POST o Deve ser usado quando queremos tratar indistintamente formulários submetidos por POST ou GET
  • 30.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 30 30 --------_GET------- campo1= valor1 --------_POST------- campo2 = vou escrever aqui --------_REQUEST------- campo1 = valor1 campo2 = vou escrever aqui Variáveis Externas Variáveis Externas - - Exemplo 2 Exemplo 2 body ?php $ag = array ('_GET','_POST', '_REQUEST'); foreach($ag as $n){ echo --------$n-------br; foreach($$n as $k = $v){ echo $k = $vbr; } ex6.php ex6.php Resultado de Resultado de http://gnomo.fe.up.pt/~jvv/php/ex1.html http://gnomo.fe.up.pt/~jvv/php/ex1.html } } ? /body /html html body form action=ex6.php?campo1=valor1 method=post Campo:input type=text name=campo2/input /form /body /html ex1.html ex1.html O array _REQUEST incluí os campos enviados quer por GET quer por POST
  • 31.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 31 31 Modularidade Modularidade ? include(header.php); include(menus.php); ? !--writehere the specific code -- Permite reutilizar Permite reutilizar código código Exemplo Exemplo Um site com Um site com diversas páginas diversas páginas !--write here the specific code -- ? include(footer.php); ? diversas páginas diversas páginas mas todas mas todas contendo os contendo os mesmos menus, mesmos menus, cabeçalhos, cabeçalhos, rodapés, rodapés, etc etc
  • 32.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 32 32 Funções Funções ? functionsoma($a, $b){ return $a + $b; } function troca($a, $b){ $c = $a; $a = $b; $b = $c; As As funcões funcões são declaradas são declaradas com a palavra reservada com a palavra reservada function function Os argumentos podem ser Os argumentos podem ser passados por valor, por passados por valor, por $b = $c; } function diz($mesg = “Hello”){ print $mesg . “br”; } $x = 5; $y = 7; troca($x,$y); echo “x = $x, y = $y”); say(); echo soma(312, 4753); ? passados por valor, por passados por valor, por referência ou assumir referência ou assumir valores por omissão valores por omissão Em PHP5 por Em PHP5 por o os objectos s objectos são manipulados como são manipulados como referências referências
  • 33.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 33 33 Manuseamentode Erros Manuseamento de Erros try { $a=$_GET[‘num’]/$_GET[‘den’]; } catch (Exception $e) { echo 'Caught exception: ', $e-getMessage(); throw $e; // route it further }
  • 34.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 34 34 Classes Classes classUser{ public $username ; protected $email; private $pass = ‘secret’; public __construct($name){ public __construct($name){ $this-username = $name } public login($secret){ return $secret == $this-pass; } } $u = new User(‘xpto’); $u-login(‘myscret’);
  • 35.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 35 35 Herança Herança classAdministrator extends User{ private $domain = ‘ntdomain.local’; public __construct($name, $domain){ $this-domain= $domain; parent::__construct($name); parent::__construct($name); } public login($secret){ return $secret = $this-pass; } }
  • 36.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 36 36 PDO PDO PHP Data PHP Data Object Object Layer Layer É uma interface comum para diversas É uma interface comum para diversas BD’s BD’s • MySQL • PostgreSQL • SQLite • ODBC • DB2 • Oracle • Firebird • FreeTDS/Sybase/MSSQL
  • 37.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 37 37 PDO PDO $db= new PDO(‘sqlite:/path/to/database_file’); $res1 = $db-exec(“INSERT INTO foo (id) VALUES(‘bar’)”); $res2 = $db-exec(“UPDATE foo SET id=‘bar’”); if ($res2 == FALSE) echo ‘error’; $res = $db-query(“SELECT * FROM foo”); while ($row = $res-fetch(PDO::FETCH_ASSOC)){ while ($row = $res-fetch(PDO::FETCH_ASSOC)){ echo $row[‘id’] } $res3 = $db-prepare(“SELECT * FROM foo WHERE id=?”); $res3-execute(array($_GET[‘id’])); while ($row = $res3-fetch(PDO::FETCH_ASSOC)){ echo $row[‘id’]; }
  • 38.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 38 38 PDO PDO $res4=$db-prepare(“INSERT INTO users VALUES(:user)”); $res4 -bindParam(‘:user’, $user); foreach($_POST[‘user’] as $user){ $res4-execute(); } //TODO
  • 39.
    XML em PHP ouPHP em XML ou PHP em XML
  • 40.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 40 40 PHPem XML PHP em XML ? header('Content-type: text/xml'); echo '?xml version=1.0 encoding=iso-8859-1?'; if (isset($_REQUEST['xsl'])){ echo '?xml-stylesheet type=text/xsl href=', $_REQUEST['xsl'], '?'; } exemplos/grupo.php exemplos/grupo.php Definição dinâmica do script XSL associado Define o tipo de documento gerado por este script PHP ? grupo aluno nome ? echo $_REQUEST[‘nome'] ?/nome email ? echo $_REQUEST[‘email'] ?/email /aluno /grupo O PHP é agnóstico relativamente à linguagem hospedeira
  • 41.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 41 41 PHP PHPe DOM e DOM ?php header('Content-type: text/xml'); echo '?xml version=1.0 encoding=utf-8?'; echo 'result'; $dom = new DOMDocument(); $dom-load('grupo.xml'); exemplos/ exemplos/dom.php dom.php Define o tipo de documento gerado por este script PHP A variável $dom é um documento DOM que representa o ficheiro grupo.xml Um dos métodos da API do DOM. $dom-load('grupo.xml'); $field = $_REQUEST['field']; $nodelist = $dom-getElementsByTagName($field); foreach ($nodelist AS $key=$node) { echo $field index=$key.$node-nodeValue./$field; } echo '/result'; ? DOM. Uma propriedade da DOM API para o tipo Node http://paginas.fe.up.pt/~jvv/Assuntos/PHP/exemplos/grupo.xml
  • 42.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 42 42 PHP PHPe DOM/ e DOM/Xpath Xpath ?php header('Content-type: text/plain'); echo '?xml version=1.0 encoding=utf-8?'; echo 'result'; $dom = new DOMDocument(); $dom-load('grupo.xml'); exemplos/ exemplos/xpath.php xpath.php Cria um Documento DOM O Documento DOM representa agora o documento XML Cria um Objecto Xpath $dom-load('grupo.xml'); $xpath = new DOMXPath($dom); $nodelist = $xpath-query(//aluno[email='msilva@dominio.pt']/nome); foreach ($nodelist AS $key=$node) { echo nome index=$key.$node-nodeValue./nome; } echo '/result'; ? Objecto Xpath Executa a query Expressão Xpath http://paginas.fe.up.pt/~jvv/Assuntos/PHP/exemplos/grupo.xml
  • 43.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 43 43 PHP PHP- - módulo módulo SimpleXML SimpleXML ?php header('Content-type: text/xml'); $rss = new SimpleXMLElement('http://www.digitalcowboy.com/dc_updates.rss', ULL,TRUE); print $rss-asXML(); ? exemplos/simpleXML.php rss version=0.91 channel titleDigitalCowboy.com/title linkhttp://www.digitalcowboy.com/link linkhttp://www.digitalcowboy.com/link descriptionDC Update Feed/description languageen-us/language item titleMisc. Graphics Section Added to Work/title linkhttp://www.digitalcowboy.com/link descriptionA new section on the Work p.../description /item … item titleRSS Feed Activated/title linkhttp://www.digitalcowboy.com/link descriptionI plan on updating this on a r.../description /item /channel/rs
  • 44.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 44 44 XMLObjecto XML Objecto ?php header('Content-type: text/xml'); $rss = new SimpleXMLElement('http://www.digitalcowboy.com/dc_updates.rss', ULL,TRUE); print R; exemplos/simpleXML3.php print $rss-channel-title; print /R; ?
  • 45.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 45 45 Arrays Arraysde Objectos de Objectos ?php header('Content-type: text/xml'); $rss = new SimpleXMLElement('http://www.digitalcowboy.com/dc_updates.rss', ULL,TRUE); print R; exemplos/simpleXML3.php print $rss-channel-item[0]-title; print /R; ?
  • 46.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 46 46 Conversãode objecto para XML Conversão de objecto para XML ?php header('Content-type: text/xml'); $rss = new SimpleXMLElement('http://www.digitalcowboy.com/dc_updates.rss', ULL,TRUE); print R; exemplos/simpleXML4.php print $rss-channel-item[0]-title-asXML(); print /R; ?
  • 47.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 47 47 Listasde Objectos Listas de Objectos ?php header('Content-type: text/xml'); $rss = new SimpleXMLElement('http://www.digitalcowboy.com/dc_updates.rss', ULL,TRUE); print R; $nodelist = $rss-channel-item; exemplos/simpleXML5.php foreach($nodelist as $k = $v){ print $v-asXML(); }; print /R; ?
  • 48.
    07 07- -11 11- -10 10 http://www.fe.up.pt/~jvv/ http://www.fe.up.pt/~jvv/ 48 48 Xpath Xpath ?php header('Content-type:text/xml'); $rss = new SimpleXMLElement('http://www.digitalcowboy.com/dc_updates.rss', ULL,TRUE); print R; $nodelist = $rss-xpath(//title[parent::item]); foreach($nodelist as $k = $v){ exemplos/simpleXML6.php print $v-asXML(); }; print /R; ?