O documento discute conceitos de programação orientada a objetos em PHP, como classes finais, métodos finais, encapsulamento, armazenamento de dados em classes, métodos estáticos, interfaces e o uso do PDO para acesso a bancos de dados.
Classes Finais
Classesque não podem ter herdeiros (não podem
ser superclasses);
Sintaxe - Exemplo:
3
<?php
final class ContaPoupanca extends Conta
{
// ...
Métodos Finais
Métodosque não podem ser sobrescritos;
Proíbem que subclasses usem polimorfismo!
Usamos a palavra reservada final na assinatura de
um método para impedir que seja sobrescrita;
5
Encapsulamento
Mecanismo queprovê proteção de acesso aos
atributos e métodos de um objeto;
A depender de um projeto de uma classe, certos
atributos e métodos devem ser tratados
exclusivamente:
Pela classe que os possui;
Pela superclasse e subclasses em uma hierarquia;
Por qualquer classe ou script;
8
9.
Encapsulamento
Para definira visibilidade dos membros de um
objeto, usamos as palavras reservadas public,
private ou protected na assinatura de atributos e
métodos;
public – Podem ser acessados livremente;
private – Podem ser acessados dentro da própria
classe em que foram declarados;
protected – Podem ser acessados dentro da
própria classe em que foram declarados e a partir
das classes descendentes;
9
10.
Encapsulamento
Representação UMLpara as visibilidades de
atributos e métodos em diagramas de classe:
(+) public;
(-) private;
(#) protected;
10
Armazenamento em Classes
Os seguintes membros podem ser utilizados para
armazenamento de dados em classes:
Constantes;
Atributos Estáticos;
Podem ser acessados diretamente a partir do nome
da classe, sem a necessidade de um objeto para tal;
14
15.
Armazenamento em Classes
Sintaxe – Constantes – Exemplo:
Para acessar uma constante de classe...
... a partir da própria classe: self::Nome;
... a partir de uma subclasse: parent::Nome;
... Externamente, fora da hierarquia: Biblioteca::Nome;
15
<?php
class Biblioteca
{
const Nome = “GTK ”;
}
?>
16.
Armazenamento em Classes
Sintaxe – Constantes – Exemplo:
16
<?php
class Biblioteca
{
const Nome = “GTK ”;
public function imprimeConstante() {
echo self::Nome . "<br>";
}
}
echo Biblioteca::Nome . ‘<br>’;
?>
17.
Armazenamento em Classes
Sintaxe – Atributos Estáticos – Exemplo:
Para acessar um atributo de classe estático...
... a partir da própria classe: self::$Quantidade ou
static::$Quantidade;
... a partir de uma subclasse: parent::$Quantidade;
... Externamente, fora da hierarquia:
Aplicacao::$Quantidade; 17
<?php
class Aplicacao
{
public static $Quantidade;
}
?>
18.
Armazenamento em Classes
Sintaxe – Atributos Estáticos – Exemplo:
18
<?php
class Aplicacao
{
public static $Quantidade;
function __construct()
{
static::$Quantidade++;
}
}
$app1 = new Aplicacao();
echo Aplicacao::$Quantidade . '<br>';
$app2 = new Aplicacao();
echo Aplicacao::$Quantidade . '<br>';
?>
Métodos Estáticos
Podemser invocados diretamente pelo nome da
classe, sem a necessidade de instanciar um objeto;
Também permitem que outras classes possam manipular
atributos estáticos privados de uma classe fornecedora;
Usamos a palavra reservada static na assinatura de
um método de classe;
Usamos a sintaxe NomeDaClasse::NomeDoMetodo()
para executar um método estático;
20
21.
Métodos Estáticos
21
<?php
class Aplicacao{
private static $Quantidade;
public function __construct() {
static::$Quantidade++;
}
public static function imprimeContador() {
return static::$Quantidade;
}
}
$app1 = new Aplicacao();
echo Aplicacao::imprimeContador() . '<br>';
$app2 = new Aplicacao();
echo Aplicacao::imprimeContador() . '<br>';
?>
Interfaces
“Obriga” aum determinado grupo de classes a ter
métodos em comum;
Funciona como uma espécie de contrato que, quando
assumido por uma classe, deve ser implementado;
Apenas assinaturas de métodos fazem parte do
corpo de interfaces;
As classes que seguem este “contrato” deverão
implementar o comportamento dos métodos;
Tal estrutura não possui atributos;
23
24.
Interface
Usamos apalavra reservada interface na assinatura
da classe que funcionará como uma interface;
Usamos a palavra reservada implements na
assinatura da classe que implementará uma
interface;
Uma classe pode implementar mais de uma
interface;
24
Exercício
• Etapa 3– Criação de um formulário HTML
Crie um formulário HTML que permita ao usuário
digitar o nome, marca e modelo de um veículo,
além de informar o tipo de veículo;
Método de envio: POST;
Os dados deverão ser submetidos para o script
“exibir_veiculo.php”;
Salve o documento HTML na pasta contrato com o
nome index.html;
30
31.
Exercício
• Etapa 4– Criação do script exibir_veiculo.php
na pasta contrato
O script deverá inicialmente receber os dados submetidos
pelo formulário HTML;
Em seguida, o script deverá criar um objeto da classe que
representa o veículo selecionado;
Com o objeto criado, os dados enviados a partir do
formulário deverão ser submetidos para o mesmo;
O script deverá exibir as observações do veículo;
31
PDO – PHPData Objects
Unifica o acesso às diferentes extensões de bancos
de dados presentes em PHP;
Provê uma API limpa e consistente, unificando a
maioria das características presentes nas extensões
de acesso a banco de dados
Unifica a chamada de métodos, graças à orientação
a objetos a partir do PHP 5;
33
34.
PDO – PHPData Objects
• Sequência de passos:
1. A aplicação estabelece uma conexão com o SGBD;
2. A aplicação seleciona uma base de dados a ser
utilizada durante a conexão;
3. A aplicação executa uma consulta específica
(seleção, inserção, remoção...);
4. A aplicação fecha a conexão corrente com o
SGBD;
35.
PDO – PHPData Objects
PDO – Conexão com bancos de dados:
35
Banco String de Conexão
SQLite new PDO(‘sqlite: teste.db’);
FireBird new PDO(“firebird:dbname=C:base.GDB”, “SYSDBA”, “masterkey”);
MySQL new PDO('mysql:host=localhost;dbname=base', 'login', 'senha');
Postgres new PDO('pgsql:dbname=example; user=user;
password=senha;host=localhost');
PDO – Exemplos
No phpmyadmin, configure o banco de dados da
atividade:
Database: livros
Tabela: famosos
Campos: id (int, auto increment, chave primária) e
nome (varchar[100]);
37
38.
PDO – Exemplos
Exemplo 1: Inserindo dados via PDO
38
<?php
$conn = new
PDO('mysql:host=localhost;dbname=livros', 'Root',
'Unipe');
$conn->exec("INSERT INTO famosos (nome) VALUES
('Thyago Maia')");
$conn = null;
?>
39.
PDO – Exemplos
Exemplo 2: Listagem via PDO
39
<?php
$conn = new
PDO('mysql:host=localhost;dbname=livros', 'Root',
'Unipe');
$result = $conn->query("SELECT id, nome from
famosos");
if($result)
foreach($result as $row)
echo $row['id'] . '-' .
$row['nome'] . '<br>';
$conn = null;
?>
40.
PDO – Exemplos
Exemplo 3: Excluindo dados via PDO
40
<?php
$conn = new
PDO('mysql:host=localhost;dbname=livros', 'Root',
'Unipe');
$conn->exec("DELETE FROM famosos WHERE id =
1");
$conn = null;
?>
Exercício
• Etapa 1– Preparação do Banco de Dados no
phpmyadmin
Database: sistema
Tabela: cadastro
Campos: codigo (int, auto increment, chave primária),
nome (varchar[100]), telefone (varchar[100]) e email
(varchar[100]);
42
43.
Exercício
• Etapa 2– Preparação do Domínio
Crie uma pasta em htdocs chamada sistema;
43
44.
Exercício
• Etapa 3– Criação de um formulário HTML
Crie um formulário HTML que permita ao usuário
digitar seu nome, telefone e e-mail;
Método de envio: POST;
Os dados deverão ser submetidos para o script
“cadastro.php”;
Salve o documento HTML na pasta sistema com o
nome index.html;
44
45.
Exercício
• Etapa 4– Criação do script cadastro.php na
pasta sistema
O script deverá inicialmente receber os dados
submetidos na etapa anterior;
Em seguida, via PDO, o script deverá inserir os
dados no banco de dados;
O script deverá redirecionar o usuário para o
script lista_usuarios.php;
45
46.
Exercício
• Etapa 5– Criação do script lista_usuarios.php
na pasta sistema
– O script deverá exibir todos os cadastros efetuados até o
momento, além de disponibilizar um link que permita ao
usuário efetuar um novo cadastro;
46
47.
Exercício
• Etapa 6– Testar a aplicação
Abra o navegador de sua preferência e acesse:
http://localhost/sistema ou
http://127.0.0.1/sistema
OBS.: Verifique se o servidor Apache do Xampp está ativo;
47
Exercício
• Etapa 1– Preparação do Banco de Dados no
phpmyadmin
Utilizaremos a mesma base criada no exercício anterior;
49
50.
Exercício
• Etapa 2– Preparação do Domínio
Utilizaremos a pasta sistema criada
anteriormente;
50
51.
Exercício
• Etapa 3– Criação de um formulário HTML
Utilizaremos o mesmo formulário do exercício
anterior;
51
52.
Exercício
• Etapa 4– Criação da classe Cadastro.php na
pasta sistema
52
Cadastro
-nome: string
-telefone: string
-email: string
+setNome(nome: string) : void
+setTelefone(telefone: string) : void
+setEmail(email: string) : void
+getNome() : string
+getTelefone() : string
+getEmail() : string
+inserir() : void
+exibir() :void
53.
Exercício
• Etapa 5– Atualização do script cadastro.php
da pasta sistema
O script deverá:
Receber os dados submetidos na etapa anterior;
Instanciar um objeto da classe Cadastro;
Atribuir os dados recebidos para o objeto instanciado;
Executar o método inserir a partir do objeto
instanciado;
Executar o método exibir a partir do objeto
instanciado;
Disponibilizar um link que permita ao usuário efetuar
um novo cadastro;
53
54.
Exercício
• Etapa 6– Testar a aplicação
Abra o navegador de sua preferência e acesse:
http://localhost/sistema ou
http://127.0.0.1/sistema
OBS.: Verifique se o servidor Apache do Xampp está ativo!
54