O documento apresenta os conceitos básicos de orientação a objetos em PHP, incluindo:
1. Definição de classes com propriedades e métodos;
2. Criação de instâncias de classes e acesso aos membros;
3. Visibilidade de propriedades e métodos (público, protegido e privado).
1. Tchelinux 2010 – Porto Alegre
Introdução a orientação a objetos
com PHP
Guilherme Mar
gfmarster@gmail.com
Sobre esta apresentação:
- Nível:
Iniciante / Intermediário
- Escopo:
Iniciando com Orientação a objetos, vendo principais características
- Pré-requisitos:
Lógica, básico em PHP e vontade de aprender.
2. OO com PHP Tchelinux 2010 -Porto Alegre
class Veiculo
{
public $placa;
protected $cor;
private $ano;
public function setTudo($placa, $cor, $ano){
$this->placa = $placa;
$this->ano = $ano;
$this->cor = $cor;
}
public function setAno($ano){
$this->ano = $ano;
}
public function getAno(){
return $this->ano;
}
}
ESTRUTURA
3. OO com PHP
class Veiculo
{
/* Propriedades */
public $placa;
public $cor;
Public $ano;
/* Métodos */
public function setTudo($placa, $cor, $ano){
$this->placa = $placa;
$this->ano = $ano;
$this->cor = $cor;
}
public function setAno($ano){
$this->ano = $ano;
}
public function getAno(){
return $this->ano;
}
}
ESTRUTURA
Propriedades
São as nossas conhecidas
variáveis, que dentro de uma classe
passa a ser chamada de propriedade
Métodos
São funções, onde é colocada toda
regra de negocio da classe
Lembrando que não se coloca lógica
solta na classe, apenas dentro de
métodos (funções)
Tchelinux 2010 -Porto Alegre
4. OO com PHP
NOTA
Mas não podemos sair montando como bem se intende, por ser voltado a
grandes desenvolvimentos, com vários programadores, recomenda-se o uso de
alguns padrões:
Por convenção usa-se a primeira letra maiúscula, e em caso de haver troca de
palavra segue o padrão “camel case” ( corcova de camelo ). Ex.:
LivroVisitas TesteMemoria Carro Moto ContatoEmpresa
Nome de classe com primeira letra maiúscula
Nome de métodos com a primeira letra minuscula
Utiliza-se o padrão “camel case” ( corcova de camelo ), mas com a primeira letra
minuscula Ex.:
adcionarContato visualizarDisco adicionar
Arquivos com o mesmo nome da classe
Recomenda colocar uma classe por arquivo e este arquivo possuir o mesmo nome da
classe, respeitando inclusive letras maiúsculas e minusculas.
Tchelinux 2010 -Porto Alegre
5. OO com PHP
require_once "Veiculo.php";
$veiculo = new Veiculo();
$veiculo->setTudo('abc','red',1998);
echo $veiculo->getAno();
echo “<br>”
echo $veiculo->cor;
INSTANCIANDO UM CLASSE
Deve ser feito um include
do arquivo da classe
new responsável por criar uma instancia da classe na variável.
-> modo de acessar as propriedades ou métodos da classe.
class Veiculo
{
/* Propriedades */
public $placa;
public $cor;
Public $ano;
/* Métodos */
public function setTudo($placa, $cor, $ano){
$this->placa = $placa;
$this->ano = $ano;
$this->cor = $cor;
}
public function setAno($ano){
$this->ano = $ano;
}
public function getAno(){
return $this->ano;
}
}
Tchelinux 2010 -Porto Alegre
6. OO com PHP
class Veiculo
{
/* Propriedades */
public $placa;
public $cor;
Public $ano;
/* Métodos */
public function setTudo($placa, $cor, $ano){
$this->placa = $placa;
$this->ano = $ano;
$this->cor = $cor;
}
public function setAno($ano){
$this->ano = $ano;
}
public function getAno(){
return $this->ano;
}
}
A PALAVRA RESERVADA THIS
O this, que no caso é tratado como
uma variável ( note o $ junto dele ) é
utilizado para acessar propriedades e
métodos que são da própria classe.
Repare o método setTudo.
Tchelinux 2010 -Porto Alegre
7. OO com PHP
VISIBILIDADE
As classes possuem três tipos diferentes de visibilidade em seus métodos e propriedades:
protected
Este é o padrão, permite a propriedade ou método ser acessada por qualquer um no
desenvolvimento.
public
Restringe o acesso a classes herdadas e a própria classe.
private
Apenas a própria classe enxerga os métodos e propriedades com este tipo de visibilidade.
Tchelinux 2010 -Porto Alegre
8. OO com PHP
CONSTRUTORES E DESTRUTORES
Construtores, são métodos que são chamados automaticamente na hora que uma classe é
instanciada.
No PHP um construtor se chama utilizando o método __construct()
public function __construct()
{
/* regra de negócio */
}
Destrutores, são métodos que são chamados automaticamente na hora que uma classe é
encerrada, sendo no PHP um destrutor muito pouco utilizado.
No PHP um destrutor se chama utilizando o método __destruct()
public function __destruct()
{
/* regra de negocio */
}
Nota: Antes do PHP 5, o construtor era um método com o mesmo nome da classe, sendo
este modelo suportado até versões novas. Mas não é recomendado seu uso, apenas em caso
de servidores que não suportem PHP5.
Tchelinux 2010 -Porto Alegre
9. OO com PHP
class Veiculo
{
public $placa;
protected $cor;
private $ano;
public function __construct($placa, $cor, $ano){
$this->placa = $placa;
$this->ano = $ano;
$this->cor = $cor;
}
public function __destruct(){
echo “Classe destruida”;
}
}
CONSTRUTORES E DESTRUTORES
require_once "classes/Veiculo.php";
$carro = new Veiculo("IGV-2009", "vermelho");
Nota: Métodos __construct e __destruct devem sempre possuir a visibilidade do tipo
public, caso contrário irá ocorrer erro.
Tchelinux 2010 -Porto Alegre
10. OO com PHP
GETS AND SETS
Recomenda-se, deixar as propriedades todas elas com visibilidade private, criando assim
métodos para popular e recuperar a propriedade. Métodos esses chamados de set e get.
class Veiculo
{
private $placa;
private $cor;
Private $ano;
public function setPlaca($placa){
$this->placa = $placa;
}
public function getPlaca(){
return $this->placa;
}
public function setCor($cor){
$this->cor = $cor;
}
public function getCor(){
return $this->cor;
}
public function setAno($ano){
$this->ano = $ano;
}
public function getAno(){
return $this->ano;
}
}
require_once "Veiculo.php";
$veiculo = new Veiculo();
$veiculo->setAno(1982);
$veiculo->setCor("Preto");
$veiculo->setPlaca("TLX-2009");
echo $carro->getAno();
echo $carro->getCor();
echo $carro->getPlaca();
Tchelinux 2010 -Porto Alegre
11. OO com PHP
EXTENSÕES
Extensões de classes, são classes que herdam propriedades e métodos de uma outra já
existente.
class Veiculo
{
private $placa;
protected $cor;
Protected $ano;
public function setTudo($placa, $cor, $ano){
$this->placa = $placa;
$this->ano = $ano;
$this->cor = $cor;
}
public function setPlaca($placa){
$this->placa = $placa;
}
public function getPlaca(){
return $this->placa;
}
/* ... */
}
require_once "Veiculo.php";
class Carro extends veiculo
{
private $qtdCintos;
public function setTudo($placa, $cor,
$ano, $qtdCintos){
parent::setTudo($placa, $cor, $ano);
$this->setCintos($qtdCintos);
}
public function setCintos($qtdCintos){
$this->qtdCintos = $qtdCintos;
}
public function getCintos(){
return $this->qtdCintos;
}
}
Tchelinux 2010 -Porto Alegre
12. OO com PHP
EXTENSÕES
class Veiculo
{
private $placa;
protected $cor;
Protected $ano;
public function setTudo($placa, $cor, $ano){
$this->placa = $placa;
$this->ano = $ano;
$this->cor = $cor;
}
public function setPlaca($placa){
$this->placa = $placa;
}
public function getPlaca(){
return $this->placa;
}
/* ... */
}
require_once "Veiculo.php";
class Carro extends veiculo
{
private $qtdCintos;
public function setTudo($placa, $cor,
$ano, $qtdCintos){
parent::setTudo($placa, $cor, ano);
$this->setCintos($qtdCintos);
}
public function setCintos($qtdCintos){
$this->qtdCintos = $qtdCintos;
}
public function getCintos(){
return $this->qtdCintos;
}
}
require_once "classes/Carro.php";
$carro = new Carro();
$carro->setTudo("IGV-2009","amarelo", 2009, 5);
echo $carro->getPlaca(); // IGV-2009
echo $carro->getCor(); // amarelo
echo $carro->getAno(); // 2009
echo $carro->getCintos(); // 5
Tchelinux 2010 -Porto Alegre
13. OO com PHP
OS DOIS PONTOS DUPLOS
Você deve ter notado no decorrer deste documento, as palavras self e parent. Pois
bem, o self é utilizado para acessas constantes ( lembra do const ?? ) na própria
classe. Enquanto o parent é utilizado em classes estendidas para acessarem
constantes e métodos na classe pai que foram sobrescritos pela classe filha.
Com self e parent não se pode utilizar “->” e sim :: como visto no decorrer do
documento. O mesmo para quando se deseja acessar algum método ou constante
de uma classe sem instancia-la Se utiliza o nome da classe, seguida dos dois pontos
duplos e depois o método ou constante desejada.
Tchelinux 2010 -Porto Alegre
14. Tchelinux 2010 – Porto Alegre
Introdução a orientação a objetos
com PHP
Guilherme Mar
gfmarster@gmail.com