Você está na página 1de 54

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:

<?php

final class ContaPoupanca extends Conta


{
// ...

3
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:

<?php

// ...

final function transferir($conta)


{

// ...

6
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:
<?php
class Biblioteca
{
const Nome = “GTK ”;
}
?>

 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
Armazenamento em Classes
 Sintaxe – Constantes – Exemplo:
<?php
class Biblioteca
{
const Nome = “GTK ”;

public function imprimeConstante() {


echo self::Nome . "<br>";
}
}

echo Biblioteca::Nome . ‘<br>’;


?>

16
Armazenamento em Classes
 Sintaxe – Atributos Estáticos – Exemplo:
<?php
class Aplicacao
{
public static $Quantidade;
}
?>

 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
Armazenamento em Classes
 Sintaxe – Atributos Estáticos – Exemplo:
<?php
class Aplicacao
{
public static $Quantidade;

function __construct()
{
static::$Quantidade++;
}
}

$app1 = new Aplicacao();


echo Aplicacao::$Quantidade . '<br>';

$app2 = new Aplicacao();


echo Aplicacao::$Quantidade . '<br>';
?> 18
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
<?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>';
?>
21
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: << interface >>
IMensagem
<?php
+ mensagem()
interface IMensagem
{
function mensagem();
}

class Aplicacao implements IMensagem


{
function mensagem() {
echo ‘Exemplo interface’;
}
}
?>
25
Interfaces

 Ex:
Figura << interface >>
ICalculos
# x: double
# y: double
+ calculaArea(): double

Triangulo Quadrado

+ calculaArea(): double + calculaArea(): double

26
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:
<< interface >>
Veiculo ICaracteristicas
# nome: String
# marca: String
+ exibeNome()
# modelo: String
+ exibeMarca()
getters e setters + exibeModelo()

Carro Moto

+ exibeNome() + exibeNome()
+ exibeMarca() + exibeMarca()
+ exibeModelo() + exibeModelo() 29
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:

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');

35
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

<?php

$conn = new
PDO('mysql:host=localhost;dbname=livros', 'Root',
'Unipe');

$conn->exec("INSERT INTO famosos (nome) VALUES


('Thyago Maia')");

$conn = null;

?>

38
PDO – Exemplos
 Exemplo 2: Listagem via PDO
<?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;
?>
39
PDO – Exemplos

 Exemplo 3: Excluindo dados via PDO

<?php

$conn = new
PDO('mysql:host=localhost;dbname=livros', 'Root',
'Unipe');

$conn->exec("DELETE FROM famosos WHERE id =


1");

$conn = null;

?>

40
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
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
52
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

Você também pode gostar