Orientação a Objetos em PHP




                 augusto@phpsp.org.br

                      @augustohp
AUGUSTO PASCUTTI


•4   anos de experiência

• ZCE

• Fundador/coordenador     PHPSP

• Habari, CakePHP
OBJETIVOS
ORIENTAR
PHP 5
USAR
ORIENTANDO-SE
PROGRAMA PROCEDURAL ?
ESQUEÇA !
PENSE DIFERENTE
PENSE OO
CLASSES
BASE DA OO
MOLDES
INSTRUÇÕES
SEM VONTADE PRÓPRIA
CLASSES
CLASSES
CLASSES
CLASSES
• Uma classe por arquivo

• Padrões de nomenclatura

   • Padrão_Zend_ou_Pear
                            CLASSES
   • PadrãoCamelCase

   • PaDrÃoMiGuXo
OBJETOS
FILHOS DAS CLASSES
INFORMAÇÕES
INDEPENDENTES
EXECUTORES
EXECUTAM
ATRIBUTOS
DECLARADOS NA CLASSE
USADOS NOS OBJETOS
PROPRIEDADES
INFORMAÇÕES
VARIÁVEIS
4
VARIÁVEIS
5
VARIÁVEIS
MÉTODOS
DECLARADOS NA CLASSE
USADOS PELOS OBJETOS
FUNÇÕES
FAZEM COISAS
DÃO E RECEBEM
4
DÃO E RECEBEM
5
DÃO E RECEBEM
AUTOLOAD
AUTOLOAD
•Executado na instanciação
•Executado somente para classes não declaradas
•Nativo do PHP
•Duas implementações
   •__autoload
   •SPL
•Sem includes/requires
•Melhora consumo de memória
AUTOLOAD
AUTOLOAD
MEMBROS DA CLASSE
CONSTANTES
CONSTANTES
ESTÁTICOS
ESTÁTICOS
ESTÁTICOS
MENSAGENS
PODER DA OO
TROCA DE INFORMAÇÕES
TROCA DE INFORMAÇÕES
HERANÇA
CLASSE PAI
CLASSE FILHA
VISIBILIDADE
PUBLIC
PROTECTED
PRIVATE
POLIMORFISMO
ERA UMA COISA
AGORA É OUTRA
SOBRECARGA
NA VERDADE: SOBRESCRITA
NA VERDADE: SOBRESCRITA
FINAL
IMPEDE O POLIMORFISMO
USADO EM CLASSES ...
E MÉTODOS
E MÉTODOS
ABSTRATO
NÃO PODE SER INSTANCIADA
USADA COMO PAI
USADA COMO PAI
USADA COMO PAI
MÁGICA
MÉTODOS MÁGICOS
EXECUTADOS PELO PHP
14 EXISTENTES NO PHP 5.3
SEMPRE COMEÇAM COM “_ _”
CONSTRUINDO
__CONSTRUCT


•Executado na instanciação do objeto
•Não pode retornar nada
•Pode sofrer sobrecarga
•Pode receber argumentos
__CONSTRUCT
DESTRUINDO
•Executado quando objeto sai da memória
 •Final do script
 •unset() do objeto
•Pode ser útil em
 •Banco de dados
 •Logs
 •etc ...


                            __DESTRUCT
__DESTRUCT
MOSTRANDO
__TOSTRING
•Chamado quando objeto é usado como String
•O método DEVE retornar uma String
•Útil para objetos que devem retornar algo visual
 •Paginador, Botão
•Até a versão 5.2 funcionava só com `print` e `echo`
•> 5.2 funciona em qualquer contexto de string
 •TypeCast
 •sprintf()
__TOSTRING
OUTROS MÉTODOS MÁGICOS

  •__call
  •__get
  •__set
  •__get
  •__isset
  •__clone
  •http://php.net/manual/en/language.oop5.magic.php
INTERFACES
“CLASSES” GENÉRICAS
DEFINEM COMPORTAMENTOS
TIPOS DE DADOS
TIPOS DE DADOS
•Mais genéricos que Classes Abstratas

•Uma classe pode implementar várias Interfaces


       TIPOS DE DADOS
EXCEPTIONS
TRABALHANDO
OBJETOS E REFERÊNCIAS
OBJETOS E REFERÊNCIAS
OBJETOS E REFERÊNCIAS
OBJETOS E REFERÊNCIAS
TYPE HINT
•Forçam um tipo a um argumento
•Só podem ser usados como tipo:
 •Array
 •Classes




             TYPE HINT
TYPE HINT
TYPE HINT
INSTANCE OF
•Checa se um objeto é uma determinada instância
•Retorna boolean
•Um objeto pode ser checado contra
  •Classe
  •Classe Abstrata
  •Interface


         INSTANCE OF
INSTANCE OF
BANCO DE DADOS
ABSTRAIA
•Melhora segurança
•Centraliza execuções
•Melhor manutenção
•Evita dor de cabeças




          ABSTRAIA
NÃO REINVENTE A RODA
USE A PDO
•O que ela é:
  •Abstração de Acesso para banco de dados
  •Nativo do PHP 5.1
  •Aprenda uma sintaxe de conexão
  •Muito/Extremamente TESTADA pra caramba
  •Mais leve do que qualquer outra


            USE A PDO
•O que ela NÃO é:
 •Não abstrai suas queries
 •Não evita instalação de drivers dos bancos
 •Não vai resolver seus problemas
   •Nem de segurança
   •Nem de performance


         USE A PDO
USANDO A PDO
USANDO A PDO
•Agilizam a execução de queries repetidas
•Implementam um pouco de segurança
•Simplificam o uso de queries repetidas
•Simplificam Fetch de resultados




   PDO STATEMENTS
PDO STATEMENTS
PARÂMETROS
RETORNO ID INSERIDO
DESIGN PATTERNS
•Solução comum para problemas comuns
•Independem de linguagem
•Vocuabulário comum
•Primeiros DP: Gang of Four




  DESIGN PATTERNS
•Singleton
•Factory
•Strategy
•Data Access Object
•Value Objects
•MVC


  DESIGN PATTERNS
FRAMEWORKS
Augusto Pascutti
                  augusto@phpsp.org.br
                          @augustohp
http://www.slideshare.net/augustopascutti

               PERGUNTAS ?

Orientação a Objetos com PHP

Notas do Editor

  • #4 - Usar PHP 5 - Colocar OO em prática
  • #5 - Usar PHP 5 - Colocar OO em prática
  • #6 - Usar PHP 5 - Colocar OO em prática
  • #7 - Usar PHP 5 - Colocar OO em prática
  • #8 - Esquecer Procedural - Como a mente funciona - Pensar OO
  • #9 - Esquecer Procedural - Como a mente funciona - Pensar OO
  • #10 - Esquecer Procedural - Como a mente funciona - Pensar OO
  • #11 - Esquecer Procedural - Como a mente funciona - Pensar OO
  • #12 - Esquecer Procedural - Como a mente funciona - Pensar OO
  • #23 - Possuem informações - Executam - Explicar resolução de escopo ‘->’
  • #49 - Explicar implementação da SPL
  • #50 - Explicar implementação da SPL
  • #56 - Atributo - Método
  • #57 - Atributo - Método
  • #58 - Atributo - Método
  • #59 - Troca de informações entre classes - Poder da OO
  • #70 - Era uma coisa e virou outra - Sobrecarga de método da classe pai - Diferente da sobrecarga em outras linguagens
  • #76 - Classe final - Método final
  • #77 - Classe final - Método final
  • #78 - Classe final - Método final
  • #79 - Classe final - Método final
  • #80 - Classe final - Método final
  • #86 - Métodos mágicos no PHP - 14 no PHP 5.3
  • #87 - Métodos mágicos no PHP - 14 no PHP 5.3
  • #88 - Métodos mágicos no PHP - 14 no PHP 5.3
  • #89 - Métodos mágicos no PHP - 14 no PHP 5.3
  • #90 - Métodos mágicos no PHP - 14 no PHP 5.3
  • #97 -> __toString() -> Depois do PHP 5.2 funciona com tudo (não só echo)
  • #100 - Métodos mágicos no PHP - 14 no PHP 5.3
  • #107 - Excessões da SPL
  • #108 - Referência a objetos - Typehint - instance of - Reflection
  • #133 - Gang of Four: 23 padrões - MVC - Value Object
  • #134 - Gang of Four: 23 padrões - MVC - Value Object
  • #135 - Gang of Four: 23 padrões - MVC - Value Object
  • #136 - Usam MVC, ORM, Active Record