PHP
Mauro César Lopes
27-11-2008
1
PHP


Desenvolvido originalmente por Rasmus
Lerdorf em 1994
site do PHP: http://www.php.net
2
Histórico
PHP/FI (Forms Interpreter) (1995)
PHP/FI 2.0 (1997)
PHP 3.0 (Junho de 1998)
PHP 4.0 (maio de 2000)
PHP 5.0 (Julho de 2007)
3
Áreas que os scripts PHP são
usados



Scripts no lado do servidor (server-side)
Scripts de linha de comando
Aplicações Desktop
4
Sistemas operacionais



Linux
Unix like: Solaris, OpenBSD, MacOS X,
...
Microsoft Windows
5
Servidores HTTP


Apache
IIS (Internet Information Service)
6
Tipo de programação


Procedural
Orientada a Objetos
7
Funcionalidades do PHP




Gerar HTML
Geração de imagens
Arquivos PDF
Animações em Flash
8
Suporte a banco de dados






MySQL
Oracle
Interbase
PostgresSQL
Outros
...
9
Criação de scripts PHP

Todo trecho de programa PHP deve
estar entre as tags <?php e ?>para
que o servidor Web saiba que esse
trecho trata-se de um código em PHP e
que deve ser processado
10
Variáveis


Inicia por $ seguido de uma letra ou _ é case sensitive, isto é, sensível ao caso
(distinção entre letras maiúsculas e
minúsculas)
Por exemplo, a variável $Cor é
completamente diferente da variável
$cor
11
Comentários

De uma linha:
// este é o comentário de uma linha
# este é o comentário de uma linha

De mais de uma linha:
delimitado por /* e */
12
Tipos de dados
Não é necessário declarar uma variável antes de usá-la. Basta atribuir um
valor inicial. A checagem de tipos é feita dinamicamente.
Exemplo:
$x=5;
$x="policamp";
$x=3.14;
Inteiro

Ponto flutuante

String

Array

Objeto
Checagem dinâmica de tipos

13
Inteiros (integer ou long)




$x = 4567; # inteiro
$y = -127; # inteiro negativo
$o = 0116; # inteiro em representação
octal (base 8)
$hex = 0x0F; # inteiro em
representação hexadecimal (base 16)
14
Ponto Flutuante (double ou float)


$PI=3.14;
$MOL=6.02e23; # uso da notação
científica
15
Strings








Podem ser delimitadas por aspas simples
(literal) ou aspas duplas (onde há
interpretação de varáveis e caracteres
especiais).
\n
\r
\t
\\
\$
\'
\"
16
Booleano
Expressa um valor lógico que pode ser
verdadeiro (TRUE) ou falso (FALSE)
 Exemplo:
<?php
$valida=true;
if($valida) {
$a = 1;
}
?>

17
Arrays
Podem ser definidos como
mapeamentos ou vetores indexados
Exemplo:
<?
$cores[0]="Red";
$cores[1]="Green";
$cores[2]="Blue";
?>

18
Arrays - tipos de índices


Ordenado  baseado em número
(começa no 0)
Associativo  formado por caracteres
alfanuméricos
19
Arrays
$cores = array("Red", "Green", "Blue");
ou
$cores = array(0=>'Red', 1=> "Green", 2=>"Blue");
ou
$cores[]="Red";
$cores[]="Green";
$cores[]="Blue";
20
Arrays Associativos
São conjunto ordenados de chaves e
valores, onde cada valor é acessado
através de uma chave associada.
21
Arrays Associativos
<?php
$cor['red']=0;
$cor['green']=255;
$cor['blue']=0;
?>
ou
<?php
$cores=array('red'=>0, 'green'=>1, 'blue'=>2);
?>
22
Arrays (3)

Usamos a função unset() para destruir
todo o array.
23
pseudo-types
São tipos "falso" que ajudam da
legibilidade:
 mixed: indica que o parâmetro pode
aceitar múltiplos tipos mas não
necessariamente todos os tipos.
 number: indica que o parâmetro pode
ser tanto integer ou float
 callback
24
Funções de array










array_pop  retira e retorna o último elemento do array
array_push  insere um ou mais elementos no fim de um array
array_shift  retira e retorna o primeiro elemento de um array
array_unshift  insere um novo elemento no inicio de um array
array_rand  retorna um ou mais elementos do array
array_reverse  retorna um array com ordem inversa
array_keys  retorna as chaves de um array
array_values  retorna os valores de um array
sizeof  retorna o número de elementos do array
count  retorna a quantidade de elementos de um array
25
Função each

Percorre os elemento de uma lista
$chamada = array (aluno1 => francisco,
alunos2 => jose);
while(list($chave,$valor)=each($chamada)
{
echo "<p>Chave=[$chave],
Valor=[$valor]\n";
}
26
Listas
Exemplo:
list($a,$b,$c)=array("a","b","c");

27
Transformação de Tipos por
coerção
Coerção  é a conversão de um tipo em outro
tipo diferente mediante operação realizada
com tipos diferentes. Por exemplo:
$a=1;
$a = $a + "5";
Nesse exemplo a variável $a é numérica
(integer) na primeira atribuição e string na
segunda atribuição
28
Transformação explicita de tipos


Feita via typecast (como em
linguagem C)
Exemplo:
$a = 6;
# a é um integer (6)
$a = (float) 6; # é um float (6.0)
29
Casts permitidos
(int), (integer)
Integer
(real), (double), (float) Float
(string)
String
(array)
Array
(objeto)
objeto
30
Constantes
Uma constante é um identificador (nome) para um único valor que
não se altera durante a execução de um script)


Pré-definidas
Definidas pelo usuário
Exemplo:
define("MOL", 6.14e22);
define("PI", 3.1415);
echo MOL;
echo PI;
31
Constantes - Exemplo
<?php
// Nomes de constantes válidos
define("FOO",
"alguma coisa");
define("FOO2",
"alguma outra coisa");
define("FOO_BAR", "alguma coisa mais");
// Nomes de constantes inválidas
define("2FOO",
"alguma coisa");
// Isto é válido,
// O PHP pode vir
mágica
// que danificará
define("__FOO__",
mas deve ser evitado:
a fornecer uma constante
seu script
"alguma coisa");
?>
32
Constantes "Mágicas"
<?php
print __FILE__ ; # nome do arquivo
echo "\n";
echo __LINE__; # nº da linha
echo "\n";
echo __FUNCTION__; # nome da função
echo "\n";
?>
33
Operadores







Aritméticos
Atribuição
Bit a bit
Lógicos
Comparação
Expressão condicional
Incremento e decremento
34
Aritméticos





+ Adição
- Subtração
* Multiplicação
/ Divisão
% Resto da divisão (módulo)
35
Atribuição







= ($a=5);
+= ($a = $a + 5; $a+=5;)
-=
*=
/=
%=
.=
36
Bit a Bit






& (and)
| (or)
^ (xor)
~ (not)
<< - deslocamento de bits a esquerda
>> - deslocamento de bits a direita
37
Lógicos






and (e)
or (ou)
xor (ou-exclusivo)
! (negação)
&& (e)
|| (ou)
38
Comparação






== (igualdade)
!= (diferença)
< (menor que)
> (maior que)
<= (menor ou igual a)
>= (maior ou igual a)
39
Condicional
(expressão) ? (expressão2) :
(expressão3);
Exemplo:
$a=5;
$a > 5 ? $b="1" : $b="0";
40
Incremento e Decremento
++
$contador=1;
 -




++$a
um e
$a++
--$a
$a--
: pré-incremento (incrementa $a em
depois retorna $a)
: pós-incremento
: pré-decremento
: pós-decremento
41
Precedência de Operadores
$contador=1;
42
Estruturas de Controle



Blocos
Comandos condicionais
Comando de repetição
43
Blocos

São delimitados por { e }
44
Comando Condicional


if (expressão)
comando;
if(expressão) {
comando1;
...
comandoN;
}
45
Comando Condicional (2)


If (expressão)
comando1;
else
comando2;
If(expressão):
comando1;
...
comandoN;
else
comando1;
...
comandoN;
endif
46
Comando Condicional (3)
if(expressão1) {
comando1;
}
elseif(expressão2) {
comando2;
}
...
else{
comandoN;
}
47
Exemplo
<?php
$salario = 1000;
$desconto = 0.10; // 10%
$total = $salario - $salario*$desconto;
if($total>900) {
echo "";
}
?>
48
switch
switch (expressão) {
case valor1:
comando1;
break;
case valor2:
comando2;
break;
}
49
Exemplo - switch
<?php
$i = 1;
switch($i) {
case 0:
print "I
break;
case 1:
print "I
break;
case 2:
print "I
break;
default:
print "I
}
?>
é igual a 0";
é igual a 1";
é igual a 2";
não é igual a 0, 1 ou 2";
50
Comandos de repetição




while
do .. while
for
foreach
51
while


while (expressão) {
comando;
}
while (expressão) :
comando1;
...
comandoN;
endwhile;
52
Exemplo
<?php
$a = 1;
while ($a < 5) {
print $a;
$a++;
}
?>
53
do..while
$a=0;
do {
echo "a=$a\n";
$a++;
} while ($a<=10);
54
Exemplo
<?php
$acabou = false;
do {
print "loop ...";
$acabou=true;
} while (!$acabou);
?>
55
for
for (expr1; expr2; expr3 ) {
comando1
..
comandoN
}
56
foreach
Apresenta duas sintaxes:
foreach (expressão as $valor) instruções
ou
foreach (expressão as $chave => $valor)
instruções
57
foreach (exemplo)
<?php
$a = array(1,2,3,4,5);
foreach ($a as $valor) {
echo "valor=$valor<br>";
}
?>
58
foreach (exemplo)
<?php
$a = array (
"cod1" => 10,
"cod2" => 20,
"cod3" => 30,
"cod4" => 40);
foreach ($a as $chave => $valor) {
echo "<p>chave=$chave, valor=$valor";
}
?>
59
Comandos break e continue


break
continue
60
Comandos break e continue

break: pode ser usado em laços do, for
e while.
O break "quebra" a execução e continua
executando o próximo comando
 continue: interrompe a execução e
avalia novamente a condição de teste
61
Exemplo - break
<?php
# break.php
for($i=0; $i < 100; $i++) {
if($i == 10) {
break;
}
echo " $i ";
}
?>
62
Exemplo - continue
<?php
for($i=0; $i < 100; $i++) {
if($i % 2) {
continue;
}
echo " $i ";
}
?>
63
Funções




Definição
Argumentos
Passagem de parâmetros (valor ou
referência)
Argumentos com valores pré-definidos
64
Funções - Sintaxe
function nome_da_função(
[arg1, [arg2, ...,[argN]]]
)
{
comando1;
...
comandoN;
[ return valor_de_retorno ];
}
65
Funções definidas pelo usuário
Uma função deve ser definida com a usando a
sintaxe indicada abaixo:
<?php
function foo($arg_1, $arg_2, /* ..., */
$arg_n)
{
echo "Função Exemplo.\n";
return $retval;
}
?>
66
Valores Retorno
A declaração return é opcional
Qualquer tipo poderá ser retornado
incluindo listas e objetos.
67
Exemplo do uso do return
<?php
function quadrado($num)
{
return $num * $num;
}
echo quadrado(4);
// saída '16'.
?>
68
Exemplo: Retornando um array
com múltiplos elementos
<?php
function numeros_pequenos()
{
return array (0, 1, 2);
}
list($zero,$um,$dois)=numeros_pequenos();
?>
69
Modificadores de variáveis

Variáveis estáticas (static)



mantém o valor que lhes foi atribuído na
última execução. Usa o operador static.
Variáveis variáveis ($$)
Variáveis de ambiente
70
Exemplo: uso de variável
estática
<?php
function obtemProximo() {
static $contador=0;
return ++$contador;
}
echo obtemProximo(),"\n"; // retorna 1
echo obtemProximo(),"\n"; // retorna 2
echo obtemProximo(),"\n"; // retorna 3
?>
71
Passagem de parâmetros

Existem dois tipos de passagem de
parâmetros:



por valor (by value)
por referência (by reference)
O padrão é a passagem por valor.
72
Exemplo
<?php
function incByValue($var, $valor) {
$var += $valor;
}
function incByRef(&$var, $valor) {
$var += $valor;
}
$a = 1;
echo incByValue($a,2); // retorna a=1
echo "a=$a\n";
$a = 1;
echo incByRef($a,2); // retorna a=3
echo "a=$a\n";
?>
73
Variáveis de Ambiente
<?php
phpinfo();
?>
74
Inclusão de arquivos




include
require
include_once
require_once
Obs:
 include e include_once retornam uma
advertência (warning) no caso de erro.
 require e require_once retornam um erro
fatal em caso de erro.
75
Include x Require


O comando include é reavaliado a cada
chamada
A instrução require pode incluir apenas
um arquivo (a função require não inclui
arquivos dinamicamente)
76
Exemplo
biblioteca.php
<?php
/*
* função quadrado
* retorna o quadrado de um número
*
*/
function quadrado($num)
{
return $num * $num;
}
?>
77
Exemplo
teste_include.php
<?php
// carrega o arquivo com a função necessaria
include 'biblioteca.php';
// imprime o quadrado de
echo quadrado(2);
2
?>
78
Tipo de variável

string gettype(mixed var);

Possíveis valores de retorno:






Integer
Double
String
Array
Object
Unknown type
79
Formulários HTML
<form
method="[GET|POST]"
action=""
name =""
>
...
</form>
80
Tratando informações
recebidas de Formulários
$_POST: array global que permite a
leitura de variáveis passadas através de
um formulário HTML usando método
POST
$_GET : array global que permite a leitura
de variáveis passadas na URL através
de um formulário HTML usando método
GET
81
Método GET


$_GET['nome']
$_GET['email']
82
Método POST


$_POST['nome']
$_POST['email']
83
Exemplo – Método POST
form.html
<form method="POST"
action="script.php">
Nome:
<input name="nome"
type="text">
</form>
script.php
<?php
$nome=$_POST["nome"];
Echo "<p>nome=$nome";
</php>
84
Exemplo – Método GET
form.html
<form method="GET"
action="script.php">
Nome:
<input name="nome"
type="text">
</form>
script.php
<?php
$nome=$_GET["nome"];
echo "<p>nome=$nome";
</php>
85
Algumas funções úteis




htmlspecialchars(<string>);
stripslashes(<string>);
urlencode();
urldecode();
86
Variáveis Superglobals
$GLOBALS
Contém uma referencia a todas as variáveis disponíveis no escopo global no
script. As chaves desse array são os nomes das variáveis globais.
$_SERVER
Variáveis setadas pelo servidor web ou de outra forma relacionadas
diretamente ao ambiente de execução do ambiente corrente.
$_GET
Variáveis providas pelo script via URL query string.
$_POST
Variáveis providas pelo script via HTTP POST.
$_COOKIE
Variáveis providas ao script via HTTP cookies.
87
Variáveis Superglobals (2)
$_FILES
Variáveis providads ao script através do upload de arquivos via POST
usando HTTP.
$_ENV
Variáveis de ambientes providas ao script.
$_REQUEST
Variáveis providas ao script via mecanismos de entrada como GET,
POST e COOKIE. Veja também import_request_variables().
$_SESSION
Variáveis que estão registradas a uma sessão de associada a um script.
88
Funções úteis na validação de
formulários



empty – verifica se determinada string
esta vazia (nula)
strlen – retorna o número de caracteres
de uma string
strstr – acha a primeira ocorrência de
uma string. Se não encontrar retorna
falso (FALSE)
89
Cookies e Sessions


HTTP é um protocolo "sem estado"
Cookie e Session são mecanismos que
permitem armazenar informações
enquanto o usuário navega entre
diferentes páginas.
90
Exemplos de uso de cookies e
sessões




Autenticação de usuários
Carrinho de compras
Exibição de anúncios ou imagens
Personalização de páginas
91
Uso de Cookies




É um arquivo texto armazenado no
computador do usuário para ser
posteriormente recuperado pelo servidor
Formado por um par nome/valor
Tempo de validade: tempo no qual o cookie
estará armazenado no micro do usuário
O uso de cookie poderá ser habilitado /
desabilitado pelo navegador
92
Uso de cookies

bool setcookie (string nome [, string valor [, int
validade [, string caminho [, string dominio [, int
seguro]]]]]), onde:
nome: nome do cookie
valor: é o conteúdo do cookie (se não for fornecido o cookie será
removido)
validade: tempo de validade do Cookie
caminho: caminho no servidor onde o cookie estará disponível
domínio: domínio para o qual o cookie estará disponível
Seguro: 0 ou 1 (se 1 o cookie apenas será transmitido caso segue
uma conexão segura (HTTPS))
93
Exemplo

setcookie("username","[email protected]");

setcookie ("username);
Obs: o envio de cookies deverá ser a primeira
coisa a ser feita na transmissão de uma
página (antes inclusive das tags <html> e
<body>)
94
Recuperação de Cookies
Uso do array superglobal $_COOKIE
Exemplo:
setcookie("username","[email protected]");
E em uma outra página:
$_COOKIE["username"];
95
Exemplo de uso: autenticação de
usuários
"autenticação é uma maneira que você
tem de se certificar de que somente os
usuários que possuem autorização
estão acessando uma área restrita do
seu site"
96
Passos para Autenticação
Podemos dividir a autenticação de usuários com
o uso de cookies em três passos:
1)
Criação de uma página de login
2)
Criação de uma rotina de validação para
que seja usada nas páginas que fazem uso
das áreas restritas
3)
Criação de uma página de logout para os
usuários autenticados a fim de realizar a
exclusão do cookie.
97
Exemplo de login usando
cookies





login.html
login.php
valida_cookies.inc
logout.php
pagina_inicial.php
98
Sessão (Session)
É um período de tempo durante o qual uma
pessoa navega pelas páginas de um site
Permitem o compartilhamento de informações
entre diferentes páginas
Cada sessão possui um session id (SID) que é
um identificador único
99
Propagação do SessionID
Poderá ser feito por:
 cookies
 propagação de variáveis na URL
(endereço destino)
100
Criação de Sessão no PHP

Manual



Explícita (session_start)
Implícita (ao registrar uma variável com a
função session_register)
Automática

Depende da diretiva session.auto_start
estar habilitada no arquivo php.ini
101
Exemplo de Session
<?php
session_start();
$contador=
$_SESSION['contador'];
if(!isset($_SESSION['contador
'])) {
$_SESSION['contador']=1;
}
else {
$_SESSION['contador']++;
}
echo "<p>Contador=$contador";
$sid=session_id();
echo "<p>session_id= $sid";
?>
102
Cookies x Sessões
Cookies
 Tempo de duração
Pode permanecer
armazenado por mais
tempo (mesmo após o
navegador ser
eliminado)
 Local de
armazenamento
Pequenos arquivos
armazenados na
máquina do usuário
Sessões
 Tempo de duração
Dura enquanto o usuário
permanecer dentro do
site
 Local de
armazenamento
Arquivos localizados no
servidor (um arquivo
por sessão)
103
Cookies x Sessões
Cookies
Sessões
Tempo de duração
Pode permanecer
armazenado por mais
tempo (mesmo após o
navegador ser
eliminado)
Dura enquanto o
usuário permanecer
dentro do site
Local de
armazenamento
Pequenos arquivos
armazenados na
máquina do usuário
Arquivos localizados no
servidor (um arquivo
por sessão)
104
Comandos básicos de saída




echo  é uma comando que imprime uma
ou mais variáveis no console
print  é uma função que imprime uma
string no console
var_dump  imprime o conteúdo de uma
variável
print_r  imprime o conteúdo de uma
variável, mas num formato mais legível para
o programador
105
Manipulação de Arquivos













fopen
feof
fgets
fwrite
fclose
file_put_contents
file_get_contents
file
copy
rename
unlink
file_exists
is_file
106
Manipulação de Diretórios







mkdir
getcwd
chdir
rmdir
opendir
closedir
readdir
107
Manipulação de Arquivos e
Diretórios



fopen
int fopen(string arquivo, string modo [,
int usar_path ´, resource contexto]])
onde:




arquivo:
modo:
usar_path:
contexto:
108
Manipulação de strings –
algumas funções








strtoupper
strtolower
substr
strpad
strrepeat
strlen
str_replace
str_pos
109
Classes e Objetos


Classes
Métodos
110
Classe
class Complexo {
private $real;
private $imag;
public function real() {
return $this->real;
}
public function imag() {
return $this->imag;
}
}
111
Criação de Objetos
$z = new Complexo;
$parte_real = $z->real();
$parte_imag = $z->imag();
112
Bibliografia



Dall'Oglio, P. PHP Programando com
Orientação a Objetos. Novatec. 2007.
NIEDERAUER, J. Web Interativa com
Ajax e PHP. Novatec, 2007.
Manual do PHP.
http://br.php.net/manual
113
Backup Slides
114
Links
Revista PHP Magazine
http://www.phpmagazine.org.br

115
PHP e MySQL
116
Conectando do BD MySQL
<?php
$conexao =
mysql_connect("localhost","us
uario","password";
?>
117
Exemplo de Consulta em SQL
<?php
$resultado =
mysql_query("select * from
produto");
mysql_close($conexao);
?>
118
mysql API
mysql_affected_rows – retorna o número de linhas
afetadas por uma operação
mysql_fetch_array – armazena a linha atual em um array
associativo
mysql_fetch_object – retorna uma linha como um objeto
mysql_fetch_row – armazena a linha atual em um array
mysql_result – retorna uma coluna do resultado
mysql_num_rows – retorna o numero de linhas de uma
consulta
mysql_num_fields – retorna o numero de colunas de uma
consulta
mysql_field_name – retorna o nome de uma coluna em uma
consulta
119
mysql API




int mysql_connect(str host, str
username, str password)
int mysql_select_db(str database
[, int link_identifier])
int mysql_query(str query [, int
link_identifier])
array mysql_fetch_array(int result
[, int result_type])
120
mysql API



array mysql_fetch_row(int result)
int mysql_insert_id([int
link_identifier]) --> retorna o
número de linhas após execução de
um comando select
int mysql_affected_rows([int
link_identifier]) --> retorna o nº
de linhas que foram afetados em
uma tabela por comandos update,
insert e delete
121
mysql API

mysql_error()
122
Exemplos de Funções
123
Funções date e time

string date (
string $format
[, int $timestamp ]
)
Formata a data e a hora local
 int time ( void )
Retorna o timestamp Unix atual
124
Exemplos
<?php
echo
echo
echo
echo
echo
?>
date("Y-m-d",0),"\n";
date("Y-m-d",time()),"\n";
date("d/m/Y",time()),"\n";
date("d/m/y",time()),"\n";
date("d/m/y H:i:s",time()),"\n";
1969-12-31
2008-11-27
27/11/2008
27/11/08
27/11/08 09:20:11
125
Função mktime
int mktime ([ int $hora
[, int $minuto
[, int $second
[, int $mes
[, int $dia
[, int $ano
[, int $is_dst ]]]]]]] )
 Obtém um timestamp Unix para uma data

126
Exemplo
<?php
echo date("d/m/Y H:i:s",
mktime(2, 12, 4, 10, 3, 01));
?>
127
Datas - MySQL

date_format(date, format)
Exemplo:
SELECT *, date_format(data,'%d/%m/%Y') dt
FROM
teste.gasto g
where date_format(data,'%d/%m/%Y')='26/11/2008'
128
Exemplo
Seleciona os gastos entre duas datas:
SELECT *, date_format(data,'%d/%m/%Y') dt
FROM
teste.gasto g
where date_format(data,'%Y%m%d') between
'20081124' and
'20081125'
129