PHP e
Sistemas de
Informação
João Paulo
Ribeiro
jpribeiro.com
Hello
world!
João Paulo
Ribeiro
• Graduando (Concluinte) de
Ciência da Computação – UFCG
• Pesquisador no Laboratório de
Sistemas de Informação
• 10 anos de experiência em
desenvolvimento para Web
• Jpribeiro.com /
[email protected]
CERC (2002)
1º site de escola da cidade a disponibilizar o
boletim online
Cesrei (2006)
Sistema de controle acadêmico
O Que é
?
• Linguagem de programação (sério?)
• Focada na web
• Inicialmente, PHP = Personal Home
Page (Péssimo)
• Depois, PHP:
PHP
Hypertext
Processor
(Recursivo, e bem
melhor)
Histórico
• 1994: Páginas HTML
estáticas
Histórico
• Rasmus Lerdorf criou o
core de PHP (em C) com
uma série de utilitários
para dinamizar/monitorar
o conteúdo de seu próprio
• Comunidade do software livre
site
interessou-se e contribuiu para
a criação do PHP/FI (Personal
Home Page / Forms Interpreter)
Histórico
• Em 1998, foi lançado o PHP 3, primeiro
que se assemelha com o atual (PHP/FI,
em sua versão 2, foi descontinuado)
• Infraestrutura sólida para diferentes bancos de
dados, protocolos e APIs
• PHP 4 lançado em 2000, com nova Zend
Engine
• Zend = Zeev Suraski + Andi Gutmans
• Melhoria de performance nos servidores
• PHP 5 (versão atual) lançado em 2004
• Orientação a objetos
Por que
aprender
• PHP é uma das linguagens mais
utilizadas do mundo
• Figura no top 10 do TIOBE index
(www.tiobe.com) há 10 anos
• Atualmente (Abril 2012), está na 6ª
posição, atrás dos “Cs” (C, C++,
Objective-C e C#) e Java
Por que
aprender
• PHP é uma das linguagens mais
utilizadas do mundo
• PHP é usado em 77,6% dos sites na
internet, de acordo com os dados da
W3Techs (http://w3techs.com) – sendo a
linguagem server-side mais utilizada
Por que
aprender
• Tem muita vaga de trabalho
• Dados do site Indeed.com, linguagens
server-side (EUA)
Por que
aprender
• Tem muita vaga de trabalho
• Dados do site JobsTractor
(jobstractor.com), com as vagas
anunciadas via Twitter (16.855 vagas
anunciadas em março de 2012)
Quem usa PHP?
Quem usa
Quem usa
Quem usa
Quem usa
Terceiro maior motor de busca do mundo, principal da China (ultra
Quem usa
Quem usa
Quem usa
Apresentação durante a Semana Acadêmica de Comp
Característi
cas
• Linguagem de scripts
•
Código pode ser mesclado em meio a HTML
Característi
cas
Página HTML resultante
Código-fonte do HTML resu
Característi
cas
• Linguagem interpretada
•
Código não é compilado - interpretado a ca
• Roda em servidor
•
Servidor executa o interpretador PHP
Apache HTTP Server:
•
•
Servidor web mais popular
do mundo (mais de 100
milhões de sites – WOW)
Versões para muitos
diferentes SO
Característi
cas
• Processador de hipertexto serverside
Característi
cas
• Multiplataforma
•
•
•
Interpretadores para as mais diferentes
plataformas
• Unix, Linux, Windows, OS X, Risc,
Netware, Solaris........
Disponibilizado o código-fonte no site
oficial (php.net)
Write once, run everywhere
• Open-source!
• Programação procedural, orientada a
Característi
cas
• PHP também pode ser utilizado em
outras formas:
• CLI: Command Line Interface
• PHP-GTK: Extensão para escrever
aplicações desktop com interface
gráfica
Segundo a documentação oficial: “PHP is
probably not the very best language to
create a desktop application with a
graphical user interface”
Característi
cas
• Output
•
•
•
•
•
•
HTML
Imagens (Extensão GD): GIF, PNG, JPEG,
WBMP, XPM
PDF (Extensão PDFlib)
Flash (Extensão libswf)
XML, XHTML (Extensão libxml)
...
• Existem muitas (muitas) extensões
na internet:
•
PECL (PHP Extension Community Library):
280 pacotes
Característi
cas
• Um dos pontos mais fortes de PHP é
sua integração incrivelmente simples
com bancos de dados
• Camadas de abstração:
• DBA: Database Abstraction Layer
• dbX: Abstração de algum BD
específico (X)
• ODBC: Open Data Base Connectivity
•
Adabas D, IBM DB2, iODBC, Solid,
Sybase SQL Anywhere
Característi
cas
• Extensões de SGBDs específicos:
MySQL
PostgreSQL
Oracle
SQL Server
SQLite
Mongo
IBM DB2
Firebird/Int
erbase
CUBRID
DB+++
dBase
filePro
Frontba
se
Sybase
Ingres
MaxDB
(Entre outros)
Característi
cas
• PHP dá suporte a diversos protocolos
de comunicação
• LDAP: Lightweight Directory Access
Protocol
• IMAP: Internet Message Access
Protocol
• POP3: Post Office Protocol
• SMTP: Simple Mail Transfer
Protocol
• SOAP: Simple Object Access
Protocol
Característi
cas
• Ou seja, você escolhe:
•
•
•
•
•
•
Servidor web: Apache, IIS, LiteSpeed,
TUX, thttpd, ...
Sistema operacional: Unix, Linux,
Windows, OS X, Risc, ...
Programação procedural, orientada a
objetos, ou híbrida
Extensões
SGBD
Protocolos de comunicação
= Flexibilidade
A linguagem em si
Delimitando o
código
PHP
• Maneira normal
e bonita, para todas
as ocasiões
• Outras maneiras, para os
diferentões
•
Para código embutido em HTML
•
Short tags (depende de configuração)
Tipos
• Primitivos
•
Integer
•
•
Float (32 bits)
Double (64 bits)
•
Boolean
•
String (não há limite máximo)
Tipos
• Arrays
•
Na verdade, são mapas (arrays
associativos)
Array associativo
“João”
“Paulo”
42
TRUE
Índices
Valores
Qualquer tipo
Integer ou string
Tipos
• Arrays
•
Criação do array
Conteúdo das variáveis com o comando
var_dump($variave
var_dump($outro_array)
var_dump($um_array)
Tipos
• Arrays
•
Acesso ao array
$um_array
$outro_array
Acesso aos arrays
Tipos
• Arrays
•
Inserir no array
Array original
Array após a inserção acima
Tipos
• Arrays
•
Inserir no array
Array original
Array após inserções acima
Tipos
• Arrays
•
Deletar do array (usar função
unset($variavel))
Array original
Array após a remoção acima
Índice 2 foi
removido, e o
array não foi
reindexado
(índices
mantidos)
Tipos
• Arrays
•
Passar a variável do array como
argumento para a função unset($variavel)
vai resultar na remoção completa do
array
Ao tentar acessar a variável $outro_array,
Tipos
Obs: Strings podem ser tratadas como arrays
de caracteres
Tipos
• Tipos especiais
•
Resource: Variável especial, que
armazena referência para recursos
externos (handlers de arquivos,
conexões de banco de dados, canvas de
imagens)
•
NULL: Indica quando uma variável não
possui nenhum valor . A variável tem
valor NULL se:
• Foi definida com a constante NULL;
• Ainda não recebeu nenhum valor;
• Foi apagada através de unset()
Sistema de
Tipos
• PHP é dinamicamente tipada
•
Variáveis, parâmetros e expressões não
têm tipo fixo associado. Apenas valores
têm tipo, e as variáveis podem assumir
valores de diferentes tipos durante a
execução do programa.
•
Ou seja, em PHP não há declaração de
Sistema de
Tipos
• PHP é fracamente tipada
•
A conversão de um valor de um tipo para
outro é feita implicitamente (coerção)
Coerção de
String para
Integer
•
O programador deve ter cuidado com essa
feature da linguagem, especialmente
estes dois seguintes casos “estranhos”:
Sistema de
Tipos
1. Conversão de strings para números
•
Se a string está sendo avaliada em um
contexto numérico, o valor resultante é
numérico, determinado por essas regras:
• Se a string não contém os caracteres
“.”, “e” e “E”, e seu valor numérico
está nos limites de Integer, é
tratada como número inteiro
• Caso contrário, é tratada como float
• O valor numérico é dado pela porção
inicial da string. Se essa porção
não for um número válido, o valor é
0
Sistema de
Tipos
1. Conversão de strings para números
Sistema de
Tipos
2. Conversão em Boolean
•
Se for usado em operador, função ou
estrutura de controle que requer
argumento Boolean, qualquer valor é
convertido
em Boolean
Valor automaticamente
Boolean
Valor
Boolean
NULL
False
“”
False
Array
()
False
“0”
False
“1”
True
Objec
t
True
“-1”
True
0
False
“João”
True
0.000
1
True
“False”
True
Resourc
e
True
Sistema de
Tipos
• Checagem de tipos
•
•
Por ser dinamicamente tipada, não há
checagem de tipos em PHP
Há funções para a observação do tipo da
variável, para uma checagem de tipos
• is_scalar()
manual, caso seja necessário:
•
•
•
•
•
•
•
•
is_array()
is_bool()
is_double()
is_float()
is_int()
is_null()
is_numeric()
is_object()
•
•
•
•
is_string()
gettype()
get_resource_type()
get_class()
Sistema de
Tipos
• PHP 5 introduziu o conceito de Type
Hinting
• Com Type Hinting, é possível forçar
que os parâmetros de funções sejam
de uma classe específica de Object,
Interface ou Array (esse, apenas
desde PHP 5.1)
Variáveis
• Representadas por um $ seguido de
letras, números e símbolos
(iniciando com letra)
• Atribuição por referência
•
Nova variável é um “apelido” para a
referenciada
Variáveis
• $this é um nome reservado
• Variáveis predefinidas: Acessíveis
em qualquer escopo de qualquer
• $_COOKIE
programa
•
•
•
•
•
•
•
$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_REQUEST
$_SESSION
•
•
•
•
•
$php_errormsg
$HTTP_RAW_POST_DATA
$http_response_header
$argc
$argv
Constantes
• Definição através da função
define()
• __LINE__
• __CLASS__
• Também
existem diversas
constantes
• __FILE__
• PHP_VERSION
pré-definidas
•
•
__DIR__
__FUNCTION__
•
•
PHP_INT_MAX
Várias outras
Funções
• Definição
• Chamada
Funções
• Argumentos opcionais
Funções
• Qualquer código PHP válido pode ser
colocado no corpo de definição de
função incluindo definição de
outras funções e classes
• Como PHP é estupidamente GELADA
dinâmica, a função só é definida no
momento em que o fluxo passar por
sua definição. Por isso deve-se ter
cuidado para não fazer invocação a
uma função indefinida
Funções
Fluxo não
passa por
esse ponto,
portanto
essa função
não é
definida
Funções
• A passagem de parâmetro é feita,
por default:
•
•
Por cópia/valor, quando o parâmetro não
for um Object
Por referência, caso o parâmetro for um
Object
Type
hinting!
Funções
• Porém, também pode-se usar o
operador & para fazer a passagem
por referência, quando necessário
Funções
• Sobrecarga
•
PHP não dá suporte a nenhum tipo de
sobrecarga de funções – dando erro
fatal ao se tentar (nem tente)
Operadores
• Aritméticos
• Bit a bit
Exemplo Nome
Exemplo
Nome
-$a
Negação
$a & $b
AND
$a + $b
Adição
$a | $b
OR
$a - $b
Subtração
$a ^ $b
XOR
$a * $b
Multiplic
ação
~$a
NOT
$a / $b
Divisão
$a % $b
Módulo
$a >> $b Deslocamento à direita
•
$a << $b Deslocamento à esquerda
Obs: O operador Divisão resulta em
inteiro caso seja divisão exata entre
inteiros, ponto flutante caso contrário
Operadores
• Comparação
Exemplo
Nome
$a == $b
Igual
$a === $b Idêntico
$a != $b
Diferente
$a <> $b
Diferente
$a !== $b Não
idêntico
$a < $b
Menor que
$a > $b
$a <= $b
$a >= $b
Maior que
Menor ou
igual
Maior ou
Levam em
conta o
tipo
Operadores
• Comparação
Observar coerções
discutidas
anteriormente!
Operadores
• Lógicos
Exemplo
Nome
$a && $b
AND
$a || $b
OR
$a xor $b XOR
!$a
NOT
Observar coerções
para Boolean
Operadores
• Concatenação: . (ponto)
• Atribuição (além do =)
Exemplo
Significado
$a += $b
$a = $a + $b
$a -= $b
$a = $a - $b
$a *= $b
$a = $a * $b
$a /= $b
$a = $a / $b
$a %= $b
$a = $a % $b
$a .= $b
$a = $a . $b
Exemplo Nome
$a++
PósIncremento
++$a
PréIncremento
$a--
PósDecremento
--$a
Pré-
Operadores
• É possível fazer atribuição de mais
de uma variável ao mesmo tempo, com
a função list()
list($var1, $var2, ...) = $array
Índice 0
Índice 1
Obs.: Só funciona em arrays com índices
numéricos
Operadores
• Operador ternário
condicao ? expressao1 : expressao2
• É avaliado em expressao1 caso condicao
seja um valor verdadeiro, e expressao2
caso contrário
Estruturas de
Controle
• Comandos condicionais
• If/elseif/else
if (exp) {
...
}
elseif (exp) {
...
}
else {
...
}
Estruturas de
Controle
• Comandos condicionais
• Switch
switch (exp) {
case valor1:
...
break;
case valor2:
...
break;
...
default:
...
break;
}
Estruturas de
Controle
• Comandos iterativos
• While
while (exp) {
...
}
O programador deve ter cuidado para que
exp em algum momento deixe de ser
verdadeira, para evitar loop infinito:
Estruturas de
Controle
• Comandos iterativos
• Do-while
do {
...
} while (exp);
• For
for (exp1; exp2; exp3) {...}
Estruturas de
Controle
• Comandos iterativos
• Foreach: Iterar sobre arrays
foreach (array as $valor) {...}
foreach (array as $indice => $valor) {...}
Estruturas de
Controle
• Sequenciadores de escape
• Continue
Pula o restante da
iteração corrente,
em um loop
• Break
Interrompe a
iteração corrente
e sai do loop
Classes e
Objetos
• PHP 5 tem um modelo de objetos
completo
•
•
•
•
•
•
•
Visibilidade
Herança
Polimorfismo
Interfaces
Final, static e abstract
Sobrescrita
...
Classes e
Objetos
• Basicão
Pode usar o
alias
__construct
Classes e
Objetos
• Basicão
Precisava
ser da
classe
DateTime
Classes e
Objetos
• Métodos e atributos estáticos
•
Acesso
Classes e
Objetos
• Herança
Classes e
Objetos
• Classes e métodos abstratos
Classes e
Objetos
• Interfaces
•
Uma interface também pode herdar
(extends) de uma ou mais interfaces
Classes e
Objetos
• Sobrescrita
•
Uma classe pode sobrescrever métodos de
sua classe mãe
Classes e
Objetos
• Final
•
•
Classes
poderão
Métodos
poderão
declaradas com final não
ser extendidas
declaradas com final não
ser sobrescritos
Framewor
ks
Framewor
ks
• Esses frameworks destinam-se ao
Rapid Application Development
(RAD), aplicando o modelo MVC
(Model-View-Controller)
Framewor
ks
• Também incluem diversos recursos
embutidos, como:
•
•
•
•
•
•
APIs, como Google, Facebook, Twitter,
etc...
Web services, tanto para publicar quanto
consumir
Serviços de autenticação
AJAX, jQuery, Scriptaculous
Segurança
...
Framewor
ks
• Cada framework tem seus próprios
recursos. Então como escolher?
•
Tudo depende de suas necessidades (óóóó)
• Qual o principal foco de sua aplicação
• Qual será o seu ambiente de hospedagem
• Quais os pontos fortes/fracos do
desenvolvedor?
•
Quem poderá me ajudar?
• PHP Frameworks (phpframeworks.com) é
um site que dá as características e
classifica os frameworks mais
conhecidos
Dúvidas?
Acabou!
•
•
•
•
•
•
Referênc
ias
Documentação oficial de PHP:
http://www.php.net/docs.php, acessado em 29/04/2012
PHP Profissional – Alexandre Melo/Maurício
Nascimento, Editora Novatec
Apresentação “Cross Platform PHP”, de Elizabeth
Smith, disponível em http://emsmith.net/resources,
acessado em 29/04/2012
Apresentação “PHP para Aplicações Web de Grande
Porte”, de Felipe Ribeiro, disponível em
http://www.slideshare.net/felipernb, acessado em
29/04/2012
TIOBE Index, disponível em
http://www.tiobe.com/index.php/content/
paperinfo/tpci/index.html, acessado em 29/04/2012
Usage Statistics and Market Share of Server-side
Programming Languages for Websites, April 2012,
disponível em http://w3techs.com/technologies/
Download

a != $b