PHP Avançado
Magno Leal
Ementa
•ORIENTAÇÃO OBJETO:
oIntrodução
oClasse
oObjeto
oHerança
oPolimorfismo
oAbstração
oInterfaces
oEncapsulamento
•ARQUITETURA MVC:
oModel
oView
oContoller
oPadrões de Projeto
MANIPULAÇÃO DE BANCO DE
Visão Geral sobre a API do PDO
Funções para manipulação de banco dado
Conectando no Banco de Dados
Listando Dados
Inserindo Dados
Atualizando Dados
Excluindo Dados
PHPSMARTY:
o
o
o
o
Visão geral
Como utilizar
Usando tags e funções
Criando tags personalizadas
Aula 1: Orientação Objeto
Introdução
•Programação mais próxima do MUNDO REAL;
•Visão do sistema sobre objetos reais, os quais
possuímos maior compreensão;
Classe
•Estrutura que define um tipo de dados, podendo
conter atributos (estado) e também funções métodos
(comportamento);
Classe
•Construtores: Define o comportamento inicial de um
objeto, método chamado na instanciação do objeto
(new);
•Destrutores: Método executado automaticamente
quando o objeto é desalocado da memória;
Prática 01
•Crie uma classe e defina nela atributos e métodos
coerentes.
•Crie um comportamento inicial para classe.
•Defina também um comportamento caso o objeto
dessa classe seja desalocado.
Objeto
•Objeto é uma instância de uma classe, ele existe
durante um instante de tempo – da sua criação a sua
destruição.
•Acessando atributos e métodos:
Prática 02
•Teste a classe que você criou utilizando os atributos e
métodos dela.
•Fique a vontade para fazer quaisquer testes.
Herança
•Compartilhamento de atributos e
comportamentos entre classes de
uma mesma hierarquia.
•Classes
inferiores
herdam
automaticamente
todas
as
propriedades e métodos das
classes superiores(superclasses)
Polimorfismo
•Classes derivadas de uma mesma superclasse
tenham métodos iguais, mas comportamentos
diferentes, redefinidos em cada classe filha.
Prática 03
•Crie classes para praticar o que vimos sobre herança
e polimorfismo.
•Exemplos de herança:
oPessoa: Física e Jurídica
oConta: Poupança e Corrente
oArquivo: Vídeo, Imagem e Pdf
oFuncionário: Professor e Coordenador
oVeículo: Avião, carro e bicicleta
Abstração
•Abstrair é separar, isolar, simplificar as
partes do sistema em objetos.
•Classe abstrata: classes que definem o
esqueleto de comportamento de
outras classes, não podem ser
instanciadas, ou seja, só existem
objetos das classes reais que herdam
dela. Classes filhas são responsáveis
pela
implementação
da
classe
abstrata.
Classe Abstrata
Interface
•Classe
que
contém
a
prototipação de métodos que
devem ser implementados pelas
classes
que
posteriormente
venham a implementá-la.
Interface x Classe Abstrata
•Interfaces
oUma interface não é considerada uma Classe e sim uma Entidade.
oNão possui implementação, apenas assinatura, ou seja, apenas a definição dos seus
métodos sem o corpo.
oSeus métodos são implicitamente Públicos e Abstratos.
oNão há como fazer uma instância de uma Interface e nem como criar um Construtor.
oFuncionam como um tipo de "contrato", onde são especificados os atributos,
métodos e funções que as classes que implementem essa interface são obrigadas a
implementar.
oAs Interfaces podem ser usadas para implementar herança múltipla.
•Classes Abstratas
oAs classes abstratas devem conter pelo menos um método abstrato, que não tem
corpo.
oÉ um tipo especial de classe que não há como criar instâncias dela.
oÉ usada apenas para ser herdada, funciona como uma sub-classe.
oUma grande vantagem é que força a hierarquia para todas as sub-classes.
oÉ um tipo de contrato que faz com que as sub-classes contemplem as mesmas
hierarquias e/ou padrões.
Interface x Classe Abstrata
•Interface é um set de métodos sem qualquer
implementação que deve ser herdado por outras
classes já implementadas;
•Classe Abstrata é uma classe base que pode ter um
ou mais métodos completos, mas pelo menos um ou
mais destes métodos tem que criados incompletos
(sem corpo).
•Se todos os método da Classe abstrata forem sem
corpo, ela se torna uma Interface.
•O propósito de uma Classe Abstrata é prover uma
base de definições de como um set de Classes
Derivadas irão trabalhar e então permitir os
Encapsulamento
•Proteção de acesso aos membros internos de um
objeto.
•A própria classe defini como seus métodos e
atributos devem ser acessados.
•Modificadores de Acesso:
oPrivate: permiti a visibilidade se e somente se for acessado dentro da
própria classe;
oProtected: permiti a visibilidade na própria classe e nas que herdarem ela,
ou seja, nas classes filhas;
oPublic: permite a visibilidade livremente em qualquer lugar.
Prática 04
•Crie uma classe de domínio de
uma aplicação que salva uma
agenda pessoal mas que não
serve para um só usuário, ou seja,
um site que guarda agenda de
usuários.
•A classe deve conter todos os
atributos necessários, esses devem
ser acessíveis somente pela própria
classe (encapsulamento), não
esqueça de criar ascessores paras
os atributos (getters e setters).
•Modelo de exemplo
Aula 2: Padrões de Projeto
Motivação
•Organização
•Padronização
•Fácil Manutenção
•Reutilização
•Eficiência
•Etc...
Padrão MVC
•Modelo
no
qual
possibilita
o
reaproveitamento
máximo
das
funcionalidades ou de
partes
dos
sistemas
produzidos
nas
mais
diversas plataformas e
equipamentos, desktop,
web, embarcado, etc.
MODEL (Modelo)
•Modelo da aplicação, onde são definidos
propriedades e atributos dos seus personagens.
•Camada lógica, aonde ficará toda a regra de
negócio e persistência de dados.
oNa maioria dos casos existe ainda uma camada extra de persistência dos
dados (DAO) e de regra de negócio (Service) que veremos mais a frente.
• O modelo pode ser compartilhado entre vários
objetos, visões e controladores.
VIEW(Visualização)
•Camada de visualização da sua aplicação, onde
ela apenas apresenta o que foi obtido através do
controle ao usuário.
• A visão não deve ter nenhuma lógica de código,
apenas a exibição dos dados.
•É a renderização dos dados contidos no Model afim
de que o usuário possa interagir com o sistema, ou
seja é a interface com o usuário, as telas do sistema.
Controller (Controle)
•Camada onde serão processadas todas
requisições feitas através da interface (Visão).
as
•Acessa o Modelo afim de obter determinadas
informações.
•Recomenda-se ter o mínimo de código possível para
um menor acoplação.
•É o gerenciador da sua aplicação.
Padrão DAO
•DAO: Object Access Data
•Camada extra que pode ser adicionada ao padrão
MVC, mais precisamente a camada MODEL, que
serve para isolar toda a parte de acesso aos dados
do sistema.
•Assim caso precise modificar o banco de dados ou
realizar alguma manutenção na lógica do banco de
dados, ela vai estar concentrada em uma só parte
do sistema.
Padrão Service
•Camada extra que pode ser adicionada ao
Controller para garantir menor acoplamento, como
também a Model.
•Ela fica responsável por garantir todas as regras de
negócio que possam ter no sistema.
•Validações, testes, etc.
Padrão Indicado
VIEW
CONTROLLER
SERVICE
DAO
MODEL
Prática 05
•Crie todas os models (classes de domínio) do site de
agenda de usuários.
•Comece a pensar nas regras de negócio que possa
ter no site.
Aula 3 e 4: PDO
Introdução
•PDO (PHP Data Objects) é OO;
•Tem objetivo de prover uma padronização da forma
com que PHP se comunica com um banco de dados
relacional;
•Define um conjunto de classes e a assinatura dos
métodos de comunicação com uma base de dados.
•Alguns recursos podem não ser suportados por
determinados SGBDs
Dependências
•Para podermos utilizar o PDO, deve-se habilitar no
php.ini os drivers de acesso para o banco de dados
de nossa aplicação, no linux habilitamos da seguinte
forma:
oextension=pdo.so
oextension=pdo_mysql.so (caso o bando seja mysql)
•E no windows:
oextension=php_pdo.dll
oextension=php_pdo_mysql.dll (caso o banco seja mysql)
Conectando no Banco
•Obs.: Cada banco pode ter uma string de conexão diferente
Listando Dados
Alguns Tipos de “Fetch”
•PDO::FETCH_ASSOC – Retorna um array indexado pelo nome da
coluna;
•PDO::FETCH_NUM – Retorna um array indexado pela posição
numérica da coluna;
•PDO::FETCH_BOTH – Retorna um array indexado pelo nome da
coluna e pela posição numérica da mesma;
•PDO::FETCH_OBJ – Retorna um objeto anônimo de modo que a
coluna é acessada como propriedade.
•Mais em: http://www.php.net/manual/pt_BR/pdostatement.fetch.php
•E fetchAll em: http://www.php.net/manual/pt_BR/pdostatement.fetchall.php
Inserindo Dados
Inserindo Dados
Atualizando Dados
Excluindo Dados
Prática 06
•Escolha uma das classes de domínio e crie uma
classe DAO para manipular o acesso aos dados
dessa classe.
•A classe deve conter os seguintes métodos:
oSalvar (que sirva tanto para salvar ou atualizar)
oExcluir
oListar
oBuscarPorID
•Pratique em casa e crie os DAOs das outras classes.
Aula 5: PhpSmarty
Introdução
O Smarty é um sistema de templates para PHP. Mais
especificamente, ele fornece uma maneira fácil de
controlar a separação da aplicação lógica e o
conteúdo de sua apresentação. Isto é melhor
descrito em uma situação onde o programador da
aplicação e o designer do template executam
diferentes funções, ou na maioria dos casos não são
a mesma pessoa
Mais em: http://www.smarty.net/
Configuração Básica
Exemplo de Classe:
Utilização Básica
Atribuindo Valores: assign('chave', 'valor');
Abrindo um arquivo de template: display('teste.tpl');
Retornar o Html gerado de um template: fetch('teste.tpl');
Algumas Manipulações em Templates
Incluir outro template: {include file="layout/head.tpl"}
Não interpretar trecho de código: {literal} <codigo aki> {/literal}
Condição:
{if teste}{/if} ou {if teste}{else}{/if} ou {if teste}{elseif teste}{/if};
Valor Default: {$variavel|default:'asdf'}
Select html:
{html_options name=usuarioID options=$usuarios selected=1}
Loop:
{for $i=1 to 100}{/for} ou {foreach $usuarios as $usuario}{/foreach}
Mais em: http://www.smarty.net/documentation
Dica: http://cirofeitosa.com.br/post/smarty-e-php-tudo-a-ver
Prática 07
•Criar um template smarty e todas as configurações
necessárias
•O template deve exibir a lista de tipos de contato
(<ul>)
Download

Classe abstrata