Skip to content

Instantly share code, notes, and snippets.

@rssilva
Created January 21, 2013 22:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rssilva/4589935 to your computer and use it in GitHub Desktop.
Save rssilva/4589935 to your computer and use it in GitHub Desktop.
First part of my post about OO in PHP on dailydevtips.com
<?php
//vamos criar uma classe Robot, que tem certos atributos
class Robot {
public $nome = ''; //um nome que também pode ser um número de série
public $bracos = 0; //quantidade de braços
public $rodas = 0; //quantidade de rodas
public $aparencia = ''; //aparencia, porque o robô pode parecer com alguma coisa
public $alinhamento = ''; //alinhamento, se é bom, mau ou neutro, ou misturas disso
public $armas = array(); //lista de armas que ele possui
public $altura = 0; //altura do robô
public $asas = 0; //quantidade de asas
public $fonteDeEnergia = 100; //porcentagem da fonte de energia que alimenta o bicho
//aqui temos um método que é usado toda vez que o robo gasta energia
//para realizar as ações ele precisa retirar energia de algum lugar
//esse método recebe um parâmetro (em porcentagem) de quanto deve
//ser subtraído dessa fonteDeEnergia
public function gastarEnergia ($quantidade) {
$this--->fonteDeEnergia -= $quantidade;
}
}
//Os transformers são robôs metamorfos que caíram na Terra vindos do planeta Cybertron
//ao chegarem aqui, assumiram formas de carros/caminhões/trens para poderem
//ficar disfarçados entre os humanos
class Transformer extends Robot {
public $transformado = false; //presumimos que a forma default dele seja a de um robô, não de um carro/avião/tanque
public $formaDefault = 'Robo Gigante'; //todos eles tem a forma "normal" de um robô gigante
public $formaDisfarcado = ''; //Como a forma quando está disfarçado varia de cada um, vamos deixar em branco
//o método transformar checa o valor da variavel transformado, se for verdadeira
//troca para falso e passa a aparencia para a forma default.
//se ele não estiver transformado, troca a aparencia para a forma disfarçado
//Veja que aparencia é herdada da classe pai. Porque todo robô tem uma aparência
//nem que seja de uma simples garra mecânica!
//Esse método também chama gastarEnergia, um método herdado da classe pai
//responsável por diminuir a energia do percentual de bateria disponível
public function transformar () {
if ($this->transformado) {
$this->transformado = false;
$this->aparencia = $this->formaDefault;
$this->gastarEnergia(0.001);
} else {
$this->transformado = true;
$this->aparencia = $this->formaDisfarcado;
$this->gastarEnergia(0.001);
}
}
}
//Os Autobots são a turma "do bem" nesse desenho/filme/brinquedo
//A única propriedade sendo atribuída nos autobots é o alinhamento
class Autobot extends Transformer {
public $alinhamento = 'ordeiro e bom'; //sabemos que todo Autobot é gente boa
}
//Bumblee será um objeto Autobot
//setaremos nome, braços, rodas e formaDisfarcado
$BumbleBee = new Autobot();
$BumbleBee->nome = 'BumbleBee';
$BumbleBee->bracos = '2';
$BumbleBee->rodas = '4';
$BumbleBee->formaDisfarcado = 'Camaro Amarelo';
//vemos que aqui a aparência de BumbleBee ainda não foi setada.
//isso é péssimo para o conceito de OO.
//Digamos que é importante para um robô ter uma forma
//então quando estamos criando objetos, é importante que ele tenha uma aparencia
//Poderíamos ter atribuído o valor diretamente à variável, mas não seria elegante
//vamos guardar essa questão para quando virmos construtos
var_dump($BumbleBee->aparencia); //string(0) ""
echo "<br>";//adicionamos duas quebras de linha para ficar mais claro
//A fonte de energia está no nível máximo
var_dump($BumbleBee->fonteDeEnergia); //int(100)
$BumbleBee->transformar(); //vamos mudar a forma
echo "<br>";
//Depois da transformação, ele assume a forma do Camaro Amarelo
var_dump($BumbleBee->aparencia);//string(14) "Camaro Amarelo"
echo "<br>";
//O percentual de energia foi diminuído com a transformação
var_dump($BumbleBee->fonteDeEnergia); //float(99.999)
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment