Fundamentos da Programação
PHP OO
Pós-Graduação em Desenvolvimento
Web
PHP OO – Classes Finais
Classes Finais
 Classes que não podem ter herdeiros (não podem
ser superclasses);
 Sintaxe - Exemplo:
3
<?php
final class ContaPoupanca extends Conta
{
// ...
PHP OO – Métodos Finais
Métodos Finais
 Métodos que 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
Métodos Finais
 Sintaxe - Exemplo:
6
<?php
// ...
final function transferir($conta)
{
// ...
PHP OO – Encapsulamento
Encapsulamento
 Mecanismo que provê 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
Encapsulamento
 Para definir a 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
Encapsulamento
 Representação UML para as visibilidades de
atributos e métodos em diagramas de classe:
 (+) public;
 (-) private;
 (#) protected;
10
Encapsulamento
 Exemplo:
11
Encapsulamento
 Exemplo:
12
PHP OO – Armazenamento de
Dados em Classes
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
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 ”;
}
?>
Armazenamento em Classes
 Sintaxe – Constantes – Exemplo:
16
<?php
class Biblioteca
{
const Nome = “GTK ”;
public function imprimeConstante() {
echo self::Nome . "<br>";
}
}
echo Biblioteca::Nome . ‘<br>’;
?>
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;
}
?>
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>';
?>
PHP OO – Métodos Estáticos
Métodos Estáticos
 Podem ser 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
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>';
?>
PHP OO – Interfaces
Interfaces
 “Obriga” a um 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
Interface
 Usamos a palavra 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
Interface
 Sintaxe – Exemplo:
25
<?php
interface IMensagem
{
function mensagem();
}
class Aplicacao implements IMensagem
{
function mensagem() {
echo ‘Exemplo interface’;
}
}
?>
<< interface >>
IMensagem
+ mensagem()
Interfaces
 Ex:
26
Figura
# x: double
# y: double
Triangulo
<< interface >>
ICalculos
+ calculaArea(): double
+ calculaArea(): double
Quadrado
+ calculaArea(): double
Exercício
Exercício
• Etapa 1 – Preparação do Domínio
 Crie uma pasta em htdocs chamada contrato;
 Na pasta contrato, crie uma pasta chamada
classes;
28
Exercício
 Etapa 2 - Implemente as classes abaixo na
pasta dedicada para tal:
29
Veiculo
# nome: String
# marca: String
# modelo: String
getters e setters
Carro
<< interface >>
ICaracteristicas
+ exibeNome()
+ exibeMarca()
+ exibeModelo()
Moto
+ exibeNome()
+ exibeMarca()
+ exibeModelo()
+ exibeNome()
+ exibeMarca()
+ exibeModelo()
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
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 – PHP Data Objects
PDO – PHP Data 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
PDO – PHP Data 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;
PDO – PHP Data 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
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
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;
?>
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;
?>
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
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
Exercício
• Etapa 2 – Preparação do Domínio
 Crie uma pasta em htdocs chamada sistema;
43
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
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
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
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
Exercício
• Etapa 1 – Preparação do Banco de Dados no
phpmyadmin
 Utilizaremos a mesma base criada no exercício anterior;
49
Exercício
• Etapa 2 – Preparação do Domínio
 Utilizaremos a pasta sistema criada
anteriormente;
50
Exercício
• Etapa 3 – Criação de um formulário HTML
 Utilizaremos o mesmo formulário do exercício
anterior;
51
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
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
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

Fundamentos da Programação PHP OO - Aula 3

  • 1.
    Fundamentos da Programação PHPOO Pós-Graduação em Desenvolvimento Web
  • 2.
    PHP OO –Classes Finais
  • 3.
    Classes Finais  Classesque não podem ter herdeiros (não podem ser superclasses);  Sintaxe - Exemplo: 3 <?php final class ContaPoupanca extends Conta { // ...
  • 4.
    PHP OO –Métodos Finais
  • 5.
    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
  • 6.
    Métodos Finais  Sintaxe- Exemplo: 6 <?php // ... final function transferir($conta) { // ...
  • 7.
    PHP OO –Encapsulamento
  • 8.
    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
  • 11.
  • 12.
  • 13.
    PHP OO –Armazenamento de Dados em Classes
  • 14.
    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>'; ?>
  • 19.
    PHP OO –Métodos Estáticos
  • 20.
    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>'; ?>
  • 22.
    PHP OO –Interfaces
  • 23.
    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
  • 25.
    Interface  Sintaxe –Exemplo: 25 <?php interface IMensagem { function mensagem(); } class Aplicacao implements IMensagem { function mensagem() { echo ‘Exemplo interface’; } } ?> << interface >> IMensagem + mensagem()
  • 26.
    Interfaces  Ex: 26 Figura # x:double # y: double Triangulo << interface >> ICalculos + calculaArea(): double + calculaArea(): double Quadrado + calculaArea(): double
  • 27.
  • 28.
    Exercício • Etapa 1– Preparação do Domínio  Crie uma pasta em htdocs chamada contrato;  Na pasta contrato, crie uma pasta chamada classes; 28
  • 29.
    Exercício  Etapa 2- Implemente as classes abaixo na pasta dedicada para tal: 29 Veiculo # nome: String # marca: String # modelo: String getters e setters Carro << interface >> ICaracteristicas + exibeNome() + exibeMarca() + exibeModelo() Moto + exibeNome() + exibeMarca() + exibeModelo() + exibeNome() + exibeMarca() + exibeModelo()
  • 30.
    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
  • 32.
    PDO – PHPData Objects
  • 33.
    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');
  • 36.
  • 37.
    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; ?>
  • 41.
  • 42.
    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
  • 48.
  • 49.
    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