O documento fornece uma introdução ao PHP, cobrindo seus objetivos, paradigmas, características, orientação a objetos e frameworks. É destinado a iniciantes em PHP e outras linguagens, estudantes e entusiastas interessados em aprender sobre o desenvolvimento web usando PHP.
2. Agenda
Objetivo
Paradigmas
A Web
O que é PHP / PHPCLI / PHPGTK
Características / Fatos
Primeiros passos
IDE
Orientação a Objetos
Frameworks
CMS
Segurança
Conclusões
3. Objetivo
Desenvolvimento em PHP
Iniciantes em PHP
Iniciantes em outras linguagens
Alunos de cursos técnicos / graduaçao em TI
Entusiastas
Quando usálo
Quando não usálo
4. Paradigmas
ClientSide
Vantagens:
Alicerce robusto
Controle sobre os recursos
Liberdade local
Desvantagens:
Desenvolvimento ‘do zero’
Liberdade local
Bugfix
6. Paradigmas
ServerSide
Vantagens:
Interface prémodelada
Maior acessibilidade
Bugfix
Desvantagens:
Pouca (quase nenhuma) informação sobre cliente
Preocupação com tráfego
Popularização no desenvolvimento de aplicações
7. A Web
Total Sites Across All Domains August 1995 October 2006
Em novembro de 1992 – 26 servidores web fonte: netcraft
Em outubro de 2006 – 98 milhões de ‘hostnames’
“A internet náo é uma rede de computadores, mas sim de pessoas”
8. O que é PHP ?
Uma linguagem de programação open
source e de propósitosgerais
Criada por Rasmus Lerdof em 1995 (PHP/FI)
Reescrita por Andi Gtmans e Zeev Suraszi
(Zend) em 1997 – PHP3
Utilizada especialmente para
desenvolvimento web (procedural e/ou OO)
Misturada com HTML
TODO código PHP é interpretado no servidor
9. O que é PHP ?
arquivo.php (no servidor)
<html>
<p><b><? echo “Olá, Mundo!” ?></b></p>
</html>
arquivo.php (no cliente)
<html>
<p><b>Olá, Mundo!</b></p>
</html>
10. O que é PHP ?
PHPCLI
Command Line Interpreter
Uso similar a bash, perl, awk
ClientSide
Cron tasks
#!/usr/bin/php –q
<?
echo “PHP aqui também!”;
?>
11. O que é PHP ?
PHPGTK
Gimp Tool Kit
Bibliotecas escritas em C
Client/ServerSide
Crossplatform
12. Características
Independente de Plataforma
Linux, HPUX, Mac OS X, Win32 (NT/W95/W98/W2000),
BeOS, Solaris
Servidores
Apache, MSIIS / PWS, Xitami
Suporte nativo a diversos SGBDs
Adabas D, dBase, Empress, FilePro (apenas leitura),
Hyperware, IBM DB2, Informix, Ingres, Interbase,
FrontBase, mSQL, Direct MSSQL, MySQL, ODBC, Oracle
(OCI7 e OCI8), Ovrimos, PostgreSQL, SQLite, Solid,
Sybase, Velocis, Unix dbm
14. Características
Tipagem dinâmica (‘duck’ typing) e
conversão automática
If ( funcao_foo($arg_foo) ) {
... fazer algo ...
}
Funções suficientes! tipo int ou String
15. Características
Integração com outras linguagens
(Java, Perl, MS.net , etc.)
public class JavaPHP {
private String nome = null;
public void setNome(String nome) {
this.nome = nome;
}
public String getNome() {
return nome;
}
}
<?
$javaPHP = new Java('JavaPHP');
$javaPHP->setNome(quot;Java+PHPquot;);
echo quot;Método do Java = quot; . $javaPHP->getNome();
?>
ex: PHPBrasil
23. Orientação a Objetos
Inspiraçao no mundo real
Introduzida no PHP 3
Reescrita para o PHP 4, mas ainda
insuficiente
PHP5 = OO madura e similar a outras
linguagens
24. Orientação a Objetos
construtores e destrutores padrão
class BD{
var $conn;
function __construct($host, $user, $pw){
$this>conn = mysql_connect($host,$user,$pw);
}
function __destruct($host, $user, $pass){
mysql_close($this>conn) ;
}
}
25. Orientação a Objetos
modificadores de acesso
public
private
protected
class Funcionario {
public $nome;
protected $telefone;
private $salario;
}
26. Orientação a Objetos
__set(), __get(), __call()
class Pessoa {
private $dt_nascimento;
function __set($atributo, $valor){
if($atributo == quot;dt_nascimentoquot;){
$dt_nascimento = implode(quot;quot;,array_reverse(explode(quot;/quot;,$valor)));
}
}
}
$p1 = new Pessoa();
$p1>dt_nascimento = quot;03/09/1984quot;; // ... dt_nascimento = 19840903
27. Orientação a Objetos
__set(), __get(), __call()
class Conta {
private $saldo;
private $limite = 100;
function setSaldo() ...
function __get($at){
if($at == “saldo”) return $this>saldo + $this>limite;
}
}
$p1 = new Conta();
$p1>setSaldo(200);
echo $p1>saldo; // 300
28. Orientação a Objetos
__set(), __get(), __call()
class Guitarra {
private $cordas;
private $captadores;
function __call($metodo, $args){
echo quot;@#&!! $metodo não existe para a classe guitarra !quot;;
}
}
$a = new Guitarra();
$a>tocarUmPagodao();
29. Orientação a Objetos
interfaces
interface IPessoa{
function fazerObrigacoes();
function seDivertir();
}
30. Orientação a Objetos
interfaces
class Garoto implements IPessoa{
private $obrigacoes = false;
function fazerObrigacoes(){
echo “Fazer meu dever de casa”;
$this>obrigacoes = true;
}
function seDivertir(){ echo “Jogar playstation”; }
function getObrigacoes(){ return $this>obrigacoes; }
}
31. Orientação a Objetos
interfaces
class Adulto implements IPessoa{
private $obrigacoes = false;
function fazerObrigacoes(){
echo “Trabalhar para pagar o PS do meu filho”;
$this>obrigacoes = true;
}
function seDivertir(){ echo “Verei o Papão jogar!”; }
function getObrigacoes(){ return $this>obrigacoes; }
}
32. Orientação a Objetos
interfaces
class Deus{
function julgar(IPessoa $p){
if(!$p>getObrigacoes()){
echo “Faça já suas obrigações!”;
$p>fazerObrigacoes();
}
$p>setDivertir();
}
}
33. Orientação a Objetos
interfaces
$objPessoa1 = new Garoto();
Deus::julgar($objPessoa);
Fazer meu dever de casa
Jogar playstation
$objPessoa2 = new Adulto();
Deus::julgar($objPessoa2);
Trabalhar para pagar o PS do meu filho
Verei o Papão jogar
34. Orientação a Objetos
classes e métodos abstratos
propriedades estáticas
clonagem
manipulação de erros (try/catch)
35. Frameworks
Genial, ClassGenerator, MetaClass, Smarty,
PRADO, CakePHP, Symfony, etc.
“ Não reinvente a roda, mas saiba como ela
foi feita ”
37. Segurança
SQLInjection
XSS
Engenharia Social
38. SQL Injection
Manipulação dos scripts SQL
$sql= “... WHERE nome = `$_POST[`nome`]` AND senha = ‘$_POST[`senha`]`”;
Login: bla’ or 1 = 1 –
Senha: 123
$sql = “... WHERE nome = ‘bla’ or 1 =1 ` AND senha = ‘123`”;
Sempre validar entrada, SEMPRE!
39. SQL Injection
Ajudam a evitar ataques de SQLInjection:
addslashes
mysql_real_escape_string
magic_quotes
40. Cross-Site Scripting (XSS)
Informação de um contexto (nãoconfiável) é inserida
em outro contexto
Link em um email: Fotos daquela sua amiga na festa
<a href =
quot;http://xpto.com/?param=<script>...</script>”>
Fotos daquela sua amiga na festa </a>
<a href = “http://tinyurl.com/y6tz8”>
Fotos daquela sua amiga na festa </a>
41. Cross-Site Scripting (XSS)
Ajudam a evitar ataques de XSS
strip_tags
htmlentities
Sempre validar entrada e SAÍDA!
42. Engenharia Social
Independente de tecnologia
Caso Paris Hilton
Caso Harvard Business School
“ Não existe patch para falha humana...”
43. Conclusões
PHP – programação para sereshumanos e
situações humanas no planeta Terra !
“ Quando tudo que se tem é um martelo... ”