SlideShare uma empresa Scribd logo
1 de 89
Baixar para ler offline
Bacharel em Ciência da Computação (UFG)
Especializando em Engenharia de Software
Analista de Sistemas – SIGMA / MDIC
Professor Formador EAD – NEAD/ETEB
george@georgemendonca.com.br
http://www.georgemendonca.com.br
Orientação
a Objetos
• Introdução
– No PHP 5 foi desenvolvido um novo Modelo de Objetos.
– O tratamento de objetos foi completamente reescrito,
permitindo uma performance melhor e mais vantagens.
– Versão atual: PHP 5.3.
Orientação a Objetos
13/02/2011 2
• Introdução
– Diferenças entre o PHP 4 e o PHP 5
• PHP 4 - Classes simples:
– Uma tentativa a orientação à objetos
– Porém sem muitos conceitos considerados importantes para uma
linguagem orientada a objetos
Orientação a Objetos
13/02/2011 3
• Introdução
– Diferenças entre o PHP 4 e o PHP 5
Orientação a Objetos
13/02/2011 4
Class Php4
{
/**
* Atributos simples
*/
var $a;
var $b;
var $c;
/**
* Método construtor da classe PHP 4
* Métodos simples
*/
function Php4()
{
}
}
Diagrama de Classe
• Introdução
– Diferenças entre o PHP 4 e o PHP 5
• PHP 5 - Classes mais completas e uso de padrões:
– Com implementação de recursos semelhantes às linguagens de
programação como C++ e Java.
Orientação a Objetos
13/02/2011 5
• Introdução
– Diferenças entre o PHP 4 e o PHP 5
Orientação a Objetos
13/02/2011 6
Class Php5
{
/**
* Visibilidade de atributos
*/
private $a;
private $b;
private $c;
/**
* Método construtor da classe PHP 5
* Visibilidade de métodos
*/
public function __construct()
{
}
}
Diagrama de Classe
• Escrevendo uma classe
– Toda definição de classe começa com a palavra-chave class,
seguido do nome_da_classe, que pode ser qualquer nome
que não seja uma palavra reservada no PHP.
– Seguido por um par de chaves “ { } “, que contém a definição
dos atributos (ou propriedades) e métodos da classe.
Orientação a Objetos
13/02/2011 7
• Escrevendo uma classe
Orientação a Objetos
13/02/2011 8
Class Nome_da_Classe
{
encapsulamento $atributos;
...
encapsulamento function nome_metodo( [argumento1, ...] )
{
/**
* Implementação do comportamento do método.
* Como uma função, um método pode retornar
* um valor se necessário.
*/
[return]
}
...
}
• A variável $this
– Uma pseudo variável $this está disponível quando um
método da classe é chamado dentro de um contexto de
objeto.
– Sua implementação normalmente se encontra dentro do
escopo de um método.
– $this é uma referência para o objeto que chama o método ou
o atributo.
Orientação a Objetos
13/02/2011 9
• A variável $this
Orientação a Objetos
13/02/2011 10
Class Classe
{
encapsulamento $atributo;
...
encapsulamento function nome_metodo()
{
// A variável $this referencia o objeto
return $this->atributo;
}
...
}
• Construtores e Destrutores
– PHP 5 permite que os desenvolvedores declarem métodos
construtores para as classes. Isto é feito através do método mágico
__construct().
– Classes que tem um método construtor chamam esse método cada
vez que um objeto novo é criado, sendo apropriado para qualquer
inicialização que o objeto possa vir a precisar no momento em que
é instanciado.
Orientação a Objetos
13/02/2011 11
Nota: Construtores pais não são chamados implicitamente se a classe filha define
um construtor. Para executar o construtor da classe pai, uma chamada a
parent::__construct() dentro do construtor da classe filha é necessária.
• Construtores e Destrutores
Orientação a Objetos
13/02/2011 12
Class ConstrutorDestrutor
{
private $a;
private $b;
public function __construct($a, $b)
{
$this->a = $a;
$this->b = $b;
}
public function __destruct()
{
$this->a = null;
$this->b = null;
}
}
Diagrama de Classe O construtor da classe
inicializa os valores dos
atributos do objeto caso
necessário.
Libera o espaço em
memória reservado para o
objeto no encerramento
do script ou quando
chamado explicitamente.
• Encapsulamento de atributos e métodos
– O encapsulamento (visibilidade) de um atributo ou método pode
ser definido prefixando a declaração com as palavras-chave:
• public
• protected
• private
– Public podem ser acessados por todo script.
– Protected limita o acesso a classes herdadas e para classe que
define o objeto.
– Private limita a visibilidade para apenas a classe que define o
objeto.
Orientação a Objetos
13/02/2011 13
• Encapsulamento de atributos e métodos
Orientação a Objetos
13/02/2011 14
Class Encapsulamento
{
// Visível em todo o script
public $atributoPublico;
// Visível nas classes e subclasses
protected $atributoProtegido;
// Visível apenas na classe
private $atributoPrivado;
public function metodoPublico()
{
// Visível em todos os scripts
}
protected function metodoProtegido()
{
// Visível em classes e subclasses
}
private function metodoPrivado()
{
// Visível apenas na classe
}
}
Diagrama de Classe
• Instanciando o objeto da classe
– Para criar uma instância de um objeto da classe, um novo objeto
deve ser criado (instanciado) e atribuído à uma variável.
– Para tanto é necessário a chamada da palavra reservada new
seguido do nome da classe para criar um novo objeto, instanciando
então a classe (ou um objeto da classe).
Orientação a Objetos
13/02/2011 15
• Instanciando o objeto da classe
Orientação a Objetos
13/02/2011 16
<?php
require_once './class/php4.php';
require_once './class/php5.php';
require_once './class/ConstrutorDestrutor.php';
require_once './class/Encapsulamento.php';
$oPhp4 = new Php4();
$oPhp5 = new Php5();
$oConstr = new ConstrutorDestrutor(1, 2);
$oEncap = new Encapsulamento();
echo "<pre>";
print_r($oPhp4);
print_r($oPhp5);
print_r($oConstr);
print_r($oEncap);
$oConstr->__destruct();
print_r($oConstr);
• Instanciando o objeto da classe
Orientação a Objetos
13/02/2011 17
Saída:
Php4 Object
(
[a] =>
[b] =>
[c] =>
)
Php5 Object
(
[a:Php5:private] =>
[b:Php5:private] =>
[c:Php5:private] =>
)
ConstrutorDestrutor Object
(
[a:ConstrutorDestrutor:private] => 0
[b:ConstrutorDestrutor:private] => 0
)
Encapsulamento Object
(
[atributoPublico] =>
[atributoProtegido:protected] =>
[atributoPrivado:Encapsulamento:private] =>
)
• Exercitando
– Crie a seguinte classe com nome Funcionario e a manipule através
de um arquivochamado appFuncionario.php.
– Diagrama de classe:
Orientação a Objetos
13/02/2011 18
• Herança - Conceitos
– Como no mundo real, em orientação a objetos a palavra herança sugere
a construção de uma classe com base em outra já existente.
– Ou seja, a criação de uma nova classe que herda as características,
propriedades e comportamentos de uma classe base.
– Tal conceito é conhecido também como Generalização.
– Herança permite que a classe filha usufrua das propriedades e
comportamentos da classe pai, assim como a alteração de tais
comportamentos e a criação de novas propriedades e atributos
específicos.
Orientação a Objetos
13/02/2011 19
• Herança no PHP
– Em PHP uma classe pode herdar propriedades e métodos de outra classe
usando a palavra-chave extends na sua declaração.
– Não é possível herdar classes múltiplas, uma classe só pode herdar uma
classe base (ou classe pai, ou ainda classe genérica).
– Para acessar atributos e métodos da classe pai, utiliza-se a palavra
reservada parent seguida de dois pontos duplos (::).
Orientação a Objetos
13/02/2011 20
• Herança no PHP
– Vejamos o diagrama ao lado.
– A classe Dependentes estende a classe
Funcionario, aplicando o conceito de
generalização (herança).
– A classe Dependentes herda as
propriedades e atributos da classe
Funcionario.
Orientação a Objetos
13/02/2011 21
Diagrama de Classe
• Herança no PHP
– Código fonte:
Orientação a Objetos
13/02/2011 22
<?php
class Dependentes extends Funcionario
{
private $dependentes = array();
public function __construct($dependentes)
{
}
public function imprimeDadosFuncionario()
{
}
}
• Herança no PHP
– Exemplo: Implementação prática.
Orientação a Objetos
13/02/2011 23
class Dependentes extends Funcionario // Dependentes.php
{
private $dependentes = array();
public function __construct($dependentes)
{
$this->dependentes = $dependentes;
}
public function imprimeDadosFuncionario()
{
echo 'Matrícula: '.$this->getMatricula().'<br /><br />';
echo 'Nome: '.$this->getNome().'<br /><br />';
echo 'RG: '.$this->getRg().'<br /><br />';
echo 'Departamento: '.$this->getDepartamento().'<br /><br />';
echo 'Dependentes: <br />';
foreach ($this->dependentes as $value)
{
echo ' - '.$value.'<br />';
}
}
}
• Herança no PHP
– Exemplo: … continuação da Implementação prática.
Orientação a Objetos
13/02/2011 24
// appFuncDependentes.php
require_once './class/Funcionario.php';
require_once './class/Dependentes.php';
$dependentes = array('Maria', 'Pedro', 'Lucas');
$funcionario = new Dependentes($dependentes);
$funcionario->setMatricula('777');
$funcionario->setNome('George');
$funcionario->setRg('1234567');
$funcionario->setDepartamento('Informática');
echo 'Ficha do funcionário: ';
$funcionario->imprimeDadosFuncionario();
Saída:
Ficha do funcionário: Matrícula: 777
Nome: George
RG: 1234567
Departamento: Informática
Dependentes:
- Maria
- Pedro
- Lucas
• Conversão da classe para string
– Impressão da classe:
– Erro:
– Correção deste problema convertento para string:
– Resultado:
Orientação a Objetos
13/02/2011 25
Saída:
Catchable fatal error: Object of class Funcionario could not be converted to string in C:...
// appToString.php
$funcionario = new Funcionario();
echo $funcionario;
// Classe Funcionario.php
public function __toString(){
return 'Classe Funcionario';
}
Saída:
Classe Funcionario
• Referência do objeto
– Sempre que uma variável do tipo objeto é atribuida a uma
outra variável, ele recebe somente a referência deste objeto.
– Tais variáveis referenciam exatamente o mesmo objeto.
Orientação a Objetos
13/02/2011 26
// appReferenciaObjeto.php
$funcionario = new Funcionario();
$novoFuncionario = $funcionario;
$funcionario->setDepartamento('RH');
echo "A matrícula do funcionário é: {$novoFuncionario->getDepartamento()}";
Saída:
A matrícula do funcionário é: RH
• Clonagem de Objetos
– Necessário quando precisamos clonar um objeto, criando
outro espaço em memória ao invés de uma referência.
– Neste caso é criada uma nova instância do objeto, contendo
as mesmas propriedades e métodos.
Orientação a Objetos
13/02/2011 27
// appClonagemObjeto.php
$funcionario = new Funcionario();
$novoFuncionario = clone $funcionario;
$funcionario->setDepartamento('RH');
echo "A matrícula do funcionário é: {$funcionario->getDepartamento()} <br />";
echo "A matrícula do funcionário é: {$novoFuncionario->getDepartamento()}";
Saída:
A matrícula do funcionário é: RH
A matrícula do funcionário é:
• Atributos e Métodos Estáticos
– Declarar atributos ou métodos de uma classe
como estáticos faz deles acessíveis sem precisar
de instanciar a classe.
– A palavra reservada STATIC é utilizada na declaração de
atributos e métodos estáticos.
Orientação a Objetos
13/02/2011 28
• Atributos e Métodos Estáticos
– A referência aos atributos estáticos da classe é feita através da
palavra reservada self seguida de dois pontos duplos (::) em vez de
“$this->”.
– Um atributo declarado como estático não pode ser acessado com
um objeto instanciado da classe (embora métodos estáticos
podem).
Orientação a Objetos
13/02/2011 29
• Atributos e Métodos Estáticos
Orientação a Objetos
13/02/2011 30
// Classe Matematica
class Matematica
{
public static function soma( $a, $b )
{
return $a + $b;
}
}
// appMatematica.php
$num1 = 4;
$num2 = 5;
echo Matematica::soma($num1, $num2);
echo '<br />';
echo Matematica::subtracao($num1, $num2);
echo '<br />';
echo Matematica::multiplicacao($num1, $num2);
echo '<br />';
echo Matematica::divisao($num1, $num2);
Saída:
9
-1
20
0.8
Diagrama de Classe
• Exercícios
– Primeira etapa do exercício:
• Transformar os métodos da classe Site em estáticos e testá-los. Esta alteração
na implementação será padrão para nossos projetos.
Orientação a Objetos
13/02/2011 31
Diagrama de Classe
• Exercícios
– Agora vamos criar uma classe utilitária chamada Util:
(1) 3 métodos: printVar(), printR() e printDump() para depurarmos (com as
funções print_r() e var_dump()) os dados em variáveis, arrays, objetos, etc.
(2) 1 Método httpRequest: para abstrair o acesso de variáveis de requisição
HTTP através dos métodos de envio de dados GET ou POST.
(3) 2 métodos setSession() e getSession() para recuperarmos e inserirmos dados
de sessão.
Orientação a Objetos
13/02/2011 32
Diagrama de Classe
• Overloading (Sobrecarga)
– Provê meios dinâmicos para manipular atributos
(propriedades) e métodos em PHP.
– Utilizados na manipulação de métodos e propriedades não
declarados explicitamente ou não visíveis no escopo atual.
– Todos os métodos sobrecarregados devem ser definidos
como públicos.
– Este procedimento é feito através dos métodos mágicos.
Orientação a Objetos
13/02/2011 33
• Overloading (Sobrecarga)
– Sobrecarga de atributos:
• __set () : executado para a atribuição de valores em propriedades
inacessíveis.
• __get () : utilizada para retornar valores de propriedades inacessíveis.
• __isset () : acionado para chamar isset () ou empty () em propriedades
inacessíveis (PHP 5.1.0).
• __unset () : invocado para chamar unset () é em propriedades
inacessíveis (PHP 5.1.0).
Orientação a Objetos
13/02/2011 34
• Overloading (Sobrecarga)
– Sobrecarga de métodos:
• __call () : acionado ao invocar métodos inacessíveis em um contexto
de objeto.
• __callStatic() : acionado ao invocar métodos estáticos inacessíveis em
um contexto de objeto (PHP 5.3.0).
Orientação a Objetos
13/02/2011 35
• Overloading (Sobrecarga)
– Sobrecarregando os
atributos da classe
Funcionario dos
exemplos anteriores:
Orientação a Objetos
13/02/2011 36
// FuncionarioOverloading.php
class FuncionarioOverloading
{
private $matricula = null;
private $nome = null;
private $rg = null;
protected $departamento = null;
public function __construct( ) { }
public function __get( $atributo )
{
return $this->$atributo;
}
public function __set( $atributo, $valor)
{
$this->$atributo = $valor;
}
}
• Overloading (Sobrecarga)
– Sobrecarregando os atributos da classe Funcionario dos
exemplos anteriores:
Orientação a Objetos
13/02/2011 37
// appFuncOver.php
$funcionario = new FuncionarioOverloading();
echo "<pre>";
print_r($funcionario);
$funcionario->__set('matricula','777');
$funcionario->__set('nome','George Mendonça');
$funcionario->__set('rg','1234567');
$funcionario->__set('departamento','Informática');
echo "<pre>";
print_r($funcionario);
echo "<br/><strong>Dados do funcionário</strong><br />
- Matrícula: {$funcionario->__get('matricula')}
- Nome: {$funcionario->__get('nome')}
- RG: {$funcionario->__get('rg')}
- Departamento: {$funcionario->__get('departamento')}";
• Overloading (Sobrecarga)
– Sobrecarregando os atributos da classe Funcionario dos
exemplos anteriores:
Orientação a Objetos
13/02/2011 38
Saída:
FuncionarioOverloading Object
(
[matricula:FuncionarioOverloading:private] =>
[nome:FuncionarioOverloading:private] =>
[rg:FuncionarioOverloading:private] =>
[departamento:protected] =>
)
FuncionarioOverloading Object
(
[matricula:FuncionarioOverloading:private] => 777
[nome:FuncionarioOverloading:private] => George Mendonça
[rg:FuncionarioOverloading:private] => 1234567
[departamento:protected] => Informática
)
Dados do funcionário
- Matrícula: 777
- Nome: George Mendonça
- RG: 1234567
- Departamento: Informática
• Iteração de Objetos
– PHP 5 fornece uma maneira de definir objetos para que seja
possível iterar atributos públicos de uma classe, como uma
lista de itens.
– Por padrão, todas as propriedades visíveis (públicas) serão
usadas para a iteração.
– Essa iteração é efetualda facilmente com a estrutura de
controle foreach.
Orientação a Objetos
13/02/2011 39
• Iteração de Objetos
Orientação a Objetos
13/02/2011 40
Class Iteracao
{
public $nome = "George";
public $casado = true;
public $idade = 28;
}
Saída:
nome : George
casado : 1
idade : 28
// appIteracaoObjetos.php
$objeto = new Iteracao();
foreach ($objeto as $atributo => $valor)
{
print "$atributo : $valor <br />";
}
Atributo da classeObjeto da classe Valor do atributo
Diagrama de Classe
• Indução de Tipo
– PHP 5 implementa indução de tipo.
– Neste conceito, funções e métodos podem forçar que
parâmetros devem ser um objeto de uma classe.
– Basta especificar o nome da classe no desenvolvimento da
função ou método.
– É possível também aplicar em arrays (PHP 5.1).
Orientação a Objetos
13/02/2011 41
• Indução de Tipo
Orientação a Objetos
13/02/2011 42
Class Aves // Classe Aves.php
{
public $galinha = "có có có!";
public $pato = "quá quá quá!";
}
Saída:
Galinha: có có có!
Pato: quá quá quá!
Assados: Hummmm!
Class AssarAves // Classe AssarAves.php
{
public $assados = "Hummmm!";
function cardapio( Aves $cardapio)
{
echo "Galinha: $cardapio->galinha<br />
Pato: $cardapio->pato<br />
Assados: $this->assados";
}
}
$aves = new Aves(); // appAves.php
$assarAves = new AssarAves();
$assarAves->cardapio($aves);
• Reflection API
– Permite realizar a engenharia reversa de diversos elementos
em PHP5.
– É uma poderosa funcionalidade que nos permite obter
informações e metadados de classes, objetos, funções, etc.
Orientação a Objetos
13/02/2011 43
• Reflection API
Orientação a Objetos
13/02/2011 44
// appReflexao.php
$refClasslIter = new ReflectionClass('IteracaoObjetos');
$refClasslFunc = new ReflectionClass('Funcionario');
echo '<strong>Propriedades da classe IteracaoObjetos:</strong> <br />';
foreach ($refClasslIter->getProperties() as $value)
{
echo $value.'<br />';
}
echo '<br /><strong>Dados da classe Funcionario:</strong> <br />';
echo "Nome da classe: {$refClasslFunc->getName()} <br />";
echo "Arquivo: {$refClasslFunc->getFileName()} <br />";
Saída:
Propriedades da classe IteracaoObjetos:
Property [ public $nome ]
Property [ public $casado ]
Property [ public $idade ]
Dados da classe Funcionario:
Nome da classe: Funcionario
Arquivo: C:Program FilesZendApache2htdocsphp5.3-objetosclassFuncionario.php
• Late Static Bindings (PHP 5.3)
– Permite referenciar uma classe chamada no contexto de
herança estática.
– Para tanto a palavra reservada static:: é utilizada na chamada
de um método estático, mas não somente para métodos.
Orientação a Objetos
13/02/2011 45
• Late Static Bindings (PHP 5.3)
– Limitação do self::
• Em um contexto de herança, por exemplo, referências estáticas são
resolvidas usando a classe na qual foi definida, ou seja, a qual
pertence. Mas não na classe a qual foi chamada em tempo de
execução.
– Late Static Bingings
• Resolve tal limitação através da palavra reservada static:: em vez de
self::, referenciando a classe chamada em tempo de execução em vez
da classe que a define.
Orientação a Objetos
13/02/2011 46
• Late Static Bindings (PHP 5.3)
– Exemplo
• Vamos implememtar o exemplo seguinte criando as classes em um
mesmo arquivo para facilitar:
– LateStaticBindings.php (classe)
• E para testar vamos implementar o arquivo:
– appLateStaticBindings.php
• Vejamos a implementação a seguir:
Orientação a Objetos
13/02/2011 47
• Late Static Bindings (PHP 5.3)
Orientação a Objetos
13/02/2011 48
• Late Static Bindings (PHP 5.3)
Orientação a Objetos
13/02/2011 49
class X // LateStaticBindings.php
{
public static function imprimeClasse()
{
echo 'Eu sou a classe '.__CLASS__;
}
public static function chamaClasse()
{
self::imprimeClasse();
}
}
class TesteX extends X
{
public static function imprimeClasse()
{
echo 'Eu sou a classe '.__CLASS__;
}
}
Saída:
Eu sou a classe X
// appLateStaticBindings.php
TesteX::chamaClasse();
• Late Static Bindings (PHP 5.3)
Orientação a Objetos
13/02/2011 50
• Late Static Bindings (PHP 5.3)
Orientação a Objetos
13/02/2011 51
class Y // LateStaticBindings.php
{
public static function imprimeClasse()
{
echo 'Eu sou a classe '.__CLASS__;
}
public static function chamaClasse()
{
static::imprimeClasse();
}
}
class TesteY extends Y
{
public static function imprimeClasse()
{
echo 'Eu sou a classe '.__CLASS__;
}
}
Saída:
Eu sou a classe X
Eu sou a classe TesteY
// appLateStaticBindings.php
TesteX::chamaClasse();
echo '<br />';
TesteY::chamaClasse();
• Autoload – Carregando classes automaticamente
– Normalmente ao desenvolver aplicações orientadas a objeto
em PHP os desenvolvedores criam um arquivo para cada
definição de classe.
– Consequentemente uma lista de includes é necessária para a
inclusão de cada classe em uso. No o PHP5 isso não é mais
necessário.
Orientação a Objetos
13/02/2011 52
• Autoload – Carregando classes automaticamente
– Com a função __autoload quando você tentar usar uma
classe/interface que ainda não foi definida, o script engine
tem uma última chance para carregar a classe antes que o
PHP aponte o erro.
– Esta função é chamada automaticamente.
Orientação a Objetos
13/02/2011 53
• Autoload – Carregando classes automaticamente
– Implementação básica:
– Exemplo testando as classes Funcionario, Matematica e Util
já implementadas:
Orientação a Objetos
13/02/2011 54
function __autoload( $classe )
{
require_once "{$classe}.php";
}
require_once './func/autoload.php'; // appAutoloadClasses.php
$funcionario = new Funcionario;
echo $funcionario;
echo '<br />';
echo Matematica::multiplicacao(4, 4);
echo '<br />';
Util::printR($funcionario, __FILE__, __LINE__);
• Autoload – Carregando classes automaticamente
Orientação a Objetos
13/02/2011 55
Saída:
Classe Funcionario
16
==========================================================
Arquivo: C:Program FilesZendApache2htdocsphp5.3-objetosappAutoloadClasses.php
Linha: 17
==========================================================
Funcionario Object
(
[matricula:Funcionario:private] =>
[nome:Funcionario:private] =>
[rg:Funcionario:private] =>
[departamento:protected] =>
)
• Autoload – Carregando classes automaticamente
– Avaliação prática:
• E se as classes estiverem separadas em diretórios diferentes? Como
por exemplo nas seguintes pastas:
model/…
view/…
controller/…
Como resolver este problema? Pesquise, implemente e entregue na
próxima aula.
Orientação a Objetos
13/02/2011 56
• Constantes do Objeto
– É possível definir valores constantes em cada classe,
permanecendo os mesmos e imutáveis.
– Constantes diferem de variáveis no não uso do símbolo $ para
declará-las ou utilizá-las. Mas utilizando a palavra reservada
CONST na declaração.
– Assim como os atributos estáticos são referenciadas ou
chamadas através da palavra reservada self do PHP.
Orientação a Objetos
13/02/2011 57
• Constantes do Objeto
– Como os atributos estáticos (static), valores constantes não
podem ser acessados a partir de uma instância de um
objeto (como por exemplo $object::constante).
– O valor deve ser uma expressão constante, não podendo ser
(por exemplo) uma variável, um atributo de uma classe, o
resultado de uma operação matemática ou uma chamada de
função.
Orientação a Objetos
13/02/2011 58
• Constantes do Objeto
– Classe de constantes:
Orientação a Objetos
13/02/2011 59
// Classe CadastroEmpresas.php
class CadastroEmpresas
{
const TITULO_TELA = "Cadastro de Empresas";
const NOME = "Nome:";
const CNPJ = "CNPJ:";
const RAZAO_SOCIAL = "Razão Social:";
const BOTAO_SUBMIT = " >> Salvar ";
}
• Constantes do Objeto
– Implementação básica:
Orientação a Objetos
13/02/2011 60
// appConstantesdaClasse.php
echo
"<p><strong>".CadastroEmpresas::titulo_tela."</strong></p>
<form>
".CadastroEmpresas::nome." <input type='text' value='' /><br />
".CadastroEmpresas::cnpj." <input type='text' value='' /><br />
".CadastroEmpresas::razao_social." <input type='text' value='' /><br /><br />
<input type='submit' value='".CadastroEmpresas::botao_submit."' />
</form>";
Saída:
• Classes e Métodos Abstratos
– PHP 5 introduz métodos e classes abstratos.
– Não é permitido criar uma instância de uma classe que foi definida
como abstrata.
– Qualquer classe que contêm pelo menos um método abstrato deve
também ser abstrata.
– Métodos definidos como abstratos simplesmente declaram a
assinatura do método, eles não podem definir a implementação.
Orientação a Objetos
13/02/2011 61
• Classes e Métodos Abstratos
– Quando uma classe herda uma classe abstrata, todos os métodos
marcados como abstratos na declaração da classe pai devem ser
definidos na classe filha.
– Além disso, esses métodos devem ser definidos com a mesma
visibilidade ou mais fraca.
– Por exemplo, se um método abstrado é definido como protected, a
implementação do método deve ser definida como protected ou
public.
Orientação a Objetos
13/02/2011 62
• Classes e Métodos Abstratos
– Exemplo 01 - Classe Abstrata Venda
Orientação a Objetos
13/02/2011 63
// Classe Abstrata Venda.php
abstract class Venda
{
private $valor = 0.0;
private $desconto = 0.0;
public function __set($atributo, $valor)
{
$this->$atributo = $valor;
}
public function __get($atributo)
{
return $this->$atributo;
}
}
• Classes e Métodos Abstratos
– Exemplo 01 - Classe Orcamento (herda a classe Venda)
Orientação a Objetos
13/02/2011 64
// Classe Orcamento.php
class Orcamento extends Venda
{
private $taxa = array('cheque' => 1.10, 'cartao' => 1.18 );
public function vendaVista()
{
return $this->__get('valor') - $this->desconto;
}
public function vendaCheque()
{
return ($this->__get('valor')*$this->taxa['cheque']) - $this->desconto;
}
public function vendaCartao()
{
return $this->__get('valor')*$this->taxa['cartao'] - $this->desconto;
}
}
• Classes e Métodos Abstratos
– Exemplo 01 – Testando as classes de Venda
Orientação a Objetos
13/02/2011 65
// appVenda.php
$venda = new Orcamento();
$venda->__set('valor', 90);
$venda->__set('desconto', 10);
echo "<strong> === Orcamento === </strong><br /><br />";
echo "Preco: {$venda->__get('valor')}<br />";
echo "Desconto: {$venda->__get('desconto')}<br />";
echo "A vista: {$venda->vendaVista()}<br />";
echo "Cheque: {$venda->vendaCheque()}<br />";
echo "Cartao: {$venda->vendaCartao()}<br />";
Saída:
=== Orçamento ===
Preço: 90
Desconto: 10
À vista: 80
Cheque: 89
Cartão: 96.2
• Classes e Métodos Abstratos
– Exemplo 02 – Adição do método abstrato imprimeOrcamento
Orientação a Objetos
13/02/2011 66
// Classe Abstrata Venda.php
abstract class Venda
{
private $valor = 0.0;
private $desconto = 0.0;
public function __set($atributo, $valor)
{
$this->$atributo = $valor;
}
public function __get($atributo)
{
return $this->$atributo;
}
abstract function imprimeOrcamento($valor, $desconto);
}
• Classes e Métodos Abstratos
– Exemplo 02 – Adição do método abstrato imprimeOrcamento
Orientação a Objetos
13/02/2011 67
// Classe Orcamento.php
class Orcamento extends Venda
{
...
public function imprimeOrcamento($valor, $desconto)
{
$this->__set('valor', $valor);
$this->__set('desconto', $desconto);
echo "<strong> === Orcamento === </strong><br /><br />";
echo "Preco: {$this->__get('valor')}<br />";
echo "Desconto: {$this->__get('desconto')}<br />";
echo "A vista: {$this->vendaVista()}<br />";
echo "Cheque: {$this->vendaCheque()}<br />";
echo "Cartao: {$this->vendaCartao()}<br /><br />";
}
...
}
• Classes e Métodos Abstratos
– Exemplo 02 – Adição do método abstrato imprimeOrcamento
Orientação a Objetos
13/02/2011 68
// appVenda.php
$a = Util::httpRequest('a');
$b = Util::httpRequest('b');
if(!empty($a) and !empty($b))
{
$venda = new Orcamento();
$venda->imprimeOrcamento($a, $b);
echo "<button onclick="window.location='appVenda.php'">
>> Refazer Orçamento
</button>";
}
else
{?>
<form method="post">
Valor <input type="text" name="a" /> <br />
Desconto <input type="text" name="b"> <br />
<input type="submit" value=" >> Gerar Orçamento " />
</form>
<?php
}
Saída:
• Interfaces
– Interfaces de Objetos permitem a criação de código que especifica
quais métodos e variáveis uma classe deve implementar, sem ter
que definir como esses métodos serão tratados.
– A Interface é um contrato da classe. Interfaces são definidas
usando a palavra-chave 'interface', da mesma maneira que uma
classe comum, mas sem nenhum dos métodos ter seu conteúdo
definido.
Orientação a Objetos
13/02/2011 69
• Interfaces
– Todos os métodos declarados em uma interface devem ser public, essa é
a natureza de uma interface. Para implementar uma interface, o
operador implements é usado.
– Todos os métodos na interface devem ser implementados na classe; não
fazer isso resultará em um erro fatal.
– Classes podem implementar mais de uma interface se assim for
desejado, separando cada interface com uma vírgula.
Orientação a Objetos
13/02/2011 70
Nota: Uma classe não pode implementar duas interfaces que compartilham
o mesmo nome uma vez que isso causaria ambiguidade.
• Interfaces
– Exemplo 01 - Interface OperacoesMatematicas
Orientação a Objetos
13/02/2011 71
// Interface IOperacoesMatematicas.php
interface IOperacoesMatematicas
{
public static function soma($x, $y);
public static function subtracao($x, $y);
public static function multiplicacao($x, $y);
public static function divisao($x, $y);
public static function imprimeOperacoes($x, $y);
}
• Interfaces
– Exemplo 01 – Classe OpMatematicas que implementa a interface
OperacoesMatematicas
Orientação a Objetos
13/02/2011 72
// Classe OpsMatematicas.php
class OpMatematicas implements IOperacoesMatematicas
{
public static function soma($x, $y){ return $x + $y; }
public static function subtracao($x, $y) { return $x - $y; }
public static function multiplicacao($x, $y) { return $x * $y; }
public static function divisao($x, $y)
{
return ($y <> 0) ? $x / $y : 'Divsao por zero!';
}
public static function imprimeOperacoes($a, $b)
{
echo "<b>As operacoes matematicas entre $a e $b sao</b>: <br />";
echo "Soma: ".OpMatematicas::soma($a, $b)."<br />";
echo "Subtracao: ".OpMatematicas::subtracao($a, $b)."<br />";
echo "Multiplicacao: ".OpMatematicas::multiplicacao($a, $b)."<br />";
echo "Divisao: ".OpMatematicas::divisao($a, $b)."<br />";
}
}
• Interfaces
– Exemplo 01 – Aplicação appOpMatematicas
Orientação a Objetos
13/02/2011 73
// appOpMatematicas.php
$a = Util::httpRequest('a');
$b = Util::httpRequest('b');
if(!empty($a) and !empty($b))
{
OpMatematicas::imprimeOperacoes($a, $b);
}
else
{
?>
<form method="post">
1º Número: <input type="text" name="a" /> <br />
2º Número: <input type="text" name="b" /> <br />
<input type="submit" value=" >> Calcular " />
</form>
<?php
}
Saída:
As operacoes matemáticas entre 7 e 9 são:
Soma: 16
Subtracao: -2
Multiplicacao: 63
Divisao: 0.77777777777778
• Polimorfismo
– É a capacidade de dois ou mais objetos de diferentes classes
responderem à mesma mensagem de diferentes maneiras. Ou
seja, é um recurso que possibilita que objetos diferentes sejam
tratados por uma interface única.
– O Polimorfismo se define então na implementação de diversos
comportamentos em diferentes classes, que se relacionam
através de uma única Interface ou Superclasse.
Orientação a Objetos
13/02/2011 74
• Polimorfismo
Orientação a Objetos
13/02/2011 75
interface IAnuncioImobiliaria // IAnuncioImobiliaria.php
{
public static function imprimeDados();
}
class Anuncio1 implements IAnuncioImobiliaria
{ // Anuncio1.php
private static $dados = 'Casa, 2 quartos, sala, cozinha,
R. 37, Qd. 32, JD Oriente, Cuiabá-MT;';
public static function imprimeDados() {echo self::$dados; }
}
class Anuncio2 implements IAnuncioImobiliaria
{// Anuncio2.php
public static $dados = 'AP, 3 quartos, sala, cozinha, 2 garagens,
R. Barão Franca, Qd. 02, Rodovalho, Goiânia-GO;';
public static function imprimeDados() {echo self::$dados; }
}
class Anuncio3 implements IAnuncioImobiliaria // Anuncio3.php
{
public static $dados = 'Sobrado, 5 quartos, 2 salas,
2 cozinhas, 3 garagens, SEPN, Qd. 205, Brasília-DF';
public static function imprimeDados() {echo self::$dados; }
}
• Polimorfismo
Orientação a Objetos
13/02/2011 76
// appAnuncios.php
echo '<b>Anúncio imobiliário</b>: <br /><br />';
Anuncio1::imprimeDados();
echo '<br />';
Anuncio2::imprimeDados();
echo '<br />';
Anuncio3::imprimeDados();
Saída:
Anúncio imobiliário:
Casa, 2 quartos, sala, cozinha, R. 37, Qd. 32, JD Oriente, Cuiabá-MT;
AP, 3 quartos, sala, cozinha, 2 garagens, R. Barão Franca, Qd. 02, Rodovalho, Goiânia-GO;
Sobrado, 5 quartos, 2 salas, 2 cozinhas, 3 garagens, SEPN, Qd. 205, Brasília-DF
• Exceções
– PHP 5 tem um modelo de exceção é similar ao de outras
linguagens de programação. Uma exceção pode ser disparada
(thrown), ou pega (caught ou "catched") no PHP.
– Podemos implementar um código PHP em um bloco try, para
facilitar a captura de exceções em potencial.
– Cada bloco try, deve ter pelo menos um bloco catch
correspondente.
Orientação a Objetos
13/02/2011 77
• Exceções
– Vários blocos catch podem ser usados para pegar diferentes
classes de exceções.
– A execução normal (quando nenhuma exceção é disparada
dentro de um bloco try ou quando um catch compatível com
a classe da exceção disparada não estiver presente)
continuará após o último bloco catch definido na sequência.
– Exceções podem ser disparadas (ou re-disparadas) dentro de
um bloco catch.
Orientação a Objetos
13/02/2011 78
• Exceções
– Quando uma exceção é disparada, o código logo após à
instrução não será executada, e o PHP tentará achar o
primeiro bloco catch correspondente à exceção disparada.
Orientação a Objetos
13/02/2011 79
• Exceções
– Criando uma classe de Exceção para uma classe
Orientação a Objetos
13/02/2011 80
// DivisaoException.php
class DivisaoException extends Exception {}
// Divisao.php
class Divisao
{
public function __construct($a, $b)
{
if ($b == 0)
{
throw new DivisaoException('Erro - Divisão por zero!');
}
}
}
• Exceções
– Criando uma aplicação para disparar a Exceção
Orientação a Objetos
13/02/2011 81
// appException.php
try
{
$divisao = new Divisao(5, 0);
}
catch (DivisaoException $e)
{
echo "Mensagem: {$e->getMessage()} <br />
Linha: {$e->getLine()} <br />
Arquivo: {$e->getFile()} <br />
Codigo: {$e->getCode()}";
}
Saída:
Mensagem: Erro - Divisão por zero!
Linha: 8
Arquivo: D:ZendApache2htdocsphp5.3-objetosclassDivisao.php
Codigo: 0
• Simple XML
– O SimpleXML provê um conjunto de ferramentas muito fácil e
simples de usar para converter XML em objetos que podem
ser processados normalmente com seletores de propriedades
e iteradores de arrays.
– A extensão SimpleXML requer PHP 5.
– A extensão SimpleXML é habilitada por padrão.
Orientação a Objetos
13/02/2011 82
• Simple XML
– Criando o arquivo XML
Orientação a Objetos
13/02/2011 83
// Arquivo biblioteca.xml
<?xml version="1.0" encoding="UTF-8"?>
<biblioteca>
<categoria id="tecnico">
<livro>
<titulo>PHP 5 - Programação Poderosa</titulo>
<autor>Andi Gutmans, Stig Bakken, Derick Rethans</autor>
</livro>
<livro>
<titulo>Zend Framework in Action</titulo>
<autor>Rob Allen</autor>
</livro>
</categoria>
</biblioteca>
• Simple XML
– Criando uma aplicação com a extensão
Orientação a Objetos
13/02/2011 84
// appSimpleXml.php
$biblioteca = simplexml_load_file('./inc/biblioteca.xml');
foreach ($biblioteca->categoria as $categoria)
{
echo "Categoria: " . $categoria['id'] . '<br>';
foreach ($categoria->livro as $livro)
{
echo "Titulo: " . $livro->titulo . '<br>';
echo "Autor: " . $livro->autor . '<br>';
}
}
Saída:
Categoria: Técnico
Titulo: PHP 5 - Programação Poderosa
Autor: Andi Gutmans, Stig Bakken, Derick Rethans
Titulo: Zend Framework in Action
Autor: Rob Allen
• Padrões de Projeto
– Os padrões de projeto de software ou padrões de desenho de
software, também muito conhecido pelo termo original em
inglês Design Patterns, descrevem soluções para problemas
recorrentes no desenvolvimento de sistemas de software
orientados a objetos.
Orientação a Objetos
13/02/2011 85
• Padrões de Projeto
– Objetivos
• Reutilização de código
• Melhores práticas de programação
• Solução para problemas do dia a dia
Orientação a Objetos
13/02/2011 86
• Padrões de Projeto
– Singleton
• O Design Pattern Singleton é um dos padrões de projetos mais fáceis
que existe. Ele que garante a existência de uma única instância de
uma determinada classe para um objeto, mantendo um ponto global
de acesso ao seu objeto.
• Este padrão é utilizado consequentemente em implementações que
necessitam de classes que disponibilizam apenas uma instância do
objeto na aplicação.
Orientação a Objetos
13/02/2011 87
• Singleton
– Criando a classe
Orientação a Objetos
13/02/2011 88
// Classe Singleton.php
class Singleton
{
// instancia da classe
private static $objDaClasse = null;
private function __construct() { /* ... */ }
public static function getObjDaClasse()
{
if (self::$objDaClasse === null)
{
self::$objDaClasse = new Singleton();
}
return self::$objDaClasse;
}
}
• Singleton
– Criando uma aplicação para testar o objeto Singleton
Orientação a Objetos
13/02/2011 89
// appSingleton.php
$o1 = Singleton::getObjDaClasse();
$o2 = Singleton::getObjDaClasse();
$o3 = Singleton::getObjDaClasse();
echo '<pre>';
var_dump($o1);
var_dump($o2);
var_dump($o3);
Apenas um objeto
daclasse é criado em
memória
Saída:
object(Singleton)#1 (0) {
}
object(Singleton)#1 (0) {
}
object(Singleton)#1 (0) {
}

Mais conteúdo relacionado

Mais procurados

Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
Regis Magalhães
 
Java 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita PolimorfismoJava 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita Polimorfismo
Regis Magalhães
 
jpa-hibernate-presentation
jpa-hibernate-presentationjpa-hibernate-presentation
jpa-hibernate-presentation
John Slick
 

Mais procurados (20)

Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
Graph Database Meetup in Seoul #1. What is Graph Database? (그래프 데이터베이스 소개)
Graph Database Meetup in Seoul #1. What is Graph Database? (그래프 데이터베이스 소개)Graph Database Meetup in Seoul #1. What is Graph Database? (그래프 데이터베이스 소개)
Graph Database Meetup in Seoul #1. What is Graph Database? (그래프 데이터베이스 소개)
 
Java Web 程式之效能技巧與安全防護
Java Web 程式之效能技巧與安全防護Java Web 程式之效能技巧與安全防護
Java Web 程式之效能技巧與安全防護
 
Java 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita PolimorfismoJava 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita Polimorfismo
 
Introduction to Hibernate Framework
Introduction to Hibernate FrameworkIntroduction to Hibernate Framework
Introduction to Hibernate Framework
 
PHP Aula 06 - Include, Require e Querystring
PHP Aula 06 - Include, Require e QuerystringPHP Aula 06 - Include, Require e Querystring
PHP Aula 06 - Include, Require e Querystring
 
Inversion of Control and Dependency Injection
Inversion of Control and Dependency InjectionInversion of Control and Dependency Injection
Inversion of Control and Dependency Injection
 
Event sourcing in the functional world (22 07-2021)
Event sourcing in the functional world (22 07-2021)Event sourcing in the functional world (22 07-2021)
Event sourcing in the functional world (22 07-2021)
 
jpa-hibernate-presentation
jpa-hibernate-presentationjpa-hibernate-presentation
jpa-hibernate-presentation
 
Docker
DockerDocker
Docker
 
Java Mission Control: Java Flight Recorder Deep Dive
Java Mission Control: Java Flight Recorder Deep DiveJava Mission Control: Java Flight Recorder Deep Dive
Java Mission Control: Java Flight Recorder Deep Dive
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
 
Asynchronous API in Java8, how to use CompletableFuture
Asynchronous API in Java8, how to use CompletableFutureAsynchronous API in Java8, how to use CompletableFuture
Asynchronous API in Java8, how to use CompletableFuture
 
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
 
SPARQL introduction and training (130+ slides with exercices)
SPARQL introduction and training (130+ slides with exercices)SPARQL introduction and training (130+ slides with exercices)
SPARQL introduction and training (130+ slides with exercices)
 
Introduction to react
Introduction to reactIntroduction to react
Introduction to react
 
Php cookies
Php cookiesPhp cookies
Php cookies
 
Java - Lombok
Java - LombokJava - Lombok
Java - Lombok
 
Php server variables
Php server variablesPhp server variables
Php server variables
 
DevRookie 언리얼 에셋과 패키지.pptx
DevRookie 언리얼 에셋과 패키지.pptxDevRookie 언리얼 에셋과 패키지.pptx
DevRookie 언리얼 에셋과 패키지.pptx
 

Destaque

Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
Armando Daniel
 
Iniciando o Desenvolvimento para o Google Android
Iniciando o Desenvolvimento para o Google AndroidIniciando o Desenvolvimento para o Google Android
Iniciando o Desenvolvimento para o Google Android
Salvador Torres
 
Desenvolvimento de Apps e Games para Android - Parte 1
Desenvolvimento de Apps e Games para Android - Parte 1Desenvolvimento de Apps e Games para Android - Parte 1
Desenvolvimento de Apps e Games para Android - Parte 1
Erisvaldo Junior
 

Destaque (20)

Lista Exercicios 03
Lista Exercicios 03Lista Exercicios 03
Lista Exercicios 03
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
SEO para Front-End - BeagaJS
SEO para Front-End - BeagaJSSEO para Front-End - BeagaJS
SEO para Front-End - BeagaJS
 
Lista Exercicios 02
Lista Exercicios 02Lista Exercicios 02
Lista Exercicios 02
 
android
androidandroid
android
 
Seminário - Video game e suas convergências
Seminário - Video game e suas convergênciasSeminário - Video game e suas convergências
Seminário - Video game e suas convergências
 
As possibilidades da EaD no contexto da sociedade pós-moderna
As possibilidades da EaD no contexto da sociedade pós-modernaAs possibilidades da EaD no contexto da sociedade pós-moderna
As possibilidades da EaD no contexto da sociedade pós-moderna
 
Jogos em Python utilizando PyGame
Jogos em Python utilizando PyGameJogos em Python utilizando PyGame
Jogos em Python utilizando PyGame
 
Uso das redes sociais em marketing de bibliotecas
Uso das redes sociais em marketing de bibliotecasUso das redes sociais em marketing de bibliotecas
Uso das redes sociais em marketing de bibliotecas
 
Aula Programação Orientada a Objetos em Java
Aula Programação Orientada a Objetos em JavaAula Programação Orientada a Objetos em Java
Aula Programação Orientada a Objetos em Java
 
Php
PhpPhp
Php
 
PHP - Arrays
PHP - ArraysPHP - Arrays
PHP - Arrays
 
SEO para Front-End
SEO para Front-EndSEO para Front-End
SEO para Front-End
 
Minicurso de python - CACC UFPA 2010
Minicurso de python - CACC UFPA 2010Minicurso de python - CACC UFPA 2010
Minicurso de python - CACC UFPA 2010
 
11 Growth Hacks - Aumente visitas e conversões - #S4S2015
11 Growth Hacks - Aumente visitas e conversões - #S4S201511 Growth Hacks - Aumente visitas e conversões - #S4S2015
11 Growth Hacks - Aumente visitas e conversões - #S4S2015
 
Iniciando o Desenvolvimento para o Google Android
Iniciando o Desenvolvimento para o Google AndroidIniciando o Desenvolvimento para o Google Android
Iniciando o Desenvolvimento para o Google Android
 
Merci 10 Completo
Merci 10 CompletoMerci 10 Completo
Merci 10 Completo
 
Guia do Front-end das Galáxias
Guia do Front-end das GaláxiasGuia do Front-end das Galáxias
Guia do Front-end das Galáxias
 
Desenvolvimento de Apps e Games para Android - Parte 1
Desenvolvimento de Apps e Games para Android - Parte 1Desenvolvimento de Apps e Games para Android - Parte 1
Desenvolvimento de Apps e Games para Android - Parte 1
 
Curso de Android Aula 4
Curso de Android Aula 4Curso de Android Aula 4
Curso de Android Aula 4
 

Semelhante a PHP 5.3 - Classes e Objetos

Semelhante a PHP 5.3 - Classes e Objetos (20)

Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
 
Aula5
Aula5Aula5
Aula5
 
Curso de PHP - Objetos
Curso de PHP - ObjetosCurso de PHP - Objetos
Curso de PHP - Objetos
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Aula4
Aula4Aula4
Aula4
 
Migrando para o PHP 5
Migrando para o PHP 5Migrando para o PHP 5
Migrando para o PHP 5
 
Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2
 
Fundamentos da Programação PHP OO - Aula 1
Fundamentos da Programação PHP OO - Aula 1Fundamentos da Programação PHP OO - Aula 1
Fundamentos da Programação PHP OO - Aula 1
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP Doctrine
 
Php5 e a orientação a objetos
Php5 e a orientação a objetosPhp5 e a orientação a objetos
Php5 e a orientação a objetos
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1
 
Desenvolvimento Web com PHP - Aula 1
Desenvolvimento Web com PHP - Aula 1Desenvolvimento Web com PHP - Aula 1
Desenvolvimento Web com PHP - Aula 1
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012
 
Dependency injection WTF? - PHPSC Conference 2012
Dependency injection WTF? - PHPSC Conference 2012Dependency injection WTF? - PHPSC Conference 2012
Dependency injection WTF? - PHPSC Conference 2012
 
Aula orientação a objetos
Aula orientação a objetosAula orientação a objetos
Aula orientação a objetos
 
Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009
 
Introdução a poo
Introdução a pooIntrodução a poo
Introdução a poo
 

Mais de George Mendonça

Evangelismo e Missões - Elucidando o papel do cristão e da Igreja
Evangelismo e Missões - Elucidando o papel do cristão e da IgrejaEvangelismo e Missões - Elucidando o papel do cristão e da Igreja
Evangelismo e Missões - Elucidando o papel do cristão e da Igreja
George Mendonça
 

Mais de George Mendonça (20)

Iniciando na Programação com Python - FLISOL Paracatu 2016
Iniciando na Programação com Python - FLISOL Paracatu 2016Iniciando na Programação com Python - FLISOL Paracatu 2016
Iniciando na Programação com Python - FLISOL Paracatu 2016
 
Orientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLOrientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSL
 
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
 
Software livre, história, paradigmas, comunidade e colaboração
Software livre, história, paradigmas, comunidade e colaboraçãoSoftware livre, história, paradigmas, comunidade e colaboração
Software livre, história, paradigmas, comunidade e colaboração
 
Criando Projetos de Software Livre no meio Acadêmico
Criando Projetos de Software Livre no meio AcadêmicoCriando Projetos de Software Livre no meio Acadêmico
Criando Projetos de Software Livre no meio Acadêmico
 
WordPress para Desenvolvedores - Utilizando WP como framework de desenvolvime...
WordPress para Desenvolvedores - Utilizando WP como framework de desenvolvime...WordPress para Desenvolvedores - Utilizando WP como framework de desenvolvime...
WordPress para Desenvolvedores - Utilizando WP como framework de desenvolvime...
 
Confirurando Dababase Development no Eclipse Luna
Confirurando Dababase Development no Eclipse LunaConfirurando Dababase Development no Eclipse Luna
Confirurando Dababase Development no Eclipse Luna
 
Dominando o WordPress - A plataforma de sites e blogs mais popular do mundo
Dominando o WordPress - A plataforma de sites e blogs mais popular do mundoDominando o WordPress - A plataforma de sites e blogs mais popular do mundo
Dominando o WordPress - A plataforma de sites e blogs mais popular do mundo
 
Libre Office Magazine Edição 11
Libre Office Magazine Edição 11Libre Office Magazine Edição 11
Libre Office Magazine Edição 11
 
Desenvolvendo Um Projeto de um Portal Responsivo com WordPress - 10° FGSL
Desenvolvendo Um Projeto de um Portal Responsivo com WordPress - 10° FGSLDesenvolvendo Um Projeto de um Portal Responsivo com WordPress - 10° FGSL
Desenvolvendo Um Projeto de um Portal Responsivo com WordPress - 10° FGSL
 
Codando com PHP e JQuery
Codando com PHP e JQueryCodando com PHP e JQuery
Codando com PHP e JQuery
 
Quebrando Paradigmas e Conhecendo o Movimento Software Livre
Quebrando Paradigmas e Conhecendo o Movimento Software LivreQuebrando Paradigmas e Conhecendo o Movimento Software Livre
Quebrando Paradigmas e Conhecendo o Movimento Software Livre
 
Discutindo Governança e Gestão de Projetos com Ferramentas Livres
Discutindo Governança e Gestão de Projetos com Ferramentas LivresDiscutindo Governança e Gestão de Projetos com Ferramentas Livres
Discutindo Governança e Gestão de Projetos com Ferramentas Livres
 
Desenvolvendo Um Projeto de Um Portal Responsivo Com WordPress
Desenvolvendo Um Projeto de Um Portal Responsivo Com WordPressDesenvolvendo Um Projeto de Um Portal Responsivo Com WordPress
Desenvolvendo Um Projeto de Um Portal Responsivo Com WordPress
 
Oficina de PHP - Software Freedom Day Luziânia 2013
Oficina de PHP - Software Freedom Day Luziânia 2013Oficina de PHP - Software Freedom Day Luziânia 2013
Oficina de PHP - Software Freedom Day Luziânia 2013
 
Free Software in the Cloud - Deixe as Nuvens facilitar a sua vida com Softwar...
Free Software in the Cloud - Deixe as Nuvens facilitar a sua vida com Softwar...Free Software in the Cloud - Deixe as Nuvens facilitar a sua vida com Softwar...
Free Software in the Cloud - Deixe as Nuvens facilitar a sua vida com Softwar...
 
Palestra Batismo Digital como uma Ferramenta Social no Ensino de Software Liv...
Palestra Batismo Digital como uma Ferramenta Social no Ensino de Software Liv...Palestra Batismo Digital como uma Ferramenta Social no Ensino de Software Liv...
Palestra Batismo Digital como uma Ferramenta Social no Ensino de Software Liv...
 
FGSL - Batismo Digital
FGSL - Batismo DigitalFGSL - Batismo Digital
FGSL - Batismo Digital
 
Evangelismo e Missões - Elucidando o papel do cristão e da Igreja
Evangelismo e Missões - Elucidando o papel do cristão e da IgrejaEvangelismo e Missões - Elucidando o papel do cristão e da Igreja
Evangelismo e Missões - Elucidando o papel do cristão e da Igreja
 
Curriculum - George Mendonça
Curriculum - George MendonçaCurriculum - George Mendonça
Curriculum - George Mendonça
 

Último

matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
CleidianeCarvalhoPer
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
NarlaAquino
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
HELENO FAVACHO
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptx
andrenespoli3
 

Último (20)

Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptxMonoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
Monoteísmo, Politeísmo, Panteísmo 7 ANO2.pptx
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenos
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdfProjeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
Seminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptxSeminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptx
 
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdfTCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
TCC_MusicaComoLinguagemNaAlfabetização-ARAUJOfranklin-UFBA.pdf
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptx
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 

PHP 5.3 - Classes e Objetos

  • 1. Bacharel em Ciência da Computação (UFG) Especializando em Engenharia de Software Analista de Sistemas – SIGMA / MDIC Professor Formador EAD – NEAD/ETEB george@georgemendonca.com.br http://www.georgemendonca.com.br Orientação a Objetos
  • 2. • Introdução – No PHP 5 foi desenvolvido um novo Modelo de Objetos. – O tratamento de objetos foi completamente reescrito, permitindo uma performance melhor e mais vantagens. – Versão atual: PHP 5.3. Orientação a Objetos 13/02/2011 2
  • 3. • Introdução – Diferenças entre o PHP 4 e o PHP 5 • PHP 4 - Classes simples: – Uma tentativa a orientação à objetos – Porém sem muitos conceitos considerados importantes para uma linguagem orientada a objetos Orientação a Objetos 13/02/2011 3
  • 4. • Introdução – Diferenças entre o PHP 4 e o PHP 5 Orientação a Objetos 13/02/2011 4 Class Php4 { /** * Atributos simples */ var $a; var $b; var $c; /** * Método construtor da classe PHP 4 * Métodos simples */ function Php4() { } } Diagrama de Classe
  • 5. • Introdução – Diferenças entre o PHP 4 e o PHP 5 • PHP 5 - Classes mais completas e uso de padrões: – Com implementação de recursos semelhantes às linguagens de programação como C++ e Java. Orientação a Objetos 13/02/2011 5
  • 6. • Introdução – Diferenças entre o PHP 4 e o PHP 5 Orientação a Objetos 13/02/2011 6 Class Php5 { /** * Visibilidade de atributos */ private $a; private $b; private $c; /** * Método construtor da classe PHP 5 * Visibilidade de métodos */ public function __construct() { } } Diagrama de Classe
  • 7. • Escrevendo uma classe – Toda definição de classe começa com a palavra-chave class, seguido do nome_da_classe, que pode ser qualquer nome que não seja uma palavra reservada no PHP. – Seguido por um par de chaves “ { } “, que contém a definição dos atributos (ou propriedades) e métodos da classe. Orientação a Objetos 13/02/2011 7
  • 8. • Escrevendo uma classe Orientação a Objetos 13/02/2011 8 Class Nome_da_Classe { encapsulamento $atributos; ... encapsulamento function nome_metodo( [argumento1, ...] ) { /** * Implementação do comportamento do método. * Como uma função, um método pode retornar * um valor se necessário. */ [return] } ... }
  • 9. • A variável $this – Uma pseudo variável $this está disponível quando um método da classe é chamado dentro de um contexto de objeto. – Sua implementação normalmente se encontra dentro do escopo de um método. – $this é uma referência para o objeto que chama o método ou o atributo. Orientação a Objetos 13/02/2011 9
  • 10. • A variável $this Orientação a Objetos 13/02/2011 10 Class Classe { encapsulamento $atributo; ... encapsulamento function nome_metodo() { // A variável $this referencia o objeto return $this->atributo; } ... }
  • 11. • Construtores e Destrutores – PHP 5 permite que os desenvolvedores declarem métodos construtores para as classes. Isto é feito através do método mágico __construct(). – Classes que tem um método construtor chamam esse método cada vez que um objeto novo é criado, sendo apropriado para qualquer inicialização que o objeto possa vir a precisar no momento em que é instanciado. Orientação a Objetos 13/02/2011 11 Nota: Construtores pais não são chamados implicitamente se a classe filha define um construtor. Para executar o construtor da classe pai, uma chamada a parent::__construct() dentro do construtor da classe filha é necessária.
  • 12. • Construtores e Destrutores Orientação a Objetos 13/02/2011 12 Class ConstrutorDestrutor { private $a; private $b; public function __construct($a, $b) { $this->a = $a; $this->b = $b; } public function __destruct() { $this->a = null; $this->b = null; } } Diagrama de Classe O construtor da classe inicializa os valores dos atributos do objeto caso necessário. Libera o espaço em memória reservado para o objeto no encerramento do script ou quando chamado explicitamente.
  • 13. • Encapsulamento de atributos e métodos – O encapsulamento (visibilidade) de um atributo ou método pode ser definido prefixando a declaração com as palavras-chave: • public • protected • private – Public podem ser acessados por todo script. – Protected limita o acesso a classes herdadas e para classe que define o objeto. – Private limita a visibilidade para apenas a classe que define o objeto. Orientação a Objetos 13/02/2011 13
  • 14. • Encapsulamento de atributos e métodos Orientação a Objetos 13/02/2011 14 Class Encapsulamento { // Visível em todo o script public $atributoPublico; // Visível nas classes e subclasses protected $atributoProtegido; // Visível apenas na classe private $atributoPrivado; public function metodoPublico() { // Visível em todos os scripts } protected function metodoProtegido() { // Visível em classes e subclasses } private function metodoPrivado() { // Visível apenas na classe } } Diagrama de Classe
  • 15. • Instanciando o objeto da classe – Para criar uma instância de um objeto da classe, um novo objeto deve ser criado (instanciado) e atribuído à uma variável. – Para tanto é necessário a chamada da palavra reservada new seguido do nome da classe para criar um novo objeto, instanciando então a classe (ou um objeto da classe). Orientação a Objetos 13/02/2011 15
  • 16. • Instanciando o objeto da classe Orientação a Objetos 13/02/2011 16 <?php require_once './class/php4.php'; require_once './class/php5.php'; require_once './class/ConstrutorDestrutor.php'; require_once './class/Encapsulamento.php'; $oPhp4 = new Php4(); $oPhp5 = new Php5(); $oConstr = new ConstrutorDestrutor(1, 2); $oEncap = new Encapsulamento(); echo "<pre>"; print_r($oPhp4); print_r($oPhp5); print_r($oConstr); print_r($oEncap); $oConstr->__destruct(); print_r($oConstr);
  • 17. • Instanciando o objeto da classe Orientação a Objetos 13/02/2011 17 Saída: Php4 Object ( [a] => [b] => [c] => ) Php5 Object ( [a:Php5:private] => [b:Php5:private] => [c:Php5:private] => ) ConstrutorDestrutor Object ( [a:ConstrutorDestrutor:private] => 0 [b:ConstrutorDestrutor:private] => 0 ) Encapsulamento Object ( [atributoPublico] => [atributoProtegido:protected] => [atributoPrivado:Encapsulamento:private] => )
  • 18. • Exercitando – Crie a seguinte classe com nome Funcionario e a manipule através de um arquivochamado appFuncionario.php. – Diagrama de classe: Orientação a Objetos 13/02/2011 18
  • 19. • Herança - Conceitos – Como no mundo real, em orientação a objetos a palavra herança sugere a construção de uma classe com base em outra já existente. – Ou seja, a criação de uma nova classe que herda as características, propriedades e comportamentos de uma classe base. – Tal conceito é conhecido também como Generalização. – Herança permite que a classe filha usufrua das propriedades e comportamentos da classe pai, assim como a alteração de tais comportamentos e a criação de novas propriedades e atributos específicos. Orientação a Objetos 13/02/2011 19
  • 20. • Herança no PHP – Em PHP uma classe pode herdar propriedades e métodos de outra classe usando a palavra-chave extends na sua declaração. – Não é possível herdar classes múltiplas, uma classe só pode herdar uma classe base (ou classe pai, ou ainda classe genérica). – Para acessar atributos e métodos da classe pai, utiliza-se a palavra reservada parent seguida de dois pontos duplos (::). Orientação a Objetos 13/02/2011 20
  • 21. • Herança no PHP – Vejamos o diagrama ao lado. – A classe Dependentes estende a classe Funcionario, aplicando o conceito de generalização (herança). – A classe Dependentes herda as propriedades e atributos da classe Funcionario. Orientação a Objetos 13/02/2011 21 Diagrama de Classe
  • 22. • Herança no PHP – Código fonte: Orientação a Objetos 13/02/2011 22 <?php class Dependentes extends Funcionario { private $dependentes = array(); public function __construct($dependentes) { } public function imprimeDadosFuncionario() { } }
  • 23. • Herança no PHP – Exemplo: Implementação prática. Orientação a Objetos 13/02/2011 23 class Dependentes extends Funcionario // Dependentes.php { private $dependentes = array(); public function __construct($dependentes) { $this->dependentes = $dependentes; } public function imprimeDadosFuncionario() { echo 'Matrícula: '.$this->getMatricula().'<br /><br />'; echo 'Nome: '.$this->getNome().'<br /><br />'; echo 'RG: '.$this->getRg().'<br /><br />'; echo 'Departamento: '.$this->getDepartamento().'<br /><br />'; echo 'Dependentes: <br />'; foreach ($this->dependentes as $value) { echo ' - '.$value.'<br />'; } } }
  • 24. • Herança no PHP – Exemplo: … continuação da Implementação prática. Orientação a Objetos 13/02/2011 24 // appFuncDependentes.php require_once './class/Funcionario.php'; require_once './class/Dependentes.php'; $dependentes = array('Maria', 'Pedro', 'Lucas'); $funcionario = new Dependentes($dependentes); $funcionario->setMatricula('777'); $funcionario->setNome('George'); $funcionario->setRg('1234567'); $funcionario->setDepartamento('Informática'); echo 'Ficha do funcionário: '; $funcionario->imprimeDadosFuncionario(); Saída: Ficha do funcionário: Matrícula: 777 Nome: George RG: 1234567 Departamento: Informática Dependentes: - Maria - Pedro - Lucas
  • 25. • Conversão da classe para string – Impressão da classe: – Erro: – Correção deste problema convertento para string: – Resultado: Orientação a Objetos 13/02/2011 25 Saída: Catchable fatal error: Object of class Funcionario could not be converted to string in C:... // appToString.php $funcionario = new Funcionario(); echo $funcionario; // Classe Funcionario.php public function __toString(){ return 'Classe Funcionario'; } Saída: Classe Funcionario
  • 26. • Referência do objeto – Sempre que uma variável do tipo objeto é atribuida a uma outra variável, ele recebe somente a referência deste objeto. – Tais variáveis referenciam exatamente o mesmo objeto. Orientação a Objetos 13/02/2011 26 // appReferenciaObjeto.php $funcionario = new Funcionario(); $novoFuncionario = $funcionario; $funcionario->setDepartamento('RH'); echo "A matrícula do funcionário é: {$novoFuncionario->getDepartamento()}"; Saída: A matrícula do funcionário é: RH
  • 27. • Clonagem de Objetos – Necessário quando precisamos clonar um objeto, criando outro espaço em memória ao invés de uma referência. – Neste caso é criada uma nova instância do objeto, contendo as mesmas propriedades e métodos. Orientação a Objetos 13/02/2011 27 // appClonagemObjeto.php $funcionario = new Funcionario(); $novoFuncionario = clone $funcionario; $funcionario->setDepartamento('RH'); echo "A matrícula do funcionário é: {$funcionario->getDepartamento()} <br />"; echo "A matrícula do funcionário é: {$novoFuncionario->getDepartamento()}"; Saída: A matrícula do funcionário é: RH A matrícula do funcionário é:
  • 28. • Atributos e Métodos Estáticos – Declarar atributos ou métodos de uma classe como estáticos faz deles acessíveis sem precisar de instanciar a classe. – A palavra reservada STATIC é utilizada na declaração de atributos e métodos estáticos. Orientação a Objetos 13/02/2011 28
  • 29. • Atributos e Métodos Estáticos – A referência aos atributos estáticos da classe é feita através da palavra reservada self seguida de dois pontos duplos (::) em vez de “$this->”. – Um atributo declarado como estático não pode ser acessado com um objeto instanciado da classe (embora métodos estáticos podem). Orientação a Objetos 13/02/2011 29
  • 30. • Atributos e Métodos Estáticos Orientação a Objetos 13/02/2011 30 // Classe Matematica class Matematica { public static function soma( $a, $b ) { return $a + $b; } } // appMatematica.php $num1 = 4; $num2 = 5; echo Matematica::soma($num1, $num2); echo '<br />'; echo Matematica::subtracao($num1, $num2); echo '<br />'; echo Matematica::multiplicacao($num1, $num2); echo '<br />'; echo Matematica::divisao($num1, $num2); Saída: 9 -1 20 0.8 Diagrama de Classe
  • 31. • Exercícios – Primeira etapa do exercício: • Transformar os métodos da classe Site em estáticos e testá-los. Esta alteração na implementação será padrão para nossos projetos. Orientação a Objetos 13/02/2011 31 Diagrama de Classe
  • 32. • Exercícios – Agora vamos criar uma classe utilitária chamada Util: (1) 3 métodos: printVar(), printR() e printDump() para depurarmos (com as funções print_r() e var_dump()) os dados em variáveis, arrays, objetos, etc. (2) 1 Método httpRequest: para abstrair o acesso de variáveis de requisição HTTP através dos métodos de envio de dados GET ou POST. (3) 2 métodos setSession() e getSession() para recuperarmos e inserirmos dados de sessão. Orientação a Objetos 13/02/2011 32 Diagrama de Classe
  • 33. • Overloading (Sobrecarga) – Provê meios dinâmicos para manipular atributos (propriedades) e métodos em PHP. – Utilizados na manipulação de métodos e propriedades não declarados explicitamente ou não visíveis no escopo atual. – Todos os métodos sobrecarregados devem ser definidos como públicos. – Este procedimento é feito através dos métodos mágicos. Orientação a Objetos 13/02/2011 33
  • 34. • Overloading (Sobrecarga) – Sobrecarga de atributos: • __set () : executado para a atribuição de valores em propriedades inacessíveis. • __get () : utilizada para retornar valores de propriedades inacessíveis. • __isset () : acionado para chamar isset () ou empty () em propriedades inacessíveis (PHP 5.1.0). • __unset () : invocado para chamar unset () é em propriedades inacessíveis (PHP 5.1.0). Orientação a Objetos 13/02/2011 34
  • 35. • Overloading (Sobrecarga) – Sobrecarga de métodos: • __call () : acionado ao invocar métodos inacessíveis em um contexto de objeto. • __callStatic() : acionado ao invocar métodos estáticos inacessíveis em um contexto de objeto (PHP 5.3.0). Orientação a Objetos 13/02/2011 35
  • 36. • Overloading (Sobrecarga) – Sobrecarregando os atributos da classe Funcionario dos exemplos anteriores: Orientação a Objetos 13/02/2011 36 // FuncionarioOverloading.php class FuncionarioOverloading { private $matricula = null; private $nome = null; private $rg = null; protected $departamento = null; public function __construct( ) { } public function __get( $atributo ) { return $this->$atributo; } public function __set( $atributo, $valor) { $this->$atributo = $valor; } }
  • 37. • Overloading (Sobrecarga) – Sobrecarregando os atributos da classe Funcionario dos exemplos anteriores: Orientação a Objetos 13/02/2011 37 // appFuncOver.php $funcionario = new FuncionarioOverloading(); echo "<pre>"; print_r($funcionario); $funcionario->__set('matricula','777'); $funcionario->__set('nome','George Mendonça'); $funcionario->__set('rg','1234567'); $funcionario->__set('departamento','Informática'); echo "<pre>"; print_r($funcionario); echo "<br/><strong>Dados do funcionário</strong><br /> - Matrícula: {$funcionario->__get('matricula')} - Nome: {$funcionario->__get('nome')} - RG: {$funcionario->__get('rg')} - Departamento: {$funcionario->__get('departamento')}";
  • 38. • Overloading (Sobrecarga) – Sobrecarregando os atributos da classe Funcionario dos exemplos anteriores: Orientação a Objetos 13/02/2011 38 Saída: FuncionarioOverloading Object ( [matricula:FuncionarioOverloading:private] => [nome:FuncionarioOverloading:private] => [rg:FuncionarioOverloading:private] => [departamento:protected] => ) FuncionarioOverloading Object ( [matricula:FuncionarioOverloading:private] => 777 [nome:FuncionarioOverloading:private] => George Mendonça [rg:FuncionarioOverloading:private] => 1234567 [departamento:protected] => Informática ) Dados do funcionário - Matrícula: 777 - Nome: George Mendonça - RG: 1234567 - Departamento: Informática
  • 39. • Iteração de Objetos – PHP 5 fornece uma maneira de definir objetos para que seja possível iterar atributos públicos de uma classe, como uma lista de itens. – Por padrão, todas as propriedades visíveis (públicas) serão usadas para a iteração. – Essa iteração é efetualda facilmente com a estrutura de controle foreach. Orientação a Objetos 13/02/2011 39
  • 40. • Iteração de Objetos Orientação a Objetos 13/02/2011 40 Class Iteracao { public $nome = "George"; public $casado = true; public $idade = 28; } Saída: nome : George casado : 1 idade : 28 // appIteracaoObjetos.php $objeto = new Iteracao(); foreach ($objeto as $atributo => $valor) { print "$atributo : $valor <br />"; } Atributo da classeObjeto da classe Valor do atributo Diagrama de Classe
  • 41. • Indução de Tipo – PHP 5 implementa indução de tipo. – Neste conceito, funções e métodos podem forçar que parâmetros devem ser um objeto de uma classe. – Basta especificar o nome da classe no desenvolvimento da função ou método. – É possível também aplicar em arrays (PHP 5.1). Orientação a Objetos 13/02/2011 41
  • 42. • Indução de Tipo Orientação a Objetos 13/02/2011 42 Class Aves // Classe Aves.php { public $galinha = "có có có!"; public $pato = "quá quá quá!"; } Saída: Galinha: có có có! Pato: quá quá quá! Assados: Hummmm! Class AssarAves // Classe AssarAves.php { public $assados = "Hummmm!"; function cardapio( Aves $cardapio) { echo "Galinha: $cardapio->galinha<br /> Pato: $cardapio->pato<br /> Assados: $this->assados"; } } $aves = new Aves(); // appAves.php $assarAves = new AssarAves(); $assarAves->cardapio($aves);
  • 43. • Reflection API – Permite realizar a engenharia reversa de diversos elementos em PHP5. – É uma poderosa funcionalidade que nos permite obter informações e metadados de classes, objetos, funções, etc. Orientação a Objetos 13/02/2011 43
  • 44. • Reflection API Orientação a Objetos 13/02/2011 44 // appReflexao.php $refClasslIter = new ReflectionClass('IteracaoObjetos'); $refClasslFunc = new ReflectionClass('Funcionario'); echo '<strong>Propriedades da classe IteracaoObjetos:</strong> <br />'; foreach ($refClasslIter->getProperties() as $value) { echo $value.'<br />'; } echo '<br /><strong>Dados da classe Funcionario:</strong> <br />'; echo "Nome da classe: {$refClasslFunc->getName()} <br />"; echo "Arquivo: {$refClasslFunc->getFileName()} <br />"; Saída: Propriedades da classe IteracaoObjetos: Property [ public $nome ] Property [ public $casado ] Property [ public $idade ] Dados da classe Funcionario: Nome da classe: Funcionario Arquivo: C:Program FilesZendApache2htdocsphp5.3-objetosclassFuncionario.php
  • 45. • Late Static Bindings (PHP 5.3) – Permite referenciar uma classe chamada no contexto de herança estática. – Para tanto a palavra reservada static:: é utilizada na chamada de um método estático, mas não somente para métodos. Orientação a Objetos 13/02/2011 45
  • 46. • Late Static Bindings (PHP 5.3) – Limitação do self:: • Em um contexto de herança, por exemplo, referências estáticas são resolvidas usando a classe na qual foi definida, ou seja, a qual pertence. Mas não na classe a qual foi chamada em tempo de execução. – Late Static Bingings • Resolve tal limitação através da palavra reservada static:: em vez de self::, referenciando a classe chamada em tempo de execução em vez da classe que a define. Orientação a Objetos 13/02/2011 46
  • 47. • Late Static Bindings (PHP 5.3) – Exemplo • Vamos implememtar o exemplo seguinte criando as classes em um mesmo arquivo para facilitar: – LateStaticBindings.php (classe) • E para testar vamos implementar o arquivo: – appLateStaticBindings.php • Vejamos a implementação a seguir: Orientação a Objetos 13/02/2011 47
  • 48. • Late Static Bindings (PHP 5.3) Orientação a Objetos 13/02/2011 48
  • 49. • Late Static Bindings (PHP 5.3) Orientação a Objetos 13/02/2011 49 class X // LateStaticBindings.php { public static function imprimeClasse() { echo 'Eu sou a classe '.__CLASS__; } public static function chamaClasse() { self::imprimeClasse(); } } class TesteX extends X { public static function imprimeClasse() { echo 'Eu sou a classe '.__CLASS__; } } Saída: Eu sou a classe X // appLateStaticBindings.php TesteX::chamaClasse();
  • 50. • Late Static Bindings (PHP 5.3) Orientação a Objetos 13/02/2011 50
  • 51. • Late Static Bindings (PHP 5.3) Orientação a Objetos 13/02/2011 51 class Y // LateStaticBindings.php { public static function imprimeClasse() { echo 'Eu sou a classe '.__CLASS__; } public static function chamaClasse() { static::imprimeClasse(); } } class TesteY extends Y { public static function imprimeClasse() { echo 'Eu sou a classe '.__CLASS__; } } Saída: Eu sou a classe X Eu sou a classe TesteY // appLateStaticBindings.php TesteX::chamaClasse(); echo '<br />'; TesteY::chamaClasse();
  • 52. • Autoload – Carregando classes automaticamente – Normalmente ao desenvolver aplicações orientadas a objeto em PHP os desenvolvedores criam um arquivo para cada definição de classe. – Consequentemente uma lista de includes é necessária para a inclusão de cada classe em uso. No o PHP5 isso não é mais necessário. Orientação a Objetos 13/02/2011 52
  • 53. • Autoload – Carregando classes automaticamente – Com a função __autoload quando você tentar usar uma classe/interface que ainda não foi definida, o script engine tem uma última chance para carregar a classe antes que o PHP aponte o erro. – Esta função é chamada automaticamente. Orientação a Objetos 13/02/2011 53
  • 54. • Autoload – Carregando classes automaticamente – Implementação básica: – Exemplo testando as classes Funcionario, Matematica e Util já implementadas: Orientação a Objetos 13/02/2011 54 function __autoload( $classe ) { require_once "{$classe}.php"; } require_once './func/autoload.php'; // appAutoloadClasses.php $funcionario = new Funcionario; echo $funcionario; echo '<br />'; echo Matematica::multiplicacao(4, 4); echo '<br />'; Util::printR($funcionario, __FILE__, __LINE__);
  • 55. • Autoload – Carregando classes automaticamente Orientação a Objetos 13/02/2011 55 Saída: Classe Funcionario 16 ========================================================== Arquivo: C:Program FilesZendApache2htdocsphp5.3-objetosappAutoloadClasses.php Linha: 17 ========================================================== Funcionario Object ( [matricula:Funcionario:private] => [nome:Funcionario:private] => [rg:Funcionario:private] => [departamento:protected] => )
  • 56. • Autoload – Carregando classes automaticamente – Avaliação prática: • E se as classes estiverem separadas em diretórios diferentes? Como por exemplo nas seguintes pastas: model/… view/… controller/… Como resolver este problema? Pesquise, implemente e entregue na próxima aula. Orientação a Objetos 13/02/2011 56
  • 57. • Constantes do Objeto – É possível definir valores constantes em cada classe, permanecendo os mesmos e imutáveis. – Constantes diferem de variáveis no não uso do símbolo $ para declará-las ou utilizá-las. Mas utilizando a palavra reservada CONST na declaração. – Assim como os atributos estáticos são referenciadas ou chamadas através da palavra reservada self do PHP. Orientação a Objetos 13/02/2011 57
  • 58. • Constantes do Objeto – Como os atributos estáticos (static), valores constantes não podem ser acessados a partir de uma instância de um objeto (como por exemplo $object::constante). – O valor deve ser uma expressão constante, não podendo ser (por exemplo) uma variável, um atributo de uma classe, o resultado de uma operação matemática ou uma chamada de função. Orientação a Objetos 13/02/2011 58
  • 59. • Constantes do Objeto – Classe de constantes: Orientação a Objetos 13/02/2011 59 // Classe CadastroEmpresas.php class CadastroEmpresas { const TITULO_TELA = "Cadastro de Empresas"; const NOME = "Nome:"; const CNPJ = "CNPJ:"; const RAZAO_SOCIAL = "Razão Social:"; const BOTAO_SUBMIT = " >> Salvar "; }
  • 60. • Constantes do Objeto – Implementação básica: Orientação a Objetos 13/02/2011 60 // appConstantesdaClasse.php echo "<p><strong>".CadastroEmpresas::titulo_tela."</strong></p> <form> ".CadastroEmpresas::nome." <input type='text' value='' /><br /> ".CadastroEmpresas::cnpj." <input type='text' value='' /><br /> ".CadastroEmpresas::razao_social." <input type='text' value='' /><br /><br /> <input type='submit' value='".CadastroEmpresas::botao_submit."' /> </form>"; Saída:
  • 61. • Classes e Métodos Abstratos – PHP 5 introduz métodos e classes abstratos. – Não é permitido criar uma instância de uma classe que foi definida como abstrata. – Qualquer classe que contêm pelo menos um método abstrato deve também ser abstrata. – Métodos definidos como abstratos simplesmente declaram a assinatura do método, eles não podem definir a implementação. Orientação a Objetos 13/02/2011 61
  • 62. • Classes e Métodos Abstratos – Quando uma classe herda uma classe abstrata, todos os métodos marcados como abstratos na declaração da classe pai devem ser definidos na classe filha. – Além disso, esses métodos devem ser definidos com a mesma visibilidade ou mais fraca. – Por exemplo, se um método abstrado é definido como protected, a implementação do método deve ser definida como protected ou public. Orientação a Objetos 13/02/2011 62
  • 63. • Classes e Métodos Abstratos – Exemplo 01 - Classe Abstrata Venda Orientação a Objetos 13/02/2011 63 // Classe Abstrata Venda.php abstract class Venda { private $valor = 0.0; private $desconto = 0.0; public function __set($atributo, $valor) { $this->$atributo = $valor; } public function __get($atributo) { return $this->$atributo; } }
  • 64. • Classes e Métodos Abstratos – Exemplo 01 - Classe Orcamento (herda a classe Venda) Orientação a Objetos 13/02/2011 64 // Classe Orcamento.php class Orcamento extends Venda { private $taxa = array('cheque' => 1.10, 'cartao' => 1.18 ); public function vendaVista() { return $this->__get('valor') - $this->desconto; } public function vendaCheque() { return ($this->__get('valor')*$this->taxa['cheque']) - $this->desconto; } public function vendaCartao() { return $this->__get('valor')*$this->taxa['cartao'] - $this->desconto; } }
  • 65. • Classes e Métodos Abstratos – Exemplo 01 – Testando as classes de Venda Orientação a Objetos 13/02/2011 65 // appVenda.php $venda = new Orcamento(); $venda->__set('valor', 90); $venda->__set('desconto', 10); echo "<strong> === Orcamento === </strong><br /><br />"; echo "Preco: {$venda->__get('valor')}<br />"; echo "Desconto: {$venda->__get('desconto')}<br />"; echo "A vista: {$venda->vendaVista()}<br />"; echo "Cheque: {$venda->vendaCheque()}<br />"; echo "Cartao: {$venda->vendaCartao()}<br />"; Saída: === Orçamento === Preço: 90 Desconto: 10 À vista: 80 Cheque: 89 Cartão: 96.2
  • 66. • Classes e Métodos Abstratos – Exemplo 02 – Adição do método abstrato imprimeOrcamento Orientação a Objetos 13/02/2011 66 // Classe Abstrata Venda.php abstract class Venda { private $valor = 0.0; private $desconto = 0.0; public function __set($atributo, $valor) { $this->$atributo = $valor; } public function __get($atributo) { return $this->$atributo; } abstract function imprimeOrcamento($valor, $desconto); }
  • 67. • Classes e Métodos Abstratos – Exemplo 02 – Adição do método abstrato imprimeOrcamento Orientação a Objetos 13/02/2011 67 // Classe Orcamento.php class Orcamento extends Venda { ... public function imprimeOrcamento($valor, $desconto) { $this->__set('valor', $valor); $this->__set('desconto', $desconto); echo "<strong> === Orcamento === </strong><br /><br />"; echo "Preco: {$this->__get('valor')}<br />"; echo "Desconto: {$this->__get('desconto')}<br />"; echo "A vista: {$this->vendaVista()}<br />"; echo "Cheque: {$this->vendaCheque()}<br />"; echo "Cartao: {$this->vendaCartao()}<br /><br />"; } ... }
  • 68. • Classes e Métodos Abstratos – Exemplo 02 – Adição do método abstrato imprimeOrcamento Orientação a Objetos 13/02/2011 68 // appVenda.php $a = Util::httpRequest('a'); $b = Util::httpRequest('b'); if(!empty($a) and !empty($b)) { $venda = new Orcamento(); $venda->imprimeOrcamento($a, $b); echo "<button onclick="window.location='appVenda.php'"> >> Refazer Orçamento </button>"; } else {?> <form method="post"> Valor <input type="text" name="a" /> <br /> Desconto <input type="text" name="b"> <br /> <input type="submit" value=" >> Gerar Orçamento " /> </form> <?php } Saída:
  • 69. • Interfaces – Interfaces de Objetos permitem a criação de código que especifica quais métodos e variáveis uma classe deve implementar, sem ter que definir como esses métodos serão tratados. – A Interface é um contrato da classe. Interfaces são definidas usando a palavra-chave 'interface', da mesma maneira que uma classe comum, mas sem nenhum dos métodos ter seu conteúdo definido. Orientação a Objetos 13/02/2011 69
  • 70. • Interfaces – Todos os métodos declarados em uma interface devem ser public, essa é a natureza de uma interface. Para implementar uma interface, o operador implements é usado. – Todos os métodos na interface devem ser implementados na classe; não fazer isso resultará em um erro fatal. – Classes podem implementar mais de uma interface se assim for desejado, separando cada interface com uma vírgula. Orientação a Objetos 13/02/2011 70 Nota: Uma classe não pode implementar duas interfaces que compartilham o mesmo nome uma vez que isso causaria ambiguidade.
  • 71. • Interfaces – Exemplo 01 - Interface OperacoesMatematicas Orientação a Objetos 13/02/2011 71 // Interface IOperacoesMatematicas.php interface IOperacoesMatematicas { public static function soma($x, $y); public static function subtracao($x, $y); public static function multiplicacao($x, $y); public static function divisao($x, $y); public static function imprimeOperacoes($x, $y); }
  • 72. • Interfaces – Exemplo 01 – Classe OpMatematicas que implementa a interface OperacoesMatematicas Orientação a Objetos 13/02/2011 72 // Classe OpsMatematicas.php class OpMatematicas implements IOperacoesMatematicas { public static function soma($x, $y){ return $x + $y; } public static function subtracao($x, $y) { return $x - $y; } public static function multiplicacao($x, $y) { return $x * $y; } public static function divisao($x, $y) { return ($y <> 0) ? $x / $y : 'Divsao por zero!'; } public static function imprimeOperacoes($a, $b) { echo "<b>As operacoes matematicas entre $a e $b sao</b>: <br />"; echo "Soma: ".OpMatematicas::soma($a, $b)."<br />"; echo "Subtracao: ".OpMatematicas::subtracao($a, $b)."<br />"; echo "Multiplicacao: ".OpMatematicas::multiplicacao($a, $b)."<br />"; echo "Divisao: ".OpMatematicas::divisao($a, $b)."<br />"; } }
  • 73. • Interfaces – Exemplo 01 – Aplicação appOpMatematicas Orientação a Objetos 13/02/2011 73 // appOpMatematicas.php $a = Util::httpRequest('a'); $b = Util::httpRequest('b'); if(!empty($a) and !empty($b)) { OpMatematicas::imprimeOperacoes($a, $b); } else { ?> <form method="post"> 1º Número: <input type="text" name="a" /> <br /> 2º Número: <input type="text" name="b" /> <br /> <input type="submit" value=" >> Calcular " /> </form> <?php } Saída: As operacoes matemáticas entre 7 e 9 são: Soma: 16 Subtracao: -2 Multiplicacao: 63 Divisao: 0.77777777777778
  • 74. • Polimorfismo – É a capacidade de dois ou mais objetos de diferentes classes responderem à mesma mensagem de diferentes maneiras. Ou seja, é um recurso que possibilita que objetos diferentes sejam tratados por uma interface única. – O Polimorfismo se define então na implementação de diversos comportamentos em diferentes classes, que se relacionam através de uma única Interface ou Superclasse. Orientação a Objetos 13/02/2011 74
  • 75. • Polimorfismo Orientação a Objetos 13/02/2011 75 interface IAnuncioImobiliaria // IAnuncioImobiliaria.php { public static function imprimeDados(); } class Anuncio1 implements IAnuncioImobiliaria { // Anuncio1.php private static $dados = 'Casa, 2 quartos, sala, cozinha, R. 37, Qd. 32, JD Oriente, Cuiabá-MT;'; public static function imprimeDados() {echo self::$dados; } } class Anuncio2 implements IAnuncioImobiliaria {// Anuncio2.php public static $dados = 'AP, 3 quartos, sala, cozinha, 2 garagens, R. Barão Franca, Qd. 02, Rodovalho, Goiânia-GO;'; public static function imprimeDados() {echo self::$dados; } } class Anuncio3 implements IAnuncioImobiliaria // Anuncio3.php { public static $dados = 'Sobrado, 5 quartos, 2 salas, 2 cozinhas, 3 garagens, SEPN, Qd. 205, Brasília-DF'; public static function imprimeDados() {echo self::$dados; } }
  • 76. • Polimorfismo Orientação a Objetos 13/02/2011 76 // appAnuncios.php echo '<b>Anúncio imobiliário</b>: <br /><br />'; Anuncio1::imprimeDados(); echo '<br />'; Anuncio2::imprimeDados(); echo '<br />'; Anuncio3::imprimeDados(); Saída: Anúncio imobiliário: Casa, 2 quartos, sala, cozinha, R. 37, Qd. 32, JD Oriente, Cuiabá-MT; AP, 3 quartos, sala, cozinha, 2 garagens, R. Barão Franca, Qd. 02, Rodovalho, Goiânia-GO; Sobrado, 5 quartos, 2 salas, 2 cozinhas, 3 garagens, SEPN, Qd. 205, Brasília-DF
  • 77. • Exceções – PHP 5 tem um modelo de exceção é similar ao de outras linguagens de programação. Uma exceção pode ser disparada (thrown), ou pega (caught ou "catched") no PHP. – Podemos implementar um código PHP em um bloco try, para facilitar a captura de exceções em potencial. – Cada bloco try, deve ter pelo menos um bloco catch correspondente. Orientação a Objetos 13/02/2011 77
  • 78. • Exceções – Vários blocos catch podem ser usados para pegar diferentes classes de exceções. – A execução normal (quando nenhuma exceção é disparada dentro de um bloco try ou quando um catch compatível com a classe da exceção disparada não estiver presente) continuará após o último bloco catch definido na sequência. – Exceções podem ser disparadas (ou re-disparadas) dentro de um bloco catch. Orientação a Objetos 13/02/2011 78
  • 79. • Exceções – Quando uma exceção é disparada, o código logo após à instrução não será executada, e o PHP tentará achar o primeiro bloco catch correspondente à exceção disparada. Orientação a Objetos 13/02/2011 79
  • 80. • Exceções – Criando uma classe de Exceção para uma classe Orientação a Objetos 13/02/2011 80 // DivisaoException.php class DivisaoException extends Exception {} // Divisao.php class Divisao { public function __construct($a, $b) { if ($b == 0) { throw new DivisaoException('Erro - Divisão por zero!'); } } }
  • 81. • Exceções – Criando uma aplicação para disparar a Exceção Orientação a Objetos 13/02/2011 81 // appException.php try { $divisao = new Divisao(5, 0); } catch (DivisaoException $e) { echo "Mensagem: {$e->getMessage()} <br /> Linha: {$e->getLine()} <br /> Arquivo: {$e->getFile()} <br /> Codigo: {$e->getCode()}"; } Saída: Mensagem: Erro - Divisão por zero! Linha: 8 Arquivo: D:ZendApache2htdocsphp5.3-objetosclassDivisao.php Codigo: 0
  • 82. • Simple XML – O SimpleXML provê um conjunto de ferramentas muito fácil e simples de usar para converter XML em objetos que podem ser processados normalmente com seletores de propriedades e iteradores de arrays. – A extensão SimpleXML requer PHP 5. – A extensão SimpleXML é habilitada por padrão. Orientação a Objetos 13/02/2011 82
  • 83. • Simple XML – Criando o arquivo XML Orientação a Objetos 13/02/2011 83 // Arquivo biblioteca.xml <?xml version="1.0" encoding="UTF-8"?> <biblioteca> <categoria id="tecnico"> <livro> <titulo>PHP 5 - Programação Poderosa</titulo> <autor>Andi Gutmans, Stig Bakken, Derick Rethans</autor> </livro> <livro> <titulo>Zend Framework in Action</titulo> <autor>Rob Allen</autor> </livro> </categoria> </biblioteca>
  • 84. • Simple XML – Criando uma aplicação com a extensão Orientação a Objetos 13/02/2011 84 // appSimpleXml.php $biblioteca = simplexml_load_file('./inc/biblioteca.xml'); foreach ($biblioteca->categoria as $categoria) { echo "Categoria: " . $categoria['id'] . '<br>'; foreach ($categoria->livro as $livro) { echo "Titulo: " . $livro->titulo . '<br>'; echo "Autor: " . $livro->autor . '<br>'; } } Saída: Categoria: Técnico Titulo: PHP 5 - Programação Poderosa Autor: Andi Gutmans, Stig Bakken, Derick Rethans Titulo: Zend Framework in Action Autor: Rob Allen
  • 85. • Padrões de Projeto – Os padrões de projeto de software ou padrões de desenho de software, também muito conhecido pelo termo original em inglês Design Patterns, descrevem soluções para problemas recorrentes no desenvolvimento de sistemas de software orientados a objetos. Orientação a Objetos 13/02/2011 85
  • 86. • Padrões de Projeto – Objetivos • Reutilização de código • Melhores práticas de programação • Solução para problemas do dia a dia Orientação a Objetos 13/02/2011 86
  • 87. • Padrões de Projeto – Singleton • O Design Pattern Singleton é um dos padrões de projetos mais fáceis que existe. Ele que garante a existência de uma única instância de uma determinada classe para um objeto, mantendo um ponto global de acesso ao seu objeto. • Este padrão é utilizado consequentemente em implementações que necessitam de classes que disponibilizam apenas uma instância do objeto na aplicação. Orientação a Objetos 13/02/2011 87
  • 88. • Singleton – Criando a classe Orientação a Objetos 13/02/2011 88 // Classe Singleton.php class Singleton { // instancia da classe private static $objDaClasse = null; private function __construct() { /* ... */ } public static function getObjDaClasse() { if (self::$objDaClasse === null) { self::$objDaClasse = new Singleton(); } return self::$objDaClasse; } }
  • 89. • Singleton – Criando uma aplicação para testar o objeto Singleton Orientação a Objetos 13/02/2011 89 // appSingleton.php $o1 = Singleton::getObjDaClasse(); $o2 = Singleton::getObjDaClasse(); $o3 = Singleton::getObjDaClasse(); echo '<pre>'; var_dump($o1); var_dump($o2); var_dump($o3); Apenas um objeto daclasse é criado em memória Saída: object(Singleton)#1 (0) { } object(Singleton)#1 (0) { } object(Singleton)#1 (0) { }