php avançado
DESCRIPTION
PHP Avançado. Magno Leal. Ementa. MANIPULAÇÃO DE BANCO DE DADOS COM PDO: Visão Geral sobre a API do PDO Funções para manipulação de banco dados no php Conectando no Banco de Dados Listando Dados Inserindo Dados Atualizando Dados Excluindo Dados PHPSMARTY: oVisão geral oComo utilizar - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/1.jpg)
PHP AvançadoMagno Leal
![Page 2: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/2.jpg)
Ementa•ORIENTAÇÃO OBJETO:o Introduçãoo Classeo Objetoo Herançao Polimorfismoo Abstraçãoo Interfaceso Encapsulamento
•ARQUITETURA MVC:o Modelo Viewo Contollero Padrões de Projeto
MANIPULAÇÃO DE BANCO DE DADOS COM PDO:Visão Geral sobre a API do PDOFunções para manipulação de banco dados no phpConectando no Banco de DadosListando DadosInserindo DadosAtualizando DadosExcluindo Dados
PHPSMARTY:o Visão geralo Como utilizaro Usando tags e funçõeso Criando tags personalizadas
![Page 3: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/3.jpg)
Aula 1: Orientação Objeto
![Page 4: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/4.jpg)
Introdução•Programação mais próxima do MUNDO REAL;•Visão do sistema sobre objetos reais, os quais possuímos maior compreensão;
![Page 5: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/5.jpg)
Classe•Estrutura que define um tipo de dados, podendo conter atributos (estado) e também funções métodos (comportamento);
![Page 6: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/6.jpg)
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;
![Page 7: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/7.jpg)
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.
![Page 8: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/8.jpg)
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:
![Page 9: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/9.jpg)
Prática 02•Teste a classe que você criou utilizando os atributos e métodos dela.•Fique a vontade para fazer quaisquer testes.
![Page 10: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/10.jpg)
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)
![Page 11: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/11.jpg)
Polimorfismo•Classes derivadas de uma mesma superclasse tenham métodos iguais, mas comportamentos diferentes, redefinidos em cada classe filha.
![Page 12: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/12.jpg)
Prática 03•Crie classes para praticar o que vimos sobre herança e polimorfismo.
•Exemplos de herança:o Pessoa: Física e Jurídicao Conta: Poupança e Correnteo Arquivo: Vídeo, Imagem e Pdfo Funcionário: Professor e Coordenadoro Veículo: Avião, carro e bicicleta
![Page 13: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/13.jpg)
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.
![Page 14: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/14.jpg)
Classe Abstrata
![Page 15: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/15.jpg)
Interface•Classe que contém a prototipação de métodos que devem ser implementados pelas classes que posteriormente venham a implementá-la.
![Page 16: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/16.jpg)
Interface x Classe Abstrata•Interfaces
o Uma interface não é considerada uma Classe e sim uma Entidade.o Não possui implementação, apenas assinatura, ou seja, apenas a definição dos seus
métodos sem o corpo.o Seus métodos são implicitamente Públicos e Abstratos.o Não há como fazer uma instância de uma Interface e nem como criar um
Construtor.o Funcionam 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.
o As Interfaces podem ser usadas para implementar herança múltipla.
•Classes Abstrataso As 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.o Uma 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.
![Page 17: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/17.jpg)
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 programadores de preencher as implementações nas Classes derivadas.
•Para mais detalhes, visite o link:o http://www.devmedia.com.br/articles/viewcomp.asp?comp=13337
![Page 18: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/18.jpg)
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:o Private: permiti a visibilidade se e somente se for acessado dentro da
própria classe;o Protected: permiti a visibilidade na própria classe e nas que herdarem
ela, ou seja, nas classes filhas;o Public: permite a visibilidade livremente em qualquer lugar.
![Page 19: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/19.jpg)
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
![Page 20: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/20.jpg)
Aula 2: Padrões de Projeto
![Page 21: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/21.jpg)
Motivação•Organização•Padronização•Fácil Manutenção•Reutilização•Eficiência•Etc...
![Page 22: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/22.jpg)
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.
![Page 23: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/23.jpg)
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. o Na 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.
![Page 24: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/24.jpg)
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.
![Page 25: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/25.jpg)
Controller (Controle)•Camada onde serão processadas todas as requisições feitas através da interface (Visão).
•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.
![Page 26: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/26.jpg)
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.
![Page 27: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/27.jpg)
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.
![Page 28: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/28.jpg)
Padrão IndicadoVIEW
CONTROLLER
SERVICE
DAO
MODEL
![Page 29: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/29.jpg)
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.
![Page 30: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/30.jpg)
Aula 3 e 4: PDO
![Page 31: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/31.jpg)
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
![Page 32: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/32.jpg)
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:o extension=pdo.soo extension=pdo_mysql.so (caso o bando seja mysql)
•E no windows:o extension=php_pdo.dllo extension=php_pdo_mysql.dll (caso o banco seja mysql)
![Page 33: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/33.jpg)
Conectando no Banco
•Obs.: Cada banco pode ter uma string de conexão diferente
![Page 34: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/34.jpg)
Listando Dados
![Page 35: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/35.jpg)
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
![Page 36: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/36.jpg)
Inserindo Dados
![Page 37: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/37.jpg)
Inserindo Dados
![Page 38: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/38.jpg)
Atualizando Dados
![Page 39: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/39.jpg)
Excluindo Dados
![Page 40: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/40.jpg)
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:o Salvar (que sirva tanto para salvar ou atualizar)o Excluiro Listaro BuscarPorID
•Pratique em casa e crie os DAOs das outras classes.
![Page 41: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/41.jpg)
Aula 5: PhpSmarty
![Page 42: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/42.jpg)
IntroduçãoO 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 pessoaMais em: http://www.smarty.net/
![Page 43: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/43.jpg)
Configuração BásicaExemplo de Classe:
![Page 44: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/44.jpg)
Utilização BásicaAtribuindo Valores: assign('chave', 'valor');
Abrindo um arquivo de template: display('teste.tpl');
Retornar o Html gerado de um template: fetch('teste.tpl');
![Page 45: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/45.jpg)
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/documentationDica: http://cirofeitosa.com.br/post/smarty-e-php-tudo-a-ver
![Page 46: PHP Avançado](https://reader036.vdocuments.site/reader036/viewer/2022081506/5681531b550346895dc13f9d/html5/thumbnails/46.jpg)
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>)