SlideShare a Scribd company logo
1 of 89
Download to read 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) {
}

More Related Content

What's hot

Redux Toolkit & RTK Query in TypeScript: tips&tricks
Redux Toolkit & RTK Query in TypeScript: tips&tricksRedux Toolkit & RTK Query in TypeScript: tips&tricks
Redux Toolkit & RTK Query in TypeScript: tips&tricksFabio Biondi
 
JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java Youness Boukouchi
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Ippon
 
Alphorm.com Formation Elastic : Maitriser les fondamentaux
Alphorm.com Formation Elastic : Maitriser les fondamentauxAlphorm.com Formation Elastic : Maitriser les fondamentaux
Alphorm.com Formation Elastic : Maitriser les fondamentauxAlphorm
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)Helder da Rocha
 
AngularJS - Présentation (french)
AngularJS - Présentation (french)AngularJS - Présentation (french)
AngularJS - Présentation (french)Yacine Rezgui
 
Design patterns avec Symfony
Design patterns avec SymfonyDesign patterns avec Symfony
Design patterns avec SymfonyMohammed Rhamnia
 
Les Streams de Java 8
Les Streams de Java 8Les Streams de Java 8
Les Streams de Java 8Antoine Rey
 
Stored Procedures and Triggers
Stored Procedures and TriggersStored Procedures and Triggers
Stored Procedures and Triggersflaviognm
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JSAbdoulaye Dieng
 

What's hot (20)

Redux Toolkit & RTK Query in TypeScript: tips&tricks
Redux Toolkit & RTK Query in TypeScript: tips&tricksRedux Toolkit & RTK Query in TypeScript: tips&tricks
Redux Toolkit & RTK Query in TypeScript: tips&tricks
 
JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
 
Spring ioc
Spring iocSpring ioc
Spring ioc
 
Java
JavaJava
Java
 
Alphorm.com Formation Elastic : Maitriser les fondamentaux
Alphorm.com Formation Elastic : Maitriser les fondamentauxAlphorm.com Formation Elastic : Maitriser les fondamentaux
Alphorm.com Formation Elastic : Maitriser les fondamentaux
 
Architecture .net
Architecture  .netArchitecture  .net
Architecture .net
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
 
AngularJS - Présentation (french)
AngularJS - Présentation (french)AngularJS - Présentation (french)
AngularJS - Présentation (french)
 
Design patterns avec Symfony
Design patterns avec SymfonyDesign patterns avec Symfony
Design patterns avec Symfony
 
Les Streams de Java 8
Les Streams de Java 8Les Streams de Java 8
Les Streams de Java 8
 
Introduction à Angular 2
Introduction à Angular 2Introduction à Angular 2
Introduction à Angular 2
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
 
Stored Procedures and Triggers
Stored Procedures and TriggersStored Procedures and Triggers
Stored Procedures and Triggers
 
Igl cours 3 - introduction à uml
Igl   cours 3 - introduction à umlIgl   cours 3 - introduction à uml
Igl cours 3 - introduction à uml
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JS
 
POO - 11 - Prática de Herança
POO - 11 - Prática de HerançaPOO - 11 - Prática de Herança
POO - 11 - Prática de Herança
 
Linguagem C - Ponteiros
Linguagem C - PonteirosLinguagem C - Ponteiros
Linguagem C - Ponteiros
 
POO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdfPOO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdf
 
cours-dns TRI.pdf
cours-dns TRI.pdfcours-dns TRI.pdf
cours-dns TRI.pdf
 

Viewers also liked

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
 
SEO para Front-End - BeagaJS
SEO para Front-End - BeagaJSSEO para Front-End - BeagaJS
SEO para Front-End - BeagaJSFabio Ricotta
 
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ênciasRafael da Silva
 
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-modernaMaysa Brum
 
Jogos em Python utilizando PyGame
Jogos em Python utilizando PyGameJogos em Python utilizando PyGame
Jogos em Python utilizando PyGameMayron Cachina
 
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 bibliotecasCarolina Barros
 
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 JavaAparicio Junior
 
Minicurso de python - CACC UFPA 2010
Minicurso de python - CACC UFPA 2010Minicurso de python - CACC UFPA 2010
Minicurso de python - CACC UFPA 2010Diego Damasceno
 
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 - #S4S2015Fabio Ricotta
 
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 AndroidSalvador Torres
 
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áxiasDavidson Fellipe
 
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 1Erisvaldo Junior
 
Curso de Android Aula 4
Curso de Android Aula 4Curso de Android Aula 4
Curso de Android Aula 4Jose Berardo
 

Viewers also liked (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
 

Similar to PHP 5.3 - Classes e Objetos

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)George Mendonça
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Thyago Maia
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosDaniel Brandão
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Elton Minetto
 
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 1Thyago Maia
 
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 DoctrineOtávio Calaça Xavier
 
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 objetosxbacon
 
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 ...Manuel Menezes de Sequeira
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1Filipo Mór
 
Desenvolvimento Web com PHP - Aula 1
Desenvolvimento Web com PHP - Aula 1Desenvolvimento Web com PHP - Aula 1
Desenvolvimento Web com PHP - Aula 1Thyago Maia
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012Luís Cobucci
 
Dependency injection WTF? - PHPSC Conference 2012
Dependency injection WTF? - PHPSC Conference 2012Dependency injection WTF? - PHPSC Conference 2012
Dependency injection WTF? - PHPSC Conference 2012Luís Cobucci
 
Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009silva.edgar
 
Introdução a poo
Introdução a pooIntrodução a poo
Introdução a pooSedu
 

Similar to 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
 

More from George Mendonça

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 2016George Mendonça
 
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 FGSLGeorge Mendonça
 
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 ...George Mendonça
 
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çãoGeorge Mendonça
 
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êmicoGeorge Mendonça
 
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...George Mendonça
 
Confirurando Dababase Development no Eclipse Luna
Confirurando Dababase Development no Eclipse LunaConfirurando Dababase Development no Eclipse Luna
Confirurando Dababase Development no Eclipse LunaGeorge Mendonça
 
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 mundoGeorge Mendonça
 
Libre Office Magazine Edição 11
Libre Office Magazine Edição 11Libre Office Magazine Edição 11
Libre Office Magazine Edição 11George Mendonça
 
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° FGSLGeorge Mendonça
 
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 LivreGeorge Mendonça
 
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 LivresGeorge Mendonça
 
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 WordPressGeorge Mendonça
 
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 2013George Mendonça
 
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...George Mendonça
 
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...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 IgrejaGeorge Mendonça
 
Curriculum - George Mendonça
Curriculum - George MendonçaCurriculum - George Mendonça
Curriculum - George MendonçaGeorge Mendonça
 

More from 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
 

Recently uploaded

autismo conhecer.pptx, Conhecer para entender
autismo conhecer.pptx, Conhecer para entenderautismo conhecer.pptx, Conhecer para entender
autismo conhecer.pptx, Conhecer para entenderLucliaResende1
 
ARTE BARROCA E ROCOCO BRASILEIRO-min.pdf
ARTE BARROCA E ROCOCO BRASILEIRO-min.pdfARTE BARROCA E ROCOCO BRASILEIRO-min.pdf
ARTE BARROCA E ROCOCO BRASILEIRO-min.pdfItaloAtsoc
 
Slides Lição 1, CPAD, O Início da Caminhada, 2Tr24, Pr Henrique.pptx
Slides Lição 1, CPAD, O Início da Caminhada, 2Tr24, Pr Henrique.pptxSlides Lição 1, CPAD, O Início da Caminhada, 2Tr24, Pr Henrique.pptx
Slides Lição 1, CPAD, O Início da Caminhada, 2Tr24, Pr Henrique.pptxLuizHenriquedeAlmeid6
 
QUIZ - GEOGRAFIA - 8º ANO - FASES DO CAPITALISMO.pptx
QUIZ - GEOGRAFIA - 8º ANO - FASES DO CAPITALISMO.pptxQUIZ - GEOGRAFIA - 8º ANO - FASES DO CAPITALISMO.pptx
QUIZ - GEOGRAFIA - 8º ANO - FASES DO CAPITALISMO.pptxAntonioVieira539017
 
Aula 6 - O Imperialismo e seu discurso civilizatório.pptx
Aula 6 - O Imperialismo e seu discurso civilizatório.pptxAula 6 - O Imperialismo e seu discurso civilizatório.pptx
Aula 6 - O Imperialismo e seu discurso civilizatório.pptxMarceloDosSantosSoar3
 
A Congregação de Jesus e Maria, conhecida também como os Eudistas, foi fundad...
A Congregação de Jesus e Maria, conhecida também como os Eudistas, foi fundad...A Congregação de Jesus e Maria, conhecida também como os Eudistas, foi fundad...
A Congregação de Jesus e Maria, conhecida também como os Eudistas, foi fundad...Unidad de Espiritualidad Eudista
 
FORMAÇÃO POVO BRASILEIRO atividade de história
FORMAÇÃO POVO BRASILEIRO atividade de históriaFORMAÇÃO POVO BRASILEIRO atividade de história
FORMAÇÃO POVO BRASILEIRO atividade de históriaBenigno Andrade Vieira
 
Cruzadinha da dengue - Mosquito Aedes aegypti
Cruzadinha da dengue - Mosquito Aedes aegyptiCruzadinha da dengue - Mosquito Aedes aegypti
Cruzadinha da dengue - Mosquito Aedes aegyptiMary Alvarenga
 
Ressonancia_magnetica_basica_slide_da_net.pptx
Ressonancia_magnetica_basica_slide_da_net.pptxRessonancia_magnetica_basica_slide_da_net.pptx
Ressonancia_magnetica_basica_slide_da_net.pptxPatriciaFarias81
 
Poema sobre o mosquito Aedes aegipyti -
Poema sobre o mosquito Aedes aegipyti  -Poema sobre o mosquito Aedes aegipyti  -
Poema sobre o mosquito Aedes aegipyti -Mary Alvarenga
 
1. CIENCIAS-HUMANAS-GLOBALIZAÇÃO, TEMPO E ESPAÇO-V1.pdf
1. CIENCIAS-HUMANAS-GLOBALIZAÇÃO, TEMPO E ESPAÇO-V1.pdf1. CIENCIAS-HUMANAS-GLOBALIZAÇÃO, TEMPO E ESPAÇO-V1.pdf
1. CIENCIAS-HUMANAS-GLOBALIZAÇÃO, TEMPO E ESPAÇO-V1.pdfRitoneltonSouzaSanto
 
Depende De Nós! José Ernesto Ferraresso.ppsx
Depende De Nós! José Ernesto Ferraresso.ppsxDepende De Nós! José Ernesto Ferraresso.ppsx
Depende De Nós! José Ernesto Ferraresso.ppsxLuzia Gabriele
 
Atividade de matemática para simulado de 2024
Atividade de matemática para simulado de 2024Atividade de matemática para simulado de 2024
Atividade de matemática para simulado de 2024gilmaraoliveira0612
 
Trabalho DAC História 25 de Abril de 1974
Trabalho DAC História 25 de Abril de 1974Trabalho DAC História 25 de Abril de 1974
Trabalho DAC História 25 de Abril de 1974AnaRitaFreitas7
 
Verbos - transitivos e intransitivos.pdf
Verbos -  transitivos e intransitivos.pdfVerbos -  transitivos e intransitivos.pdf
Verbos - transitivos e intransitivos.pdfKarinaSouzaCorreiaAl
 
Caça palavras - BULLYING
Caça palavras  -  BULLYING  Caça palavras  -  BULLYING
Caça palavras - BULLYING Mary Alvarenga
 

Recently uploaded (20)

Abordagens 4 (Problematização) e 5 (Síntese pessoal) do texto de Severino (20...
Abordagens 4 (Problematização) e 5 (Síntese pessoal) do texto de Severino (20...Abordagens 4 (Problematização) e 5 (Síntese pessoal) do texto de Severino (20...
Abordagens 4 (Problematização) e 5 (Síntese pessoal) do texto de Severino (20...
 
autismo conhecer.pptx, Conhecer para entender
autismo conhecer.pptx, Conhecer para entenderautismo conhecer.pptx, Conhecer para entender
autismo conhecer.pptx, Conhecer para entender
 
ARTE BARROCA E ROCOCO BRASILEIRO-min.pdf
ARTE BARROCA E ROCOCO BRASILEIRO-min.pdfARTE BARROCA E ROCOCO BRASILEIRO-min.pdf
ARTE BARROCA E ROCOCO BRASILEIRO-min.pdf
 
Slides Lição 1, CPAD, O Início da Caminhada, 2Tr24, Pr Henrique.pptx
Slides Lição 1, CPAD, O Início da Caminhada, 2Tr24, Pr Henrique.pptxSlides Lição 1, CPAD, O Início da Caminhada, 2Tr24, Pr Henrique.pptx
Slides Lição 1, CPAD, O Início da Caminhada, 2Tr24, Pr Henrique.pptx
 
QUIZ - GEOGRAFIA - 8º ANO - FASES DO CAPITALISMO.pptx
QUIZ - GEOGRAFIA - 8º ANO - FASES DO CAPITALISMO.pptxQUIZ - GEOGRAFIA - 8º ANO - FASES DO CAPITALISMO.pptx
QUIZ - GEOGRAFIA - 8º ANO - FASES DO CAPITALISMO.pptx
 
Aula 6 - O Imperialismo e seu discurso civilizatório.pptx
Aula 6 - O Imperialismo e seu discurso civilizatório.pptxAula 6 - O Imperialismo e seu discurso civilizatório.pptx
Aula 6 - O Imperialismo e seu discurso civilizatório.pptx
 
A Congregação de Jesus e Maria, conhecida também como os Eudistas, foi fundad...
A Congregação de Jesus e Maria, conhecida também como os Eudistas, foi fundad...A Congregação de Jesus e Maria, conhecida também como os Eudistas, foi fundad...
A Congregação de Jesus e Maria, conhecida também como os Eudistas, foi fundad...
 
(42-ESTUDO - LUCAS) DISCIPULO DE JESUS
(42-ESTUDO - LUCAS)  DISCIPULO  DE JESUS(42-ESTUDO - LUCAS)  DISCIPULO  DE JESUS
(42-ESTUDO - LUCAS) DISCIPULO DE JESUS
 
Abordagem 2. Análise temática (Severino, 2013)_PdfToPowerPoint.pdf
Abordagem 2. Análise temática (Severino, 2013)_PdfToPowerPoint.pdfAbordagem 2. Análise temática (Severino, 2013)_PdfToPowerPoint.pdf
Abordagem 2. Análise temática (Severino, 2013)_PdfToPowerPoint.pdf
 
FORMAÇÃO POVO BRASILEIRO atividade de história
FORMAÇÃO POVO BRASILEIRO atividade de históriaFORMAÇÃO POVO BRASILEIRO atividade de história
FORMAÇÃO POVO BRASILEIRO atividade de história
 
Cruzadinha da dengue - Mosquito Aedes aegypti
Cruzadinha da dengue - Mosquito Aedes aegyptiCruzadinha da dengue - Mosquito Aedes aegypti
Cruzadinha da dengue - Mosquito Aedes aegypti
 
Ressonancia_magnetica_basica_slide_da_net.pptx
Ressonancia_magnetica_basica_slide_da_net.pptxRessonancia_magnetica_basica_slide_da_net.pptx
Ressonancia_magnetica_basica_slide_da_net.pptx
 
Poema sobre o mosquito Aedes aegipyti -
Poema sobre o mosquito Aedes aegipyti  -Poema sobre o mosquito Aedes aegipyti  -
Poema sobre o mosquito Aedes aegipyti -
 
1. CIENCIAS-HUMANAS-GLOBALIZAÇÃO, TEMPO E ESPAÇO-V1.pdf
1. CIENCIAS-HUMANAS-GLOBALIZAÇÃO, TEMPO E ESPAÇO-V1.pdf1. CIENCIAS-HUMANAS-GLOBALIZAÇÃO, TEMPO E ESPAÇO-V1.pdf
1. CIENCIAS-HUMANAS-GLOBALIZAÇÃO, TEMPO E ESPAÇO-V1.pdf
 
Abordagem 3. Análise interpretativa (Severino, 2013)_PdfToPowerPoint.pdf
Abordagem 3. Análise interpretativa (Severino, 2013)_PdfToPowerPoint.pdfAbordagem 3. Análise interpretativa (Severino, 2013)_PdfToPowerPoint.pdf
Abordagem 3. Análise interpretativa (Severino, 2013)_PdfToPowerPoint.pdf
 
Depende De Nós! José Ernesto Ferraresso.ppsx
Depende De Nós! José Ernesto Ferraresso.ppsxDepende De Nós! José Ernesto Ferraresso.ppsx
Depende De Nós! José Ernesto Ferraresso.ppsx
 
Atividade de matemática para simulado de 2024
Atividade de matemática para simulado de 2024Atividade de matemática para simulado de 2024
Atividade de matemática para simulado de 2024
 
Trabalho DAC História 25 de Abril de 1974
Trabalho DAC História 25 de Abril de 1974Trabalho DAC História 25 de Abril de 1974
Trabalho DAC História 25 de Abril de 1974
 
Verbos - transitivos e intransitivos.pdf
Verbos -  transitivos e intransitivos.pdfVerbos -  transitivos e intransitivos.pdf
Verbos - transitivos e intransitivos.pdf
 
Caça palavras - BULLYING
Caça palavras  -  BULLYING  Caça palavras  -  BULLYING
Caça palavras - BULLYING
 

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) { }